opencodekit 0.15.20 → 0.15.21

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 (551) hide show
  1. package/dist/index.js +3 -1
  2. package/dist/template/.opencode/agent/build.md +270 -0
  3. package/dist/template/.opencode/{commands → command}/finish.md +18 -0
  4. package/dist/template/.opencode/{commands → command}/handoff.md +36 -1
  5. package/dist/template/.opencode/{commands → command}/implement.md +32 -30
  6. package/dist/template/.opencode/{commands → command}/new-feature.md +3 -2
  7. package/dist/template/.opencode/{commands → command}/research.md +4 -10
  8. package/dist/template/.opencode/{commands → command}/resume.md +36 -9
  9. package/dist/template/.opencode/{commands → command}/start.md +12 -0
  10. package/dist/template/.opencode/memory/observations/2026-01-31-decision-created-dedicated-worker-agent-for-swarm.md +20 -0
  11. package/dist/template/.opencode/memory/observations/2026-01-31-decision-rollback-to-v1-1-47-for-copilot-claude-r.md +21 -0
  12. package/dist/template/.opencode/memory/observations/2026-01-31-decision-simplified-swarm-to-task-tool-pattern.md +44 -0
  13. package/dist/template/.opencode/memory/observations/2026-01-31-decision-swarm-architecture-task-tool-over-tmux.md +33 -0
  14. package/dist/template/.opencode/memory/observations/2026-01-31-decision-worker-skills-defined-for-swarm-delegati.md +30 -0
  15. package/dist/template/.opencode/memory/observations/2026-01-31-learning-gpt-reasoning-config-for-github-copilot.md +51 -0
  16. package/dist/template/.opencode/memory/observations/2026-01-31-learning-opencode-custom-tools-api.md +48 -0
  17. package/dist/template/.opencode/memory/observations/2026-01-31-learning-opencode-v1-1-48-skills-as-slash-command.md +21 -0
  18. package/dist/template/.opencode/memory/observations/2026-01-31-learning-swarm-system-simplified-removed-mailbox-.md +30 -0
  19. package/dist/template/.opencode/memory/observations/2026-01-31-learning-v1-1-48-native-copilot-reasoning-via-pr-.md +45 -0
  20. package/dist/template/.opencode/memory/observations/2026-01-31-warning-cannot-add-custom-config-to-opencode-jso.md +18 -0
  21. package/dist/template/.opencode/memory/observations/2026-01-31-warning-opencode-v1-1-48-claude-thinking-block-s.md +51 -0
  22. package/dist/template/.opencode/opencode.json +803 -805
  23. package/dist/template/.opencode/package.json +2 -2
  24. package/dist/template/.opencode/{plugins → plugin}/copilot-auth.ts +107 -177
  25. package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/openai-compatible-chat-language-model.ts +12 -2
  26. package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/openai-compatible-chat-options.ts +1 -1
  27. package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/openai-compatible-error.ts +1 -1
  28. package/dist/template/.opencode/{plugins → plugin}/swarm-enforcer.ts +18 -23
  29. package/dist/template/.opencode/{skills → skill}/beads/SKILL.md +41 -0
  30. package/dist/template/.opencode/skill/beads-bridge/SKILL.md +294 -0
  31. package/dist/template/.opencode/skill/resend/SKILL.md +167 -0
  32. package/dist/template/.opencode/skill/resend/references/react-email.md +287 -0
  33. package/dist/template/.opencode/skill/resend/references/receive-email.md +248 -0
  34. package/dist/template/.opencode/skill/resend/references/send-email.md +318 -0
  35. package/dist/template/.opencode/skill/swarm-coordination/SKILL.md +690 -0
  36. package/dist/template/.opencode/skill/tool-priority/SKILL.md +259 -0
  37. package/dist/template/.opencode/tool/beads-sync.ts +657 -0
  38. package/dist/template/.opencode/{tools → tool}/swarm-delegate.ts +13 -8
  39. package/dist/template/.opencode/{tools → tool}/swarm-monitor.ts +14 -170
  40. package/dist/template/.opencode/{tools → tool}/swarm-plan.ts +232 -1
  41. package/package.json +3 -1
  42. package/dist/template/.opencode/agents/build.md +0 -584
  43. package/dist/template/.opencode/skills/swarm-coordination/SKILL.md +0 -548
  44. package/dist/template/.opencode/skills/tool-priority/SKILL.md +0 -190
  45. /package/dist/template/.opencode/{agents → agent}/explore.md +0 -0
  46. /package/dist/template/.opencode/{agents → agent}/general.md +0 -0
  47. /package/dist/template/.opencode/{agents → agent}/looker.md +0 -0
  48. /package/dist/template/.opencode/{agents → agent}/painter.md +0 -0
  49. /package/dist/template/.opencode/{agents → agent}/plan.md +0 -0
  50. /package/dist/template/.opencode/{agents → agent}/review.md +0 -0
  51. /package/dist/template/.opencode/{agents → agent}/scout.md +0 -0
  52. /package/dist/template/.opencode/{agents → agent}/vision.md +0 -0
  53. /package/dist/template/.opencode/{commands → command}/accessibility-check.md +0 -0
  54. /package/dist/template/.opencode/{commands → command}/agent-browser.md +0 -0
  55. /package/dist/template/.opencode/{commands → command}/analyze-mockup.md +0 -0
  56. /package/dist/template/.opencode/{commands → command}/analyze-project.md +0 -0
  57. /package/dist/template/.opencode/{commands → command}/brainstorm.md +0 -0
  58. /package/dist/template/.opencode/{commands → command}/cloudflare.md +0 -0
  59. /package/dist/template/.opencode/{commands → command}/commit.md +0 -0
  60. /package/dist/template/.opencode/{commands → command}/complete-next-task.md +0 -0
  61. /package/dist/template/.opencode/{commands → command}/create.md +0 -0
  62. /package/dist/template/.opencode/{commands → command}/design-audit.md +0 -0
  63. /package/dist/template/.opencode/{commands → command}/design.md +0 -0
  64. /package/dist/template/.opencode/{commands → command}/edit-image.md +0 -0
  65. /package/dist/template/.opencode/{commands → command}/fix-ci.md +0 -0
  66. /package/dist/template/.opencode/{commands → command}/fix-types.md +0 -0
  67. /package/dist/template/.opencode/{commands → command}/fix-ui.md +0 -0
  68. /package/dist/template/.opencode/{commands → command}/fix.md +0 -0
  69. /package/dist/template/.opencode/{commands → command}/frontend-design.md +0 -0
  70. /package/dist/template/.opencode/{commands → command}/generate-diagram.md +0 -0
  71. /package/dist/template/.opencode/{commands → command}/generate-icon.md +0 -0
  72. /package/dist/template/.opencode/{commands → command}/generate-image.md +0 -0
  73. /package/dist/template/.opencode/{commands → command}/generate-pattern.md +0 -0
  74. /package/dist/template/.opencode/{commands → command}/generate-storyboard.md +0 -0
  75. /package/dist/template/.opencode/{commands → command}/import-plan.md +0 -0
  76. /package/dist/template/.opencode/{commands → command}/index-knowledge.md +0 -0
  77. /package/dist/template/.opencode/{commands → command}/init.md +0 -0
  78. /package/dist/template/.opencode/{commands → command}/integration-test.md +0 -0
  79. /package/dist/template/.opencode/{commands → command}/issue.md +0 -0
  80. /package/dist/template/.opencode/{commands → command}/opensrc.md +0 -0
  81. /package/dist/template/.opencode/{commands → command}/plan.md +0 -0
  82. /package/dist/template/.opencode/{commands → command}/pr.md +0 -0
  83. /package/dist/template/.opencode/{commands → command}/quick-build.md +0 -0
  84. /package/dist/template/.opencode/{commands → command}/ralph.md +0 -0
  85. /package/dist/template/.opencode/{commands → command}/research-and-implement.md +0 -0
  86. /package/dist/template/.opencode/{commands → command}/research-ui.md +0 -0
  87. /package/dist/template/.opencode/{commands → command}/restore-image.md +0 -0
  88. /package/dist/template/.opencode/{commands → command}/revert-feature.md +0 -0
  89. /package/dist/template/.opencode/{commands → command}/review-codebase.md +0 -0
  90. /package/dist/template/.opencode/{commands → command}/skill-create.md +0 -0
  91. /package/dist/template/.opencode/{commands → command}/skill-optimize.md +0 -0
  92. /package/dist/template/.opencode/{commands → command}/status.md +0 -0
  93. /package/dist/template/.opencode/{commands → command}/summarize.md +0 -0
  94. /package/dist/template/.opencode/{commands → command}/triage.md +0 -0
  95. /package/dist/template/.opencode/{commands → command}/ui-review.md +0 -0
  96. /package/dist/template/.opencode/{plugins → plugin}/README.md +0 -0
  97. /package/dist/template/.opencode/{plugins → plugin}/compaction.ts +0 -0
  98. /package/dist/template/.opencode/{plugins → plugin}/env-ctx.ts +0 -0
  99. /package/dist/template/.opencode/{plugins → plugin}/lib/notify.ts +0 -0
  100. /package/dist/template/.opencode/{plugins → plugin}/lsp.ts +0 -0
  101. /package/dist/template/.opencode/{plugins → plugin}/memory.ts +0 -0
  102. /package/dist/template/.opencode/{plugins → plugin}/notification.ts.bak +0 -0
  103. /package/dist/template/.opencode/{plugins → plugin}/package.json +0 -0
  104. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/convert-to-openai-compatible-chat-messages.ts +0 -0
  105. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/get-response-metadata.ts +0 -0
  106. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/map-openai-compatible-finish-reason.ts +0 -0
  107. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/openai-compatible-api-types.ts +0 -0
  108. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/openai-compatible-metadata-extractor.ts +0 -0
  109. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/chat/openai-compatible-prepare-tools.ts +0 -0
  110. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/copilot-provider.ts +0 -0
  111. /package/dist/template/.opencode/{plugins → plugin}/sdk/copilot/index.ts +0 -0
  112. /package/dist/template/.opencode/{plugins → plugin}/sessions.ts +0 -0
  113. /package/dist/template/.opencode/{plugins → plugin}/skill-mcp.ts +0 -0
  114. /package/dist/template/.opencode/{plugins → plugin}/truncator.ts +0 -0
  115. /package/dist/template/.opencode/{plugins → plugin}/tsconfig.json +0 -0
  116. /package/dist/template/.opencode/{skills → skill}/accessibility-audit/SKILL.md +0 -0
  117. /package/dist/template/.opencode/{skills → skill}/agent-browser/SKILL.md +0 -0
  118. /package/dist/template/.opencode/{skills → skill}/beads/references/BOUNDARIES.md +0 -0
  119. /package/dist/template/.opencode/{skills → skill}/beads/references/DEPENDENCIES.md +0 -0
  120. /package/dist/template/.opencode/{skills → skill}/beads/references/RESUMABILITY.md +0 -0
  121. /package/dist/template/.opencode/{skills → skill}/beads/references/WORKFLOWS.md +0 -0
  122. /package/dist/template/.opencode/{skills → skill}/brainstorming/SKILL.md +0 -0
  123. /package/dist/template/.opencode/{skills → skill}/chrome-devtools/SKILL.md +0 -0
  124. /package/dist/template/.opencode/{skills → skill}/chrome-devtools/mcp.json +0 -0
  125. /package/dist/template/.opencode/{skills → skill}/cloudflare/SKILL.md +0 -0
  126. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/agents-sdk/README.md +0 -0
  127. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/agents-sdk/api.md +0 -0
  128. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/agents-sdk/configuration.md +0 -0
  129. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/agents-sdk/gotchas.md +0 -0
  130. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/agents-sdk/patterns.md +0 -0
  131. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ai-gateway/README.md +0 -0
  132. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ai-search/README.md +0 -0
  133. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ai-search/api.md +0 -0
  134. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ai-search/configuration.md +0 -0
  135. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ai-search/gotchas.md +0 -0
  136. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ai-search/patterns.md +0 -0
  137. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/analytics-engine/README.md +0 -0
  138. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/analytics-engine/api.md +0 -0
  139. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/analytics-engine/configuration.md +0 -0
  140. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/analytics-engine/gotchas.md +0 -0
  141. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/analytics-engine/patterns.md +0 -0
  142. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api/README.md +0 -0
  143. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api/api.md +0 -0
  144. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api/configuration.md +0 -0
  145. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api/gotchas.md +0 -0
  146. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api/patterns.md +0 -0
  147. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api-shield/README.md +0 -0
  148. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api-shield/api.md +0 -0
  149. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api-shield/configuration.md +0 -0
  150. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api-shield/gotchas.md +0 -0
  151. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/api-shield/patterns.md +0 -0
  152. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/argo-smart-routing/README.md +0 -0
  153. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/argo-smart-routing/api.md +0 -0
  154. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/argo-smart-routing/configuration.md +0 -0
  155. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/argo-smart-routing/gotchas.md +0 -0
  156. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/argo-smart-routing/patterns.md +0 -0
  157. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bindings/README.md +0 -0
  158. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bindings/api.md +0 -0
  159. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bindings/configuration.md +0 -0
  160. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bindings/gotchas.md +0 -0
  161. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bindings/patterns.md +0 -0
  162. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bot-management/README.md +0 -0
  163. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bot-management/api.md +0 -0
  164. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bot-management/configuration.md +0 -0
  165. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bot-management/gotchas.md +0 -0
  166. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/bot-management/patterns.md +0 -0
  167. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/browser-rendering/README.md +0 -0
  168. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/browser-rendering/api.md +0 -0
  169. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/browser-rendering/configuration.md +0 -0
  170. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/browser-rendering/gotchas.md +0 -0
  171. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/browser-rendering/patterns.md +0 -0
  172. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/c3/README.md +0 -0
  173. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cache-reserve/README.md +0 -0
  174. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cache-reserve/api.md +0 -0
  175. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cache-reserve/configuration.md +0 -0
  176. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cache-reserve/gotchas.md +0 -0
  177. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cache-reserve/patterns.md +0 -0
  178. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/containers/README.md +0 -0
  179. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/containers/api.md +0 -0
  180. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/containers/configuration.md +0 -0
  181. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/containers/gotchas.md +0 -0
  182. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/containers/patterns.md +0 -0
  183. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cron-triggers/README.md +0 -0
  184. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cron-triggers/api.md +0 -0
  185. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cron-triggers/configuration.md +0 -0
  186. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cron-triggers/gotchas.md +0 -0
  187. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/cron-triggers/patterns.md +0 -0
  188. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/d1/README.md +0 -0
  189. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/d1/api.md +0 -0
  190. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/d1/configuration.md +0 -0
  191. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/d1/gotchas.md +0 -0
  192. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/d1/patterns.md +0 -0
  193. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ddos/README.md +0 -0
  194. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ddos/api.md +0 -0
  195. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ddos/configuration.md +0 -0
  196. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ddos/gotchas.md +0 -0
  197. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/ddos/patterns.md +0 -0
  198. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/do-storage/README.md +0 -0
  199. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/do-storage/api.md +0 -0
  200. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/do-storage/configuration.md +0 -0
  201. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/do-storage/gotchas.md +0 -0
  202. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/do-storage/patterns.md +0 -0
  203. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/durable-objects/README.md +0 -0
  204. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/durable-objects/api.md +0 -0
  205. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/durable-objects/configuration.md +0 -0
  206. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/durable-objects/gotchas.md +0 -0
  207. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/durable-objects/patterns.md +0 -0
  208. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/email-routing/README.md +0 -0
  209. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/email-routing/api.md +0 -0
  210. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/email-routing/configuration.md +0 -0
  211. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/email-routing/gotchas.md +0 -0
  212. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/email-routing/patterns.md +0 -0
  213. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/email-workers/README.md +0 -0
  214. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/hyperdrive/README.md +0 -0
  215. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/hyperdrive/api.md +0 -0
  216. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/hyperdrive/configuration.md +0 -0
  217. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/hyperdrive/gotchas.md +0 -0
  218. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/hyperdrive/patterns.md +0 -0
  219. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/images/README.md +0 -0
  220. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/images/api.md +0 -0
  221. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/images/configuration.md +0 -0
  222. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/images/gotchas.md +0 -0
  223. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/images/patterns.md +0 -0
  224. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/kv/README.md +0 -0
  225. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/kv/api.md +0 -0
  226. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/kv/configuration.md +0 -0
  227. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/kv/gotchas.md +0 -0
  228. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/kv/patterns.md +0 -0
  229. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/miniflare/README.md +0 -0
  230. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/miniflare/api.md +0 -0
  231. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/miniflare/configuration.md +0 -0
  232. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/miniflare/gotchas.md +0 -0
  233. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/miniflare/patterns.md +0 -0
  234. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/network-interconnect/README.md +0 -0
  235. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/network-interconnect/api.md +0 -0
  236. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/network-interconnect/configuration.md +0 -0
  237. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/network-interconnect/gotchas.md +0 -0
  238. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/network-interconnect/patterns.md +0 -0
  239. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/observability/README.md +0 -0
  240. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/observability/api.md +0 -0
  241. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/observability/configuration.md +0 -0
  242. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/observability/gotchas.md +0 -0
  243. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/observability/patterns.md +0 -0
  244. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages/README.md +0 -0
  245. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages/api.md +0 -0
  246. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages/configuration.md +0 -0
  247. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages/gotchas.md +0 -0
  248. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages/patterns.md +0 -0
  249. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages-functions/README.md +0 -0
  250. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages-functions/api.md +0 -0
  251. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages-functions/configuration.md +0 -0
  252. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages-functions/gotchas.md +0 -0
  253. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pages-functions/patterns.md +0 -0
  254. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pipelines/README.md +0 -0
  255. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pulumi/README.md +0 -0
  256. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pulumi/api.md +0 -0
  257. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pulumi/configuration.md +0 -0
  258. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pulumi/gotchas.md +0 -0
  259. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/pulumi/patterns.md +0 -0
  260. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/queues/README.md +0 -0
  261. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/queues/api.md +0 -0
  262. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/queues/configuration.md +0 -0
  263. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/queues/gotchas.md +0 -0
  264. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/queues/patterns.md +0 -0
  265. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2/README.md +0 -0
  266. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2/api.md +0 -0
  267. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2/configuration.md +0 -0
  268. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2/gotchas.md +0 -0
  269. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2/patterns.md +0 -0
  270. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2-data-catalog/README.md +0 -0
  271. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2-data-catalog/api.md +0 -0
  272. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2-data-catalog/configuration.md +0 -0
  273. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2-data-catalog/gotchas.md +0 -0
  274. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2-data-catalog/patterns.md +0 -0
  275. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/r2-sql/README.md +0 -0
  276. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtime-sfu/README.md +0 -0
  277. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtime-sfu/api.md +0 -0
  278. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtime-sfu/configuration.md +0 -0
  279. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtime-sfu/gotchas.md +0 -0
  280. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtime-sfu/patterns.md +0 -0
  281. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtimekit/README.md +0 -0
  282. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtimekit/api.md +0 -0
  283. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtimekit/configuration.md +0 -0
  284. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtimekit/gotchas.md +0 -0
  285. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/realtimekit/patterns.md +0 -0
  286. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/sandbox/README.md +0 -0
  287. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/sandbox/api.md +0 -0
  288. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/sandbox/configuration.md +0 -0
  289. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/sandbox/gotchas.md +0 -0
  290. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/sandbox/patterns.md +0 -0
  291. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/secrets-store/README.md +0 -0
  292. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/secrets-store/api.md +0 -0
  293. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/secrets-store/configuration.md +0 -0
  294. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/secrets-store/gotchas.md +0 -0
  295. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/secrets-store/patterns.md +0 -0
  296. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/smart-placement/README.md +0 -0
  297. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/smart-placement/api.md +0 -0
  298. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/smart-placement/configuration.md +0 -0
  299. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/smart-placement/gotchas.md +0 -0
  300. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/smart-placement/patterns.md +0 -0
  301. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/snippets/README.md +0 -0
  302. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/snippets/api.md +0 -0
  303. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/snippets/configuration.md +0 -0
  304. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/snippets/gotchas.md +0 -0
  305. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/snippets/patterns.md +0 -0
  306. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/spectrum/README.md +0 -0
  307. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/spectrum/api.md +0 -0
  308. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/spectrum/configuration.md +0 -0
  309. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/spectrum/gotchas.md +0 -0
  310. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/spectrum/patterns.md +0 -0
  311. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/static-assets/README.md +0 -0
  312. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/static-assets/api.md +0 -0
  313. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/static-assets/configuration.md +0 -0
  314. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/static-assets/gotchas.md +0 -0
  315. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/static-assets/patterns.md +0 -0
  316. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/stream/README.md +0 -0
  317. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/stream/api.md +0 -0
  318. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/stream/configuration.md +0 -0
  319. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/stream/gotchas.md +0 -0
  320. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/stream/patterns.md +0 -0
  321. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/tail-workers/README.md +0 -0
  322. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/terraform/README.md +0 -0
  323. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/terraform/api.md +0 -0
  324. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/terraform/configuration.md +0 -0
  325. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/terraform/gotchas.md +0 -0
  326. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/terraform/patterns.md +0 -0
  327. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/tunnel/README.md +0 -0
  328. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/tunnel/api.md +0 -0
  329. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/tunnel/configuration.md +0 -0
  330. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/tunnel/gotchas.md +0 -0
  331. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/tunnel/patterns.md +0 -0
  332. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/turn/README.md +0 -0
  333. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/turnstile/README.md +0 -0
  334. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/turnstile/api.md +0 -0
  335. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/turnstile/configuration.md +0 -0
  336. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/turnstile/gotchas.md +0 -0
  337. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/turnstile/patterns.md +0 -0
  338. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/vectorize/README.md +0 -0
  339. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/waf/README.md +0 -0
  340. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/waf/api.md +0 -0
  341. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/waf/configuration.md +0 -0
  342. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/waf/gotchas.md +0 -0
  343. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/waf/patterns.md +0 -0
  344. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/web-analytics/README.md +0 -0
  345. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/web-analytics/api.md +0 -0
  346. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/web-analytics/configuration.md +0 -0
  347. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/web-analytics/gotchas.md +0 -0
  348. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/web-analytics/patterns.md +0 -0
  349. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workerd/README.md +0 -0
  350. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workerd/api.md +0 -0
  351. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workerd/configuration.md +0 -0
  352. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workerd/gotchas.md +0 -0
  353. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workerd/patterns.md +0 -0
  354. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers/README.md +0 -0
  355. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers/api.md +0 -0
  356. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers/configuration.md +0 -0
  357. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers/gotchas.md +0 -0
  358. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers/patterns.md +0 -0
  359. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-ai/README.md +0 -0
  360. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-for-platforms/README.md +0 -0
  361. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-for-platforms/api.md +0 -0
  362. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-for-platforms/configuration.md +0 -0
  363. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-for-platforms/gotchas.md +0 -0
  364. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-for-platforms/patterns.md +0 -0
  365. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-playground/README.md +0 -0
  366. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-playground/api.md +0 -0
  367. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-playground/configuration.md +0 -0
  368. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-playground/gotchas.md +0 -0
  369. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-playground/patterns.md +0 -0
  370. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workers-vpc/README.md +0 -0
  371. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workflows/README.md +0 -0
  372. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workflows/api.md +0 -0
  373. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workflows/configuration.md +0 -0
  374. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workflows/gotchas.md +0 -0
  375. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/workflows/patterns.md +0 -0
  376. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/wrangler/README.md +0 -0
  377. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/wrangler/api.md +0 -0
  378. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/wrangler/configuration.md +0 -0
  379. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/wrangler/gotchas.md +0 -0
  380. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/wrangler/patterns.md +0 -0
  381. /package/dist/template/.opencode/{skills → skill}/cloudflare/references/zaraz/README.md +0 -0
  382. /package/dist/template/.opencode/{skills → skill}/condition-based-waiting/SKILL.md +0 -0
  383. /package/dist/template/.opencode/{skills → skill}/condition-based-waiting/example.ts +0 -0
  384. /package/dist/template/.opencode/{skills → skill}/context-engineering/SKILL.md +0 -0
  385. /package/dist/template/.opencode/{skills → skill}/deep-research/SKILL.md +0 -0
  386. /package/dist/template/.opencode/{skills → skill}/defense-in-depth/SKILL.md +0 -0
  387. /package/dist/template/.opencode/{skills → skill}/design-system-audit/SKILL.md +0 -0
  388. /package/dist/template/.opencode/{skills → skill}/dispatching-parallel-agents/SKILL.md +0 -0
  389. /package/dist/template/.opencode/{skills → skill}/executing-plans/SKILL.md +0 -0
  390. /package/dist/template/.opencode/{skills → skill}/figma/SKILL.md +0 -0
  391. /package/dist/template/.opencode/{skills → skill}/finishing-a-development-branch/SKILL.md +0 -0
  392. /package/dist/template/.opencode/{skills → skill}/frontend-design/SKILL.md +0 -0
  393. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/animation/motion-advanced.md +0 -0
  394. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/animation/motion-core.md +0 -0
  395. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/canvas/execution.md +0 -0
  396. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/canvas/philosophy.md +0 -0
  397. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/shadcn/accessibility.md +0 -0
  398. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/shadcn/core-components.md +0 -0
  399. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/shadcn/form-components.md +0 -0
  400. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/shadcn/setup.md +0 -0
  401. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/shadcn/theming.md +0 -0
  402. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/tailwind/responsive.md +0 -0
  403. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/tailwind/utilities-layout.md +0 -0
  404. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/tailwind/utilities-styling.md +0 -0
  405. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/tailwind/v4-config.md +0 -0
  406. /package/dist/template/.opencode/{skills → skill}/frontend-design/references/tailwind/v4-features.md +0 -0
  407. /package/dist/template/.opencode/{skills → skill}/gemini-large-context/SKILL.md +0 -0
  408. /package/dist/template/.opencode/{skills → skill}/index-knowledge/SKILL.md +0 -0
  409. /package/dist/template/.opencode/{skills → skill}/memory-system/SKILL.md +0 -0
  410. /package/dist/template/.opencode/{skills → skill}/mockup-to-code/SKILL.md +0 -0
  411. /package/dist/template/.opencode/{skills → skill}/mqdh/SKILL.md +0 -0
  412. /package/dist/template/.opencode/{skills → skill}/notebooklm/SKILL.md +0 -0
  413. /package/dist/template/.opencode/{skills → skill}/notebooklm/references/setup.md +0 -0
  414. /package/dist/template/.opencode/{skills → skill}/opensrc/SKILL.md +0 -0
  415. /package/dist/template/.opencode/{skills → skill}/opensrc/references/architecture.md +0 -0
  416. /package/dist/template/.opencode/{skills → skill}/opensrc/references/cli-usage.md +0 -0
  417. /package/dist/template/.opencode/{skills → skill}/opensrc/references/registry-support.md +0 -0
  418. /package/dist/template/.opencode/{skills → skill}/playwright/SKILL.md +0 -0
  419. /package/dist/template/.opencode/{skills → skill}/playwright/mcp.json +0 -0
  420. /package/dist/template/.opencode/{skills → skill}/playwriter/SKILL.md +0 -0
  421. /package/dist/template/.opencode/{skills → skill}/polar/SKILL.md +0 -0
  422. /package/dist/template/.opencode/{skills → skill}/prd/SKILL.md +0 -0
  423. /package/dist/template/.opencode/{skills → skill}/prd-task/SKILL.md +0 -0
  424. /package/dist/template/.opencode/{skills → skill}/prd-task/references/prd-schema.json +0 -0
  425. /package/dist/template/.opencode/{skills → skill}/ralph/SKILL.md +0 -0
  426. /package/dist/template/.opencode/{skills → skill}/react-best-practices/AGENTS.md +0 -0
  427. /package/dist/template/.opencode/{skills → skill}/react-best-practices/README.md +0 -0
  428. /package/dist/template/.opencode/{skills → skill}/react-best-practices/SKILL.md +0 -0
  429. /package/dist/template/.opencode/{skills → skill}/react-best-practices/metadata.json +0 -0
  430. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/_sections.md +0 -0
  431. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/_template.md +0 -0
  432. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/advanced-event-handler-refs.md +0 -0
  433. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/advanced-use-latest.md +0 -0
  434. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/async-api-routes.md +0 -0
  435. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/async-defer-await.md +0 -0
  436. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/async-dependencies.md +0 -0
  437. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/async-parallel.md +0 -0
  438. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/async-suspense-boundaries.md +0 -0
  439. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/bundle-barrel-imports.md +0 -0
  440. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/bundle-conditional.md +0 -0
  441. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/bundle-defer-third-party.md +0 -0
  442. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/bundle-dynamic-imports.md +0 -0
  443. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/bundle-preload.md +0 -0
  444. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/client-event-listeners.md +0 -0
  445. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/client-localstorage-schema.md +0 -0
  446. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/client-passive-event-listeners.md +0 -0
  447. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/client-swr-dedup.md +0 -0
  448. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-batch-dom-css.md +0 -0
  449. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-cache-function-results.md +0 -0
  450. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-cache-property-access.md +0 -0
  451. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-cache-storage.md +0 -0
  452. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-combine-iterations.md +0 -0
  453. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-early-exit.md +0 -0
  454. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-hoist-regexp.md +0 -0
  455. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-index-maps.md +0 -0
  456. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-length-check-first.md +0 -0
  457. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-min-max-loop.md +0 -0
  458. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-set-map-lookups.md +0 -0
  459. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/js-tosorted-immutable.md +0 -0
  460. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-activity.md +0 -0
  461. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
  462. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-conditional-render.md +0 -0
  463. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-content-visibility.md +0 -0
  464. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-hoist-jsx.md +0 -0
  465. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
  466. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rendering-svg-precision.md +0 -0
  467. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-defer-reads.md +0 -0
  468. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-dependencies.md +0 -0
  469. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-derived-state.md +0 -0
  470. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-functional-setstate.md +0 -0
  471. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-lazy-state-init.md +0 -0
  472. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-memo.md +0 -0
  473. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/rerender-transitions.md +0 -0
  474. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/server-after-nonblocking.md +0 -0
  475. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/server-cache-lru.md +0 -0
  476. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/server-cache-react.md +0 -0
  477. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/server-parallel-fetching.md +0 -0
  478. /package/dist/template/.opencode/{skills → skill}/react-best-practices/rules/server-serialization.md +0 -0
  479. /package/dist/template/.opencode/{skills → skill}/receiving-code-review/SKILL.md +0 -0
  480. /package/dist/template/.opencode/{skills → skill}/requesting-code-review/SKILL.md +0 -0
  481. /package/dist/template/.opencode/{skills → skill}/requesting-code-review/review.md +0 -0
  482. /package/dist/template/.opencode/{skills → skill}/root-cause-tracing/SKILL.md +0 -0
  483. /package/dist/template/.opencode/{skills → skill}/root-cause-tracing/find-polluter.sh +0 -0
  484. /package/dist/template/.opencode/{skills → skill}/session-management/SKILL.md +0 -0
  485. /package/dist/template/.opencode/{skills → skill}/sharing-skills/SKILL.md +0 -0
  486. /package/dist/template/.opencode/{skills → skill}/skill-creator/SKILL.md +0 -0
  487. /package/dist/template/.opencode/{skills → skill}/source-code-research/SKILL.md +0 -0
  488. /package/dist/template/.opencode/{skills → skill}/stitch/SKILL.md +0 -0
  489. /package/dist/template/.opencode/{skills → skill}/stitch/mcp.json +0 -0
  490. /package/dist/template/.opencode/{skills → skill}/subagent-driven-development/SKILL.md +0 -0
  491. /package/dist/template/.opencode/{skills → skill}/supabase/SKILL.md +0 -0
  492. /package/dist/template/.opencode/{skills → skill}/supabase/mcp.json +0 -0
  493. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/AGENTS.md +0 -0
  494. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/SKILL.md +0 -0
  495. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/advanced-full-text-search.md +0 -0
  496. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +0 -0
  497. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/conn-idle-timeout.md +0 -0
  498. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/conn-limits.md +0 -0
  499. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/conn-pooling.md +0 -0
  500. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/conn-prepared-statements.md +0 -0
  501. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/data-batch-inserts.md +0 -0
  502. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/data-n-plus-one.md +0 -0
  503. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/data-pagination.md +0 -0
  504. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/data-upsert.md +0 -0
  505. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/lock-advisory.md +0 -0
  506. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +0 -0
  507. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/lock-short-transactions.md +0 -0
  508. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/lock-skip-locked.md +0 -0
  509. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +0 -0
  510. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +0 -0
  511. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +0 -0
  512. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/query-composite-indexes.md +0 -0
  513. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/query-covering-indexes.md +0 -0
  514. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/query-index-types.md +0 -0
  515. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/query-missing-indexes.md +0 -0
  516. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/query-partial-indexes.md +0 -0
  517. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/schema-data-types.md +0 -0
  518. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +0 -0
  519. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +0 -0
  520. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/schema-partitioning.md +0 -0
  521. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/schema-primary-keys.md +0 -0
  522. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/security-privileges.md +0 -0
  523. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/security-rls-basics.md +0 -0
  524. /package/dist/template/.opencode/{skills → skill}/supabase-postgres-best-practices/rules/security-rls-performance.md +0 -0
  525. /package/dist/template/.opencode/{skills → skill}/systematic-debugging/SKILL.md +0 -0
  526. /package/dist/template/.opencode/{skills → skill}/test-driven-development/SKILL.md +0 -0
  527. /package/dist/template/.opencode/{skills → skill}/testing-anti-patterns/SKILL.md +0 -0
  528. /package/dist/template/.opencode/{skills → skill}/testing-skills-with-subagents/SKILL.md +0 -0
  529. /package/dist/template/.opencode/{skills → skill}/ui-ux-research/SKILL.md +0 -0
  530. /package/dist/template/.opencode/{skills → skill}/using-git-worktrees/SKILL.md +0 -0
  531. /package/dist/template/.opencode/{skills → skill}/using-skills/SKILL.md +0 -0
  532. /package/dist/template/.opencode/{skills → skill}/v0/SKILL.md +0 -0
  533. /package/dist/template/.opencode/{skills → skill}/vercel-deploy-claimable/SKILL.md +0 -0
  534. /package/dist/template/.opencode/{skills → skill}/vercel-deploy-claimable/scripts/deploy.sh +0 -0
  535. /package/dist/template/.opencode/{skills → skill}/verification-before-completion/SKILL.md +0 -0
  536. /package/dist/template/.opencode/{skills → skill}/visual-analysis/SKILL.md +0 -0
  537. /package/dist/template/.opencode/{skills → skill}/web-design-guidelines/SKILL.md +0 -0
  538. /package/dist/template/.opencode/{skills → skill}/writing-plans/SKILL.md +0 -0
  539. /package/dist/template/.opencode/{skills → skill}/writing-skills/SKILL.md +0 -0
  540. /package/dist/template/.opencode/{skills → skill}/writing-skills/anthropic-best-practices.md +0 -0
  541. /package/dist/template/.opencode/{skills → skill}/writing-skills/graphviz-conventions.dot +0 -0
  542. /package/dist/template/.opencode/{skills → skill}/writing-skills/persuasion-principles.md +0 -0
  543. /package/dist/template/.opencode/{tools → tool}/context7-query-docs.ts +0 -0
  544. /package/dist/template/.opencode/{tools → tool}/context7-resolve-library-id.ts +0 -0
  545. /package/dist/template/.opencode/{tools → tool}/grepsearch.ts +0 -0
  546. /package/dist/template/.opencode/{tools → tool}/memory-read.ts +0 -0
  547. /package/dist/template/.opencode/{tools → tool}/memory-search.ts +0 -0
  548. /package/dist/template/.opencode/{tools → tool}/memory-update.ts +0 -0
  549. /package/dist/template/.opencode/{tools → tool}/notebooklm.ts +0 -0
  550. /package/dist/template/.opencode/{tools → tool}/observation.ts +0 -0
  551. /package/dist/template/.opencode/{tools → tool}/oracle.ts +0 -0
