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,153 @@
1
+ # Cloudflare Email Workers
2
+
3
+ Process incoming emails programmatically using Cloudflare Workers runtime.
4
+
5
+ ## Overview
6
+
7
+ Email Workers enable custom email processing logic at the edge. Build spam filters, auto-responders, ticket systems, notification handlers, and more using the same Workers runtime you use for HTTP requests.
8
+
9
+ **Key capabilities**:
10
+
11
+ - Process inbound emails with full message access
12
+ - Forward to verified destinations
13
+ - Send replies with proper threading
14
+ - Parse MIME content and attachments
15
+ - Integrate with KV, R2, D1, and external APIs
16
+
17
+ ## Quick Start
18
+
19
+ ### Minimal ES Modules Handler
20
+
21
+ ```typescript
22
+ export default {
23
+ async email(message, env, ctx) {
24
+ // Reject spam
25
+ if (message.from.includes('spam.com')) {
26
+ message.setReject('Blocked')
27
+ return
28
+ }
29
+
30
+ // Forward to inbox
31
+ await message.forward('inbox@example.com')
32
+ },
33
+ }
34
+ ```
35
+
36
+ ### Core Operations
37
+
38
+ | Operation | Method | Use Case |
39
+ | --------- | ------------------------------- | ---------------------------------- |
40
+ | Forward | `message.forward(to, headers?)` | Route to verified destination |
41
+ | Reject | `message.setReject(reason)` | Block with SMTP error |
42
+ | Reply | `message.reply(emailMessage)` | Auto-respond with threading |
43
+ | Parse | postal-mime library | Extract subject, body, attachments |
44
+
45
+ ## Reading Order
46
+
47
+ For comprehensive understanding, read files in this order:
48
+
49
+ 1. **README.md** (this file) - Overview and quick start
50
+ 2. **configuration.md** - Setup, deployment, bindings
51
+ 3. **api.md** - Complete API reference
52
+ 4. **patterns.md** - Real-world implementation examples
53
+ 5. **gotchas.md** - Critical pitfalls and debugging
54
+
55
+ ## In This Reference
56
+
57
+ | File | Description | Key Topics |
58
+ | -------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------- |
59
+ | [api.md](./api.md) | Complete API reference | ForwardableEmailMessage, SendEmail bindings, reply() method, postal-mime/mimetext APIs |
60
+ | [configuration.md](./configuration.md) | Setup and configuration | wrangler.jsonc, bindings, deployment, dependencies |
61
+ | [patterns.md](./patterns.md) | Real-world examples | Allowlists from KV, auto-reply with threading, attachment extraction, webhook notifications |
62
+ | [gotchas.md](./gotchas.md) | Pitfalls and debugging | Stream consumption, ctx.waitUntil errors, security, limits |
63
+
64
+ ## Architecture
65
+
66
+ ```
67
+ Incoming Email → Email Routing → Email Worker
68
+
69
+ Process + Decide
70
+
71
+ ┌───────────────┼───────────────┐
72
+ ↓ ↓ ↓
73
+ Forward Reply Reject
74
+ ```
75
+
76
+ **Event flow**:
77
+
78
+ 1. Email arrives at your domain
79
+ 2. Email Routing matches route (e.g., `support@example.com`)
80
+ 3. Bound Email Worker receives `ForwardableEmailMessage`
81
+ 4. Worker processes and takes action (forward/reply/reject)
82
+ 5. Email delivered or rejected based on worker logic
83
+
84
+ ## Key Concepts
85
+
86
+ ### Envelope vs Headers
87
+
88
+ - **Envelope addresses** (`message.from`, `message.to`): SMTP transport addresses (trusted)
89
+ - **Header addresses** (parsed from body): Display addresses (can be spoofed)
90
+
91
+ Use envelope addresses for security decisions.
92
+
93
+ ### Single-Use Streams
94
+
95
+ `message.raw` is a ReadableStream that can only be read once. Buffer to ArrayBuffer for multiple uses.
96
+
97
+ ```typescript
98
+ // Buffer first
99
+ const buffer = await new Response(message.raw).arrayBuffer()
100
+ const email = await PostalMime.parse(buffer)
101
+ ```
102
+
103
+ See [gotchas.md](./gotchas.md#readablestream-can-only-be-consumed-once) for details.
104
+
105
+ ### Verified Destinations
106
+
107
+ `forward()` only works with addresses verified in the Cloudflare Email Routing dashboard. Add destinations before deployment.
108
+
109
+ ## Use Cases
110
+
111
+ - **Spam filtering**: Block based on sender, content, or reputation
112
+ - **Auto-responders**: Send acknowledgment replies with threading
113
+ - **Ticket creation**: Parse emails and create support tickets
114
+ - **Email archival**: Store in KV, R2, or D1
115
+ - **Notification routing**: Forward to Slack, Discord, or webhooks
116
+ - **Attachment processing**: Extract files to R2 storage
117
+ - **Multi-tenant routing**: Route based on recipient subdomain
118
+ - **Size filtering**: Reject oversized attachments
119
+
120
+ ## Limits
121
+
122
+ | Limit | Value |
123
+ | -------------------- | ------ |
124
+ | Max message size | 25 MiB |
125
+ | Max routing rules | 200 |
126
+ | Max destinations | 200 |
127
+ | CPU time (free tier) | 10ms |
128
+ | CPU time (paid tier) | 50ms |
129
+
130
+ See [gotchas.md](./gotchas.md#limits-reference) for complete limits table.
131
+
132
+ ## Prerequisites
133
+
134
+ Before deploying Email Workers:
135
+
136
+ 1. **Enable Email Routing** in Cloudflare dashboard for your domain
137
+ 2. **Verify destination addresses** for forwarding
138
+ 3. **Configure DMARC/SPF** for sending domains (required for replies)
139
+ 4. **Set up wrangler.jsonc** with SendEmail binding
140
+
141
+ See [configuration.md](./configuration.md) for detailed setup.
142
+
143
+ ## Service Worker Syntax (Deprecated)
144
+
145
+ Modern projects should use ES modules format shown above. Service Worker syntax (`addEventListener('email', ...)`) is deprecated but still supported.
146
+
147
+ ## See Also
148
+
149
+ - [Email Routing Documentation](https://developers.cloudflare.com/email-routing/)
150
+ - [Workers Platform](https://developers.cloudflare.com/workers/)
151
+ - [Wrangler CLI](https://developers.cloudflare.com/workers/wrangler/)
152
+ - [postal-mime on npm](https://www.npmjs.com/package/postal-mime)
153
+ - [mimetext on npm](https://www.npmjs.com/package/mimetext)
@@ -0,0 +1,227 @@
1
+ # Email Workers API Reference
2
+
3
+ Complete API reference for Cloudflare Email Workers runtime.
4
+
5
+ ## ForwardableEmailMessage Interface
6
+
7
+ The main interface passed to email handlers.
8
+
9
+ ```typescript
10
+ interface ForwardableEmailMessage {
11
+ readonly from: string // Envelope MAIL FROM (SMTP sender)
12
+ readonly to: string // Envelope RCPT TO (SMTP recipient)
13
+ readonly headers: Headers // Web-standard Headers object
14
+ readonly raw: ReadableStream // Raw MIME message (single-use stream)
15
+ readonly rawSize: number // Total message size in bytes
16
+
17
+ setReject(reason: string): void
18
+ forward(rcptTo: string, headers?: Headers): Promise<void>
19
+ reply(message: EmailMessage): Promise<void>
20
+ }
21
+ ```
22
+
23
+ ### Properties
24
+
25
+ | Property | Type | Description |
26
+ | --------- | -------------- | --------------------------------------------------- |
27
+ | `from` | string | Envelope sender (SMTP MAIL FROM) - use for security |
28
+ | `to` | string | Envelope recipient (SMTP RCPT TO) |
29
+ | `headers` | Headers | Message headers (Subject, Message-ID, etc.) |
30
+ | `raw` | ReadableStream | Raw MIME message (**single-use**, buffer first) |
31
+ | `rawSize` | number | Message size in bytes |
32
+
33
+ ### Methods
34
+
35
+ #### setReject(reason: string): void
36
+
37
+ Reject with permanent SMTP 5xx error. Email not delivered, sender may receive bounce.
38
+
39
+ ```typescript
40
+ if (blockList.includes(message.from)) {
41
+ message.setReject('Sender blocked')
42
+ }
43
+ ```
44
+
45
+ #### forward(rcptTo: string, headers?: Headers): Promise<void>
46
+
47
+ Forward to verified destination. Only `X-*` custom headers allowed.
48
+
49
+ ```typescript
50
+ await message.forward('inbox@example.com')
51
+
52
+ // With custom headers
53
+ const h = new Headers()
54
+ h.set('X-Processed-By', 'worker')
55
+ await message.forward('inbox@example.com', h)
56
+ ```
57
+
58
+ #### reply(message: EmailMessage): Promise<void>
59
+
60
+ Send a reply to the original sender (March 2025 feature).
61
+
62
+ ```typescript
63
+ import { EmailMessage } from 'cloudflare:email'
64
+ import { createMimeMessage } from 'mimetext'
65
+
66
+ const msg = createMimeMessage()
67
+ msg.setSender({ name: 'Support', addr: 'support@example.com' })
68
+ msg.setRecipient(message.from)
69
+ msg.setSubject(`Re: ${message.headers.get('Subject')}`)
70
+ msg.setHeader('In-Reply-To', message.headers.get('Message-ID'))
71
+ msg.setHeader('References', message.headers.get('References') || '')
72
+ msg.addMessage({
73
+ contentType: 'text/plain',
74
+ data: 'Thank you for your message.',
75
+ })
76
+
77
+ await message.reply(new EmailMessage('support@example.com', message.from, msg.asRaw()))
78
+ ```
79
+
80
+ **Requirements**:
81
+
82
+ - Incoming email needs valid DMARC
83
+ - Reply once per event, recipient = `message.from`
84
+ - Sender domain = receiving domain, with DMARC/SPF/DKIM
85
+ - Max 100 `References` entries
86
+ - Threading: `In-Reply-To` (original Message-ID), `References`, new `Message-ID`
87
+
88
+ ## EmailMessage Constructor
89
+
90
+ ```typescript
91
+ import { EmailMessage } from 'cloudflare:email';
92
+
93
+ new EmailMessage(from: string, to: string, raw: ReadableStream | string)
94
+ ```
95
+
96
+ Used for sending emails (replies or via SendEmail binding). Domain must be verified.
97
+
98
+ ## SendEmail Interface
99
+
100
+ ```typescript
101
+ interface SendEmail {
102
+ send(message: EmailMessage): Promise<void>
103
+ }
104
+
105
+ // Usage
106
+ await env.EMAIL.send(new EmailMessage(from, to, mimeContent))
107
+ ```
108
+
109
+ ## SendEmail Binding Types
110
+
111
+ ```jsonc
112
+ {
113
+ "send_email": [
114
+ { "name": "EMAIL" }, // Type 1: Any verified address
115
+ { "name": "LOGS", "destination_address": "logs@example.com" }, // Type 2: Single dest
116
+ { "name": "TEAM", "allowed_destination_addresses": ["a@ex.com", "b@ex.com"] }, // Type 3: Dest allowlist
117
+ { "name": "NOREPLY", "allowed_sender_addresses": ["noreply@ex.com"] }, // Type 4: Sender allowlist
118
+ ],
119
+ }
120
+ ```
121
+
122
+ ## postal-mime Parsed Output
123
+
124
+ postal-mime v2.7.3 parses incoming emails into structured data.
125
+
126
+ ```typescript
127
+ interface ParsedEmail {
128
+ headers: Array<{ key: string; value: string }>
129
+ from: { name: string; address: string } | null
130
+ to: Array<{ name: string; address: string }> | { name: string; address: string } | null
131
+ cc: Array<{ name: string; address: string }> | null
132
+ bcc: Array<{ name: string; address: string }> | null
133
+ subject: string
134
+ messageId: string | null
135
+ inReplyTo: string | null
136
+ references: string | null
137
+ date: string | null
138
+ html: string | null
139
+ text: string | null
140
+ attachments: Array<{
141
+ filename: string
142
+ mimeType: string
143
+ disposition: string | null
144
+ related: boolean
145
+ contentId: string | null
146
+ content: Uint8Array
147
+ }>
148
+ }
149
+ ```
150
+
151
+ ### Usage
152
+
153
+ ```typescript
154
+ import PostalMime from 'postal-mime'
155
+
156
+ const buffer = await new Response(message.raw).arrayBuffer()
157
+ const email = await PostalMime.parse(buffer)
158
+
159
+ console.log(email.subject)
160
+ console.log(email.from?.address)
161
+ console.log(email.text)
162
+ console.log(email.attachments.length)
163
+ ```
164
+
165
+ ## mimetext API Quick Reference
166
+
167
+ mimetext v3.0.27 composes outgoing emails.
168
+
169
+ ```typescript
170
+ import { createMimeMessage } from 'mimetext'
171
+
172
+ const msg = createMimeMessage()
173
+
174
+ // Sender
175
+ msg.setSender({ name: 'John Doe', addr: 'john@example.com' })
176
+
177
+ // Recipients
178
+ msg.setRecipient('alice@example.com')
179
+ msg.setRecipients(['bob@example.com', 'carol@example.com'])
180
+ msg.setCc('manager@example.com')
181
+ msg.setBcc(['audit@example.com'])
182
+
183
+ // Headers
184
+ msg.setSubject('Meeting Notes')
185
+ msg.setHeader('In-Reply-To', '<previous-message-id>')
186
+ msg.setHeader('References', '<msg1> <msg2>')
187
+ msg.setHeader('Message-ID', `<${crypto.randomUUID()}@example.com>`)
188
+
189
+ // Content
190
+ msg.addMessage({
191
+ contentType: 'text/plain',
192
+ data: 'Plain text content',
193
+ })
194
+
195
+ msg.addMessage({
196
+ contentType: 'text/html',
197
+ data: '<p>HTML content</p>',
198
+ })
199
+
200
+ // Attachments
201
+ msg.addAttachment({
202
+ filename: 'report.pdf',
203
+ contentType: 'application/pdf',
204
+ data: pdfBuffer, // Uint8Array or base64 string
205
+ })
206
+
207
+ // Generate raw MIME
208
+ const raw = msg.asRaw() // Returns string
209
+ ```
210
+
211
+ ## TypeScript Types
212
+
213
+ ```typescript
214
+ import { ForwardableEmailMessage, EmailMessage } from 'cloudflare:email'
215
+
216
+ interface Env {
217
+ EMAIL: SendEmail
218
+ EMAIL_ARCHIVE: KVNamespace
219
+ ALLOWED_SENDERS: KVNamespace
220
+ }
221
+
222
+ export default {
223
+ async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext): Promise<void> {
224
+ // Fully typed
225
+ },
226
+ }
227
+ ```
@@ -0,0 +1,115 @@
1
+ # Email Workers Configuration
2
+
3
+ ## wrangler.jsonc
4
+
5
+ ```jsonc
6
+ {
7
+ "name": "email-worker",
8
+ "main": "src/index.ts",
9
+ "compatibility_date": "2025-01-27",
10
+ "send_email": [
11
+ { "name": "EMAIL" }, // Unrestricted
12
+ { "name": "EMAIL_LOGS", "destination_address": "logs@example.com" }, // Single dest
13
+ { "name": "EMAIL_TEAM", "allowed_destination_addresses": ["a@ex.com", "b@ex.com"] },
14
+ { "name": "EMAIL_NOREPLY", "allowed_sender_addresses": ["noreply@ex.com"] },
15
+ ],
16
+ "kv_namespaces": [{ "binding": "ARCHIVE", "id": "xxx" }],
17
+ "r2_buckets": [{ "binding": "ATTACHMENTS", "bucket_name": "email-attachments" }],
18
+ "vars": { "WEBHOOK_URL": "https://hooks.example.com" },
19
+ }
20
+ ```
21
+
22
+ ## TypeScript Types
23
+
24
+ ```typescript
25
+ interface Env {
26
+ EMAIL: SendEmail
27
+ ARCHIVE: KVNamespace
28
+ ATTACHMENTS: R2Bucket
29
+ WEBHOOK_URL: string
30
+ }
31
+
32
+ export default {
33
+ async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext) {},
34
+ }
35
+ ```
36
+
37
+ ## Dependencies
38
+
39
+ ```bash
40
+ npm install postal-mime mimetext
41
+ npm install -D @cloudflare/workers-types wrangler typescript
42
+ ```
43
+
44
+ Use postal-mime v2.x, mimetext v3.x.
45
+
46
+ ## tsconfig.json
47
+
48
+ ```json
49
+ {
50
+ "compilerOptions": {
51
+ "target": "ES2022",
52
+ "module": "ES2022",
53
+ "lib": ["ES2022"],
54
+ "types": ["@cloudflare/workers-types"],
55
+ "moduleResolution": "bundler",
56
+ "strict": true
57
+ }
58
+ }
59
+ ```
60
+
61
+ ## Local Development
62
+
63
+ ```bash
64
+ npx wrangler dev
65
+
66
+ # Test receiving
67
+ curl --request POST 'http://localhost:8787/cdn-cgi/handler/email' \
68
+ --url-query 'from=sender@example.com' --url-query 'to=recipient@example.com' \
69
+ --header 'Content-Type: text/plain' --data-raw 'Subject: Test\n\nHello'
70
+ ```
71
+
72
+ Sent emails write to local `.eml` files.
73
+
74
+ ## Deployment Checklist
75
+
76
+ - [ ] Enable Email Routing in dashboard
77
+ - [ ] Verify destination addresses
78
+ - [ ] Configure DMARC/SPF/DKIM for sending
79
+ - [ ] Create KV/R2 resources if needed
80
+ - [ ] Update wrangler.jsonc with production IDs
81
+
82
+ ```bash
83
+ npx wrangler deploy
84
+ npx wrangler deployments list
85
+ ```
86
+
87
+ ## Dashboard Setup
88
+
89
+ 1. **Email Routing:** Domain → Email → Enable Email Routing
90
+ 2. **Verify addresses:** Email → Destination addresses → Add & verify
91
+ 3. **Bind Worker:** Email → Email Workers → Create route → Select pattern & Worker
92
+ 4. **DMARC:** Add TXT `_dmarc.domain.com`: `v=DMARC1; p=quarantine;`
93
+
94
+ ## Secrets
95
+
96
+ ```bash
97
+ npx wrangler secret put API_KEY
98
+ # Access: env.API_KEY
99
+ ```
100
+
101
+ ## Monitoring
102
+
103
+ ```bash
104
+ npx wrangler tail
105
+ npx wrangler tail --status error
106
+ npx wrangler tail --format json
107
+ ```
108
+
109
+ ## Troubleshooting
110
+
111
+ | Error | Fix |
112
+ | --------------------- | ------------------------------------ |
113
+ | "Binding not found" | Check `send_email` name matches code |
114
+ | "Invalid destination" | Verify in Email Routing dashboard |
115
+ | Type errors | Install `@cloudflare/workers-types` |
@@ -0,0 +1,133 @@
1
+ # Email Workers Gotchas
2
+
3
+ ## Critical Issues
4
+
5
+ ### ReadableStream Single-Use
6
+
7
+ ```typescript
8
+ // ❌ WRONG: Stream consumed twice
9
+ const email = await PostalMime.parse(await new Response(message.raw).arrayBuffer())
10
+ const rawText = await new Response(message.raw).text() // EMPTY!
11
+
12
+ // ✅ CORRECT: Buffer first
13
+ const buffer = await new Response(message.raw).arrayBuffer()
14
+ const email = await PostalMime.parse(buffer)
15
+ const rawText = new TextDecoder().decode(buffer)
16
+ ```
17
+
18
+ ### ctx.waitUntil() Errors Silent
19
+
20
+ ```typescript
21
+ // ❌ Errors dropped silently
22
+ ctx.waitUntil(fetch(webhookUrl, { method: 'POST', body: data }))
23
+
24
+ // ✅ Catch and log
25
+ ctx.waitUntil(
26
+ fetch(webhookUrl, { method: 'POST', body: data }).catch((err) =>
27
+ env.ERROR_LOG.put(`error:${Date.now()}`, err.message)
28
+ )
29
+ )
30
+ ```
31
+
32
+ ## Security
33
+
34
+ ### Envelope vs Header From (Spoofing)
35
+
36
+ ```typescript
37
+ const envelopeFrom = message.from // SMTP MAIL FROM (trusted)
38
+ const headerFrom = (await PostalMime.parse(buffer)).from?.address // (untrusted)
39
+ // Use envelope for security decisions
40
+ ```
41
+
42
+ ### Input Validation
43
+
44
+ ```typescript
45
+ if (message.rawSize > 5_000_000) {
46
+ message.setReject('Too large')
47
+ return
48
+ }
49
+ if ((message.headers.get('Subject') || '').length > 1000) {
50
+ message.setReject('Invalid subject')
51
+ return
52
+ }
53
+ ```
54
+
55
+ ### DMARC for Replies
56
+
57
+ Replies fail silently without DMARC. Verify: `dig TXT _dmarc.example.com`
58
+
59
+ ## Parsing
60
+
61
+ ### Address Parsing
62
+
63
+ ```typescript
64
+ const email = await PostalMime.parse(buffer)
65
+ const fromAddress = email.from?.address || 'unknown'
66
+ const toAddresses = Array.isArray(email.to) ? email.to.map((t) => t.address) : [email.to?.address]
67
+ ```
68
+
69
+ ### Character Encoding
70
+
71
+ Let postal-mime handle decoding - `email.subject`, `email.text`, `email.html` are UTF-8.
72
+
73
+ ## API Behavior
74
+
75
+ ### setReject() vs throw
76
+
77
+ ```typescript
78
+ // setReject() for SMTP rejection
79
+ if (blockList.includes(message.from)) {
80
+ message.setReject('Blocked')
81
+ return
82
+ }
83
+
84
+ // throw for worker errors
85
+ if (!env.KV) throw new Error('KV not configured')
86
+ ```
87
+
88
+ ### forward() Only X-\* Headers
89
+
90
+ ```typescript
91
+ headers.set('X-Processed-By', 'worker') // ✅ Works
92
+ headers.set('Subject', 'Modified') // ❌ Dropped
93
+ ```
94
+
95
+ ### Reply Requires Verified Domain
96
+
97
+ ```typescript
98
+ // Use same domain as receiving address
99
+ const receivingDomain = message.to.split('@')[1]
100
+ await message.reply(new EmailMessage(`noreply@${receivingDomain}`, message.from, rawMime))
101
+ ```
102
+
103
+ ## Performance
104
+
105
+ ### CPU Limit
106
+
107
+ ```typescript
108
+ // Skip parsing large emails
109
+ if (message.rawSize > 5_000_000) {
110
+ await message.forward('inbox@example.com')
111
+ return
112
+ }
113
+ ```
114
+
115
+ Monitor: `npx wrangler tail`
116
+
117
+ ## Limits
118
+
119
+ | Limit | Value |
120
+ | -------------------- | ----------- |
121
+ | Max message size | 25 MiB |
122
+ | Max rules/zone | 200 |
123
+ | CPU time (free/paid) | 10ms / 50ms |
124
+ | Reply References | 100 |
125
+
126
+ ## Common Errors
127
+
128
+ | Error | Fix |
129
+ | ---------------------- | -------------------------------- |
130
+ | "Address not verified" | Add in Email Routing dashboard |
131
+ | "Exceeded CPU time" | Use `ctx.waitUntil()` or upgrade |
132
+ | "Stream is locked" | Buffer `message.raw` first |
133
+ | Silent reply failure | Check DMARC records |