opencodekit 0.15.4 → 0.15.6

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 (326) hide show
  1. package/dist/index.js +2 -2
  2. package/dist/template/.opencode/agent/explore.md +13 -12
  3. package/dist/template/.opencode/command/cloudflare.md +70 -0
  4. package/dist/template/.opencode/memory/observations/2026-01-19-learning-oh-my-opencode-slim-vs-opencodekit-templ.md +27 -0
  5. package/dist/template/.opencode/package.json +1 -1
  6. package/dist/template/.opencode/plugin/sessions.ts +38 -4
  7. package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
  8. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  9. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  10. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  11. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  12. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  13. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  14. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  15. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  16. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  17. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  18. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  19. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  20. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  21. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  22. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  23. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  24. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  25. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  26. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  27. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  28. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  29. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  30. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  31. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  32. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  33. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  34. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  35. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  36. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  37. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  38. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  39. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  40. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  41. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  42. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  43. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  44. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  45. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  46. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  47. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  48. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  49. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  50. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  51. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  52. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  53. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  54. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  55. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  56. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  57. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  58. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  59. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  60. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  61. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  62. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  63. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  64. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  65. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  66. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  67. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  68. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  69. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  70. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  71. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  72. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  73. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  74. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  75. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  76. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  77. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  78. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  79. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  80. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  81. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  82. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  83. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  84. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  85. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  86. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  87. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  88. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  89. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  90. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  91. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  92. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  93. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  94. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  95. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  96. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  97. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  98. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  99. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  100. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  101. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  102. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  103. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  104. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  105. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  106. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  107. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  108. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  109. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  110. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  111. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  112. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  113. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  114. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  115. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  116. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  117. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  118. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  119. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  120. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  121. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  122. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  123. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  124. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  125. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  126. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  127. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  128. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  129. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  130. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  131. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  132. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  133. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  134. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  135. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  136. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  137. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  138. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  139. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  140. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  141. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  142. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  143. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  144. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  145. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  146. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  147. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  148. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  149. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  150. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  151. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  152. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  153. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  154. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  155. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  156. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  157. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  158. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  159. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  160. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  261. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  262. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  263. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  264. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  265. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  266. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
  267. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  268. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  269. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  270. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  271. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  272. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  273. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  274. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  275. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  276. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  277. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  278. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  279. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  280. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  281. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  282. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  283. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  284. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  285. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  286. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  287. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  288. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  289. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  290. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  291. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  292. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  293. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  294. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  295. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  296. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  297. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  298. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  299. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  300. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  301. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  302. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  303. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  304. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  305. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  306. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  307. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  308. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  309. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  310. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  311. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  312. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  313. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  314. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  315. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  316. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  317. package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
  318. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  319. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
  320. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  321. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
  322. package/dist/template/.opencode/tool/memory-read.ts +64 -44
  323. package/dist/template/.opencode/tool/memory-search.ts +9 -2
  324. package/dist/template/.opencode/tool/memory-update.ts +59 -47
  325. package/dist/template/.opencode/tool/observation.ts +16 -2
  326. package/package.json +1 -1
