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,223 @@
1
+ # Troubleshooting & Best Practices
2
+
3
+ ## Common Errors
4
+
5
+ **1. Account ID Missing**
6
+ ```
7
+ error: Missing required property 'accountId'
8
+ ```
9
+ Solution: Add to config or pass explicitly.
10
+
11
+ **2. Binding Name Mismatch**
12
+ Worker expects `MY_KV` but binding uses different name.
13
+ Solution: Match binding names in Pulumi and worker code.
14
+
15
+ **3. Resource Not Found**
16
+ ```
17
+ error: resource 'abc123' not found
18
+ ```
19
+ Solution: Ensure resources exist in correct account/zone.
20
+
21
+ **4. API Token Permissions**
22
+ Solution: Verify token has required permissions (Workers, KV, R2, etc.).
23
+
24
+ ## Debugging
25
+
26
+ **Enable verbose logging:**
27
+ ```bash
28
+ pulumi up --logtostderr -v=9
29
+ ```
30
+
31
+ **Preview changes:**
32
+ ```bash
33
+ pulumi preview
34
+ ```
35
+
36
+ **View resource state:**
37
+ ```bash
38
+ pulumi stack export
39
+ ```
40
+
41
+ **Inspect specific resource:**
42
+ ```bash
43
+ pulumi stack --show-urns
44
+ pulumi state delete <urn> # Use with caution
45
+ ```
46
+
47
+ ## Best Practices
48
+
49
+ ### 1. Use Stack Configuration
50
+ ```yaml
51
+ # Pulumi.<stack>.yaml
52
+ config:
53
+ cloudflare:accountId: "abc123"
54
+ cloudflare:apiToken:
55
+ secure: "encrypted-value"
56
+ app:domain: "example.com"
57
+ app:zoneId: "xyz789"
58
+ ```
59
+
60
+ ### 2. Explicit Provider Configuration
61
+ ```typescript
62
+ const devProvider = new cloudflare.Provider("dev", {apiToken: devToken});
63
+ const prodProvider = new cloudflare.Provider("prod", {apiToken: prodToken});
64
+
65
+ const devWorker = new cloudflare.WorkerScript("dev-worker", {
66
+ accountId: devAccountId, name: "worker", content: code,
67
+ }, {provider: devProvider});
68
+
69
+ const prodWorker = new cloudflare.WorkerScript("prod-worker", {
70
+ accountId: prodAccountId, name: "worker", content: code,
71
+ }, {provider: prodProvider});
72
+ ```
73
+
74
+ ### 3. Resource Naming Conventions
75
+ ```typescript
76
+ const stack = pulumi.getStack();
77
+ const kv = new cloudflare.WorkersKvNamespace(`${stack}-kv`, {accountId, title: `${stack}-my-kv`});
78
+ ```
79
+
80
+ ### 4. Protect Production Resources
81
+ ```typescript
82
+ const prodDb = new cloudflare.D1Database("prod-db", {accountId, name: "production-database"},
83
+ {protect: true}); // Cannot delete without removing protect
84
+ ```
85
+
86
+ ### 5. Use dependsOn for Ordering
87
+ ```typescript
88
+ const migration = new command.local.Command("migration", {
89
+ create: pulumi.interpolate`wrangler d1 execute ${db.name} --file ./schema.sql`,
90
+ }, {dependsOn: [db]});
91
+
92
+ const worker = new cloudflare.WorkerScript("worker", {
93
+ accountId, name: "worker", content: code,
94
+ d1DatabaseBindings: [{name: "DB", databaseId: db.id}],
95
+ }, {dependsOn: [migration]}); // Ensure migrations run first
96
+ ```
97
+
98
+ ### 6. Resource Tagging Pattern
99
+ ```typescript
100
+ function createResource(name: string, type: string) {
101
+ const stack = pulumi.getStack();
102
+ const fullName = `${stack}-${type}-${name}`;
103
+ return new cloudflare.WorkersKvNamespace(fullName, {accountId, title: fullName});
104
+ }
105
+
106
+ const userCache = createResource("user-cache", "kv");
107
+ const sessionCache = createResource("session-cache", "kv");
108
+ ```
109
+
110
+ ## Security
111
+
112
+ ### Secrets Management
113
+ ```typescript
114
+ const config = new pulumi.Config();
115
+ const apiKey = config.requireSecret("apiKey"); // Encrypted in state
116
+
117
+ const worker = new cloudflare.WorkerScript("worker", {
118
+ accountId, name: "my-worker", content: code,
119
+ secretTextBindings: [{name: "API_KEY", text: apiKey}],
120
+ });
121
+ ```
122
+
123
+ **Store secrets:**
124
+ ```bash
125
+ pulumi config set --secret apiKey "secret-value"
126
+ ```
127
+
128
+ **Use environment variables:**
129
+ ```bash
130
+ export CLOUDFLARE_API_TOKEN="..."
131
+ pulumi up
132
+ ```
133
+
134
+ ### API Token Scopes
135
+ Create tokens with minimal permissions:
136
+ - Workers: `Workers Routes:Edit`, `Workers Scripts:Edit`
137
+ - KV: `Workers KV Storage:Edit`
138
+ - R2: `R2:Edit`
139
+ - D1: `D1:Edit`
140
+ - DNS: `Zone:Edit`, `DNS:Edit`
141
+ - Pages: `Pages:Edit`
142
+
143
+ ### State Security
144
+ - Use Pulumi Cloud or S3 backend with encryption
145
+ - Never commit state files to VCS
146
+ - Use RBAC to control stack access
147
+
148
+ ## Performance
149
+
150
+ ### Reduce State Size
151
+ - Avoid storing large files in state
152
+ - Use `ignoreChanges` for frequently changing properties
153
+ - Use external build processes
154
+
155
+ ### Parallel Updates
156
+ Pulumi automatically parallelizes independent resource updates.
157
+
158
+ ### Refresh Strategy
159
+ ```bash
160
+ pulumi refresh --yes # Sync state with actual infrastructure
161
+ ```
162
+
163
+ ## Migration
164
+
165
+ ### Import Existing Resources
166
+ ```bash
167
+ pulumi import cloudflare:index/workerScript:WorkerScript my-worker <account_id>/<worker_name>
168
+ pulumi import cloudflare:index/workersKvNamespace:WorkersKvNamespace my-kv <namespace_id>
169
+ pulumi import cloudflare:index/r2Bucket:R2Bucket my-bucket <account_id>/<bucket_name>
170
+ ```
171
+
172
+ ### From Terraform
173
+ Use `pulumi import` and rewrite configs in Pulumi DSL.
174
+
175
+ ### From Wrangler
176
+ 1. Create Pulumi resources matching wrangler.toml
177
+ 2. Import existing resources
178
+ 3. Verify with `pulumi preview`
179
+ 4. Switch to Pulumi for deployments
180
+
181
+ ## CI/CD
182
+
183
+ **GitHub Actions:**
184
+ ```yaml
185
+ name: Deploy
186
+ on: [push]
187
+ jobs:
188
+ deploy:
189
+ runs-on: ubuntu-latest
190
+ steps:
191
+ - uses: actions/checkout@v3
192
+ - uses: pulumi/actions@v4
193
+ with:
194
+ command: up
195
+ stack-name: prod
196
+ env:
197
+ PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
198
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
199
+ ```
200
+
201
+ **GitLab CI:**
202
+ ```yaml
203
+ deploy:
204
+ image: pulumi/pulumi:latest
205
+ script:
206
+ - pulumi stack select prod
207
+ - pulumi up --yes
208
+ only:
209
+ - main
210
+ variables:
211
+ CLOUDFLARE_API_TOKEN: $CLOUDFLARE_API_TOKEN
212
+ ```
213
+
214
+ ## Resources
215
+
216
+ - **Pulumi Registry:** https://www.pulumi.com/registry/packages/cloudflare/
217
+ - **API Docs:** https://www.pulumi.com/registry/packages/cloudflare/api-docs/
218
+ - **GitHub:** https://github.com/pulumi/pulumi-cloudflare
219
+ - **Cloudflare Docs:** https://developers.cloudflare.com/
220
+ - **Workers Docs:** https://developers.cloudflare.com/workers/
221
+
222
+ ---
223
+ See: [README.md](./README.md), [configuration.md](./configuration.md), [api.md](./api.md), [patterns.md](./patterns.md)
@@ -0,0 +1,139 @@
1
+ # Architecture Patterns
2
+
3
+ ## Component Resources
4
+
5
+ ```typescript
6
+ class WorkerApp extends pulumi.ComponentResource {
7
+ constructor(name: string, args: WorkerAppArgs, opts?) {
8
+ super("custom:cloudflare:WorkerApp", name, {}, opts);
9
+ const defaultOpts = {parent: this};
10
+
11
+ this.kv = new cloudflare.WorkersKvNamespace(`${name}-kv`, {accountId: args.accountId, title: `${name}-kv`}, defaultOpts);
12
+ this.worker = new cloudflare.WorkerScript(`${name}-worker`, {
13
+ accountId: args.accountId, name: `${name}-worker`, content: args.workerCode,
14
+ module: true, kvNamespaceBindings: [{name: "KV", namespaceId: this.kv.id}],
15
+ }, defaultOpts);
16
+ this.domain = new cloudflare.WorkersDomain(`${name}-domain`, {
17
+ accountId: args.accountId, hostname: args.domain, service: this.worker.name,
18
+ }, defaultOpts);
19
+ }
20
+ }
21
+ ```
22
+
23
+ ## Full-Stack Worker App
24
+
25
+ ```typescript
26
+ const kv = new cloudflare.WorkersKvNamespace("cache", {accountId, title: "api-cache"});
27
+ const db = new cloudflare.D1Database("db", {accountId, name: "app-database"});
28
+ const bucket = new cloudflare.R2Bucket("assets", {accountId, name: "app-assets"});
29
+
30
+ const apiWorker = new cloudflare.WorkerScript("api", {
31
+ accountId, name: "api-worker", content: fs.readFileSync("./dist/api.js", "utf8"),
32
+ module: true, kvNamespaceBindings: [{name: "CACHE", namespaceId: kv.id}],
33
+ d1DatabaseBindings: [{name: "DB", databaseId: db.id}],
34
+ r2BucketBindings: [{name: "ASSETS", bucketName: bucket.name}],
35
+ });
36
+ ```
37
+
38
+ ## Multi-Environment Setup
39
+
40
+ ```typescript
41
+ const stack = pulumi.getStack();
42
+ const worker = new cloudflare.WorkerScript(`worker-${stack}`, {
43
+ accountId, name: `my-worker-${stack}`, content: code,
44
+ plainTextBindings: [{name: "ENVIRONMENT", text: stack}],
45
+ });
46
+ ```
47
+
48
+ ## Queue-Based Processing
49
+
50
+ ```typescript
51
+ const queue = new cloudflare.Queue("processing-queue", {accountId, name: "image-processing"});
52
+
53
+ // Producer: API receives requests
54
+ const apiWorker = new cloudflare.WorkerScript("api", {
55
+ accountId, name: "api-worker", content: apiCode,
56
+ queueBindings: [{name: "PROCESSING_QUEUE", queue: queue.id}],
57
+ });
58
+
59
+ // Consumer: Process async
60
+ const processorWorker = new cloudflare.WorkerScript("processor", {
61
+ accountId, name: "processor-worker", content: processorCode,
62
+ queueConsumers: [{queue: queue.name, maxBatchSize: 10, maxRetries: 3, maxWaitTimeMs: 5000}],
63
+ r2BucketBindings: [{name: "OUTPUT_BUCKET", bucketName: outputBucket.name}],
64
+ });
65
+ ```
66
+
67
+ ## Microservices with Service Bindings
68
+
69
+ ```typescript
70
+ const authWorker = new cloudflare.WorkerScript("auth", {accountId, name: "auth-service", content: authCode});
71
+ const apiWorker = new cloudflare.WorkerScript("api", {
72
+ accountId, name: "api-service", content: apiCode,
73
+ serviceBindings: [{name: "AUTH", service: authWorker.name}],
74
+ });
75
+ // In worker: await env.AUTH.fetch("/verify", {...});
76
+ ```
77
+
78
+ ## Event-Driven Architecture
79
+
80
+ ```typescript
81
+ const eventQueue = new cloudflare.Queue("events", {accountId, name: "event-bus"});
82
+ const producers = ["api", "webhook"].map(name =>
83
+ new cloudflare.WorkerScript(`${name}-producer`, {
84
+ accountId, name: `${name}-producer`, content: producerCode,
85
+ queueBindings: [{name: "EVENTS", queue: eventQueue.id}],
86
+ })
87
+ );
88
+ const consumers = ["email", "analytics"].map(name =>
89
+ new cloudflare.WorkerScript(`${name}-consumer`, {
90
+ accountId, name: `${name}-consumer`, content: consumerCode,
91
+ queueConsumers: [{queue: eventQueue.name, maxBatchSize: 10}],
92
+ })
93
+ );
94
+ ```
95
+
96
+ ## CDN with Dynamic Content
97
+
98
+ ```typescript
99
+ const staticBucket = new cloudflare.R2Bucket("static", {accountId, name: "static-assets"});
100
+ const appWorker = new cloudflare.WorkerScript("app", {
101
+ accountId, name: "app-worker", content: appCode,
102
+ r2BucketBindings: [{name: "STATIC", bucketName: staticBucket.name}],
103
+ });
104
+ const route = new cloudflare.WorkerRoute("route", {zoneId, pattern: `${domain}/*`, scriptName: appWorker.name});
105
+ ```
106
+
107
+ ## Wrangler Integration
108
+
109
+ ```typescript
110
+ // Match wrangler.toml bindings in Pulumi
111
+ const worker = new cloudflare.WorkerScript("worker", {
112
+ accountId, name: "my-worker", content: code,
113
+ compatibilityDate: "2024-01-01", compatibilityFlags: ["nodejs_compat"],
114
+ kvNamespaceBindings: [{name: "MY_KV", namespaceId: kv.id}], // Must match wrangler.toml
115
+ });
116
+ ```
117
+
118
+ ## Dynamic Worker Content
119
+
120
+ ```typescript
121
+ import * as command from "@pulumi/command";
122
+ const build = new command.local.Command("build-worker", {create: "npm run build", dir: "./worker"});
123
+ const workerContent = build.stdout.apply(() => fs.readFileSync("./worker/dist/index.js", "utf8"));
124
+ const worker = new cloudflare.WorkerScript("worker", {accountId, name: "my-worker", content: workerContent}, {dependsOn: [build]});
125
+ ```
126
+
127
+ ## Conditional Resources
128
+
129
+ ```typescript
130
+ const isProd = pulumi.getStack() === "prod";
131
+ const analytics = isProd ? new cloudflare.WorkersKvNamespace("analytics", {accountId, title: "analytics"}) : undefined;
132
+ const worker = new cloudflare.WorkerScript("worker", {
133
+ accountId, name: "worker", content: code,
134
+ kvNamespaceBindings: analytics ? [{name: "ANALYTICS", namespaceId: analytics.id}] : [],
135
+ });
136
+ ```
137
+
138
+ ---
139
+ See: [README.md](./README.md), [configuration.md](./configuration.md), [api.md](./api.md), [gotchas.md](./gotchas.md)
@@ -0,0 +1,69 @@
1
+ # Cloudflare Queues
2
+
3
+ Flexible message queuing for async task processing with guaranteed at-least-once delivery and configurable batching.
4
+
5
+ ## Overview
6
+
7
+ Queues provide:
8
+ - At-least-once delivery guarantee
9
+ - Push-based (Worker) and pull-based (HTTP) consumers
10
+ - Configurable batching and retries
11
+ - Dead Letter Queues (DLQ)
12
+ - Delays up to 12 hours
13
+
14
+ **Use cases:** Async processing, API buffering, rate limiting, event workflows, deferred jobs
15
+
16
+ ## Quick Start
17
+
18
+ ```bash
19
+ wrangler queues create my-queue
20
+ wrangler queues consumer add my-queue my-worker
21
+ ```
22
+
23
+ ```typescript
24
+ // Producer
25
+ await env.MY_QUEUE.send({ userId: 123, action: 'notify' });
26
+
27
+ // Consumer
28
+ export default {
29
+ async queue(batch: MessageBatch, env: Env): Promise<void> {
30
+ for (const msg of batch.messages) {
31
+ await process(msg.body);
32
+ msg.ack();
33
+ }
34
+ }
35
+ };
36
+ ```
37
+
38
+ ## Core Operations
39
+
40
+ | Operation | Purpose | Limit |
41
+ |-----------|---------|-------|
42
+ | `send(body, options?)` | Publish message | 128 KB |
43
+ | `sendBatch(messages)` | Bulk publish | 100 msgs/256 KB |
44
+ | `message.ack()` | Acknowledge success | - |
45
+ | `message.retry(options?)` | Retry with delay | - |
46
+ | `batch.ackAll()` | Ack entire batch | - |
47
+
48
+ ## Architecture
49
+
50
+ ```
51
+ [Producer Worker] → [Queue] → [Consumer Worker/HTTP] → [Processing]
52
+ ```
53
+
54
+ - Max 10,000 queues per account
55
+ - 5,000 msgs/second per queue
56
+ - 4-14 day retention (configurable)
57
+
58
+ ## In This Reference
59
+
60
+ - [configuration.md](./configuration.md) - wrangler.jsonc setup, producer/consumer config, DLQ
61
+ - [api.md](./api.md) - Send/batch methods, queue handler, ack/retry, pull API
62
+ - [patterns.md](./patterns.md) - Async tasks, buffering, rate limiting, event workflows
63
+ - [gotchas.md](./gotchas.md) - Idempotency, retry limits, content types, cost optimization
64
+
65
+ ## See Also
66
+
67
+ - [workers](../workers/) - Worker runtime for producers/consumers
68
+ - [r2](../r2/) - Process R2 event notifications via queues
69
+ - [d1](../d1/) - Batch write to D1 from queue consumers
@@ -0,0 +1,138 @@
1
+ # Queues API Reference
2
+
3
+ ## Producer: Send Messages
4
+
5
+ ```typescript
6
+ // Basic send
7
+ await env.MY_QUEUE.send({ url: request.url, timestamp: Date.now() });
8
+
9
+ // Options: delay (max 43200s), contentType (json|text|bytes|v8)
10
+ await env.MY_QUEUE.send(message, { delaySeconds: 600 });
11
+ await env.MY_QUEUE.send(message, { delaySeconds: 0 }); // Override queue default
12
+
13
+ // Batch (up to 100 msgs or 256 KB)
14
+ await env.MY_QUEUE.sendBatch([
15
+ { body: 'msg1' },
16
+ { body: 'msg2' },
17
+ { body: 'msg3', options: { delaySeconds: 300 } }
18
+ ]);
19
+
20
+ // Non-blocking
21
+ ctx.waitUntil(env.MY_QUEUE.send({ data: 'async' }));
22
+ ```
23
+
24
+ ## Consumer: Push-based (Worker)
25
+
26
+ ```typescript
27
+ export default {
28
+ async queue(batch: MessageBatch, env: Env, ctx: ExecutionContext): Promise<void> {
29
+ // batch.queue, batch.messages.length
30
+ for (const msg of batch.messages) {
31
+ // msg.id, msg.body, msg.timestamp, msg.attempts
32
+ try {
33
+ await processMessage(msg.body);
34
+ msg.ack();
35
+ } catch (error) {
36
+ msg.retry({ delaySeconds: 600 });
37
+ }
38
+ }
39
+ }
40
+ };
41
+ ```
42
+
43
+ ## Batch Operations
44
+
45
+ ```typescript
46
+ // Acknowledge entire batch
47
+ try {
48
+ await bulkProcess(batch.messages);
49
+ batch.ackAll();
50
+ } catch (error) {
51
+ batch.retryAll({ delaySeconds: 300 });
52
+ }
53
+ ```
54
+
55
+ ## Exponential Backoff
56
+
57
+ ```typescript
58
+ async queue(batch: MessageBatch, env: Env): Promise<void> {
59
+ for (const msg of batch.messages) {
60
+ try {
61
+ await processMessage(msg.body);
62
+ msg.ack();
63
+ } catch (error) {
64
+ const delay = Math.min(30 ** msg.attempts, 43200);
65
+ msg.retry({ delaySeconds: delay });
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ ## Multiple Queues, Single Consumer
72
+
73
+ ```typescript
74
+ export default {
75
+ async queue(batch: MessageBatch, env: Env): Promise<void> {
76
+ switch (batch.queue) {
77
+ case 'high-priority': await processUrgent(batch.messages); break;
78
+ case 'low-priority': await processDeferred(batch.messages); break;
79
+ case 'email': await sendEmails(batch.messages); break;
80
+ default: batch.retryAll();
81
+ }
82
+ }
83
+ };
84
+ ```
85
+
86
+ ## Consumer: Pull-based (HTTP)
87
+
88
+ ```typescript
89
+ // Pull messages
90
+ const response = await fetch(
91
+ `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/queues/${QUEUE_ID}/messages/pull`,
92
+ {
93
+ method: 'POST',
94
+ headers: { 'authorization': `Bearer ${API_TOKEN}`, 'content-type': 'application/json' },
95
+ body: JSON.stringify({ visibility_timeout_ms: 6000, batch_size: 50 })
96
+ }
97
+ );
98
+
99
+ const data = await response.json();
100
+
101
+ // Acknowledge
102
+ await fetch(
103
+ `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/queues/${QUEUE_ID}/messages/ack`,
104
+ {
105
+ method: 'POST',
106
+ headers: { 'authorization': `Bearer ${API_TOKEN}`, 'content-type': 'application/json' },
107
+ body: JSON.stringify({
108
+ acks: [{ lease_id: msg.lease_id }],
109
+ retries: [{ lease_id: msg2.lease_id, delay_seconds: 600 }]
110
+ })
111
+ }
112
+ );
113
+ ```
114
+
115
+ ## Interfaces
116
+
117
+ ```typescript
118
+ interface MessageBatch<Body = unknown> {
119
+ readonly queue: string;
120
+ readonly messages: Message<Body>[];
121
+ ackAll(): void;
122
+ retryAll(options?: QueueRetryOptions): void;
123
+ }
124
+
125
+ interface Message<Body = unknown> {
126
+ readonly id: string;
127
+ readonly timestamp: Date;
128
+ readonly body: Body;
129
+ readonly attempts: number;
130
+ ack(): void;
131
+ retry(options?: QueueRetryOptions): void;
132
+ }
133
+
134
+ interface QueueSendOptions {
135
+ contentType?: 'text' | 'bytes' | 'json' | 'v8';
136
+ delaySeconds?: number; // 0-43200
137
+ }
138
+ ```
@@ -0,0 +1,125 @@
1
+ # Queues Configuration
2
+
3
+ ## Create Queue
4
+
5
+ ```bash
6
+ wrangler queues create my-queue
7
+ wrangler queues create my-queue --retention-period-hours=336 # 14 days
8
+ wrangler queues create my-queue --delivery-delay-secs=300
9
+ ```
10
+
11
+ ## Producer Binding
12
+
13
+ **wrangler.jsonc:**
14
+ ```jsonc
15
+ {
16
+ "queues": {
17
+ "producers": [
18
+ {
19
+ "queue": "my-queue-name",
20
+ "binding": "MY_QUEUE",
21
+ "delivery_delay": 60 // Optional: default delay in seconds
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ ```
27
+
28
+ **wrangler.toml:**
29
+ ```toml
30
+ [[queues.producers]]
31
+ queue = "my-queue-name"
32
+ binding = "MY_QUEUE"
33
+ delivery_delay = 60
34
+ ```
35
+
36
+ ## Consumer Configuration (Push-based)
37
+
38
+ **wrangler.jsonc:**
39
+ ```jsonc
40
+ {
41
+ "queues": {
42
+ "consumers": [
43
+ {
44
+ "queue": "my-queue-name",
45
+ "max_batch_size": 10, // 1-100, default 10
46
+ "max_batch_timeout": 5, // 0-60s, default 5
47
+ "max_retries": 3, // default 3, max 100
48
+ "dead_letter_queue": "my-dlq", // optional
49
+ "retry_delay": 300 // optional: delay retries in seconds
50
+ }
51
+ ]
52
+ }
53
+ }
54
+ ```
55
+
56
+ **wrangler.toml:**
57
+ ```toml
58
+ [[queues.consumers]]
59
+ queue = "my-queue-name"
60
+ max_batch_size = 10
61
+ max_batch_timeout = 5
62
+ max_retries = 3
63
+ dead_letter_queue = "my-dlq"
64
+ retry_delay = 300
65
+ ```
66
+
67
+ ## Consumer Configuration (Pull-based)
68
+
69
+ **wrangler.jsonc:**
70
+ ```jsonc
71
+ {
72
+ "queues": {
73
+ "consumers": [
74
+ {
75
+ "queue": "my-queue-name",
76
+ "type": "http_pull",
77
+ "visibility_timeout_ms": 5000, // default 30000, max 12h
78
+ "max_retries": 5,
79
+ "dead_letter_queue": "my-dlq"
80
+ }
81
+ ]
82
+ }
83
+ }
84
+ ```
85
+
86
+ ## TypeScript Types
87
+
88
+ ```typescript
89
+ interface Env {
90
+ MY_QUEUE: Queue<MessageBody>;
91
+ ANALYTICS_QUEUE: Queue<AnalyticsEvent>;
92
+ }
93
+
94
+ interface MessageBody {
95
+ id: string;
96
+ action: 'create' | 'update' | 'delete';
97
+ data: Record<string, any>;
98
+ }
99
+
100
+ export default {
101
+ async queue(batch: MessageBatch<MessageBody>, env: Env): Promise<void> {
102
+ for (const msg of batch.messages) {
103
+ console.log(msg.body.action);
104
+ msg.ack();
105
+ }
106
+ }
107
+ } satisfies ExportedHandler<Env>;
108
+ ```
109
+
110
+ ## CLI Commands
111
+
112
+ ```bash
113
+ # Consumer management
114
+ wrangler queues consumer add my-queue my-worker --batch-size=50 --max-retries=5
115
+ wrangler queues consumer http add my-queue
116
+ wrangler queues consumer worker remove my-queue my-worker
117
+ wrangler queues consumer http remove my-queue
118
+
119
+ # Queue operations
120
+ wrangler queues list
121
+ wrangler queues pause my-queue
122
+ wrangler queues resume my-queue
123
+ wrangler queues purge my-queue
124
+ wrangler queues delete my-queue
125
+ ```