opencodekit 0.15.4 → 0.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/template/.opencode/command/cloudflare.md +70 -0
  3. package/dist/template/.opencode/package.json +1 -1
  4. package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
  5. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
  6. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
  7. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
  8. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
  9. package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
  10. package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
  11. package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
  12. package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
  13. package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
  14. package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
  15. package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
  16. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
  17. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
  18. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
  19. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
  20. package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
  21. package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
  22. package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
  23. package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
  24. package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
  25. package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
  26. package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
  27. package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
  28. package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
  29. package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
  30. package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
  31. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
  32. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
  33. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
  34. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
  35. package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
  36. package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
  37. package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
  38. package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
  39. package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
  40. package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
  41. package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
  42. package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
  43. package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
  44. package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
  45. package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
  46. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
  47. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
  48. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
  49. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
  50. package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
  51. package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
  52. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
  53. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
  54. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
  55. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
  56. package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
  57. package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
  58. package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
  59. package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
  60. package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
  61. package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
  62. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
  63. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
  64. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
  65. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
  66. package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
  67. package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
  68. package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
  69. package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
  70. package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
  71. package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
  72. package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
  73. package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
  74. package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
  75. package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
  76. package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
  77. package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
  78. package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
  79. package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
  80. package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
  81. package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
  82. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
  83. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
  84. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
  85. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
  86. package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
  87. package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
  88. package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
  89. package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
  90. package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
  91. package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
  92. package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
  93. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
  94. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
  95. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
  96. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
  97. package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
  98. package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
  99. package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
  100. package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
  101. package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
  102. package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
  103. package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
  104. package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
  105. package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
  106. package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
  107. package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
  108. package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
  109. package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
  110. package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
  111. package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
  112. package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
  113. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
  114. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
  115. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
  116. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
  117. package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
  118. package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
  119. package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
  120. package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
  121. package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
  122. package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
  123. package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
  124. package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
  125. package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
  126. package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
  127. package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
  128. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
  129. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
  130. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
  131. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
  132. package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
  133. package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
  134. package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
  135. package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
  136. package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
  137. package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
  138. package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
  139. package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
  140. package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
  141. package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
  142. package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
  143. package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
  144. package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
  145. package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
  146. package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
  147. package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
  148. package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
  149. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
  150. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
  151. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
  152. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
  153. package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
  154. package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
  155. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
  156. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
  157. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
  158. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
  159. package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
  160. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
  161. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
  162. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
  163. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
  164. package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
  165. package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
  166. package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
  167. package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
  168. package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
  169. package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
  170. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
  171. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
  172. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
  173. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
  174. package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
  175. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
  176. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
  177. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
  178. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
  179. package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
  180. package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
  181. package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
  182. package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
  183. package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
  184. package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
  185. package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
  186. package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
  187. package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
  188. package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
  189. package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
  190. package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
  191. package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
  192. package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
  193. package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
  194. package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
  195. package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
  196. package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
  197. package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
  198. package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
  199. package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
  200. package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
  201. package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
  202. package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
  203. package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
  204. package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
  205. package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
  206. package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
  207. package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
  208. package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
  209. package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
  210. package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
  211. package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
  212. package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
  213. package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
  214. package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
  215. package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
  216. package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
  217. package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
  218. package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
  219. package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
  220. package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
  221. package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
  222. package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
  223. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
  224. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
  225. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
  226. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
  227. package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
  228. package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
  229. package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
  230. package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
  231. package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
  232. package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
  233. package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
  234. package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
  235. package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
  236. package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
  237. package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
  238. package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
  239. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
  240. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
  241. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
  242. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
  243. package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
  244. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
  245. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
  246. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
  247. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
  248. package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
  249. package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
  250. package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
  251. package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
  252. package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
  253. package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
  254. package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
  255. package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
  256. package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
  257. package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
  258. package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
  259. package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
  260. package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
  261. package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
  262. package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
  263. package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
  264. package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
  265. package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
  266. package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
  267. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
  268. package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
  269. package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
  270. package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
  271. package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
  272. package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
  273. package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
  274. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
  275. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
  276. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
  277. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
  278. package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
  279. package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
  280. package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
  281. package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
  282. package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
  283. package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
  284. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
  285. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
  286. package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
  287. package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
  288. package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
  289. package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
  290. package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
  291. package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
  292. package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
  293. package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
  294. package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
  295. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
  296. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
  297. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
  298. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
  299. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
  300. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
  301. package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
  302. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
  303. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
  304. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
  305. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
  306. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
  307. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
  308. package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
  309. package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
  310. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
  311. package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
  312. package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
  313. package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
  314. package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
  315. package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
  316. package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
  317. package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
  318. package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
  319. package/package.json +1 -1