@@ -0,0 +1,664 @@
1
+ # Cloudflare Pipelines Skill
2
+
3
+ Expert guidance for working with Cloudflare Pipelines - ETL streaming data platform for ingesting, transforming, and loading data into R2.
4
+
5
+ ## Overview
6
+
7
+ Cloudflare Pipelines ingests events, transforms them with SQL, and delivers to R2 as Apache Iceberg tables or Parquet/JSON files. It provides:
8
+
9
+ - **Streams**: Durable, buffered queues for event ingestion via HTTP or Workers
10
+ - **Pipelines**: SQL-based transformations between streams and sinks
11
+ - **Sinks**: Destinations for processed data (R2 Data Catalog or R2 storage)
12
+
13
+ **Status**: Open beta (Workers Paid plan required)
14
+ **Pricing**: Currently no charge beyond standard R2 storage/operations
15
+
16
+ ## Architecture
17
+
18
+ ```
19
+ Data Sources → Streams → Pipelines (SQL) → Sinks → R2
20
+ ↑ ↓ ↓
21
+ HTTP/Workers Transform Iceberg/Parquet
22
+ ```
23
+
24
+ ### Core Components
25
+
26
+ 1. **Streams**: Buffer and store incoming events
27
+ - Structured (with schema validation) or unstructured (raw JSON)
28
+ - HTTP endpoints and Worker bindings
29
+ - Can be read by multiple pipelines
30
+
31
+ 2. **Pipelines**: Execute SQL transformations
32
+ - Filter, transform, enrich data
33
+ - Cannot be modified after creation (delete/recreate required)
34
+ - SQL reference: SELECT, INSERT, scalar functions
35
+
36
+ 3. **Sinks**: Write to destinations
37
+ - **R2 Data Catalog**: Apache Iceberg tables with ACID guarantees
38
+ - **R2 Storage**: Parquet or JSON files
39
+ - Exactly-once delivery guarantee
40
+
41
+ ## Common Use Cases
42
+
43
+ - **Analytics pipelines**: Server logs, clickstream, telemetry
44
+ - **Data warehousing**: ETL into queryable Iceberg tables
45
+ - **Event processing**: Mobile/IoT events with enrichment
46
+ - **Ecommerce analytics**: User events, purchases, product views
47
+ - **Log aggregation**: Application/server logs with filtering
48
+
49
+ ## Setup & Configuration
50
+
51
+ ### Quick Start
52
+
53
+ ```bash
54
+ # Interactive setup (recommended)
55
+ npx wrangler pipelines setup
56
+
57
+ # Manual setup
58
+ npx wrangler r2 bucket create my-bucket
59
+ npx wrangler r2 bucket catalog enable my-bucket
60
+ npx wrangler pipelines streams create my-stream --schema-file schema.json
61
+ npx wrangler pipelines sinks create my-sink --type r2-data-catalog \
62
+ --bucket my-bucket --namespace default --table my_table \
63
+ --catalog-token YOUR_TOKEN
64
+ npx wrangler pipelines create my-pipeline \
65
+ --sql "INSERT INTO my_sink SELECT * FROM my_stream"
66
+ ```
67
+
68
+ ### Schema Definition
69
+
70
+ **Structured streams** (recommended for validation):
71
+
72
+ ```json
73
+ {
74
+ "fields": [
75
+ {
76
+ "name": "user_id",
77
+ "type": "string",
78
+ "required": true
79
+ },
80
+ {
81
+ "name": "event_type",
82
+ "type": "string",
83
+ "required": true
84
+ },
85
+ {
86
+ "name": "amount",
87
+ "type": "float64",
88
+ "required": false
89
+ },
90
+ {
91
+ "name": "tags",
92
+ "type": "list",
93
+ "required": false,
94
+ "items": {
95
+ "type": "string"
96
+ }
97
+ },
98
+ {
99
+ "name": "metadata",
100
+ "type": "struct",
101
+ "required": false,
102
+ "fields": [
103
+ {
104
+ "name": "source",
105
+ "type": "string",
106
+ "required": false
107
+ }
108
+ ]
109
+ }
110
+ ]
111
+ }
112
+ ```
113
+
114
+ **Supported types**: `string`, `int32`, `int64`, `float32`, `float64`, `bool`, `timestamp`, `json`, `binary`, `list`, `struct`
115
+
116
+ **Unstructured streams** (no validation, single `value` column):
117
+ ```bash
118
+ npx wrangler pipelines streams create my-stream
119
+ ```
120
+
121
+ ## Writing Data to Streams
122
+
123
+ ### Via Workers (Recommended)
124
+
125
+ **Configuration** (`wrangler.toml`):
126
+ ```toml
127
+ [[pipelines]]
128
+ pipeline = "<STREAM_ID>"
129
+ binding = "STREAM"
130
+ ```
131
+
132
+ **Or JSON** (`wrangler.jsonc`):
133
+ ```jsonc
134
+ {
135
+ "$schema": "./node_modules/wrangler/config-schema.json",
136
+ "pipelines": [
137
+ {
138
+ "pipeline": "<STREAM_ID>",
139
+ "binding": "STREAM"
140
+ }
141
+ ]
142
+ }
143
+ ```
144
+
145
+ **Worker code**:
146
+ ```typescript
147
+ export default {
148
+ async fetch(request, env, ctx): Promise<Response> {
149
+ const event = {
150
+ user_id: "12345",
151
+ event_type: "purchase",
152
+ product_id: "widget-001",
153
+ amount: 29.99
154
+ };
155
+
156
+ // Send single or multiple events
157
+ await env.STREAM.send([event]);
158
+
159
+ return new Response('Event sent');
160
+ },
161
+ } satisfies ExportedHandler<Env>;
162
+ ```
163
+
164
+ **Batch sending**:
165
+ ```typescript
166
+ const events = [
167
+ { user_id: "user1", event_type: "view" },
168
+ { user_id: "user2", event_type: "purchase", amount: 50 }
169
+ ];
170
+ await env.STREAM.send(events);
171
+ ```
172
+
173
+ ### Via HTTP
174
+
175
+ **Endpoint format**: `https://{stream-id}.ingest.cloudflare.com`
176
+
177
+ **Without auth** (for testing):
178
+ ```bash
179
+ curl -X POST https://{stream-id}.ingest.cloudflare.com \
180
+ -H "Content-Type: application/json" \
181
+ -d '[
182
+ {
183
+ "user_id": "user_12345",
184
+ "event_type": "purchase",
185
+ "product_id": "widget-001",
186
+ "amount": 29.99
187
+ }
188
+ ]'
189
+ ```
190
+
191
+ **With authentication**:
192
+ ```bash
193
+ curl -X POST https://{stream-id}.ingest.cloudflare.com \
194
+ -H "Content-Type: application/json" \
195
+ -H "Authorization: Bearer YOUR_API_TOKEN" \
196
+ -d '[{"event": "data"}]'
197
+ ```
198
+
199
+ **Required permission**: Workers Pipeline Send
200
+
201
+ ## SQL Transformations
202
+
203
+ ### Basic Patterns
204
+
205
+ **Pass-through**:
206
+ ```sql
207
+ INSERT INTO my_sink SELECT * FROM my_stream
208
+ ```
209
+
210
+ **Filtering**:
211
+ ```sql
212
+ INSERT INTO my_sink
213
+ SELECT * FROM my_stream
214
+ WHERE event_type = 'purchase' AND amount > 100
215
+ ```
216
+
217
+ **Field selection**:
218
+ ```sql
219
+ INSERT INTO my_sink
220
+ SELECT user_id, event_type, timestamp, amount
221
+ FROM my_stream
222
+ ```
223
+
224
+ **Field transformation**:
225
+ ```sql
226
+ INSERT INTO my_sink
227
+ SELECT
228
+ user_id,
229
+ UPPER(event_type) as event_type,
230
+ timestamp,
231
+ amount * 1.1 as amount_with_tax,
232
+ CONCAT(user_id, '_', product_id) as unique_key
233
+ FROM my_stream
234
+ ```
235
+
236
+ **Conditional logic**:
237
+ ```sql
238
+ INSERT INTO my_sink
239
+ SELECT
240
+ user_id,
241
+ event_type,
242
+ CASE
243
+ WHEN amount > 1000 THEN 'high_value'
244
+ WHEN amount > 100 THEN 'medium_value'
245
+ ELSE 'low_value'
246
+ END as customer_tier
247
+ FROM my_stream
248
+ WHERE event_type IN ('purchase', 'refund')
249
+ ```
250
+
251
+ ## Sink Configuration
252
+
253
+ ### R2 Data Catalog (Iceberg Tables)
254
+
255
+ **Create sink**:
256
+ ```bash
257
+ npx wrangler pipelines sinks create my-sink \
258
+ --type r2-data-catalog \
259
+ --bucket my-bucket \
260
+ --namespace my_namespace \
261
+ --table my_table \
262
+ --catalog-token YOUR_CATALOG_TOKEN \
263
+ --compression zstd \
264
+ --roll-interval 60 \
265
+ --roll-size 100
266
+ ```
267
+
268
+ **Options**:
269
+ - `--compression`: `zstd` (default), `snappy`, `gzip`, `lz4`, `uncompressed`
270
+ - `--roll-interval`: Seconds between writes (default: 300)
271
+ - `--roll-size`: Max file size in MB before rolling
272
+ - `--target-row-group-size`: Parquet row group size in MB (default: 256)
273
+
274
+ **Querying with R2 SQL**:
275
+ ```bash
276
+ export WRANGLER_R2_SQL_AUTH_TOKEN=YOUR_API_TOKEN
277
+
278
+ npx wrangler r2 sql query "warehouse_name" "
279
+ SELECT user_id, event_type, COUNT(*) as event_count
280
+ FROM default.my_table
281
+ WHERE event_type = 'purchase'
282
+ GROUP BY user_id, event_type
283
+ LIMIT 100"
284
+ ```
285
+
286
+ ### R2 Storage (Raw Files)
287
+
288
+ **JSON format**:
289
+ ```bash
290
+ npx wrangler pipelines sinks create my-sink \
291
+ --type r2 \
292
+ --bucket my-bucket \
293
+ --format json \
294
+ --path analytics/events \
295
+ --partitioning "year=%Y/month=%m/day=%d" \
296
+ --roll-interval 60 \
297
+ --roll-size 100 \
298
+ --access-key-id YOUR_KEY \
299
+ --secret-access-key YOUR_SECRET
300
+ ```
301
+
302
+ **Parquet format** (better compression/performance):
303
+ ```bash
304
+ npx wrangler pipelines sinks create my-sink \
305
+ --type r2 \
306
+ --bucket my-bucket \
307
+ --format parquet \
308
+ --compression zstd \
309
+ --path analytics/events \
310
+ --partitioning "year=%Y/month=%m/day=%d/hour=%H" \
311
+ --target-row-group-size 256 \
312
+ --roll-interval 300 \
313
+ --roll-size 100 \
314
+ --access-key-id YOUR_KEY \
315
+ --secret-access-key YOUR_SECRET
316
+ ```
317
+
318
+ **File organization**:
319
+ ```
320
+ bucket/analytics/events/
321
+ year=2025/
322
+ month=01/
323
+ day=11/
324
+ uuid-1.parquet
325
+ uuid-2.parquet
326
+ ```
327
+
328
+ ## Wrangler Commands Reference
329
+
330
+ ### Setup & Management
331
+
332
+ ```bash
333
+ # Interactive setup (creates stream, sink, pipeline)
334
+ npx wrangler pipelines setup
335
+
336
+ # List all pipelines
337
+ npx wrangler pipelines list
338
+
339
+ # Get pipeline details
340
+ npx wrangler pipelines get <PIPELINE_ID>
341
+
342
+ # Delete pipeline
343
+ npx wrangler pipelines delete <PIPELINE_ID>
344
+ ```
345
+
346
+ ### Streams
347
+
348
+ ```bash
349
+ # Create stream with schema
350
+ npx wrangler pipelines streams create my-stream --schema-file schema.json
351
+
352
+ # Create unstructured stream
353
+ npx wrangler pipelines streams create my-stream
354
+
355
+ # List streams
356
+ npx wrangler pipelines streams list
357
+
358
+ # Get stream details
359
+ npx wrangler pipelines streams get <STREAM_ID>
360
+
361
+ # Delete stream (deletes dependent pipelines and buffered events!)
362
+ npx wrangler pipelines streams delete <STREAM_ID>
363
+ ```
364
+
365
+ ### Sinks
366
+
367
+ ```bash
368
+ # Create R2 Data Catalog sink
369
+ npx wrangler pipelines sinks create my-sink \
370
+ --type r2-data-catalog \
371
+ --bucket my-bucket \
372
+ --namespace default \
373
+ --table my_table \
374
+ --catalog-token TOKEN
375
+
376
+ # Create R2 storage sink
377
+ npx wrangler pipelines sinks create my-sink \
378
+ --type r2 \
379
+ --bucket my-bucket \
380
+ --format parquet \
381
+ --compression zstd
382
+
383
+ # List sinks
384
+ npx wrangler pipelines sinks list
385
+
386
+ # Get sink details
387
+ npx wrangler pipelines sinks get <SINK_ID>
388
+
389
+ # Delete sink
390
+ npx wrangler pipelines sinks delete <SINK_ID>
391
+ ```
392
+
393
+ ### Pipelines
394
+
395
+ ```bash
396
+ # Create with inline SQL
397
+ npx wrangler pipelines create my-pipeline \
398
+ --sql "INSERT INTO my_sink SELECT * FROM my_stream"
399
+
400
+ # Create with SQL file
401
+ npx wrangler pipelines create my-pipeline \
402
+ --sql-file transform.sql
403
+
404
+ # View pipeline
405
+ npx wrangler pipelines get <PIPELINE_ID>
406
+
407
+ # List all pipelines
408
+ npx wrangler pipelines list
409
+
410
+ # Delete pipeline
411
+ npx wrangler pipelines delete <PIPELINE_ID>
412
+ ```
413
+
414
+ ## Authentication & Permissions
415
+
416
+ ### R2 Data Catalog Token
417
+
418
+ Required permissions: **R2 Admin Read & Write**
419
+
420
+ Create in dashboard:
421
+ 1. Go to R2 > Manage API tokens
422
+ 2. Create Account API Token
423
+ 3. Select "Admin Read & Write" permission
424
+ 4. Save token value
425
+
426
+ ### R2 Storage Credentials
427
+
428
+ Required permissions: **Object Read & Write**
429
+
430
+ Create via Wrangler or dashboard for access key ID and secret access key.
431
+
432
+ ### HTTP Ingest Token
433
+
434
+ Required permissions: **Workers Pipeline Send**
435
+
436
+ For authenticated HTTP ingestion endpoints.
437
+
438
+ ## Best Practices
439
+
440
+ ### Schema Design
441
+ - ✅ Use structured streams for validation
442
+ - ✅ Mark critical fields as `required: true`
443
+ - ✅ Use appropriate types (`int64` for timestamps, `float64` for decimals)
444
+ - ❌ Avoid overly nested structs (query performance)
445
+ - ❌ Don't change schemas after creation (recreate stream)
446
+
447
+ ### Performance
448
+ - **Low latency**: Set `--roll-interval 10` (smaller files, more frequent)
449
+ - **Query performance**: Set `--roll-interval 300` and `--roll-size 100` (larger files, less frequent)
450
+ - Use `zstd` compression for best ratio, `snappy` for speed
451
+ - Increase `--target-row-group-size` for analytical workloads
452
+
453
+ ### SQL Transformations
454
+ - ✅ Filter early (`WHERE` clauses reduce data volume)
455
+ - ✅ Select only needed fields (reduces storage costs)
456
+ - ✅ Use functions for enrichment (CONCAT, UPPER, CASE)
457
+ - ❌ Cannot modify pipelines after creation (plan carefully)
458
+ - ❌ No JOINs across streams (single stream per pipeline)
459
+
460
+ ### Workers Integration
461
+ - ✅ Use Worker bindings (no token management)
462
+ - ✅ Batch events when possible (`send([event1, event2, ...])`)
463
+ - ✅ Handle send errors gracefully
464
+ - ❌ Don't await send in critical path if latency matters (use `ctx.waitUntil()`)
465
+
466
+ ```typescript
467
+ // Fire-and-forget pattern
468
+ export default {
469
+ async fetch(request, env, ctx) {
470
+ const event = { /* ... */ };
471
+
472
+ // Don't block response on send
473
+ ctx.waitUntil(env.STREAM.send([event]));
474
+
475
+ return new Response('OK');
476
+ }
477
+ };
478
+ ```
479
+
480
+ ### HTTP Ingestion
481
+ - ✅ Enable auth for production endpoints
482
+ - ✅ Configure CORS if sending from browsers
483
+ - ✅ Send arrays (not single objects) for batch efficiency
484
+ - ✅ Handle 4xx/5xx responses with retries
485
+
486
+ ### Monitoring
487
+ - Check stream buffer status (dashboard or API)
488
+ - Monitor pipeline processing rate
489
+ - Review R2 storage growth
490
+ - Query data regularly to verify pipeline health
491
+
492
+ ## Limits (Open Beta)
493
+
494
+ | Resource | Limit |
495
+ |----------|-------|
496
+ | Streams per account | 20 |
497
+ | Sinks per account | 20 |
498
+ | Pipelines per account | 20 |
499
+ | Payload size per request | 1 MB |
500
+ | Ingest rate per stream | 5 MB/s |
501
+
502
+ Request increases: [Limit Increase Form](https://forms.gle/ukpeZVLWLnKeixDu7)
503
+
504
+ ## Troubleshooting
505
+
506
+ ### Events not appearing in R2
507
+ - Wait 10-300 seconds (depends on `--roll-interval`)
508
+ - Check pipeline status: `npx wrangler pipelines get <ID>`
509
+ - Verify stream has data (check dashboard metrics)
510
+ - Confirm sink credentials are valid
511
+
512
+ ### Schema validation failures
513
+ - Events accepted but dropped if invalid
514
+ - Check event structure matches schema exactly
515
+ - Verify required fields are present
516
+ - Check data types (e.g., strings not numbers)
517
+
518
+ ### Worker binding not found
519
+ - Verify `wrangler.toml`/`wrangler.jsonc` has correct `pipeline` ID
520
+ - Redeploy Worker after adding binding
521
+ - Check binding name matches code (`env.STREAM`)
522
+
523
+ ### SQL errors
524
+ - SQL cannot be modified after creation
525
+ - Recreate pipeline with corrected SQL
526
+ - Verify stream and sink names in SQL match actual resources
527
+ - Check SQL syntax against reference docs
528
+
529
+ ## Complete Example: Ecommerce Analytics
530
+
531
+ **1. Create schema** (`ecommerce-schema.json`):
532
+ ```json
533
+ {
534
+ "fields": [
535
+ {
536
+ "name": "user_id",
537
+ "type": "string",
538
+ "required": true
539
+ },
540
+ {
541
+ "name": "event_type",
542
+ "type": "string",
543
+ "required": true
544
+ },
545
+ {
546
+ "name": "product_id",
547
+ "type": "string",
548
+ "required": false
549
+ },
550
+ {
551
+ "name": "amount",
552
+ "type": "float64",
553
+ "required": false
554
+ },
555
+ {
556
+ "name": "timestamp",
557
+ "type": "timestamp",
558
+ "required": true
559
+ }
560
+ ]
561
+ }
562
+ ```
563
+
564
+ **2. Setup infrastructure**:
565
+ ```bash
566
+ # Create bucket and enable catalog
567
+ npx wrangler r2 bucket create ecommerce-data
568
+ npx wrangler r2 bucket catalog enable ecommerce-data
569
+
570
+ # Create stream
571
+ npx wrangler pipelines streams create ecommerce-stream \
572
+ --schema-file ecommerce-schema.json
573
+
574
+ # Create sink
575
+ npx wrangler pipelines sinks create ecommerce-sink \
576
+ --type r2-data-catalog \
577
+ --bucket ecommerce-data \
578
+ --namespace default \
579
+ --table events \
580
+ --catalog-token $CATALOG_TOKEN \
581
+ --roll-interval 60
582
+
583
+ # Create pipeline with transformation
584
+ npx wrangler pipelines create ecommerce-pipeline \
585
+ --sql "INSERT INTO ecommerce_sink
586
+ SELECT
587
+ user_id,
588
+ UPPER(event_type) as event_type,
589
+ product_id,
590
+ amount,
591
+ timestamp,
592
+ CASE
593
+ WHEN amount > 100 THEN 'high_value'
594
+ ELSE 'standard'
595
+ END as transaction_tier
596
+ FROM ecommerce_stream
597
+ WHERE event_type IN ('purchase', 'add_to_cart', 'view_product')"
598
+ ```
599
+
600
+ **3. Configure Worker** (`wrangler.toml`):
601
+ ```toml
602
+ name = "ecommerce-api"
603
+ main = "src/index.ts"
604
+
605
+ [[pipelines]]
606
+ pipeline = "<STREAM_ID>"
607
+ binding = "EVENTS"
608
+ ```
609
+
610
+ **4. Send events** (`src/index.ts`):
611
+ ```typescript
612
+ interface Env {
613
+ EVENTS: Pipeline;
614
+ }
615
+
616
+ export default {
617
+ async fetch(request: Request, env: Env): Promise<Response> {
618
+ if (request.method === 'POST') {
619
+ const data = await request.json();
620
+
621
+ const event = {
622
+ user_id: data.userId,
623
+ event_type: data.eventType,
624
+ product_id: data.productId,
625
+ amount: data.amount,
626
+ timestamp: new Date().toISOString()
627
+ };
628
+
629
+ try {
630
+ await env.EVENTS.send([event]);
631
+ return new Response('Event tracked', { status: 200 });
632
+ } catch (error) {
633
+ return new Response('Failed to track event', { status: 500 });
634
+ }
635
+ }
636
+
637
+ return new Response('Method not allowed', { status: 405 });
638
+ }
639
+ } satisfies ExportedHandler<Env>;
640
+ ```
641
+
642
+ **5. Query results**:
643
+ ```bash
644
+ export WRANGLER_R2_SQL_AUTH_TOKEN=$CATALOG_TOKEN
645
+
646
+ npx wrangler r2 sql query "ecommerce-warehouse" "
647
+ SELECT
648
+ event_type,
649
+ transaction_tier,
650
+ COUNT(*) as event_count,
651
+ SUM(amount) as total_revenue
652
+ FROM default.events
653
+ WHERE event_type = 'PURCHASE'
654
+ GROUP BY event_type, transaction_tier
655
+ ORDER BY total_revenue DESC"
656
+ ```
657
+
658
+ ## Additional Resources
659
+
660
+ - [Pipelines Documentation](https://developers.cloudflare.com/pipelines/)
661
+ - [SQL Reference](https://developers.cloudflare.com/pipelines/sql-reference/)
662
+ - [R2 Data Catalog](https://developers.cloudflare.com/r2/data-catalog/)
663
+ - [Wrangler Commands](https://developers.cloudflare.com/workers/wrangler/commands/#pipelines)
664
+ - [Apache Iceberg](https://iceberg.apache.org/)