opencodekit 0.15.3 → 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.
Files changed (321) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/template/.opencode/AGENTS.md +209 -77
  3. package/dist/template/.opencode/agent/plan.md +4 -0
  4. package/dist/template/.opencode/command/cloudflare.md +70 -0
  5. package/dist/template/.opencode/package.json +1 -1
  6. package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
  7. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  8. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  9. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  10. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  11. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  12. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  13. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  14. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  15. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  16. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  17. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  18. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  19. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  20. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  21. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  22. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  23. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  24. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  25. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  26. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  27. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  28. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  29. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  30. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  31. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  32. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  33. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  34. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  35. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  36. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  37. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  38. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  39. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  40. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  41. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  42. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  43. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  44. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  45. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  46. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  47. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  48. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  49. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  50. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  51. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  52. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  53. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  54. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  55. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  56. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  57. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  58. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  59. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  60. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  61. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  62. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  63. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  64. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  65. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  66. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  67. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  68. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  69. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  70. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  71. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  72. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  73. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  74. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  75. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  76. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  77. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  78. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  79. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  80. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  81. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  82. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  83. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  84. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  85. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  86. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  87. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  88. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  89. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  90. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  91. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  92. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  93. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  94. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  95. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  96. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  97. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  98. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  99. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  100. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  101. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  102. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  103. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  104. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  105. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  106. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  107. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  108. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  109. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  110. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  111. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  112. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  113. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  114. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  115. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  116. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  117. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  118. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  119. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  120. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  121. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  122. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  123. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  124. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  125. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  126. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  127. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  128. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  129. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  130. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  131. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  132. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  133. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  134. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  135. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  136. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  137. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  138. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  139. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  140. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  141. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  142. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  143. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  144. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  145. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  146. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  147. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  148. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  149. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  150. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  151. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  152. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  153. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  154. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  155. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  156. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  157. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  158. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  159. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  160. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  261. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  262. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  263. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  264. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  265. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
  266. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  267. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  268. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  269. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  270. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  271. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  272. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  273. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  274. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  275. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  276. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  277. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  278. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  279. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  280. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  281. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  282. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  283. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  284. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  285. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  286. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  287. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  288. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  289. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  290. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  291. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  292. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  293. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  294. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  295. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  296. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  297. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  298. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  299. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  300. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  301. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  302. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  303. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  304. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  305. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  306. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  307. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  308. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  309. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  310. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  311. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  312. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  313. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  314. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  315. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  316. package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
  317. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  318. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
  319. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  320. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
  321. 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/)