pi-cloudflare 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +67 -0
  3. package/bin/setup.mjs +103 -0
  4. package/dist/auth-flow.d.ts +15 -0
  5. package/dist/auth-flow.d.ts.map +1 -0
  6. package/dist/auth-flow.js +90 -0
  7. package/dist/auth-flow.js.map +1 -0
  8. package/dist/client.d.ts +18 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +47 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +13 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +10 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +24 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +109 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/oauth.d.ts +44 -0
  21. package/dist/oauth.d.ts.map +1 -0
  22. package/dist/oauth.js +135 -0
  23. package/dist/oauth.js.map +1 -0
  24. package/dist/proxy.d.ts +29 -0
  25. package/dist/proxy.d.ts.map +1 -0
  26. package/dist/proxy.js +39 -0
  27. package/dist/proxy.js.map +1 -0
  28. package/dist/servers.d.ts +19 -0
  29. package/dist/servers.d.ts.map +1 -0
  30. package/dist/servers.js +40 -0
  31. package/dist/servers.js.map +1 -0
  32. package/dist/token-store.d.ts +23 -0
  33. package/dist/token-store.d.ts.map +1 -0
  34. package/dist/token-store.js +47 -0
  35. package/dist/token-store.js.map +1 -0
  36. package/package.json +67 -0
  37. package/skills/agents-sdk/SKILL.md +221 -0
  38. package/skills/agents-sdk/references/browse-the-web.md +63 -0
  39. package/skills/agents-sdk/references/callable.md +92 -0
  40. package/skills/agents-sdk/references/client-sdk.md +110 -0
  41. package/skills/agents-sdk/references/codemode.md +110 -0
  42. package/skills/agents-sdk/references/configuration.md +72 -0
  43. package/skills/agents-sdk/references/durable-execution.md +51 -0
  44. package/skills/agents-sdk/references/email.md +146 -0
  45. package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
  46. package/skills/agents-sdk/references/mcp.md +188 -0
  47. package/skills/agents-sdk/references/observability.md +44 -0
  48. package/skills/agents-sdk/references/queue-retries.md +79 -0
  49. package/skills/agents-sdk/references/routing.md +75 -0
  50. package/skills/agents-sdk/references/server-driven-messages.md +63 -0
  51. package/skills/agents-sdk/references/state-scheduling.md +171 -0
  52. package/skills/agents-sdk/references/streaming-chat.md +198 -0
  53. package/skills/agents-sdk/references/think.md +112 -0
  54. package/skills/agents-sdk/references/voice.md +68 -0
  55. package/skills/agents-sdk/references/webhooks-push.md +86 -0
  56. package/skills/agents-sdk/references/workflows.md +132 -0
  57. package/skills/cloudflare/SKILL.md +248 -0
  58. package/skills/cloudflare/references/agents-sdk/README.md +89 -0
  59. package/skills/cloudflare/references/agents-sdk/api.md +190 -0
  60. package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
  61. package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
  62. package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
  63. package/skills/cloudflare/references/ai-gateway/README.md +175 -0
  64. package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
  65. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
  66. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  67. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
  68. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
  69. package/skills/cloudflare/references/ai-search/README.md +138 -0
  70. package/skills/cloudflare/references/ai-search/api.md +87 -0
  71. package/skills/cloudflare/references/ai-search/configuration.md +88 -0
  72. package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
  73. package/skills/cloudflare/references/ai-search/patterns.md +85 -0
  74. package/skills/cloudflare/references/analytics-engine/README.md +94 -0
  75. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  76. package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
  77. package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
  78. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  79. package/skills/cloudflare/references/api/README.md +66 -0
  80. package/skills/cloudflare/references/api/api.md +204 -0
  81. package/skills/cloudflare/references/api/configuration.md +160 -0
  82. package/skills/cloudflare/references/api/gotchas.md +225 -0
  83. package/skills/cloudflare/references/api/patterns.md +204 -0
  84. package/skills/cloudflare/references/api-shield/README.md +44 -0
  85. package/skills/cloudflare/references/api-shield/api.md +141 -0
  86. package/skills/cloudflare/references/api-shield/configuration.md +192 -0
  87. package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
  88. package/skills/cloudflare/references/api-shield/patterns.md +180 -0
  89. package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
  90. package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
  91. package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
  92. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
  93. package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
  94. package/skills/cloudflare/references/artifacts/README.md +79 -0
  95. package/skills/cloudflare/references/artifacts/api.md +128 -0
  96. package/skills/cloudflare/references/artifacts/configuration.md +92 -0
  97. package/skills/cloudflare/references/bindings/README.md +122 -0
  98. package/skills/cloudflare/references/bindings/api.md +203 -0
  99. package/skills/cloudflare/references/bindings/configuration.md +188 -0
  100. package/skills/cloudflare/references/bindings/gotchas.md +208 -0
  101. package/skills/cloudflare/references/bindings/patterns.md +200 -0
  102. package/skills/cloudflare/references/bot-management/README.md +94 -0
  103. package/skills/cloudflare/references/bot-management/api.md +169 -0
  104. package/skills/cloudflare/references/bot-management/configuration.md +163 -0
  105. package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
  106. package/skills/cloudflare/references/bot-management/patterns.md +182 -0
  107. package/skills/cloudflare/references/browser-rendering/README.md +78 -0
  108. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  109. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  110. package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
  111. package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
  112. package/skills/cloudflare/references/c3/README.md +111 -0
  113. package/skills/cloudflare/references/c3/api.md +71 -0
  114. package/skills/cloudflare/references/c3/configuration.md +81 -0
  115. package/skills/cloudflare/references/c3/gotchas.md +92 -0
  116. package/skills/cloudflare/references/c3/patterns.md +82 -0
  117. package/skills/cloudflare/references/cache-reserve/README.md +147 -0
  118. package/skills/cloudflare/references/cache-reserve/api.md +194 -0
  119. package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
  120. package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
  121. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  122. package/skills/cloudflare/references/containers/README.md +85 -0
  123. package/skills/cloudflare/references/containers/api.md +187 -0
  124. package/skills/cloudflare/references/containers/configuration.md +188 -0
  125. package/skills/cloudflare/references/containers/gotchas.md +178 -0
  126. package/skills/cloudflare/references/containers/patterns.md +202 -0
  127. package/skills/cloudflare/references/cron-triggers/README.md +99 -0
  128. package/skills/cloudflare/references/cron-triggers/api.md +196 -0
  129. package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
  130. package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
  131. package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
  132. package/skills/cloudflare/references/d1/README.md +133 -0
  133. package/skills/cloudflare/references/d1/api.md +196 -0
  134. package/skills/cloudflare/references/d1/configuration.md +191 -0
  135. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  136. package/skills/cloudflare/references/d1/patterns.md +189 -0
  137. package/skills/cloudflare/references/ddos/README.md +41 -0
  138. package/skills/cloudflare/references/ddos/api.md +164 -0
  139. package/skills/cloudflare/references/ddos/configuration.md +93 -0
  140. package/skills/cloudflare/references/ddos/gotchas.md +107 -0
  141. package/skills/cloudflare/references/ddos/patterns.md +174 -0
  142. package/skills/cloudflare/references/do-storage/README.md +75 -0
  143. package/skills/cloudflare/references/do-storage/api.md +102 -0
  144. package/skills/cloudflare/references/do-storage/configuration.md +112 -0
  145. package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
  146. package/skills/cloudflare/references/do-storage/patterns.md +194 -0
  147. package/skills/cloudflare/references/do-storage/testing.md +183 -0
  148. package/skills/cloudflare/references/durable-objects/README.md +185 -0
  149. package/skills/cloudflare/references/durable-objects/api.md +187 -0
  150. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  151. package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
  152. package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
  153. package/skills/cloudflare/references/email-routing/README.md +89 -0
  154. package/skills/cloudflare/references/email-routing/api.md +195 -0
  155. package/skills/cloudflare/references/email-routing/configuration.md +186 -0
  156. package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
  157. package/skills/cloudflare/references/email-routing/patterns.md +229 -0
  158. package/skills/cloudflare/references/email-workers/README.md +151 -0
  159. package/skills/cloudflare/references/email-workers/api.md +237 -0
  160. package/skills/cloudflare/references/email-workers/configuration.md +112 -0
  161. package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
  162. package/skills/cloudflare/references/email-workers/patterns.md +102 -0
  163. package/skills/cloudflare/references/flagship/README.md +59 -0
  164. package/skills/cloudflare/references/flagship/api.md +390 -0
  165. package/skills/cloudflare/references/flagship/configuration.md +202 -0
  166. package/skills/cloudflare/references/flagship/gotchas.md +178 -0
  167. package/skills/cloudflare/references/flagship/patterns.md +469 -0
  168. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  169. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  170. package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
  171. package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
  172. package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
  173. package/skills/cloudflare/references/hyperdrive/README.md +82 -0
  174. package/skills/cloudflare/references/hyperdrive/api.md +143 -0
  175. package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
  176. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  177. package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
  178. package/skills/cloudflare/references/images/README.md +61 -0
  179. package/skills/cloudflare/references/images/api.md +96 -0
  180. package/skills/cloudflare/references/images/configuration.md +211 -0
  181. package/skills/cloudflare/references/images/gotchas.md +99 -0
  182. package/skills/cloudflare/references/images/patterns.md +115 -0
  183. package/skills/cloudflare/references/kv/README.md +89 -0
  184. package/skills/cloudflare/references/kv/api.md +160 -0
  185. package/skills/cloudflare/references/kv/configuration.md +144 -0
  186. package/skills/cloudflare/references/kv/gotchas.md +131 -0
  187. package/skills/cloudflare/references/kv/patterns.md +196 -0
  188. package/skills/cloudflare/references/miniflare/README.md +105 -0
  189. package/skills/cloudflare/references/miniflare/api.md +187 -0
  190. package/skills/cloudflare/references/miniflare/configuration.md +173 -0
  191. package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
  192. package/skills/cloudflare/references/miniflare/patterns.md +181 -0
  193. package/skills/cloudflare/references/network-interconnect/README.md +99 -0
  194. package/skills/cloudflare/references/network-interconnect/api.md +199 -0
  195. package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
  196. package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
  197. package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
  198. package/skills/cloudflare/references/observability/README.md +88 -0
  199. package/skills/cloudflare/references/observability/api.md +164 -0
  200. package/skills/cloudflare/references/observability/configuration.md +169 -0
  201. package/skills/cloudflare/references/observability/gotchas.md +115 -0
  202. package/skills/cloudflare/references/observability/patterns.md +105 -0
  203. package/skills/cloudflare/references/pages/README.md +88 -0
  204. package/skills/cloudflare/references/pages/api.md +204 -0
  205. package/skills/cloudflare/references/pages/configuration.md +201 -0
  206. package/skills/cloudflare/references/pages/gotchas.md +203 -0
  207. package/skills/cloudflare/references/pages/patterns.md +204 -0
  208. package/skills/cloudflare/references/pages-functions/README.md +98 -0
  209. package/skills/cloudflare/references/pages-functions/api.md +143 -0
  210. package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
  211. package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
  212. package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
  213. package/skills/cloudflare/references/pipelines/README.md +90 -0
  214. package/skills/cloudflare/references/pipelines/api.md +124 -0
  215. package/skills/cloudflare/references/pipelines/configuration.md +155 -0
  216. package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
  217. package/skills/cloudflare/references/pipelines/patterns.md +130 -0
  218. package/skills/cloudflare/references/pulumi/README.md +100 -0
  219. package/skills/cloudflare/references/pulumi/api.md +200 -0
  220. package/skills/cloudflare/references/pulumi/configuration.md +198 -0
  221. package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
  222. package/skills/cloudflare/references/pulumi/patterns.md +191 -0
  223. package/skills/cloudflare/references/queues/README.md +96 -0
  224. package/skills/cloudflare/references/queues/api.md +206 -0
  225. package/skills/cloudflare/references/queues/configuration.md +144 -0
  226. package/skills/cloudflare/references/queues/gotchas.md +206 -0
  227. package/skills/cloudflare/references/queues/patterns.md +220 -0
  228. package/skills/cloudflare/references/r2/README.md +95 -0
  229. package/skills/cloudflare/references/r2/api.md +200 -0
  230. package/skills/cloudflare/references/r2/configuration.md +165 -0
  231. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  232. package/skills/cloudflare/references/r2/patterns.md +193 -0
  233. package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
  234. package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
  235. package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
  236. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
  237. package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
  238. package/skills/cloudflare/references/r2-sql/README.md +64 -0
  239. package/skills/cloudflare/references/r2-sql/api.md +121 -0
  240. package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
  241. package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
  242. package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
  243. package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
  244. package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
  245. package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
  246. package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
  247. package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
  248. package/skills/cloudflare/references/realtimekit/README.md +113 -0
  249. package/skills/cloudflare/references/realtimekit/api.md +212 -0
  250. package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
  251. package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
  252. package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
  253. package/skills/cloudflare/references/sandbox/README.md +96 -0
  254. package/skills/cloudflare/references/sandbox/api.md +198 -0
  255. package/skills/cloudflare/references/sandbox/configuration.md +143 -0
  256. package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
  257. package/skills/cloudflare/references/sandbox/patterns.md +201 -0
  258. package/skills/cloudflare/references/secrets-store/README.md +74 -0
  259. package/skills/cloudflare/references/secrets-store/api.md +200 -0
  260. package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
  261. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  262. package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
  263. package/skills/cloudflare/references/smart-placement/README.md +138 -0
  264. package/skills/cloudflare/references/smart-placement/api.md +183 -0
  265. package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
  266. package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
  267. package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
  268. package/skills/cloudflare/references/snippets/README.md +68 -0
  269. package/skills/cloudflare/references/snippets/api.md +198 -0
  270. package/skills/cloudflare/references/snippets/configuration.md +227 -0
  271. package/skills/cloudflare/references/snippets/gotchas.md +86 -0
  272. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  273. package/skills/cloudflare/references/spectrum/README.md +52 -0
  274. package/skills/cloudflare/references/spectrum/api.md +181 -0
  275. package/skills/cloudflare/references/spectrum/configuration.md +194 -0
  276. package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
  277. package/skills/cloudflare/references/spectrum/patterns.md +196 -0
  278. package/skills/cloudflare/references/static-assets/README.md +65 -0
  279. package/skills/cloudflare/references/static-assets/api.md +199 -0
  280. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  281. package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
  282. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  283. package/skills/cloudflare/references/stream/README.md +114 -0
  284. package/skills/cloudflare/references/stream/api-live.md +195 -0
  285. package/skills/cloudflare/references/stream/api.md +199 -0
  286. package/skills/cloudflare/references/stream/configuration.md +141 -0
  287. package/skills/cloudflare/references/stream/gotchas.md +130 -0
  288. package/skills/cloudflare/references/stream/patterns.md +184 -0
  289. package/skills/cloudflare/references/tail-workers/README.md +89 -0
  290. package/skills/cloudflare/references/tail-workers/api.md +200 -0
  291. package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
  292. package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
  293. package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
  294. package/skills/cloudflare/references/terraform/README.md +102 -0
  295. package/skills/cloudflare/references/terraform/api.md +178 -0
  296. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  297. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  298. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  299. package/skills/cloudflare/references/tunnel/README.md +129 -0
  300. package/skills/cloudflare/references/tunnel/api.md +193 -0
  301. package/skills/cloudflare/references/tunnel/configuration.md +157 -0
  302. package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
  303. package/skills/cloudflare/references/tunnel/networking.md +168 -0
  304. package/skills/cloudflare/references/tunnel/patterns.md +192 -0
  305. package/skills/cloudflare/references/turn/README.md +82 -0
  306. package/skills/cloudflare/references/turn/api.md +239 -0
  307. package/skills/cloudflare/references/turn/configuration.md +179 -0
  308. package/skills/cloudflare/references/turn/gotchas.md +231 -0
  309. package/skills/cloudflare/references/turn/patterns.md +213 -0
  310. package/skills/cloudflare/references/turnstile/README.md +99 -0
  311. package/skills/cloudflare/references/turnstile/api.md +240 -0
  312. package/skills/cloudflare/references/turnstile/configuration.md +222 -0
  313. package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
  314. package/skills/cloudflare/references/turnstile/patterns.md +193 -0
  315. package/skills/cloudflare/references/vectorize/README.md +133 -0
  316. package/skills/cloudflare/references/vectorize/api.md +88 -0
  317. package/skills/cloudflare/references/vectorize/configuration.md +88 -0
  318. package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
  319. package/skills/cloudflare/references/vectorize/patterns.md +90 -0
  320. package/skills/cloudflare/references/waf/README.md +113 -0
  321. package/skills/cloudflare/references/waf/api.md +202 -0
  322. package/skills/cloudflare/references/waf/configuration.md +203 -0
  323. package/skills/cloudflare/references/waf/gotchas.md +204 -0
  324. package/skills/cloudflare/references/waf/patterns.md +197 -0
  325. package/skills/cloudflare/references/web-analytics/README.md +141 -0
  326. package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
  327. package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
  328. package/skills/cloudflare/references/web-analytics/integration.md +60 -0
  329. package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
  330. package/skills/cloudflare/references/workerd/README.md +78 -0
  331. package/skills/cloudflare/references/workerd/api.md +185 -0
  332. package/skills/cloudflare/references/workerd/configuration.md +183 -0
  333. package/skills/cloudflare/references/workerd/gotchas.md +139 -0
  334. package/skills/cloudflare/references/workerd/patterns.md +192 -0
  335. package/skills/cloudflare/references/workers/README.md +108 -0
  336. package/skills/cloudflare/references/workers/api.md +195 -0
  337. package/skills/cloudflare/references/workers/configuration.md +185 -0
  338. package/skills/cloudflare/references/workers/frameworks.md +197 -0
  339. package/skills/cloudflare/references/workers/gotchas.md +137 -0
  340. package/skills/cloudflare/references/workers/patterns.md +198 -0
  341. package/skills/cloudflare/references/workers-ai/README.md +197 -0
  342. package/skills/cloudflare/references/workers-ai/api.md +112 -0
  343. package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
  344. package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
  345. package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
  346. package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
  347. package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
  348. package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
  349. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  350. package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
  351. package/skills/cloudflare/references/workers-playground/README.md +127 -0
  352. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  353. package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
  354. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  355. package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
  356. package/skills/cloudflare/references/workers-vpc/README.md +127 -0
  357. package/skills/cloudflare/references/workers-vpc/api.md +202 -0
  358. package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
  359. package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
  360. package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
  361. package/skills/cloudflare/references/workflows/README.md +77 -0
  362. package/skills/cloudflare/references/workflows/api.md +218 -0
  363. package/skills/cloudflare/references/workflows/configuration.md +152 -0
  364. package/skills/cloudflare/references/workflows/gotchas.md +90 -0
  365. package/skills/cloudflare/references/workflows/patterns.md +175 -0
  366. package/skills/cloudflare/references/wrangler/README.md +135 -0
  367. package/skills/cloudflare/references/wrangler/api.md +188 -0
  368. package/skills/cloudflare/references/wrangler/configuration.md +197 -0
  369. package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
  370. package/skills/cloudflare/references/wrangler/patterns.md +209 -0
  371. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
  372. package/skills/cloudflare/references/zaraz/README.md +111 -0
  373. package/skills/cloudflare/references/zaraz/api.md +112 -0
  374. package/skills/cloudflare/references/zaraz/configuration.md +90 -0
  375. package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
  376. package/skills/cloudflare/references/zaraz/patterns.md +74 -0
  377. package/skills/cloudflare-email-service/SKILL.md +103 -0
  378. package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
  379. package/skills/cloudflare-email-service/references/deliverability.md +285 -0
  380. package/skills/cloudflare-email-service/references/rest-api.md +184 -0
  381. package/skills/cloudflare-email-service/references/routing.md +199 -0
  382. package/skills/cloudflare-email-service/references/sending.md +252 -0
  383. package/skills/cloudflare-one/SKILL.md +176 -0
  384. package/skills/cloudflare-one-migrations/SKILL.md +110 -0
  385. package/skills/durable-objects/SKILL.md +186 -0
  386. package/skills/durable-objects/references/rules.md +295 -0
  387. package/skills/durable-objects/references/testing.md +264 -0
  388. package/skills/durable-objects/references/workers.md +346 -0
  389. package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
  390. package/skills/sandbox-next/SKILL.md +91 -0
  391. package/skills/sandbox-next/references/api-quick-ref.md +94 -0
  392. package/skills/sandbox-next/references/examples.md +15 -0
  393. package/skills/sandbox-stable/SKILL.md +110 -0
  394. package/skills/turnstile-spin/README.md +51 -0
  395. package/skills/turnstile-spin/SKILL.md +330 -0
  396. package/skills/turnstile-spin/references/astro.md +199 -0
  397. package/skills/turnstile-spin/references/hugo.md +114 -0
  398. package/skills/turnstile-spin/references/nextjs-app.md +261 -0
  399. package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
  400. package/skills/turnstile-spin/references/sveltekit.md +191 -0
  401. package/skills/turnstile-spin/references/vanilla-html.md +157 -0
  402. package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
  403. package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
  404. package/skills/turnstile-spin/scripts/validate.sh +137 -0
  405. package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
  406. package/skills/turnstile-spin/tests/validation.md +62 -0
  407. package/skills/workers-best-practices/SKILL.md +127 -0
  408. package/skills/workers-best-practices/references/review.md +174 -0
  409. package/skills/workers-best-practices/references/rules.md +467 -0
  410. package/skills/wrangler/SKILL.md +922 -0