@@ -0,0 +1,287 @@
1
+ # React Email
2
+
3
+ Build and send HTML emails using React components. A modern, component-based approach to email development that works across all major email clients by compiling to compatible HTML.
4
+
5
+ ## When to Use
6
+
7
+ - Creating transactional emails (welcome, password reset, order confirmation)
8
+ - Building notification or marketing email templates
9
+ - Need consistent rendering across Gmail, Outlook, Apple Mail, Yahoo
10
+ - Want component reusability and TypeScript support in emails
11
+ - Integrating with email providers like Resend, SendGrid, Postmark
12
+
13
+ **When NOT to use:**
14
+
15
+ - Simple plain-text emails
16
+ - Emails that don't need cross-client compatibility
17
+ - Projects without React/Node.js
18
+
19
+ ## Installation
20
+
21
+ ### New Project
22
+
23
+ ```bash
24
+ npx create-email@latest
25
+ cd react-email-starter
26
+ npm install
27
+ npm run dev
28
+ ```
29
+
30
+ The server runs at localhost:3000 with a preview interface for templates in the `emails` folder.
31
+
32
+ ### Existing Project
33
+
34
+ ```bash
35
+ npm install react-email @react-email/preview-server -D -E
36
+ npm install @react-email/components react react-dom -E
37
+ ```
38
+
39
+ Add script to package.json:
40
+
41
+ ```json
42
+ {
43
+ "scripts": {
44
+ "email:dev": "email dev --dir src/emails"
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## Basic Email Template
50
+
51
+ ```tsx
52
+ import {
53
+ Html,
54
+ Head,
55
+ Preview,
56
+ Body,
57
+ Container,
58
+ Heading,
59
+ Text,
60
+ Button,
61
+ Tailwind,
62
+ pixelBasedPreset,
63
+ } from "@react-email/components";
64
+
65
+ interface WelcomeEmailProps {
66
+ name: string;
67
+ verificationUrl: string;
68
+ }
69
+
70
+ export default function WelcomeEmail({ name, verificationUrl }: WelcomeEmailProps) {
71
+ return (
72
+ <Html lang="en">
73
+ <Tailwind
74
+ config={{
75
+ presets: [pixelBasedPreset],
76
+ theme: {
77
+ extend: {
78
+ colors: {
79
+ brand: "#007bff",
80
+ },
81
+ },
82
+ },
83
+ }}
84
+ >
85
+ <Head />
86
+ <Body className="bg-gray-100 font-sans">
87
+ <Preview>Welcome - Verify your email</Preview>
88
+ <Container className="max-w-xl mx-auto p-5">
89
+ <Heading className="text-2xl text-gray-800">Welcome!</Heading>
90
+ <Text className="text-base text-gray-800">Hi {name}, thanks for signing up!</Text>
91
+ <Button
92
+ href={verificationUrl}
93
+ className="bg-brand text-white px-5 py-3 rounded block text-center no-underline box-border"
94
+ >
95
+ Verify Email
96
+ </Button>
97
+ </Container>
98
+ </Body>
99
+ </Tailwind>
100
+ </Html>
101
+ );
102
+ }
103
+
104
+ WelcomeEmail.PreviewProps = {
105
+ name: "John Doe",
106
+ verificationUrl: "https://example.com/verify/abc123",
107
+ } satisfies WelcomeEmailProps;
108
+
109
+ export { WelcomeEmail };
110
+ ```
111
+
112
+ ## Essential Components
113
+
114
+ **Core Structure:**
115
+
116
+ - `Html` - Root wrapper with `lang` attribute
117
+ - `Head` - Meta elements, styles, fonts
118
+ - `Body` - Main content wrapper
119
+ - `Container` - Centers content (max-width layout)
120
+ - `Section` - Layout sections
121
+ - `Row` & `Column` - Multi-column layouts (table-based)
122
+ - `Tailwind` - Enables Tailwind CSS utility classes
123
+
124
+ **Content:**
125
+
126
+ - `Preview` - Inbox preview text (place after `Body` opening tag)
127
+ - `Heading` - h1-h6 headings
128
+ - `Text` - Paragraphs
129
+ - `Button` - Styled link buttons
130
+ - `Link` - Hyperlinks
131
+ - `Img` - Images (use absolute URLs)
132
+ - `Hr` - Horizontal dividers
133
+
134
+ **Specialized:**
135
+
136
+ - `CodeBlock` - Syntax-highlighted code
137
+ - `CodeInline` - Inline code
138
+ - `Markdown` - Render markdown
139
+ - `Font` - Custom web fonts
140
+
141
+ ## Styling Rules
142
+
143
+ ### Always Do
144
+
145
+ | Rule | Why |
146
+ | ------------------------------ | --------------------------------------------- |
147
+ | Use `pixelBasedPreset` | Email clients don't support `rem` units |
148
+ | Use `Row`/`Column` for layouts | Table-based layouts work everywhere |
149
+ | Specify border type | Always: `border-solid`, `border-dashed`, etc. |
150
+ | Use `box-border` on buttons | Consistent sizing |
151
+ | Use PNG/JPEG images | SVG/WEBP not supported |
152
+ | Use absolute image URLs | Relative paths won't work |
153
+
154
+ ### Never Do
155
+
156
+ | Rule | Why |
157
+ | -------------------------------- | ---------------------------------------- |
158
+ | Use flexbox/grid | Not supported in email clients |
159
+ | Use media queries (`sm:`, `md:`) | Most email clients ignore them |
160
+ | Use theme selectors (`dark:`) | Inconsistent support |
161
+ | Use SVG/WEBP images | Not supported |
162
+ | Write template vars in JSX | Use props: `{props.name}` not `{{name}}` |
163
+
164
+ ## Rendering
165
+
166
+ ### Convert to HTML
167
+
168
+ ```tsx
169
+ import { render } from "@react-email/components";
170
+ import { WelcomeEmail } from "./emails/welcome";
171
+
172
+ const html = await render(
173
+ <WelcomeEmail name="John" verificationUrl="https://example.com/verify" />,
174
+ );
175
+ ```
176
+
177
+ ### Convert to Plain Text
178
+
179
+ ```tsx
180
+ const text = await render(
181
+ <WelcomeEmail name="John" verificationUrl="https://example.com/verify" />,
182
+ { plainText: true },
183
+ );
184
+ ```
185
+
186
+ ## Sending with Resend
187
+
188
+ ```tsx
189
+ import { Resend } from "resend";
190
+ import { WelcomeEmail } from "./emails/welcome";
191
+
192
+ const resend = new Resend(process.env.RESEND_API_KEY);
193
+
194
+ const { data, error } = await resend.emails.send({
195
+ from: "Acme <onboarding@resend.dev>",
196
+ to: ["user@example.com"],
197
+ subject: "Welcome to Acme",
198
+ react: <WelcomeEmail name="John" verificationUrl="https://example.com/verify" />,
199
+ });
200
+
201
+ if (error) {
202
+ console.error("Failed to send:", error);
203
+ }
204
+ ```
205
+
206
+ Resend accepts React components directly. It automatically generates a plain-text version if not provided.
207
+
208
+ ## Common Patterns
209
+
210
+ ### Responsive Container
211
+
212
+ ```tsx
213
+ <Container className="max-w-xl mx-auto p-5">
214
+ {/* Content stays centered and readable on all devices */}
215
+ </Container>
216
+ ```
217
+
218
+ ### Two-Column Layout
219
+
220
+ ```tsx
221
+ <Row>
222
+ <Column className="w-1/2">
223
+ <Text>Left content</Text>
224
+ </Column>
225
+ <Column className="w-1/2">
226
+ <Text>Right content</Text>
227
+ </Column>
228
+ </Row>
229
+ ```
230
+
231
+ **Note:** Columns won't stack on mobile. Design with this in mind.
232
+
233
+ ### CTA Button
234
+
235
+ ```tsx
236
+ <Button
237
+ href="https://example.com"
238
+ className="bg-blue-600 text-white px-6 py-3 rounded block text-center no-underline box-border"
239
+ >
240
+ Click Here
241
+ </Button>
242
+ ```
243
+
244
+ ### Footer with Links
245
+
246
+ ```tsx
247
+ <Section className="text-center text-gray-500 text-sm">
248
+ <Text>
249
+ <Link href="https://example.com/unsubscribe" className="text-gray-500 underline">
250
+ Unsubscribe
251
+ </Link>
252
+ {" | "}
253
+ <Link href="https://example.com/preferences" className="text-gray-500 underline">
254
+ Preferences
255
+ </Link>
256
+ </Text>
257
+ <Text>123 Main St, City, State 12345</Text>
258
+ </Section>
259
+ ```
260
+
261
+ ## Best Practices
262
+
263
+ 1. **Test across clients** - Gmail, Outlook, Apple Mail, Yahoo
264
+ 2. **Keep responsive** - Max-width ~600px
265
+ 3. **Use absolute image URLs** - Host on reliable CDN
266
+ 4. **Provide plain text version** - Required for accessibility
267
+ 5. **Add TypeScript types** - Define interfaces for all props
268
+ 6. **Include PreviewProps** - For development testing
269
+ 7. **Keep under 102KB** - Gmail clips larger emails
270
+
271
+ ## Common Mistakes
272
+
273
+ | Mistake | Fix |
274
+ | --------------------------------- | ---------------------------------------- |
275
+ | Using flexbox/grid | Use `Row` and `Column` components |
276
+ | Using `rem` units | Use `pixelBasedPreset` with Tailwind |
277
+ | Using SVG images | Use PNG or JPG instead |
278
+ | Using media queries | Design mobile-first with stacked layouts |
279
+ | Template vars in JSX (`{{name}}`) | Use props: `{props.name}` |
280
+ | Missing border type | Always specify: `border-solid`, etc. |
281
+ | Emails over 102KB | Gmail clips - reduce size |
282
+
283
+ ## Resources
284
+
285
+ - [React Email Documentation](https://react.email/docs)
286
+ - [React Email GitHub](https://github.com/resend/react-email)
287
+ - [Email Client CSS Support](https://www.caniemail.com)
@@ -0,0 +1,248 @@
1
+ # Receive Emails with Resend
2
+
3
+ ## Overview
4
+
5
+ Resend processes incoming emails for your domain and sends webhook events to your endpoint. **Webhooks contain metadata only** - you must call separate APIs to retrieve email body and attachments.
6
+
7
+ ## Quick Start
8
+
9
+ 1. **Configure receiving domain** - Use Resend's `.resend.app` domain or add MX record for custom domain
10
+ 2. **Set up webhook** - Subscribe to `email.received` event
11
+ 3. **Retrieve content** - Call Receiving API for body, Attachments API for files
12
+
13
+ ## Domain Setup
14
+
15
+ ### Option 1: Resend-Managed Domain (Fastest)
16
+
17
+ Use your auto-generated address: `<anything>@<your-id>.resend.app`
18
+
19
+ No DNS configuration needed. Find your address in Dashboard -> Emails -> Receiving -> "Receiving address".
20
+
21
+ ### Option 2: Custom Domain
22
+
23
+ Add MX record to receive at `<anything>@yourdomain.com`.
24
+
25
+ | Setting | Value |
26
+ | ------------ | ---------------------------- |
27
+ | **Type** | MX |
28
+ | **Host** | Your domain or subdomain |
29
+ | **Value** | Provided in Resend dashboard |
30
+ | **Priority** | 10 (lowest number wins) |
31
+
32
+ **Critical:** Your MX record must have the lowest priority value, or emails won't route to Resend.
33
+
34
+ ### Subdomain Recommendation
35
+
36
+ If you already have MX records (e.g., Google Workspace, Microsoft 365):
37
+
38
+ | Approach | Result |
39
+ | ------------------------------- | ------------------------------------------------------------- |
40
+ | **Use subdomain** (recommended) | `support.acme.com` -> Resend, `acme.com` -> existing provider |
41
+ | **Use root domain** | All email routes to Resend (breaks existing email) |
42
+
43
+ ```dns
44
+ # Receive at support.acme.com without affecting acme.com
45
+ support.acme.com. MX 10 <resend-mx-value>
46
+ ```
47
+
48
+ ## Webhook Setup
49
+
50
+ ### Subscribe to `email.received`
51
+
52
+ Dashboard -> Webhooks -> Add Webhook -> Select `email.received`
53
+
54
+ For local development, use tunneling:
55
+
56
+ ```bash
57
+ ngrok http 3000
58
+ # Use https://abc123.ngrok.io/api/webhook as endpoint
59
+ ```
60
+
61
+ ### Webhook Payload Structure
62
+
63
+ **Important:** Payload contains metadata only, not email body or attachments.
64
+
65
+ ```json
66
+ {
67
+ "type": "email.received",
68
+ "created_at": "2024-02-22T23:41:12.126Z",
69
+ "data": {
70
+ "email_id": "a1b2c3d4-...",
71
+ "from": "sender@example.com",
72
+ "to": ["support@acme.com"],
73
+ "cc": [],
74
+ "bcc": [],
75
+ "subject": "Question about my order",
76
+ "attachments": [
77
+ {
78
+ "id": "att_abc123",
79
+ "filename": "receipt.pdf",
80
+ "content_type": "application/pdf"
81
+ }
82
+ ]
83
+ }
84
+ }
85
+ ```
86
+
87
+ ### Verify Webhook Signatures
88
+
89
+ Always verify signatures to prevent spoofed events:
90
+
91
+ ```typescript
92
+ import { Resend } from "resend";
93
+
94
+ const resend = new Resend(process.env.RESEND_API_KEY);
95
+
96
+ export async function POST(req: Request) {
97
+ const payload = await req.text();
98
+
99
+ const event = resend.webhooks.verify({
100
+ payload,
101
+ headers: {
102
+ "svix-id": req.headers.get("svix-id"),
103
+ "svix-timestamp": req.headers.get("svix-timestamp"),
104
+ "svix-signature": req.headers.get("svix-signature"),
105
+ },
106
+ secret: process.env.RESEND_WEBHOOK_SECRET,
107
+ });
108
+
109
+ if (event.type === "email.received") {
110
+ // Process the email
111
+ }
112
+
113
+ return new Response("OK", { status: 200 });
114
+ }
115
+ ```
116
+
117
+ ## Retrieving Email Content
118
+
119
+ Webhooks exclude email body. Call the Receiving API:
120
+
121
+ ```typescript
122
+ if (event.type === "email.received") {
123
+ const { data: email } = await resend.emails.receiving.get(event.data.email_id);
124
+
125
+ console.log(email.html); // HTML body
126
+ console.log(email.text); // Plain text body
127
+ console.log(email.headers); // Email headers
128
+ }
129
+ ```
130
+
131
+ **Why this design?** Serverless environments have request body size limits. Separating content retrieval supports large emails and attachments.
132
+
133
+ ## Handling Attachments
134
+
135
+ ### Get Attachment Metadata and Download URLs
136
+
137
+ ```typescript
138
+ const { data: attachments } = await resend.emails.receiving.attachments.list({
139
+ emailId: event.data.email_id,
140
+ });
141
+
142
+ for (const attachment of attachments) {
143
+ console.log(attachment.filename);
144
+ console.log(attachment.download_url); // Valid for 1 hour
145
+ console.log(attachment.expires_at);
146
+ }
147
+ ```
148
+
149
+ ### Download Attachment Content
150
+
151
+ ```typescript
152
+ const response = await fetch(attachment.download_url);
153
+ const buffer = await response.arrayBuffer();
154
+
155
+ // Save to storage, process, etc.
156
+ await saveToStorage(attachment.filename, buffer);
157
+ ```
158
+
159
+ **Important:** `download_url` expires after 1 hour. Call the API again for a fresh URL if needed.
160
+
161
+ ## Forwarding Emails
162
+
163
+ Complete workflow to receive and forward an email with attachments:
164
+
165
+ ```typescript
166
+ import { Resend } from "resend";
167
+
168
+ const resend = new Resend(process.env.RESEND_API_KEY);
169
+
170
+ export async function POST(req: Request) {
171
+ const payload = await req.text();
172
+ const event = resend.webhooks.verify({
173
+ /* ... */
174
+ });
175
+
176
+ if (event.type === "email.received") {
177
+ // 1. Get email content
178
+ const { data: email } = await resend.emails.receiving.get(event.data.email_id);
179
+
180
+ // 2. Get attachments (if any)
181
+ const { data: attachmentList } = await resend.emails.receiving.attachments.list({
182
+ emailId: event.data.email_id,
183
+ });
184
+
185
+ // 3. Download and encode attachments
186
+ const attachments = await Promise.all(
187
+ attachmentList.map(async (att) => {
188
+ const res = await fetch(att.download_url);
189
+ const buffer = Buffer.from(await res.arrayBuffer());
190
+ return {
191
+ filename: att.filename,
192
+ content: buffer.toString("base64"),
193
+ };
194
+ }),
195
+ );
196
+
197
+ // 4. Forward the email
198
+ await resend.emails.send({
199
+ from: "Support System <system@acme.com>",
200
+ to: ["team@acme.com"],
201
+ subject: `Fwd: ${email.subject}`,
202
+ html: email.html,
203
+ text: email.text,
204
+ attachments,
205
+ });
206
+ }
207
+
208
+ return new Response("OK", { status: 200 });
209
+ }
210
+ ```
211
+
212
+ ## Routing by Recipient
213
+
214
+ All emails to your domain arrive at the same webhook. Route based on the `to` field:
215
+
216
+ ```typescript
217
+ if (event.type === "email.received") {
218
+ const recipient = event.data.to[0];
219
+
220
+ if (recipient.includes("support@")) {
221
+ await handleSupportEmail(event.data);
222
+ } else if (recipient.includes("billing@")) {
223
+ await handleBillingEmail(event.data);
224
+ } else {
225
+ await handleUnknownEmail(event.data);
226
+ }
227
+ }
228
+ ```
229
+
230
+ ## Common Mistakes
231
+
232
+ | Mistake | Fix |
233
+ | -------------------------------------------- | ---------------------------------------------------------------- |
234
+ | Expecting body in webhook payload | Webhook has metadata only - call `resend.emails.receiving.get()` |
235
+ | MX record not lowest priority | Ensure Resend's MX has lowest number (highest priority) |
236
+ | Adding MX to root domain with existing email | Use subdomain to avoid breaking existing email service |
237
+ | Using expired download_url | URLs expire after 1 hour - call attachments API again |
238
+ | Not verifying webhook signatures | Always verify - attackers can send fake events |
239
+ | Forgetting to return 200 OK | Resend retries on non-200 responses |
240
+
241
+ ## Storage Note
242
+
243
+ Resend stores received emails even if:
244
+
245
+ - Webhook isn't configured yet
246
+ - Webhook endpoint is down
247
+
248
+ View all received emails in Dashboard -> Emails -> Receiving tab.