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,187 @@
1
+ # Email Routing Configuration
2
+
3
+ ## Wrangler Configuration
4
+
5
+ ### Basic Email Worker
6
+
7
+ ```jsonc
8
+ // wrangler.jsonc
9
+ {
10
+ "name": "email-worker",
11
+ "main": "src/index.ts",
12
+ "compatibility_date": "2025-01-01",
13
+ "send_email": [{ "name": "EMAIL" }],
14
+ }
15
+ ```
16
+
17
+ ```typescript
18
+ // src/index.ts
19
+ export default {
20
+ async email(message, env, ctx) {
21
+ await message.forward('destination@example.com')
22
+ },
23
+ } satisfies ExportedHandler
24
+ ```
25
+
26
+ ### With Storage Bindings
27
+
28
+ ```jsonc
29
+ {
30
+ "name": "email-processor",
31
+ "send_email": [{ "name": "EMAIL" }],
32
+ "kv_namespaces": [{ "binding": "KV", "id": "abc123" }],
33
+ "r2_buckets": [{ "binding": "R2", "bucket_name": "emails" }],
34
+ "d1_databases": [{ "binding": "DB", "database_id": "def456" }],
35
+ }
36
+ ```
37
+
38
+ ```typescript
39
+ interface Env {
40
+ EMAIL: SendEmail
41
+ KV: KVNamespace
42
+ R2: R2Bucket
43
+ DB: D1Database
44
+ }
45
+ ```
46
+
47
+ ## Local Development
48
+
49
+ ```bash
50
+ npx wrangler dev
51
+
52
+ # Test with curl
53
+ curl -X POST 'http://localhost:8787/__email' \
54
+ --header 'content-type: message/rfc822' \
55
+ --data 'From: test@example.com
56
+ To: you@yourdomain.com
57
+ Subject: Test
58
+
59
+ Body'
60
+ ```
61
+
62
+ ## Deployment
63
+
64
+ ```bash
65
+ npx wrangler deploy
66
+ ```
67
+
68
+ **Connect to Email Routing:**
69
+
70
+ Dashboard: Email > Email Routing > [domain] > Settings > Email Workers > Select worker
71
+
72
+ API:
73
+
74
+ ```bash
75
+ curl -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/email/routing/settings" \
76
+ -H "Authorization: Bearer $API_TOKEN" \
77
+ -d '{"enabled": true, "worker": "email-worker"}'
78
+ ```
79
+
80
+ ## DNS (Auto-Created)
81
+
82
+ ```dns
83
+ yourdomain.com. IN MX 1 isaac.mx.cloudflare.net.
84
+ yourdomain.com. IN MX 2 linda.mx.cloudflare.net.
85
+ yourdomain.com. IN MX 3 amir.mx.cloudflare.net.
86
+ yourdomain.com. IN TXT "v=spf1 include:_spf.mx.cloudflare.net ~all"
87
+ ```
88
+
89
+ ## Secrets & Variables
90
+
91
+ ```bash
92
+ # Secrets (encrypted)
93
+ npx wrangler secret put API_KEY
94
+
95
+ # Variables (plain)
96
+ # wrangler.jsonc
97
+ { "vars": { "THRESHOLD": "5.0" } }
98
+ ```
99
+
100
+ ```typescript
101
+ interface Env {
102
+ API_KEY: string
103
+ THRESHOLD: string
104
+ }
105
+ ```
106
+
107
+ ## TypeScript Setup
108
+
109
+ ```bash
110
+ npm install --save-dev @cloudflare/workers-types
111
+ ```
112
+
113
+ ```json
114
+ // tsconfig.json
115
+ {
116
+ "compilerOptions": {
117
+ "target": "ES2022",
118
+ "module": "ES2022",
119
+ "lib": ["ES2022"],
120
+ "types": ["@cloudflare/workers-types"],
121
+ "moduleResolution": "bundler",
122
+ "strict": true
123
+ }
124
+ }
125
+ ```
126
+
127
+ ```typescript
128
+ import type { ForwardableEmailMessage } from '@cloudflare/workers-types'
129
+
130
+ export default {
131
+ async email(message: ForwardableEmailMessage, env: Env, ctx: ExecutionContext): Promise<void> {
132
+ await message.forward('dest@example.com')
133
+ },
134
+ } satisfies ExportedHandler<Env>
135
+ ```
136
+
137
+ ## Dependencies
138
+
139
+ ```bash
140
+ npm install postal-mime
141
+ ```
142
+
143
+ ```typescript
144
+ import PostalMime from 'postal-mime'
145
+
146
+ export default {
147
+ async email(message, env, ctx) {
148
+ const parser = new PostalMime()
149
+ const email = await parser.parse(await message.raw.arrayBuffer())
150
+ console.log(email.subject)
151
+ await message.forward('inbox@corp.com')
152
+ },
153
+ } satisfies ExportedHandler
154
+ ```
155
+
156
+ ## Multi-Environment
157
+
158
+ ```bash
159
+ # wrangler.dev.jsonc
160
+ { "name": "worker-dev", "vars": { "ENV": "dev" } }
161
+
162
+ # wrangler.prod.jsonc
163
+ { "name": "worker-prod", "vars": { "ENV": "prod" } }
164
+
165
+ npx wrangler deploy --config wrangler.dev.jsonc
166
+ npx wrangler deploy --config wrangler.prod.jsonc
167
+ ```
168
+
169
+ ## CI/CD (GitHub Actions)
170
+
171
+ ```yaml
172
+ # .github/workflows/deploy.yml
173
+ name: Deploy
174
+ on:
175
+ push:
176
+ branches: [main]
177
+ jobs:
178
+ deploy:
179
+ runs-on: ubuntu-latest
180
+ steps:
181
+ - uses: actions/checkout@v3
182
+ - uses: actions/setup-node@v3
183
+ - run: npm ci
184
+ - run: npx wrangler deploy
185
+ env:
186
+ CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
187
+ ```
@@ -0,0 +1,203 @@
1
+ # Gotchas & Troubleshooting
2
+
3
+ ## Critical Pitfalls
4
+
5
+ ### Stream Consumption (MOST COMMON)
6
+
7
+ **Problem:** "stream already consumed" or worker hangs
8
+
9
+ **Cause:** `message.raw` is `ReadableStream` - consume once only
10
+
11
+ **Solution:**
12
+
13
+ ```typescript
14
+ // ❌ WRONG
15
+ const email1 = await parser.parse(await message.raw.arrayBuffer())
16
+ const email2 = await parser.parse(await message.raw.arrayBuffer()) // FAILS
17
+
18
+ // ✅ CORRECT
19
+ const raw = await message.raw.arrayBuffer()
20
+ const email = await parser.parse(raw)
21
+ ```
22
+
23
+ Consume `message.raw` immediately before any async operations.
24
+
25
+ ### Destination Verification
26
+
27
+ **Problem:** Emails not forwarding
28
+
29
+ **Cause:** Destination unverified
30
+
31
+ **Solution:** Add destination, check inbox for verification email, click link. Verify status: `GET /zones/{id}/email/routing/addresses`
32
+
33
+ ### Mail Authentication
34
+
35
+ **Problem:** Legitimate emails rejected
36
+
37
+ **Cause:** Missing SPF/DKIM/DMARC on sender domain
38
+
39
+ **Solution:** Configure sender DNS:
40
+
41
+ ```dns
42
+ example.com. IN TXT "v=spf1 include:_spf.example.com ~all"
43
+ selector._domainkey.example.com. IN TXT "v=DKIM1; k=rsa; p=..."
44
+ _dmarc.example.com. IN TXT "v=DMARC1; p=quarantine"
45
+ ```
46
+
47
+ ### Envelope vs Header
48
+
49
+ **Problem:** Filtering on wrong address
50
+
51
+ **Solution:**
52
+
53
+ ```typescript
54
+ // Routing/auth: envelope
55
+ if (message.from === 'trusted@example.com') {
56
+ }
57
+
58
+ // Display: headers
59
+ const display = message.headers.get('from')
60
+ ```
61
+
62
+ ### SendEmail Limits
63
+
64
+ | Issue | Limit | Solution |
65
+ | ----------- | ------------- | ------------------------ |
66
+ | From domain | Must own | Use Email Routing domain |
67
+ | Volume | ~100/min Free | Upgrade or throttle |
68
+ | Attachments | Not supported | Link to R2 |
69
+ | Type | Transactional | No bulk |
70
+
71
+ ## Common Errors
72
+
73
+ ### CPU Time Exceeded
74
+
75
+ **Cause:** Heavy parsing, large emails
76
+
77
+ **Solution:**
78
+
79
+ ```typescript
80
+ const size = parseInt(message.headers.get('content-length') || '0') / 1024 / 1024
81
+ if (size > 20) {
82
+ message.setReject('Too large')
83
+ return
84
+ }
85
+
86
+ ctx.waitUntil(expensiveWork())
87
+ await message.forward('dest@example.com')
88
+ ```
89
+
90
+ ### Rule Not Triggering
91
+
92
+ **Causes:** Priority conflict, matcher error, catch-all override
93
+
94
+ **Solution:** Check priority (lower=first), verify exact match, confirm destination verified
95
+
96
+ ### Undefined Property
97
+
98
+ **Cause:** Missing header
99
+
100
+ **Solution:**
101
+
102
+ ```typescript
103
+ // ❌ WRONG
104
+ const subj = message.headers.get('subject').toLowerCase()
105
+
106
+ // ✅ CORRECT
107
+ const subj = message.headers.get('subject')?.toLowerCase() || ''
108
+ ```
109
+
110
+ ## Limits
111
+
112
+ | Resource | Free | Paid |
113
+ | ------------ | -------- | ------ |
114
+ | Email size | 25 MB | 25 MB |
115
+ | Rules | 200 | 200 |
116
+ | Destinations | 200 | 200 |
117
+ | CPU time | 10ms | 50ms |
118
+ | SendEmail | ~100/min | Higher |
119
+
120
+ ## Debugging
121
+
122
+ ### Local
123
+
124
+ ```bash
125
+ npx wrangler dev
126
+
127
+ curl -X POST 'http://localhost:8787/__email' \
128
+ --header 'content-type: message/rfc822' \
129
+ --data 'From: test@example.com
130
+ To: you@yourdomain.com
131
+ Subject: Test
132
+
133
+ Body'
134
+ ```
135
+
136
+ ### Production
137
+
138
+ ```bash
139
+ npx wrangler tail
140
+ ```
141
+
142
+ ### Pattern
143
+
144
+ ```typescript
145
+ export default {
146
+ async email(message, env, ctx) {
147
+ try {
148
+ console.log('From:', message.from)
149
+ await process(message, env)
150
+ } catch (err) {
151
+ console.error(err)
152
+ message.setReject(err.message)
153
+ }
154
+ },
155
+ } satisfies ExportedHandler
156
+ ```
157
+
158
+ ## Auth Troubleshooting
159
+
160
+ ### Check Status
161
+
162
+ ```typescript
163
+ const auth = message.headers.get('authentication-results') || ''
164
+ console.log({
165
+ spf: auth.includes('spf=pass'),
166
+ dkim: auth.includes('dkim=pass'),
167
+ dmarc: auth.includes('dmarc=pass'),
168
+ })
169
+
170
+ if (!auth.includes('pass')) {
171
+ message.setReject('Failed auth')
172
+ return
173
+ }
174
+ ```
175
+
176
+ ### SPF Issues
177
+
178
+ **Causes:** Forwarding breaks SPF, too many lookups (>10), missing includes
179
+
180
+ **Solution:**
181
+
182
+ ```dns
183
+ ; ✅ Good
184
+ example.com. IN TXT "v=spf1 include:_spf.google.com ~all"
185
+
186
+ ; ❌ Bad - too many
187
+ example.com. IN TXT "v=spf1 include:a.com include:b.com ... ~all"
188
+ ```
189
+
190
+ ### DMARC Alignment
191
+
192
+ **Cause:** From domain must match SPF/DKIM domain
193
+
194
+ ## Best Practices
195
+
196
+ 1. Consume `message.raw` immediately
197
+ 2. Verify destinations
198
+ 3. Handle missing headers (`?.`)
199
+ 4. Use envelope for routing
200
+ 5. Check spam scores
201
+ 6. Test locally first
202
+ 7. Use `ctx.waitUntil` for background work
203
+ 8. Size-check early
@@ -0,0 +1,241 @@
1
+ # Common Patterns
2
+
3
+ ## 1. Allowlist/Blocklist
4
+
5
+ ```typescript
6
+ // Allowlist
7
+ const allowed = ['user@example.com', 'trusted@corp.com']
8
+ if (!allowed.includes(message.from)) {
9
+ message.setReject('Not allowed')
10
+ return
11
+ }
12
+ await message.forward('inbox@corp.com')
13
+ ```
14
+
15
+ ## 2. Parse Email Body
16
+
17
+ ```typescript
18
+ import PostalMime from 'postal-mime'
19
+
20
+ export default {
21
+ async email(message, env, ctx) {
22
+ // CRITICAL: Consume stream immediately
23
+ const raw = await message.raw.arrayBuffer()
24
+
25
+ const parser = new PostalMime()
26
+ const email = await parser.parse(raw)
27
+
28
+ console.log({
29
+ subject: email.subject,
30
+ text: email.text,
31
+ html: email.html,
32
+ from: email.from.address,
33
+ attachments: email.attachments.length,
34
+ })
35
+
36
+ await message.forward('inbox@corp.com')
37
+ },
38
+ } satisfies ExportedHandler
39
+ ```
40
+
41
+ ## 3. Spam Filter
42
+
43
+ ```typescript
44
+ const score = parseFloat(message.headers.get('x-cf-spamh-score') || '0')
45
+ if (score > 5) {
46
+ message.setReject('Spam detected')
47
+ return
48
+ }
49
+ await message.forward('inbox@corp.com')
50
+ ```
51
+
52
+ ## 4. Archive to R2
53
+
54
+ ```typescript
55
+ interface Env {
56
+ R2: R2Bucket
57
+ }
58
+
59
+ export default {
60
+ async email(message, env, ctx) {
61
+ const raw = await message.raw.arrayBuffer()
62
+
63
+ const key = `${new Date().toISOString()}-${message.from}.eml`
64
+ await env.R2.put(key, raw, {
65
+ httpMetadata: { contentType: 'message/rfc822' },
66
+ })
67
+
68
+ await message.forward('inbox@corp.com')
69
+ },
70
+ } satisfies ExportedHandler<Env>
71
+ ```
72
+
73
+ ## 5. Store Metadata in KV
74
+
75
+ ```typescript
76
+ import PostalMime from 'postal-mime'
77
+
78
+ interface Env {
79
+ KV: KVNamespace
80
+ }
81
+
82
+ export default {
83
+ async email(message, env, ctx) {
84
+ const raw = await message.raw.arrayBuffer()
85
+ const parser = new PostalMime()
86
+ const email = await parser.parse(raw)
87
+
88
+ const metadata = {
89
+ from: email.from.address,
90
+ subject: email.subject,
91
+ timestamp: new Date().toISOString(),
92
+ size: raw.byteLength,
93
+ }
94
+
95
+ await env.KV.put(`email:${Date.now()}`, JSON.stringify(metadata))
96
+ await message.forward('inbox@corp.com')
97
+ },
98
+ } satisfies ExportedHandler<Env>
99
+ ```
100
+
101
+ ## 6. Subject-Based Routing
102
+
103
+ ```typescript
104
+ export default {
105
+ async email(message, env, ctx) {
106
+ const subject = message.headers.get('subject')?.toLowerCase() || ''
107
+
108
+ if (subject.includes('[urgent]')) {
109
+ await message.forward('oncall@corp.com')
110
+ } else if (subject.includes('[billing]')) {
111
+ await message.forward('billing@corp.com')
112
+ } else if (subject.includes('[support]')) {
113
+ await message.forward('support@corp.com')
114
+ } else {
115
+ await message.forward('general@corp.com')
116
+ }
117
+ },
118
+ } satisfies ExportedHandler
119
+ ```
120
+
121
+ ## 7. Auto-Reply
122
+
123
+ ```typescript
124
+ interface Env {
125
+ EMAIL: SendEmail
126
+ REPLIED: KVNamespace
127
+ }
128
+
129
+ export default {
130
+ async email(message, env, ctx) {
131
+ const msgId = message.headers.get('message-id')
132
+
133
+ if (msgId && (await env.REPLIED.get(msgId))) {
134
+ await message.forward('archive@corp.com')
135
+ return
136
+ }
137
+
138
+ ctx.waitUntil(
139
+ (async () => {
140
+ await env.EMAIL.send({
141
+ from: 'noreply@yourdomain.com',
142
+ to: message.from,
143
+ subject: 'Re: ' + (message.headers.get('subject') || ''),
144
+ text: "Thank you. We'll respond within 24h.",
145
+ })
146
+ if (msgId) await env.REPLIED.put(msgId, '1', { expirationTtl: 604800 })
147
+ })()
148
+ )
149
+
150
+ await message.forward('support@corp.com')
151
+ },
152
+ } satisfies ExportedHandler<Env>
153
+ ```
154
+
155
+ ## 8. Extract Attachments
156
+
157
+ ```typescript
158
+ import PostalMime from 'postal-mime'
159
+
160
+ interface Env {
161
+ ATTACHMENTS: R2Bucket
162
+ }
163
+
164
+ export default {
165
+ async email(message, env, ctx) {
166
+ const parser = new PostalMime()
167
+ const email = await parser.parse(await message.raw.arrayBuffer())
168
+
169
+ for (const att of email.attachments) {
170
+ const key = `${Date.now()}-${att.filename}`
171
+ await env.ATTACHMENTS.put(key, att.content, {
172
+ httpMetadata: { contentType: att.mimeType },
173
+ })
174
+ }
175
+
176
+ await message.forward('inbox@corp.com')
177
+ },
178
+ } satisfies ExportedHandler<Env>
179
+ ```
180
+
181
+ ## 9. Log to D1
182
+
183
+ ```typescript
184
+ import PostalMime from 'postal-mime'
185
+
186
+ interface Env {
187
+ DB: D1Database
188
+ }
189
+
190
+ export default {
191
+ async email(message, env, ctx) {
192
+ const parser = new PostalMime()
193
+ const email = await parser.parse(await message.raw.arrayBuffer())
194
+
195
+ ctx.waitUntil(
196
+ env.DB.prepare('INSERT INTO log (ts, from_addr, subj) VALUES (?, ?, ?)')
197
+ .bind(new Date().toISOString(), email.from.address, email.subject || '')
198
+ .run()
199
+ )
200
+
201
+ await message.forward('inbox@corp.com')
202
+ },
203
+ } satisfies ExportedHandler<Env>
204
+ ```
205
+
206
+ ## 10. Multi-Tenant
207
+
208
+ ```typescript
209
+ interface Env {
210
+ TENANTS: KVNamespace
211
+ }
212
+
213
+ export default {
214
+ async email(message, env, ctx) {
215
+ const subdomain = message.to.split('@')[1].split('.')[0]
216
+ const config = (await env.TENANTS.get(subdomain, 'json')) as { forward: string } | null
217
+
218
+ if (!config) {
219
+ message.setReject('Unknown tenant')
220
+ return
221
+ }
222
+
223
+ await message.forward(config.forward)
224
+ },
225
+ } satisfies ExportedHandler<Env>
226
+ ```
227
+
228
+ ## Summary
229
+
230
+ | Pattern | Use Case | Storage |
231
+ | ------------- | ---------------- | ------- |
232
+ | Allowlist | Security | None |
233
+ | Parse | Body/attachments | None |
234
+ | Spam Filter | Reduce spam | None |
235
+ | R2 Archive | Email storage | R2 |
236
+ | KV Meta | Analytics | KV |
237
+ | Subject Route | Dept routing | None |
238
+ | Auto-Reply | Support | KV |
239
+ | Attachments | Doc mgmt | R2 |
240
+ | D1 Log | Audit trail | D1 |
241
+ | Multi-Tenant | SaaS | KV |