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,110 @@
|
|
|
1
|
+
# AI Gateway SDK Integration
|
|
2
|
+
|
|
3
|
+
## Vercel AI SDK (Recommended)
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import { createAiGateway } from 'ai-gateway-provider'
|
|
7
|
+
import { createOpenAI } from '@ai-sdk/openai'
|
|
8
|
+
import { generateText } from 'ai'
|
|
9
|
+
|
|
10
|
+
const gateway = createAiGateway({
|
|
11
|
+
accountId: process.env.CF_ACCOUNT_ID,
|
|
12
|
+
gateway: process.env.CF_GATEWAY_ID,
|
|
13
|
+
apiKey: process.env.CF_API_TOKEN, // Optional for auth gateways
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY })
|
|
17
|
+
|
|
18
|
+
// Single model
|
|
19
|
+
const { text } = await generateText({
|
|
20
|
+
model: gateway(openai('gpt-4o')),
|
|
21
|
+
prompt: 'Hello',
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
// Automatic fallback array
|
|
25
|
+
const { text } = await generateText({
|
|
26
|
+
model: gateway([openai('gpt-4o'), anthropic('claude-sonnet-4-5'), openai('gpt-4o-mini')]),
|
|
27
|
+
prompt: 'Complex task',
|
|
28
|
+
})
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Options
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
model: gateway(openai('gpt-4o'), {
|
|
35
|
+
cacheKey: 'my-key',
|
|
36
|
+
cacheTtl: 3600,
|
|
37
|
+
metadata: { userId: 'u123', team: 'eng' }, // Max 5 entries
|
|
38
|
+
retries: { maxAttempts: 3, backoff: 'exponential' },
|
|
39
|
+
})
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## OpenAI SDK
|
|
43
|
+
|
|
44
|
+
```typescript
|
|
45
|
+
const client = new OpenAI({
|
|
46
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
47
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
48
|
+
defaultHeaders: { 'cf-aig-authorization': `Bearer ${cfToken}` },
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// Unified API - switch providers via model name
|
|
52
|
+
model: 'openai/gpt-4o' // or 'anthropic/claude-sonnet-4-5'
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Anthropic SDK
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
const client = new Anthropic({
|
|
59
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
60
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/anthropic`,
|
|
61
|
+
defaultHeaders: { 'cf-aig-authorization': `Bearer ${cfToken}` },
|
|
62
|
+
})
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Workers AI Binding
|
|
66
|
+
|
|
67
|
+
```toml
|
|
68
|
+
# wrangler.toml
|
|
69
|
+
[ai]
|
|
70
|
+
binding = "AI"
|
|
71
|
+
[[ai.gateway]]
|
|
72
|
+
id = "my-gateway"
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
await env.AI.run('@cf/meta/llama-3-8b-instruct',
|
|
77
|
+
{ messages: [...] },
|
|
78
|
+
{ gateway: { id: 'my-gateway', metadata: { userId: '123' } } }
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## LangChain / LlamaIndex
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// Use OpenAI SDK pattern with custom baseURL
|
|
86
|
+
new ChatOpenAI({
|
|
87
|
+
configuration: {
|
|
88
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
89
|
+
},
|
|
90
|
+
})
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## HTTP / cURL
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
curl https://gateway.ai.cloudflare.com/v1/{account}/{gateway}/openai/chat/completions \
|
|
97
|
+
-H "Authorization: Bearer $OPENAI_KEY" \
|
|
98
|
+
-H "cf-aig-authorization: Bearer $CF_TOKEN" \
|
|
99
|
+
-H "cf-aig-metadata: {\"userId\":\"123\"}" \
|
|
100
|
+
-d '{"model":"gpt-4o","messages":[...]}'
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Headers Reference
|
|
104
|
+
|
|
105
|
+
| Header | Purpose |
|
|
106
|
+
| ---------------------- | ------------------------ |
|
|
107
|
+
| `cf-aig-authorization` | Gateway auth token |
|
|
108
|
+
| `cf-aig-metadata` | JSON object (max 5 keys) |
|
|
109
|
+
| `cf-aig-cache-ttl` | Cache TTL in seconds |
|
|
110
|
+
| `cf-aig-skip-cache` | `true` to bypass cache |
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# AI Gateway Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
| Error | Cause | Fix |
|
|
6
|
+
| ----- | ------------------------------------- | ----------------------------------- |
|
|
7
|
+
| 401 | Missing `cf-aig-authorization` header | Add header with CF API token |
|
|
8
|
+
| 403 | Invalid provider key / BYOK expired | Check provider key in dashboard |
|
|
9
|
+
| 429 | Rate limit exceeded | Increase limit or implement backoff |
|
|
10
|
+
|
|
11
|
+
### 401 Fix
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
const client = new OpenAI({
|
|
15
|
+
baseURL: `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/openai`,
|
|
16
|
+
defaultHeaders: { 'cf-aig-authorization': `Bearer ${CF_API_TOKEN}` },
|
|
17
|
+
})
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 429 Retry Pattern
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
async function requestWithRetry(fn, maxRetries = 3) {
|
|
24
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
25
|
+
try {
|
|
26
|
+
return await fn()
|
|
27
|
+
} catch (e) {
|
|
28
|
+
if (e.status === 429 && i < maxRetries - 1) {
|
|
29
|
+
await new Promise((r) => setTimeout(r, Math.pow(2, i) * 1000))
|
|
30
|
+
continue
|
|
31
|
+
}
|
|
32
|
+
throw e
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Gotchas
|
|
39
|
+
|
|
40
|
+
| Issue | Reality |
|
|
41
|
+
| ------------------------ | ------------------------------------------------------------ |
|
|
42
|
+
| Metadata limits | Max 5 entries, flat only (no nesting) |
|
|
43
|
+
| Cache key collision | Use unique keys per expected response |
|
|
44
|
+
| BYOK + Unified Billing | Mutually exclusive |
|
|
45
|
+
| Rate limit scope | Per-gateway, not per-user (use dynamic routing for per-user) |
|
|
46
|
+
| Log delay | 30-60 seconds normal |
|
|
47
|
+
| Streaming + caching | **Incompatible** |
|
|
48
|
+
| Model name (unified API) | Prefix required: `openai/gpt-4o`, not `gpt-4o` |
|
|
49
|
+
|
|
50
|
+
## Cache Not Working
|
|
51
|
+
|
|
52
|
+
**Causes:**
|
|
53
|
+
|
|
54
|
+
- Different request params (temperature, etc.)
|
|
55
|
+
- Streaming enabled
|
|
56
|
+
- Caching disabled in settings
|
|
57
|
+
|
|
58
|
+
**Check:** `response.headers.get('cf-aig-cache-status')` → HIT or MISS
|
|
59
|
+
|
|
60
|
+
## Logs Not Appearing
|
|
61
|
+
|
|
62
|
+
1. Check logging enabled: Dashboard → Gateway → Settings
|
|
63
|
+
2. Remove `cf-aig-collect-log: false` header
|
|
64
|
+
3. Wait 30-60 seconds
|
|
65
|
+
4. Check log limit (10M default)
|
|
66
|
+
|
|
67
|
+
## Debugging
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Test connectivity
|
|
71
|
+
curl -v https://gateway.ai.cloudflare.com/v1/{account}/{gateway}/openai/models \
|
|
72
|
+
-H "Authorization: Bearer $OPENAI_KEY" \
|
|
73
|
+
-H "cf-aig-authorization: Bearer $CF_TOKEN"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
// Check response headers
|
|
78
|
+
console.log('Cache:', response.headers.get('cf-aig-cache-status'))
|
|
79
|
+
console.log('Request ID:', response.headers.get('cf-ray'))
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Analytics
|
|
83
|
+
|
|
84
|
+
Dashboard → AI Gateway → Select gateway
|
|
85
|
+
|
|
86
|
+
**Metrics:** Requests, tokens, latency (p50/p95/p99), cache hit rate, costs
|
|
87
|
+
|
|
88
|
+
**Log filters:** `status: error`, `provider: openai`, `cost > 0.01`, `duration > 1000`
|
|
89
|
+
|
|
90
|
+
**Export:** Logpush to S3/GCS/Datadog/Splunk
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Cloudflare AI Search Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for implementing Cloudflare AI Search (formerly AutoRAG), Cloudflare's managed semantic search and RAG service.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
**AI Search** is a managed RAG (Retrieval-Augmented Generation) pipeline that combines:
|
|
8
|
+
|
|
9
|
+
- Automatic semantic indexing of your content
|
|
10
|
+
- Vector similarity search
|
|
11
|
+
- Built-in LLM generation
|
|
12
|
+
|
|
13
|
+
**Key value propositions:**
|
|
14
|
+
|
|
15
|
+
- **Zero vector management** - No manual embedding, indexing, or storage
|
|
16
|
+
- **Auto-indexing** - Content automatically re-indexed every 6 hours
|
|
17
|
+
- **Built-in generation** - Optional AI response generation from retrieved context
|
|
18
|
+
- **Multi-source** - Index from R2 buckets or website crawls
|
|
19
|
+
|
|
20
|
+
**Data source options:**
|
|
21
|
+
|
|
22
|
+
- **R2 bucket** - Index files from Cloudflare R2 (supports MD, TXT, HTML, PDF, DOC, CSV, JSON)
|
|
23
|
+
- **Website** - Crawl and index website content (requires Cloudflare-hosted domain)
|
|
24
|
+
|
|
25
|
+
**Indexing lifecycle:**
|
|
26
|
+
|
|
27
|
+
- Automatic 6-hour refresh cycle
|
|
28
|
+
- Manual "Force Sync" available (30s rate limit)
|
|
29
|
+
- Not designed for real-time updates
|
|
30
|
+
|
|
31
|
+
## Quick Start
|
|
32
|
+
|
|
33
|
+
**1. Create AI Search instance in dashboard:**
|
|
34
|
+
|
|
35
|
+
- Go to Cloudflare Dashboard → AI Search → Create
|
|
36
|
+
- Choose data source (R2 or website)
|
|
37
|
+
- Configure instance name and settings
|
|
38
|
+
|
|
39
|
+
**2. Configure Worker:**
|
|
40
|
+
|
|
41
|
+
```jsonc
|
|
42
|
+
// wrangler.jsonc
|
|
43
|
+
{
|
|
44
|
+
"ai": {
|
|
45
|
+
"binding": "AI",
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**3. Use in Worker:**
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
export default {
|
|
54
|
+
async fetch(request, env) {
|
|
55
|
+
const answer = await env.AI.autorag('my-search-instance').aiSearch({
|
|
56
|
+
query: 'How do I configure caching?',
|
|
57
|
+
model: '@cf/meta/llama-3.3-70b-instruct-fp8-fast',
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
return Response.json({ answer: answer.response })
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## When to Use AI Search
|
|
66
|
+
|
|
67
|
+
### AI Search vs Vectorize
|
|
68
|
+
|
|
69
|
+
| Factor | AI Search | Vectorize |
|
|
70
|
+
| ---------------- | -------------------------------- | ------------------------------ |
|
|
71
|
+
| **Management** | Fully managed | Manual embedding + indexing |
|
|
72
|
+
| **Use when** | Want zero-ops RAG pipeline | Need custom embeddings/control |
|
|
73
|
+
| **Indexing** | Automatic (6hr cycle) | Manual via API |
|
|
74
|
+
| **Generation** | Built-in optional | Bring your own LLM |
|
|
75
|
+
| **Data sources** | R2 or website | Manual insert |
|
|
76
|
+
| **Best for** | Docs, support, enterprise search | Custom ML pipelines, real-time |
|
|
77
|
+
|
|
78
|
+
### AI Search vs Direct Workers AI
|
|
79
|
+
|
|
80
|
+
| Factor | AI Search | Workers AI (direct) |
|
|
81
|
+
| ------------ | ---------------------------- | ---------------------------- |
|
|
82
|
+
| **Context** | Automatic retrieval | Manual context building |
|
|
83
|
+
| **Use when** | Need RAG (search + generate) | Simple generation tasks |
|
|
84
|
+
| **Indexing** | Built-in | Not applicable |
|
|
85
|
+
| **Best for** | Knowledge bases, docs | Simple chat, transformations |
|
|
86
|
+
|
|
87
|
+
### search() vs aiSearch()
|
|
88
|
+
|
|
89
|
+
| Method | Returns | Use When |
|
|
90
|
+
| ------------ | --------------------- | --------------------------------------- |
|
|
91
|
+
| `search()` | Search results only | Building custom UI, need raw chunks |
|
|
92
|
+
| `aiSearch()` | AI response + results | Need ready-to-use answer (chatbot, Q&A) |
|
|
93
|
+
|
|
94
|
+
### Real-time Updates Consideration
|
|
95
|
+
|
|
96
|
+
**AI Search is NOT ideal if:**
|
|
97
|
+
|
|
98
|
+
- Need real-time content updates (<6 hours)
|
|
99
|
+
- Content changes multiple times per hour
|
|
100
|
+
- Strict freshness requirements
|
|
101
|
+
|
|
102
|
+
**AI Search IS ideal if:**
|
|
103
|
+
|
|
104
|
+
- Content relatively stable (docs, policies, knowledge bases)
|
|
105
|
+
- 6-hour refresh acceptable
|
|
106
|
+
- Prefer zero-ops over real-time
|
|
107
|
+
|
|
108
|
+
## Platform Limits
|
|
109
|
+
|
|
110
|
+
| Limit | Value |
|
|
111
|
+
| ------------------------- | ------------------- |
|
|
112
|
+
| Max instances per account | 10 |
|
|
113
|
+
| Max files per instance | 100,000 |
|
|
114
|
+
| Max file size | 4 MB |
|
|
115
|
+
| Index frequency | Every 6 hours |
|
|
116
|
+
| Force Sync rate limit | Once per 30 seconds |
|
|
117
|
+
| Filter nesting depth | 2 levels |
|
|
118
|
+
| Filters per compound | 10 |
|
|
119
|
+
| Score threshold range | 0.0 - 1.0 |
|
|
120
|
+
|
|
121
|
+
## Reading Order
|
|
122
|
+
|
|
123
|
+
Navigate these references based on your task:
|
|
124
|
+
|
|
125
|
+
| Task | Read | Est. Time |
|
|
126
|
+
| -------------------------- | ----------------------------- | --------- |
|
|
127
|
+
| **Understand AI Search** | README only | 5 min |
|
|
128
|
+
| **Implement basic search** | README → api.md | 10 min |
|
|
129
|
+
| **Configure data source** | README → configuration.md | 10 min |
|
|
130
|
+
| **Production patterns** | patterns.md | 15 min |
|
|
131
|
+
| **Debug issues** | gotchas.md | 10 min |
|
|
132
|
+
| **Full implementation** | README → api.md → patterns.md | 30 min |
|
|
133
|
+
|
|
134
|
+
## In This Reference
|
|
135
|
+
|
|
136
|
+
- **[api.md](api.md)** - API endpoints, methods, TypeScript interfaces
|
|
137
|
+
- **[configuration.md](configuration.md)** - Setup, data sources, wrangler config
|
|
138
|
+
- **[patterns.md](patterns.md)** - Common patterns, decision guidance, code examples
|
|
139
|
+
- **[gotchas.md](gotchas.md)** - Troubleshooting, code-level gotchas, limits
|
|
140
|
+
|
|
141
|
+
## See Also
|
|
142
|
+
|
|
143
|
+
- [Cloudflare AI Search Docs](https://developers.cloudflare.com/ai-search/)
|
|
144
|
+
- [Workers AI Docs](https://developers.cloudflare.com/workers-ai/)
|
|
145
|
+
- [Vectorize Docs](https://developers.cloudflare.com/vectorize/)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# AI Search API Reference
|
|
2
|
+
|
|
3
|
+
## Workers Binding
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
const answer = await env.AI.autorag('instance-name').aiSearch(options)
|
|
7
|
+
const results = await env.AI.autorag('instance-name').search(options)
|
|
8
|
+
const instances = await env.AI.autorag('_').listInstances()
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## aiSearch() Options
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
interface AiSearchOptions {
|
|
15
|
+
query: string // User query
|
|
16
|
+
model: string // Workers AI model ID
|
|
17
|
+
system_prompt?: string // LLM instructions
|
|
18
|
+
rewrite_query?: boolean // Fix typos (default: false)
|
|
19
|
+
max_num_results?: number // Max chunks (default: 10)
|
|
20
|
+
ranking_options?: { score_threshold?: number } // 0.0-1.0 (default: 0.3)
|
|
21
|
+
reranking?: { enabled: boolean; model: string }
|
|
22
|
+
stream?: boolean // Stream response (default: false)
|
|
23
|
+
filters?: Filter // Metadata filters
|
|
24
|
+
page?: string // Pagination token
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Response
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
interface AiSearchResponse {
|
|
32
|
+
search_query: string // Query used (rewritten if enabled)
|
|
33
|
+
response: string // AI-generated answer
|
|
34
|
+
data: SearchResult[] // Retrieved chunks
|
|
35
|
+
has_more: boolean
|
|
36
|
+
next_page?: string
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
interface SearchResult {
|
|
40
|
+
id: string
|
|
41
|
+
score: number
|
|
42
|
+
content: string
|
|
43
|
+
metadata: { filename: string; folder: string; timestamp: number }
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Filters
|
|
48
|
+
|
|
49
|
+
```typescript
|
|
50
|
+
// Comparison
|
|
51
|
+
{ column: "folder", operator: "gte", value: "docs/" }
|
|
52
|
+
|
|
53
|
+
// Compound
|
|
54
|
+
{ operator: "and", filters: [
|
|
55
|
+
{ column: "folder", operator: "gte", value: "docs/" },
|
|
56
|
+
{ column: "timestamp", operator: "gte", value: 1704067200 }
|
|
57
|
+
]}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Operators:** `eq`, `ne`, `gt`, `gte`, `lt`, `lte`
|
|
61
|
+
|
|
62
|
+
**Built-in metadata:** `filename`, `folder`, `timestamp` (Unix seconds)
|
|
63
|
+
|
|
64
|
+
## Streaming
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
const stream = await env.AI.autorag('docs').aiSearch({ query, model, stream: true })
|
|
68
|
+
return new Response(stream, { headers: { 'Content-Type': 'text/event-stream' } })
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Error Types
|
|
72
|
+
|
|
73
|
+
| Error | Cause |
|
|
74
|
+
| -------------------------- | ---------------------- |
|
|
75
|
+
| `AutoRAGNotFoundError` | Instance doesn't exist |
|
|
76
|
+
| `AutoRAGUnauthorizedError` | Invalid/missing token |
|
|
77
|
+
| `AutoRAGValidationError` | Invalid parameters |
|
|
78
|
+
|
|
79
|
+
## REST API
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
curl https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/autorag/rags/{NAME}/ai-search \
|
|
83
|
+
-H "Authorization: Bearer {TOKEN}" \
|
|
84
|
+
-d '{"query": "...", "model": "@cf/meta/llama-3.3-70b-instruct-fp8-fast"}'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Requires Service API token with "AI Search - Read" permission.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# AI Search Configuration
|
|
2
|
+
|
|
3
|
+
## Worker Setup
|
|
4
|
+
|
|
5
|
+
```jsonc
|
|
6
|
+
// wrangler.jsonc
|
|
7
|
+
{
|
|
8
|
+
"ai": { "binding": "AI" },
|
|
9
|
+
}
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```typescript
|
|
13
|
+
interface Env {
|
|
14
|
+
AI: Ai
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const answer = await env.AI.autorag('my-instance').aiSearch({
|
|
18
|
+
query: 'How do I configure caching?',
|
|
19
|
+
model: '@cf/meta/llama-3.3-70b-instruct-fp8-fast',
|
|
20
|
+
})
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Data Sources
|
|
24
|
+
|
|
25
|
+
### R2 Bucket
|
|
26
|
+
|
|
27
|
+
Dashboard: AI Search → Create Instance → Select R2 bucket
|
|
28
|
+
|
|
29
|
+
**Supported formats:** `.md`, `.txt`, `.html`, `.pdf`, `.doc`, `.docx`, `.csv`, `.json`
|
|
30
|
+
|
|
31
|
+
**Auto-indexed metadata:** `filename`, `folder`, `timestamp`
|
|
32
|
+
|
|
33
|
+
### Website Crawler
|
|
34
|
+
|
|
35
|
+
Requirements:
|
|
36
|
+
|
|
37
|
+
- Domain on Cloudflare
|
|
38
|
+
- `sitemap.xml` at root
|
|
39
|
+
- Bot protection must allow `CloudflareAISearch` user agent
|
|
40
|
+
|
|
41
|
+
## Path Filtering (R2)
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
docs/**/*.md # All .md in docs/ recursively
|
|
45
|
+
**/*.draft.md # Exclude (use in exclude patterns)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Indexing
|
|
49
|
+
|
|
50
|
+
- **Automatic:** Every 6 hours
|
|
51
|
+
- **Force Sync:** Dashboard button (30s rate limit between syncs)
|
|
52
|
+
- **Pause:** Settings → Pause Indexing (existing index remains searchable)
|
|
53
|
+
|
|
54
|
+
## Service API Token
|
|
55
|
+
|
|
56
|
+
Dashboard: AI Search → Instance → Use AI Search → API → Create Token
|
|
57
|
+
|
|
58
|
+
Permissions:
|
|
59
|
+
|
|
60
|
+
- **Read** - search operations
|
|
61
|
+
- **Edit** - instance management
|
|
62
|
+
|
|
63
|
+
Store securely:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
wrangler secret put AI_SEARCH_TOKEN
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Multi-Environment
|
|
70
|
+
|
|
71
|
+
```toml
|
|
72
|
+
# wrangler.toml
|
|
73
|
+
[env.production.vars]
|
|
74
|
+
AI_SEARCH_INSTANCE = "prod-docs"
|
|
75
|
+
|
|
76
|
+
[env.staging.vars]
|
|
77
|
+
AI_SEARCH_INSTANCE = "staging-docs"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
const answer = await env.AI.autorag(env.AI_SEARCH_INSTANCE).aiSearch({ query })
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Monitoring
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
const instances = await env.AI.autorag('_').listInstances()
|
|
88
|
+
console.log(instances.find((i) => i.name === 'docs'))
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Dashboard shows: files indexed, status, last index time, storage usage.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# AI Search Gotchas
|
|
2
|
+
|
|
3
|
+
## Type Safety
|
|
4
|
+
|
|
5
|
+
**Timestamp precision:** Use seconds (10-digit), not milliseconds.
|
|
6
|
+
|
|
7
|
+
```typescript
|
|
8
|
+
const nowInSeconds = Math.floor(Date.now() / 1000) // Correct
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**Folder prefix matching:** Use `gte` for "starts with" on paths.
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
filters: { column: "folder", operator: "gte", value: "docs/api/" } // Matches nested
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Filter Limitations
|
|
18
|
+
|
|
19
|
+
| Limit | Value |
|
|
20
|
+
| -------------------- | ---------------------- |
|
|
21
|
+
| Max nesting depth | 2 levels |
|
|
22
|
+
| Filters per compound | 10 |
|
|
23
|
+
| `or` operator | Same column, `eq` only |
|
|
24
|
+
|
|
25
|
+
**OR restriction example:**
|
|
26
|
+
|
|
27
|
+
```typescript
|
|
28
|
+
// ✅ Valid: same column, eq only
|
|
29
|
+
{ operator: "or", filters: [
|
|
30
|
+
{ column: "folder", operator: "eq", value: "docs/" },
|
|
31
|
+
{ column: "folder", operator: "eq", value: "guides/" }
|
|
32
|
+
]}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Indexing Issues
|
|
36
|
+
|
|
37
|
+
| Problem | Cause | Solution |
|
|
38
|
+
| ----------------- | -------------------------- | -------------------------------------------------- |
|
|
39
|
+
| File not indexed | Unsupported format or >4MB | Check format (.md/.txt/.html/.pdf/.doc/.csv/.json) |
|
|
40
|
+
| Index out of sync | 6-hour index cycle | Wait or use "Force Sync" (30s rate limit) |
|
|
41
|
+
| Empty results | Index incomplete | Check dashboard for indexing status |
|
|
42
|
+
|
|
43
|
+
## Auth Errors
|
|
44
|
+
|
|
45
|
+
| Error | Cause | Fix |
|
|
46
|
+
| -------------------------- | --------------------- | --------------------------------------------------- |
|
|
47
|
+
| `AutoRAGUnauthorizedError` | Invalid/missing token | Create Service API token with AI Search permissions |
|
|
48
|
+
| `AutoRAGNotFoundError` | Wrong instance name | Verify exact name from dashboard |
|
|
49
|
+
|
|
50
|
+
## Performance
|
|
51
|
+
|
|
52
|
+
**Slow responses (>3s):**
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
// Add score threshold + limit results
|
|
56
|
+
ranking_options: { score_threshold: 0.5 },
|
|
57
|
+
max_num_results: 10
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Empty results debug:**
|
|
61
|
+
|
|
62
|
+
1. Remove filters, test basic query
|
|
63
|
+
2. Lower `score_threshold` to 0.1
|
|
64
|
+
3. Check index is populated
|
|
65
|
+
|
|
66
|
+
## Limits
|
|
67
|
+
|
|
68
|
+
| Resource | Limit |
|
|
69
|
+
| --------------------- | ------- |
|
|
70
|
+
| Instances per account | 10 |
|
|
71
|
+
| Files per instance | 100,000 |
|
|
72
|
+
| Max file size | 4 MB |
|
|
73
|
+
| Index frequency | 6 hours |
|
|
74
|
+
|
|
75
|
+
## Anti-Patterns
|
|
76
|
+
|
|
77
|
+
**Use env vars for instance names:**
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
const answer = await env.AI.autorag(env.AI_SEARCH_INSTANCE).aiSearch({...});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Handle specific error types:**
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
if (error instanceof AutoRAGNotFoundError) {
|
|
87
|
+
/* 404 */
|
|
88
|
+
}
|
|
89
|
+
if (error instanceof AutoRAGUnauthorizedError) {
|
|
90
|
+
/* 401 */
|
|
91
|
+
}
|
|
92
|
+
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# AI Search Patterns
|
|
2
|
+
|
|
3
|
+
## search() vs aiSearch()
|
|
4
|
+
|
|
5
|
+
| Use | Method | Returns |
|
|
6
|
+
| -------------------- | ------------ | ---------------------------------- |
|
|
7
|
+
| Custom UI, analytics | `search()` | Raw chunks only (~100-300ms) |
|
|
8
|
+
| Chatbots, Q&A | `aiSearch()` | AI response + chunks (~500-2000ms) |
|
|
9
|
+
|
|
10
|
+
## rewrite_query
|
|
11
|
+
|
|
12
|
+
| Setting | Use When |
|
|
13
|
+
| ------- | ----------------------------------------- |
|
|
14
|
+
| `true` | User input (typos, vague queries) |
|
|
15
|
+
| `false` | LLM-generated queries (already optimized) |
|
|
16
|
+
|
|
17
|
+
## Multitenancy (Folder-Based)
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
const answer = await env.AI.autorag('saas-docs').aiSearch({
|
|
21
|
+
query: 'refund policy',
|
|
22
|
+
model: '@cf/meta/llama-3.3-70b-instruct-fp8-fast',
|
|
23
|
+
filters: {
|
|
24
|
+
column: 'folder',
|
|
25
|
+
operator: 'gte', // "starts with" pattern
|
|
26
|
+
value: `tenants/${tenantId}/`,
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Streaming
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
const stream = await env.AI.autorag('docs').aiSearch({
|
|
35
|
+
query,
|
|
36
|
+
model: '@cf/meta/llama-3.3-70b-instruct-fp8-fast',
|
|
37
|
+
stream: true,
|
|
38
|
+
})
|
|
39
|
+
return new Response(stream, { headers: { 'Content-Type': 'text/event-stream' } })
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Score Threshold
|
|
43
|
+
|
|
44
|
+
| Threshold | Use |
|
|
45
|
+
| ------------- | --------------------------------- |
|
|
46
|
+
| 0.3 (default) | Broad recall, exploratory |
|
|
47
|
+
| 0.5 | Balanced, production default |
|
|
48
|
+
| 0.7 | High precision, critical accuracy |
|
|
49
|
+
|
|
50
|
+
## System Prompt Template
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
const systemPrompt = `You are a documentation assistant.
|
|
54
|
+
- Answer ONLY based on provided context
|
|
55
|
+
- If context doesn't contain answer, say "I don't have information"
|
|
56
|
+
- Include code examples from context`
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Compound Filters
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// OR: Multiple folders
|
|
63
|
+
filters: {
|
|
64
|
+
operator: "or",
|
|
65
|
+
filters: [
|
|
66
|
+
{ column: "folder", operator: "gte", value: "docs/api/" },
|
|
67
|
+
{ column: "folder", operator: "gte", value: "docs/auth/" }
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// AND: Folder + date
|
|
72
|
+
filters: {
|
|
73
|
+
operator: "and",
|
|
74
|
+
filters: [
|
|
75
|
+
{ column: "folder", operator: "gte", value: "docs/" },
|
|
76
|
+
{ column: "timestamp", operator: "gte", value: oneWeekAgoSeconds }
|
|
77
|
+
]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Reranking
|
|
82
|
+
|
|
83
|
+
Enable for high-stakes use cases (adds ~300ms latency):
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
reranking: { enabled: true, model: "@cf/baai/bge-reranker-base" }
|
|
87
|
+
```
|