memory-journal-mcp 7.7.1 → 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-6LPTBIB6.js → chunk-MWNLAEHR.js} +309 -4332
  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 +6 -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,207 @@
1
+ # Cron Triggers Gotchas
2
+
3
+ ## Common Errors
4
+
5
+ ### "Timezone Issues"
6
+
7
+ **Problem:** Cron runs at wrong time relative to local timezone
8
+ **Cause:** All crons execute in UTC, no local timezone support
9
+ **Solution:** Convert local time to UTC manually
10
+
11
+ **Conversion formula:** `utcHour = (localHour - utcOffset + 24) % 24`
12
+
13
+ **Examples:**
14
+
15
+ - 9am PST (UTC-8) → `(9 - (-8) + 24) % 24 = 17` → `0 17 * * *`
16
+ - 2am EST (UTC-5) → `(2 - (-5) + 24) % 24 = 7` → `0 7 * * *`
17
+ - 6pm JST (UTC+9) → `(18 - 9 + 24) % 24 = 33 % 24 = 9` → `0 9 * * *`
18
+
19
+ **Daylight Saving Time:** Adjust manually when DST changes, or schedule at times unaffected by DST (e.g., 2am-4am local time usually safe)
20
+
21
+ ### "Cron Not Executing"
22
+
23
+ **Cause:** Missing `scheduled()` export, invalid syntax, propagation delay (<15min), or plan limits
24
+ **Solution:** Verify export exists, validate at crontab.guru, wait 15+ min after deploy, check plan limits
25
+
26
+ ### "Duplicate Executions"
27
+
28
+ **Cause:** At-least-once delivery
29
+ **Solution:** Track execution IDs in KV - see idempotency pattern below
30
+
31
+ ### "Execution Failures"
32
+
33
+ **Cause:** CPU exceeded, unhandled exceptions, network timeouts, binding errors
34
+ **Solution:** Use try-catch, AbortController timeouts, `ctx.waitUntil()` for long ops, or Workflows for heavy tasks
35
+
36
+ ### "Local Testing Not Working"
37
+
38
+ **Problem:** `/__scheduled` endpoint returns 404 or doesn't trigger handler
39
+ **Cause:** Missing `scheduled()` export, wrangler not running, or incorrect endpoint format
40
+ **Solution:**
41
+
42
+ 1. Verify `scheduled()` is exported:
43
+
44
+ ```typescript
45
+ export default {
46
+ async scheduled(controller, env, ctx) {
47
+ console.log('Cron triggered')
48
+ },
49
+ }
50
+ ```
51
+
52
+ 2. Start dev server:
53
+
54
+ ```bash
55
+ npx wrangler dev
56
+ ```
57
+
58
+ 3. Use correct endpoint format (URL-encode spaces as `+`):
59
+
60
+ ```bash
61
+ # Correct
62
+ curl "http://localhost:8787/__scheduled?cron=*/5+*+*+*+*"
63
+
64
+ # Wrong (will fail)
65
+ curl "http://localhost:8787/__scheduled?cron=*/5 * * * *"
66
+ ```
67
+
68
+ 4. Update Wrangler if outdated:
69
+
70
+ ```bash
71
+ npm install -g wrangler@latest
72
+ ```
73
+
74
+ ### "waitUntil() Tasks Not Completing"
75
+
76
+ **Problem:** Background tasks in `ctx.waitUntil()` fail silently or don't execute
77
+ **Cause:** Promises rejected without error handling, or handler returns before promise settles
78
+ **Solution:** Always await or handle errors in waitUntil promises:
79
+
80
+ ```typescript
81
+ export default {
82
+ async scheduled(controller, env, ctx) {
83
+ // BAD: Silent failures
84
+ ctx.waitUntil(riskyOperation())
85
+
86
+ // GOOD: Explicit error handling
87
+ ctx.waitUntil(
88
+ riskyOperation().catch((err) => {
89
+ console.error('Background task failed:', err)
90
+ return logError(err, env)
91
+ })
92
+ )
93
+ },
94
+ }
95
+ ```
96
+
97
+ ### "Idempotency Issues"
98
+
99
+ **Problem:** At-least-once delivery causes duplicate side effects (double charges, duplicate emails)
100
+ **Cause:** No deduplication mechanism
101
+ **Solution:** Use KV to track execution IDs:
102
+
103
+ ```typescript
104
+ export default {
105
+ async scheduled(controller, env, ctx) {
106
+ const executionId = `${controller.cron}-${controller.scheduledTime}`
107
+ const existing = await env.EXECUTIONS.get(executionId)
108
+
109
+ if (existing) {
110
+ console.log('Already executed, skipping')
111
+ controller.noRetry()
112
+ return
113
+ }
114
+
115
+ await env.EXECUTIONS.put(executionId, '1', { expirationTtl: 86400 }) // 24h TTL
116
+ await performIdempotentOperation(env)
117
+ },
118
+ }
119
+ ```
120
+
121
+ ### "Security Concerns"
122
+
123
+ **Problem:** `__scheduled` endpoint exposed in production allows unauthorized cron triggering
124
+ **Cause:** Testing endpoint available in deployed Workers
125
+ **Solution:** Block `__scheduled` in production:
126
+
127
+ ```typescript
128
+ export default {
129
+ async fetch(request, env, ctx) {
130
+ const url = new URL(request.url)
131
+
132
+ // Block __scheduled in production
133
+ if (url.pathname === '/__scheduled' && env.ENVIRONMENT === 'production') {
134
+ return new Response('Not Found', { status: 404 })
135
+ }
136
+
137
+ return handleRequest(request, env, ctx)
138
+ },
139
+
140
+ async scheduled(controller, env, ctx) {
141
+ // Your cron logic
142
+ },
143
+ }
144
+ ```
145
+
146
+ **Also:** Use `env.API_KEY` for secrets (never hardcode)
147
+
148
+ **Alternative:** Add middleware to verify request origin:
149
+
150
+ ```typescript
151
+ export default {
152
+ async fetch(request, env, ctx) {
153
+ const url = new URL(request.url)
154
+
155
+ if (url.pathname === '/__scheduled') {
156
+ // Check Cloudflare headers to verify internal request
157
+ const cfRay = request.headers.get('cf-ray')
158
+ if (!cfRay && env.ENVIRONMENT === 'production') {
159
+ return new Response('Not Found', { status: 404 })
160
+ }
161
+ }
162
+
163
+ return handleRequest(request, env, ctx)
164
+ },
165
+
166
+ async scheduled(controller, env, ctx) {
167
+ // Your cron logic
168
+ },
169
+ }
170
+ ```
171
+
172
+ ## Limits & Quotas
173
+
174
+ | Limit | Free | Paid | Notes |
175
+ | ------------------- | ---------------- | ---------------- | ---------------------------------------- |
176
+ | Triggers per Worker | 3 | Unlimited | Maximum cron schedules per Worker |
177
+ | CPU time | 10ms | 50ms | May need `ctx.waitUntil()` or Workflows |
178
+ | Execution guarantee | At-least-once | At-least-once | Duplicates possible - use idempotency |
179
+ | Propagation delay | Up to 15 minutes | Up to 15 minutes | Time for changes to take effect globally |
180
+ | Min interval | 1 minute | 1 minute | Cannot schedule more frequently |
181
+ | Cron accuracy | ±1 minute | ±1 minute | Execution may drift slightly |
182
+
183
+ ## Testing Best Practices
184
+
185
+ **Unit tests:**
186
+
187
+ - Mock `ScheduledController`, `ExecutionContext`, and bindings
188
+ - Test each cron expression separately
189
+ - Verify `noRetry()` is called when expected
190
+ - Use Vitest with `@cloudflare/vitest-pool-workers` for realistic env
191
+
192
+ **Integration tests:**
193
+
194
+ - Test via `/__scheduled` endpoint in dev environment
195
+ - Verify idempotency logic with duplicate `scheduledTime` values
196
+ - Test error handling and retry behavior
197
+
198
+ **Production:** Start with long intervals (`*/30 * * * *`), monitor Cron Events for 24h, set up alerts before reducing interval
199
+
200
+ ## Resources
201
+
202
+ - [Cron Triggers Docs](https://developers.cloudflare.com/workers/configuration/cron-triggers/)
203
+ - [Scheduled Handler API](https://developers.cloudflare.com/workers/runtime-apis/handlers/scheduled/)
204
+ - [Cloudflare Workflows](https://developers.cloudflare.com/workflows/)
205
+ - [Workers Limits](https://developers.cloudflare.com/workers/platform/limits/)
206
+ - [Crontab Guru](https://crontab.guru/) - Validator
207
+ - [Vitest Pool Workers](https://github.com/cloudflare/workers-sdk/tree/main/fixtures/vitest-pool-workers-examples)
@@ -0,0 +1,274 @@
1
+ # Cron Triggers Patterns
2
+
3
+ ## API Data Sync
4
+
5
+ ```typescript
6
+ export default {
7
+ async scheduled(controller, env, ctx) {
8
+ const response = await fetch('https://api.example.com/data', {
9
+ headers: { Authorization: `Bearer ${env.API_KEY}` },
10
+ })
11
+ if (!response.ok) throw new Error(`API error: ${response.status}`)
12
+ ctx.waitUntil(
13
+ env.MY_KV.put('cached_data', JSON.stringify(await response.json()), { expirationTtl: 3600 })
14
+ )
15
+ },
16
+ }
17
+ ```
18
+
19
+ ## Database Cleanup
20
+
21
+ ```typescript
22
+ export default {
23
+ async scheduled(controller, env, ctx) {
24
+ const result = await env.DB.prepare(
25
+ `DELETE FROM sessions WHERE expires_at < datetime('now')`
26
+ ).run()
27
+ console.log(`Deleted ${result.meta.changes} expired sessions`)
28
+ ctx.waitUntil(env.DB.prepare('VACUUM').run())
29
+ },
30
+ }
31
+ ```
32
+
33
+ ## Report Generation
34
+
35
+ ```typescript
36
+ export default {
37
+ async scheduled(controller, env, ctx) {
38
+ const startOfWeek = new Date()
39
+ startOfWeek.setDate(startOfWeek.getDate() - 7)
40
+ const { results } = await env.DB.prepare(
41
+ `SELECT date, revenue, orders FROM daily_stats WHERE date >= ? ORDER BY date`
42
+ )
43
+ .bind(startOfWeek.toISOString())
44
+ .all()
45
+ const report = {
46
+ period: 'weekly',
47
+ totalRevenue: results.reduce((sum, d) => sum + d.revenue, 0),
48
+ totalOrders: results.reduce((sum, d) => sum + d.orders, 0),
49
+ dailyBreakdown: results,
50
+ }
51
+ const reportKey = `reports/weekly-${Date.now()}.json`
52
+ await env.REPORTS_BUCKET.put(reportKey, JSON.stringify(report))
53
+ ctx.waitUntil(
54
+ env.SEND_EMAIL.fetch('https://example.com/send', {
55
+ method: 'POST',
56
+ body: JSON.stringify({
57
+ to: 'team@example.com',
58
+ subject: 'Weekly Report',
59
+ reportUrl: `https://reports.example.com/${reportKey}`,
60
+ }),
61
+ })
62
+ )
63
+ },
64
+ }
65
+ ```
66
+
67
+ ## Health Checks
68
+
69
+ ```typescript
70
+ export default {
71
+ async scheduled(controller, env, ctx) {
72
+ const services = [
73
+ { name: 'API', url: 'https://api.example.com/health' },
74
+ { name: 'CDN', url: 'https://cdn.example.com/health' },
75
+ ]
76
+ const checks = await Promise.all(
77
+ services.map(async (service) => {
78
+ const start = Date.now()
79
+ try {
80
+ const response = await fetch(service.url, { signal: AbortSignal.timeout(5000) })
81
+ return {
82
+ name: service.name,
83
+ status: response.ok ? 'up' : 'down',
84
+ responseTime: Date.now() - start,
85
+ }
86
+ } catch (error) {
87
+ return {
88
+ name: service.name,
89
+ status: 'down',
90
+ responseTime: Date.now() - start,
91
+ error: error.message,
92
+ }
93
+ }
94
+ })
95
+ )
96
+ ctx.waitUntil(env.STATUS_KV.put('health_status', JSON.stringify(checks)))
97
+ const failures = checks.filter((c) => c.status === 'down')
98
+ if (failures.length > 0)
99
+ ctx.waitUntil(
100
+ fetch(env.ALERT_WEBHOOK, {
101
+ method: 'POST',
102
+ body: JSON.stringify({
103
+ text: `${failures.length} service(s) down: ${failures.map((f) => f.name).join(', ')}`,
104
+ }),
105
+ })
106
+ )
107
+ },
108
+ }
109
+ ```
110
+
111
+ ## Batch Processing (Rate-Limited)
112
+
113
+ ```typescript
114
+ export default {
115
+ async scheduled(controller, env, ctx) {
116
+ const queueData = await env.QUEUE_KV.get('pending_items', 'json')
117
+ if (!queueData || queueData.length === 0) return
118
+ const batch = queueData.slice(0, 100)
119
+ const results = await Promise.allSettled(
120
+ batch.map((item) =>
121
+ fetch('https://api.example.com/process', {
122
+ method: 'POST',
123
+ headers: { Authorization: `Bearer ${env.API_KEY}`, 'Content-Type': 'application/json' },
124
+ body: JSON.stringify(item),
125
+ })
126
+ )
127
+ )
128
+ console.log(
129
+ `Processed ${results.filter((r) => r.status === 'fulfilled').length}/${batch.length} items`
130
+ )
131
+ ctx.waitUntil(env.QUEUE_KV.put('pending_items', JSON.stringify(queueData.slice(100))))
132
+ },
133
+ }
134
+ ```
135
+
136
+ ## Queue Integration
137
+
138
+ ```typescript
139
+ export default {
140
+ async scheduled(controller, env, ctx) {
141
+ const batch = await env.MY_QUEUE.receive({ batchSize: 100 })
142
+ const results = await Promise.allSettled(
143
+ batch.messages.map(async (msg) => {
144
+ await processMessage(msg.body, env)
145
+ await msg.ack()
146
+ })
147
+ )
148
+ console.log(
149
+ `Processed ${results.filter((r) => r.status === 'fulfilled').length}/${batch.messages.length}`
150
+ )
151
+ },
152
+ }
153
+ ```
154
+
155
+ ## Monitoring & Observability
156
+
157
+ ```typescript
158
+ export default {
159
+ async scheduled(controller, env, ctx) {
160
+ const startTime = Date.now()
161
+ const meta = { cron: controller.cron, scheduledTime: controller.scheduledTime }
162
+ console.log('[START]', meta)
163
+ try {
164
+ const result = await performTask(env)
165
+ console.log('[SUCCESS]', { ...meta, duration: Date.now() - startTime, count: result.count })
166
+ ctx.waitUntil(
167
+ env.METRICS.put(
168
+ `cron:${controller.scheduledTime}`,
169
+ JSON.stringify({ ...meta, status: 'success' }),
170
+ { expirationTtl: 2592000 }
171
+ )
172
+ )
173
+ } catch (error) {
174
+ console.error('[ERROR]', { ...meta, duration: Date.now() - startTime, error: error.message })
175
+ ctx.waitUntil(
176
+ fetch(env.ALERT_WEBHOOK, {
177
+ method: 'POST',
178
+ body: JSON.stringify({ text: `Cron failed: ${controller.cron}`, error: error.message }),
179
+ })
180
+ )
181
+ throw error
182
+ }
183
+ },
184
+ }
185
+ ```
186
+
187
+ **View logs:** `npx wrangler tail` or Dashboard → Workers & Pages → Worker → Logs
188
+
189
+ ## Durable Objects Coordination
190
+
191
+ ```typescript
192
+ export default {
193
+ async scheduled(controller, env, ctx) {
194
+ const stub = env.COORDINATOR.get(env.COORDINATOR.idFromName('cron-lock'))
195
+ const acquired = await stub.tryAcquireLock(controller.scheduledTime)
196
+ if (!acquired) {
197
+ controller.noRetry()
198
+ return
199
+ }
200
+ try {
201
+ await performTask(env)
202
+ } finally {
203
+ await stub.releaseLock()
204
+ }
205
+ },
206
+ }
207
+ ```
208
+
209
+ ## Python Handler
210
+
211
+ ```python
212
+ from workers import WorkerEntrypoint
213
+
214
+ class Default(WorkerEntrypoint):
215
+ async def scheduled(self, controller, env, ctx):
216
+ data = await env.MY_KV.get("key")
217
+ ctx.waitUntil(env.DB.execute("DELETE FROM logs WHERE created_at < datetime('now', '-7 days')"))
218
+ ```
219
+
220
+ ## Testing Patterns
221
+
222
+ **Local testing with /\_\_scheduled:**
223
+
224
+ ```bash
225
+ # Start dev server
226
+ npx wrangler dev
227
+
228
+ # Test specific cron
229
+ curl "http://localhost:8787/__scheduled?cron=*/5+*+*+*+*"
230
+
231
+ # Test with specific time
232
+ curl "http://localhost:8787/__scheduled?cron=0+2+*+*+*&scheduledTime=1704067200000"
233
+ ```
234
+
235
+ **Unit tests:**
236
+
237
+ ```typescript
238
+ // test/scheduled.test.ts
239
+ import { describe, it, expect, vi } from 'vitest'
240
+ import { env } from 'cloudflare:test'
241
+ import worker from '../src/index'
242
+
243
+ describe('Scheduled Handler', () => {
244
+ it('executes cron', async () => {
245
+ const controller = {
246
+ scheduledTime: Date.now(),
247
+ cron: '*/5 * * * *',
248
+ type: 'scheduled' as const,
249
+ noRetry: vi.fn(),
250
+ }
251
+ const ctx = { waitUntil: vi.fn(), passThroughOnException: vi.fn() }
252
+ await worker.scheduled(controller, env, ctx)
253
+ expect(await env.MY_KV.get('last_run')).toBeDefined()
254
+ })
255
+
256
+ it('calls noRetry on duplicate', async () => {
257
+ const controller = {
258
+ scheduledTime: 1704067200000,
259
+ cron: '0 2 * * *',
260
+ type: 'scheduled' as const,
261
+ noRetry: vi.fn(),
262
+ }
263
+ await env.EXECUTIONS.put('0 2 * * *-1704067200000', '1')
264
+ await worker.scheduled(controller, env, { waitUntil: vi.fn(), passThroughOnException: vi.fn() })
265
+ expect(controller.noRetry).toHaveBeenCalled()
266
+ })
267
+ })
268
+ ```
269
+
270
+ ## See Also
271
+
272
+ - [README.md](./README.md) - Overview
273
+ - [api.md](./api.md) - Handler implementation
274
+ - [gotchas.md](./gotchas.md) - Troubleshooting
@@ -0,0 +1,137 @@
1
+ # Cloudflare D1 Database
2
+
3
+ Expert guidance for Cloudflare D1, a serverless SQLite database designed for horizontal scale-out across multiple databases.
4
+
5
+ ## Overview
6
+
7
+ D1 is Cloudflare's managed, serverless database with:
8
+
9
+ - SQLite SQL semantics and compatibility
10
+ - Built-in disaster recovery via Time Travel (30-day point-in-time recovery)
11
+ - Horizontal scale-out architecture (10 GB per database)
12
+ - Worker and HTTP API access
13
+ - Pricing based on query and storage costs only
14
+
15
+ **Architecture Philosophy**: D1 is optimized for per-user, per-tenant, or per-entity database patterns rather than single large databases.
16
+
17
+ ## Quick Start
18
+
19
+ ```bash
20
+ # Create database
21
+ wrangler d1 create <database-name>
22
+
23
+ # Execute migration
24
+ wrangler d1 migrations apply <db-name> --remote
25
+
26
+ # Local development
27
+ wrangler dev
28
+ ```
29
+
30
+ ## Core Query Methods
31
+
32
+ ```typescript
33
+ // .all() - Returns all rows; .first() - First row or null; .first(col) - Single column value
34
+ // .run() - INSERT/UPDATE/DELETE; .raw() - Array of arrays (efficient)
35
+ const { results, success, meta } = await env.DB.prepare('SELECT * FROM users WHERE active = ?')
36
+ .bind(true)
37
+ .all()
38
+ const user = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first()
39
+ ```
40
+
41
+ ## Batch Operations
42
+
43
+ ```typescript
44
+ // Multiple queries in single round trip (atomic transaction)
45
+ const results = await env.DB.batch([
46
+ env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(1),
47
+ env.DB.prepare('SELECT * FROM posts WHERE author_id = ?').bind(1),
48
+ env.DB.prepare('UPDATE users SET last_access = ? WHERE id = ?').bind(Date.now(), 1),
49
+ ])
50
+ ```
51
+
52
+ ## Sessions API (Paid Plans)
53
+
54
+ ```typescript
55
+ // Create long-running session for analytics/migrations (up to 15 minutes)
56
+ const session = env.DB.withSession()
57
+ try {
58
+ await session.prepare('CREATE INDEX idx_heavy ON large_table(column)').run()
59
+ await session.prepare('ANALYZE').run()
60
+ } finally {
61
+ session.close() // Always close to release resources
62
+ }
63
+ ```
64
+
65
+ ## Read Replication (Paid Plans)
66
+
67
+ ```typescript
68
+ // Read from nearest replica for lower latency (automatic failover)
69
+ const user = await env.DB_REPLICA.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first()
70
+
71
+ // Writes always go to primary
72
+ await env.DB.prepare('UPDATE users SET last_login = ? WHERE id = ?').bind(Date.now(), userId).run()
73
+ ```
74
+
75
+ ## Platform Limits
76
+
77
+ | Limit | Free Tier | Paid Plans |
78
+ | --------------------- | ---------------- | ------------------ |
79
+ | Database size | 500 MB | 10 GB per database |
80
+ | Row size | 1 MB max | 1 MB max |
81
+ | Query timeout | 30 seconds | 30 seconds |
82
+ | Batch size | 1,000 statements | 10,000 statements |
83
+ | Time Travel retention | 7 days | 30 days |
84
+ | Read replicas | Not available | Yes (paid add-on) |
85
+
86
+ **Pricing**: $5/month per database beyond free tier + $0.001 per 1K reads + $1 per 1M writes + $0.75/GB storage/month
87
+
88
+ ## CLI Commands
89
+
90
+ ```bash
91
+ # Database management
92
+ wrangler d1 create <db-name>
93
+ wrangler d1 list
94
+ wrangler d1 delete <db-name>
95
+
96
+ # Migrations
97
+ wrangler d1 migrations create <db-name> <migration-name> # Create new migration file
98
+ wrangler d1 migrations apply <db-name> --remote # Apply pending migrations
99
+ wrangler d1 migrations apply <db-name> --local # Apply locally
100
+ wrangler d1 migrations list <db-name> --remote # Show applied migrations
101
+
102
+ # Direct SQL execution
103
+ wrangler d1 execute <db-name> --remote --command="SELECT * FROM users"
104
+ wrangler d1 execute <db-name> --local --file=./schema.sql
105
+
106
+ # Backups & Import/Export
107
+ wrangler d1 export <db-name> --remote --output=./backup.sql # Full export with schema
108
+ wrangler d1 export <db-name> --remote --no-schema --output=./data.sql # Data only
109
+ wrangler d1 time-travel restore <db-name> --timestamp="2024-01-15T14:30:00Z" # Point-in-time recovery
110
+
111
+ # Development
112
+ wrangler dev --persist-to=./.wrangler/state
113
+ ```
114
+
115
+ ## Reading Order
116
+
117
+ **Start here**: Quick Start above → configuration.md (setup) → api.md (queries)
118
+
119
+ **Common tasks**:
120
+
121
+ - First time setup: configuration.md → Run migrations
122
+ - Adding queries: api.md → Prepared statements
123
+ - Pagination/caching: patterns.md
124
+ - Production optimization: Read Replication + Sessions API (this file)
125
+ - Debugging: gotchas.md
126
+
127
+ ## In This Reference
128
+
129
+ - [configuration.md](./configuration.md) - wrangler.jsonc setup, migrations, TypeScript types, ORMs, local dev
130
+ - [api.md](./api.md) - Query methods (.all/.first/.run/.raw), batch, sessions, read replicas, error handling
131
+ - [patterns.md](./patterns.md) - Pagination, bulk operations, caching, multi-tenant, sessions, analytics
132
+ - [gotchas.md](./gotchas.md) - SQL injection, limits by plan tier, performance, common errors
133
+
134
+ ## See Also
135
+
136
+ - [workers](../workers/) - Worker runtime and fetch handler patterns
137
+ - [hyperdrive](../hyperdrive/) - Connection pooling for external databases