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
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: playwright-standard
|
|
3
3
|
description: |
|
|
4
|
-
Comprehensive, opinionated guidance for Playwright test development. Use when
|
|
5
|
-
writing E2E, API, component, or visual tests, debugging failures, implementing
|
|
6
|
-
Page Object Model, or configuring CI/CD.
|
|
7
|
-
tests
|
|
8
|
-
WebSockets, mobile, security audits).
|
|
4
|
+
Comprehensive, opinionated guidance for Playwright test development. Use ONLY when
|
|
5
|
+
writing E2E, browser tests, UI tests, API, component, or visual tests, debugging failures, implementing
|
|
6
|
+
Page Object Model, or configuring CI/CD. For unit tests, use vitest-standard. Use Playwright solely for E2E, API, and component tests. NOT for unit testing (use Vitest).
|
|
7
|
+
If the user asks to "write tests" without specifying the type, you MUST ask "Unit, E2E, or both?" before proceeding.
|
|
9
8
|
---
|
|
10
9
|
|
|
11
10
|
# Playwright Standard
|
|
@@ -20,7 +19,7 @@ This skill combines battle-tested coding standards with industrial-scale infrast
|
|
|
20
19
|
4. **Isolate every test** — Every test must run independently in any order (no shared state).
|
|
21
20
|
5. **Fixtures over globals** — Share state via `test.extend()`, not module-level variables.
|
|
22
21
|
6. **`baseURL` in config** — ZERO hardcoded URLs in test files.
|
|
23
|
-
7. **Auth: Reuse storage state** — Use `browserContext.storageState` to avoid UI login in every test.
|
|
22
|
+
7. **Auth: Reuse storage state** — Use `browserContext.storageState` to avoid UI login in every test. Store `storageState` files in `.gitignore`d paths (e.g., `playwright/.auth/`). Never commit auth state files to version control.
|
|
24
23
|
8. **Network: Mock third-party only** — Never mock your own app; mock external APIs, gateways, and emails.
|
|
25
24
|
9. **Traces: `'on-first-retry'`** — High-fidelity debugging without CI performance penalties.
|
|
26
25
|
10. **One behavior per test** — Avoid "mega-tests": keep focus narrow and assertions meaningful.
|
|
@@ -29,11 +28,7 @@ This skill combines battle-tested coding standards with industrial-scale infrast
|
|
|
29
28
|
|
|
30
29
|
### Locators Priority
|
|
31
30
|
|
|
32
|
-
|
|
33
|
-
2. **Label**: `page.getByLabel('User Name')`
|
|
34
|
-
3. **Placeholder**: `page.getByPlaceholder('Search...')`
|
|
35
|
-
4. **Text**: `page.getByText('Success')`
|
|
36
|
-
5. **TestID**: `page.getByTestId('submit-btn')` (Last resort)
|
|
31
|
+
See **[locators.md](references/locators.md)** for the strict hierarchy of Playwright locator strategies (Role > Label > TestID).
|
|
37
32
|
|
|
38
33
|
### Synchronization
|
|
39
34
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Playwright Locators Priority
|
|
2
|
+
|
|
3
|
+
1. **Role**: `page.getByRole('button', { name: 'Submit' })`
|
|
4
|
+
2. **Label**: `page.getByLabel('User Name')`
|
|
5
|
+
3. **Placeholder**: `page.getByPlaceholder('Search...')`
|
|
6
|
+
4. **Text**: `page.getByText('Success')`
|
|
7
|
+
5. **TestID**: `page.getByTestId('submit-btn')` (Last resort)
|
package/skills/postgres/SKILL.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: postgres
|
|
3
|
-
description:
|
|
3
|
+
description: |
|
|
4
|
+
Use when designing, querying, or managing a PostgreSQL database.
|
|
5
|
+
Enforces enterprise production rules for advanced querying, composite indexing,
|
|
6
|
+
JSONB data handling, and strict optimization patterns (avoiding N+1).
|
|
7
|
+
Keywords: PostgreSQL query, JSONB, pg, pgvector, RLS, Postgres migration.
|
|
8
|
+
MUST-ASK: Require explicit database engine name before triggering. Never guess. Do NOT trigger for generic "set up a database" requests. NOT for SQLite or MySQL. NOT for ORM-managed migrations.
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# PostgreSQL Production Standards
|
package/skills/python/SKILL.md
CHANGED
|
@@ -5,7 +5,7 @@ description: |
|
|
|
5
5
|
Use when writing Python code, configuring project structure, managing
|
|
6
6
|
dependencies with uv, linting with ruff, adding type hints, writing pytest
|
|
7
7
|
tests, or building FastAPI/Django/Flask applications. Triggers on "Python",
|
|
8
|
-
"FastAPI", "Django", "Flask", "pytest", "uv", "ruff", "pyproject.toml".
|
|
8
|
+
"FastAPI", "Django", "Flask", "pytest", "uv", "ruff", "pyproject.toml". Do NOT trigger for generic 'build a server' requests unless the platform/language is explicitly specified as Python (e.g. FastAPI, Django, Flask).
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Python Engineering Standards
|
|
@@ -55,30 +55,7 @@ my-project/
|
|
|
55
55
|
|
|
56
56
|
### `pyproject.toml` Configuration (PEP 621)
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
[project]
|
|
60
|
-
name = "my-package"
|
|
61
|
-
version = "0.1.0"
|
|
62
|
-
requires-python = ">=3.12"
|
|
63
|
-
dependencies = [
|
|
64
|
-
"httpx>=0.27",
|
|
65
|
-
"pydantic>=2.0",
|
|
66
|
-
]
|
|
67
|
-
|
|
68
|
-
[project.optional-dependencies]
|
|
69
|
-
dev = ["pytest>=8.0", "ruff>=0.8", "mypy>=1.13"]
|
|
70
|
-
|
|
71
|
-
[tool.ruff]
|
|
72
|
-
target-version = "py312"
|
|
73
|
-
line-length = 88
|
|
74
|
-
|
|
75
|
-
[tool.ruff.lint]
|
|
76
|
-
select = ["E", "F", "I", "UP", "B", "SIM", "RUF"]
|
|
77
|
-
|
|
78
|
-
[tool.pytest.ini_options]
|
|
79
|
-
testpaths = ["tests"]
|
|
80
|
-
pythonpath = ["src"]
|
|
81
|
-
```
|
|
58
|
+
See `references/config-templates.md` for the standard `pyproject.toml` template.
|
|
82
59
|
|
|
83
60
|
## 2. Type Hints (Mandatory)
|
|
84
61
|
|
|
@@ -124,23 +101,7 @@ ruff format . # Format (replaces Black)
|
|
|
124
101
|
|
|
125
102
|
### Configuration in `pyproject.toml`
|
|
126
103
|
|
|
127
|
-
|
|
128
|
-
[tool.ruff]
|
|
129
|
-
target-version = "py312"
|
|
130
|
-
line-length = 88
|
|
131
|
-
src = ["src", "tests"]
|
|
132
|
-
|
|
133
|
-
[tool.ruff.lint]
|
|
134
|
-
select = [
|
|
135
|
-
"E", # pycodestyle errors
|
|
136
|
-
"F", # pyflakes
|
|
137
|
-
"I", # isort
|
|
138
|
-
"UP", # pyupgrade
|
|
139
|
-
"B", # bugbear
|
|
140
|
-
"SIM", # simplify
|
|
141
|
-
"RUF", # ruff-specific
|
|
142
|
-
]
|
|
143
|
-
```
|
|
104
|
+
See `references/config-templates.md` for the standard Ruff configuration.
|
|
144
105
|
|
|
145
106
|
- **NEVER** use `# noqa` to suppress linter errors unless the suppression is explicitly justified by a comment explaining _why_.
|
|
146
107
|
- **NEVER** use `# type: ignore` — fix the type error or use a proper type guard.
|
|
@@ -208,36 +169,13 @@ uv run pytest -k "test_user" # Run by pattern
|
|
|
208
169
|
uv run pytest --cov=src --cov-report=term-missing # Coverage
|
|
209
170
|
```
|
|
210
171
|
|
|
211
|
-
## 6.
|
|
212
|
-
|
|
213
|
-
- **Use `asyncio`** for I/O-bound concurrency (HTTP calls, DB queries)
|
|
214
|
-
- **Use `async def` / `await`** — never mix sync and async code paths
|
|
215
|
-
- **Use `asyncio.TaskGroup`** (Python 3.11+) for structured concurrency
|
|
216
|
-
- **Use `httpx`** (async-native) instead of `requests` for HTTP clients
|
|
217
|
-
|
|
218
|
-
```python
|
|
219
|
-
async with asyncio.TaskGroup() as tg:
|
|
220
|
-
task1 = tg.create_task(fetch_user(user_id))
|
|
221
|
-
task2 = tg.create_task(fetch_orders(user_id))
|
|
222
|
-
# Both tasks complete here — exceptions propagate cleanly
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
## 7. Data Validation: Pydantic v2
|
|
172
|
+
## 6. Advanced Patterns & Security
|
|
226
173
|
|
|
227
|
-
|
|
228
|
-
- **Never trust external input** — validate with `model_validate()`, not dict access
|
|
229
|
-
- **Use `Field()` validators** for constraints, not manual `if` checks
|
|
174
|
+
For advanced guidance on `asyncio` concurrency, Pydantic v2 data validation, and Python security best practices, see the reference file:
|
|
230
175
|
|
|
231
|
-
|
|
232
|
-
from pydantic import BaseModel, Field
|
|
233
|
-
|
|
234
|
-
class CreateUserRequest(BaseModel):
|
|
235
|
-
name: str = Field(min_length=1, max_length=100)
|
|
236
|
-
email: str = Field(pattern=r"^[\w.-]+@[\w.-]+\.\w+$")
|
|
237
|
-
age: int = Field(ge=0, le=150)
|
|
238
|
-
```
|
|
176
|
+
**[Read: references/advanced-patterns.md](references/advanced-patterns.md)**
|
|
239
177
|
|
|
240
|
-
##
|
|
178
|
+
## 9. Anti-Patterns (Never Do These)
|
|
241
179
|
|
|
242
180
|
| Anti-Pattern | Why It's Wrong | Do This Instead |
|
|
243
181
|
| ------------------------------------ | ---------------------------------- | ---------------------------- |
|
|
@@ -248,7 +186,7 @@ class CreateUserRequest(BaseModel):
|
|
|
248
186
|
| `print()` for logging | No levels, no rotation | Use `logging` or `structlog` |
|
|
249
187
|
| `== None` / `== True` | Wrong semantics | `is None` / `is True` |
|
|
250
188
|
|
|
251
|
-
##
|
|
189
|
+
## 10. Web Frameworks Quick Reference
|
|
252
190
|
|
|
253
191
|
| Framework | Best For | Key Pattern |
|
|
254
192
|
| ----------- | ---------------------------- | --------------------------------------------------------- |
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Advanced Python Patterns
|
|
2
|
+
|
|
3
|
+
## Async & Concurrency
|
|
4
|
+
|
|
5
|
+
- **Use `asyncio`** for I/O-bound concurrency (HTTP calls, DB queries)
|
|
6
|
+
- **Use `async def` / `await`** — never mix sync and async code paths
|
|
7
|
+
- **Use `asyncio.TaskGroup`** (Python 3.11+) for structured concurrency
|
|
8
|
+
- **Use `httpx`** (async-native) instead of `requests` for HTTP clients
|
|
9
|
+
|
|
10
|
+
```python
|
|
11
|
+
async with asyncio.TaskGroup() as tg:
|
|
12
|
+
task1 = tg.create_task(fetch_user(user_id))
|
|
13
|
+
task2 = tg.create_task(fetch_orders(user_id))
|
|
14
|
+
# Both tasks complete here — exceptions propagate cleanly
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Data Validation: Pydantic v2
|
|
18
|
+
|
|
19
|
+
- **Use Pydantic models** at system boundaries (API requests, config files, DB results)
|
|
20
|
+
- **Never trust external input** — validate with `model_validate()`, not dict access
|
|
21
|
+
- **Use `Field()` validators** for constraints, not manual `if` checks
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from pydantic import BaseModel, Field
|
|
25
|
+
|
|
26
|
+
class CreateUserRequest(BaseModel):
|
|
27
|
+
name: str = Field(min_length=1, max_length=100)
|
|
28
|
+
email: str = Field(pattern=r"^[\w.-]+@[\w.-]+\.\w+$")
|
|
29
|
+
age: int = Field(ge=0, le=150)
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Security & Safety
|
|
33
|
+
|
|
34
|
+
- **SQL Injection**: Never use string interpolation for SQL queries. Use an ORM (SQLAlchemy, Django ORM) or parameterized queries (e.g., `cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))`).
|
|
35
|
+
- **Secrets Management**: Never commit `.env` files or hardcode credentials. Use `python-decouple` or `os.environ` to read secrets from the environment.
|
|
36
|
+
- **CSRF & Auth**: Always enable CSRF protection in web frameworks (e.g., `CsrfViewMiddleware` in Django).
|
|
37
|
+
- **Input Validation**: Validate all untrusted input at the boundaries using Pydantic models.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Python Config Templates
|
|
2
|
+
|
|
3
|
+
## `pyproject.toml` Configuration (PEP 621)
|
|
4
|
+
|
|
5
|
+
```toml
|
|
6
|
+
[project]
|
|
7
|
+
name = "my-package"
|
|
8
|
+
version = "0.1.0"
|
|
9
|
+
requires-python = ">=3.12"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"httpx>=0.27",
|
|
12
|
+
"pydantic>=2.0",
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
[project.optional-dependencies]
|
|
16
|
+
dev = ["pytest>=8.0", "ruff>=0.8", "mypy>=1.13"]
|
|
17
|
+
|
|
18
|
+
[tool.ruff]
|
|
19
|
+
target-version = "py312"
|
|
20
|
+
line-length = 88
|
|
21
|
+
|
|
22
|
+
[tool.ruff.lint]
|
|
23
|
+
select = ["E", "F", "I", "UP", "B", "SIM", "RUF"]
|
|
24
|
+
|
|
25
|
+
[tool.pytest.ini_options]
|
|
26
|
+
testpaths = ["tests"]
|
|
27
|
+
pythonpath = ["src"]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Ruff Configuration in `pyproject.toml`
|
|
31
|
+
|
|
32
|
+
```toml
|
|
33
|
+
[tool.ruff]
|
|
34
|
+
target-version = "py312"
|
|
35
|
+
line-length = 88
|
|
36
|
+
src = ["src", "tests"]
|
|
37
|
+
|
|
38
|
+
[tool.ruff.lint]
|
|
39
|
+
select = [
|
|
40
|
+
"E", # pycodestyle errors
|
|
41
|
+
"F", # pyflakes
|
|
42
|
+
"I", # isort
|
|
43
|
+
"UP", # pyupgrade
|
|
44
|
+
"B", # bugbear
|
|
45
|
+
"SIM", # simplify
|
|
46
|
+
"RUF", # ruff-specific
|
|
47
|
+
]
|
|
48
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rag-pipelines
|
|
3
|
+
description: |
|
|
4
|
+
Best practices for Retrieval-Augmented Generation (RAG) pipelines. Use when working with vector databases, embeddings, chunking strategies, semantic search, or hybrid search architectures.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# RAG Pipelines
|
|
8
|
+
|
|
9
|
+
## Core Concepts
|
|
10
|
+
|
|
11
|
+
- **Chunking**: Chunk by semantics or document structure, not just fixed lengths. Avoid naive character-based chunking. Use semantic chunking (splitting at sentence/paragraph boundaries) or structure-aware chunking (e.g., Markdown header splitting).
|
|
12
|
+
- **Embeddings**: Select appropriate models (e.g. text-embedding-3-small).
|
|
13
|
+
- **Retrieval**: Use hybrid search (vector + keyword) and re-ranking for optimal precision. Do not rely purely on dense vector embeddings. Combine vector search (for semantic meaning) with keyword search (BM25 for exact matches/IDs/names) using Reciprocal Rank Fusion (RRF). Always add a cross-encoder reranking step after initial retrieval. Retrieve a larger pool of documents (e.g., top-20) and rerank them to select the top-5 most relevant chunks to inject into the prompt.
|
|
14
|
+
- **Context Injection**: Carefully format retrieved chunks into the prompt for maximum LLM attention. Instruct the LLM to cite specific retrieved chunks in its response. Reject answers that rely on pre-trained knowledge if the task requires strict adherence to retrieved context.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: redis
|
|
3
|
+
description: |
|
|
4
|
+
Redis best practices. Use when configuring caching strategies, connection pooling, handling TTLs (Time-To-Live), or managing Redis data structures (Hash, Set, List) in Node/TypeScript projects. MUST-ASK: Require explicit database engine name before triggering. Never guess. Do NOT use for generic "set up a database" or "create a DB" requests without clarifying.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Redis Best Practices
|
|
8
|
+
|
|
9
|
+
Standards for deploying and using Redis as a cache or key-value store.
|
|
10
|
+
|
|
11
|
+
## 1. Connection Management
|
|
12
|
+
|
|
13
|
+
- **Connection Pooling**: Use a persistent connection object across your application. Do not create a new Redis client on every request.
|
|
14
|
+
- **Timeouts & Reconnects**: Always configure `connectTimeout` and strict reconnect strategies. Redis can drop connections under load; your app must handle retries gracefully without stalling.
|
|
15
|
+
|
|
16
|
+
## 2. Caching Strategies
|
|
17
|
+
|
|
18
|
+
- **Cache-Aside Pattern**: Read from cache; if miss, read from DB and write to cache with a TTL.
|
|
19
|
+
- **Thundering Herd**: Use brief locks (distributed locking) or stale-while-revalidate patterns for heavily accessed keys that expire, to prevent database spikes.
|
|
20
|
+
- **TTL (Time-To-Live)**: ALWAYS attach a TTL to cache keys unless the key is definitively a permanent config value. Use staggered TTLs (e.g., base TTL + random jitter) to avoid mass expirations.
|
|
21
|
+
|
|
22
|
+
## 3. Data Structures
|
|
23
|
+
|
|
24
|
+
- **Hashes (HSET/HGET)**: Use Hashes to store objects instead of stringified JSON when you need to update or read individual fields.
|
|
25
|
+
- **Sets (SADD/SMEMBERS)**: Use Sets for unique collections (e.g., user IDs online) and quick membership checks.
|
|
26
|
+
- **Pipelines**: Use `MULTI`/`EXEC` or Pipelines to batch commands together and save network round trips.
|
|
27
|
+
|
|
28
|
+
## 4. Security
|
|
29
|
+
|
|
30
|
+
- Never expose the Redis port (`6379`) to the public internet. Ensure it is accessible only within a VPC or private network.
|
|
31
|
+
- Use TLS (`rediss://`) and authentication for managed instances (e.g., AWS ElastiCache, Render Redis).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: render
|
|
3
|
+
description: |
|
|
4
|
+
Render platform deployment and management best practices. Use when configuring render.yaml (Blueprint specs), deploying web services, background workers, cron jobs, or managing Render PostgreSQL/Redis instances. NOT for AWS, GCP, Azure, or generic container orchestration. Do NOT trigger for generic "deploy my app" requests without clarifying the target platform. SECURITY: Handle deployment failures explicitly. Never hardcode secrets; always use Render environment groups.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Render Deployment Best Practices
|
|
8
|
+
|
|
9
|
+
Guidelines for managing infrastructure and deploying applications on the Render platform.
|
|
10
|
+
|
|
11
|
+
## 1. Infrastructure as Code (render.yaml)
|
|
12
|
+
|
|
13
|
+
- **Blueprints**: Always use Render Blueprints (`render.yaml`) to define your infrastructure. This enables GitOps, ensures reproducibility, and prevents configuration drift in the dashboard.
|
|
14
|
+
- **Sync Environments**: Define multiple environments (e.g., staging, production) using environment-specific branches and `render.yaml` configurations.
|
|
15
|
+
|
|
16
|
+
## 2. Web Services & Background Workers
|
|
17
|
+
|
|
18
|
+
- **Health Checks**: Always define a `healthCheckPath` in `render.yaml`. Render uses this to ensure zero-downtime deployments. If the health check fails, the new deploy is aborted and the old version remains live.
|
|
19
|
+
- **Start Commands**: Ensure your start command starts a production-ready web server (e.g., `gunicorn`, `pm2`, or Node.js `server.js`). Do not use development servers (e.g., `npm run dev`, `flask run`) in production.
|
|
20
|
+
- **Background Workers**: Separate long-running tasks into Background Workers. Background Workers do not have exposed HTTP ports and won't be killed for failing to bind to a port (unlike Web Services).
|
|
21
|
+
|
|
22
|
+
## 3. Databases (PostgreSQL & Redis)
|
|
23
|
+
|
|
24
|
+
- **Internal Connections**: Always connect Web Services to Databases using the **Internal Database URL**. This traffic stays within Render's private network, which is faster and vastly more secure.
|
|
25
|
+
- **External Access**: Restrict external database access. If you must connect externally (e.g., for local debugging), use the Access Control list to whitelist specific IP addresses rather than allowing `0.0.0.0/0`.
|
|
26
|
+
- **Migrations**: Execute database migrations using the `preDeployCommand`. This runs before the new code goes live, ensuring the schema is ready for the new application version.
|
|
27
|
+
|
|
28
|
+
## 4. Environment Variables & Secrets
|
|
29
|
+
|
|
30
|
+
- **Secret Files**: For files like `.env`, use Render's Secret Files feature. Reference them in `render.yaml`.
|
|
31
|
+
- **Env Var Groups**: Group common environment variables (like AWS credentials or API keys used across multiple services) into Environment Groups and link them to services in your Blueprint.
|
|
32
|
+
|
|
33
|
+
## 5. Disks & Stateful Data
|
|
34
|
+
|
|
35
|
+
- **Persistent Disks**: Render's ephemeral filesystems are wiped on every deploy. If your application needs to store files locally (e.g., SQLite databases, uploaded images), you MUST attach a Persistent Disk to the service and mount it to the correct path.
|
package/skills/rust/SKILL.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
name: rust
|
|
3
3
|
description: |
|
|
4
|
-
Master Rust
|
|
4
|
+
Master production Rust code, lifetimes, and systems programming using a layer-based "meta-cognition" framework. Use whenever writing production Rust code, resolving borrow checker errors (E0382, E0596), designing ownership patterns (Arc, Mutex), or performing crate selection. Do NOT trigger for generic WASM or TS questions unless Rust is the primary focus. Do NOT trigger for generic 'build a server' requests unless the platform/language is explicitly specified.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Rust Development & Meta-Cognition
|
|
@@ -14,8 +14,8 @@ When solving Rust problems, **do not immediately write code.** Trace through the
|
|
|
14
14
|
|
|
15
15
|
What is the system trying to achieve?
|
|
16
16
|
|
|
17
|
-
- **Web Service:** Concurrent, async, low-latency (
|
|
18
|
-
- **CLI Tool:** Fast startup, zero overhead, clean exit codes (
|
|
17
|
+
- **Web Service:** Concurrent, async, low-latency (Often uses `axum`, `tokio`, `Arc<Mutex<T>>`).
|
|
18
|
+
- **CLI Tool:** Fast startup, zero overhead, clean exit codes (Often uses `clap`, `anyhow`, strict error formatting).
|
|
19
19
|
- **Embedded / Systems:** No heap allocation (Requires `no_std`, specific hardware limitations).
|
|
20
20
|
|
|
21
21
|
### Layer 2: Design Choices & Ownership (WHAT)
|
|
@@ -39,31 +39,13 @@ Use the compiler's strictness as a tool, not an obstacle.
|
|
|
39
39
|
|
|
40
40
|
## 🏗️ 2. Core Ecosystem Defaults
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
- **Async Runtime**: `tokio` (I/O bound) or `rayon` (CPU bound data-parallelism)
|
|
45
|
-
- **Web / API Server**: `axum` (built on tokio/hyper)
|
|
46
|
-
- **Serialization/Deserialization**: `serde` and `serde_json`
|
|
47
|
-
- **Error Handling**: `thiserror` (for libraries), `anyhow` or `color-eyre` (for binaries)
|
|
48
|
-
- **Command Line Parsing**: `clap`
|
|
49
|
-
- **Logging & Telemetry**: `tracing` and `tracing-subscriber`
|
|
50
|
-
- **HTTP Client**: `reqwest`
|
|
42
|
+
Consult [references/ecosystem.md](references/ecosystem.md) for canonical community crates.
|
|
51
43
|
|
|
52
44
|
---
|
|
53
45
|
|
|
54
46
|
## 🛡️ 3. Solving Borrow Checker Errors
|
|
55
47
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- **E0382 (Use of moved value):**
|
|
59
|
-
- _Symptom:_ You are trying to use a value after it was consumed.
|
|
60
|
-
- _Resolve:_ Does the function actually _need_ ownership? Borrow it instead (`&T`), `clone()` it if lightweight, or wrap in `Arc<T>` if access needs to be shared across threads.
|
|
61
|
-
- **E0596 (Cannot borrow as mutable):**
|
|
62
|
-
- _Symptom:_ You are mutating something behind an immutable reference `&T`.
|
|
63
|
-
- _Resolve:_ Change the signature to `&mut T`, or if you must have an immutable interface, use interior mutability (`Cell` or `Mutex`).
|
|
64
|
-
- **E0499 (Cannot borrow multiple times):**
|
|
65
|
-
- _Symptom:_ Alive mutable references colliding.
|
|
66
|
-
- _Resolve:_ Restructure the function to limit the reference's scope `{}`, or avoid holding mutable borrows across `await` points.
|
|
48
|
+
Consult [references/borrow-checker.md](references/borrow-checker.md) for diagnostics and resolution paths for common compiler errors (E0382, E0596, E0499).
|
|
67
49
|
|
|
68
50
|
---
|
|
69
51
|
|
|
@@ -71,7 +53,7 @@ When debugging compiler errors, trace **up** from the syntax error to the fundam
|
|
|
71
53
|
|
|
72
54
|
1. **Avoid Panic-Driven Development**: `clone()` is an acceptable escape hatch during prototyping, but do not scatter it throughout the code. Revisit the lifetime boundaries as soon as it works.
|
|
73
55
|
2. **The Newtype Pattern**: Use tuple structs to prevent invalid state. `struct UserId(u64);` avoids mixing it up with `struct OrderId(u64);`.
|
|
74
|
-
3. **Exhaustive Matching**:
|
|
56
|
+
3. **Exhaustive Matching**: Prefer `match` over `if let` when handling Enums or State Machines. The compiler will notify you when a new variant is added, preventing silent bugs.
|
|
75
57
|
4. **Data-Oriented Modeling**: Prefer small, flat structs that compose over deep, object-oriented inheritance hierarchies.
|
|
76
58
|
|
|
77
59
|
---
|
|
@@ -84,3 +66,11 @@ When debugging compiler errors, trace **up** from the syntax error to the fundam
|
|
|
84
66
|
- **Testing**: `cargo test`
|
|
85
67
|
|
|
86
68
|
**Agent Directive:** When writing or editing Rust code, always invoke `cargo clippy` and `cargo test` dynamically to validate your implementations before concluding your task.
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 🔒 6. Security & `unsafe` Blocks
|
|
73
|
+
|
|
74
|
+
Avoid `unsafe` blocks. If you must use `unsafe` for FFI or performance, you MUST thoroughly document the exact safety invariants being upheld inside the block.
|
|
75
|
+
|
|
76
|
+
Require user confirmation before executing any command with external side effects, including `cargo publish` and registry operations.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Solving Borrow Checker Errors
|
|
2
|
+
|
|
3
|
+
When debugging compiler errors, trace **up** from the syntax error to the fundamental design choice.
|
|
4
|
+
|
|
5
|
+
- **E0382 (Use of moved value):**
|
|
6
|
+
- _Symptom:_ You are trying to use a value after it was consumed.
|
|
7
|
+
- _Resolve:_ Does the function actually _need_ ownership? Borrow it instead (`&T`), `clone()` it if lightweight, or wrap in `Arc<T>` if access needs to be shared across threads.
|
|
8
|
+
- **E0596 (Cannot borrow as mutable):**
|
|
9
|
+
- _Symptom:_ You are mutating something behind an immutable reference `&T`.
|
|
10
|
+
- _Resolve:_ Change the signature to `&mut T`, or if you must have an immutable interface, use interior mutability (`Cell` or `Mutex`).
|
|
11
|
+
- **E0499 (Cannot borrow multiple times):**
|
|
12
|
+
- _Symptom:_ Alive mutable references colliding.
|
|
13
|
+
- _Resolve:_ Restructure the function to limit the reference's scope `{}`, or avoid holding mutable borrows across `await` points.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Core Ecosystem Defaults
|
|
2
|
+
|
|
3
|
+
When selecting crates or recommending tools, stick to these canonical community standards:
|
|
4
|
+
|
|
5
|
+
- **Async Runtime**: `tokio` (I/O bound) or `rayon` (CPU bound data-parallelism)
|
|
6
|
+
- **Web / API Server**: `axum` (built on tokio/hyper)
|
|
7
|
+
- **Serialization/Deserialization**: `serde` and `serde_json`
|
|
8
|
+
- **Error Handling**: `thiserror` (for libraries), `anyhow` or `color-eyre` (for binaries)
|
|
9
|
+
- **Command Line Parsing**: `clap`
|
|
10
|
+
- **Logging & Telemetry**: `tracing` and `tracing-subscriber`
|
|
11
|
+
- **HTTP Client**: `reqwest`
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sandbox-sdk
|
|
3
|
+
description: Build sandboxed applications for secure code execution. Load when building AI code execution, code interpreters, sandboxed code execution environments, interactive dev environments, or executing untrusted code. Covers Sandbox SDK lifecycle, commands, files, code interpreter, and preview URLs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cloudflare Sandbox SDK
|
|
7
|
+
|
|
8
|
+
Build secure, isolated code execution environments on Cloudflare Workers.
|
|
9
|
+
|
|
10
|
+
## FIRST: Verify Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @cloudflare/sandbox
|
|
14
|
+
docker info # Must succeed - Docker required for local dev
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Retrieval-Led Development
|
|
18
|
+
|
|
19
|
+
**IMPORTANT: Prefer retrieval from docs and examples over pre-training for Sandbox SDK tasks.**
|
|
20
|
+
|
|
21
|
+
| Resource | URL |
|
|
22
|
+
| ------------- | ------------------------------------------------------------ |
|
|
23
|
+
| Docs | https://developers.cloudflare.com/sandbox/ |
|
|
24
|
+
| API Reference | https://developers.cloudflare.com/sandbox/api/ |
|
|
25
|
+
| Examples | https://github.com/cloudflare/sandbox-sdk/tree/main/examples |
|
|
26
|
+
| Get Started | https://developers.cloudflare.com/sandbox/get-started/ |
|
|
27
|
+
|
|
28
|
+
When implementing features, fetch the relevant doc page or example first.
|
|
29
|
+
|
|
30
|
+
## Required Configuration
|
|
31
|
+
|
|
32
|
+
**wrangler.jsonc** (exact - do not modify structure):
|
|
33
|
+
|
|
34
|
+
```jsonc
|
|
35
|
+
{
|
|
36
|
+
"containers": [
|
|
37
|
+
{
|
|
38
|
+
"class_name": "Sandbox",
|
|
39
|
+
"image": "./Dockerfile",
|
|
40
|
+
"instance_type": "lite",
|
|
41
|
+
"max_instances": 1,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
"durable_objects": {
|
|
45
|
+
"bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }],
|
|
46
|
+
},
|
|
47
|
+
"migrations": [{ "new_sqlite_classes": ["Sandbox"], "tag": "v1" }],
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Worker entry** - must re-export Sandbox class:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
import { getSandbox } from '@cloudflare/sandbox'
|
|
55
|
+
export { Sandbox } from '@cloudflare/sandbox' // Required export
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Quick Reference
|
|
59
|
+
|
|
60
|
+
| Task | Method |
|
|
61
|
+
| ---------------------- | ------------------------------------------------------------ |
|
|
62
|
+
| Get sandbox | `getSandbox(env.Sandbox, 'user-123')` |
|
|
63
|
+
| Run command | `await sandbox.exec('python script.py')` |
|
|
64
|
+
| Run code (interpreter) | `await sandbox.runCode(code, { language: 'python' })` |
|
|
65
|
+
| Write file | `await sandbox.writeFile('/workspace/app.py', content)` |
|
|
66
|
+
| Read file | `await sandbox.readFile('/workspace/app.py')` |
|
|
67
|
+
| Create directory | `await sandbox.mkdir('/workspace/src', { recursive: true })` |
|
|
68
|
+
| List files | `await sandbox.listFiles('/workspace')` |
|
|
69
|
+
| Expose port | `await sandbox.exposePort(8080)` |
|
|
70
|
+
| Destroy | `await sandbox.destroy()` |
|
|
71
|
+
|
|
72
|
+
## Core Patterns
|
|
73
|
+
|
|
74
|
+
### Execute Commands
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
const sandbox = getSandbox(env.Sandbox, 'user-123')
|
|
78
|
+
const result = await sandbox.exec('python --version')
|
|
79
|
+
// result: { stdout, stderr, exitCode, success }
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Code Interpreter (Recommended for AI)
|
|
83
|
+
|
|
84
|
+
Use `runCode()` for executing LLM-generated code with rich outputs:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
const ctx = await sandbox.createCodeContext({ language: 'python' })
|
|
88
|
+
|
|
89
|
+
await sandbox.runCode('import pandas as pd; data = [1,2,3]', { context: ctx })
|
|
90
|
+
const result = await sandbox.runCode('sum(data)', { context: ctx })
|
|
91
|
+
// result.results[0].text = "6"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Languages**: `python`, `javascript`, `typescript`
|
|
95
|
+
|
|
96
|
+
State persists within context. Create explicit contexts for production.
|
|
97
|
+
|
|
98
|
+
### File Operations
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
await sandbox.mkdir('/workspace/project', { recursive: true })
|
|
102
|
+
await sandbox.writeFile('/workspace/project/main.py', code)
|
|
103
|
+
const file = await sandbox.readFile('/workspace/project/main.py')
|
|
104
|
+
const files = await sandbox.listFiles('/workspace/project')
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## When to Use What
|
|
108
|
+
|
|
109
|
+
| Need | Use | Why |
|
|
110
|
+
| ----------------------- | ----------- | ------------------------------- |
|
|
111
|
+
| Shell commands, scripts | `exec()` | Direct control, streaming |
|
|
112
|
+
| LLM-generated code | `runCode()` | Rich outputs, state persistence |
|
|
113
|
+
| Build/test pipelines | `exec()` | Exit codes, stderr capture |
|
|
114
|
+
| Data analysis | `runCode()` | Charts, tables, pandas |
|
|
115
|
+
|
|
116
|
+
## Extending the Dockerfile
|
|
117
|
+
|
|
118
|
+
Base image (`docker.io/cloudflare/sandbox:0.7.0`) includes Python 3.11, Node.js 20, and common tools.
|
|
119
|
+
|
|
120
|
+
Add dependencies by extending the Dockerfile:
|
|
121
|
+
|
|
122
|
+
```dockerfile
|
|
123
|
+
FROM docker.io/cloudflare/sandbox:latest
|
|
124
|
+
# Pin to specific version in production: `npx wrangler versions latest sandbox`
|
|
125
|
+
|
|
126
|
+
# Python packages
|
|
127
|
+
RUN pip install requests beautifulsoup4
|
|
128
|
+
|
|
129
|
+
# Node packages (global)
|
|
130
|
+
RUN npm install -g typescript
|
|
131
|
+
|
|
132
|
+
# System packages
|
|
133
|
+
RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*
|
|
134
|
+
|
|
135
|
+
EXPOSE 8080 # Required for local dev port exposure
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Keep images lean - affects cold start time.
|
|
139
|
+
|
|
140
|
+
## Preview URLs (Port Exposure)
|
|
141
|
+
|
|
142
|
+
Expose HTTP services running in sandboxes:
|
|
143
|
+
|
|
144
|
+
```typescript
|
|
145
|
+
const { url } = await sandbox.exposePort(8080)
|
|
146
|
+
// Returns preview URL for the service
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**Production requirement**: Preview URLs need a custom domain with wildcard DNS (`*.yourdomain.com`). The `.workers.dev` domain does not support preview URL subdomains.
|
|
150
|
+
|
|
151
|
+
See: https://developers.cloudflare.com/sandbox/guides/expose-services/
|
|
152
|
+
|
|
153
|
+
## OpenAI Agents SDK Integration
|
|
154
|
+
|
|
155
|
+
The SDK provides helpers for OpenAI Agents at `@cloudflare/sandbox/openai`:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
import { Shell, Editor } from '@cloudflare/sandbox/openai'
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
See `examples/openai-agents` for complete integration pattern.
|
|
162
|
+
|
|
163
|
+
## Sandbox Lifecycle
|
|
164
|
+
|
|
165
|
+
- `getSandbox()` returns immediately - container starts lazily on first operation
|
|
166
|
+
- Containers sleep after 10 minutes of inactivity (configurable via `sleepAfter`)
|
|
167
|
+
- Use `destroy()` to immediately free resources
|
|
168
|
+
- Same `sandboxId` always returns same sandbox instance
|
|
169
|
+
|
|
170
|
+
## Anti-Patterns
|
|
171
|
+
|
|
172
|
+
- **Don't use internal clients** (`CommandClient`, `FileClient`) - use `sandbox.*` methods
|
|
173
|
+
- **Don't skip the Sandbox export** - Worker won't deploy without `export { Sandbox }`
|
|
174
|
+
- **Don't hardcode sandbox IDs for multi-user** - use user/session identifiers
|
|
175
|
+
- **Don't forget cleanup** - call `destroy()` for temporary sandboxes
|
|
176
|
+
|
|
177
|
+
## Detailed References
|
|
178
|
+
|
|
179
|
+
- **[references/api-quick-ref.md](references/api-quick-ref.md)** - Full API with options and return types
|
|
180
|
+
- **[references/examples.md](references/examples.md)** - Example index with use cases
|
|
181
|
+
|
|
182
|
+
## Security
|
|
183
|
+
|
|
184
|
+
- **Command Injection**: Never pass unsanitized user input to `exec()`. EXPLICITLY BANNED: String interpolation (e.g. ``exec(`ls ${userInput}`)``) into exec calls. Prefer `runCode()` with language constraints for LLM-generated code.
|
|
185
|
+
- **Resource Limits**: Implement per-user rate limiting. Set `sleepAfter` to cap idle resource consumption. Always set explicit timeouts on commands (e.g. using `timeout` or the SDK's execution limits).
|
|
186
|
+
- **Allowlists**: Enforce allowlists for binaries/commands when executing untrusted input.
|