@@ -0,0 +1,682 @@
1
+ # Cloudflare Vectorize Skill
2
+
3
+ Expert guidance for Cloudflare Vectorize - globally distributed vector database for AI applications.
4
+
5
+ ## Overview
6
+
7
+ Vectorize is Cloudflare's vector database that enables building full-stack AI-powered applications with Workers. It stores and queries vector embeddings for semantic search, recommendations, classification, and anomaly detection.
8
+
9
+ **Key Features:**
10
+ - Globally distributed vector database
11
+ - Seamless integration with Workers AI
12
+ - Support for dimensions up to 1536 (32-bit float precision)
13
+ - Metadata filtering (up to 10 indexes per Vectorize index)
14
+ - Namespace support for index segmentation
15
+ - Three distance metrics: euclidean, cosine, dot-product
16
+ - Up to 5M vectors per index (V2)
17
+
18
+ **Status:** Generally Available (GA)
19
+
20
+ ## Index Configuration
21
+
22
+ ### Creating Indexes
23
+
24
+ Use `wrangler vectorize create` with required parameters:
25
+
26
+ ```bash
27
+ # Wrangler 3.71.0+ required for V2 indexes
28
+ npx wrangler@latest vectorize create <index-name> \
29
+ --dimensions=<number> \
30
+ --metric=<euclidean|cosine|dot-product>
31
+ ```
32
+
33
+ **CRITICAL: Index configuration is immutable after creation. Cannot change dimensions or metric.**
34
+
35
+ #### Distance Metrics
36
+
37
+ | Metric | Best For | Score Interpretation |
38
+ |--------|----------|---------------------|
39
+ | `euclidean` | Absolute distance, spatial data | Lower = closer (0.0 = identical) |
40
+ | `cosine` | Text embeddings, semantic similarity | Higher = closer (1.0 = identical) |
41
+ | `dot-product` | Recommendation systems, normalized vectors | Higher = closer |
42
+
43
+ **Metric Selection:**
44
+ - Text/semantic search: `cosine` (most common)
45
+ - Image similarity: `euclidean`
46
+ - Pre-normalized vectors: `dot-product`
47
+
48
+ #### Naming Conventions
49
+
50
+ Index names must:
51
+ - Be lowercase and/or numeric ASCII
52
+ - Start with a letter
53
+ - Use dashes (-) instead of spaces
54
+ - Be < 32 characters
55
+ - Be descriptive: `production-doc-search`, `dev-recommendation-engine`
56
+
57
+ ### Metadata Indexes
58
+
59
+ Enable filtering on metadata properties (up to 10 per index):
60
+
61
+ ```bash
62
+ # Create metadata index BEFORE inserting vectors
63
+ npx wrangler vectorize create-metadata-index <index-name> \
64
+ --property-name=<field-name> \
65
+ --type=<string|number|boolean>
66
+ ```
67
+
68
+ **Important:**
69
+ - Create metadata indexes BEFORE inserting vectors
70
+ - Existing vectors won't be indexed retroactively (must re-upsert)
71
+ - String fields: first 64 bytes indexed (UTF-8 boundary)
72
+ - Number fields: float64 precision
73
+ - Max 10 metadata indexes per Vectorize index
74
+
75
+ **Cardinality Considerations:**
76
+ - **High cardinality** (UUIDs, millisecond timestamps): Good for `$eq`, poor for range queries
77
+ - **Low cardinality** (enum values, status): Good for filters, less selective
78
+ - **Best practice**: Bucket high-cardinality data (e.g., round timestamps to 5-min windows)
79
+
80
+ ### Management Commands
81
+
82
+ ```bash
83
+ # List metadata indexes
84
+ npx wrangler vectorize list-metadata-index <index-name>
85
+
86
+ # Delete metadata index
87
+ npx wrangler vectorize delete-metadata-index <index-name> --property-name=<field>
88
+
89
+ # Get index info (vector count, processed mutations)
90
+ npx wrangler vectorize info <index-name>
91
+
92
+ # List vector IDs (paginated, 1-1000 per page)
93
+ npx wrangler vectorize list-vectors <index-name> \
94
+ --count=100 \
95
+ --cursor=<pagination-cursor>
96
+ ```
97
+
98
+ ## Worker Binding
99
+
100
+ ### Configuration
101
+
102
+ **wrangler.jsonc:**
103
+ ```jsonc
104
+ {
105
+ "$schema": "./node_modules/wrangler/config-schema.json",
106
+ "vectorize": [
107
+ {
108
+ "binding": "VECTORIZE",
109
+ "index_name": "production-index"
110
+ }
111
+ ]
112
+ }
113
+ ```
114
+
115
+ **wrangler.toml:**
116
+ ```toml
117
+ [[vectorize]]
118
+ binding = "VECTORIZE" # Available as env.VECTORIZE
119
+ index_name = "production-index"
120
+ ```
121
+
122
+ ### TypeScript Types
123
+
124
+ ```typescript
125
+ export interface Env {
126
+ VECTORIZE: Vectorize;
127
+ }
128
+
129
+ // Generate types after config changes
130
+ // npx wrangler types
131
+ ```
132
+
133
+ ## Vector Operations
134
+
135
+ ### Vector Format
136
+
137
+ ```typescript
138
+ interface VectorizeVector {
139
+ id: string; // Unique identifier (max 64 bytes)
140
+ values: number[] | Float32Array | Float64Array; // Match index dimensions
141
+ namespace?: string; // Optional partition key (max 64 bytes)
142
+ metadata?: Record<string, string | number | boolean | null>; // Max 10 KiB
143
+ }
144
+ ```
145
+
146
+ **Vector Values:**
147
+ - Array of numbers, Float32Array, or Float64Array
148
+ - Must match index dimensions exactly
149
+ - Stored as Float32 (Float64 converted on insert)
150
+ - Dense arrays only (no sparse vectors)
151
+
152
+ ### Insert vs Upsert
153
+
154
+ ```typescript
155
+ // INSERT: Ignore duplicates (keeps first)
156
+ const inserted = await env.VECTORIZE.insert([
157
+ {
158
+ id: "1",
159
+ values: [0.12, 0.45, 0.67, ...],
160
+ metadata: { url: "/products/sku/123", category: "electronics" }
161
+ }
162
+ ]);
163
+
164
+ // UPSERT: Overwrite existing (keeps last)
165
+ const upserted = await env.VECTORIZE.upsert([
166
+ {
167
+ id: "1",
168
+ values: [0.15, 0.48, 0.70, ...],
169
+ metadata: { url: "/products/sku/123", category: "electronics", updated: true }
170
+ }
171
+ ]);
172
+ ```
173
+
174
+ **Key Differences:**
175
+ - `insert()`: Duplicate IDs ignored, first insert wins
176
+ - `upsert()`: Overwrites completely (no merge), last upsert wins
177
+ - Both return `{ mutationId: string }`
178
+ - Asynchronous: Takes a few seconds to be queryable
179
+
180
+ **Batch Limits:**
181
+ - Workers: 1000 vectors per batch
182
+ - HTTP API: 5000 vectors per batch
183
+ - File upload: 100 MB max
184
+
185
+ ### Querying
186
+
187
+ #### Basic Query
188
+
189
+ ```typescript
190
+ // Query vector: must match index dimensions
191
+ const queryVector: number[] = [0.13, 0.25, 0.44, ...];
192
+
193
+ const matches = await env.VECTORIZE.query(queryVector, {
194
+ topK: 5, // Default: 5, Max: 100 (or 20 with values/metadata)
195
+ returnValues: false, // Default: false
196
+ returnMetadata: "none", // "none" | "indexed" | "all"
197
+ namespace?: "user-123", // Optional namespace filter
198
+ filter?: { category: "electronics" } // Optional metadata filter
199
+ });
200
+ ```
201
+
202
+ **Response:**
203
+ ```typescript
204
+ interface VectorizeMatches {
205
+ count: number;
206
+ matches: Array<{
207
+ id: string;
208
+ score: number; // Distance score (interpretation depends on metric)
209
+ values?: number[]; // If returnValues: true
210
+ metadata?: Record<string, any>; // If returnMetadata != "none"
211
+ }>;
212
+ }
213
+ ```
214
+
215
+ #### Query by ID
216
+
217
+ ```typescript
218
+ // Query using existing vector in index
219
+ const matches = await env.VECTORIZE.queryById("some-vector-id", {
220
+ topK: 5,
221
+ returnValues: true,
222
+ returnMetadata: "all"
223
+ });
224
+ ```
225
+
226
+ #### Get Vectors by ID
227
+
228
+ ```typescript
229
+ // Retrieve specific vectors with values and metadata
230
+ const ids = ["11", "22", "33"];
231
+ const vectors = await env.VECTORIZE.getByIds(ids);
232
+ ```
233
+
234
+ ### Metadata Filtering
235
+
236
+ ```typescript
237
+ // Implicit $eq
238
+ const matches = await env.VECTORIZE.query(queryVector, {
239
+ topK: 10,
240
+ filter: { category: "electronics" }
241
+ });
242
+
243
+ // Explicit operators
244
+ const matches = await env.VECTORIZE.query(queryVector, {
245
+ filter: {
246
+ category: { $ne: "deprecated" },
247
+ price: { $gte: 10, $lt: 100 },
248
+ tags: { $in: ["featured", "sale"] },
249
+ discontinued: { $ne: true }
250
+ }
251
+ });
252
+
253
+ // Nested metadata with dot notation
254
+ const matches = await env.VECTORIZE.query(queryVector, {
255
+ filter: { "product.brand": "acme" }
256
+ });
257
+
258
+ // Range query for prefix search (strings)
259
+ const matches = await env.VECTORIZE.query(queryVector, {
260
+ filter: {
261
+ category: { $gte: "elec", $lt: "eled" } // Matches "electronics"
262
+ }
263
+ });
264
+ ```
265
+
266
+ **Operators:**
267
+ - `$eq`: Equals (implicit if no operator)
268
+ - `$ne`: Not equals
269
+ - `$in`: In array
270
+ - `$nin`: Not in array
271
+ - `$lt`, `$lte`: Less than (or equal)
272
+ - `$gt`, `$gte`: Greater than (or equal)
273
+
274
+ **Filter Constraints:**
275
+ - Max 2048 bytes (compact JSON)
276
+ - Keys: no empty, no dots, no `$` prefix, no double-quotes, max 512 chars
277
+ - Values: string, number, boolean, null
278
+ - Range queries: Can combine upper/lower bounds on same field
279
+ - Namespaces filtered before metadata
280
+
281
+ ### Deletion
282
+
283
+ ```typescript
284
+ // Delete by IDs (asynchronous)
285
+ const deleted = await env.VECTORIZE.deleteByIds(["11", "22", "33"]);
286
+ // Returns: { mutationId: string }
287
+ ```
288
+
289
+ ### Index Inspection
290
+
291
+ ```typescript
292
+ // Get index configuration
293
+ const details = await env.VECTORIZE.describe();
294
+ // Returns: { dimensions: number, metric: string, vectorCount?: number }
295
+ ```
296
+
297
+ ## Namespaces
298
+
299
+ Partition vectors within a single index by customer, tenant, or category.
300
+
301
+ ```typescript
302
+ // Insert with namespace
303
+ await env.VECTORIZE.insert([
304
+ { id: "1", values: [...], namespace: "customer-abc" },
305
+ { id: "2", values: [...], namespace: "customer-xyz" }
306
+ ]);
307
+
308
+ // Query within namespace (applied before vector search)
309
+ const matches = await env.VECTORIZE.query(queryVector, {
310
+ namespace: "customer-abc"
311
+ });
312
+ ```
313
+
314
+ **Limits:**
315
+ - 50,000 namespaces (Paid) / 1,000 (Free)
316
+ - Max 64 bytes per namespace name
317
+ - Namespace filter applied before metadata filters
318
+
319
+ ## Integration Patterns
320
+
321
+ ### Workers AI Integration
322
+
323
+ ```typescript
324
+ import { Ai } from '@cloudflare/ai';
325
+
326
+ export default {
327
+ async fetch(request: Request, env: Env): Promise<Response> {
328
+ const ai = new Ai(env.AI);
329
+
330
+ // Generate embedding
331
+ const userQuery = "what is a vector database";
332
+ const embeddings = await ai.run("@cf/baai/bge-base-en-v1.5", {
333
+ text: [userQuery]
334
+ });
335
+
336
+ // embeddings.data is number[][]
337
+ // Pass embeddings.data[0], NOT embeddings or embeddings.data
338
+ const matches = await env.VECTORIZE.query(embeddings.data[0], {
339
+ topK: 3,
340
+ returnMetadata: "all"
341
+ });
342
+
343
+ return Response.json({ matches });
344
+ }
345
+ };
346
+ ```
347
+
348
+ **Common Embedding Models:**
349
+ - `@cf/baai/bge-base-en-v1.5`: 768 dimensions, English
350
+ - `@cf/baai/bge-large-en-v1.5`: 1024 dimensions, English
351
+ - `@cf/baai/bge-small-en-v1.5`: 384 dimensions, English
352
+
353
+ ### OpenAI Integration
354
+
355
+ ```typescript
356
+ import OpenAI from 'openai';
357
+
358
+ export default {
359
+ async fetch(request: Request, env: Env): Promise<Response> {
360
+ const openai = new OpenAI({ apiKey: env.OPENAI_KEY });
361
+
362
+ const userQuery = "semantic search query";
363
+ const response = await openai.embeddings.create({
364
+ model: "text-embedding-ada-002",
365
+ input: userQuery
366
+ });
367
+
368
+ // Pass response.data[0].embedding, NOT response
369
+ const matches = await env.VECTORIZE.query(response.data[0].embedding, {
370
+ topK: 5,
371
+ returnMetadata: "all"
372
+ });
373
+
374
+ return Response.json({ matches });
375
+ }
376
+ };
377
+ ```
378
+
379
+ ### RAG Pattern
380
+
381
+ ```typescript
382
+ export default {
383
+ async fetch(request: Request, env: Env): Promise<Response> {
384
+ const { query } = await request.json();
385
+
386
+ // 1. Generate query embedding
387
+ const embeddings = await env.AI.run("@cf/baai/bge-base-en-v1.5", {
388
+ text: [query]
389
+ });
390
+
391
+ // 2. Search Vectorize
392
+ const matches = await env.VECTORIZE.query(embeddings.data[0], {
393
+ topK: 5,
394
+ returnMetadata: "all"
395
+ });
396
+
397
+ // 3. Fetch full documents from R2/D1/KV
398
+ const documents = await Promise.all(
399
+ matches.matches.map(async (match) => {
400
+ const key = match.metadata?.r2_key as string;
401
+ const obj = await env.R2_BUCKET.get(key);
402
+ return obj?.text();
403
+ })
404
+ );
405
+
406
+ // 4. Build context for LLM
407
+ const context = documents.filter(Boolean).join("\n\n");
408
+
409
+ // 5. Generate response with context
410
+ const llmResponse = await env.AI.run("@cf/meta/llama-3-8b-instruct", {
411
+ prompt: `Context: ${context}\n\nQuestion: ${query}\n\nAnswer:`
412
+ });
413
+
414
+ return Response.json({ answer: llmResponse, sources: matches.matches });
415
+ }
416
+ };
417
+ ```
418
+
419
+ ## CLI Operations
420
+
421
+ ### Bulk Upload (NDJSON)
422
+
423
+ ```bash
424
+ # File: embeddings.ndjson
425
+ # { "id": "1", "values": [0.1, 0.2, ...], "metadata": {"url": "/doc/1"}}
426
+ # { "id": "2", "values": [0.3, 0.4, ...], "metadata": {"url": "/doc/2"}}
427
+
428
+ npx wrangler vectorize insert <index-name> --file=embeddings.ndjson
429
+ ```
430
+
431
+ **Rate Limits:**
432
+ - Max 5000 vectors per file (Cloudflare API rate limit)
433
+ - Use multiple files for larger batches
434
+
435
+ ### Python HTTP API Example
436
+
437
+ ```python
438
+ import requests
439
+
440
+ url = f"https://api.cloudflare.com/client/v4/accounts/{account_id}/vectorize/v2/indexes/{index_name}/insert"
441
+ headers = {"Authorization": f"Bearer {api_token}"}
442
+
443
+ with open('embeddings.ndjson', 'rb') as f:
444
+ resp = requests.post(url, headers=headers, files=dict(vectors=f))
445
+ print(resp.json())
446
+ ```
447
+
448
+ ## Performance Optimization
449
+
450
+ ### Write Throughput
451
+
452
+ **Batching Strategy:**
453
+ - Vectorize batches up to 200K vectors OR 1000 operations per job
454
+ - Inserting 1 vector at a time = 1000 vectors per job = slow
455
+ - Inserting 2500 vectors at a time = 200K+ vectors per job = fast
456
+
457
+ **Example:**
458
+ ```typescript
459
+ // BAD: 250,000 individual inserts = 250 jobs = ~1 hour
460
+ for (const vector of vectors) {
461
+ await env.VECTORIZE.insert([vector]);
462
+ }
463
+
464
+ // GOOD: 100 batches of 2,500 = 2-3 jobs = minutes
465
+ for (let i = 0; i < vectors.length; i += 2500) {
466
+ const batch = vectors.slice(i, i + 2500);
467
+ await env.VECTORIZE.insert(batch);
468
+ }
469
+ ```
470
+
471
+ ### Query Performance
472
+
473
+ **High-Precision vs. Approximate:**
474
+ - Default: Approximate scoring (faster, good trade-off)
475
+ - `returnValues: true`: High-precision scoring (slower, more accurate)
476
+
477
+ **topK Limits:**
478
+ - Default limit: 100 without values/metadata
479
+ - With `returnValues: true` or `returnMetadata: "all"`: Max 20
480
+ - Balance accuracy vs. latency
481
+
482
+ **Metadata Filter Performance:**
483
+ - Namespace filters applied first (fastest)
484
+ - High-cardinality range queries degrade performance
485
+ - Bucket high-cardinality values when possible
486
+
487
+ ### Mutation Tracking
488
+
489
+ ```bash
490
+ # Check if mutations are processed
491
+ npx wrangler vectorize info <index-name>
492
+
493
+ # Returns processedUpToMutation and processedUpToDatetime
494
+ # Compare with insert/upsert mutationId
495
+ ```
496
+
497
+ ## Limits (V2)
498
+
499
+ | Resource | Limit |
500
+ |----------|-------|
501
+ | Indexes per account | 50,000 (Paid) / 100 (Free) |
502
+ | Max dimensions | 1536 (32-bit float) |
503
+ | Max vector ID length | 64 bytes |
504
+ | Metadata per vector | 10 KiB |
505
+ | Max topK (no values/metadata) | 100 |
506
+ | Max topK (with values/metadata) | 20 |
507
+ | Insert batch size (Workers) | 1000 |
508
+ | Insert batch size (HTTP API) | 5000 |
509
+ | List vectors page size | 1000 |
510
+ | Max index name length | 64 bytes |
511
+ | Max vectors per index | 5,000,000 |
512
+ | Max namespaces | 50,000 (Paid) / 1000 (Free) |
513
+ | Max namespace length | 64 bytes |
514
+ | Max upload size | 100 MB |
515
+ | Max metadata indexes | 10 |
516
+ | Indexed metadata per field | 64 bytes (strings, UTF-8) |
517
+
518
+ ## Common Patterns
519
+
520
+ ### Multi-Tenant Architecture
521
+
522
+ ```typescript
523
+ // Option 1: Separate indexes per tenant (if < 50K tenants)
524
+ const tenantIndex = env[`VECTORIZE_${tenantId.toUpperCase()}`];
525
+
526
+ // Option 2: Namespaces (up to 50K namespaces)
527
+ await env.VECTORIZE.insert([
528
+ { id: "doc-1", values: [...], namespace: `tenant-${tenantId}` }
529
+ ]);
530
+
531
+ const matches = await env.VECTORIZE.query(queryVector, {
532
+ namespace: `tenant-${tenantId}`
533
+ });
534
+
535
+ // Option 3: Metadata filtering (flexible but slower)
536
+ const matches = await env.VECTORIZE.query(queryVector, {
537
+ filter: { tenantId: tenantId }
538
+ });
539
+ ```
540
+
541
+ ### Semantic Search with Metadata
542
+
543
+ ```typescript
544
+ // Index documents with rich metadata
545
+ await env.VECTORIZE.upsert([
546
+ {
547
+ id: doc.id,
548
+ values: embedding,
549
+ metadata: {
550
+ title: doc.title,
551
+ category: doc.category,
552
+ published: Math.floor(doc.date / 1000), // Unix timestamp
553
+ tags: doc.tags.join(","),
554
+ url: doc.url
555
+ }
556
+ }
557
+ ]);
558
+
559
+ // Search with filters
560
+ const matches = await env.VECTORIZE.query(queryVector, {
561
+ topK: 10,
562
+ returnMetadata: "all",
563
+ filter: {
564
+ category: "tutorials",
565
+ published: { $gte: thirtyDaysAgo }
566
+ }
567
+ });
568
+ ```
569
+
570
+ ### Hybrid Search (Vector + Metadata)
571
+
572
+ ```typescript
573
+ // 1. Create metadata indexes for common filters
574
+ // wrangler vectorize create-metadata-index my-index --property-name=category --type=string
575
+ // wrangler vectorize create-metadata-index my-index --property-name=published --type=number
576
+
577
+ // 2. Query with both semantic similarity and filters
578
+ const results = await env.VECTORIZE.query(queryVector, {
579
+ topK: 20,
580
+ returnMetadata: "all",
581
+ filter: {
582
+ category: { $in: ["tech", "science"] },
583
+ published: { $gte: lastMonth },
584
+ status: "published"
585
+ }
586
+ });
587
+ ```
588
+
589
+ ## Error Handling
590
+
591
+ ```typescript
592
+ try {
593
+ const matches = await env.VECTORIZE.query(queryVector, { topK: 5 });
594
+ } catch (error) {
595
+ // Common errors:
596
+ // - Dimension mismatch
597
+ // - Invalid filter syntax
598
+ // - topK exceeds limits
599
+ // - Index not found/not bound
600
+ console.error("Vectorize query failed:", error);
601
+
602
+ // Fallback strategy
603
+ return Response.json({
604
+ error: "Search unavailable",
605
+ matches: []
606
+ }, { status: 503 });
607
+ }
608
+ ```
609
+
610
+ ## Best Practices
611
+
612
+ 1. **Create metadata indexes BEFORE inserting vectors** - existing vectors not retroactively indexed
613
+ 2. **Use upsert for updates** - insert ignores duplicates
614
+ 3. **Batch operations** - 1000-2500 vectors per batch for optimal throughput
615
+ 4. **Monitor mutations** - Use `wrangler vectorize info` to track processing
616
+ 5. **Choose appropriate metric** - cosine for text, euclidean for images
617
+ 6. **Design for cardinality** - Bucket high-cardinality metadata for better range queries
618
+ 7. **Namespace for tenant isolation** - Faster than metadata filters
619
+ 8. **Return metadata strategically** - Use "indexed" for speed, "all" when needed
620
+ 9. **Validate dimensions** - Must match index configuration exactly
621
+ 10. **Handle async operations** - Inserts/upserts take seconds to be queryable
622
+
623
+ ## Common Mistakes
624
+
625
+ 1. **Passing wrong data shape to query():**
626
+ - Workers AI: Pass `embeddings.data[0]`, not `embeddings`
627
+ - OpenAI: Pass `response.data[0].embedding`, not `response`
628
+
629
+ 2. **Creating metadata indexes after inserting vectors** - Won't index existing vectors
630
+
631
+ 3. **Using insert when upsert is needed** - Duplicates ignored with insert
632
+
633
+ 4. **Not batching operations** - 1 vector per request is extremely slow
634
+
635
+ 5. **Returning all values/metadata by default** - Impacts performance and topK limit
636
+
637
+ 6. **High-cardinality range queries** - Use bucketing or discrete values
638
+
639
+ 7. **Exceeding topK limits** - 20 with values/metadata, 100 without
640
+
641
+ 8. **Forgetting to run wrangler types** - Missing TypeScript types after config changes
642
+
643
+ ## Troubleshooting
644
+
645
+ ### Vectors not appearing in queries
646
+
647
+ - Check mutation processed: `wrangler vectorize info <index>`
648
+ - Wait 5-10 seconds after insert/upsert
649
+ - Verify mutationId matches processedUpToMutation
650
+
651
+ ### Dimension mismatch errors
652
+
653
+ - Ensure query vector length matches index dimensions exactly
654
+ - Check embedding model output dimensions
655
+
656
+ ### Filter not working
657
+
658
+ - Verify metadata index created: `wrangler vectorize list-metadata-index <index>`
659
+ - Re-upsert vectors after creating metadata index
660
+ - Check filter syntax and operator constraints
661
+
662
+ ### Performance issues
663
+
664
+ - Reduce topK if using returnValues or returnMetadata="all"
665
+ - Simplify metadata filters (avoid high-cardinality ranges)
666
+ - Use namespace filtering instead of metadata when possible
667
+ - Batch insert/upsert operations properly
668
+
669
+ ## Resources
670
+
671
+ - [Official Docs](https://developers.cloudflare.com/vectorize/)
672
+ - [Client API Reference](https://developers.cloudflare.com/vectorize/reference/client-api/)
673
+ - [Metadata Filtering](https://developers.cloudflare.com/vectorize/reference/metadata-filtering/)
674
+ - [Limits](https://developers.cloudflare.com/vectorize/platform/limits/)
675
+ - [Workers AI Models](https://developers.cloudflare.com/workers-ai/models/#text-embeddings)
676
+ - [Wrangler Commands](https://developers.cloudflare.com/workers/wrangler/commands/#vectorize)
677
+ - [Discord: #vectorize](https://discord.cloudflare.com)
678
+
679
+ ---
680
+
681
+ **Version:** V2 (GA) - Requires Wrangler 3.71.0+
682
+ **Last Updated:** 2025-01-11
@@ -0,0 +1,14 @@
1
+ # Cloudflare WAF Expert Skill Reference
2
+
3
+ **Expertise**: Cloudflare Web Application Firewall (WAF) configuration, custom rules, managed rulesets, rate limiting, attack detection, and API integration...
4
+
5
+ ## In This Reference
6
+
7
+ - **[configuration.md](./configuration.md)** - Setup, deployment, configuration
8
+ - **[api.md](./api.md)** - API endpoints, methods, interfaces
9
+ - **[patterns.md](./patterns.md)** - Common patterns, use cases, examples
10
+ - **[gotchas.md](./gotchas.md)** - Troubleshooting, best practices, limitations
11
+
12
+ ## See Also
13
+
14
+ - [Cloudflare Docs](https://developers.cloudflare.com/)
@@ -0,0 +1,3 @@
1
+ # API Reference
2
+
3
+ See main documentation.