@mohanscodex/spectra-code 0.4.8 → 0.5.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 +42 -2
- package/dist/package.json +8 -5
- package/dist/src/agents/definitions/build.d.ts +3 -0
- package/dist/src/agents/definitions/build.d.ts.map +1 -0
- package/dist/src/agents/definitions/build.js +51 -0
- package/dist/src/agents/definitions/build.js.map +1 -0
- package/dist/src/agents/definitions/debug.d.ts +3 -0
- package/dist/src/agents/definitions/debug.d.ts.map +1 -0
- package/dist/src/agents/definitions/debug.js +45 -0
- package/dist/src/agents/definitions/debug.js.map +1 -0
- package/dist/src/agents/definitions/explore.d.ts +3 -0
- package/dist/src/agents/definitions/explore.d.ts.map +1 -0
- package/dist/src/agents/definitions/explore.js +34 -0
- package/dist/src/agents/definitions/explore.js.map +1 -0
- package/dist/src/agents/definitions/index.d.ts +5 -0
- package/dist/src/agents/definitions/index.d.ts.map +1 -0
- package/dist/src/agents/definitions/index.js +19 -0
- package/dist/src/agents/definitions/index.js.map +1 -0
- package/dist/src/agents/definitions/plan.d.ts +3 -0
- package/dist/src/agents/definitions/plan.d.ts.map +1 -0
- package/dist/src/agents/definitions/plan.js +44 -0
- package/dist/src/agents/definitions/plan.js.map +1 -0
- package/dist/src/agents/definitions/title.d.ts +3 -0
- package/dist/src/agents/definitions/title.d.ts.map +1 -0
- package/dist/src/agents/definitions/title.js +34 -0
- package/dist/src/agents/definitions/title.js.map +1 -0
- package/dist/src/agents/index.d.ts +6 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/agents/types.d.ts +15 -0
- package/dist/src/agents/types.d.ts.map +1 -0
- package/dist/src/agents/types.js +2 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/session.js +1 -1
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/integrations/acp/server.js +1 -1
- package/dist/src/integrations/acp/server.js.map +1 -1
- package/dist/src/services/prompt-history.d.ts +32 -0
- package/dist/src/services/prompt-history.d.ts.map +1 -0
- package/dist/src/services/prompt-history.js +144 -0
- package/dist/src/services/prompt-history.js.map +1 -0
- package/dist/src/services/snapshot-manager.d.ts +32 -32
- package/dist/src/services/snapshot-manager.d.ts.map +1 -1
- package/dist/src/services/snapshot-manager.js +308 -155
- package/dist/src/services/snapshot-manager.js.map +1 -1
- package/dist/src/tools/edit.d.ts.map +1 -1
- package/dist/src/tools/edit.js +5 -22
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.d.ts.map +1 -1
- package/dist/src/tools/glob.js +2 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/grep.js +2 -2
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/index.d.ts +5 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +30 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/task.js +1 -1
- package/dist/src/tools/task.js.map +1 -1
- package/dist/src/tools/write.d.ts.map +1 -1
- package/dist/src/tools/write.js +7 -4
- package/dist/src/tools/write.js.map +1 -1
- package/dist/src/tui/app-constants.js +1 -1
- package/dist/src/tui/app-constants.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +35 -15
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/commands.d.ts +15 -0
- package/dist/src/tui/commands.d.ts.map +1 -1
- package/dist/src/tui/commands.js +252 -1
- package/dist/src/tui/commands.js.map +1 -1
- package/dist/src/tui/components/chat-area.d.ts.map +1 -1
- package/dist/src/tui/components/chat-area.js +1 -1
- package/dist/src/tui/components/chat-area.js.map +1 -1
- package/dist/src/tui/components/message.d.ts.map +1 -1
- package/dist/src/tui/components/message.js +79 -4
- package/dist/src/tui/components/message.js.map +1 -1
- package/dist/src/tui/hooks/use-agent.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-agent.js +17 -4
- package/dist/src/tui/hooks/use-agent.js.map +1 -1
- package/dist/src/tui/hooks/use-app-keyboard.d.ts +4 -5
- package/dist/src/tui/hooks/use-app-keyboard.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-app-keyboard.js +23 -24
- package/dist/src/tui/hooks/use-app-keyboard.js.map +1 -1
- package/dist/src/tui/hooks/use-chat-submit.d.ts +2 -2
- package/dist/src/tui/hooks/use-chat-submit.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-chat-submit.js +143 -20
- package/dist/src/tui/hooks/use-chat-submit.js.map +1 -1
- package/dist/src/tui/hooks/use-revert.d.ts +3 -5
- package/dist/src/tui/hooks/use-revert.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-revert.js +83 -34
- package/dist/src/tui/hooks/use-revert.js.map +1 -1
- package/dist/src/tui/hooks/use-title-agent.d.ts +13 -0
- package/dist/src/tui/hooks/use-title-agent.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-title-agent.js +50 -0
- package/dist/src/tui/hooks/use-title-agent.js.map +1 -0
- package/dist/src/tui/prompt-bar.d.ts.map +1 -1
- package/dist/src/tui/prompt-bar.js +27 -33
- package/dist/src/tui/prompt-bar.js.map +1 -1
- package/dist/src/tui/theme.d.ts +2 -0
- package/dist/src/tui/theme.d.ts.map +1 -1
- package/dist/src/tui/theme.js +2 -0
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/types.d.ts +5 -0
- package/dist/src/tui/types.d.ts.map +1 -1
- package/dist/src/tui/ui/agent-switcher.js +1 -1
- package/dist/src/tui/ui/agent-switcher.js.map +1 -1
- package/dist/src/tui/ui/cost-dialog.d.ts +14 -0
- package/dist/src/tui/ui/cost-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/cost-dialog.js +28 -0
- package/dist/src/tui/ui/cost-dialog.js.map +1 -0
- package/dist/src/tui/ui/debug-dialog.js +1 -1
- package/dist/src/tui/ui/debug-dialog.js.map +1 -1
- package/dist/src/tui/ui/session-list.js +1 -1
- package/dist/src/tui/ui/session-list.js.map +1 -1
- package/dist/src/tui/utils/terminal-title.d.ts +3 -0
- package/dist/src/tui/utils/terminal-title.d.ts.map +1 -0
- package/dist/src/tui/utils/terminal-title.js +14 -0
- package/dist/src/tui/utils/terminal-title.js.map +1 -0
- package/dist/src/tui/utils/version.d.ts +1 -1
- package/dist/src/tui/utils/version.d.ts.map +1 -1
- package/dist/src/tui/utils/version.js +4 -22
- package/dist/src/tui/utils/version.js.map +1 -1
- package/dist/src/utils/paths.d.ts +1 -0
- package/dist/src/utils/paths.d.ts.map +1 -1
- package/dist/src/utils/paths.js +13 -0
- package/dist/src/utils/paths.js.map +1 -1
- package/package.json +9 -6
- package/skills/REQUESTS.md +36 -0
- package/skills/architecture/ABOUT.md +20 -0
- package/skills/architecture/preserving-productive-tensions/SKILL.md +152 -0
- package/skills/aspnet-core/LICENSE.txt +202 -0
- package/skills/aspnet-core/SKILL.md +61 -0
- package/skills/aspnet-core/agents/openai.yaml +5 -0
- package/skills/aspnet-core/assets/dotnet-logo.png +0 -0
- package/skills/aspnet-core/references/_sections.md +40 -0
- package/skills/aspnet-core/references/apis-minimal-and-controllers.md +81 -0
- package/skills/aspnet-core/references/data-state-and-services.md +69 -0
- package/skills/aspnet-core/references/program-and-pipeline.md +103 -0
- package/skills/aspnet-core/references/realtime-grpc-and-background-work.md +58 -0
- package/skills/aspnet-core/references/security-and-identity.md +75 -0
- package/skills/aspnet-core/references/source-map.md +43 -0
- package/skills/aspnet-core/references/stack-selection.md +63 -0
- package/skills/aspnet-core/references/testing-performance-and-operations.md +92 -0
- package/skills/aspnet-core/references/ui-blazor.md +53 -0
- package/skills/aspnet-core/references/ui-mvc.md +56 -0
- package/skills/aspnet-core/references/ui-razor-pages.md +55 -0
- package/skills/aspnet-core/references/versioning-and-upgrades.md +51 -0
- package/skills/chatgpt-apps/LICENSE.txt +201 -0
- package/skills/chatgpt-apps/SKILL.md +320 -0
- package/skills/chatgpt-apps/agents/openai.yaml +13 -0
- package/skills/chatgpt-apps/references/app-archetypes.md +132 -0
- package/skills/chatgpt-apps/references/apps-sdk-docs-workflow.md +135 -0
- package/skills/chatgpt-apps/references/interactive-state-sync-patterns.md +113 -0
- package/skills/chatgpt-apps/references/repo-contract-and-validation.md +93 -0
- package/skills/chatgpt-apps/references/search-fetch-standard.md +67 -0
- package/skills/chatgpt-apps/references/upstream-example-workflow.md +79 -0
- package/skills/chatgpt-apps/references/window-openai-patterns.md +70 -0
- package/skills/chatgpt-apps/scripts/scaffold_node_ext_apps.mjs +606 -0
- package/skills/cloudflare-deploy/LICENSE.txt +201 -0
- package/skills/cloudflare-deploy/SKILL.md +224 -0
- package/skills/cloudflare-deploy/agents/openai.yaml +6 -0
- package/skills/cloudflare-deploy/assets/cloudflare-small.svg +3 -0
- package/skills/cloudflare-deploy/assets/cloudflare.png +0 -0
- package/skills/cloudflare-deploy/references/agents-sdk/README.md +89 -0
- package/skills/cloudflare-deploy/references/agents-sdk/api.md +190 -0
- package/skills/cloudflare-deploy/references/agents-sdk/configuration.md +182 -0
- package/skills/cloudflare-deploy/references/agents-sdk/gotchas.md +158 -0
- package/skills/cloudflare-deploy/references/agents-sdk/patterns.md +192 -0
- package/skills/cloudflare-deploy/references/ai-gateway/README.md +175 -0
- package/skills/cloudflare-deploy/references/ai-gateway/configuration.md +111 -0
- package/skills/cloudflare-deploy/references/ai-gateway/dynamic-routing.md +82 -0
- package/skills/cloudflare-deploy/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare-deploy/references/ai-gateway/sdk-integration.md +114 -0
- package/skills/cloudflare-deploy/references/ai-gateway/troubleshooting.md +88 -0
- package/skills/cloudflare-deploy/references/ai-search/README.md +138 -0
- package/skills/cloudflare-deploy/references/ai-search/api.md +87 -0
- package/skills/cloudflare-deploy/references/ai-search/configuration.md +88 -0
- package/skills/cloudflare-deploy/references/ai-search/gotchas.md +81 -0
- package/skills/cloudflare-deploy/references/ai-search/patterns.md +85 -0
- package/skills/cloudflare-deploy/references/analytics-engine/README.md +92 -0
- package/skills/cloudflare-deploy/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare-deploy/references/analytics-engine/configuration.md +112 -0
- package/skills/cloudflare-deploy/references/analytics-engine/gotchas.md +85 -0
- package/skills/cloudflare-deploy/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare-deploy/references/api/README.md +65 -0
- package/skills/cloudflare-deploy/references/api/api.md +204 -0
- package/skills/cloudflare-deploy/references/api/configuration.md +160 -0
- package/skills/cloudflare-deploy/references/api/gotchas.md +225 -0
- package/skills/cloudflare-deploy/references/api/patterns.md +204 -0
- package/skills/cloudflare-deploy/references/api-shield/README.md +44 -0
- package/skills/cloudflare-deploy/references/api-shield/api.md +141 -0
- package/skills/cloudflare-deploy/references/api-shield/configuration.md +192 -0
- package/skills/cloudflare-deploy/references/api-shield/gotchas.md +125 -0
- package/skills/cloudflare-deploy/references/api-shield/patterns.md +180 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/README.md +90 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/api.md +240 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/configuration.md +197 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/gotchas.md +111 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/patterns.md +104 -0
- package/skills/cloudflare-deploy/references/bindings/README.md +122 -0
- package/skills/cloudflare-deploy/references/bindings/api.md +203 -0
- package/skills/cloudflare-deploy/references/bindings/configuration.md +188 -0
- package/skills/cloudflare-deploy/references/bindings/gotchas.md +208 -0
- package/skills/cloudflare-deploy/references/bindings/patterns.md +200 -0
- package/skills/cloudflare-deploy/references/bot-management/README.md +94 -0
- package/skills/cloudflare-deploy/references/bot-management/api.md +169 -0
- package/skills/cloudflare-deploy/references/bot-management/configuration.md +163 -0
- package/skills/cloudflare-deploy/references/bot-management/gotchas.md +114 -0
- package/skills/cloudflare-deploy/references/bot-management/patterns.md +182 -0
- package/skills/cloudflare-deploy/references/browser-rendering/README.md +78 -0
- package/skills/cloudflare-deploy/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare-deploy/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare-deploy/references/browser-rendering/gotchas.md +88 -0
- package/skills/cloudflare-deploy/references/browser-rendering/patterns.md +91 -0
- package/skills/cloudflare-deploy/references/c3/README.md +111 -0
- package/skills/cloudflare-deploy/references/c3/api.md +71 -0
- package/skills/cloudflare-deploy/references/c3/configuration.md +81 -0
- package/skills/cloudflare-deploy/references/c3/gotchas.md +92 -0
- package/skills/cloudflare-deploy/references/c3/patterns.md +82 -0
- package/skills/cloudflare-deploy/references/cache-reserve/README.md +147 -0
- package/skills/cloudflare-deploy/references/cache-reserve/api.md +194 -0
- package/skills/cloudflare-deploy/references/cache-reserve/configuration.md +169 -0
- package/skills/cloudflare-deploy/references/cache-reserve/gotchas.md +132 -0
- package/skills/cloudflare-deploy/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare-deploy/references/containers/README.md +85 -0
- package/skills/cloudflare-deploy/references/containers/api.md +187 -0
- package/skills/cloudflare-deploy/references/containers/configuration.md +188 -0
- package/skills/cloudflare-deploy/references/containers/gotchas.md +178 -0
- package/skills/cloudflare-deploy/references/containers/patterns.md +202 -0
- package/skills/cloudflare-deploy/references/cron-triggers/README.md +99 -0
- package/skills/cloudflare-deploy/references/cron-triggers/api.md +196 -0
- package/skills/cloudflare-deploy/references/cron-triggers/configuration.md +180 -0
- package/skills/cloudflare-deploy/references/cron-triggers/gotchas.md +199 -0
- package/skills/cloudflare-deploy/references/cron-triggers/patterns.md +190 -0
- package/skills/cloudflare-deploy/references/d1/README.md +133 -0
- package/skills/cloudflare-deploy/references/d1/api.md +196 -0
- package/skills/cloudflare-deploy/references/d1/configuration.md +188 -0
- package/skills/cloudflare-deploy/references/d1/gotchas.md +98 -0
- package/skills/cloudflare-deploy/references/d1/patterns.md +189 -0
- package/skills/cloudflare-deploy/references/ddos/README.md +41 -0
- package/skills/cloudflare-deploy/references/ddos/api.md +164 -0
- package/skills/cloudflare-deploy/references/ddos/configuration.md +93 -0
- package/skills/cloudflare-deploy/references/ddos/gotchas.md +107 -0
- package/skills/cloudflare-deploy/references/ddos/patterns.md +174 -0
- package/skills/cloudflare-deploy/references/do-storage/README.md +75 -0
- package/skills/cloudflare-deploy/references/do-storage/api.md +102 -0
- package/skills/cloudflare-deploy/references/do-storage/configuration.md +112 -0
- package/skills/cloudflare-deploy/references/do-storage/gotchas.md +150 -0
- package/skills/cloudflare-deploy/references/do-storage/patterns.md +182 -0
- package/skills/cloudflare-deploy/references/do-storage/testing.md +183 -0
- package/skills/cloudflare-deploy/references/durable-objects/README.md +185 -0
- package/skills/cloudflare-deploy/references/durable-objects/api.md +187 -0
- package/skills/cloudflare-deploy/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare-deploy/references/durable-objects/gotchas.md +197 -0
- package/skills/cloudflare-deploy/references/durable-objects/patterns.md +201 -0
- package/skills/cloudflare-deploy/references/email-routing/README.md +89 -0
- package/skills/cloudflare-deploy/references/email-routing/api.md +195 -0
- package/skills/cloudflare-deploy/references/email-routing/configuration.md +186 -0
- package/skills/cloudflare-deploy/references/email-routing/gotchas.md +196 -0
- package/skills/cloudflare-deploy/references/email-routing/patterns.md +229 -0
- package/skills/cloudflare-deploy/references/email-workers/README.md +151 -0
- package/skills/cloudflare-deploy/references/email-workers/api.md +237 -0
- package/skills/cloudflare-deploy/references/email-workers/configuration.md +112 -0
- package/skills/cloudflare-deploy/references/email-workers/gotchas.md +125 -0
- package/skills/cloudflare-deploy/references/email-workers/patterns.md +102 -0
- package/skills/cloudflare-deploy/references/hyperdrive/README.md +82 -0
- package/skills/cloudflare-deploy/references/hyperdrive/api.md +143 -0
- package/skills/cloudflare-deploy/references/hyperdrive/configuration.md +159 -0
- package/skills/cloudflare-deploy/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare-deploy/references/hyperdrive/patterns.md +190 -0
- package/skills/cloudflare-deploy/references/images/README.md +61 -0
- package/skills/cloudflare-deploy/references/images/api.md +96 -0
- package/skills/cloudflare-deploy/references/images/configuration.md +211 -0
- package/skills/cloudflare-deploy/references/images/gotchas.md +99 -0
- package/skills/cloudflare-deploy/references/images/patterns.md +115 -0
- package/skills/cloudflare-deploy/references/kv/README.md +89 -0
- package/skills/cloudflare-deploy/references/kv/api.md +160 -0
- package/skills/cloudflare-deploy/references/kv/configuration.md +144 -0
- package/skills/cloudflare-deploy/references/kv/gotchas.md +131 -0
- package/skills/cloudflare-deploy/references/kv/patterns.md +196 -0
- package/skills/cloudflare-deploy/references/miniflare/README.md +105 -0
- package/skills/cloudflare-deploy/references/miniflare/api.md +187 -0
- package/skills/cloudflare-deploy/references/miniflare/configuration.md +173 -0
- package/skills/cloudflare-deploy/references/miniflare/gotchas.md +160 -0
- package/skills/cloudflare-deploy/references/miniflare/patterns.md +181 -0
- package/skills/cloudflare-deploy/references/network-interconnect/README.md +99 -0
- package/skills/cloudflare-deploy/references/network-interconnect/api.md +199 -0
- package/skills/cloudflare-deploy/references/network-interconnect/configuration.md +114 -0
- package/skills/cloudflare-deploy/references/network-interconnect/gotchas.md +165 -0
- package/skills/cloudflare-deploy/references/network-interconnect/patterns.md +166 -0
- package/skills/cloudflare-deploy/references/observability/README.md +87 -0
- package/skills/cloudflare-deploy/references/observability/api.md +164 -0
- package/skills/cloudflare-deploy/references/observability/configuration.md +169 -0
- package/skills/cloudflare-deploy/references/observability/gotchas.md +115 -0
- package/skills/cloudflare-deploy/references/observability/patterns.md +105 -0
- package/skills/cloudflare-deploy/references/pages/README.md +88 -0
- package/skills/cloudflare-deploy/references/pages/api.md +204 -0
- package/skills/cloudflare-deploy/references/pages/configuration.md +201 -0
- package/skills/cloudflare-deploy/references/pages/gotchas.md +203 -0
- package/skills/cloudflare-deploy/references/pages/patterns.md +204 -0
- package/skills/cloudflare-deploy/references/pages-functions/README.md +98 -0
- package/skills/cloudflare-deploy/references/pages-functions/api.md +143 -0
- package/skills/cloudflare-deploy/references/pages-functions/configuration.md +122 -0
- package/skills/cloudflare-deploy/references/pages-functions/gotchas.md +94 -0
- package/skills/cloudflare-deploy/references/pages-functions/patterns.md +137 -0
- package/skills/cloudflare-deploy/references/pipelines/README.md +105 -0
- package/skills/cloudflare-deploy/references/pipelines/api.md +208 -0
- package/skills/cloudflare-deploy/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare-deploy/references/pipelines/gotchas.md +80 -0
- package/skills/cloudflare-deploy/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare-deploy/references/pulumi/README.md +100 -0
- package/skills/cloudflare-deploy/references/pulumi/api.md +200 -0
- package/skills/cloudflare-deploy/references/pulumi/configuration.md +198 -0
- package/skills/cloudflare-deploy/references/pulumi/gotchas.md +181 -0
- package/skills/cloudflare-deploy/references/pulumi/patterns.md +191 -0
- package/skills/cloudflare-deploy/references/queues/README.md +96 -0
- package/skills/cloudflare-deploy/references/queues/api.md +206 -0
- package/skills/cloudflare-deploy/references/queues/configuration.md +144 -0
- package/skills/cloudflare-deploy/references/queues/gotchas.md +206 -0
- package/skills/cloudflare-deploy/references/queues/patterns.md +220 -0
- package/skills/cloudflare-deploy/references/r2/README.md +95 -0
- package/skills/cloudflare-deploy/references/r2/api.md +200 -0
- package/skills/cloudflare-deploy/references/r2/configuration.md +165 -0
- package/skills/cloudflare-deploy/references/r2/gotchas.md +190 -0
- package/skills/cloudflare-deploy/references/r2/patterns.md +193 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/README.md +149 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/configuration.md +198 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare-deploy/references/r2-sql/README.md +128 -0
- package/skills/cloudflare-deploy/references/r2-sql/api.md +158 -0
- package/skills/cloudflare-deploy/references/r2-sql/configuration.md +147 -0
- package/skills/cloudflare-deploy/references/r2-sql/gotchas.md +212 -0
- package/skills/cloudflare-deploy/references/r2-sql/patterns.md +222 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/README.md +65 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/api.md +158 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/configuration.md +137 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/gotchas.md +133 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/patterns.md +174 -0
- package/skills/cloudflare-deploy/references/realtimekit/README.md +113 -0
- package/skills/cloudflare-deploy/references/realtimekit/api.md +212 -0
- package/skills/cloudflare-deploy/references/realtimekit/configuration.md +203 -0
- package/skills/cloudflare-deploy/references/realtimekit/gotchas.md +169 -0
- package/skills/cloudflare-deploy/references/realtimekit/patterns.md +223 -0
- package/skills/cloudflare-deploy/references/sandbox/README.md +96 -0
- package/skills/cloudflare-deploy/references/sandbox/api.md +198 -0
- package/skills/cloudflare-deploy/references/sandbox/configuration.md +143 -0
- package/skills/cloudflare-deploy/references/sandbox/gotchas.md +194 -0
- package/skills/cloudflare-deploy/references/sandbox/patterns.md +201 -0
- package/skills/cloudflare-deploy/references/secrets-store/README.md +74 -0
- package/skills/cloudflare-deploy/references/secrets-store/api.md +200 -0
- package/skills/cloudflare-deploy/references/secrets-store/configuration.md +185 -0
- package/skills/cloudflare-deploy/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare-deploy/references/secrets-store/patterns.md +207 -0
- package/skills/cloudflare-deploy/references/smart-placement/README.md +138 -0
- package/skills/cloudflare-deploy/references/smart-placement/api.md +183 -0
- package/skills/cloudflare-deploy/references/smart-placement/configuration.md +196 -0
- package/skills/cloudflare-deploy/references/smart-placement/gotchas.md +174 -0
- package/skills/cloudflare-deploy/references/smart-placement/patterns.md +183 -0
- package/skills/cloudflare-deploy/references/snippets/README.md +68 -0
- package/skills/cloudflare-deploy/references/snippets/api.md +198 -0
- package/skills/cloudflare-deploy/references/snippets/configuration.md +227 -0
- package/skills/cloudflare-deploy/references/snippets/gotchas.md +86 -0
- package/skills/cloudflare-deploy/references/snippets/patterns.md +135 -0
- package/skills/cloudflare-deploy/references/spectrum/README.md +52 -0
- package/skills/cloudflare-deploy/references/spectrum/api.md +181 -0
- package/skills/cloudflare-deploy/references/spectrum/configuration.md +194 -0
- package/skills/cloudflare-deploy/references/spectrum/gotchas.md +145 -0
- package/skills/cloudflare-deploy/references/spectrum/patterns.md +196 -0
- package/skills/cloudflare-deploy/references/static-assets/README.md +65 -0
- package/skills/cloudflare-deploy/references/static-assets/api.md +199 -0
- package/skills/cloudflare-deploy/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare-deploy/references/static-assets/gotchas.md +162 -0
- package/skills/cloudflare-deploy/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare-deploy/references/stream/README.md +114 -0
- package/skills/cloudflare-deploy/references/stream/api-live.md +195 -0
- package/skills/cloudflare-deploy/references/stream/api.md +199 -0
- package/skills/cloudflare-deploy/references/stream/configuration.md +141 -0
- package/skills/cloudflare-deploy/references/stream/gotchas.md +130 -0
- package/skills/cloudflare-deploy/references/stream/patterns.md +184 -0
- package/skills/cloudflare-deploy/references/tail-workers/README.md +89 -0
- package/skills/cloudflare-deploy/references/tail-workers/api.md +200 -0
- package/skills/cloudflare-deploy/references/tail-workers/configuration.md +176 -0
- package/skills/cloudflare-deploy/references/tail-workers/gotchas.md +192 -0
- package/skills/cloudflare-deploy/references/tail-workers/patterns.md +180 -0
- package/skills/cloudflare-deploy/references/terraform/README.md +102 -0
- package/skills/cloudflare-deploy/references/terraform/api.md +178 -0
- package/skills/cloudflare-deploy/references/terraform/configuration.md +197 -0
- package/skills/cloudflare-deploy/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare-deploy/references/terraform/patterns.md +174 -0
- package/skills/cloudflare-deploy/references/tunnel/README.md +129 -0
- package/skills/cloudflare-deploy/references/tunnel/api.md +193 -0
- package/skills/cloudflare-deploy/references/tunnel/configuration.md +157 -0
- package/skills/cloudflare-deploy/references/tunnel/gotchas.md +147 -0
- package/skills/cloudflare-deploy/references/tunnel/networking.md +168 -0
- package/skills/cloudflare-deploy/references/tunnel/patterns.md +192 -0
- package/skills/cloudflare-deploy/references/turn/README.md +82 -0
- package/skills/cloudflare-deploy/references/turn/api.md +239 -0
- package/skills/cloudflare-deploy/references/turn/configuration.md +179 -0
- package/skills/cloudflare-deploy/references/turn/gotchas.md +231 -0
- package/skills/cloudflare-deploy/references/turn/patterns.md +213 -0
- package/skills/cloudflare-deploy/references/turnstile/README.md +99 -0
- package/skills/cloudflare-deploy/references/turnstile/api.md +240 -0
- package/skills/cloudflare-deploy/references/turnstile/configuration.md +222 -0
- package/skills/cloudflare-deploy/references/turnstile/gotchas.md +218 -0
- package/skills/cloudflare-deploy/references/turnstile/patterns.md +193 -0
- package/skills/cloudflare-deploy/references/vectorize/README.md +133 -0
- package/skills/cloudflare-deploy/references/vectorize/api.md +88 -0
- package/skills/cloudflare-deploy/references/vectorize/configuration.md +88 -0
- package/skills/cloudflare-deploy/references/vectorize/gotchas.md +76 -0
- package/skills/cloudflare-deploy/references/vectorize/patterns.md +90 -0
- package/skills/cloudflare-deploy/references/waf/README.md +113 -0
- package/skills/cloudflare-deploy/references/waf/api.md +202 -0
- package/skills/cloudflare-deploy/references/waf/configuration.md +203 -0
- package/skills/cloudflare-deploy/references/waf/gotchas.md +204 -0
- package/skills/cloudflare-deploy/references/waf/patterns.md +197 -0
- package/skills/cloudflare-deploy/references/web-analytics/README.md +140 -0
- package/skills/cloudflare-deploy/references/web-analytics/configuration.md +76 -0
- package/skills/cloudflare-deploy/references/web-analytics/gotchas.md +82 -0
- package/skills/cloudflare-deploy/references/web-analytics/integration.md +60 -0
- package/skills/cloudflare-deploy/references/web-analytics/patterns.md +91 -0
- package/skills/cloudflare-deploy/references/workerd/README.md +78 -0
- package/skills/cloudflare-deploy/references/workerd/api.md +185 -0
- package/skills/cloudflare-deploy/references/workerd/configuration.md +183 -0
- package/skills/cloudflare-deploy/references/workerd/gotchas.md +139 -0
- package/skills/cloudflare-deploy/references/workerd/patterns.md +192 -0
- package/skills/cloudflare-deploy/references/workers/README.md +108 -0
- package/skills/cloudflare-deploy/references/workers/api.md +195 -0
- package/skills/cloudflare-deploy/references/workers/configuration.md +185 -0
- package/skills/cloudflare-deploy/references/workers/frameworks.md +197 -0
- package/skills/cloudflare-deploy/references/workers/gotchas.md +136 -0
- package/skills/cloudflare-deploy/references/workers/patterns.md +198 -0
- package/skills/cloudflare-deploy/references/workers-ai/README.md +197 -0
- package/skills/cloudflare-deploy/references/workers-ai/api.md +112 -0
- package/skills/cloudflare-deploy/references/workers-ai/configuration.md +97 -0
- package/skills/cloudflare-deploy/references/workers-ai/gotchas.md +114 -0
- package/skills/cloudflare-deploy/references/workers-ai/patterns.md +120 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/README.md +89 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/api.md +196 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/configuration.md +167 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/patterns.md +188 -0
- package/skills/cloudflare-deploy/references/workers-playground/README.md +127 -0
- package/skills/cloudflare-deploy/references/workers-playground/api.md +101 -0
- package/skills/cloudflare-deploy/references/workers-playground/configuration.md +163 -0
- package/skills/cloudflare-deploy/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare-deploy/references/workers-playground/patterns.md +132 -0
- package/skills/cloudflare-deploy/references/workers-vpc/README.md +127 -0
- package/skills/cloudflare-deploy/references/workers-vpc/api.md +202 -0
- package/skills/cloudflare-deploy/references/workers-vpc/configuration.md +147 -0
- package/skills/cloudflare-deploy/references/workers-vpc/gotchas.md +167 -0
- package/skills/cloudflare-deploy/references/workers-vpc/patterns.md +209 -0
- package/skills/cloudflare-deploy/references/workflows/README.md +69 -0
- package/skills/cloudflare-deploy/references/workflows/api.md +185 -0
- package/skills/cloudflare-deploy/references/workflows/configuration.md +151 -0
- package/skills/cloudflare-deploy/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare-deploy/references/workflows/patterns.md +175 -0
- package/skills/cloudflare-deploy/references/wrangler/README.md +141 -0
- package/skills/cloudflare-deploy/references/wrangler/api.md +188 -0
- package/skills/cloudflare-deploy/references/wrangler/auth.md +73 -0
- package/skills/cloudflare-deploy/references/wrangler/configuration.md +197 -0
- package/skills/cloudflare-deploy/references/wrangler/gotchas.md +197 -0
- package/skills/cloudflare-deploy/references/wrangler/patterns.md +209 -0
- package/skills/cloudflare-deploy/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
- package/skills/cloudflare-deploy/references/zaraz/README.md +111 -0
- package/skills/cloudflare-deploy/references/zaraz/api.md +112 -0
- package/skills/cloudflare-deploy/references/zaraz/configuration.md +90 -0
- package/skills/cloudflare-deploy/references/zaraz/gotchas.md +81 -0
- package/skills/cloudflare-deploy/references/zaraz/patterns.md +74 -0
- package/skills/collaboration/brainstorming/SKILL.md +75 -0
- package/skills/collaboration/dispatching-parallel-agents/SKILL.md +184 -0
- package/skills/collaboration/executing-plans/SKILL.md +78 -0
- package/skills/collaboration/finishing-a-development-branch/SKILL.md +202 -0
- package/skills/collaboration/phase-prompting/SKILL.md +292 -0
- package/skills/collaboration/receiving-code-review/SKILL.md +211 -0
- package/skills/collaboration/requesting-code-review/SKILL.md +107 -0
- package/skills/collaboration/requesting-code-review/code-reviewer.md +146 -0
- package/skills/collaboration/subagent-driven-development/SKILL.md +188 -0
- package/skills/collaboration/using-git-worktrees/SKILL.md +215 -0
- package/skills/collaboration/writing-plans/SKILL.md +118 -0
- package/skills/debugging/defense-in-depth/SKILL.md +130 -0
- package/skills/debugging/root-cause-tracing/SKILL.md +177 -0
- package/skills/debugging/root-cause-tracing/find-polluter.sh +63 -0
- package/skills/debugging/systematic-debugging/SKILL.md +295 -0
- package/skills/debugging/systematic-debugging/test-academic.md +14 -0
- package/skills/debugging/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/debugging/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/debugging/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/debugging/verification-before-completion/SKILL.md +142 -0
- package/skills/develop-web-game/LICENSE.txt +201 -0
- package/skills/develop-web-game/SKILL.md +149 -0
- package/skills/develop-web-game/agents/openai.yaml +6 -0
- package/skills/develop-web-game/assets/game-small.svg +4 -0
- package/skills/develop-web-game/assets/game.png +0 -0
- package/skills/develop-web-game/references/action_payloads.json +7 -0
- package/skills/develop-web-game/scripts/web_game_playwright_client.js +356 -0
- package/skills/doc/LICENSE.txt +201 -0
- package/skills/doc/SKILL.md +80 -0
- package/skills/doc/agents/openai.yaml +6 -0
- package/skills/doc/assets/doc-small.svg +3 -0
- package/skills/doc/assets/doc.png +0 -0
- package/skills/doc/scripts/render_docx.py +296 -0
- package/skills/figma/LICENSE.txt +202 -0
- package/skills/figma/SKILL.md +42 -0
- package/skills/figma/agents/openai.yaml +14 -0
- package/skills/figma/assets/figma-small.svg +3 -0
- package/skills/figma/assets/figma.png +0 -0
- package/skills/figma/assets/icon.svg +28 -0
- package/skills/figma/references/figma-mcp-config.md +35 -0
- package/skills/figma/references/figma-tools-and-prompts.md +34 -0
- package/skills/figma-implement-design/LICENSE.txt +202 -0
- package/skills/figma-implement-design/SKILL.md +264 -0
- package/skills/figma-implement-design/agents/openai.yaml +14 -0
- package/skills/figma-implement-design/assets/figma-small.svg +3 -0
- package/skills/figma-implement-design/assets/figma.png +0 -0
- package/skills/figma-implement-design/assets/icon.svg +28 -0
- package/skills/gh-address-comments/LICENSE.txt +202 -0
- package/skills/gh-address-comments/SKILL.md +25 -0
- package/skills/gh-address-comments/agents/openai.yaml +6 -0
- package/skills/gh-address-comments/assets/github-small.svg +3 -0
- package/skills/gh-address-comments/assets/github.png +0 -0
- package/skills/gh-address-comments/scripts/fetch_comments.py +237 -0
- package/skills/gh-fix-ci/LICENSE.txt +201 -0
- package/skills/gh-fix-ci/SKILL.md +69 -0
- package/skills/gh-fix-ci/agents/openai.yaml +6 -0
- package/skills/gh-fix-ci/assets/github-small.svg +3 -0
- package/skills/gh-fix-ci/assets/github.png +0 -0
- package/skills/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
- package/skills/goal-driven-project-loop/SKILL.md +217 -0
- package/skills/goal-driven-project-loop/references/goal-contract-template.md +42 -0
- package/skills/imagegen/LICENSE.txt +201 -0
- package/skills/imagegen/SKILL.md +174 -0
- package/skills/imagegen/agents/openai.yaml +6 -0
- package/skills/imagegen/assets/imagegen-small.svg +5 -0
- package/skills/imagegen/assets/imagegen.png +0 -0
- package/skills/imagegen/references/cli.md +132 -0
- package/skills/imagegen/references/codex-network.md +28 -0
- package/skills/imagegen/references/image-api.md +36 -0
- package/skills/imagegen/references/prompting.md +81 -0
- package/skills/imagegen/references/sample-prompts.md +384 -0
- package/skills/imagegen/scripts/image_gen.py +876 -0
- package/skills/jupyter-notebook/LICENSE.txt +201 -0
- package/skills/jupyter-notebook/SKILL.md +107 -0
- package/skills/jupyter-notebook/agents/openai.yaml +6 -0
- package/skills/jupyter-notebook/assets/experiment-template.ipynb +110 -0
- package/skills/jupyter-notebook/assets/jupyter-small.svg +3 -0
- package/skills/jupyter-notebook/assets/jupyter.png +0 -0
- package/skills/jupyter-notebook/assets/tutorial-template.ipynb +107 -0
- package/skills/jupyter-notebook/references/experiment-patterns.md +10 -0
- package/skills/jupyter-notebook/references/notebook-structure.md +17 -0
- package/skills/jupyter-notebook/references/quality-checklist.md +11 -0
- package/skills/jupyter-notebook/references/tutorial-patterns.md +9 -0
- package/skills/jupyter-notebook/scripts/new_notebook.py +130 -0
- package/skills/linear/LICENSE.txt +202 -0
- package/skills/linear/SKILL.md +87 -0
- package/skills/linear/agents/openai.yaml +14 -0
- package/skills/linear/assets/linear-small.svg +5 -0
- package/skills/linear/assets/linear.png +0 -0
- package/skills/netlify-deploy/LICENSE.txt +201 -0
- package/skills/netlify-deploy/SKILL.md +247 -0
- package/skills/netlify-deploy/agents/openai.yaml +6 -0
- package/skills/netlify-deploy/assets/netlify-small.svg +11 -0
- package/skills/netlify-deploy/assets/netlify.png +0 -0
- package/skills/netlify-deploy/references/cli-commands.md +162 -0
- package/skills/netlify-deploy/references/deployment-patterns.md +303 -0
- package/skills/netlify-deploy/references/netlify-toml.md +259 -0
- package/skills/notion-knowledge-capture/LICENSE.txt +7 -0
- package/skills/notion-knowledge-capture/SKILL.md +56 -0
- package/skills/notion-knowledge-capture/agents/openai.yaml +14 -0
- package/skills/notion-knowledge-capture/assets/notion-small.svg +11 -0
- package/skills/notion-knowledge-capture/assets/notion.png +0 -0
- package/skills/notion-knowledge-capture/evaluations/README.md +95 -0
- package/skills/notion-knowledge-capture/evaluations/conversation-to-wiki.json +31 -0
- package/skills/notion-knowledge-capture/evaluations/decision-record.json +31 -0
- package/skills/notion-knowledge-capture/examples/conversation-to-faq.md +226 -0
- package/skills/notion-knowledge-capture/examples/decision-capture.md +126 -0
- package/skills/notion-knowledge-capture/examples/how-to-guide.md +118 -0
- package/skills/notion-knowledge-capture/reference/database-best-practices.md +112 -0
- package/skills/notion-knowledge-capture/reference/decision-log-database.md +58 -0
- package/skills/notion-knowledge-capture/reference/documentation-database.md +93 -0
- package/skills/notion-knowledge-capture/reference/faq-database.md +57 -0
- package/skills/notion-knowledge-capture/reference/how-to-guide-database.md +38 -0
- package/skills/notion-knowledge-capture/reference/learning-database.md +35 -0
- package/skills/notion-knowledge-capture/reference/team-wiki-database.md +27 -0
- package/skills/notion-meeting-intelligence/LICENSE.txt +7 -0
- package/skills/notion-meeting-intelligence/SKILL.md +60 -0
- package/skills/notion-meeting-intelligence/agents/openai.yaml +14 -0
- package/skills/notion-meeting-intelligence/assets/notion-small.svg +11 -0
- package/skills/notion-meeting-intelligence/assets/notion.png +0 -0
- package/skills/notion-meeting-intelligence/evaluations/README.md +101 -0
- package/skills/notion-meeting-intelligence/evaluations/decision-meeting-prep.json +35 -0
- package/skills/notion-meeting-intelligence/evaluations/status-meeting-prep.json +35 -0
- package/skills/notion-meeting-intelligence/examples/customer-meeting.md +125 -0
- package/skills/notion-meeting-intelligence/examples/executive-review.md +78 -0
- package/skills/notion-meeting-intelligence/examples/project-decision.md +431 -0
- package/skills/notion-meeting-intelligence/examples/sprint-planning.md +80 -0
- package/skills/notion-meeting-intelligence/reference/brainstorming-template.md +81 -0
- package/skills/notion-meeting-intelligence/reference/decision-meeting-template.md +94 -0
- package/skills/notion-meeting-intelligence/reference/one-on-one-template.md +58 -0
- package/skills/notion-meeting-intelligence/reference/retrospective-template.md +58 -0
- package/skills/notion-meeting-intelligence/reference/sprint-planning-template.md +68 -0
- package/skills/notion-meeting-intelligence/reference/status-update-template.md +74 -0
- package/skills/notion-meeting-intelligence/reference/template-selection-guide.md +56 -0
- package/skills/notion-research-documentation/LICENSE.txt +7 -0
- package/skills/notion-research-documentation/SKILL.md +59 -0
- package/skills/notion-research-documentation/agents/openai.yaml +14 -0
- package/skills/notion-research-documentation/assets/notion-small.svg +11 -0
- package/skills/notion-research-documentation/assets/notion.png +0 -0
- package/skills/notion-research-documentation/evaluations/README.md +109 -0
- package/skills/notion-research-documentation/evaluations/basic-research.json +28 -0
- package/skills/notion-research-documentation/evaluations/research-to-database.json +29 -0
- package/skills/notion-research-documentation/examples/competitor-analysis.md +283 -0
- package/skills/notion-research-documentation/examples/market-research.md +62 -0
- package/skills/notion-research-documentation/examples/technical-investigation.md +233 -0
- package/skills/notion-research-documentation/examples/trip-planning.md +128 -0
- package/skills/notion-research-documentation/reference/advanced-search.md +212 -0
- package/skills/notion-research-documentation/reference/citations.md +190 -0
- package/skills/notion-research-documentation/reference/comparison-format.md +37 -0
- package/skills/notion-research-documentation/reference/comparison-template.md +44 -0
- package/skills/notion-research-documentation/reference/comprehensive-report-format.md +41 -0
- package/skills/notion-research-documentation/reference/comprehensive-report-template.md +64 -0
- package/skills/notion-research-documentation/reference/format-selection-guide.md +95 -0
- package/skills/notion-research-documentation/reference/quick-brief-format.md +37 -0
- package/skills/notion-research-documentation/reference/quick-brief-template.md +25 -0
- package/skills/notion-research-documentation/reference/research-summary-format.md +33 -0
- package/skills/notion-research-documentation/reference/research-summary-template.md +49 -0
- package/skills/notion-spec-to-implementation/LICENSE.txt +7 -0
- package/skills/notion-spec-to-implementation/SKILL.md +58 -0
- package/skills/notion-spec-to-implementation/agents/openai.yaml +14 -0
- package/skills/notion-spec-to-implementation/assets/notion-small.svg +11 -0
- package/skills/notion-spec-to-implementation/assets/notion.png +0 -0
- package/skills/notion-spec-to-implementation/evaluations/README.md +120 -0
- package/skills/notion-spec-to-implementation/evaluations/basic-spec-implementation.json +32 -0
- package/skills/notion-spec-to-implementation/evaluations/spec-to-tasks.json +35 -0
- package/skills/notion-spec-to-implementation/examples/api-feature.md +461 -0
- package/skills/notion-spec-to-implementation/examples/database-migration.md +81 -0
- package/skills/notion-spec-to-implementation/examples/ui-component.md +68 -0
- package/skills/notion-spec-to-implementation/reference/milestone-summary-template.md +27 -0
- package/skills/notion-spec-to-implementation/reference/progress-tracking.md +458 -0
- package/skills/notion-spec-to-implementation/reference/progress-update-template.md +25 -0
- package/skills/notion-spec-to-implementation/reference/quick-implementation-plan.md +26 -0
- package/skills/notion-spec-to-implementation/reference/spec-parsing.md +383 -0
- package/skills/notion-spec-to-implementation/reference/standard-implementation-plan.md +146 -0
- package/skills/notion-spec-to-implementation/reference/task-creation-template.md +34 -0
- package/skills/notion-spec-to-implementation/reference/task-creation.md +441 -0
- package/skills/openai-docs/LICENSE.txt +201 -0
- package/skills/openai-docs/SKILL.md +68 -0
- package/skills/openai-docs/agents/openai.yaml +14 -0
- package/skills/openai-docs/assets/openai-small.svg +3 -0
- package/skills/openai-docs/assets/openai.png +0 -0
- package/skills/openai-docs/references/gpt-5p4-prompting-guide.md +433 -0
- package/skills/openai-docs/references/latest-model.md +35 -0
- package/skills/openai-docs/references/upgrading-to-gpt-5p4.md +164 -0
- package/skills/pdf/LICENSE.txt +201 -0
- package/skills/pdf/SKILL.md +67 -0
- package/skills/pdf/agents/openai.yaml +5 -0
- package/skills/pdf/assets/pdf.png +0 -0
- package/skills/phase-prompting/SKILL.md +162 -0
- package/skills/playwright/LICENSE.txt +201 -0
- package/skills/playwright/NOTICE.txt +14 -0
- package/skills/playwright/SKILL.md +147 -0
- package/skills/playwright/agents/openai.yaml +6 -0
- package/skills/playwright/assets/playwright-small.svg +3 -0
- package/skills/playwright/assets/playwright.png +0 -0
- package/skills/playwright/references/cli.md +116 -0
- package/skills/playwright/references/workflows.md +95 -0
- package/skills/playwright/scripts/playwright_cli.sh +25 -0
- package/skills/playwright-interactive/LICENSE.txt +201 -0
- package/skills/playwright-interactive/NOTICE.txt +13 -0
- package/skills/playwright-interactive/SKILL.md +693 -0
- package/skills/playwright-interactive/agents/openai.yaml +6 -0
- package/skills/playwright-interactive/assets/playwright-small.svg +3 -0
- package/skills/playwright-interactive/assets/playwright.png +0 -0
- package/skills/problem-solving/ABOUT.md +40 -0
- package/skills/problem-solving/collision-zone-thinking/SKILL.md +62 -0
- package/skills/problem-solving/inversion-exercise/SKILL.md +58 -0
- package/skills/problem-solving/meta-pattern-recognition/SKILL.md +54 -0
- package/skills/problem-solving/scale-game/SKILL.md +63 -0
- package/skills/problem-solving/simplification-cascades/SKILL.md +76 -0
- package/skills/problem-solving/when-stuck/SKILL.md +88 -0
- package/skills/render-deploy/LICENSE.txt +201 -0
- package/skills/render-deploy/SKILL.md +479 -0
- package/skills/render-deploy/agents/openai.yaml +14 -0
- package/skills/render-deploy/assets/docker.yaml +62 -0
- package/skills/render-deploy/assets/go-api.yaml +35 -0
- package/skills/render-deploy/assets/nextjs-postgres.yaml +35 -0
- package/skills/render-deploy/assets/node-express.yaml +25 -0
- package/skills/render-deploy/assets/python-django.yaml +89 -0
- package/skills/render-deploy/assets/render-small.svg +3 -0
- package/skills/render-deploy/assets/render.png +0 -0
- package/skills/render-deploy/assets/static-site.yaml +54 -0
- package/skills/render-deploy/references/blueprint-spec.md +718 -0
- package/skills/render-deploy/references/codebase-analysis.md +49 -0
- package/skills/render-deploy/references/configuration-guide.md +603 -0
- package/skills/render-deploy/references/deployment-details.md +224 -0
- package/skills/render-deploy/references/direct-creation.md +113 -0
- package/skills/render-deploy/references/error-patterns.md +13 -0
- package/skills/render-deploy/references/post-deploy-checks.md +36 -0
- package/skills/render-deploy/references/runtimes.md +473 -0
- package/skills/render-deploy/references/service-types.md +450 -0
- package/skills/render-deploy/references/troubleshooting-basics.md +36 -0
- package/skills/research/ABOUT.md +20 -0
- package/skills/research/tracing-knowledge-lineages/SKILL.md +203 -0
- package/skills/round-prompting/SKILL.md +148 -0
- package/skills/screenshot/LICENSE.txt +201 -0
- package/skills/screenshot/SKILL.md +267 -0
- package/skills/screenshot/agents/openai.yaml +6 -0
- package/skills/screenshot/assets/screenshot-small.svg +5 -0
- package/skills/screenshot/assets/screenshot.png +0 -0
- package/skills/screenshot/scripts/ensure_macos_permissions.sh +54 -0
- package/skills/screenshot/scripts/macos_display_info.swift +22 -0
- package/skills/screenshot/scripts/macos_permissions.swift +40 -0
- package/skills/screenshot/scripts/macos_window_info.swift +126 -0
- package/skills/screenshot/scripts/take_screenshot.ps1 +163 -0
- package/skills/screenshot/scripts/take_screenshot.py +585 -0
- package/skills/security-best-practices/LICENSE.txt +201 -0
- package/skills/security-best-practices/SKILL.md +86 -0
- package/skills/security-best-practices/agents/openai.yaml +4 -0
- package/skills/security-best-practices/references/golang-general-backend-security.md +826 -0
- package/skills/security-best-practices/references/javascript-express-web-server-security.md +1158 -0
- package/skills/security-best-practices/references/javascript-general-web-frontend-security.md +747 -0
- package/skills/security-best-practices/references/javascript-jquery-web-frontend-security.md +678 -0
- package/skills/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +1144 -0
- package/skills/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +990 -0
- package/skills/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +791 -0
- package/skills/security-best-practices/references/python-django-web-server-security.md +882 -0
- package/skills/security-best-practices/references/python-fastapi-web-server-security.md +1036 -0
- package/skills/security-best-practices/references/python-flask-web-server-security.md +705 -0
- package/skills/security-ownership-map/LICENSE.txt +201 -0
- package/skills/security-ownership-map/SKILL.md +206 -0
- package/skills/security-ownership-map/agents/openai.yaml +4 -0
- package/skills/security-ownership-map/references/neo4j-import.md +60 -0
- package/skills/security-ownership-map/scripts/build_ownership_map.py +956 -0
- package/skills/security-ownership-map/scripts/community_maintainers.py +544 -0
- package/skills/security-ownership-map/scripts/query_ownership.py +483 -0
- package/skills/security-ownership-map/scripts/run_ownership_map.py +200 -0
- package/skills/security-threat-model/LICENSE.txt +201 -0
- package/skills/security-threat-model/SKILL.md +81 -0
- package/skills/security-threat-model/agents/openai.yaml +4 -0
- package/skills/security-threat-model/references/prompt-template.md +255 -0
- package/skills/security-threat-model/references/security-controls-and-assets.md +32 -0
- package/skills/sentry/LICENSE.txt +201 -0
- package/skills/sentry/SKILL.md +123 -0
- package/skills/sentry/agents/openai.yaml +6 -0
- package/skills/sentry/assets/sentry-small.svg +3 -0
- package/skills/sentry/assets/sentry.png +0 -0
- package/skills/sentry/scripts/sentry_api.py +238 -0
- package/skills/slides/LICENSE.txt +201 -0
- package/skills/slides/SKILL.md +71 -0
- package/skills/slides/agents/openai.yaml +6 -0
- package/skills/slides/assets/pptxgenjs_helpers/code.js +104 -0
- package/skills/slides/assets/pptxgenjs_helpers/image.js +333 -0
- package/skills/slides/assets/pptxgenjs_helpers/index.js +33 -0
- package/skills/slides/assets/pptxgenjs_helpers/latex.js +51 -0
- package/skills/slides/assets/pptxgenjs_helpers/layout.js +643 -0
- package/skills/slides/assets/pptxgenjs_helpers/layout_builders.js +358 -0
- package/skills/slides/assets/pptxgenjs_helpers/svg.js +36 -0
- package/skills/slides/assets/pptxgenjs_helpers/text.js +789 -0
- package/skills/slides/assets/pptxgenjs_helpers/util.js +24 -0
- package/skills/slides/assets/slides-small.svg +3 -0
- package/skills/slides/assets/slides.png +0 -0
- package/skills/slides/references/pptxgenjs-helpers.md +61 -0
- package/skills/slides/scripts/create_montage.py +300 -0
- package/skills/slides/scripts/detect_font.py +873 -0
- package/skills/slides/scripts/ensure_raster_image.py +202 -0
- package/skills/slides/scripts/render_slides.py +273 -0
- package/skills/slides/scripts/slides_test.py +201 -0
- package/skills/sora/LICENSE.txt +201 -0
- package/skills/sora/SKILL.md +153 -0
- package/skills/sora/agents/openai.yaml +6 -0
- package/skills/sora/assets/sora-small.svg +4 -0
- package/skills/sora/assets/sora.png +0 -0
- package/skills/sora/references/cinematic-shots.md +53 -0
- package/skills/sora/references/cli.md +248 -0
- package/skills/sora/references/codex-network.md +28 -0
- package/skills/sora/references/prompting.md +137 -0
- package/skills/sora/references/sample-prompts.md +95 -0
- package/skills/sora/references/social-ads.md +42 -0
- package/skills/sora/references/troubleshooting.md +58 -0
- package/skills/sora/references/video-api.md +45 -0
- package/skills/sora/scripts/sora.py +970 -0
- package/skills/speech/LICENSE.txt +201 -0
- package/skills/speech/SKILL.md +144 -0
- package/skills/speech/agents/openai.yaml +6 -0
- package/skills/speech/assets/speech-small.svg +3 -0
- package/skills/speech/assets/speech.png +0 -0
- package/skills/speech/references/accessibility.md +32 -0
- package/skills/speech/references/audio-api.md +31 -0
- package/skills/speech/references/cli.md +99 -0
- package/skills/speech/references/codex-network.md +28 -0
- package/skills/speech/references/ivr.md +32 -0
- package/skills/speech/references/narration.md +31 -0
- package/skills/speech/references/prompting.md +38 -0
- package/skills/speech/references/sample-prompts.md +44 -0
- package/skills/speech/references/voice-directions.md +80 -0
- package/skills/speech/references/voiceover.md +31 -0
- package/skills/speech/scripts/text_to_speech.py +528 -0
- package/skills/spreadsheet/LICENSE.txt +201 -0
- package/skills/spreadsheet/SKILL.md +145 -0
- package/skills/spreadsheet/agents/openai.yaml +6 -0
- package/skills/spreadsheet/assets/spreadsheet-small.svg +3 -0
- package/skills/spreadsheet/assets/spreadsheet.png +0 -0
- package/skills/spreadsheet/references/examples/openpyxl/create_basic_spreadsheet.py +51 -0
- package/skills/spreadsheet/references/examples/openpyxl/create_spreadsheet_with_styling.py +96 -0
- package/skills/spreadsheet/references/examples/openpyxl/read_existing_spreadsheet.py +59 -0
- package/skills/spreadsheet/references/examples/openpyxl/styling_spreadsheet.py +79 -0
- package/skills/testing/condition-based-waiting/SKILL.md +123 -0
- package/skills/testing/condition-based-waiting/example.ts +158 -0
- package/skills/testing/test-driven-development/SKILL.md +367 -0
- package/skills/testing/testing-anti-patterns/SKILL.md +304 -0
- package/skills/transcribe/LICENSE.txt +201 -0
- package/skills/transcribe/SKILL.md +81 -0
- package/skills/transcribe/agents/openai.yaml +6 -0
- package/skills/transcribe/assets/transcribe-small.svg +3 -0
- package/skills/transcribe/assets/transcribe.png +0 -0
- package/skills/transcribe/references/api.md +8 -0
- package/skills/transcribe/scripts/transcribe_diarize.py +276 -0
- package/skills/using-skills/SKILL.md +102 -0
- package/skills/using-skills/find-skills +107 -0
- package/skills/using-skills/skill-run +44 -0
- package/skills/vercel-deploy/LICENSE.txt +21 -0
- package/skills/vercel-deploy/SKILL.md +77 -0
- package/skills/vercel-deploy/agents/openai.yaml +6 -0
- package/skills/vercel-deploy/assets/vercel-small.svg +5 -0
- package/skills/vercel-deploy/assets/vercel.png +0 -0
- package/skills/vercel-deploy/scripts/deploy.sh +301 -0
- package/skills/winui-app/LICENSE.txt +202 -0
- package/skills/winui-app/SKILL.md +94 -0
- package/skills/winui-app/agents/openai.yaml +5 -0
- package/skills/winui-app/assets/winui.png +0 -0
- package/skills/winui-app/config.yaml +50 -0
- package/skills/winui-app/references/_sections.md +96 -0
- package/skills/winui-app/references/accessibility-input-and-localization.md +51 -0
- package/skills/winui-app/references/build-run-and-launch-verification.md +72 -0
- package/skills/winui-app/references/community-toolkit-controls-and-helpers.md +57 -0
- package/skills/winui-app/references/controls-layout-and-adaptive-ui.md +84 -0
- package/skills/winui-app/references/foundation-environment-audit-and-remediation.md +82 -0
- package/skills/winui-app/references/foundation-setup-and-project-selection.md +67 -0
- package/skills/winui-app/references/foundation-template-first-recovery.md +62 -0
- package/skills/winui-app/references/foundation-winui-app-structure.md +62 -0
- package/skills/winui-app/references/motion-animations-and-polish.md +45 -0
- package/skills/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -0
- package/skills/winui-app/references/sample-source-map.md +37 -0
- package/skills/winui-app/references/shell-navigation-and-windowing.md +67 -0
- package/skills/winui-app/references/styling-theming-materials-and-icons.md +71 -0
- package/skills/winui-app/references/testing-debugging-and-review-checklists.md +77 -0
- package/skills/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -0
- package/skills/yeet/LICENSE.txt +201 -0
- package/skills/yeet/SKILL.md +28 -0
- package/skills/yeet/agents/openai.yaml +6 -0
- package/skills/yeet/assets/yeet-small.svg +3 -0
- package/skills/yeet/assets/yeet.png +0 -0
- package/dist/src/agents/definitions.d.ts +0 -16
- package/dist/src/agents/definitions.d.ts.map +0 -1
- package/dist/src/agents/definitions.js +0 -148
- package/dist/src/agents/definitions.js.map +0 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Bot Management API
|
|
2
|
+
|
|
3
|
+
## Workers: BotManagement Interface
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
interface BotManagement {
|
|
7
|
+
score: number; // 1-99 (Enterprise), 0 if not computed
|
|
8
|
+
verifiedBot: boolean; // Is verified bot
|
|
9
|
+
staticResource: boolean; // Serves static resource
|
|
10
|
+
ja3Hash: string; // JA3 fingerprint (Enterprise, HTTPS only)
|
|
11
|
+
ja4: string; // JA4 fingerprint (Enterprise, HTTPS only)
|
|
12
|
+
jsDetection?: {
|
|
13
|
+
passed: boolean; // Passed JS detection (if enabled)
|
|
14
|
+
};
|
|
15
|
+
detectionIds: number[]; // Heuristic detection IDs
|
|
16
|
+
corporateProxy?: boolean; // From corporate proxy (Enterprise)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// DEPRECATED: Use botManagement.score instead
|
|
20
|
+
// request.cf.clientTrustScore (legacy, duplicate of botManagement.score)
|
|
21
|
+
|
|
22
|
+
// Access via request.cf
|
|
23
|
+
import type { IncomingRequestCfProperties } from '@cloudflare/workers-types';
|
|
24
|
+
|
|
25
|
+
export default {
|
|
26
|
+
async fetch(request: Request): Promise<Response> {
|
|
27
|
+
const cf = request.cf as IncomingRequestCfProperties | undefined;
|
|
28
|
+
const botMgmt = cf?.botManagement;
|
|
29
|
+
|
|
30
|
+
if (!botMgmt) return fetch(request);
|
|
31
|
+
if (botMgmt.verifiedBot) return fetch(request); // Allow verified bots
|
|
32
|
+
if (botMgmt.score === 1) return new Response('Blocked', { status: 403 });
|
|
33
|
+
if (botMgmt.score < 30) return new Response('Challenge required', { status: 429 });
|
|
34
|
+
|
|
35
|
+
return fetch(request);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## WAF Fields Reference
|
|
41
|
+
|
|
42
|
+
```txt
|
|
43
|
+
# Score fields
|
|
44
|
+
cf.bot_management.score # 0-99 (0 = not computed)
|
|
45
|
+
cf.bot_management.verified_bot # boolean
|
|
46
|
+
cf.bot_management.static_resource # boolean
|
|
47
|
+
cf.bot_management.ja3_hash # string (Enterprise)
|
|
48
|
+
cf.bot_management.ja4 # string (Enterprise)
|
|
49
|
+
cf.bot_management.detection_ids # array
|
|
50
|
+
cf.bot_management.js_detection.passed # boolean
|
|
51
|
+
cf.bot_management.corporate_proxy # boolean (Enterprise)
|
|
52
|
+
cf.verified_bot_category # string
|
|
53
|
+
|
|
54
|
+
# Workers equivalent
|
|
55
|
+
request.cf.botManagement.score
|
|
56
|
+
request.cf.botManagement.verifiedBot
|
|
57
|
+
request.cf.botManagement.ja3Hash
|
|
58
|
+
request.cf.botManagement.ja4
|
|
59
|
+
request.cf.botManagement.jsDetection.passed
|
|
60
|
+
request.cf.verifiedBotCategory
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## JA4 Signals (Enterprise)
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import type { IncomingRequestCfProperties } from '@cloudflare/workers-types';
|
|
67
|
+
|
|
68
|
+
interface JA4Signals {
|
|
69
|
+
// Ratios (0.0-1.0)
|
|
70
|
+
heuristic_ratio_1h?: number; // Fraction flagged by heuristics
|
|
71
|
+
browser_ratio_1h?: number; // Fraction from real browsers
|
|
72
|
+
cache_ratio_1h?: number; // Fraction hitting cache
|
|
73
|
+
h2h3_ratio_1h?: number; // Fraction using HTTP/2 or HTTP/3
|
|
74
|
+
// Ranks (relative position in distribution)
|
|
75
|
+
uas_rank_1h?: number; // User-Agent diversity rank
|
|
76
|
+
paths_rank_1h?: number; // Path diversity rank
|
|
77
|
+
reqs_rank_1h?: number; // Request volume rank
|
|
78
|
+
ips_rank_1h?: number; // IP diversity rank
|
|
79
|
+
// Quantiles (0.0-1.0, percentile in distribution)
|
|
80
|
+
reqs_quantile_1h?: number; // Request volume quantile
|
|
81
|
+
ips_quantile_1h?: number; // IP count quantile
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export default {
|
|
85
|
+
async fetch(request: Request): Promise<Response> {
|
|
86
|
+
const cf = request.cf as IncomingRequestCfProperties | undefined;
|
|
87
|
+
const ja4Signals = cf?.ja4Signals as JA4Signals | undefined;
|
|
88
|
+
|
|
89
|
+
if (!ja4Signals) return fetch(request); // Not available for HTTP or Worker routing
|
|
90
|
+
|
|
91
|
+
// Check for anomalous behavior
|
|
92
|
+
// High heuristic_ratio or low browser_ratio = suspicious
|
|
93
|
+
const heuristicRatio = ja4Signals.heuristic_ratio_1h ?? 0;
|
|
94
|
+
const browserRatio = ja4Signals.browser_ratio_1h ?? 0;
|
|
95
|
+
|
|
96
|
+
if (heuristicRatio > 0.5 || browserRatio < 0.3) {
|
|
97
|
+
return new Response('Suspicious traffic', { status: 403 });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return fetch(request);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Common Patterns
|
|
106
|
+
|
|
107
|
+
See [patterns.md](./patterns.md) for Workers examples: mobile app allowlisting, corporate proxy exemption, datacenter detection, conditional delay, and more.
|
|
108
|
+
|
|
109
|
+
## Bot Analytics
|
|
110
|
+
|
|
111
|
+
### Access Locations
|
|
112
|
+
- Dashboard: Security > Bots (old) or Security > Analytics > Bot analysis (new)
|
|
113
|
+
- GraphQL API for programmatic access
|
|
114
|
+
- Security Events & Security Analytics
|
|
115
|
+
- Logpush/Logpull
|
|
116
|
+
|
|
117
|
+
### Available Data
|
|
118
|
+
- **Enterprise BM**: Bot scores (1-99), bot score source, distribution
|
|
119
|
+
- **Pro/Business**: Bot groupings (automated, likely automated, likely human)
|
|
120
|
+
- Top attributes: IPs, paths, user agents, countries
|
|
121
|
+
- Detection sources: Heuristics, ML, AD, JSD
|
|
122
|
+
- Verified bot categories
|
|
123
|
+
|
|
124
|
+
### Time Ranges
|
|
125
|
+
- **Enterprise BM**: Up to 1 week at a time, 30 days history
|
|
126
|
+
- **Pro/Business**: Up to 72 hours at a time, 30 days history
|
|
127
|
+
- Real-time in most cases, adaptive sampling (1-10% depending on volume)
|
|
128
|
+
|
|
129
|
+
## Logpush Fields
|
|
130
|
+
|
|
131
|
+
```txt
|
|
132
|
+
BotScore # 1-99 or 0 if not computed
|
|
133
|
+
BotScoreSrc # Detection engine (ML, Heuristics, etc.)
|
|
134
|
+
BotTags # Classification tags
|
|
135
|
+
BotDetectionIDs # Heuristic detection IDs
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**BotScoreSrc values:**
|
|
139
|
+
- `"Heuristics"` - Known fingerprint
|
|
140
|
+
- `"Machine Learning"` - ML model
|
|
141
|
+
- `"Anomaly Detection"` - Baseline anomaly
|
|
142
|
+
- `"JS Detection"` - JavaScript check
|
|
143
|
+
- `"Cloudflare Service"` - Zero Trust
|
|
144
|
+
- `"Not Computed"` - Score = 0
|
|
145
|
+
|
|
146
|
+
Access via Logpush (stream to cloud storage/SIEM), Logpull (API to fetch logs), or GraphQL API (query analytics data).
|
|
147
|
+
|
|
148
|
+
## Testing with Miniflare
|
|
149
|
+
|
|
150
|
+
Miniflare provides mock botManagement data for local development:
|
|
151
|
+
|
|
152
|
+
**Default values:**
|
|
153
|
+
- `score: 99` (human)
|
|
154
|
+
- `verifiedBot: false`
|
|
155
|
+
- `corporateProxy: false`
|
|
156
|
+
- `ja3Hash: "25b4882c2bcb50cd6b469ff28c596742"`
|
|
157
|
+
- `staticResource: false`
|
|
158
|
+
- `detectionIds: []`
|
|
159
|
+
|
|
160
|
+
**Override in tests:**
|
|
161
|
+
```typescript
|
|
162
|
+
import { getPlatformProxy } from 'wrangler';
|
|
163
|
+
|
|
164
|
+
const { cf, dispose } = await getPlatformProxy();
|
|
165
|
+
// cf.botManagement is frozen mock object
|
|
166
|
+
expect(cf.botManagement.score).toBe(99);
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
For custom test data, mock request.cf in your test setup.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Bot Management Configuration
|
|
2
|
+
|
|
3
|
+
## Product Tiers
|
|
4
|
+
|
|
5
|
+
**Note:** Dashboard paths differ between old and new UI:
|
|
6
|
+
- **New:** Security > Settings > Filter "Bot traffic"
|
|
7
|
+
- **Old:** Security > Bots
|
|
8
|
+
|
|
9
|
+
Both UIs access same settings.
|
|
10
|
+
|
|
11
|
+
### Bot Score Groupings (Pro/Business)
|
|
12
|
+
|
|
13
|
+
Pro/Business users see bot score groupings instead of granular 1-99 scores:
|
|
14
|
+
|
|
15
|
+
| Score | Grouping | Meaning |
|
|
16
|
+
|-------|----------|---------|
|
|
17
|
+
| 0 | Not computed | Bot Management didn't run |
|
|
18
|
+
| 1 | Automated | Definite bot (heuristic match) |
|
|
19
|
+
| 2-29 | Likely automated | Probably bot (ML detection) |
|
|
20
|
+
| 30-99 | Likely human | Probably human |
|
|
21
|
+
| N/A | Verified bot | Allowlisted good bot |
|
|
22
|
+
|
|
23
|
+
Enterprise plans get granular 1-99 scores for custom thresholds.
|
|
24
|
+
|
|
25
|
+
### Bot Fight Mode (Free)
|
|
26
|
+
- Auto-blocks definite bots (score=1), excludes verified bots by default
|
|
27
|
+
- JavaScript Detections always enabled, no configuration options
|
|
28
|
+
|
|
29
|
+
### Super Bot Fight Mode (Pro/Business)
|
|
30
|
+
```txt
|
|
31
|
+
Dashboard: Security > Bots > Configure
|
|
32
|
+
- Definitely automated: Block/Challenge
|
|
33
|
+
- Likely automated: Challenge/Allow
|
|
34
|
+
- Verified bots: Allow (recommended)
|
|
35
|
+
- Static resource protection: ON (may block mail clients)
|
|
36
|
+
- JavaScript Detections: Optional
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Bot Management for Enterprise
|
|
40
|
+
```txt
|
|
41
|
+
Dashboard: Security > Bots > Configure > Auto-updates: ON (recommended)
|
|
42
|
+
|
|
43
|
+
# Template 1: Block definite bots
|
|
44
|
+
(cf.bot_management.score eq 1 and not cf.bot_management.verified_bot and not cf.bot_management.static_resource)
|
|
45
|
+
Action: Block
|
|
46
|
+
|
|
47
|
+
# Template 2: Challenge likely bots
|
|
48
|
+
(cf.bot_management.score ge 2 and cf.bot_management.score le 29 and not cf.bot_management.verified_bot and not cf.bot_management.static_resource)
|
|
49
|
+
Action: Managed Challenge
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## JavaScript Detections Setup
|
|
53
|
+
|
|
54
|
+
### Enable via Dashboard
|
|
55
|
+
```txt
|
|
56
|
+
Security > Bots > Configure Bot Management > JS Detections: ON
|
|
57
|
+
|
|
58
|
+
Update CSP: script-src 'self' /cdn-cgi/challenge-platform/;
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Manual JS Injection (API)
|
|
62
|
+
```html
|
|
63
|
+
<script>
|
|
64
|
+
function jsdOnload() {
|
|
65
|
+
window.cloudflare.jsd.executeOnce({ callback: function(result) { console.log('JSD:', result); } });
|
|
66
|
+
}
|
|
67
|
+
</script>
|
|
68
|
+
<script src="/cdn-cgi/challenge-platform/scripts/jsd/api.js?onload=jsdOnload" async></script>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
**Use API for**: Selective deployment on specific pages
|
|
72
|
+
**Don't combine**: Zone-wide toggle + manual injection
|
|
73
|
+
|
|
74
|
+
### WAF Rules for JSD
|
|
75
|
+
```txt
|
|
76
|
+
# NEVER use on first page visit (needs HTML page first)
|
|
77
|
+
(not cf.bot_management.js_detection.passed and http.request.uri.path eq "/api/user/create" and http.request.method eq "POST" and not cf.bot_management.verified_bot)
|
|
78
|
+
Action: Managed Challenge (always use Managed Challenge, not Block)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Limitations
|
|
82
|
+
- First request won't have JSD data (needs HTML page first)
|
|
83
|
+
- Strips ETags from HTML responses
|
|
84
|
+
- Not supported with CSP via `<meta>` tags
|
|
85
|
+
- Websocket endpoints not supported
|
|
86
|
+
- Native mobile apps won't pass
|
|
87
|
+
- cf_clearance cookie: 15-minute lifespan, max 4096 bytes
|
|
88
|
+
|
|
89
|
+
## __cf_bm Cookie
|
|
90
|
+
|
|
91
|
+
Cloudflare sets `__cf_bm` cookie to smooth bot scores across user sessions:
|
|
92
|
+
|
|
93
|
+
- **Purpose:** Reduces false positives from score volatility
|
|
94
|
+
- **Scope:** Per-domain, HTTP-only
|
|
95
|
+
- **Lifespan:** Session duration
|
|
96
|
+
- **Privacy:** No PII—only session classification
|
|
97
|
+
- **Automatic:** No configuration required
|
|
98
|
+
|
|
99
|
+
Bot scores for repeat visitors consider session history via this cookie.
|
|
100
|
+
|
|
101
|
+
## Static Resource Protection
|
|
102
|
+
|
|
103
|
+
**File Extensions**: ico, jpg, png, jpeg, gif, css, js, tif, tiff, bmp, pict, webp, svg, svgz, class, jar, txt, csv, doc, docx, xls, xlsx, pdf, ps, pls, ppt, pptx, ttf, otf, woff, woff2, eot, eps, ejs, swf, torrent, midi, mid, m3u8, m4a, mp3, ogg, ts
|
|
104
|
+
**Plus**: `/.well-known/` path (all files)
|
|
105
|
+
|
|
106
|
+
```txt
|
|
107
|
+
# Exclude static resources from bot rules
|
|
108
|
+
(cf.bot_management.score lt 30 and not cf.bot_management.static_resource)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**WARNING**: May block mail clients fetching static images
|
|
112
|
+
|
|
113
|
+
## JA3/JA4 Fingerprinting (Enterprise)
|
|
114
|
+
|
|
115
|
+
```txt
|
|
116
|
+
# Block specific attack fingerprint
|
|
117
|
+
(cf.bot_management.ja3_hash eq "8b8e3d5e3e8b3d5e")
|
|
118
|
+
|
|
119
|
+
# Allow mobile app by fingerprint
|
|
120
|
+
(cf.bot_management.ja4 eq "your_mobile_app_fingerprint")
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Only available for HTTPS/TLS traffic. Missing for Worker-routed traffic or HTTP requests.
|
|
124
|
+
|
|
125
|
+
## Verified Bot Categories
|
|
126
|
+
|
|
127
|
+
```txt
|
|
128
|
+
# Allow search engines only
|
|
129
|
+
(cf.verified_bot_category eq "Search Engine Crawler")
|
|
130
|
+
|
|
131
|
+
# Block AI crawlers
|
|
132
|
+
(cf.verified_bot_category eq "AI Crawler")
|
|
133
|
+
Action: Block
|
|
134
|
+
|
|
135
|
+
# Or use dashboard: Security > Settings > Bot Management > Block AI Bots
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
| Category | String Value | Example |
|
|
139
|
+
|----------|--------------|---------|
|
|
140
|
+
| AI Crawler | `AI Crawler` | GPTBot, Claude-Web |
|
|
141
|
+
| AI Assistant | `AI Assistant` | Perplexity-User, DuckAssistBot |
|
|
142
|
+
| AI Search | `AI Search` | OAI-SearchBot |
|
|
143
|
+
| Accessibility | `Accessibility` | Accessible Web Bot |
|
|
144
|
+
| Academic Research | `Academic Research` | Library of Congress |
|
|
145
|
+
| Advertising & Marketing | `Advertising & Marketing` | Google Adsbot |
|
|
146
|
+
| Aggregator | `Aggregator` | Pinterest, Indeed |
|
|
147
|
+
| Archiver | `Archiver` | Internet Archive, CommonCrawl |
|
|
148
|
+
| Feed Fetcher | `Feed Fetcher` | RSS/Podcast updaters |
|
|
149
|
+
| Monitoring & Analytics | `Monitoring & Analytics` | Uptime monitors |
|
|
150
|
+
| Page Preview | `Page Preview` | Facebook/Slack link preview |
|
|
151
|
+
| SEO | `Search Engine Optimization` | Google Lighthouse |
|
|
152
|
+
| Security | `Security` | Vulnerability scanners |
|
|
153
|
+
| Social Media Marketing | `Social Media Marketing` | Brandwatch |
|
|
154
|
+
| Webhooks | `Webhooks` | Payment processors |
|
|
155
|
+
| Other | `Other` | Uncategorized bots |
|
|
156
|
+
|
|
157
|
+
## Best Practices
|
|
158
|
+
|
|
159
|
+
- **ML Auto-Updates**: Enable on Enterprise for latest models
|
|
160
|
+
- **Start with Managed Challenge**: Test before blocking
|
|
161
|
+
- **Always exclude verified bots**: Use `not cf.bot_management.verified_bot`
|
|
162
|
+
- **Exempt corporate proxies**: For B2B traffic via `cf.bot_management.corporate_proxy`
|
|
163
|
+
- **Use static resource exception**: Improves performance, reduces overhead
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Bot Management Gotchas
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
### "Bot Score = 0"
|
|
6
|
+
|
|
7
|
+
**Cause:** Bot Management didn't run (internal Cloudflare request, Worker routing to zone (Orange-to-Orange), or request handled before BM (Redirect Rules, etc.))
|
|
8
|
+
**Solution:** Check request flow and ensure Bot Management runs in request lifecycle
|
|
9
|
+
|
|
10
|
+
### "JavaScript Detections Not Working"
|
|
11
|
+
|
|
12
|
+
**Cause:** `js_detection.passed` always false or undefined due to: CSP headers don't allow `/cdn-cgi/challenge-platform/`, using on first page visit (needs HTML page first), ad blockers or disabled JS, JSD not enabled in dashboard, or using Block action (must use Managed Challenge)
|
|
13
|
+
**Solution:** Add CSP header `Content-Security-Policy: script-src 'self' /cdn-cgi/challenge-platform/;` and ensure JSD is enabled with Managed Challenge action
|
|
14
|
+
|
|
15
|
+
### "False Positives (Legitimate Users Blocked)"
|
|
16
|
+
|
|
17
|
+
**Cause:** Bot detection incorrectly flagging legitimate users
|
|
18
|
+
**Solution:** Check Bot Analytics for affected IPs/paths, identify detection source (ML, Heuristics, etc.), create exception rule like `(cf.bot_management.score lt 30 and http.request.uri.path eq "/problematic-path")` with Action: Skip (Bot Management), or allowlist by IP/ASN/country
|
|
19
|
+
|
|
20
|
+
### "False Negatives (Bots Not Caught)"
|
|
21
|
+
|
|
22
|
+
**Cause:** Bots bypassing detection
|
|
23
|
+
**Solution:** Lower score threshold (30 → 50), enable JavaScript Detections, add JA3/JA4 fingerprinting rules, or use rate limiting as fallback
|
|
24
|
+
|
|
25
|
+
### "Verified Bot Blocked"
|
|
26
|
+
|
|
27
|
+
**Cause:** Search engine bot blocked by WAF Managed Rules (not just Bot Management)
|
|
28
|
+
**Solution:** Create WAF exception for specific rule ID and verify bot via reverse DNS
|
|
29
|
+
|
|
30
|
+
### "Yandex Bot Blocked During IP Update"
|
|
31
|
+
|
|
32
|
+
**Cause:** Yandex updates bot IPs; new IPs unrecognized for 48h during propagation
|
|
33
|
+
**Solution:**
|
|
34
|
+
1. Check Security Events for specific WAF rule ID blocking Yandex
|
|
35
|
+
2. Create WAF exception:
|
|
36
|
+
```txt
|
|
37
|
+
(http.user_agent contains "YandexBot" and ip.src in {<yandex-ip-range>})
|
|
38
|
+
Action: Skip (WAF Managed Ruleset)
|
|
39
|
+
```
|
|
40
|
+
3. Monitor Bot Analytics for 48h
|
|
41
|
+
4. Remove exception after propagation completes
|
|
42
|
+
|
|
43
|
+
Issue resolves automatically after 48h. Contact Cloudflare Support if persists.
|
|
44
|
+
|
|
45
|
+
### "JA3/JA4 Missing"
|
|
46
|
+
|
|
47
|
+
**Cause:** Non-HTTPS traffic, Worker routing traffic, Orange-to-Orange traffic via Worker, or Bot Management skipped
|
|
48
|
+
**Solution:** JA3/JA4 only available for HTTPS/TLS traffic; check request routing
|
|
49
|
+
|
|
50
|
+
**JA3/JA4 Not User-Unique:** Same browser/library version = same fingerprint
|
|
51
|
+
- Don't use for user identification
|
|
52
|
+
- Use for client profiling only
|
|
53
|
+
- Fingerprints change with browser updates
|
|
54
|
+
|
|
55
|
+
## Bot Verification Methods
|
|
56
|
+
|
|
57
|
+
Cloudflare verifies bots via:
|
|
58
|
+
|
|
59
|
+
1. **Reverse DNS (IP validation):** Traditional method—bot IP resolves to expected domain
|
|
60
|
+
2. **Web Bot Auth:** Modern cryptographic verification—faster propagation
|
|
61
|
+
|
|
62
|
+
When `verifiedBot=true`, bot passed at least one method.
|
|
63
|
+
|
|
64
|
+
**Inactive verified bots:** IPs removed after 24h of no traffic.
|
|
65
|
+
|
|
66
|
+
## Detection Engine Behavior
|
|
67
|
+
|
|
68
|
+
| Engine | Score | Timing | Plan | Notes |
|
|
69
|
+
|--------|-------|--------|------|-------|
|
|
70
|
+
| Heuristics | Always 1 | Immediate | All | Known fingerprints—overrides ML |
|
|
71
|
+
| ML | 1-99 | Immediate | All | Majority of detections |
|
|
72
|
+
| Anomaly Detection | Influences | After baseline | Enterprise | Optional, baseline analysis |
|
|
73
|
+
| JavaScript Detections | Pass/fail | After JS | Pro+ | Headless browser detection |
|
|
74
|
+
| Cloudflare Service | N/A | N/A | Enterprise | Zero Trust internal source |
|
|
75
|
+
|
|
76
|
+
**Priority:** Heuristics > ML—if heuristic matches, score=1 regardless of ML.
|
|
77
|
+
|
|
78
|
+
## Limits
|
|
79
|
+
|
|
80
|
+
| Limit | Value | Notes |
|
|
81
|
+
|-------|-------|-------|
|
|
82
|
+
| Bot Score = 0 | Means not computed | Not score = 100 |
|
|
83
|
+
| First request JSD data | May not be available | JSD data appears on subsequent requests |
|
|
84
|
+
| Score accuracy | Not 100% guaranteed | False positives/negatives possible |
|
|
85
|
+
| JSD on first HTML page visit | Not supported | Requires subsequent page load |
|
|
86
|
+
| JSD requirements | JavaScript-enabled browser | Won't work with JS disabled or ad blockers |
|
|
87
|
+
| JSD ETag stripping | Strips ETags from HTML responses | May affect caching behavior |
|
|
88
|
+
| JSD CSP compatibility | Requires specific CSP | Not compatible with some CSP configurations |
|
|
89
|
+
| JSD meta CSP tags | Not supported | Must use HTTP headers |
|
|
90
|
+
| JSD WebSocket support | Not supported | WebSocket endpoints won't work with JSD |
|
|
91
|
+
| JSD mobile app support | Native apps won't pass | Only works in browsers |
|
|
92
|
+
| JA3/JA4 traffic type | HTTPS/TLS only | Not available for non-HTTPS traffic |
|
|
93
|
+
| JA3/JA4 Worker routing | Missing for Worker-routed traffic | Check request routing |
|
|
94
|
+
| JA3/JA4 uniqueness | Not unique per user | Shared by clients with same browser/library |
|
|
95
|
+
| JA3/JA4 stability | Can change with updates | Browser/library updates affect fingerprints |
|
|
96
|
+
| WAF custom rules (Free) | 5 | Varies by plan |
|
|
97
|
+
| WAF custom rules (Pro) | 20 | Varies by plan |
|
|
98
|
+
| WAF custom rules (Business) | 100 | Varies by plan |
|
|
99
|
+
| WAF custom rules (Enterprise) | 1,000+ | Varies by plan |
|
|
100
|
+
| Workers CPU time | Varies by plan | Applies to bot logic |
|
|
101
|
+
| Bot Analytics sampling | 1-10% adaptive | High-volume zones sampled more aggressively |
|
|
102
|
+
| Bot Analytics history | 30 days max | Historical data retention limit |
|
|
103
|
+
| CSP requirements for JSD | Must allow `/cdn-cgi/challenge-platform/` | Required for JSD to function |
|
|
104
|
+
|
|
105
|
+
### Plan Restrictions
|
|
106
|
+
|
|
107
|
+
| Feature | Free | Pro/Business | Enterprise |
|
|
108
|
+
|---------|------|--------------|------------|
|
|
109
|
+
| Granular scores (1-99) | No | No | Yes |
|
|
110
|
+
| JA3/JA4 | No | No | Yes |
|
|
111
|
+
| Anomaly Detection | No | No | Yes |
|
|
112
|
+
| Corporate Proxy detection | No | No | Yes |
|
|
113
|
+
| Verified bot categories | Limited | Limited | Full |
|
|
114
|
+
| Custom WAF rules | 5 | 20/100 | 1,000+ |
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Bot Management Patterns
|
|
2
|
+
|
|
3
|
+
## E-commerce Protection
|
|
4
|
+
|
|
5
|
+
```txt
|
|
6
|
+
# High security for checkout
|
|
7
|
+
(cf.bot_management.score lt 50 and http.request.uri.path in {"/checkout" "/cart/add"} and not cf.bot_management.verified_bot and not cf.bot_management.corporate_proxy)
|
|
8
|
+
Action: Managed Challenge
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## API Protection
|
|
12
|
+
|
|
13
|
+
```txt
|
|
14
|
+
# Protect API with JS detection + score
|
|
15
|
+
(http.request.uri.path matches "^/api/" and (cf.bot_management.score lt 30 or not cf.bot_management.js_detection.passed) and not cf.bot_management.verified_bot)
|
|
16
|
+
Action: Block
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## SEO-Friendly Bot Handling
|
|
20
|
+
|
|
21
|
+
```txt
|
|
22
|
+
# Allow search engine crawlers
|
|
23
|
+
(cf.bot_management.score lt 30 and not cf.verified_bot_category in {"Search Engine Crawler"})
|
|
24
|
+
Action: Managed Challenge
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Block AI Scrapers
|
|
28
|
+
|
|
29
|
+
```txt
|
|
30
|
+
# Block training crawlers only (allow AI assistants/search)
|
|
31
|
+
(cf.verified_bot_category eq "AI Crawler")
|
|
32
|
+
Action: Block
|
|
33
|
+
|
|
34
|
+
# Block all AI-related bots (training + assistants + search)
|
|
35
|
+
(cf.verified_bot_category in {"AI Crawler" "AI Assistant" "AI Search"})
|
|
36
|
+
Action: Block
|
|
37
|
+
|
|
38
|
+
# Allow AI Search, block AI Crawler and AI Assistant
|
|
39
|
+
(cf.verified_bot_category in {"AI Crawler" "AI Assistant"})
|
|
40
|
+
Action: Block
|
|
41
|
+
|
|
42
|
+
# Or use dashboard: Security > Settings > Bot Management > Block AI Bots
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Rate Limiting by Bot Score
|
|
46
|
+
|
|
47
|
+
```txt
|
|
48
|
+
# Stricter limits for suspicious traffic
|
|
49
|
+
(cf.bot_management.score lt 50)
|
|
50
|
+
Rate: 10 requests per 10 seconds
|
|
51
|
+
|
|
52
|
+
(cf.bot_management.score ge 50)
|
|
53
|
+
Rate: 100 requests per 10 seconds
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Mobile App Allowlisting
|
|
57
|
+
|
|
58
|
+
```txt
|
|
59
|
+
# Identify mobile app by JA3/JA4
|
|
60
|
+
(cf.bot_management.ja4 in {"fingerprint1" "fingerprint2"})
|
|
61
|
+
Action: Skip (all remaining rules)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Datacenter Detection
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
import type { IncomingRequestCfProperties } from '@cloudflare/workers-types';
|
|
68
|
+
|
|
69
|
+
// Low score + not corporate proxy = likely datacenter bot
|
|
70
|
+
export default {
|
|
71
|
+
async fetch(request: Request): Promise<Response> {
|
|
72
|
+
const cf = request.cf as IncomingRequestCfProperties | undefined;
|
|
73
|
+
const botMgmt = cf?.botManagement;
|
|
74
|
+
|
|
75
|
+
if (botMgmt?.score && botMgmt.score < 30 &&
|
|
76
|
+
!botMgmt.corporateProxy && !botMgmt.verifiedBot) {
|
|
77
|
+
return new Response('Datacenter traffic blocked', { status: 403 });
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return fetch(request);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Conditional Delay (Tarpit)
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import type { IncomingRequestCfProperties } from '@cloudflare/workers-types';
|
|
89
|
+
|
|
90
|
+
// Add delay proportional to bot suspicion
|
|
91
|
+
export default {
|
|
92
|
+
async fetch(request: Request): Promise<Response> {
|
|
93
|
+
const cf = request.cf as IncomingRequestCfProperties | undefined;
|
|
94
|
+
const botMgmt = cf?.botManagement;
|
|
95
|
+
|
|
96
|
+
if (botMgmt?.score && botMgmt.score < 50 && !botMgmt.verifiedBot) {
|
|
97
|
+
// Delay: 0-2 seconds for scores 50-0
|
|
98
|
+
const delayMs = Math.max(0, (50 - botMgmt.score) * 40);
|
|
99
|
+
await new Promise(r => setTimeout(r, delayMs));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return fetch(request);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Layered Defense
|
|
108
|
+
|
|
109
|
+
```txt
|
|
110
|
+
1. Bot Management (score-based)
|
|
111
|
+
2. JavaScript Detections (for JS-capable clients)
|
|
112
|
+
3. Rate Limiting (fallback protection)
|
|
113
|
+
4. WAF Managed Rules (OWASP, etc.)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Progressive Enhancement
|
|
117
|
+
|
|
118
|
+
```txt
|
|
119
|
+
Public content: High threshold (score < 10)
|
|
120
|
+
Authenticated: Medium threshold (score < 30)
|
|
121
|
+
Sensitive: Low threshold (score < 50) + JSD
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Zero Trust for Bots
|
|
125
|
+
|
|
126
|
+
```txt
|
|
127
|
+
1. Default deny (all scores < 30)
|
|
128
|
+
2. Allowlist verified bots
|
|
129
|
+
3. Allowlist mobile apps (JA3/JA4)
|
|
130
|
+
4. Allowlist corporate proxies
|
|
131
|
+
5. Allowlist static resources
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Workers: Score + JS Detection
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
import type { IncomingRequestCfProperties } from '@cloudflare/workers-types';
|
|
138
|
+
|
|
139
|
+
export default {
|
|
140
|
+
async fetch(request: Request): Promise<Response> {
|
|
141
|
+
const cf = request.cf as IncomingRequestCfProperties | undefined;
|
|
142
|
+
const botMgmt = cf?.botManagement;
|
|
143
|
+
const url = new URL(request.url);
|
|
144
|
+
|
|
145
|
+
if (botMgmt?.staticResource) return fetch(request); // Skip static
|
|
146
|
+
|
|
147
|
+
// API endpoints: require JS detection + good score
|
|
148
|
+
if (url.pathname.startsWith('/api/')) {
|
|
149
|
+
const jsDetectionPassed = botMgmt?.jsDetection?.passed ?? false;
|
|
150
|
+
const score = botMgmt?.score ?? 100;
|
|
151
|
+
|
|
152
|
+
if (!jsDetectionPassed || score < 30) {
|
|
153
|
+
return new Response('Unauthorized', { status: 401 });
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return fetch(request);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Rate Limiting by JWT Claim + Bot Score
|
|
163
|
+
|
|
164
|
+
```txt
|
|
165
|
+
# Enterprise: Combine bot score with JWT validation
|
|
166
|
+
Rate limiting > Custom rules
|
|
167
|
+
- Field: lookup_json_string(http.request.jwt.claims["{config_id}"][0], "sub")
|
|
168
|
+
- Matches: user ID claim
|
|
169
|
+
- Additional condition: cf.bot_management.score lt 50
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## WAF Integration Points
|
|
173
|
+
|
|
174
|
+
- **WAF Custom Rules**: Primary enforcement mechanism
|
|
175
|
+
- **Rate Limiting Rules**: Bot score as dimension, stricter limits for low scores
|
|
176
|
+
- **Transform Rules**: Pass score to origin via custom header
|
|
177
|
+
- **Workers**: Programmatic bot logic, custom scoring algorithms
|
|
178
|
+
- **Page Rules / Configuration Rules**: Zone-level overrides, path-specific settings
|
|
179
|
+
|
|
180
|
+
## See Also
|
|
181
|
+
|
|
182
|
+
- [gotchas.md](./gotchas.md) - Common errors, false positives/negatives, limitations
|