memory-journal-mcp 7.7.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/README.md +126 -56
  2. package/dist/chunk-6OHRCNYW.js +3231 -0
  3. package/dist/chunk-JFMITANR.js +5168 -0
  4. package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
  5. package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
  6. package/dist/cli.js +21 -3
  7. package/dist/index.d.ts +16 -13
  8. package/dist/index.js +4 -2
  9. package/dist/resources-IJVKDFGS.js +2 -0
  10. package/dist/tools-44DGXE3V.js +2 -0
  11. package/dist/worker-script.js +201 -20
  12. package/package.json +7 -4
  13. package/skills/README.md +62 -25
  14. package/skills/adversarial-performance/SKILL.md +139 -0
  15. package/skills/adversarial-performance/references/audit-categories.md +462 -0
  16. package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
  17. package/skills/adversarial-performance/references/copilot-usage.md +16 -0
  18. package/skills/adversarial-performance/references/feedback-loop.md +177 -0
  19. package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
  20. package/skills/adversarial-planner/SKILL.md +23 -54
  21. package/skills/adversarial-planner/references/copilot-integration.md +25 -40
  22. package/skills/adversarial-planner/references/copilot-usage.md +16 -0
  23. package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
  24. package/skills/adversarial-security/SKILL.md +149 -0
  25. package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
  26. package/skills/adversarial-security/references/audit-categories.md +723 -0
  27. package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
  28. package/skills/adversarial-security/references/copilot-usage.md +16 -0
  29. package/skills/adversarial-security/references/feedback-loop.md +206 -0
  30. package/skills/adversarial-security/references/journal-opt-out.md +7 -0
  31. package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
  32. package/skills/adversarial-skill-audit/SKILL.md +118 -0
  33. package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
  34. package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
  35. package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
  36. package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
  37. package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
  38. package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
  39. package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
  40. package/skills/adversarial-workflow-audit/SKILL.md +82 -0
  41. package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
  42. package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
  43. package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
  44. package/skills/agents-sdk/SKILL.md +220 -0
  45. package/skills/agents-sdk/references/callable.md +92 -0
  46. package/skills/agents-sdk/references/codemode.md +209 -0
  47. package/skills/agents-sdk/references/email.md +144 -0
  48. package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
  49. package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
  50. package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
  51. package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
  52. package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
  53. package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
  54. package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
  55. package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
  56. package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
  57. package/skills/agents-sdk/references/mcp.md +157 -0
  58. package/skills/agents-sdk/references/state-scheduling.md +164 -0
  59. package/skills/agents-sdk/references/streaming-chat.md +168 -0
  60. package/skills/agents-sdk/references/workflows.md +136 -0
  61. package/skills/auth-identity/SKILL.md +48 -0
  62. package/skills/autonomous-dev/SKILL.md +46 -23
  63. package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
  64. package/skills/aws/SKILL.md +39 -0
  65. package/skills/azure/SKILL.md +38 -0
  66. package/skills/bin/sync.js +7 -1
  67. package/skills/biome/SKILL.md +59 -0
  68. package/skills/bun/SKILL.md +8 -2
  69. package/skills/cloudflare/SKILL.md +37 -0
  70. package/skills/cloudflare/references/agents-sdk/README.md +95 -0
  71. package/skills/cloudflare/references/agents-sdk/api.md +195 -0
  72. package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
  73. package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
  74. package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
  75. package/skills/cloudflare/references/ai-gateway/README.md +176 -0
  76. package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
  77. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
  78. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  79. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
  80. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
  81. package/skills/cloudflare/references/ai-search/README.md +145 -0
  82. package/skills/cloudflare/references/ai-search/api.md +87 -0
  83. package/skills/cloudflare/references/ai-search/configuration.md +91 -0
  84. package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
  85. package/skills/cloudflare/references/ai-search/patterns.md +87 -0
  86. package/skills/cloudflare/references/analytics-engine/README.md +96 -0
  87. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  88. package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
  89. package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
  90. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  91. package/skills/cloudflare/references/api/README.md +66 -0
  92. package/skills/cloudflare/references/api/api.md +205 -0
  93. package/skills/cloudflare/references/api/configuration.md +158 -0
  94. package/skills/cloudflare/references/api/gotchas.md +231 -0
  95. package/skills/cloudflare/references/api/patterns.md +208 -0
  96. package/skills/cloudflare/references/api-shield/README.md +44 -0
  97. package/skills/cloudflare/references/api-shield/api.md +153 -0
  98. package/skills/cloudflare/references/api-shield/configuration.md +210 -0
  99. package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
  100. package/skills/cloudflare/references/api-shield/patterns.md +185 -0
  101. package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
  102. package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
  103. package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
  104. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
  105. package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
  106. package/skills/cloudflare/references/bindings/README.md +127 -0
  107. package/skills/cloudflare/references/bindings/api.md +214 -0
  108. package/skills/cloudflare/references/bindings/configuration.md +200 -0
  109. package/skills/cloudflare/references/bindings/gotchas.md +210 -0
  110. package/skills/cloudflare/references/bindings/patterns.md +205 -0
  111. package/skills/cloudflare/references/bot-management/README.md +95 -0
  112. package/skills/cloudflare/references/bot-management/api.md +175 -0
  113. package/skills/cloudflare/references/bot-management/configuration.md +175 -0
  114. package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
  115. package/skills/cloudflare/references/bot-management/patterns.md +181 -0
  116. package/skills/cloudflare/references/browser-rendering/README.md +84 -0
  117. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  118. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  119. package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
  120. package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
  121. package/skills/cloudflare/references/c3/README.md +111 -0
  122. package/skills/cloudflare/references/c3/api.md +71 -0
  123. package/skills/cloudflare/references/c3/configuration.md +85 -0
  124. package/skills/cloudflare/references/c3/gotchas.md +97 -0
  125. package/skills/cloudflare/references/c3/patterns.md +84 -0
  126. package/skills/cloudflare/references/cache-reserve/README.md +150 -0
  127. package/skills/cloudflare/references/cache-reserve/api.md +184 -0
  128. package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
  129. package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
  130. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  131. package/skills/cloudflare/references/containers/README.md +87 -0
  132. package/skills/cloudflare/references/containers/api.md +197 -0
  133. package/skills/cloudflare/references/containers/configuration.md +191 -0
  134. package/skills/cloudflare/references/containers/gotchas.md +182 -0
  135. package/skills/cloudflare/references/containers/patterns.md +204 -0
  136. package/skills/cloudflare/references/cron-triggers/README.md +101 -0
  137. package/skills/cloudflare/references/cron-triggers/api.md +224 -0
  138. package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
  139. package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
  140. package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
  141. package/skills/cloudflare/references/d1/README.md +137 -0
  142. package/skills/cloudflare/references/d1/api.md +213 -0
  143. package/skills/cloudflare/references/d1/configuration.md +198 -0
  144. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  145. package/skills/cloudflare/references/d1/patterns.md +240 -0
  146. package/skills/cloudflare/references/ddos/README.md +42 -0
  147. package/skills/cloudflare/references/ddos/api.md +158 -0
  148. package/skills/cloudflare/references/ddos/configuration.md +94 -0
  149. package/skills/cloudflare/references/ddos/gotchas.md +114 -0
  150. package/skills/cloudflare/references/ddos/patterns.md +220 -0
  151. package/skills/cloudflare/references/decision-trees.md +95 -0
  152. package/skills/cloudflare/references/do-storage/README.md +79 -0
  153. package/skills/cloudflare/references/do-storage/api.md +107 -0
  154. package/skills/cloudflare/references/do-storage/configuration.md +114 -0
  155. package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
  156. package/skills/cloudflare/references/do-storage/patterns.md +210 -0
  157. package/skills/cloudflare/references/do-storage/testing.md +186 -0
  158. package/skills/cloudflare/references/durable-objects/README.md +194 -0
  159. package/skills/cloudflare/references/durable-objects/api.md +205 -0
  160. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  161. package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
  162. package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
  163. package/skills/cloudflare/references/email-routing/README.md +89 -0
  164. package/skills/cloudflare/references/email-routing/api.md +192 -0
  165. package/skills/cloudflare/references/email-routing/configuration.md +187 -0
  166. package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
  167. package/skills/cloudflare/references/email-routing/patterns.md +241 -0
  168. package/skills/cloudflare/references/email-workers/README.md +153 -0
  169. package/skills/cloudflare/references/email-workers/api.md +227 -0
  170. package/skills/cloudflare/references/email-workers/configuration.md +115 -0
  171. package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
  172. package/skills/cloudflare/references/email-workers/patterns.md +108 -0
  173. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  174. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  175. package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
  176. package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
  177. package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
  178. package/skills/cloudflare/references/hyperdrive/README.md +84 -0
  179. package/skills/cloudflare/references/hyperdrive/api.md +149 -0
  180. package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
  181. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  182. package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
  183. package/skills/cloudflare/references/images/README.md +65 -0
  184. package/skills/cloudflare/references/images/api.md +101 -0
  185. package/skills/cloudflare/references/images/configuration.md +206 -0
  186. package/skills/cloudflare/references/images/gotchas.md +106 -0
  187. package/skills/cloudflare/references/images/patterns.md +126 -0
  188. package/skills/cloudflare/references/kv/README.md +90 -0
  189. package/skills/cloudflare/references/kv/api.md +163 -0
  190. package/skills/cloudflare/references/kv/configuration.md +148 -0
  191. package/skills/cloudflare/references/kv/gotchas.md +133 -0
  192. package/skills/cloudflare/references/kv/patterns.md +195 -0
  193. package/skills/cloudflare/references/miniflare/README.md +113 -0
  194. package/skills/cloudflare/references/miniflare/api.md +204 -0
  195. package/skills/cloudflare/references/miniflare/configuration.md +174 -0
  196. package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
  197. package/skills/cloudflare/references/miniflare/patterns.md +187 -0
  198. package/skills/cloudflare/references/network-interconnect/README.md +104 -0
  199. package/skills/cloudflare/references/network-interconnect/api.md +220 -0
  200. package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
  201. package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
  202. package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
  203. package/skills/cloudflare/references/observability/README.md +93 -0
  204. package/skills/cloudflare/references/observability/api.md +168 -0
  205. package/skills/cloudflare/references/observability/configuration.md +178 -0
  206. package/skills/cloudflare/references/observability/gotchas.md +125 -0
  207. package/skills/cloudflare/references/observability/patterns.md +105 -0
  208. package/skills/cloudflare/references/pages/README.md +92 -0
  209. package/skills/cloudflare/references/pages/api.md +205 -0
  210. package/skills/cloudflare/references/pages/configuration.md +216 -0
  211. package/skills/cloudflare/references/pages/gotchas.md +218 -0
  212. package/skills/cloudflare/references/pages/patterns.md +215 -0
  213. package/skills/cloudflare/references/pages-functions/README.md +104 -0
  214. package/skills/cloudflare/references/pages-functions/api.md +159 -0
  215. package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
  216. package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
  217. package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
  218. package/skills/cloudflare/references/pipelines/README.md +109 -0
  219. package/skills/cloudflare/references/pipelines/api.md +214 -0
  220. package/skills/cloudflare/references/pipelines/configuration.md +98 -0
  221. package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
  222. package/skills/cloudflare/references/pipelines/patterns.md +87 -0
  223. package/skills/cloudflare/references/product-index.md +112 -0
  224. package/skills/cloudflare/references/pulumi/README.md +113 -0
  225. package/skills/cloudflare/references/pulumi/api.md +230 -0
  226. package/skills/cloudflare/references/pulumi/configuration.md +213 -0
  227. package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
  228. package/skills/cloudflare/references/pulumi/patterns.md +260 -0
  229. package/skills/cloudflare/references/queues/README.md +99 -0
  230. package/skills/cloudflare/references/queues/api.md +211 -0
  231. package/skills/cloudflare/references/queues/configuration.md +151 -0
  232. package/skills/cloudflare/references/queues/gotchas.md +210 -0
  233. package/skills/cloudflare/references/queues/patterns.md +220 -0
  234. package/skills/cloudflare/references/r2/README.md +97 -0
  235. package/skills/cloudflare/references/r2/api.md +235 -0
  236. package/skills/cloudflare/references/r2/configuration.md +176 -0
  237. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  238. package/skills/cloudflare/references/r2/patterns.md +203 -0
  239. package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
  240. package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
  241. package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
  242. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
  243. package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
  244. package/skills/cloudflare/references/r2-sql/README.md +138 -0
  245. package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
  246. package/skills/cloudflare/references/r2-sql/api.md +159 -0
  247. package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
  248. package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
  249. package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
  250. package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
  251. package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
  252. package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
  253. package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
  254. package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
  255. package/skills/cloudflare/references/realtimekit/README.md +118 -0
  256. package/skills/cloudflare/references/realtimekit/api.md +234 -0
  257. package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
  258. package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
  259. package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
  260. package/skills/cloudflare/references/sandbox/README.md +104 -0
  261. package/skills/cloudflare/references/sandbox/api.md +200 -0
  262. package/skills/cloudflare/references/sandbox/configuration.md +154 -0
  263. package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
  264. package/skills/cloudflare/references/sandbox/patterns.md +195 -0
  265. package/skills/cloudflare/references/secrets-store/README.md +77 -0
  266. package/skills/cloudflare/references/secrets-store/api.md +199 -0
  267. package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
  268. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  269. package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
  270. package/skills/cloudflare/references/smart-placement/README.md +143 -0
  271. package/skills/cloudflare/references/smart-placement/api.md +192 -0
  272. package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
  273. package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
  274. package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
  275. package/skills/cloudflare/references/snippets/README.md +74 -0
  276. package/skills/cloudflare/references/snippets/api.md +214 -0
  277. package/skills/cloudflare/references/snippets/configuration.md +239 -0
  278. package/skills/cloudflare/references/snippets/gotchas.md +104 -0
  279. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  280. package/skills/cloudflare/references/spectrum/README.md +52 -0
  281. package/skills/cloudflare/references/spectrum/api.md +184 -0
  282. package/skills/cloudflare/references/spectrum/configuration.md +203 -0
  283. package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
  284. package/skills/cloudflare/references/spectrum/patterns.md +206 -0
  285. package/skills/cloudflare/references/static-assets/README.md +65 -0
  286. package/skills/cloudflare/references/static-assets/api.md +201 -0
  287. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  288. package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
  289. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  290. package/skills/cloudflare/references/stream/README.md +123 -0
  291. package/skills/cloudflare/references/stream/api-live.md +202 -0
  292. package/skills/cloudflare/references/stream/api.md +206 -0
  293. package/skills/cloudflare/references/stream/configuration.md +151 -0
  294. package/skills/cloudflare/references/stream/gotchas.md +139 -0
  295. package/skills/cloudflare/references/stream/patterns.md +217 -0
  296. package/skills/cloudflare/references/tail-workers/README.md +92 -0
  297. package/skills/cloudflare/references/tail-workers/api.md +203 -0
  298. package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
  299. package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
  300. package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
  301. package/skills/cloudflare/references/terraform/README.md +100 -0
  302. package/skills/cloudflare/references/terraform/api.md +178 -0
  303. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  304. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  305. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  306. package/skills/cloudflare/references/tunnel/README.md +137 -0
  307. package/skills/cloudflare/references/tunnel/api.md +205 -0
  308. package/skills/cloudflare/references/tunnel/configuration.md +163 -0
  309. package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
  310. package/skills/cloudflare/references/tunnel/networking.md +174 -0
  311. package/skills/cloudflare/references/tunnel/patterns.md +199 -0
  312. package/skills/cloudflare/references/turn/README.md +86 -0
  313. package/skills/cloudflare/references/turn/api.md +236 -0
  314. package/skills/cloudflare/references/turn/configuration.md +181 -0
  315. package/skills/cloudflare/references/turn/gotchas.md +236 -0
  316. package/skills/cloudflare/references/turn/patterns.md +228 -0
  317. package/skills/cloudflare/references/turnstile/README.md +102 -0
  318. package/skills/cloudflare/references/turnstile/api.md +253 -0
  319. package/skills/cloudflare/references/turnstile/configuration.md +242 -0
  320. package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
  321. package/skills/cloudflare/references/turnstile/patterns.md +195 -0
  322. package/skills/cloudflare/references/vectorize/README.md +133 -0
  323. package/skills/cloudflare/references/vectorize/api.md +89 -0
  324. package/skills/cloudflare/references/vectorize/configuration.md +91 -0
  325. package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
  326. package/skills/cloudflare/references/vectorize/patterns.md +92 -0
  327. package/skills/cloudflare/references/waf/README.md +125 -0
  328. package/skills/cloudflare/references/waf/api.md +203 -0
  329. package/skills/cloudflare/references/waf/configuration.md +215 -0
  330. package/skills/cloudflare/references/waf/gotchas.md +208 -0
  331. package/skills/cloudflare/references/waf/patterns.md +236 -0
  332. package/skills/cloudflare/references/web-analytics/README.md +149 -0
  333. package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
  334. package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
  335. package/skills/cloudflare/references/web-analytics/integration.md +63 -0
  336. package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
  337. package/skills/cloudflare/references/workerd/README.md +85 -0
  338. package/skills/cloudflare/references/workerd/api.md +219 -0
  339. package/skills/cloudflare/references/workerd/configuration.md +200 -0
  340. package/skills/cloudflare/references/workerd/gotchas.md +151 -0
  341. package/skills/cloudflare/references/workerd/patterns.md +205 -0
  342. package/skills/cloudflare/references/workers/README.md +110 -0
  343. package/skills/cloudflare/references/workers/api.md +197 -0
  344. package/skills/cloudflare/references/workers/configuration.md +184 -0
  345. package/skills/cloudflare/references/workers/frameworks.md +200 -0
  346. package/skills/cloudflare/references/workers/gotchas.md +145 -0
  347. package/skills/cloudflare/references/workers/patterns.md +220 -0
  348. package/skills/cloudflare/references/workers-ai/README.md +206 -0
  349. package/skills/cloudflare/references/workers-ai/api.md +115 -0
  350. package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
  351. package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
  352. package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
  353. package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
  354. package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
  355. package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
  356. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  357. package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
  358. package/skills/cloudflare/references/workers-playground/README.md +131 -0
  359. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  360. package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
  361. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  362. package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
  363. package/skills/cloudflare/references/workers-vpc/README.md +130 -0
  364. package/skills/cloudflare/references/workers-vpc/api.md +196 -0
  365. package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
  366. package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
  367. package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
  368. package/skills/cloudflare/references/workflows/README.md +72 -0
  369. package/skills/cloudflare/references/workflows/api.md +237 -0
  370. package/skills/cloudflare/references/workflows/configuration.md +158 -0
  371. package/skills/cloudflare/references/workflows/gotchas.md +97 -0
  372. package/skills/cloudflare/references/workflows/patterns.md +245 -0
  373. package/skills/cloudflare/references/wrangler/README.md +143 -0
  374. package/skills/cloudflare/references/wrangler/api.md +188 -0
  375. package/skills/cloudflare/references/wrangler/configuration.md +198 -0
  376. package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
  377. package/skills/cloudflare/references/wrangler/patterns.md +211 -0
  378. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
  379. package/skills/cloudflare/references/zaraz/README.md +114 -0
  380. package/skills/cloudflare/references/zaraz/api.md +118 -0
  381. package/skills/cloudflare/references/zaraz/configuration.md +94 -0
  382. package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
  383. package/skills/cloudflare/references/zaraz/patterns.md +77 -0
  384. package/skills/docker/SKILL.md +7 -101
  385. package/skills/docker/references/advanced-examples.md +71 -0
  386. package/skills/docker/references/templates.md +34 -0
  387. package/skills/docs-marketer/SKILL.md +178 -0
  388. package/skills/docs-marketer/references/audit-categories.md +328 -0
  389. package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
  390. package/skills/docs-marketer/references/copilot-usage.md +16 -0
  391. package/skills/docs-marketer/references/feedback-loop.md +155 -0
  392. package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
  393. package/skills/drizzle-orm/SKILL.md +82 -0
  394. package/skills/durable-objects/SKILL.md +167 -0
  395. package/skills/durable-objects/references/advanced_features.md +29 -0
  396. package/skills/durable-objects/references/rules.md +300 -0
  397. package/skills/durable-objects/references/testing.md +261 -0
  398. package/skills/durable-objects/references/workers.md +336 -0
  399. package/skills/gcp/SKILL.md +37 -0
  400. package/skills/github-actions/SKILL.md +5 -58
  401. package/skills/github-actions/references/templates.md +65 -0
  402. package/skills/github-commander/SKILL.md +13 -21
  403. package/skills/github-commander/workflows/copilot-audit.md +12 -12
  404. package/skills/github-copilot-cli/SKILL.md +21 -26
  405. package/skills/github-repo-setup/SKILL.md +136 -0
  406. package/skills/github-repo-setup/references/community-standards.md +136 -0
  407. package/skills/github-repo-setup/references/github-automation.md +490 -0
  408. package/skills/github-repo-setup/references/inline-templates.md +205 -0
  409. package/skills/github-repo-setup/references/project-config.md +320 -0
  410. package/skills/gitlab/SKILL.md +7 -2
  411. package/skills/gitlab/package-lock.json +389 -389
  412. package/skills/golang/SKILL.md +8 -1
  413. package/skills/graphql/SKILL.md +30 -0
  414. package/skills/hono/SKILL.md +82 -0
  415. package/skills/journal-optimizer/SKILL.md +206 -0
  416. package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
  417. package/skills/llm-app-engineering/SKILL.md +18 -0
  418. package/skills/monorepo/SKILL.md +56 -0
  419. package/skills/multi-agent-orchestration/SKILL.md +14 -0
  420. package/skills/mysql/SKILL.md +6 -2
  421. package/skills/next-best-practices/SKILL.md +86 -0
  422. package/skills/next-best-practices/references/cache-components-examples.md +234 -0
  423. package/skills/next-best-practices/references/cache-components.md +210 -0
  424. package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
  425. package/skills/next-best-practices/references/upgrade.md +43 -0
  426. package/skills/next-cache-components/SKILL.md +441 -0
  427. package/skills/next-upgrade/SKILL.md +43 -0
  428. package/skills/next-upgrade/references/decision-tree.md +33 -0
  429. package/skills/nodejs/SKILL.md +46 -0
  430. package/skills/opentelemetry/SKILL.md +62 -0
  431. package/skills/package.json +39 -4
  432. package/skills/playwright-standard/SKILL.md +6 -11
  433. package/skills/playwright-standard/references/locators.md +7 -0
  434. package/skills/postgres/SKILL.md +6 -1
  435. package/skills/python/SKILL.md +8 -70
  436. package/skills/python/references/advanced-patterns.md +37 -0
  437. package/skills/python/references/config-templates.md +48 -0
  438. package/skills/rag-pipelines/SKILL.md +14 -0
  439. package/skills/redis/SKILL.md +31 -0
  440. package/skills/render/SKILL.md +35 -0
  441. package/skills/rust/SKILL.md +15 -25
  442. package/skills/rust/references/borrow-checker.md +13 -0
  443. package/skills/rust/references/ecosystem.md +11 -0
  444. package/skills/sandbox-sdk/SKILL.md +186 -0
  445. package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
  446. package/skills/sandbox-sdk/references/examples.md +52 -0
  447. package/skills/shadcn-ui/SKILL.md +22 -57
  448. package/skills/skill-builder/SKILL.md +23 -424
  449. package/skills/skill-builder/references/tutorial.md +457 -0
  450. package/skills/sqlite/SKILL.md +16 -5
  451. package/skills/table.md +59 -0
  452. package/skills/tailwind-css/SKILL.md +11 -60
  453. package/skills/tailwind-css/references/component-patterns.md +52 -0
  454. package/skills/trpc/SKILL.md +56 -0
  455. package/skills/typescript/SKILL.md +30 -433
  456. package/skills/typescript/references/tutorial.md +453 -0
  457. package/skills/vercel-ai-sdk/SKILL.md +48 -0
  458. package/skills/vitest-standard/SKILL.md +5 -11
  459. package/skills/vitest-standard/references/assertions.md +11 -0
  460. package/skills/web-perf/SKILL.md +207 -0
  461. package/skills/workers-best-practices/SKILL.md +120 -0
  462. package/skills/workers-best-practices/references/anti-patterns.md +18 -0
  463. package/skills/workers-best-practices/references/review.md +174 -0
  464. package/skills/workers-best-practices/references/rules.md +485 -0
  465. package/skills/wrangler/SKILL.md +43 -0
  466. package/skills/wrangler/references/cli-commands.md +861 -0
  467. package/skills/zod/SKILL.md +48 -0
  468. package/dist/tools-P4VGG4FH.js +0 -1
  469. package/skills/react-best-practices/AGENTS.md +0 -2883
  470. package/skills/react-best-practices/SKILL.md +0 -138
  471. /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
  472. /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
  473. /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
  474. /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
  475. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
  476. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
  477. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
  478. /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
  479. /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
  480. /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
  481. /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
  482. /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
  483. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
  484. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
  485. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
  486. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
  487. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
  488. /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
  489. /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
  490. /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
  491. /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
  492. /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
  493. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
  494. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
  495. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
  496. /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
  497. /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
  498. /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
  499. /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
  500. /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
  501. /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
  502. /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
  503. /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
  504. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
  505. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
  506. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
  507. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
  508. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
  509. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
  510. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
  511. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
  512. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
  513. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
  514. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
  515. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
  516. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
  517. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
  518. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
  519. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
  520. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
  521. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
  522. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
  523. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
  524. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
  525. /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
  526. /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
  527. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
  528. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
  529. /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
  530. /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
  531. /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