@@ -0,0 +1,182 @@
1
+ # Configuration
2
+
3
+ ## Wrangler Setup
4
+
5
+ ```jsonc
6
+ {
7
+ "name": "my-agents-app",
8
+ "durable_objects": {
9
+ "bindings": [
10
+ {"name": "MyAgent", "class_name": "MyAgent"}
11
+ ]
12
+ },
13
+ "migrations": [
14
+ {"tag": "v1", "new_sqlite_classes": ["MyAgent"]}
15
+ ],
16
+ "ai": {
17
+ "binding": "AI"
18
+ }
19
+ }
20
+ ```
21
+
22
+ ## Environment Bindings
23
+
24
+ **Type-safe pattern:**
25
+
26
+ ```typescript
27
+ interface Env {
28
+ AI?: Ai; // Workers AI
29
+ MyAgent?: DurableObjectNamespace<MyAgent>;
30
+ ChatAgent?: DurableObjectNamespace<ChatAgent>;
31
+ DB?: D1Database; // D1 database
32
+ KV?: KVNamespace; // KV storage
33
+ R2?: R2Bucket; // R2 bucket
34
+ OPENAI_API_KEY?: string; // Secrets
35
+ GITHUB_CLIENT_ID?: string; // MCP OAuth credentials
36
+ GITHUB_CLIENT_SECRET?: string;
37
+ QUEUE?: Queue; // Queues
38
+ }
39
+ ```
40
+
41
+ **Best practice:** Define all DO bindings in Env interface for type safety.
42
+
43
+ ## Deployment
44
+
45
+ ```bash
46
+ # Local dev
47
+ npx wrangler dev
48
+
49
+ # Deploy production
50
+ npx wrangler deploy
51
+
52
+ # Set secrets
53
+ npx wrangler secret put OPENAI_API_KEY
54
+ ```
55
+
56
+ ## Agent Routing
57
+
58
+ **Recommended: Use route helpers**
59
+
60
+ ```typescript
61
+ import { routeAgentRequest } from "agents";
62
+
63
+ export default {
64
+ fetch(request: Request, env: Env) {
65
+ return routeAgentRequest(request, env);
66
+ }
67
+ }
68
+ ```
69
+
70
+ Helper routes requests to agents automatically based on URL patterns.
71
+
72
+ **Manual routing (advanced):**
73
+
74
+ ```typescript
75
+ export default {
76
+ async fetch(request: Request, env: Env) {
77
+ const url = new URL(request.url);
78
+
79
+ // Named ID (deterministic)
80
+ const id = env.MyAgent.idFromName("user-123");
81
+
82
+ // Random ID (from URL param)
83
+ // const id = env.MyAgent.idFromString(url.searchParams.get("id"));
84
+
85
+ const stub = env.MyAgent.get(id);
86
+ return stub.fetch(request);
87
+ }
88
+ }
89
+ ```
90
+
91
+ **Multi-agent setup:**
92
+
93
+ ```typescript
94
+ import { routeAgentRequest } from "agents";
95
+
96
+ export default {
97
+ fetch(request: Request, env: Env) {
98
+ const url = new URL(request.url);
99
+
100
+ // Route by path
101
+ if (url.pathname.startsWith("/chat")) {
102
+ return routeAgentRequest(request, env, "ChatAgent");
103
+ }
104
+ if (url.pathname.startsWith("/task")) {
105
+ return routeAgentRequest(request, env, "TaskAgent");
106
+ }
107
+
108
+ return new Response("Not found", { status: 404 });
109
+ }
110
+ }
111
+ ```
112
+
113
+ ## Email Routing
114
+
115
+ **Code setup:**
116
+
117
+ ```typescript
118
+ import { routeAgentEmail } from "agents";
119
+
120
+ export default {
121
+ fetch: (req: Request, env: Env) => routeAgentRequest(req, env),
122
+ email: (message: ForwardableEmailMessage, env: Env) => {
123
+ return routeAgentEmail(message, env);
124
+ }
125
+ }
126
+ ```
127
+
128
+ **Dashboard setup:**
129
+
130
+ Configure email routing in Cloudflare dashboard:
131
+
132
+ ```
133
+ Destination: Workers with Durable Objects
134
+ Worker: my-agents-app
135
+ ```
136
+
137
+ Then handle in agent:
138
+
139
+ ```typescript
140
+ export class EmailAgent extends Agent<Env> {
141
+ async onEmail(email: AgentEmail) {
142
+ const text = await email.text();
143
+ // Process email
144
+ }
145
+ }
146
+ ```
147
+
148
+ ## AI Gateway (Optional)
149
+
150
+ ```typescript
151
+ // Enable caching/routing through AI Gateway
152
+ const response = await this.env.AI.run(
153
+ "@cf/meta/llama-3.1-8b-instruct",
154
+ { prompt },
155
+ {
156
+ gateway: {
157
+ id: "my-gateway-id",
158
+ skipCache: false,
159
+ cacheTtl: 3600
160
+ }
161
+ }
162
+ );
163
+ ```
164
+
165
+ ## MCP Configuration (Optional)
166
+
167
+ For exposing tools via Model Context Protocol:
168
+
169
+ ```typescript
170
+ // wrangler.jsonc - Add MCP OAuth secrets
171
+ {
172
+ "vars": {
173
+ "MCP_SERVER_URL": "https://mcp.example.com"
174
+ }
175
+ }
176
+
177
+ // Set secrets via CLI
178
+ // npx wrangler secret put GITHUB_CLIENT_ID
179
+ // npx wrangler secret put GITHUB_CLIENT_SECRET
180
+ ```
181
+
182
+ Then register in agent code (see api.md MCP section).
@@ -0,0 +1,158 @@
1
+ # Gotchas & Best Practices
2
+
3
+ ## Common Errors
4
+
5
+ ### "setState() not syncing"
6
+
7
+ **Cause:** Mutating state directly or not calling `setState()` after modifications
8
+ **Solution:** Always use `setState()` with immutable updates:
9
+ ```ts
10
+ // ❌ this.state.count++
11
+ // ✅ this.setState({...this.state, count: this.state.count + 1})
12
+ ```
13
+
14
+ ### "Message history grows unbounded (AIChatAgent)"
15
+
16
+ **Cause:** `this.messages` in `AIChatAgent` accumulates all messages indefinitely
17
+ **Solution:** Manually trim old messages periodically:
18
+ ```ts
19
+ export class ChatAgent extends AIChatAgent<Env> {
20
+ async onChatMessage(onFinish) {
21
+ // Keep only last 50 messages
22
+ if (this.messages.length > 50) {
23
+ this.messages = this.messages.slice(-50);
24
+ }
25
+
26
+ return this.streamText({ model: openai("gpt-4"), messages: this.messages, onFinish });
27
+ }
28
+ }
29
+ ```
30
+
31
+ ### "SQL injection vulnerability"
32
+
33
+ **Cause:** Direct string interpolation in SQL queries
34
+ **Solution:** Use parameterized queries:
35
+ ```ts
36
+ // ❌ this.sql`...WHERE id = '${userId}'`
37
+ // ✅ this.sql`...WHERE id = ${userId}`
38
+ ```
39
+
40
+ ### "WebSocket connection timeout"
41
+
42
+ **Cause:** Not calling `conn.accept()` in `onConnect`
43
+ **Solution:** Always accept connections:
44
+ ```ts
45
+ async onConnect(conn: Connection, ctx: ConnectionContext) { conn.accept(); conn.setState({userId: "123"}); }
46
+ ```
47
+
48
+ ### "Schedule limit exceeded"
49
+
50
+ **Cause:** More than 1000 scheduled tasks per agent
51
+ **Solution:** Clean up old schedules and limit creation rate:
52
+ ```ts
53
+ async checkSchedules() { if ((await this.getSchedules()).length > 800) console.warn("Near limit!"); }
54
+ ```
55
+
56
+ ### "AI Gateway unavailable"
57
+
58
+ **Cause:** AI service timeout or quota exceeded
59
+ **Solution:** Add error handling and fallbacks:
60
+ ```ts
61
+ try {
62
+ return await this.env.AI.run(model, {prompt});
63
+ } catch (e) {
64
+ console.error("AI error:", e);
65
+ return {error: "Unavailable"};
66
+ }
67
+ ```
68
+
69
+ ### "@callable method returns undefined"
70
+
71
+ **Cause:** Method doesn't return JSON-serializable value, or has non-serializable types
72
+ **Solution:** Ensure return values are plain objects/arrays/primitives:
73
+ ```ts
74
+ // ❌ Returns class instance
75
+ @callable()
76
+ async getData() { return new Date(); }
77
+
78
+ // ✅ Returns serializable object
79
+ @callable()
80
+ async getData() { return { timestamp: Date.now() }; }
81
+ ```
82
+
83
+ ### "Resumable stream not resuming"
84
+
85
+ **Cause:** Stream ID must be deterministic for resumption to work
86
+ **Solution:** Use AIChatAgent (automatic) or ensure consistent stream IDs:
87
+ ```ts
88
+ // AIChatAgent handles this automatically
89
+ export class ChatAgent extends AIChatAgent<Env> {
90
+ // Resumption works out of the box
91
+ }
92
+ ```
93
+
94
+ ### "MCP connection loss on hibernation"
95
+
96
+ **Cause:** MCP server connections don't survive hibernation
97
+ **Solution:** Re-register servers in `onStart()` or check connection status:
98
+ ```ts
99
+ onStart() {
100
+ // Re-register MCP servers after hibernation
101
+ await this.mcp.registerServer("github", { url: env.MCP_URL, auth: {...} });
102
+ }
103
+ ```
104
+
105
+ ### "Agent not found"
106
+
107
+ **Cause:** Durable Object binding missing or incorrect class name
108
+ **Solution:** Verify DO binding in wrangler.jsonc and class name matches
109
+
110
+ ## Rate Limits & Quotas
111
+
112
+ | Resource/Limit | Value | Notes |
113
+ |----------------|-------|-------|
114
+ | CPU per request | 30s (std), 300s (max) | Set in wrangler.jsonc |
115
+ | Memory per instance | 128MB | Shared with WebSockets |
116
+ | Storage per agent | 10GB | SQLite storage |
117
+ | Scheduled tasks | 1000 per agent | Monitor with `getSchedules()` |
118
+ | WebSocket connections | Unlimited | Within memory limits |
119
+ | SQL columns | 100 | Per table |
120
+ | SQL row size | 2MB | Key + value |
121
+ | WebSocket message | 32MiB | Max size |
122
+ | DO requests/sec | ~1000 | Per unique DO instance; rate limit if needed |
123
+ | AI Gateway (Workers AI) | Model-specific | Check dashboard for limits |
124
+ | MCP requests | Depends on server | Implement retry/backoff |
125
+
126
+ ## Best Practices
127
+
128
+ ### State Management
129
+ - Use immutable updates: `setState({...this.state, key: newValue})`
130
+ - Trim unbounded arrays (messages, logs) periodically
131
+ - Store large data in SQL, not state
132
+
133
+ ### SQL Usage
134
+ - Create tables in `onStart()`, not `onRequest()`
135
+ - Use parameterized queries: `` sql`WHERE id = ${id}` `` (NOT `` sql`WHERE id = '${id}'` ``)
136
+ - Index frequently queried columns
137
+
138
+ ### Scheduling
139
+ - Monitor schedule count: `await this.getSchedules()`
140
+ - Cancel completed tasks to stay under 1000 limit
141
+ - Use cron strings for recurring tasks
142
+
143
+ ### WebSockets
144
+ - Always call `conn.accept()` in `onConnect()`
145
+ - Handle client disconnects gracefully
146
+ - Broadcast to `this.connections` efficiently
147
+
148
+ ### AI Integration
149
+ - Use `AIChatAgent` for chat interfaces (auto-streaming, resumption)
150
+ - Trim message history to avoid token limits
151
+ - Handle AI errors with try/catch and fallbacks
152
+
153
+ ### Production Deployment
154
+ - **Rate limiting:** Implement request throttling for high-traffic agents (>1000 req/s)
155
+ - **Monitoring:** Log critical errors, track schedule count, monitor storage usage
156
+ - **Graceful degradation:** Handle AI service outages with fallbacks
157
+ - **Message trimming:** Enforce max history length (e.g., 100 messages) in AIChatAgent
158
+ - **MCP reliability:** Re-register servers on hibernation, implement retry logic
@@ -0,0 +1,192 @@
1
+ # Patterns & Use Cases
2
+
3
+ ## AI Chat w/Tools
4
+
5
+ **Server (AIChatAgent):**
6
+
7
+ ```ts
8
+ import { AIChatAgent } from "@cloudflare/ai-chat";
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 }) => JSON.stringify(
28
+ this.sql<{title, content}>`SELECT title, content FROM docs WHERE content LIKE ${'%' + query + '%'}`
29
+ )
30
+ })
31
+ },
32
+ onFinish,
33
+ });
34
+ }
35
+ }
36
+ ```
37
+
38
+ **Client (React):**
39
+
40
+ ```tsx
41
+ import { useAgent } from "agents/react";
42
+ import { useAgentChat } from "@cloudflare/ai-chat/react";
43
+
44
+ function ChatUI() {
45
+ const agent = useAgent({ agent: "ChatAgent" });
46
+ const { messages, input, handleInputChange, handleSubmit, isLoading } = useAgentChat({ agent });
47
+
48
+ return (
49
+ <div>
50
+ {messages.map(m => <div key={m.id}>{m.role}: {m.content}</div>)}
51
+ <form onSubmit={handleSubmit}>
52
+ <input value={input} onChange={handleInputChange} disabled={isLoading} />
53
+ <button disabled={isLoading}>Send</button>
54
+ </form>
55
+ </div>
56
+ );
57
+ }
58
+ ```
59
+
60
+ ## Human-in-the-Loop (Client Tools)
61
+
62
+ Server defines tool, client executes:
63
+
64
+ ```ts
65
+ // Server
66
+ export class ChatAgent extends AIChatAgent<Env> {
67
+ async onChatMessage(onFinish) {
68
+ return this.streamText({
69
+ model: openai("gpt-4"),
70
+ messages: this.messages,
71
+ tools: {
72
+ confirmAction: tool({
73
+ description: "Ask user to confirm",
74
+ parameters: z.object({ action: z.string() }),
75
+ execute: "client", // Client-side execution
76
+ })
77
+ },
78
+ onFinish,
79
+ });
80
+ }
81
+ }
82
+
83
+ // Client
84
+ const { messages } = useAgentChat({
85
+ agent,
86
+ onToolCall: async (toolCall) => {
87
+ if (toolCall.toolName === "confirmAction") {
88
+ return { confirmed: window.confirm(`Confirm: ${toolCall.args.action}?`) };
89
+ }
90
+ }
91
+ });
92
+ ```
93
+
94
+ ## Task Queue & Scheduled Processing
95
+
96
+ ```ts
97
+ export class TaskAgent extends Agent<Env> {
98
+ onStart() {
99
+ this.schedule("*/5 * * * *", "processQueue", {}); // Every 5 min
100
+ this.schedule("0 0 * * *", "dailyCleanup", {}); // Daily
101
+ }
102
+
103
+ async onRequest(req: Request) {
104
+ await this.queue("processVideo", { videoId: (await req.json()).videoId });
105
+ return Response.json({ queued: true });
106
+ }
107
+
108
+ async processQueue() {
109
+ const tasks = await this.dequeue(10);
110
+ for (const task of tasks) {
111
+ if (task.name === "processVideo") await this.processVideo(task.data.videoId);
112
+ }
113
+ }
114
+
115
+ async dailyCleanup() {
116
+ this.sql`DELETE FROM logs WHERE created_at < ${Date.now() - 86400000}`;
117
+ }
118
+ }
119
+ ```
120
+
121
+ ## Manual WebSocket Chat
122
+
123
+ Custom protocols (non-AI):
124
+
125
+ ```ts
126
+ export class ChatAgent extends Agent<Env> {
127
+ async onConnect(conn: Connection, ctx: ConnectionContext) {
128
+ conn.accept();
129
+ conn.setState({userId: ctx.request.headers.get("X-User-ID") || "anon"});
130
+ conn.send(JSON.stringify({type: "history", messages: this.state.messages}));
131
+ }
132
+
133
+ async onMessage(conn: Connection, msg: WSMessage) {
134
+ const newMsg = {userId: conn.state.userId, text: JSON.parse(msg as string).text, timestamp: Date.now()};
135
+ this.setState({messages: [...this.state.messages, newMsg]});
136
+ this.connections.forEach(c => c.send(JSON.stringify(newMsg)));
137
+ }
138
+ }
139
+ ```
140
+
141
+ ## Email Processing w/AI
142
+
143
+ ```ts
144
+ export class EmailAgent extends Agent<Env> {
145
+ async onEmail(email: AgentEmail) {
146
+ const [text, from, subject] = [await email.text(), email.from, email.headers.get("subject") || ""];
147
+ this.sql`INSERT INTO emails (from_addr, subject, body) VALUES (${from}, ${subject}, ${text})`;
148
+
149
+ const { text: summary } = await generateText({
150
+ model: openai("gpt-4o-mini"), prompt: `Summarize: ${subject}\n\n${text}`
151
+ });
152
+
153
+ this.connections.forEach(c => c.send(JSON.stringify({type: "new_email", from, summary})));
154
+ if (summary.includes("urgent")) await this.schedule(0, "sendAutoReply", { to: from });
155
+ }
156
+ }
157
+ ```
158
+
159
+ ## Real-time Collaboration
160
+
161
+ ```ts
162
+ export class GameAgent extends Agent<Env> {
163
+ initialState = { players: [], gameStarted: false };
164
+
165
+ async onConnect(conn: Connection, ctx: ConnectionContext) {
166
+ conn.accept();
167
+ const playerId = ctx.request.headers.get("X-Player-ID") || crypto.randomUUID();
168
+ conn.setState({ playerId });
169
+
170
+ const newPlayer = { id: playerId, score: 0 };
171
+ this.setState({...this.state, players: [...this.state.players, newPlayer]});
172
+ this.connections.forEach(c => c.send(JSON.stringify({type: "player_joined", player: newPlayer})));
173
+ }
174
+
175
+ async onMessage(conn: Connection, msg: WSMessage) {
176
+ const m = JSON.parse(msg as string);
177
+
178
+ if (m.type === "move") {
179
+ this.setState({
180
+ ...this.state,
181
+ players: this.state.players.map(p => p.id === conn.state.playerId ? {...p, score: p.score + m.points} : p)
182
+ });
183
+ this.connections.forEach(c => c.send(JSON.stringify({type: "player_moved", playerId: conn.state.playerId})));
184
+ }
185
+
186
+ if (m.type === "start" && this.state.players.length >= 2) {
187
+ this.setState({...this.state, gameStarted: true});
188
+ this.connections.forEach(c => c.send(JSON.stringify({type: "game_started"})));
189
+ }
190
+ }
191
+ }
192
+ ```
@@ -0,0 +1,175 @@
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
+ - Unified API (OpenAI-compatible): `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions`
150
+ - Provider-specific: `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/{provider}/{endpoint}`
151
+ - Dynamic routes: Use route name instead of model: `dynamic/{route-name}`
152
+
153
+ ## Gateway Types
154
+
155
+ 1. **Unauthenticated Gateway**: Open access (not recommended for production)
156
+ 2. **Authenticated Gateway**: Requires `cf-aig-authorization` header with Cloudflare API token (recommended)
157
+
158
+ ## Provider Authentication Options
159
+
160
+ 1. **Unified Billing**: Use AI Gateway billing to pay for inference (keyless mode - no provider API key needed)
161
+ 2. **BYOK (Store Keys)**: Store provider API keys in Cloudflare dashboard
162
+ 3. **Request Headers**: Include provider API key in each request
163
+
164
+ ## Related Skills
165
+
166
+ - [Workers AI](../workers-ai/README.md) - For `env.AI.run()` details
167
+ - [Agents SDK](../agents-sdk/README.md) - For stateful AI patterns
168
+ - [Vectorize](../vectorize/README.md) - For RAG patterns with embeddings
169
+
170
+ ## Resources
171
+
172
+ - [Official Docs](https://developers.cloudflare.com/ai-gateway/)
173
+ - [API Reference](https://developers.cloudflare.com/api/resources/ai_gateway/)
174
+ - [Provider Guides](https://developers.cloudflare.com/ai-gateway/usage/providers/)
175
+ - [Discord Community](https://discord.cloudflare.com)