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.
- package/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-6LPTBIB6.js → chunk-MWNLAEHR.js} +309 -4332
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +6 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# Workerd Patterns
|
|
2
|
+
|
|
3
|
+
## Multi-Service Architecture
|
|
4
|
+
|
|
5
|
+
```capnp
|
|
6
|
+
const config :Workerd.Config = (
|
|
7
|
+
services = [
|
|
8
|
+
(name = "frontend", worker = (
|
|
9
|
+
modules = [(name = "index.js", esModule = embed "frontend/index.js")],
|
|
10
|
+
compatibilityDate = "2024-01-15",
|
|
11
|
+
bindings = [(name = "API", service = "api")]
|
|
12
|
+
)),
|
|
13
|
+
(name = "api", worker = (
|
|
14
|
+
modules = [(name = "index.js", esModule = embed "api/index.js")],
|
|
15
|
+
compatibilityDate = "2024-01-15",
|
|
16
|
+
bindings = [(name = "DB", service = "postgres"), (name = "CACHE", kvNamespace = "kv")]
|
|
17
|
+
)),
|
|
18
|
+
(name = "postgres", external = (address = "db.internal:5432", http = ())),
|
|
19
|
+
(name = "kv", disk = (path = "/var/kv", writable = true))
|
|
20
|
+
],
|
|
21
|
+
sockets = [(name = "http", address = "*:8080", http = (), service = "frontend")]
|
|
22
|
+
);
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Durable Objects
|
|
26
|
+
|
|
27
|
+
```capnp
|
|
28
|
+
const worker :Workerd.Worker = (
|
|
29
|
+
modules = [(name = "index.js", esModule = embed "index.js"), (name = "room.js", esModule = embed "room.js")],
|
|
30
|
+
compatibilityDate = "2024-01-15",
|
|
31
|
+
bindings = [(name = "ROOMS", durableObjectNamespace = "Room")],
|
|
32
|
+
durableObjectNamespaces = [(className = "Room", uniqueKey = "v1")],
|
|
33
|
+
durableObjectStorage = (localDisk = "/var/do")
|
|
34
|
+
);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Dev vs Prod Configs
|
|
38
|
+
|
|
39
|
+
```capnp
|
|
40
|
+
# Use parameter bindings for env-specific config
|
|
41
|
+
const baseWorker :Workerd.Worker = (
|
|
42
|
+
modules = [(name = "index.js", esModule = embed "src/index.js")],
|
|
43
|
+
compatibilityDate = "2024-01-15",
|
|
44
|
+
bindings = [(name = "API_URL", parameter = (type = text))]
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
const prodWorker :Workerd.Worker = (
|
|
48
|
+
inherit = "base-service",
|
|
49
|
+
bindings = [(name = "API_URL", text = "https://api.prod.com")]
|
|
50
|
+
);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## HTTP Reverse Proxy
|
|
54
|
+
|
|
55
|
+
```capnp
|
|
56
|
+
services = [
|
|
57
|
+
(name = "proxy", worker = (serviceWorkerScript = embed "proxy.js", compatibilityDate = "2024-01-15", bindings = [(name = "BACKEND", service = "backend")])),
|
|
58
|
+
(name = "backend", external = (address = "internal:8080", http = ()))
|
|
59
|
+
]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Local Development
|
|
63
|
+
|
|
64
|
+
**Recommended:** Use Wrangler
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
wrangler dev # Uses workerd internally
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Direct workerd:**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
workerd serve config.capnp --socket-addr http=*:3000 --verbose
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Environment variables:**
|
|
77
|
+
|
|
78
|
+
```capnp
|
|
79
|
+
bindings = [(name = "DATABASE_URL", fromEnvironment = "DATABASE_URL")]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Testing
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
workerd test config.capnp
|
|
86
|
+
workerd test config.capnp --test-only=test.js
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Test files must be included in `modules = [...]` config.
|
|
90
|
+
|
|
91
|
+
## Production Deployment
|
|
92
|
+
|
|
93
|
+
### Compiled Binary (Recommended)
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
workerd compile config.capnp myConfig -o production-server
|
|
97
|
+
./production-server
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Docker
|
|
101
|
+
|
|
102
|
+
```dockerfile
|
|
103
|
+
FROM debian:bookworm-slim
|
|
104
|
+
RUN apt-get update && apt-get install -y ca-certificates
|
|
105
|
+
COPY workerd /usr/local/bin/
|
|
106
|
+
COPY config.capnp /etc/workerd/
|
|
107
|
+
COPY src/ /etc/workerd/src/
|
|
108
|
+
EXPOSE 8080
|
|
109
|
+
CMD ["workerd", "serve", "/etc/workerd/config.capnp"]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Systemd
|
|
113
|
+
|
|
114
|
+
```ini
|
|
115
|
+
# /etc/systemd/system/workerd.service
|
|
116
|
+
[Service]
|
|
117
|
+
ExecStart=/usr/bin/workerd serve /etc/workerd/config.capnp --socket-fd http=3
|
|
118
|
+
Restart=always
|
|
119
|
+
User=nobody
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
See systemd socket activation docs for complete setup.
|
|
123
|
+
|
|
124
|
+
## Framework Integration
|
|
125
|
+
|
|
126
|
+
### Hono
|
|
127
|
+
|
|
128
|
+
```javascript
|
|
129
|
+
import { Hono } from 'hono'
|
|
130
|
+
|
|
131
|
+
const app = new Hono()
|
|
132
|
+
|
|
133
|
+
app.get('/', (c) => c.text('Hello Hono!'))
|
|
134
|
+
app.get('/api/:id', async (c) => {
|
|
135
|
+
const id = c.req.param('id')
|
|
136
|
+
const data = await c.env.KV.get(id)
|
|
137
|
+
return c.json({ id, data })
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
export default app
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### itty-router
|
|
144
|
+
|
|
145
|
+
```javascript
|
|
146
|
+
import { Router } from 'itty-router'
|
|
147
|
+
|
|
148
|
+
const router = Router()
|
|
149
|
+
|
|
150
|
+
router.get('/', () => new Response('Hello itty!'))
|
|
151
|
+
router.get('/api/:id', async (request, env) => {
|
|
152
|
+
const { id } = request.params
|
|
153
|
+
const data = await env.KV.get(id)
|
|
154
|
+
return Response.json({ id, data })
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
export default {
|
|
158
|
+
fetch: (request, env, ctx) => router.handle(request, env, ctx),
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Best Practices
|
|
163
|
+
|
|
164
|
+
1. **Use ES modules** over service worker syntax
|
|
165
|
+
2. **Explicit bindings** - no global namespace assumptions
|
|
166
|
+
3. **Type safety** - define `Env` interfaces (use `wrangler types`)
|
|
167
|
+
4. **Service isolation** - split concerns into multiple services
|
|
168
|
+
5. **Pin compat date** in production after testing
|
|
169
|
+
6. **Use ctx.waitUntil()** for background tasks
|
|
170
|
+
7. **Handle errors gracefully** with try/catch
|
|
171
|
+
8. **Configure resource limits** on caches/storage
|
|
172
|
+
|
|
173
|
+
## Common Patterns
|
|
174
|
+
|
|
175
|
+
### Error Handling
|
|
176
|
+
|
|
177
|
+
```javascript
|
|
178
|
+
export default {
|
|
179
|
+
async fetch(request, env, ctx) {
|
|
180
|
+
try {
|
|
181
|
+
return await handleRequest(request, env)
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.error('Request failed', error)
|
|
184
|
+
return new Response('Internal Error', { status: 500 })
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Background Tasks
|
|
191
|
+
|
|
192
|
+
```javascript
|
|
193
|
+
export default {
|
|
194
|
+
async fetch(request, env, ctx) {
|
|
195
|
+
const response = new Response('OK')
|
|
196
|
+
|
|
197
|
+
// Fire-and-forget background work
|
|
198
|
+
ctx.waitUntil(env.ANALYTICS.put(request.url, Date.now()))
|
|
199
|
+
|
|
200
|
+
return response
|
|
201
|
+
},
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
See [configuration.md](./configuration.md) for config syntax, [api.md](./api.md) for runtime APIs, [gotchas.md](./gotchas.md) for common errors.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Cloudflare Workers
|
|
2
|
+
|
|
3
|
+
Expert guidance for building, deploying, and optimizing Cloudflare Workers applications.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare Workers run on V8 isolates (NOT containers/VMs):
|
|
8
|
+
|
|
9
|
+
- Extremely fast cold starts (< 1ms)
|
|
10
|
+
- Global deployment across 300+ locations
|
|
11
|
+
- Web standards compliant (fetch, URL, Headers, Request, Response)
|
|
12
|
+
- Support JS/TS, Python, Rust, and WebAssembly
|
|
13
|
+
|
|
14
|
+
**Key principle**: Workers use web platform APIs wherever possible for portability.
|
|
15
|
+
|
|
16
|
+
## Module Worker Pattern (Recommended)
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
export default {
|
|
20
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
21
|
+
return new Response('Hello World!')
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Handler parameters**:
|
|
27
|
+
|
|
28
|
+
- `request`: Incoming HTTP request (standard Request object)
|
|
29
|
+
- `env`: Environment bindings (KV, D1, R2, secrets, vars)
|
|
30
|
+
- `ctx`: Execution context (`waitUntil`, `passThroughOnException`)
|
|
31
|
+
|
|
32
|
+
## Essential Commands
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx wrangler dev # Local dev
|
|
36
|
+
npx wrangler dev --remote # Remote dev (actual resources)
|
|
37
|
+
npx wrangler deploy # Production
|
|
38
|
+
npx wrangler deploy --env staging # Specific environment
|
|
39
|
+
npx wrangler tail # Stream logs
|
|
40
|
+
npx wrangler secret put API_KEY # Set secret
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## When to Use Workers
|
|
44
|
+
|
|
45
|
+
- API endpoints at the edge
|
|
46
|
+
- Request/response transformation
|
|
47
|
+
- Authentication/authorization layers
|
|
48
|
+
- Static asset optimization
|
|
49
|
+
- A/B testing and feature flags
|
|
50
|
+
- Rate limiting and security
|
|
51
|
+
- Proxy/routing logic
|
|
52
|
+
- WebSocket applications
|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm create cloudflare@latest my-worker -- --type hello-world
|
|
58
|
+
cd my-worker
|
|
59
|
+
npx wrangler dev
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Handler Signatures
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
// HTTP requests
|
|
66
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response>
|
|
67
|
+
|
|
68
|
+
// Cron triggers
|
|
69
|
+
async scheduled(event: ScheduledEvent, env: Env, ctx: ExecutionContext): Promise<void>
|
|
70
|
+
|
|
71
|
+
// Queue consumer
|
|
72
|
+
async queue(batch: MessageBatch, env: Env, ctx: ExecutionContext): Promise<void>
|
|
73
|
+
|
|
74
|
+
// Tail consumer
|
|
75
|
+
async tail(events: TraceItem[], env: Env, ctx: ExecutionContext): Promise<void>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Resources
|
|
79
|
+
|
|
80
|
+
**Docs**: https://developers.cloudflare.com/workers/
|
|
81
|
+
**Examples**: https://developers.cloudflare.com/workers/examples/
|
|
82
|
+
**Runtime APIs**: https://developers.cloudflare.com/workers/runtime-apis/
|
|
83
|
+
|
|
84
|
+
## In This Reference
|
|
85
|
+
|
|
86
|
+
- [Configuration](./configuration.md) - wrangler.jsonc setup, bindings, environments
|
|
87
|
+
- [API](./api.md) - Runtime APIs, bindings, execution context
|
|
88
|
+
- [Patterns](./patterns.md) - Common workflows, testing, optimization
|
|
89
|
+
- [Frameworks](./frameworks.md) - Hono, routing, validation
|
|
90
|
+
- [Gotchas](./gotchas.md) - Common issues, limits, troubleshooting
|
|
91
|
+
|
|
92
|
+
## Reading Order
|
|
93
|
+
|
|
94
|
+
| Task | Start With | Then Read |
|
|
95
|
+
| ----------------------- | ----------------------------------- | --------------------------- |
|
|
96
|
+
| First Worker | README → Configuration → API | Patterns |
|
|
97
|
+
| Add framework | Frameworks | Configuration (bindings) |
|
|
98
|
+
| Add storage/bindings | Configuration → API (binding usage) | See Also links |
|
|
99
|
+
| Debug issues | Gotchas | API (specific binding docs) |
|
|
100
|
+
| Production optimization | Patterns | API (caching, streaming) |
|
|
101
|
+
| Type safety | Configuration (TypeScript) | Frameworks (Hono typing) |
|
|
102
|
+
|
|
103
|
+
## See Also
|
|
104
|
+
|
|
105
|
+
- [KV](../kv/README.md) - Key-value storage
|
|
106
|
+
- [D1](../d1/README.md) - SQL database
|
|
107
|
+
- [R2](../r2/README.md) - Object storage
|
|
108
|
+
- [Durable Objects](../durable-objects/README.md) - Stateful coordination
|
|
109
|
+
- [Queues](../queues/README.md) - Message queues
|
|
110
|
+
- [Wrangler](../wrangler/README.md) - CLI tool reference
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Workers Runtime APIs
|
|
2
|
+
|
|
3
|
+
## Fetch Handler
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export default {
|
|
7
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
8
|
+
const url = new URL(request.url)
|
|
9
|
+
if (request.method === 'POST' && url.pathname === '/api') {
|
|
10
|
+
const body = await request.json()
|
|
11
|
+
return new Response(JSON.stringify({ id: 1 }), {
|
|
12
|
+
headers: { 'Content-Type': 'application/json' },
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
return fetch(request) // Subrequest to origin
|
|
16
|
+
},
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Execution Context
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
ctx.waitUntil(logAnalytics(request)) // Background work, don't block response
|
|
24
|
+
ctx.passThroughOnException() // Failover to origin on error
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Never** `await` background operations - use `ctx.waitUntil()`.
|
|
28
|
+
|
|
29
|
+
## Bindings
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
// KV
|
|
33
|
+
await env.MY_KV.get('key')
|
|
34
|
+
await env.MY_KV.put('key', 'value', { expirationTtl: 3600 })
|
|
35
|
+
|
|
36
|
+
// R2
|
|
37
|
+
const obj = await env.MY_BUCKET.get('file.txt')
|
|
38
|
+
await env.MY_BUCKET.put('file.txt', 'content')
|
|
39
|
+
|
|
40
|
+
// D1
|
|
41
|
+
const result = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(1).first()
|
|
42
|
+
|
|
43
|
+
// D1 Sessions (2024+) - read-after-write consistency
|
|
44
|
+
const session = env.DB.withSession()
|
|
45
|
+
await session.prepare('INSERT INTO users (name) VALUES (?)').bind('Alice').run()
|
|
46
|
+
const user = await session.prepare('SELECT * FROM users WHERE name = ?').bind('Alice').first() // Guaranteed fresh
|
|
47
|
+
|
|
48
|
+
// Queues
|
|
49
|
+
await env.MY_QUEUE.send({ timestamp: Date.now() })
|
|
50
|
+
|
|
51
|
+
// Secrets/vars
|
|
52
|
+
const key = env.API_KEY
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Cache API
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
const cache = caches.default
|
|
59
|
+
let response = await cache.match(request)
|
|
60
|
+
|
|
61
|
+
if (!response) {
|
|
62
|
+
response = await fetch(request)
|
|
63
|
+
response = new Response(response.body, response)
|
|
64
|
+
response.headers.set('Cache-Control', 'max-age=3600')
|
|
65
|
+
ctx.waitUntil(cache.put(request, response.clone())) // Clone before caching
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## HTMLRewriter
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
return new HTMLRewriter()
|
|
73
|
+
.on('a[href]', {
|
|
74
|
+
element(el) {
|
|
75
|
+
const href = el.getAttribute('href')
|
|
76
|
+
if (href?.startsWith('http://')) {
|
|
77
|
+
el.setAttribute('href', href.replace('http://', 'https://'))
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
})
|
|
81
|
+
.transform(response)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Use cases**: A/B testing, analytics injection, link rewriting
|
|
85
|
+
|
|
86
|
+
## WebSockets
|
|
87
|
+
|
|
88
|
+
### Standard WebSocket
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const [client, server] = Object.values(new WebSocketPair())
|
|
92
|
+
|
|
93
|
+
server.accept()
|
|
94
|
+
server.addEventListener('message', (event) => {
|
|
95
|
+
server.send(`Echo: ${event.data}`)
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
return new Response(null, { status: 101, webSocket: client })
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### WebSocket Hibernation (Recommended for idle connections)
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// In Durable Object
|
|
105
|
+
export class WebSocketDO {
|
|
106
|
+
async webSocketMessage(ws: WebSocket, message: string) {
|
|
107
|
+
ws.send(`Echo: ${message}`)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
async webSocketClose(ws: WebSocket, code: number, reason: string) {
|
|
111
|
+
// Cleanup on close
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async webSocketError(ws: WebSocket, error: Error) {
|
|
115
|
+
console.error('WebSocket error:', error)
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Hibernation automatically suspends inactive connections (no CPU cost), wakes on events
|
|
121
|
+
|
|
122
|
+
## Durable Objects
|
|
123
|
+
|
|
124
|
+
### RPC Pattern (Recommended 2024+)
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
export class Counter {
|
|
128
|
+
private value = 0
|
|
129
|
+
|
|
130
|
+
constructor(private state: DurableObjectState) {
|
|
131
|
+
state.blockConcurrencyWhile(async () => {
|
|
132
|
+
this.value = (await state.storage.get('value')) || 0
|
|
133
|
+
})
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Export methods directly - called via RPC (type-safe, zero serialization)
|
|
137
|
+
async increment(): Promise<number> {
|
|
138
|
+
this.value++
|
|
139
|
+
await this.state.storage.put('value', this.value)
|
|
140
|
+
return this.value
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async getValue(): Promise<number> {
|
|
144
|
+
return this.value
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Worker usage:
|
|
149
|
+
const stub = env.COUNTER.get(env.COUNTER.idFromName('global'))
|
|
150
|
+
const count = await stub.increment() // Direct method call, full type safety
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Legacy Fetch Pattern (Pre-2024)
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
async fetch(request: Request): Promise<Response> {
|
|
157
|
+
const url = new URL(request.url);
|
|
158
|
+
if (url.pathname === '/increment') {
|
|
159
|
+
await this.state.storage.put('value', ++this.value);
|
|
160
|
+
}
|
|
161
|
+
return new Response(String(this.value));
|
|
162
|
+
}
|
|
163
|
+
// Usage: await stub.fetch('http://x/increment')
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**When to use DOs**: Real-time collaboration, rate limiting, strongly consistent state
|
|
167
|
+
|
|
168
|
+
## Other Handlers
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// Cron: async scheduled(event, env, ctx) { ctx.waitUntil(doCleanup(env)); }
|
|
172
|
+
// Queue: async queue(batch) { for (const msg of batch.messages) { await process(msg.body); msg.ack(); } }
|
|
173
|
+
// Tail: async tail(events, env) { for (const e of events) if (e.outcome === 'exception') await log(e); }
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Service Bindings
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// Worker-to-worker RPC (zero latency, no internet round-trip)
|
|
180
|
+
return env.SERVICE_B.fetch(request)
|
|
181
|
+
|
|
182
|
+
// With RPC (2024+) - same as Durable Objects RPC
|
|
183
|
+
export class ServiceWorker {
|
|
184
|
+
async getData() {
|
|
185
|
+
return { data: 'value' }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Usage: const data = await env.SERVICE_B.getData();
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
**Benefits**: Type-safe method calls, no HTTP overhead, share code between Workers
|
|
192
|
+
|
|
193
|
+
## See Also
|
|
194
|
+
|
|
195
|
+
- [Configuration](./configuration.md) - Binding setup
|
|
196
|
+
- [Patterns](./patterns.md) - Common workflows
|
|
197
|
+
- [KV](../kv/README.md), [D1](../d1/README.md), [R2](../r2/README.md), [Durable Objects](../durable-objects/README.md), [Queues](../queues/README.md)
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Workers Configuration
|
|
2
|
+
|
|
3
|
+
## wrangler.jsonc (Recommended)
|
|
4
|
+
|
|
5
|
+
```jsonc
|
|
6
|
+
{
|
|
7
|
+
"$schema": "./node_modules/wrangler/config-schema.json",
|
|
8
|
+
"name": "my-worker",
|
|
9
|
+
"main": "src/index.ts",
|
|
10
|
+
"compatibility_date": "2025-01-01", // Use current date for new projects
|
|
11
|
+
|
|
12
|
+
// Bindings (non-inheritable)
|
|
13
|
+
"vars": { "ENVIRONMENT": "production" },
|
|
14
|
+
"kv_namespaces": [{ "binding": "MY_KV", "id": "abc123" }],
|
|
15
|
+
"r2_buckets": [{ "binding": "MY_BUCKET", "bucket_name": "my-bucket" }],
|
|
16
|
+
"d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "xyz789" }],
|
|
17
|
+
|
|
18
|
+
// Environments
|
|
19
|
+
"env": {
|
|
20
|
+
"staging": {
|
|
21
|
+
"vars": { "ENVIRONMENT": "staging" },
|
|
22
|
+
"kv_namespaces": [{ "binding": "MY_KV", "id": "staging-id" }],
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Configuration Rules
|
|
29
|
+
|
|
30
|
+
**Inheritable**: `name`, `main`, `compatibility_date`, `routes`, `workers_dev`
|
|
31
|
+
**Non-inheritable**: All bindings (`vars`, `kv_namespaces`, `r2_buckets`, etc.)
|
|
32
|
+
**Top-level only**: `migrations`, `keep_vars`, `send_metrics`
|
|
33
|
+
|
|
34
|
+
**ALWAYS set `compatibility_date` to current date for new projects**
|
|
35
|
+
|
|
36
|
+
## Bindings
|
|
37
|
+
|
|
38
|
+
```jsonc
|
|
39
|
+
{
|
|
40
|
+
// Environment variables - access via env.VAR_NAME
|
|
41
|
+
"vars": { "ENVIRONMENT": "production" },
|
|
42
|
+
|
|
43
|
+
// KV (key-value storage)
|
|
44
|
+
"kv_namespaces": [{ "binding": "MY_KV", "id": "abc123" }],
|
|
45
|
+
|
|
46
|
+
// R2 (object storage)
|
|
47
|
+
"r2_buckets": [{ "binding": "MY_BUCKET", "bucket_name": "my-bucket" }],
|
|
48
|
+
|
|
49
|
+
// D1 (SQL database)
|
|
50
|
+
"d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "xyz789" }],
|
|
51
|
+
|
|
52
|
+
// Durable Objects (stateful coordination)
|
|
53
|
+
"durable_objects": {
|
|
54
|
+
"bindings": [{ "name": "COUNTER", "class_name": "Counter" }],
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
// Queues (message queues)
|
|
58
|
+
"queues": {
|
|
59
|
+
"producers": [{ "binding": "MY_QUEUE", "queue": "my-queue" }],
|
|
60
|
+
"consumers": [{ "queue": "my-queue", "max_batch_size": 10 }],
|
|
61
|
+
},
|
|
62
|
+
|
|
63
|
+
// Service bindings (worker-to-worker RPC)
|
|
64
|
+
"services": [{ "binding": "SERVICE_B", "service": "service-b" }],
|
|
65
|
+
|
|
66
|
+
// Analytics Engine
|
|
67
|
+
"analytics_engine_datasets": [{ "binding": "ANALYTICS" }],
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Secrets
|
|
72
|
+
|
|
73
|
+
Set via CLI (never in config):
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx wrangler secret put API_KEY
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Access: `env.API_KEY`
|
|
80
|
+
|
|
81
|
+
### Automatic Provisioning (Beta)
|
|
82
|
+
|
|
83
|
+
Bindings without IDs are auto-created:
|
|
84
|
+
|
|
85
|
+
```jsonc
|
|
86
|
+
{ "kv_namespaces": [{ "binding": "MY_KV" }] } // ID added on deploy
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Routes & Triggers
|
|
90
|
+
|
|
91
|
+
```jsonc
|
|
92
|
+
{
|
|
93
|
+
"routes": [{ "pattern": "example.com/*", "zone_name": "example.com" }],
|
|
94
|
+
"triggers": {
|
|
95
|
+
"crons": ["0 */6 * * *"], // Every 6 hours
|
|
96
|
+
},
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## TypeScript Setup
|
|
101
|
+
|
|
102
|
+
### Automatic Type Generation (Recommended)
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
npm install -D @cloudflare/workers-types
|
|
106
|
+
npx wrangler types # Generates .wrangler/types/runtime.d.ts from wrangler.jsonc
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
`tsconfig.json`:
|
|
110
|
+
|
|
111
|
+
```jsonc
|
|
112
|
+
{
|
|
113
|
+
"compilerOptions": {
|
|
114
|
+
"target": "ES2022",
|
|
115
|
+
"lib": ["ES2022"],
|
|
116
|
+
"types": ["@cloudflare/workers-types"],
|
|
117
|
+
},
|
|
118
|
+
"include": [".wrangler/types/**/*.ts", "src/**/*"],
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Import generated types:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import type { Env } from './.wrangler/types/runtime'
|
|
126
|
+
|
|
127
|
+
export default {
|
|
128
|
+
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
|
|
129
|
+
await env.MY_KV.get('key') // Fully typed, autocomplete works
|
|
130
|
+
return new Response('OK')
|
|
131
|
+
},
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Re-run `npx wrangler types` after changing bindings in wrangler.jsonc
|
|
136
|
+
|
|
137
|
+
### Manual Type Definition (Legacy)
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
interface Env {
|
|
141
|
+
MY_KV: KVNamespace
|
|
142
|
+
DB: D1Database
|
|
143
|
+
API_KEY: string
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Advanced Options
|
|
148
|
+
|
|
149
|
+
```jsonc
|
|
150
|
+
{
|
|
151
|
+
// Auto-locate compute near data sources
|
|
152
|
+
"placement": { "mode": "smart" },
|
|
153
|
+
|
|
154
|
+
// Enable Node.js built-ins (Buffer, process, path, etc.)
|
|
155
|
+
"compatibility_flags": ["nodejs_compat_v2"],
|
|
156
|
+
|
|
157
|
+
// Observability (10% sampling)
|
|
158
|
+
"observability": { "enabled": true, "head_sampling_rate": 0.1 },
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Node.js Compatibility
|
|
163
|
+
|
|
164
|
+
`nodejs_compat_v2` enables:
|
|
165
|
+
|
|
166
|
+
- `Buffer`, `process.env`, `path`, `stream`
|
|
167
|
+
- CommonJS `require()` for Node modules
|
|
168
|
+
- `node:` imports (e.g., `import { Buffer } from 'node:buffer'`)
|
|
169
|
+
|
|
170
|
+
**Note:** Adds ~1-2ms cold start overhead. Use Workers APIs (R2, KV) when possible
|
|
171
|
+
|
|
172
|
+
## Deployment Commands
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npx wrangler deploy # Production
|
|
176
|
+
npx wrangler deploy --env staging
|
|
177
|
+
npx wrangler deploy --dry-run # Validate only
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## See Also
|
|
181
|
+
|
|
182
|
+
- [API](./api.md) - Runtime APIs and bindings usage
|
|
183
|
+
- [Patterns](./patterns.md) - Deployment strategies
|
|
184
|
+
- [Wrangler](../wrangler/README.md) - CLI reference
|