@@ -0,0 +1,176 @@
1
+ # R2 Configuration
2
+
3
+ ## Workers Binding
4
+
5
+ **wrangler.jsonc:**
6
+
7
+ ```jsonc
8
+ {
9
+ "r2_buckets": [
10
+ {
11
+ "binding": "MY_BUCKET",
12
+ "bucket_name": "my-bucket-name",
13
+ },
14
+ ],
15
+ }
16
+ ```
17
+
18
+ ## TypeScript Types
19
+
20
+ ```typescript
21
+ interface Env {
22
+ MY_BUCKET: R2Bucket
23
+ }
24
+
25
+ export default {
26
+ async fetch(request: Request, env: Env): Promise<Response> {
27
+ const object = await env.MY_BUCKET.get('file.txt')
28
+ return new Response(object?.body)
29
+ },
30
+ }
31
+ ```
32
+
33
+ ## S3 SDK Setup
34
+
35
+ ```typescript
36
+ import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'
37
+
38
+ const s3 = new S3Client({
39
+ region: 'auto',
40
+ endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
41
+ credentials: {
42
+ accessKeyId: env.R2_ACCESS_KEY_ID,
43
+ secretAccessKey: env.R2_SECRET_ACCESS_KEY,
44
+ },
45
+ })
46
+
47
+ await s3.send(
48
+ new PutObjectCommand({
49
+ Bucket: 'my-bucket',
50
+ Key: 'file.txt',
51
+ Body: data,
52
+ StorageClass: 'STANDARD', // or 'STANDARD_IA'
53
+ })
54
+ )
55
+ ```
56
+
57
+ ## Location Hints
58
+
59
+ ```bash
60
+ wrangler r2 bucket create my-bucket --location=enam
61
+
62
+ # Hints: wnam, enam, weur, eeur, apac, oc
63
+ # Jurisdictions (override hint): --jurisdiction=eu (or fedramp)
64
+ ```
65
+
66
+ ## CORS Configuration
67
+
68
+ CORS must be configured via S3 SDK or dashboard (not available in Workers API):
69
+
70
+ ```typescript
71
+ import { S3Client, PutBucketCorsCommand } from '@aws-sdk/client-s3'
72
+
73
+ const s3 = new S3Client({
74
+ region: 'auto',
75
+ endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
76
+ credentials: {
77
+ accessKeyId: env.R2_ACCESS_KEY_ID,
78
+ secretAccessKey: env.R2_SECRET_ACCESS_KEY,
79
+ },
80
+ })
81
+
82
+ await s3.send(
83
+ new PutBucketCorsCommand({
84
+ Bucket: 'my-bucket',
85
+ CORSConfiguration: {
86
+ CORSRules: [
87
+ {
88
+ AllowedOrigins: ['https://example.com'],
89
+ AllowedMethods: ['GET', 'PUT', 'HEAD'],
90
+ AllowedHeaders: ['*'],
91
+ ExposeHeaders: ['ETag'],
92
+ MaxAgeSeconds: 3600,
93
+ },
94
+ ],
95
+ },
96
+ })
97
+ )
98
+ ```
99
+
100
+ ## Object Lifecycles
101
+
102
+ ```typescript
103
+ import { PutBucketLifecycleConfigurationCommand } from '@aws-sdk/client-s3'
104
+
105
+ await s3.send(
106
+ new PutBucketLifecycleConfigurationCommand({
107
+ Bucket: 'my-bucket',
108
+ LifecycleConfiguration: {
109
+ Rules: [
110
+ {
111
+ ID: 'expire-old-logs',
112
+ Status: 'Enabled',
113
+ Prefix: 'logs/',
114
+ Expiration: { Days: 90 },
115
+ },
116
+ {
117
+ ID: 'transition-to-ia',
118
+ Status: 'Enabled',
119
+ Prefix: 'archives/',
120
+ Transitions: [{ Days: 30, StorageClass: 'STANDARD_IA' }],
121
+ },
122
+ ],
123
+ },
124
+ })
125
+ )
126
+ ```
127
+
128
+ ## API Token Scopes
129
+
130
+ When creating R2 tokens, set minimal permissions:
131
+
132
+ | Permission | Use Case |
133
+ | ------------------- | ----------------------------------- |
134
+ | Object Read | Public serving, downloads |
135
+ | Object Write | Uploads only |
136
+ | Object Read & Write | Full object operations |
137
+ | Admin Read & Write | Bucket management, CORS, lifecycles |
138
+
139
+ **Best practice:** Separate tokens for Workers (read/write) vs admin tasks (CORS, lifecycles).
140
+
141
+ ## Event Notifications
142
+
143
+ ```jsonc
144
+ // wrangler.jsonc
145
+ {
146
+ "r2_buckets": [
147
+ {
148
+ "binding": "MY_BUCKET",
149
+ "bucket_name": "my-bucket",
150
+ "event_notifications": [
151
+ {
152
+ "queue": "r2-events",
153
+ "actions": ["PutObject", "DeleteObject", "CompleteMultipartUpload"],
154
+ },
155
+ ],
156
+ },
157
+ ],
158
+ "queues": {
159
+ "producers": [{ "binding": "R2_EVENTS", "queue": "r2-events" }],
160
+ "consumers": [{ "queue": "r2-events", "max_batch_size": 10 }],
161
+ },
162
+ }
163
+ ```
164
+
165
+ ## Bucket Management
166
+
167
+ ```bash
168
+ wrangler r2 bucket create my-bucket --location=enam --storage-class=Standard
169
+ wrangler r2 bucket list
170
+ wrangler r2 bucket info my-bucket
171
+ wrangler r2 bucket delete my-bucket # Must be empty
172
+ wrangler r2 bucket update-storage-class my-bucket --storage-class=InfrequentAccess
173
+
174
+ # Public bucket via dashboard
175
+ wrangler r2 bucket domain add my-bucket --domain=files.example.com
176
+ ```
@@ -0,0 +1,190 @@
1
+ # R2 Gotchas & Troubleshooting
2
+
3
+ ## List Truncation
4
+
5
+ ```typescript
6
+ // ❌ WRONG: Don't compare object count when using include
7
+ while (listed.objects.length < options.limit) { ... }
8
+
9
+ // ✅ CORRECT: Always use truncated property
10
+ while (listed.truncated) {
11
+ const next = await env.MY_BUCKET.list({ cursor: listed.cursor });
12
+ // ...
13
+ }
14
+ ```
15
+
16
+ **Reason:** `include` with metadata may return fewer objects per page to fit metadata.
17
+
18
+ ## ETag Format
19
+
20
+ ```typescript
21
+ // ❌ WRONG: Using etag (unquoted) in headers
22
+ headers.set('etag', object.etag) // Missing quotes
23
+
24
+ // ✅ CORRECT: Use httpEtag (quoted)
25
+ headers.set('etag', object.httpEtag)
26
+ ```
27
+
28
+ ## Checksum Limits
29
+
30
+ Only ONE checksum algorithm allowed per PUT:
31
+
32
+ ```typescript
33
+ // ❌ WRONG: Multiple checksums
34
+ await env.MY_BUCKET.put(key, data, { md5: hash1, sha256: hash2 }) // Error
35
+
36
+ // ✅ CORRECT: Pick one
37
+ await env.MY_BUCKET.put(key, data, { sha256: hash })
38
+ ```
39
+
40
+ ## Multipart Requirements
41
+
42
+ - All parts must be uniform size (except last part)
43
+ - Part numbers start at 1 (not 0)
44
+ - Uncompleted uploads auto-abort after 7 days
45
+ - `resumeMultipartUpload` doesn't validate uploadId existence
46
+
47
+ ## Conditional Operations
48
+
49
+ ```typescript
50
+ // Precondition failure returns object WITHOUT body
51
+ const object = await env.MY_BUCKET.get(key, {
52
+ onlyIf: { etagMatches: '"wrong"' },
53
+ })
54
+
55
+ // Check for body, not just null
56
+ if (!object) return new Response('Not found', { status: 404 })
57
+ if (!object.body) return new Response(null, { status: 304 }) // Precondition failed
58
+ ```
59
+
60
+ ## Key Validation
61
+
62
+ ```typescript
63
+ // ❌ DANGEROUS: Path traversal
64
+ const key = url.pathname.slice(1) // Could be ../../../etc/passwd
65
+ await env.MY_BUCKET.get(key)
66
+
67
+ // ✅ SAFE: Validate keys
68
+ if (!key || key.includes('..') || key.startsWith('/')) {
69
+ return new Response('Invalid key', { status: 400 })
70
+ }
71
+ ```
72
+
73
+ ## Storage Class Pitfalls
74
+
75
+ - InfrequentAccess: 30-day minimum billing (even if deleted early)
76
+ - Can't transition IA → Standard via lifecycle (use S3 CopyObject)
77
+ - Retrieval fees apply for IA reads
78
+
79
+ ## Stream Length Requirement
80
+
81
+ ```typescript
82
+ // ❌ WRONG: Streaming unknown length fails silently
83
+ const response = await fetch(url)
84
+ await env.MY_BUCKET.put(key, response.body) // May fail without error
85
+
86
+ // ✅ CORRECT: Buffer or use Content-Length
87
+ const data = await response.arrayBuffer()
88
+ await env.MY_BUCKET.put(key, data)
89
+
90
+ // OR: Pass Content-Length if known
91
+ const object = await env.MY_BUCKET.put(key, request.body, {
92
+ httpMetadata: {
93
+ contentLength: parseInt(request.headers.get('content-length') || '0'),
94
+ },
95
+ })
96
+ ```
97
+
98
+ **Reason:** R2 requires known length for streams. Unknown length may cause silent truncation.
99
+
100
+ ## S3 SDK Region Configuration
101
+
102
+ ```typescript
103
+ // ❌ WRONG: Missing region breaks ALL S3 SDK calls
104
+ const s3 = new S3Client({
105
+ endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
106
+ credentials: { ... }
107
+ });
108
+
109
+ // ✅ CORRECT: MUST set region='auto'
110
+ const s3 = new S3Client({
111
+ region: 'auto', // REQUIRED
112
+ endpoint: `https://${accountId}.r2.cloudflarestorage.com`,
113
+ credentials: { ... }
114
+ });
115
+ ```
116
+
117
+ **Reason:** S3 SDK requires region. R2 uses 'auto' as placeholder.
118
+
119
+ ## Local Development Limits
120
+
121
+ ```typescript
122
+ // ❌ Miniflare/wrangler dev: Limited R2 support
123
+ // - No multipart uploads
124
+ // - No presigned URLs (requires S3 SDK + network)
125
+ // - Memory-backed storage (lost on restart)
126
+
127
+ // ✅ Use remote bindings for full features
128
+ wrangler dev --remote
129
+
130
+ // OR: Conditional logic
131
+ if (env.ENVIRONMENT === 'development') {
132
+ // Fallback for local dev
133
+ } else {
134
+ // Full R2 features
135
+ }
136
+ ```
137
+
138
+ ## Presigned URL Expiry
139
+
140
+ ```typescript
141
+ // ❌ WRONG: URL expires but no client validation
142
+ const url = await getSignedUrl(s3, command, { expiresIn: 60 })
143
+ // 61 seconds later: 403 Forbidden
144
+
145
+ // ✅ CORRECT: Return expiry to client
146
+ return Response.json({
147
+ uploadUrl: url,
148
+ expiresAt: new Date(Date.now() + 60000).toISOString(),
149
+ })
150
+ ```
151
+
152
+ ## Limits
153
+
154
+ | Limit | Value |
155
+ | ------------------------ | ------------------ |
156
+ | Object size | 5 TB |
157
+ | Multipart part count | 10,000 |
158
+ | Multipart part min size | 5 MB (except last) |
159
+ | Batch delete | 1,000 keys |
160
+ | List limit | 1,000 per request |
161
+ | Key size | 1024 bytes |
162
+ | Custom metadata | 2 KB per object |
163
+ | Presigned URL max expiry | 7 days |
164
+
165
+ ## Common Errors
166
+
167
+ ### "Stream upload failed" / Silent Truncation
168
+
169
+ **Cause:** Stream length unknown or Content-Length missing
170
+ **Solution:** Buffer data or pass explicit Content-Length
171
+
172
+ ### "Invalid credentials" / S3 SDK
173
+
174
+ **Cause:** Missing `region: 'auto'` in S3Client config
175
+ **Solution:** Always set `region: 'auto'` for R2
176
+
177
+ ### "Object not found"
178
+
179
+ **Cause:** Object key doesn't exist or was deleted
180
+ **Solution:** Verify object key correct, check if object was deleted, ensure bucket correct
181
+
182
+ ### "List compatibility error"
183
+
184
+ **Cause:** Missing or old compatibility_date, or flag not enabled
185
+ **Solution:** Set `compatibility_date >= 2022-08-04` or enable `r2_list_honor_include` flag
186
+
187
+ ### "Multipart upload failed"
188
+
189
+ **Cause:** Part sizes not uniform or incorrect part number
190
+ **Solution:** Ensure uniform size except final part, verify part numbers start at 1
@@ -0,0 +1,203 @@
1
+ # R2 Patterns & Best Practices
2
+
3
+ ## Streaming Large Files
4
+
5
+ ```typescript
6
+ const object = await env.MY_BUCKET.get(key)
7
+ if (!object) return new Response('Not found', { status: 404 })
8
+
9
+ const headers = new Headers()
10
+ object.writeHttpMetadata(headers)
11
+ headers.set('etag', object.httpEtag)
12
+
13
+ return new Response(object.body, { headers })
14
+ ```
15
+
16
+ ## Conditional GET (304 Not Modified)
17
+
18
+ ```typescript
19
+ const ifNoneMatch = request.headers.get('if-none-match')
20
+ const object = await env.MY_BUCKET.get(key, {
21
+ onlyIf: { etagDoesNotMatch: ifNoneMatch?.replace(/"/g, '') || '' },
22
+ })
23
+
24
+ if (!object) return new Response('Not found', { status: 404 })
25
+ if (!object.body) return new Response(null, { status: 304, headers: { etag: object.httpEtag } })
26
+
27
+ return new Response(object.body, { headers: { etag: object.httpEtag } })
28
+ ```
29
+
30
+ ## Upload with Validation
31
+
32
+ ```typescript
33
+ const key = url.pathname.slice(1)
34
+ if (!key || key.includes('..')) return new Response('Invalid key', { status: 400 })
35
+
36
+ const object = await env.MY_BUCKET.put(key, request.body, {
37
+ httpMetadata: { contentType: request.headers.get('content-type') || 'application/octet-stream' },
38
+ customMetadata: {
39
+ uploadedAt: new Date().toISOString(),
40
+ ip: request.headers.get('cf-connecting-ip') || 'unknown',
41
+ },
42
+ })
43
+
44
+ return Response.json({ key: object.key, size: object.size, etag: object.httpEtag })
45
+ ```
46
+
47
+ ## Multipart with Progress
48
+
49
+ ```typescript
50
+ const PART_SIZE = 5 * 1024 * 1024 // 5MB
51
+ const partCount = Math.ceil(file.size / PART_SIZE)
52
+ const multipart = await env.MY_BUCKET.createMultipartUpload(key, {
53
+ httpMetadata: { contentType: file.type },
54
+ })
55
+
56
+ const uploadedParts: R2UploadedPart[] = []
57
+ try {
58
+ for (let i = 0; i < partCount; i++) {
59
+ const start = i * PART_SIZE
60
+ const part = await multipart.uploadPart(i + 1, file.slice(start, start + PART_SIZE))
61
+ uploadedParts.push(part)
62
+ onProgress?.(Math.round(((i + 1) / partCount) * 100))
63
+ }
64
+ return await multipart.complete(uploadedParts)
65
+ } catch (error) {
66
+ await multipart.abort()
67
+ throw error
68
+ }
69
+ ```
70
+
71
+ ## Batch Delete
72
+
73
+ ```typescript
74
+ async function deletePrefix(prefix: string, env: Env) {
75
+ let cursor: string | undefined
76
+ let truncated = true
77
+
78
+ while (truncated) {
79
+ const listed = await env.MY_BUCKET.list({ prefix, limit: 1000, cursor })
80
+ if (listed.objects.length > 0) {
81
+ await env.MY_BUCKET.delete(listed.objects.map((o) => o.key))
82
+ }
83
+ truncated = listed.truncated
84
+ cursor = listed.cursor
85
+ }
86
+ }
87
+ ```
88
+
89
+ ## Checksum Validation & Storage Transitions
90
+
91
+ ```typescript
92
+ // Upload with checksum
93
+ const hash = await crypto.subtle.digest('SHA-256', data)
94
+ await env.MY_BUCKET.put(key, data, { sha256: hash })
95
+
96
+ // Transition storage class (requires S3 SDK)
97
+ import { S3Client, CopyObjectCommand } from '@aws-sdk/client-s3'
98
+ await s3.send(
99
+ new CopyObjectCommand({
100
+ Bucket: 'my-bucket',
101
+ Key: key,
102
+ CopySource: `/my-bucket/${key}`,
103
+ StorageClass: 'STANDARD_IA',
104
+ })
105
+ )
106
+ ```
107
+
108
+ ## Client-Side Uploads (Presigned URLs)
109
+
110
+ ```typescript
111
+ import { S3Client } from '@aws-sdk/client-s3'
112
+ import { getSignedUrl } from '@aws-sdk/s3-request-presigner'
113
+ import { PutObjectCommand } from '@aws-sdk/client-s3'
114
+
115
+ // Worker: Generate presigned upload URL
116
+ const s3 = new S3Client({
117
+ region: 'auto',
118
+ endpoint: `https://${env.ACCOUNT_ID}.r2.cloudflarestorage.com`,
119
+ credentials: { accessKeyId: env.R2_ACCESS_KEY_ID, secretAccessKey: env.R2_SECRET_ACCESS_KEY },
120
+ })
121
+
122
+ const url = await getSignedUrl(s3, new PutObjectCommand({ Bucket: 'my-bucket', Key: key }), {
123
+ expiresIn: 3600,
124
+ })
125
+ return Response.json({ uploadUrl: url })
126
+
127
+ // Client: Upload directly
128
+ const { uploadUrl } = await fetch('/api/upload-url').then((r) => r.json())
129
+ await fetch(uploadUrl, { method: 'PUT', body: file })
130
+ ```
131
+
132
+ ## Caching with Cache API
133
+
134
+ ```typescript
135
+ export default {
136
+ async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
137
+ const cache = caches.default
138
+ const url = new URL(request.url)
139
+ const cacheKey = new Request(url.toString(), request)
140
+
141
+ // Check cache first
142
+ let response = await cache.match(cacheKey)
143
+ if (response) return response
144
+
145
+ // Fetch from R2
146
+ const key = url.pathname.slice(1)
147
+ const object = await env.MY_BUCKET.get(key)
148
+ if (!object) return new Response('Not found', { status: 404 })
149
+
150
+ const headers = new Headers()
151
+ object.writeHttpMetadata(headers)
152
+ headers.set('etag', object.httpEtag)
153
+ headers.set('cache-control', 'public, max-age=31536000, immutable')
154
+
155
+ response = new Response(object.body, { headers })
156
+
157
+ // Cache for subsequent requests
158
+ ctx.waitUntil(cache.put(cacheKey, response.clone()))
159
+
160
+ return response
161
+ },
162
+ }
163
+ ```
164
+
165
+ ## Public Bucket with Custom Domain
166
+
167
+ ```typescript
168
+ export default {
169
+ async fetch(request: Request, env: Env): Promise<Response> {
170
+ // CORS preflight
171
+ if (request.method === 'OPTIONS') {
172
+ return new Response(null, {
173
+ headers: {
174
+ 'access-control-allow-origin': '*',
175
+ 'access-control-allow-methods': 'GET, HEAD',
176
+ 'access-control-max-age': '86400',
177
+ },
178
+ })
179
+ }
180
+
181
+ const key = new URL(request.url).pathname.slice(1)
182
+ if (!key) return Response.redirect('/index.html', 302)
183
+
184
+ const object = await env.MY_BUCKET.get(key)
185
+ if (!object) return new Response('Not found', { status: 404 })
186
+
187
+ const headers = new Headers()
188
+ object.writeHttpMetadata(headers)
189
+ headers.set('etag', object.httpEtag)
190
+ headers.set('access-control-allow-origin', '*')
191
+ headers.set('cache-control', 'public, max-age=31536000, immutable')
192
+
193
+ return new Response(object.body, { headers })
194
+ },
195
+ }
196
+ ```
197
+
198
+ ## r2.dev Public URLs
199
+
200
+ Enable r2.dev in dashboard for simple public access: `https://pub-${hashId}.r2.dev/${key}`
201
+ Or add custom domain via dashboard: `https://files.example.com/${key}`
202
+
203
+ **Limitations:** No auth, bucket-level CORS, no cache override.