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,170 @@
|
|
|
1
|
+
# Gotchas & Troubleshooting
|
|
2
|
+
|
|
3
|
+
Common problems → causes → solutions.
|
|
4
|
+
|
|
5
|
+
## Permission Errors
|
|
6
|
+
|
|
7
|
+
### 401 Unauthorized
|
|
8
|
+
|
|
9
|
+
**Error:** `"401 Unauthorized"`
|
|
10
|
+
**Cause:** Token missing R2 Data Catalog permissions.
|
|
11
|
+
**Solution:** Use "Admin Read & Write" token (includes catalog + storage permissions). Test with `catalog.list_namespaces()`.
|
|
12
|
+
|
|
13
|
+
### 403 Forbidden
|
|
14
|
+
|
|
15
|
+
**Error:** `"403 Forbidden"` on data files
|
|
16
|
+
**Cause:** Token lacks storage permissions.
|
|
17
|
+
**Solution:** Token needs both R2 Data Catalog + R2 Storage Bucket Item permissions.
|
|
18
|
+
|
|
19
|
+
### Token Rotation Issues
|
|
20
|
+
|
|
21
|
+
**Error:** New token fails after rotation.
|
|
22
|
+
**Solution:** Create new token → test in staging → update prod → monitor 24h → revoke old.
|
|
23
|
+
|
|
24
|
+
## Catalog URI Issues
|
|
25
|
+
|
|
26
|
+
### 404 Not Found
|
|
27
|
+
|
|
28
|
+
**Error:** `"404 Catalog not found"`
|
|
29
|
+
**Cause:** Catalog not enabled or wrong URI.
|
|
30
|
+
**Solution:** Run `wrangler r2 bucket catalog enable <bucket>`. URI must be HTTPS with `/iceberg/` and case-sensitive bucket name.
|
|
31
|
+
|
|
32
|
+
### Wrong Warehouse
|
|
33
|
+
|
|
34
|
+
**Error:** Cannot create/load tables.
|
|
35
|
+
**Cause:** Warehouse ≠ bucket name.
|
|
36
|
+
**Solution:** Set `warehouse="bucket-name"` to match bucket exactly.
|
|
37
|
+
|
|
38
|
+
## Table and Schema Issues
|
|
39
|
+
|
|
40
|
+
### Table/Namespace Already Exists
|
|
41
|
+
|
|
42
|
+
**Error:** `"TableAlreadyExistsError"`
|
|
43
|
+
**Solution:** Use try/except to load existing or check first.
|
|
44
|
+
|
|
45
|
+
### Namespace Not Found
|
|
46
|
+
|
|
47
|
+
**Error:** Cannot create table.
|
|
48
|
+
**Solution:** Create namespace first: `catalog.create_namespace("ns")`
|
|
49
|
+
|
|
50
|
+
### Schema Evolution Errors
|
|
51
|
+
|
|
52
|
+
**Error:** `"422 Validation"` on schema update.
|
|
53
|
+
**Cause:** Incompatible change (required field, type shrink).
|
|
54
|
+
**Solution:** Only add nullable columns, compatible type widening (int→long, float→double).
|
|
55
|
+
|
|
56
|
+
## Data and Query Issues
|
|
57
|
+
|
|
58
|
+
### Empty Scan Results
|
|
59
|
+
|
|
60
|
+
**Error:** Scan returns no data.
|
|
61
|
+
**Cause:** Incorrect filter or partition column.
|
|
62
|
+
**Solution:** Test without filter first: `table.scan().to_pandas()`. Verify partition column names.
|
|
63
|
+
|
|
64
|
+
### Slow Queries
|
|
65
|
+
|
|
66
|
+
**Error:** Performance degrades over time.
|
|
67
|
+
**Cause:** Too many small files.
|
|
68
|
+
**Solution:** Check file count, compact if >1000 or avg <10MB. See [api.md](api.md#compaction).
|
|
69
|
+
|
|
70
|
+
### Type Mismatch
|
|
71
|
+
|
|
72
|
+
**Error:** `"Cannot cast"` on append.
|
|
73
|
+
**Cause:** PyArrow types don't match Iceberg schema.
|
|
74
|
+
**Solution:** Cast to int64 (Iceberg default), not int32. Check `table.schema()`.
|
|
75
|
+
|
|
76
|
+
## Compaction Issues
|
|
77
|
+
|
|
78
|
+
### Compaction Issues
|
|
79
|
+
|
|
80
|
+
**Problem:** File count unchanged or compaction takes hours.
|
|
81
|
+
**Cause:** Target size too large, or table too big for PyIceberg.
|
|
82
|
+
**Solution:** Only compact if avg <50MB. For >1TB tables, use Spark. Run during low-traffic periods.
|
|
83
|
+
|
|
84
|
+
## Maintenance Issues
|
|
85
|
+
|
|
86
|
+
### Snapshot/Orphan Issues
|
|
87
|
+
|
|
88
|
+
**Problem:** Expiration fails or orphan cleanup deletes active data.
|
|
89
|
+
**Cause:** Too aggressive retention or wrong order.
|
|
90
|
+
**Solution:** Always expire snapshots first with `retain_last=10`, then cleanup orphans with 3+ day threshold.
|
|
91
|
+
|
|
92
|
+
## Concurrency Issues
|
|
93
|
+
|
|
94
|
+
### Concurrent Write Conflicts
|
|
95
|
+
|
|
96
|
+
**Problem:** `CommitFailedException` with multiple writers.
|
|
97
|
+
**Cause:** Optimistic locking - simultaneous commits.
|
|
98
|
+
**Solution:** Add retry with exponential backoff (see [patterns.md](patterns.md#pattern-6-concurrent-writes-with-retry)).
|
|
99
|
+
|
|
100
|
+
### Stale Metadata
|
|
101
|
+
|
|
102
|
+
**Problem:** Old schema/data after external update.
|
|
103
|
+
**Cause:** Cached metadata.
|
|
104
|
+
**Solution:** Reload table: `table = catalog.load_table(("ns", "table"))`
|
|
105
|
+
|
|
106
|
+
## Performance Optimization
|
|
107
|
+
|
|
108
|
+
### Performance Tips
|
|
109
|
+
|
|
110
|
+
**Scans:** Use `row_filter` and `selected_fields` to reduce data scanned.
|
|
111
|
+
**Partitions:** 100-1000 optimal. Avoid high cardinality (millions) or low (<10).
|
|
112
|
+
**Files:** Keep 100-500MB avg. Compact if <10MB or >10k files.
|
|
113
|
+
|
|
114
|
+
## Limits
|
|
115
|
+
|
|
116
|
+
| Resource | Recommended | Impact if Exceeded |
|
|
117
|
+
| ---------------- | ----------- | ------------------- |
|
|
118
|
+
| Tables/namespace | <10k | Slow list ops |
|
|
119
|
+
| Files/table | <100k | Slow query planning |
|
|
120
|
+
| Partitions/table | 100-1k | Metadata overhead |
|
|
121
|
+
| Snapshots/table | Expire >7d | Metadata bloat |
|
|
122
|
+
|
|
123
|
+
## Common Error Messages Reference
|
|
124
|
+
|
|
125
|
+
| Error Message | Likely Cause | Fix |
|
|
126
|
+
| ----------------------------- | -------------------------------- | ------------------------------------------- |
|
|
127
|
+
| `401 Unauthorized` | Missing/invalid token | Check token has catalog+storage permissions |
|
|
128
|
+
| `403 Forbidden` | Token lacks storage permissions | Add R2 Storage Bucket Item permission |
|
|
129
|
+
| `404 Not Found` | Catalog not enabled or wrong URI | Run `wrangler r2 bucket catalog enable` |
|
|
130
|
+
| `409 Conflict` | Table/namespace already exists | Use try/except or load existing |
|
|
131
|
+
| `422 Unprocessable Entity` | Schema validation failed | Check type compatibility, required fields |
|
|
132
|
+
| `CommitFailedException` | Concurrent write conflict | Add retry logic with backoff |
|
|
133
|
+
| `NamespaceAlreadyExistsError` | Namespace exists | Use try/except or load existing |
|
|
134
|
+
| `NoSuchTableError` | Table doesn't exist | Check namespace+table name, create first |
|
|
135
|
+
| `TypeError: Cannot cast` | PyArrow type mismatch | Cast data to match Iceberg schema |
|
|
136
|
+
|
|
137
|
+
## Debugging Checklist
|
|
138
|
+
|
|
139
|
+
When things go wrong, check in order:
|
|
140
|
+
|
|
141
|
+
1. ✅ **Catalog enabled:** `npx wrangler r2 bucket catalog status <bucket>`
|
|
142
|
+
2. ✅ **Token permissions:** Both R2 Data Catalog + R2 Storage in dashboard
|
|
143
|
+
3. ✅ **Connection test:** `catalog.list_namespaces()` succeeds
|
|
144
|
+
4. ✅ **URI format:** HTTPS, includes `/iceberg/`, correct bucket name
|
|
145
|
+
5. ✅ **Warehouse name:** Matches bucket name exactly
|
|
146
|
+
6. ✅ **Namespace exists:** Create before `create_table()`
|
|
147
|
+
7. ✅ **Enable debug logging:** `logging.basicConfig(level=logging.DEBUG)`
|
|
148
|
+
8. ✅ **PyIceberg version:** `pip install --upgrade pyiceberg` (≥0.5.0)
|
|
149
|
+
9. ✅ **File health:** Compact if >1000 files or avg <10MB
|
|
150
|
+
10. ✅ **Snapshot count:** Expire if >100 snapshots
|
|
151
|
+
|
|
152
|
+
## Enable Debug Logging
|
|
153
|
+
|
|
154
|
+
```python
|
|
155
|
+
import logging
|
|
156
|
+
logging.basicConfig(level=logging.DEBUG)
|
|
157
|
+
# Now operations show HTTP requests/responses
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Resources
|
|
161
|
+
|
|
162
|
+
- [Cloudflare Community](https://community.cloudflare.com/c/developers/workers/40)
|
|
163
|
+
- [Cloudflare Discord](https://discord.cloudflare.com) - #r2 channel
|
|
164
|
+
- [PyIceberg GitHub](https://github.com/apache/iceberg-python/issues)
|
|
165
|
+
- [Apache Iceberg Slack](https://iceberg.apache.org/community/)
|
|
166
|
+
|
|
167
|
+
## Next Steps
|
|
168
|
+
|
|
169
|
+
- [patterns.md](patterns.md) - Working examples
|
|
170
|
+
- [api.md](api.md) - API reference
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Common Patterns
|
|
2
|
+
|
|
3
|
+
Practical patterns for R2 Data Catalog with PyIceberg.
|
|
4
|
+
|
|
5
|
+
## PyIceberg Connection
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
import os
|
|
9
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
10
|
+
from pyiceberg.exceptions import NamespaceAlreadyExistsError
|
|
11
|
+
|
|
12
|
+
catalog = RestCatalog(
|
|
13
|
+
name="r2_catalog",
|
|
14
|
+
warehouse=os.getenv("R2_WAREHOUSE"), # bucket name
|
|
15
|
+
uri=os.getenv("R2_CATALOG_URI"), # catalog endpoint
|
|
16
|
+
token=os.getenv("R2_TOKEN"), # API token
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Create namespace (idempotent)
|
|
20
|
+
try:
|
|
21
|
+
catalog.create_namespace("default")
|
|
22
|
+
except NamespaceAlreadyExistsError:
|
|
23
|
+
pass
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Pattern 1: Log Analytics Pipeline
|
|
27
|
+
|
|
28
|
+
Ingest logs incrementally, query by time/level.
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
import pyarrow as pa
|
|
32
|
+
from datetime import datetime
|
|
33
|
+
from pyiceberg.schema import Schema
|
|
34
|
+
from pyiceberg.types import NestedField, TimestampType, StringType, IntegerType
|
|
35
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
36
|
+
from pyiceberg.transforms import DayTransform
|
|
37
|
+
|
|
38
|
+
# Create partitioned table (once)
|
|
39
|
+
schema = Schema(
|
|
40
|
+
NestedField(1, "timestamp", TimestampType(), required=True),
|
|
41
|
+
NestedField(2, "level", StringType(), required=True),
|
|
42
|
+
NestedField(3, "service", StringType(), required=True),
|
|
43
|
+
NestedField(4, "message", StringType(), required=False),
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
partition_spec = PartitionSpec(
|
|
47
|
+
PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day")
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
catalog.create_namespace("logs")
|
|
51
|
+
table = catalog.create_table(("logs", "app_logs"), schema=schema, partition_spec=partition_spec)
|
|
52
|
+
|
|
53
|
+
# Append logs (incremental)
|
|
54
|
+
data = pa.table({
|
|
55
|
+
"timestamp": [datetime(2026, 1, 27, 10, 30, 0)],
|
|
56
|
+
"level": ["ERROR"],
|
|
57
|
+
"service": ["auth-service"],
|
|
58
|
+
"message": ["Failed login"],
|
|
59
|
+
})
|
|
60
|
+
table.append(data)
|
|
61
|
+
|
|
62
|
+
# Query by time + level (leverages partitioning)
|
|
63
|
+
scan = table.scan(row_filter="level = 'ERROR' AND day = '2026-01-27'")
|
|
64
|
+
errors = scan.to_pandas()
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Pattern 2: Time-Travel Queries
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
from datetime import datetime, timedelta
|
|
71
|
+
|
|
72
|
+
table = catalog.load_table(("logs", "app_logs"))
|
|
73
|
+
|
|
74
|
+
# Query specific snapshot
|
|
75
|
+
snapshot_id = table.current_snapshot().snapshot_id
|
|
76
|
+
data = table.scan(snapshot_id=snapshot_id).to_pandas()
|
|
77
|
+
|
|
78
|
+
# Query as of timestamp (yesterday)
|
|
79
|
+
yesterday_ms = int((datetime.now() - timedelta(days=1)).timestamp() * 1000)
|
|
80
|
+
data = table.scan(as_of_timestamp=yesterday_ms).to_pandas()
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Pattern 3: Schema Evolution
|
|
84
|
+
|
|
85
|
+
```python
|
|
86
|
+
from pyiceberg.types import StringType
|
|
87
|
+
|
|
88
|
+
table = catalog.load_table(("users", "profiles"))
|
|
89
|
+
|
|
90
|
+
with table.update_schema() as update:
|
|
91
|
+
update.add_column("email", StringType(), required=False)
|
|
92
|
+
update.rename_column("name", "full_name")
|
|
93
|
+
# Old readers ignore new columns, new readers see nulls for old data
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Pattern 4: Partitioned Tables
|
|
97
|
+
|
|
98
|
+
```python
|
|
99
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
100
|
+
from pyiceberg.transforms import DayTransform, IdentityTransform
|
|
101
|
+
|
|
102
|
+
# Partition by day + country
|
|
103
|
+
partition_spec = PartitionSpec(
|
|
104
|
+
PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day"),
|
|
105
|
+
PartitionField(source_id=2, field_id=1001, transform=IdentityTransform(), name="country"),
|
|
106
|
+
)
|
|
107
|
+
table = catalog.create_table(("events", "user_events"), schema=schema, partition_spec=partition_spec)
|
|
108
|
+
|
|
109
|
+
# Queries prune partitions automatically
|
|
110
|
+
scan = table.scan(row_filter="country = 'US' AND day = '2026-01-27'")
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Pattern 5: Table Maintenance
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
from datetime import datetime, timedelta
|
|
117
|
+
|
|
118
|
+
table = catalog.load_table(("logs", "app_logs"))
|
|
119
|
+
|
|
120
|
+
# Compact → expire → cleanup (in order)
|
|
121
|
+
table.rewrite_data_files(target_file_size_bytes=128 * 1024 * 1024)
|
|
122
|
+
seven_days_ms = int((datetime.now() - timedelta(days=7)).timestamp() * 1000)
|
|
123
|
+
table.expire_snapshots(older_than=seven_days_ms, retain_last=10)
|
|
124
|
+
three_days_ms = int((datetime.now() - timedelta(days=3)).timestamp() * 1000)
|
|
125
|
+
table.delete_orphan_files(older_than=three_days_ms)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
See [api.md](api.md#table-maintenance) for detailed parameters.
|
|
129
|
+
|
|
130
|
+
## Pattern 6: Concurrent Writes with Retry
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
from pyiceberg.exceptions import CommitFailedException
|
|
134
|
+
import time
|
|
135
|
+
|
|
136
|
+
def append_with_retry(table, data, max_retries=3):
|
|
137
|
+
for attempt in range(max_retries):
|
|
138
|
+
try:
|
|
139
|
+
table.append(data)
|
|
140
|
+
return
|
|
141
|
+
except CommitFailedException:
|
|
142
|
+
if attempt == max_retries - 1:
|
|
143
|
+
raise
|
|
144
|
+
time.sleep(2 ** attempt)
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Pattern 7: Upsert Simulation
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
import pandas as pd
|
|
151
|
+
import pyarrow as pa
|
|
152
|
+
|
|
153
|
+
# Read → merge → overwrite (not atomic, use Spark MERGE INTO for production)
|
|
154
|
+
existing = table.scan().to_pandas()
|
|
155
|
+
new_data = pd.DataFrame({"id": [1, 3], "value": [100, 300]})
|
|
156
|
+
merged = pd.concat([existing, new_data]).drop_duplicates(subset=["id"], keep="last")
|
|
157
|
+
table.overwrite(pa.Table.from_pandas(merged))
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Pattern 8: DuckDB Integration
|
|
161
|
+
|
|
162
|
+
```python
|
|
163
|
+
import duckdb
|
|
164
|
+
|
|
165
|
+
arrow_table = table.scan().to_arrow()
|
|
166
|
+
con = duckdb.connect()
|
|
167
|
+
con.register("logs", arrow_table)
|
|
168
|
+
result = con.execute("SELECT level, COUNT(*) FROM logs GROUP BY level").fetchdf()
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Pattern 9: Monitor Table Health
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
files = table.scan().plan_files()
|
|
175
|
+
avg_mb = sum(f.file_size_in_bytes for f in files) / len(files) / (1024**2)
|
|
176
|
+
print(f"Files: {len(files)}, Avg: {avg_mb:.1f}MB, Snapshots: {len(table.snapshots())}")
|
|
177
|
+
|
|
178
|
+
if avg_mb < 10 or len(files) > 1000:
|
|
179
|
+
print("⚠️ Needs compaction")
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Best Practices
|
|
183
|
+
|
|
184
|
+
| Area | Guideline |
|
|
185
|
+
| ---------------- | ------------------------------------------------------------------------------ |
|
|
186
|
+
| **Partitioning** | Use day/hour for time-series; 100-1000 partitions; avoid high cardinality |
|
|
187
|
+
| **File sizes** | Target 128-512MB; compact when avg <10MB or >10k files |
|
|
188
|
+
| **Schema** | Add columns as nullable (`required=False`); batch changes |
|
|
189
|
+
| **Maintenance** | Compact high-write daily/weekly; expire snapshots 7-30d; cleanup orphans after |
|
|
190
|
+
| **Concurrency** | Reads automatic; writes to different partitions safe; retry same partition |
|
|
191
|
+
| **Performance** | Filter on partitions; select only needed columns; batch appends 100MB+ |
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Cloudflare R2 SQL Skill Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for Cloudflare R2 SQL - serverless distributed query engine for Apache Iceberg tables.
|
|
4
|
+
|
|
5
|
+
## Reading Order
|
|
6
|
+
|
|
7
|
+
**New to R2 SQL?** Start here:
|
|
8
|
+
|
|
9
|
+
1. Read "What is R2 SQL?" and "When to Use" below
|
|
10
|
+
2. [configuration.md](configuration.md) - Enable catalog, create tokens
|
|
11
|
+
3. [patterns.md](patterns.md) - Wrangler CLI and integration examples
|
|
12
|
+
4. [api.md](api.md) - SQL syntax and query reference
|
|
13
|
+
5. [gotchas.md](gotchas.md) - Limitations and troubleshooting
|
|
14
|
+
|
|
15
|
+
**Quick reference?** Jump to:
|
|
16
|
+
|
|
17
|
+
- [Run a query via Wrangler](patterns.md#wrangler-cli-query)
|
|
18
|
+
- [SQL syntax reference](api.md#sql-syntax)
|
|
19
|
+
- [ORDER BY limitations](gotchas.md#order-by-limitations)
|
|
20
|
+
|
|
21
|
+
## What is R2 SQL?
|
|
22
|
+
|
|
23
|
+
R2 SQL is Cloudflare's **serverless distributed analytics query engine** for querying Apache Iceberg tables in R2 Data Catalog. Features:
|
|
24
|
+
|
|
25
|
+
- **Serverless** - No clusters to manage, no infrastructure
|
|
26
|
+
- **Distributed** - Leverages Cloudflare's global network for parallel execution
|
|
27
|
+
- **SQL interface** - Familiar SQL syntax for analytics queries
|
|
28
|
+
- **Zero egress fees** - Query from any cloud/region without data transfer costs
|
|
29
|
+
- **Open beta** - Free during beta (standard R2 storage costs apply)
|
|
30
|
+
|
|
31
|
+
### What is Apache Iceberg?
|
|
32
|
+
|
|
33
|
+
Open table format for large-scale analytics datasets in object storage:
|
|
34
|
+
|
|
35
|
+
- **ACID transactions** - Safe concurrent reads/writes
|
|
36
|
+
- **Metadata optimization** - Fast queries without full table scans
|
|
37
|
+
- **Schema evolution** - Add/rename/drop columns without rewrites
|
|
38
|
+
- **Partitioning** - Organize data for efficient pruning
|
|
39
|
+
|
|
40
|
+
## When to Use
|
|
41
|
+
|
|
42
|
+
**Use R2 SQL for:**
|
|
43
|
+
|
|
44
|
+
- **Log analytics** - Query application/system logs with WHERE filters and aggregations
|
|
45
|
+
- **BI dashboards** - Generate reports from large analytical datasets
|
|
46
|
+
- **Fraud detection** - Analyze transaction patterns with GROUP BY/HAVING
|
|
47
|
+
- **Multi-cloud analytics** - Query data from any cloud without egress fees
|
|
48
|
+
- **Ad-hoc exploration** - Run SQL queries on Iceberg tables via Wrangler CLI
|
|
49
|
+
|
|
50
|
+
**Don't use R2 SQL for:**
|
|
51
|
+
|
|
52
|
+
- **Workers/Pages runtime** - R2 SQL has no Workers binding, use HTTP API from external systems
|
|
53
|
+
- **Real-time queries (<100ms)** - Optimized for analytical batch queries, not OLTP
|
|
54
|
+
- **Complex joins/CTEs** - Limited SQL feature set (no JOINs, subqueries, CTEs currently)
|
|
55
|
+
- **Small datasets (<1GB)** - Setup overhead not justified
|
|
56
|
+
|
|
57
|
+
## Decision Tree: Need to Query R2 Data?
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Do you need to query structured data in R2?
|
|
61
|
+
├─ YES, data is in Iceberg tables
|
|
62
|
+
│ ├─ Need SQL interface? → Use R2 SQL (this reference)
|
|
63
|
+
│ ├─ Need Python API? → See r2-data-catalog reference (PyIceberg)
|
|
64
|
+
│ └─ Need other engine? → See r2-data-catalog reference (Spark, Trino, etc.)
|
|
65
|
+
│
|
|
66
|
+
├─ YES, but not in Iceberg format
|
|
67
|
+
│ ├─ Streaming data? → Use Pipelines to write to Data Catalog, then R2 SQL
|
|
68
|
+
│ └─ Static files? → Use PyIceberg to create Iceberg tables, then R2 SQL
|
|
69
|
+
│
|
|
70
|
+
└─ NO, just need object storage → Use R2 reference (not R2 SQL)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Architecture Overview
|
|
74
|
+
|
|
75
|
+
**Query Planner:**
|
|
76
|
+
|
|
77
|
+
- Top-down metadata investigation with multi-layer pruning
|
|
78
|
+
- Partition-level, column-level, and row-group pruning
|
|
79
|
+
- Streaming pipeline - execution starts before planning completes
|
|
80
|
+
- Early termination with LIMIT - stops when result complete
|
|
81
|
+
|
|
82
|
+
**Query Execution:**
|
|
83
|
+
|
|
84
|
+
- Coordinator distributes work to workers across Cloudflare network
|
|
85
|
+
- Workers run Apache DataFusion for parallel query execution
|
|
86
|
+
- Parquet column pruning - reads only required columns
|
|
87
|
+
- Ranged reads from R2 for efficiency
|
|
88
|
+
|
|
89
|
+
**Aggregation Strategies:**
|
|
90
|
+
|
|
91
|
+
- Scatter-gather - simple aggregations (SUM, COUNT, AVG)
|
|
92
|
+
- Shuffling - ORDER BY/HAVING on aggregates via hash partitioning
|
|
93
|
+
|
|
94
|
+
## Quick Start
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# 1. Enable R2 Data Catalog on bucket
|
|
98
|
+
npx wrangler r2 bucket catalog enable my-bucket
|
|
99
|
+
|
|
100
|
+
# 2. Create API token (Admin Read & Write)
|
|
101
|
+
# Dashboard: R2 → Manage API tokens → Create API token
|
|
102
|
+
|
|
103
|
+
# 3. Set environment variable
|
|
104
|
+
export WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
|
|
105
|
+
|
|
106
|
+
# 4. Run query
|
|
107
|
+
npx wrangler r2 sql query "my-bucket" "SELECT * FROM default.my_table LIMIT 10"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Important Limitations
|
|
111
|
+
|
|
112
|
+
**CRITICAL: No Workers Binding**
|
|
113
|
+
|
|
114
|
+
- R2 SQL cannot be called directly from Workers/Pages code
|
|
115
|
+
- For programmatic access, use HTTP API from external systems
|
|
116
|
+
- Or query via PyIceberg, Spark, etc. (see r2-data-catalog reference)
|
|
117
|
+
|
|
118
|
+
**SQL Feature Set:**
|
|
119
|
+
|
|
120
|
+
- No JOINs, CTEs, subqueries, window functions
|
|
121
|
+
- ORDER BY supports aggregation columns (not just partition keys)
|
|
122
|
+
- LIMIT max 10,000 (default 500)
|
|
123
|
+
- See [gotchas.md](gotchas.md) for complete limitations
|
|
124
|
+
|
|
125
|
+
## In This Reference
|
|
126
|
+
|
|
127
|
+
- **[configuration.md](configuration.md)** - Enable catalog, create API tokens
|
|
128
|
+
- **[api.md](api.md)** - SQL syntax, functions, operators, data types
|
|
129
|
+
- **[patterns.md](patterns.md)** - Wrangler CLI, HTTP API, Pipelines, PyIceberg
|
|
130
|
+
- **[gotchas.md](gotchas.md)** - Limitations, troubleshooting, performance tips
|
|
131
|
+
|
|
132
|
+
## See Also
|
|
133
|
+
|
|
134
|
+
- [r2-data-catalog](../r2-data-catalog/) - PyIceberg, REST API, external engines
|
|
135
|
+
- [pipelines](../pipelines/) - Streaming ingestion to Iceberg tables
|
|
136
|
+
- [r2](../r2/) - R2 object storage fundamentals
|
|
137
|
+
- [Cloudflare R2 SQL Docs](https://developers.cloudflare.com/r2-sql/)
|
|
138
|
+
- [R2 SQL Deep Dive Blog](https://blog.cloudflare.com/r2-sql-deep-dive/)
|