memory-journal-mcp 7.7.1 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-6LPTBIB6.js → chunk-MWNLAEHR.js} +309 -4332
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +6 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Vectorize Configuration
|
|
2
|
+
|
|
3
|
+
## Create Index
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npx wrangler vectorize create my-index --dimensions=768 --metric=cosine
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**⚠️ Dimensions and metric are immutable** - cannot change after creation.
|
|
10
|
+
|
|
11
|
+
## Worker Binding
|
|
12
|
+
|
|
13
|
+
```jsonc
|
|
14
|
+
// wrangler.jsonc
|
|
15
|
+
{
|
|
16
|
+
"vectorize": [{ "binding": "VECTORIZE", "index_name": "my-index" }],
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
interface Env {
|
|
22
|
+
VECTORIZE: Vectorize
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Metadata Indexes
|
|
27
|
+
|
|
28
|
+
**Must create BEFORE inserting vectors** - existing vectors not retroactively indexed.
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
wrangler vectorize create-metadata-index my-index --property-name=category --type=string
|
|
32
|
+
wrangler vectorize create-metadata-index my-index --property-name=price --type=number
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
| Type | Use For |
|
|
36
|
+
| --------- | ----------------------------------------- |
|
|
37
|
+
| `string` | Categories, tags (first 64 bytes indexed) |
|
|
38
|
+
| `number` | Prices, timestamps |
|
|
39
|
+
| `boolean` | Flags |
|
|
40
|
+
|
|
41
|
+
## CLI Commands
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Index management
|
|
45
|
+
wrangler vectorize list
|
|
46
|
+
wrangler vectorize info <index-name>
|
|
47
|
+
wrangler vectorize delete <index-name>
|
|
48
|
+
|
|
49
|
+
# Vector operations
|
|
50
|
+
wrangler vectorize insert <index-name> --file=embeddings.ndjson
|
|
51
|
+
wrangler vectorize get <index-name> --ids=id1,id2
|
|
52
|
+
wrangler vectorize delete-by-ids <index-name> --ids=id1,id2
|
|
53
|
+
|
|
54
|
+
# Metadata indexes
|
|
55
|
+
wrangler vectorize list-metadata-index <index-name>
|
|
56
|
+
wrangler vectorize delete-metadata-index <index-name> --property-name=field
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Bulk Upload (NDJSON)
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{"id": "1", "values": [0.1, 0.2, ...], "metadata": {"category": "docs"}}
|
|
63
|
+
{"id": "2", "values": [0.4, 0.5, ...], "namespace": "tenant-abc"}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Limits:** 5000 vectors per file, 100 MB max
|
|
67
|
+
|
|
68
|
+
## Cardinality Best Practice
|
|
69
|
+
|
|
70
|
+
Bucket high-cardinality data:
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
// ❌ Millisecond timestamps
|
|
74
|
+
metadata: {
|
|
75
|
+
timestamp: Date.now()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// ✅ 5-minute buckets
|
|
79
|
+
metadata: {
|
|
80
|
+
timestamp_bucket: Math.floor(Date.now() / 300000) * 300000
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Production Checklist
|
|
85
|
+
|
|
86
|
+
1. Create index with correct dimensions
|
|
87
|
+
2. Create metadata indexes FIRST
|
|
88
|
+
3. Test bulk upload
|
|
89
|
+
4. Configure bindings
|
|
90
|
+
5. Deploy Worker
|
|
91
|
+
6. Verify queries
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Vectorize Gotchas
|
|
2
|
+
|
|
3
|
+
## Critical Warnings
|
|
4
|
+
|
|
5
|
+
### Async Mutations
|
|
6
|
+
|
|
7
|
+
Insert/upsert/delete return immediately but vectors aren't queryable for 5-10 seconds.
|
|
8
|
+
|
|
9
|
+
### Batch Size Limit
|
|
10
|
+
|
|
11
|
+
**Workers API: 500 vectors max per call** (undocumented, silently truncates)
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
// ✅ Chunk into 500
|
|
15
|
+
for (let i = 0; i < vectors.length; i += 500) {
|
|
16
|
+
await env.VECTORIZE.upsert(vectors.slice(i, i + 500))
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Metadata Truncation
|
|
21
|
+
|
|
22
|
+
`returnMetadata: "indexed"` returns only first 64 bytes of strings. Use `"all"` for complete metadata (but max topK drops to 20).
|
|
23
|
+
|
|
24
|
+
### topK Limits
|
|
25
|
+
|
|
26
|
+
| returnMetadata | returnValues | Max topK |
|
|
27
|
+
| ---------------------- | ------------ | -------- |
|
|
28
|
+
| `"none"` / `"indexed"` | `false` | 100 |
|
|
29
|
+
| `"all"` | any | **20** |
|
|
30
|
+
| any | `true` | **20** |
|
|
31
|
+
|
|
32
|
+
### Metadata Indexes First
|
|
33
|
+
|
|
34
|
+
Create BEFORE inserting - existing vectors not retroactively indexed.
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# ✅ Create index FIRST
|
|
38
|
+
wrangler vectorize create-metadata-index my-index --property-name=category --type=string
|
|
39
|
+
wrangler vectorize insert my-index --file=data.ndjson
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Index Config Immutable
|
|
43
|
+
|
|
44
|
+
Cannot change dimensions/metric after creation. Must create new index and migrate.
|
|
45
|
+
|
|
46
|
+
## Limits (V2)
|
|
47
|
+
|
|
48
|
+
| Resource | Limit |
|
|
49
|
+
| ----------------------- | ---------------------------- |
|
|
50
|
+
| Vectors per index | 10,000,000 |
|
|
51
|
+
| Max dimensions | 1536 |
|
|
52
|
+
| Batch upsert (Workers) | **500** |
|
|
53
|
+
| Indexed string metadata | **64 bytes** |
|
|
54
|
+
| Metadata indexes | 10 |
|
|
55
|
+
| Namespaces | 50,000 (paid) / 1,000 (free) |
|
|
56
|
+
|
|
57
|
+
## Common Mistakes
|
|
58
|
+
|
|
59
|
+
1. **Wrong embedding shape:** Extract `result.data[0]` from Workers AI
|
|
60
|
+
2. **Metadata index after data:** Re-upsert all vectors
|
|
61
|
+
3. **Insert vs upsert:** `insert` ignores duplicates, `upsert` overwrites
|
|
62
|
+
4. **Not batching:** Individual inserts ~1K/min, batched ~200K+/min
|
|
63
|
+
|
|
64
|
+
## Troubleshooting
|
|
65
|
+
|
|
66
|
+
**No results?**
|
|
67
|
+
|
|
68
|
+
- Wait 5-10s after insert
|
|
69
|
+
- Check namespace spelling (case-sensitive)
|
|
70
|
+
- Verify metadata index exists
|
|
71
|
+
- Check dimension mismatch
|
|
72
|
+
|
|
73
|
+
**Metadata filter not working?**
|
|
74
|
+
|
|
75
|
+
- Index must exist before data insert
|
|
76
|
+
- Strings >64 bytes truncated
|
|
77
|
+
- Use dot notation for nested: `"product.category"`
|
|
78
|
+
|
|
79
|
+
## Model Dimensions
|
|
80
|
+
|
|
81
|
+
- `@cf/baai/bge-small-en-v1.5`: 384
|
|
82
|
+
- `@cf/baai/bge-base-en-v1.5`: 768
|
|
83
|
+
- `@cf/baai/bge-large-en-v1.5`: 1024
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Vectorize Patterns
|
|
2
|
+
|
|
3
|
+
## Workers AI Integration
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// Generate embedding + query
|
|
7
|
+
const result = await env.AI.run('@cf/baai/bge-base-en-v1.5', { text: [query] })
|
|
8
|
+
const matches = await env.VECTORIZE.query(result.data[0], { topK: 5 }) // Pass data[0]!
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
| Model | Dimensions |
|
|
12
|
+
| ---------------------------- | ----------------- |
|
|
13
|
+
| `@cf/baai/bge-small-en-v1.5` | 384 |
|
|
14
|
+
| `@cf/baai/bge-base-en-v1.5` | 768 (recommended) |
|
|
15
|
+
| `@cf/baai/bge-large-en-v1.5` | 1024 |
|
|
16
|
+
|
|
17
|
+
## OpenAI Integration
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
const response = await openai.embeddings.create({ model: 'text-embedding-ada-002', input: query })
|
|
21
|
+
const matches = await env.VECTORIZE.query(response.data[0].embedding, { topK: 5 })
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## RAG Pattern
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// 1. Embed query
|
|
28
|
+
const emb = await env.AI.run('@cf/baai/bge-base-en-v1.5', { text: [query] })
|
|
29
|
+
|
|
30
|
+
// 2. Search vectors
|
|
31
|
+
const matches = await env.VECTORIZE.query(emb.data[0], { topK: 5, returnMetadata: 'indexed' })
|
|
32
|
+
|
|
33
|
+
// 3. Fetch full docs from R2/D1/KV
|
|
34
|
+
const docs = await Promise.all(
|
|
35
|
+
matches.matches.map((m) => env.R2.get(m.metadata.key).then((o) => o?.text()))
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
// 4. Generate with context
|
|
39
|
+
const answer = await env.AI.run('@cf/meta/llama-3-8b-instruct', {
|
|
40
|
+
prompt: `Context:\n${docs.filter(Boolean).join('\n\n')}\n\nQuestion: ${query}\n\nAnswer:`,
|
|
41
|
+
})
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Multi-Tenant
|
|
45
|
+
|
|
46
|
+
### Namespaces (< 50K tenants, fastest)
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
await env.VECTORIZE.upsert([{ id: '1', values: emb, namespace: `tenant-${id}` }])
|
|
50
|
+
await env.VECTORIZE.query(vec, { namespace: `tenant-${id}`, topK: 10 })
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Metadata Filter (> 50K tenants)
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
wrangler vectorize create-metadata-index my-index --property-name=tenantId --type=string
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```typescript
|
|
60
|
+
await env.VECTORIZE.upsert([{ id: '1', values: emb, metadata: { tenantId: id } }])
|
|
61
|
+
await env.VECTORIZE.query(vec, { filter: { tenantId: id }, topK: 10 })
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Hybrid Search
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const matches = await env.VECTORIZE.query(vec, {
|
|
68
|
+
topK: 20,
|
|
69
|
+
filter: {
|
|
70
|
+
category: { $in: ['tech', 'science'] },
|
|
71
|
+
published: { $gte: lastMonthTimestamp },
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Batch Ingestion
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
const BATCH = 500
|
|
80
|
+
for (let i = 0; i < vectors.length; i += BATCH) {
|
|
81
|
+
await env.VECTORIZE.upsert(vectors.slice(i, i + BATCH))
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Best Practices
|
|
86
|
+
|
|
87
|
+
1. **Pass `data[0]`** not `data` or full response
|
|
88
|
+
2. **Batch 500** vectors per upsert
|
|
89
|
+
3. **Create metadata indexes** before inserting
|
|
90
|
+
4. **Use namespaces** for tenant isolation (faster than filters)
|
|
91
|
+
5. **`returnMetadata: "indexed"`** for best speed/data balance
|
|
92
|
+
6. **Handle 5-10s mutation delay** in async operations
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Cloudflare WAF Expert Skill Reference
|
|
2
|
+
|
|
3
|
+
**Expertise**: Cloudflare Web Application Firewall (WAF) configuration, custom rules, managed rulesets, rate limiting, attack detection, and API integration
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Cloudflare WAF protects web applications from attacks through managed rulesets and custom rules.
|
|
8
|
+
|
|
9
|
+
**Detection (Managed Rulesets)**
|
|
10
|
+
|
|
11
|
+
- Pre-configured rules maintained by Cloudflare
|
|
12
|
+
- CVE-based rules, OWASP Top 10 coverage
|
|
13
|
+
- Three main rulesets: Cloudflare Managed, OWASP CRS, Exposed Credentials
|
|
14
|
+
- Actions: log, block, challenge, js_challenge, managed_challenge
|
|
15
|
+
|
|
16
|
+
**Mitigation (Custom Rules & Rate Limiting)**
|
|
17
|
+
|
|
18
|
+
- Custom expressions using Wirefilter syntax
|
|
19
|
+
- Attack score-based blocking (`cf.waf.score`)
|
|
20
|
+
- Rate limiting with per-IP, per-user, or custom characteristics
|
|
21
|
+
- Actions: block, challenge, js_challenge, managed_challenge, log, skip
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
### Deploy Cloudflare Managed Ruleset
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
import Cloudflare from 'cloudflare'
|
|
29
|
+
|
|
30
|
+
const client = new Cloudflare({ apiToken: process.env.CF_API_TOKEN })
|
|
31
|
+
|
|
32
|
+
// Deploy managed ruleset to zone
|
|
33
|
+
await client.rulesets.create({
|
|
34
|
+
zone_id: 'zone_id',
|
|
35
|
+
kind: 'zone',
|
|
36
|
+
phase: 'http_request_firewall_managed',
|
|
37
|
+
name: 'Deploy Cloudflare Managed Ruleset',
|
|
38
|
+
rules: [
|
|
39
|
+
{
|
|
40
|
+
action: 'execute',
|
|
41
|
+
action_parameters: {
|
|
42
|
+
id: 'efb7b8c949ac4650a09736fc376e9aee', // Cloudflare Managed Ruleset
|
|
43
|
+
},
|
|
44
|
+
expression: 'true',
|
|
45
|
+
enabled: true,
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
})
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Create Custom Rule
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
// Block requests with attack score >= 40
|
|
55
|
+
await client.rulesets.create({
|
|
56
|
+
zone_id: 'zone_id',
|
|
57
|
+
kind: 'zone',
|
|
58
|
+
phase: 'http_request_firewall_custom',
|
|
59
|
+
name: 'Custom WAF Rules',
|
|
60
|
+
rules: [
|
|
61
|
+
{
|
|
62
|
+
action: 'block',
|
|
63
|
+
expression: 'cf.waf.score gt 40',
|
|
64
|
+
description: 'Block high attack scores',
|
|
65
|
+
enabled: true,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
})
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Create Rate Limit
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
await client.rulesets.create({
|
|
75
|
+
zone_id: 'zone_id',
|
|
76
|
+
kind: 'zone',
|
|
77
|
+
phase: 'http_ratelimit',
|
|
78
|
+
name: 'API Rate Limits',
|
|
79
|
+
rules: [
|
|
80
|
+
{
|
|
81
|
+
action: 'block',
|
|
82
|
+
expression: 'http.request.uri.path eq "/api/login"',
|
|
83
|
+
action_parameters: {
|
|
84
|
+
ratelimit: {
|
|
85
|
+
characteristics: ['cf.colo.id', 'ip.src'],
|
|
86
|
+
period: 60,
|
|
87
|
+
requests_per_period: 10,
|
|
88
|
+
mitigation_timeout: 600,
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
enabled: true,
|
|
92
|
+
},
|
|
93
|
+
],
|
|
94
|
+
})
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Managed Ruleset Quick Reference
|
|
98
|
+
|
|
99
|
+
| Ruleset Name | ID | Coverage |
|
|
100
|
+
| ------------------------- | ---------------------------------- | --------------------- |
|
|
101
|
+
| Cloudflare Managed | `efb7b8c949ac4650a09736fc376e9aee` | OWASP Top 10, CVEs |
|
|
102
|
+
| OWASP Core Ruleset | `4814384a9e5d4991b9815dcfc25d2f1f` | OWASP ModSecurity CRS |
|
|
103
|
+
| Exposed Credentials Check | `c2e184081120413c86c3ab7e14069605` | Credential stuffing |
|
|
104
|
+
|
|
105
|
+
## Phases
|
|
106
|
+
|
|
107
|
+
WAF rules execute in specific phases:
|
|
108
|
+
|
|
109
|
+
- `http_request_firewall_managed` - Managed rulesets
|
|
110
|
+
- `http_request_firewall_custom` - Custom rules
|
|
111
|
+
- `http_ratelimit` - Rate limiting rules
|
|
112
|
+
- `http_request_sbfm` - Super Bot Fight Mode (Pro+)
|
|
113
|
+
|
|
114
|
+
## Reading Order
|
|
115
|
+
|
|
116
|
+
1. **[api.md](api.md)** - SDK methods, expressions, actions, parameters
|
|
117
|
+
2. **[configuration.md](configuration.md)** - Setup with Wrangler, Terraform, Pulumi
|
|
118
|
+
3. **[patterns.md](patterns.md)** - Common patterns: deploy managed, rate limiting, skip, override
|
|
119
|
+
4. **[gotchas.md](gotchas.md)** - Execution order, limits, expression errors
|
|
120
|
+
|
|
121
|
+
## See Also
|
|
122
|
+
|
|
123
|
+
- [Cloudflare WAF Docs](https://developers.cloudflare.com/waf/)
|
|
124
|
+
- [Ruleset Engine](https://developers.cloudflare.com/ruleset-engine/)
|
|
125
|
+
- [Expression Reference](https://developers.cloudflare.com/ruleset-engine/rules-language/)
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
## SDK Setup
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import Cloudflare from 'cloudflare'
|
|
7
|
+
|
|
8
|
+
const client = new Cloudflare({
|
|
9
|
+
apiToken: process.env.CF_API_TOKEN,
|
|
10
|
+
})
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Core Methods
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
// List rulesets
|
|
17
|
+
await client.rulesets.list({ zone_id: 'zone_id', phase: 'http_request_firewall_managed' })
|
|
18
|
+
|
|
19
|
+
// Get ruleset
|
|
20
|
+
await client.rulesets.get({ zone_id: 'zone_id', ruleset_id: 'ruleset_id' })
|
|
21
|
+
|
|
22
|
+
// Create ruleset
|
|
23
|
+
await client.rulesets.create({
|
|
24
|
+
zone_id: 'zone_id',
|
|
25
|
+
kind: 'zone',
|
|
26
|
+
phase: 'http_request_firewall_custom',
|
|
27
|
+
name: 'Custom WAF Rules',
|
|
28
|
+
rules: [{ action: 'block', expression: 'cf.waf.score gt 40', enabled: true }],
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
// Update ruleset (include rule id to keep existing, omit id for new rules)
|
|
32
|
+
await client.rulesets.update({
|
|
33
|
+
zone_id: 'zone_id',
|
|
34
|
+
ruleset_id: 'ruleset_id',
|
|
35
|
+
rules: [
|
|
36
|
+
{ id: 'rule_id', action: 'block', expression: 'cf.waf.score gt 40', enabled: true },
|
|
37
|
+
{ action: 'challenge', expression: 'http.request.uri.path contains "/admin"', enabled: true },
|
|
38
|
+
],
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
// Delete ruleset
|
|
42
|
+
await client.rulesets.delete({ zone_id: 'zone_id', ruleset_id: 'ruleset_id' })
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Actions & Phases
|
|
46
|
+
|
|
47
|
+
### Actions by Phase
|
|
48
|
+
|
|
49
|
+
| Action | Custom | Managed | Rate Limit | Description |
|
|
50
|
+
| ------------------- | ------ | ------- | ---------- | ----------------------------- |
|
|
51
|
+
| `block` | ✅ | ❌ | ✅ | Block request with 403 |
|
|
52
|
+
| `challenge` | ✅ | ❌ | ✅ | Show CAPTCHA challenge |
|
|
53
|
+
| `js_challenge` | ✅ | ❌ | ✅ | JS-based challenge |
|
|
54
|
+
| `managed_challenge` | ✅ | ❌ | ✅ | Smart challenge (recommended) |
|
|
55
|
+
| `log` | ✅ | ❌ | ✅ | Log only, don't block |
|
|
56
|
+
| `skip` | ✅ | ❌ | ❌ | Skip rule evaluation |
|
|
57
|
+
| `execute` | ❌ | ✅ | ❌ | Deploy managed ruleset |
|
|
58
|
+
|
|
59
|
+
### Phases (Execution Order)
|
|
60
|
+
|
|
61
|
+
1. `http_request_firewall_custom` - Custom rules (first line of defense)
|
|
62
|
+
2. `http_request_firewall_managed` - Managed rulesets (pre-configured protection)
|
|
63
|
+
3. `http_ratelimit` - Rate limiting (request throttling)
|
|
64
|
+
4. `http_request_sbfm` - Super Bot Fight Mode (Pro+ only)
|
|
65
|
+
|
|
66
|
+
## Expression Syntax
|
|
67
|
+
|
|
68
|
+
### Fields
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
// Request properties
|
|
72
|
+
http.request.method // GET, POST, etc.
|
|
73
|
+
http.request.uri.path // /api/users
|
|
74
|
+
http.host // example.com
|
|
75
|
+
|
|
76
|
+
// IP and Geolocation
|
|
77
|
+
ip.src // 192.0.2.1
|
|
78
|
+
ip.geoip.country // US, GB, etc.
|
|
79
|
+
ip.geoip.continent // NA, EU, etc.
|
|
80
|
+
|
|
81
|
+
// Attack detection
|
|
82
|
+
cf.waf.score // 0-100 attack score
|
|
83
|
+
cf.waf.score.sqli // SQL injection score
|
|
84
|
+
cf.waf.score.xss // XSS score
|
|
85
|
+
|
|
86
|
+
// Headers & Cookies
|
|
87
|
+
http.request.headers['authorization'][0]
|
|
88
|
+
http.request.cookies['session'][0]
|
|
89
|
+
lower(http.user_agent) // Lowercase user agent
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Operators
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
// Comparison
|
|
96
|
+
eq // Equal
|
|
97
|
+
ne // Not equal
|
|
98
|
+
lt // Less than
|
|
99
|
+
le // Less than or equal
|
|
100
|
+
gt // Greater than
|
|
101
|
+
ge // Greater than or equal
|
|
102
|
+
|
|
103
|
+
// String matching
|
|
104
|
+
contains // Substring match
|
|
105
|
+
matches // Regex match (use carefully)
|
|
106
|
+
starts_with // Prefix match
|
|
107
|
+
ends_with in // Suffix match
|
|
108
|
+
// Value in list
|
|
109
|
+
// List operations
|
|
110
|
+
not // Logical NOT
|
|
111
|
+
and // Logical AND
|
|
112
|
+
or // Logical OR
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Expression Examples
|
|
116
|
+
|
|
117
|
+
```typescript
|
|
118
|
+
'cf.waf.score gt 40' // Attack score
|
|
119
|
+
'http.request.uri.path eq "/api/login" and http.request.method eq "POST"' // Path + method
|
|
120
|
+
'ip.src in {192.0.2.0/24 203.0.113.0/24}' // IP blocking
|
|
121
|
+
'ip.geoip.country in {"CN" "RU" "KP"}' // Country blocking
|
|
122
|
+
'http.user_agent contains "bot"' // User agent
|
|
123
|
+
'not http.request.headers["authorization"][0]' // Header check
|
|
124
|
+
'(cf.waf.score.sqli gt 20 or cf.waf.score.xss gt 20) and http.request.uri.path starts_with "/api"' // Complex
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Rate Limiting Configuration
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
{
|
|
131
|
+
action: 'block',
|
|
132
|
+
expression: 'http.request.uri.path starts_with "/api"',
|
|
133
|
+
action_parameters: {
|
|
134
|
+
ratelimit: {
|
|
135
|
+
// Characteristics define uniqueness: 'ip.src', 'cf.colo.id',
|
|
136
|
+
// 'http.request.headers["key"][0]', 'http.request.cookies["session"][0]'
|
|
137
|
+
characteristics: ['cf.colo.id', 'ip.src'], // Recommended: per-IP per-datacenter
|
|
138
|
+
period: 60, // Time window in seconds
|
|
139
|
+
requests_per_period: 100, // Max requests in period
|
|
140
|
+
mitigation_timeout: 600, // Block duration in seconds
|
|
141
|
+
counting_expression: 'http.request.method ne "GET"', // Optional: filter counted requests
|
|
142
|
+
requests_to_origin: false, // Count all requests (not just origin hits)
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
enabled: true,
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Managed Ruleset Deployment
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
{
|
|
153
|
+
action: 'execute',
|
|
154
|
+
action_parameters: {
|
|
155
|
+
id: 'efb7b8c949ac4650a09736fc376e9aee', // Cloudflare Managed
|
|
156
|
+
overrides: {
|
|
157
|
+
// Override specific rules
|
|
158
|
+
rules: [
|
|
159
|
+
{ id: '5de7edfa648c4d6891dc3e7f84534ffa', action: 'log', enabled: true },
|
|
160
|
+
],
|
|
161
|
+
// Override categories: 'wordpress', 'sqli', 'xss', 'rce', etc.
|
|
162
|
+
categories: [
|
|
163
|
+
{ category: 'wordpress', enabled: false },
|
|
164
|
+
{ category: 'sqli', action: 'log' },
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
expression: 'true',
|
|
169
|
+
enabled: true,
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Skip Rules
|
|
174
|
+
|
|
175
|
+
Skip rules bypass subsequent rule evaluation. Two skip types:
|
|
176
|
+
|
|
177
|
+
**Skip current ruleset**: Skip remaining rules in current phase only
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
{
|
|
181
|
+
action: 'skip',
|
|
182
|
+
action_parameters: {
|
|
183
|
+
ruleset: 'current', // Skip rest of current ruleset
|
|
184
|
+
},
|
|
185
|
+
expression: 'http.request.uri.path ends_with ".jpg" or http.request.uri.path ends_with ".css"',
|
|
186
|
+
enabled: true,
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Skip entire phases**: Skip one or more phases completely
|
|
191
|
+
|
|
192
|
+
```typescript
|
|
193
|
+
{
|
|
194
|
+
action: 'skip',
|
|
195
|
+
action_parameters: {
|
|
196
|
+
phases: ['http_request_firewall_managed', 'http_ratelimit'], // Skip multiple phases
|
|
197
|
+
},
|
|
198
|
+
expression: 'ip.src in {192.0.2.0/24 203.0.113.0/24}',
|
|
199
|
+
enabled: true,
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Note**: Skip rules in custom phase can skip managed/ratelimit phases, but not vice versa (execution order).
|