memory-journal-mcp 7.7.0 → 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-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
- 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 +7 -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,200 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
## Command Execution
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// Basic
|
|
7
|
+
const result = await sandbox.exec('python3 script.py')
|
|
8
|
+
// Returns: { stdout, stderr, exitCode, success, duration }
|
|
9
|
+
|
|
10
|
+
// With options
|
|
11
|
+
await sandbox.exec('python3 test.py', {
|
|
12
|
+
cwd: '/workspace/project',
|
|
13
|
+
env: { API_KEY: 'secret' },
|
|
14
|
+
stream: true,
|
|
15
|
+
onOutput: (stream, data) => console.log(data),
|
|
16
|
+
})
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## File Operations
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// Read/Write
|
|
23
|
+
const { content } = await sandbox.readFile('/workspace/data.txt')
|
|
24
|
+
await sandbox.writeFile('/workspace/file.txt', 'content') // Auto-creates dirs
|
|
25
|
+
|
|
26
|
+
// List/Delete
|
|
27
|
+
const files = await sandbox.listFiles('/workspace')
|
|
28
|
+
await sandbox.deleteFile('/workspace/temp.txt')
|
|
29
|
+
await sandbox.deleteFile('/workspace/dir', { recursive: true })
|
|
30
|
+
|
|
31
|
+
// Utils
|
|
32
|
+
await sandbox.mkdir('/workspace/dir', { recursive: true })
|
|
33
|
+
await sandbox.pathExists('/workspace/file.txt')
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Background Processes
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
// Start
|
|
40
|
+
const process = await sandbox.startProcess('python3 -m http.server 8080', {
|
|
41
|
+
processId: 'web-server',
|
|
42
|
+
cwd: '/workspace/public',
|
|
43
|
+
env: { PORT: '8080' },
|
|
44
|
+
})
|
|
45
|
+
// Returns: { id, pid, command }
|
|
46
|
+
|
|
47
|
+
// Wait for readiness
|
|
48
|
+
await process.waitForPort(8080) // Wait for port to listen
|
|
49
|
+
await process.waitForLog(/Server running/) // Wait for log pattern
|
|
50
|
+
await process.waitForExit() // Wait for completion
|
|
51
|
+
|
|
52
|
+
// Management
|
|
53
|
+
const processes = await sandbox.listProcesses()
|
|
54
|
+
const info = await sandbox.getProcess('web-server')
|
|
55
|
+
await sandbox.stopProcess('web-server')
|
|
56
|
+
const logs = await sandbox.getProcessLogs('web-server')
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Port Exposure
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// Expose port
|
|
63
|
+
const { url } = await sandbox.exposePort(8080, {
|
|
64
|
+
name: 'web-app',
|
|
65
|
+
hostname: request.hostname,
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
// Management
|
|
69
|
+
await sandbox.isPortExposed(8080)
|
|
70
|
+
await sandbox.getExposedPorts(request.hostname)
|
|
71
|
+
await sandbox.unexposePort(8080)
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Sessions (Isolated Contexts)
|
|
75
|
+
|
|
76
|
+
Each session maintains own shell state, env vars, cwd, process namespace.
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Create with context
|
|
80
|
+
const session = await sandbox.createSession({
|
|
81
|
+
id: 'user-123',
|
|
82
|
+
cwd: '/workspace/user123',
|
|
83
|
+
env: { USER_ID: '123' },
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
// Use (full sandbox API)
|
|
87
|
+
await session.exec('echo $USER_ID')
|
|
88
|
+
await session.writeFile('config.txt', 'data')
|
|
89
|
+
|
|
90
|
+
// Manage
|
|
91
|
+
await sandbox.getSession('user-123')
|
|
92
|
+
await sandbox.deleteSession('user-123')
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Code Interpreter
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// Create context with variables
|
|
99
|
+
const ctx = await sandbox.createCodeContext({
|
|
100
|
+
language: 'python',
|
|
101
|
+
variables: {
|
|
102
|
+
data: [1, 2, 3, 4, 5],
|
|
103
|
+
config: { verbose: true },
|
|
104
|
+
},
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
// Execute code with rich outputs
|
|
108
|
+
const result = await ctx.runCode(`
|
|
109
|
+
import matplotlib.pyplot as plt
|
|
110
|
+
plt.plot(data, [x**2 for x in data])
|
|
111
|
+
plt.savefig('plot.png')
|
|
112
|
+
print(f"Processed {len(data)} points")
|
|
113
|
+
`)
|
|
114
|
+
// Returns: { outputs: [{ type: 'text'|'image'|'html', content }], error }
|
|
115
|
+
|
|
116
|
+
// Context persists variables across runs
|
|
117
|
+
const result2 = await ctx.runCode('print(data[0])') // Still has 'data'
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## WebSocket Connections
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
// Proxy WebSocket to sandbox service
|
|
124
|
+
export default {
|
|
125
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
126
|
+
const proxyResponse = await proxyToSandbox(request, env)
|
|
127
|
+
if (proxyResponse) return proxyResponse
|
|
128
|
+
|
|
129
|
+
if (request.headers.get('Upgrade')?.toLowerCase() === 'websocket') {
|
|
130
|
+
const sandbox = getSandbox(env.Sandbox, 'realtime')
|
|
131
|
+
return await sandbox.wsConnect(request, 8080)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return new Response('Not a WebSocket request', { status: 400 })
|
|
135
|
+
},
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Bucket Mounting (S3 Storage)
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// Mount R2 bucket (production only, not wrangler dev)
|
|
143
|
+
await sandbox.mountBucket(env.DATA_BUCKET, '/data', {
|
|
144
|
+
readOnly: false,
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
// Access files in mounted bucket
|
|
148
|
+
await sandbox.exec('ls /data')
|
|
149
|
+
await sandbox.writeFile('/data/output.txt', 'result')
|
|
150
|
+
|
|
151
|
+
// Unmount
|
|
152
|
+
await sandbox.unmountBucket('/data')
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Note**: Bucket mounting only works in production. Mounted buckets are sandbox-scoped (visible to all sessions in that sandbox).
|
|
156
|
+
|
|
157
|
+
## Lifecycle Management
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
// Terminate container immediately
|
|
161
|
+
await sandbox.destroy()
|
|
162
|
+
|
|
163
|
+
// REQUIRED when using keepAlive: true
|
|
164
|
+
const sandbox = getSandbox(env.Sandbox, 'temp', { keepAlive: true })
|
|
165
|
+
try {
|
|
166
|
+
await sandbox.writeFile('/tmp/code.py', code)
|
|
167
|
+
const result = await sandbox.exec('python /tmp/code.py')
|
|
168
|
+
return result.stdout
|
|
169
|
+
} finally {
|
|
170
|
+
await sandbox.destroy() // Free resources
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Deletes: files, processes, sessions, network connections, exposed ports.
|
|
175
|
+
|
|
176
|
+
## Error Handling
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// Command errors
|
|
180
|
+
const result = await sandbox.exec('python3 invalid.py')
|
|
181
|
+
if (!result.success) {
|
|
182
|
+
console.error('Exit code:', result.exitCode)
|
|
183
|
+
console.error('Stderr:', result.stderr)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// SDK errors
|
|
187
|
+
try {
|
|
188
|
+
await sandbox.readFile('/nonexistent')
|
|
189
|
+
} catch (error) {
|
|
190
|
+
if (error.code === 'FILE_NOT_FOUND') {
|
|
191
|
+
/* ... */
|
|
192
|
+
} else if (error.code === 'CONTAINER_NOT_READY') {
|
|
193
|
+
/* retry */
|
|
194
|
+
} else if (error.code === 'TIMEOUT') {
|
|
195
|
+
/* ... */
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// Retry pattern (see gotchas.md for full implementation)
|
|
200
|
+
```
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## getSandbox Options
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
const sandbox = getSandbox(env.Sandbox, 'sandbox-id', {
|
|
7
|
+
normalizeId: true, // lowercase ID (required for preview URLs)
|
|
8
|
+
sleepAfter: '10m', // sleep after inactivity: '5m', '1h', '2d' (default: '10m')
|
|
9
|
+
keepAlive: false, // false = auto-timeout, true = never sleep
|
|
10
|
+
|
|
11
|
+
containerTimeouts: {
|
|
12
|
+
instanceGetTimeoutMS: 30000, // 30s for provisioning (default: 30000)
|
|
13
|
+
portReadyTimeoutMS: 90000, // 90s for container startup (default: 90000)
|
|
14
|
+
},
|
|
15
|
+
})
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Sleep Config**:
|
|
19
|
+
|
|
20
|
+
- `sleepAfter`: Duration string (e.g., '5m', '10m', '1h') - default: '10m'
|
|
21
|
+
- `keepAlive: false`: Auto-sleep (default, cost-optimized)
|
|
22
|
+
- `keepAlive: true`: Never sleep (higher cost, requires explicit `destroy()`)
|
|
23
|
+
- Sleeping sandboxes wake automatically (cold start)
|
|
24
|
+
|
|
25
|
+
## Instance Types
|
|
26
|
+
|
|
27
|
+
wrangler.jsonc `instance_type`:
|
|
28
|
+
|
|
29
|
+
- `lite`: 256MB RAM, 0.5 vCPU (default)
|
|
30
|
+
- `standard`: 512MB RAM, 1 vCPU
|
|
31
|
+
- `heavy`: 1GB RAM, 2 vCPU
|
|
32
|
+
|
|
33
|
+
## Dockerfile Patterns
|
|
34
|
+
|
|
35
|
+
**Basic**:
|
|
36
|
+
|
|
37
|
+
```dockerfile
|
|
38
|
+
FROM docker.io/cloudflare/sandbox:latest
|
|
39
|
+
RUN pip3 install --no-cache-dir pandas numpy
|
|
40
|
+
EXPOSE 8080 # Required for wrangler dev
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Scientific**:
|
|
44
|
+
|
|
45
|
+
```dockerfile
|
|
46
|
+
FROM docker.io/cloudflare/sandbox:latest
|
|
47
|
+
RUN pip3 install --no-cache-dir \
|
|
48
|
+
jupyter-server ipykernel matplotlib \
|
|
49
|
+
pandas seaborn plotly scipy scikit-learn
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Node.js**:
|
|
53
|
+
|
|
54
|
+
```dockerfile
|
|
55
|
+
FROM docker.io/cloudflare/sandbox:latest
|
|
56
|
+
RUN npm install -g typescript ts-node
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**CRITICAL**: `EXPOSE` required for `wrangler dev` port access. Production auto-exposes all ports.
|
|
60
|
+
|
|
61
|
+
## CLI Commands
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Dev
|
|
65
|
+
wrangler dev # Start local dev server
|
|
66
|
+
wrangler deploy # Deploy to production
|
|
67
|
+
wrangler tail # Monitor logs
|
|
68
|
+
wrangler containers list # Check container status
|
|
69
|
+
wrangler secret put KEY # Set secret
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Environment & Secrets
|
|
73
|
+
|
|
74
|
+
**wrangler.jsonc**:
|
|
75
|
+
|
|
76
|
+
```jsonc
|
|
77
|
+
{
|
|
78
|
+
"vars": {
|
|
79
|
+
"ENVIRONMENT": "production",
|
|
80
|
+
"API_URL": "https://api.example.com",
|
|
81
|
+
},
|
|
82
|
+
"r2_buckets": [
|
|
83
|
+
{
|
|
84
|
+
"binding": "DATA_BUCKET",
|
|
85
|
+
"bucket_name": "my-data-bucket",
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Usage**:
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
const token = env.GITHUB_TOKEN // From wrangler secret
|
|
95
|
+
await sandbox.exec('git clone ...', {
|
|
96
|
+
env: { GIT_TOKEN: token },
|
|
97
|
+
})
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Preview URL Setup
|
|
101
|
+
|
|
102
|
+
**Prerequisites**:
|
|
103
|
+
|
|
104
|
+
- Custom domain with wildcard DNS: `*.yourdomain.com → worker.yourdomain.com`
|
|
105
|
+
- `.workers.dev` domains NOT supported
|
|
106
|
+
- `normalizeId: true` in getSandbox
|
|
107
|
+
- `proxyToSandbox()` called first in fetch handler
|
|
108
|
+
|
|
109
|
+
## Cron Triggers (Pre-warming)
|
|
110
|
+
|
|
111
|
+
```jsonc
|
|
112
|
+
{
|
|
113
|
+
"triggers": {
|
|
114
|
+
"crons": ["*/5 * * * *"], // Every 5 minutes
|
|
115
|
+
},
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
export default {
|
|
121
|
+
async scheduled(event: ScheduledEvent, env: Env) {
|
|
122
|
+
const sandbox = getSandbox(env.Sandbox, 'main')
|
|
123
|
+
await sandbox.exec('echo "keepalive"') // Wake sandbox
|
|
124
|
+
},
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Logging Configuration
|
|
129
|
+
|
|
130
|
+
**wrangler.jsonc**:
|
|
131
|
+
|
|
132
|
+
```jsonc
|
|
133
|
+
{
|
|
134
|
+
"vars": {
|
|
135
|
+
"SANDBOX_LOG_LEVEL": "debug", // debug | info | warn | error (default: info)
|
|
136
|
+
"SANDBOX_LOG_FORMAT": "pretty", // json | pretty (default: json)
|
|
137
|
+
},
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Dev**: `debug` + `pretty`. **Production**: `info`/`warn` + `json`.
|
|
142
|
+
|
|
143
|
+
## Timeout Environment Overrides
|
|
144
|
+
|
|
145
|
+
Override default timeouts via environment variables:
|
|
146
|
+
|
|
147
|
+
```jsonc
|
|
148
|
+
{
|
|
149
|
+
"vars": {
|
|
150
|
+
"SANDBOX_INSTANCE_TIMEOUT_MS": "60000", // Override instanceGetTimeoutMS
|
|
151
|
+
"SANDBOX_PORT_TIMEOUT_MS": "120000", // Override portReadyTimeoutMS
|
|
152
|
+
},
|
|
153
|
+
}
|
|
154
|
+
```
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# Gotchas & Best Practices
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
### "Container running indefinitely"
|
|
6
|
+
|
|
7
|
+
**Cause:** `keepAlive: true` without calling `destroy()`
|
|
8
|
+
**Solution:** Always call `destroy()` when done with keepAlive containers
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
const sandbox = getSandbox(env.Sandbox, 'temp', { keepAlive: true })
|
|
12
|
+
try {
|
|
13
|
+
const result = await sandbox.exec('python script.py')
|
|
14
|
+
return result.stdout
|
|
15
|
+
} finally {
|
|
16
|
+
await sandbox.destroy() // REQUIRED to free resources
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### "CONTAINER_NOT_READY"
|
|
21
|
+
|
|
22
|
+
**Cause:** Container still provisioning (first request or after sleep)
|
|
23
|
+
**Solution:** Retry after 2-3s
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
async function execWithRetry(sandbox, cmd) {
|
|
27
|
+
for (let i = 0; i < 3; i++) {
|
|
28
|
+
try {
|
|
29
|
+
return await sandbox.exec(cmd)
|
|
30
|
+
} catch (e) {
|
|
31
|
+
if (e.code === 'CONTAINER_NOT_READY') {
|
|
32
|
+
await new Promise((r) => setTimeout(r, 2000))
|
|
33
|
+
continue
|
|
34
|
+
}
|
|
35
|
+
throw e
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### "Connection refused: container port not found"
|
|
42
|
+
|
|
43
|
+
**Cause:** Missing `EXPOSE` directive in Dockerfile
|
|
44
|
+
**Solution:** Add `EXPOSE <port>` to Dockerfile (only needed for `wrangler dev`, production auto-exposes)
|
|
45
|
+
|
|
46
|
+
### "Preview URLs not working"
|
|
47
|
+
|
|
48
|
+
**Cause:** Custom domain not configured, wildcard DNS missing, `normalizeId` not set, or `proxyToSandbox()` not called
|
|
49
|
+
**Solution:** Check:
|
|
50
|
+
|
|
51
|
+
1. Custom domain configured? (not `.workers.dev`)
|
|
52
|
+
2. Wildcard DNS set up? (`*.domain.com → worker.domain.com`)
|
|
53
|
+
3. `normalizeId: true` in getSandbox?
|
|
54
|
+
4. `proxyToSandbox()` called first in fetch?
|
|
55
|
+
|
|
56
|
+
### "Slow first request"
|
|
57
|
+
|
|
58
|
+
**Cause:** Cold start (container provisioning)
|
|
59
|
+
**Solution:**
|
|
60
|
+
|
|
61
|
+
- Use `sleepAfter` instead of creating new sandboxes
|
|
62
|
+
- Pre-warm with cron triggers
|
|
63
|
+
- Set `keepAlive: true` for critical sandboxes
|
|
64
|
+
|
|
65
|
+
### "File not persisting"
|
|
66
|
+
|
|
67
|
+
**Cause:** Files in `/tmp` or other ephemeral paths
|
|
68
|
+
**Solution:** Use `/workspace` for persistent files
|
|
69
|
+
|
|
70
|
+
### "Bucket mounting doesn't work locally"
|
|
71
|
+
|
|
72
|
+
**Cause:** Bucket mounting requires FUSE, not available in `wrangler dev`
|
|
73
|
+
**Solution:** Test bucket mounting in production only. Use mock data locally.
|
|
74
|
+
|
|
75
|
+
### "Different normalizeId = different sandbox"
|
|
76
|
+
|
|
77
|
+
**Cause:** Changing `normalizeId` option changes Durable Object ID
|
|
78
|
+
**Solution:** Set `normalizeId` consistently. `normalizeId: true` lowercases the ID.
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// These create DIFFERENT sandboxes:
|
|
82
|
+
getSandbox(env.Sandbox, 'MyApp') // DO ID: hash('MyApp')
|
|
83
|
+
getSandbox(env.Sandbox, 'MyApp', { normalizeId: true }) // DO ID: hash('myapp')
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### "Code context variables disappeared"
|
|
87
|
+
|
|
88
|
+
**Cause:** Container restart clears code context state
|
|
89
|
+
**Solution:** Code contexts are ephemeral. Recreate context after container sleep/wake.
|
|
90
|
+
|
|
91
|
+
## Performance Optimization
|
|
92
|
+
|
|
93
|
+
### Sandbox ID Strategy
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
// ❌ BAD: New sandbox every time (slow)
|
|
97
|
+
const sandbox = getSandbox(env.Sandbox, `user-${Date.now()}`)
|
|
98
|
+
|
|
99
|
+
// ✅ GOOD: Reuse per user
|
|
100
|
+
const sandbox = getSandbox(env.Sandbox, `user-${userId}`)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Sleep & Traffic Config
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
// Cost-optimized
|
|
107
|
+
getSandbox(env.Sandbox, 'id', { sleepAfter: '30m', keepAlive: false })
|
|
108
|
+
|
|
109
|
+
// Always-on (requires destroy())
|
|
110
|
+
getSandbox(env.Sandbox, 'id', { keepAlive: true })
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```jsonc
|
|
114
|
+
// High traffic: increase max_instances
|
|
115
|
+
{ "containers": [{ "class_name": "Sandbox", "max_instances": 50 }] }
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Security Best Practices
|
|
119
|
+
|
|
120
|
+
### Sandbox Isolation
|
|
121
|
+
|
|
122
|
+
- Each sandbox = isolated container (filesystem, network, processes)
|
|
123
|
+
- Use unique sandbox IDs per tenant for multi-tenant apps
|
|
124
|
+
- Sandboxes cannot communicate directly
|
|
125
|
+
|
|
126
|
+
### Input Validation
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
// ❌ DANGEROUS: Command injection
|
|
130
|
+
const result = await sandbox.exec(`python3 -c "${userCode}"`)
|
|
131
|
+
|
|
132
|
+
// ✅ SAFE: Write to file, execute file
|
|
133
|
+
await sandbox.writeFile('/workspace/user_code.py', userCode)
|
|
134
|
+
const result = await sandbox.exec('python3 /workspace/user_code.py')
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Resource Limits
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
// Timeout long-running commands
|
|
141
|
+
const result = await sandbox.exec('python3 script.py', {
|
|
142
|
+
timeout: 30000, // 30 seconds
|
|
143
|
+
})
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Secrets Management
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
// ❌ NEVER hardcode secrets
|
|
150
|
+
const token = 'ghp_abc123'
|
|
151
|
+
|
|
152
|
+
// ✅ Use environment secrets
|
|
153
|
+
const token = env.GITHUB_TOKEN
|
|
154
|
+
|
|
155
|
+
// Pass to sandbox via exec env
|
|
156
|
+
const result = await sandbox.exec('git clone ...', {
|
|
157
|
+
env: { GIT_TOKEN: token },
|
|
158
|
+
})
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Preview URL Security
|
|
162
|
+
|
|
163
|
+
Preview URLs include auto-generated tokens:
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
https://8080-sandbox-abc123def456.yourdomain.com
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Token changes on each expose operation, preventing unauthorized access.
|
|
170
|
+
|
|
171
|
+
## Limits
|
|
172
|
+
|
|
173
|
+
| Resource | Lite | Standard | Heavy |
|
|
174
|
+
| -------- | ----- | -------- | ----- |
|
|
175
|
+
| RAM | 256MB | 512MB | 1GB |
|
|
176
|
+
| vCPU | 0.5 | 1 | 2 |
|
|
177
|
+
|
|
178
|
+
| Operation | Default Timeout | Override |
|
|
179
|
+
| ---------------------- | --------------- | ----------------------------- |
|
|
180
|
+
| Container provisioning | 30s | `SANDBOX_INSTANCE_TIMEOUT_MS` |
|
|
181
|
+
| Port readiness | 90s | `SANDBOX_PORT_TIMEOUT_MS` |
|
|
182
|
+
| exec() | 120s | `timeout` option |
|
|
183
|
+
| sleepAfter | 10m | `sleepAfter` option |
|
|
184
|
+
|
|
185
|
+
**Performance**:
|
|
186
|
+
|
|
187
|
+
- **First deploy**: 2-3 min for container build
|
|
188
|
+
- **Cold start**: 2-3s when waking from sleep
|
|
189
|
+
- **Bucket mounting**: Production only (FUSE not in dev)
|
|
190
|
+
|
|
191
|
+
## Production Guide
|
|
192
|
+
|
|
193
|
+
See: https://developers.cloudflare.com/sandbox/guides/production-deployment/
|
|
194
|
+
|
|
195
|
+
## Resources
|
|
196
|
+
|
|
197
|
+
- [Official Docs](https://developers.cloudflare.com/sandbox/)
|
|
198
|
+
- [API Reference](https://developers.cloudflare.com/sandbox/api/)
|
|
199
|
+
- [Examples](https://github.com/cloudflare/sandbox-sdk/tree/main/examples)
|
|
200
|
+
- [npm Package](https://www.npmjs.com/package/@cloudflare/sandbox)
|
|
201
|
+
- [Discord Support](https://discord.cloudflare.com)
|