@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,183 @@
|
|
|
1
|
+
# Smart Placement Patterns
|
|
2
|
+
|
|
3
|
+
## Backend Worker with Database Access
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
export default {
|
|
7
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
8
|
+
const user = await env.DATABASE.prepare('SELECT * FROM users WHERE id = ?').bind(userId).first();
|
|
9
|
+
const orders = await env.DATABASE.prepare('SELECT * FROM orders WHERE user_id = ?').bind(userId).all();
|
|
10
|
+
return Response.json({ user, orders });
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```jsonc
|
|
16
|
+
{ "placement": { "mode": "smart" }, "d1_databases": [{ "binding": "DATABASE", "database_id": "xxx" }] }
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Frontend + Backend Split (Service Bindings)
|
|
20
|
+
|
|
21
|
+
**Frontend:** Runs at edge for fast user response
|
|
22
|
+
**Backend:** Smart Placement runs close to database
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
// Frontend Worker - routes requests to backend
|
|
26
|
+
interface Env {
|
|
27
|
+
BACKEND: Fetcher; // Service Binding to backend Worker
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default {
|
|
31
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
32
|
+
if (new URL(request.url).pathname.startsWith('/api/')) {
|
|
33
|
+
return env.BACKEND.fetch(request); // Forward to backend
|
|
34
|
+
}
|
|
35
|
+
return new Response('Frontend content');
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// Backend Worker - database operations
|
|
40
|
+
interface BackendEnv {
|
|
41
|
+
DATABASE: D1Database;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
async fetch(request: Request, env: BackendEnv): Promise<Response> {
|
|
46
|
+
const data = await env.DATABASE.prepare('SELECT * FROM table').all();
|
|
47
|
+
return Response.json(data);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**CRITICAL:** Use fetch-based Service Bindings (shown above). If using RPC with `WorkerEntrypoint`, Smart Placement will NOT optimize those method calls - only `fetch` handlers are affected.
|
|
53
|
+
|
|
54
|
+
**RPC vs Fetch - CRITICAL:** Smart Placement ONLY works with fetch-based bindings, NOT RPC.
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
// ❌ RPC - Smart Placement has NO EFFECT on backend RPC methods
|
|
58
|
+
export class BackendRPC extends WorkerEntrypoint {
|
|
59
|
+
async getData() {
|
|
60
|
+
// ALWAYS runs at edge, Smart Placement ignored
|
|
61
|
+
return await this.env.DATABASE.prepare('SELECT * FROM table').all();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// ✅ Fetch - Smart Placement WORKS
|
|
66
|
+
export default {
|
|
67
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
68
|
+
// Runs close to DATABASE when Smart Placement enabled
|
|
69
|
+
const data = await env.DATABASE.prepare('SELECT * FROM table').all();
|
|
70
|
+
return Response.json(data);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## External API Integration
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
export default {
|
|
79
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
80
|
+
const apiUrl = 'https://api.partner.com';
|
|
81
|
+
const headers = { 'Authorization': `Bearer ${env.API_KEY}` };
|
|
82
|
+
|
|
83
|
+
const [profile, transactions] = await Promise.all([
|
|
84
|
+
fetch(`${apiUrl}/profile`, { headers }),
|
|
85
|
+
fetch(`${apiUrl}/transactions`, { headers })
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
return Response.json({
|
|
89
|
+
profile: await profile.json(),
|
|
90
|
+
transactions: await transactions.json()
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## SSR / API Gateway Pattern
|
|
97
|
+
|
|
98
|
+
```typescript
|
|
99
|
+
// Frontend (edge) - auth/routing close to user
|
|
100
|
+
export default {
|
|
101
|
+
async fetch(request: Request, env: Env) {
|
|
102
|
+
if (!request.headers.get('Authorization')) {
|
|
103
|
+
return new Response('Unauthorized', { status: 401 });
|
|
104
|
+
}
|
|
105
|
+
const data = await env.BACKEND.fetch(request);
|
|
106
|
+
return new Response(renderPage(await data.json()), {
|
|
107
|
+
headers: { 'Content-Type': 'text/html' }
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Backend (Smart Placement) - DB operations close to data
|
|
113
|
+
export default {
|
|
114
|
+
async fetch(request: Request, env: Env) {
|
|
115
|
+
const data = await env.DATABASE.prepare('SELECT * FROM pages WHERE id = ?').bind(pageId).first();
|
|
116
|
+
return Response.json(data);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Durable Objects with Smart Placement
|
|
122
|
+
|
|
123
|
+
**Key principle:** Smart Placement does NOT control WHERE Durable Objects run. DOs always run in their designated region (based on jurisdiction or smart location hints).
|
|
124
|
+
|
|
125
|
+
**What Smart Placement DOES affect:** The location of the coordinator Worker's `fetch` handler that makes calls to multiple DOs.
|
|
126
|
+
|
|
127
|
+
**Pattern:** Enable Smart Placement on coordinator Worker that aggregates data from multiple DOs:
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
// Worker with Smart Placement - aggregates data from multiple DOs
|
|
131
|
+
export default {
|
|
132
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
133
|
+
const userId = new URL(request.url).searchParams.get('user');
|
|
134
|
+
|
|
135
|
+
// Get DO stubs
|
|
136
|
+
const userDO = env.USER_DO.get(env.USER_DO.idFromName(userId));
|
|
137
|
+
const analyticsID = env.ANALYTICS_DO.idFromName(`analytics-${userId}`);
|
|
138
|
+
const analyticsDO = env.ANALYTICS_DO.get(analyticsID);
|
|
139
|
+
|
|
140
|
+
// Fetch from multiple DOs
|
|
141
|
+
const [userData, analyticsData] = await Promise.all([
|
|
142
|
+
userDO.fetch(new Request('https://do/profile')),
|
|
143
|
+
analyticsDO.fetch(new Request('https://do/stats'))
|
|
144
|
+
]);
|
|
145
|
+
|
|
146
|
+
return Response.json({
|
|
147
|
+
user: await userData.json(),
|
|
148
|
+
analytics: await analyticsData.json()
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
```jsonc
|
|
155
|
+
// wrangler.jsonc
|
|
156
|
+
{
|
|
157
|
+
"placement": { "mode": "smart" },
|
|
158
|
+
"durable_objects": {
|
|
159
|
+
"bindings": [
|
|
160
|
+
{ "name": "USER_DO", "class_name": "UserDO" },
|
|
161
|
+
{ "name": "ANALYTICS_DO", "class_name": "AnalyticsDO" }
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**When this helps:**
|
|
168
|
+
- Worker's `fetch` handler runs closer to DO regions, reducing network latency for multiple DO calls
|
|
169
|
+
- Most beneficial when DOs are geographically concentrated or in specific jurisdictions
|
|
170
|
+
- Helps when coordinator makes many sequential or parallel DO calls
|
|
171
|
+
|
|
172
|
+
**When this DOESN'T help:**
|
|
173
|
+
- DOs are globally distributed (no single optimal Worker location)
|
|
174
|
+
- Worker only calls a single DO
|
|
175
|
+
- DO calls are infrequent or cached
|
|
176
|
+
|
|
177
|
+
## Best Practices
|
|
178
|
+
|
|
179
|
+
- Split full-stack apps: frontend at edge, backend with Smart Placement
|
|
180
|
+
- Use fetch-based Service Bindings (not RPC)
|
|
181
|
+
- Enable for backend logic: APIs, data aggregation, DB operations
|
|
182
|
+
- Don't enable for: static content, edge logic, RPC methods, Pages with `run_worker_first`
|
|
183
|
+
- Wait 15+ min for analysis, verify `placement_status = SUCCESS`
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Cloudflare Snippets Skill Reference
|
|
2
|
+
|
|
3
|
+
## Description
|
|
4
|
+
Expert guidance for **Cloudflare Snippets ONLY** - a lightweight JavaScript-based edge logic platform for modifying HTTP requests and responses. Snippets run as part of the Ruleset Engine and are included at no additional cost on paid plans (Pro, Business, Enterprise).
|
|
5
|
+
|
|
6
|
+
## What Are Snippets?
|
|
7
|
+
Snippets are JavaScript functions executed at the edge as part of Cloudflare's Ruleset Engine. Key characteristics:
|
|
8
|
+
- **Execution time**: 5ms CPU limit per request
|
|
9
|
+
- **Size limit**: 32KB per snippet
|
|
10
|
+
- **Runtime**: V8 isolate (subset of Workers APIs)
|
|
11
|
+
- **Subrequests**: 2-5 fetch calls depending on plan
|
|
12
|
+
- **Cost**: Included with Pro/Business/Enterprise plans
|
|
13
|
+
|
|
14
|
+
## Snippets vs Workers Decision Matrix
|
|
15
|
+
|
|
16
|
+
| Factor | Choose Snippets If... | Choose Workers If... |
|
|
17
|
+
|--------|----------------------|---------------------|
|
|
18
|
+
| **Complexity** | Simple request/response modifications | Complex business logic, routing, middleware |
|
|
19
|
+
| **Execution time** | <5ms sufficient | Need >5ms or variable time |
|
|
20
|
+
| **Subrequests** | 2-5 fetch calls sufficient | Need >5 subrequests or complex orchestration |
|
|
21
|
+
| **Code size** | <32KB sufficient | Need >32KB or npm dependencies |
|
|
22
|
+
| **Cost** | Want zero additional cost | Can afford $5/mo + usage |
|
|
23
|
+
| **APIs** | Need basic fetch, headers, URL | Need KV, D1, R2, Durable Objects, cron triggers |
|
|
24
|
+
| **Deployment** | Need rule-based triggers | Want custom routing logic |
|
|
25
|
+
|
|
26
|
+
**Rule of thumb**: Use Snippets for modifications, Workers for applications.
|
|
27
|
+
|
|
28
|
+
## Execution Model
|
|
29
|
+
1. Request arrives at Cloudflare edge
|
|
30
|
+
2. Ruleset Engine evaluates snippet rules (filter expressions)
|
|
31
|
+
3. If rule matches, snippet executes within 5ms limit
|
|
32
|
+
4. Modified request/response continues through pipeline
|
|
33
|
+
5. Response returned to client
|
|
34
|
+
|
|
35
|
+
Snippets execute synchronously in the request path - performance is critical.
|
|
36
|
+
|
|
37
|
+
## Reading Order
|
|
38
|
+
1. **[configuration.md](configuration.md)** - Start here: setup, deployment methods (Dashboard/API/Terraform)
|
|
39
|
+
2. **[api.md](api.md)** - Core APIs: Request, Response, headers, `request.cf` properties
|
|
40
|
+
3. **[patterns.md](patterns.md)** - Real-world examples: geo-routing, A/B tests, security headers
|
|
41
|
+
4. **[gotchas.md](gotchas.md)** - Troubleshooting: common errors, performance tips, API limitations
|
|
42
|
+
|
|
43
|
+
## In This Reference
|
|
44
|
+
|
|
45
|
+
- **[configuration.md](configuration.md)** - Setup, deployment, configuration
|
|
46
|
+
- **[api.md](api.md)** - API endpoints, methods, interfaces
|
|
47
|
+
- **[patterns.md](patterns.md)** - Common patterns, use cases, examples
|
|
48
|
+
- **[gotchas.md](gotchas.md)** - Troubleshooting, best practices, limitations
|
|
49
|
+
|
|
50
|
+
## Quick Start
|
|
51
|
+
```javascript
|
|
52
|
+
// Snippet: Add security headers
|
|
53
|
+
export default {
|
|
54
|
+
async fetch(request) {
|
|
55
|
+
const response = await fetch(request);
|
|
56
|
+
const newResponse = new Response(response.body, response);
|
|
57
|
+
newResponse.headers.set("X-Frame-Options", "DENY");
|
|
58
|
+
newResponse.headers.set("X-Content-Type-Options", "nosniff");
|
|
59
|
+
return newResponse;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Deploy via Dashboard (Rules → Snippets) or API/Terraform. See configuration.md for details.
|
|
65
|
+
|
|
66
|
+
## See Also
|
|
67
|
+
|
|
68
|
+
- [Cloudflare Docs](https://developers.cloudflare.com/rules/snippets/)
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Snippets API Reference
|
|
2
|
+
|
|
3
|
+
## Request Object
|
|
4
|
+
|
|
5
|
+
### HTTP Properties
|
|
6
|
+
```javascript
|
|
7
|
+
request.method // GET, POST, PUT, DELETE, etc.
|
|
8
|
+
request.url // Full URL string
|
|
9
|
+
request.headers // Headers object
|
|
10
|
+
request.body // ReadableStream (for POST/PUT)
|
|
11
|
+
request.cf // Cloudflare properties (see below)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
### URL Operations
|
|
15
|
+
```javascript
|
|
16
|
+
const url = new URL(request.url);
|
|
17
|
+
url.hostname // "example.com"
|
|
18
|
+
url.pathname // "/path/to/page"
|
|
19
|
+
url.search // "?query=value"
|
|
20
|
+
url.searchParams.get("q") // "value"
|
|
21
|
+
url.searchParams.set("q", "new")
|
|
22
|
+
url.searchParams.delete("q")
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Header Operations
|
|
26
|
+
```javascript
|
|
27
|
+
// Read headers
|
|
28
|
+
request.headers.get("User-Agent")
|
|
29
|
+
request.headers.has("Authorization")
|
|
30
|
+
request.headers.getSetCookie() // Get all Set-Cookie headers
|
|
31
|
+
|
|
32
|
+
// Modify headers (create new request)
|
|
33
|
+
const modifiedRequest = new Request(request);
|
|
34
|
+
modifiedRequest.headers.set("X-Custom", "value")
|
|
35
|
+
modifiedRequest.headers.delete("X-Remove")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Cloudflare Properties (`request.cf`)
|
|
39
|
+
Access Cloudflare-specific metadata about the request:
|
|
40
|
+
|
|
41
|
+
```javascript
|
|
42
|
+
// Geolocation
|
|
43
|
+
request.cf.city // "San Francisco"
|
|
44
|
+
request.cf.continent // "NA"
|
|
45
|
+
request.cf.country // "US"
|
|
46
|
+
request.cf.region // "California" or "CA"
|
|
47
|
+
request.cf.regionCode // "CA"
|
|
48
|
+
request.cf.postalCode // "94102"
|
|
49
|
+
request.cf.latitude // "37.7749"
|
|
50
|
+
request.cf.longitude // "-122.4194"
|
|
51
|
+
request.cf.timezone // "America/Los_Angeles"
|
|
52
|
+
request.cf.metroCode // "807" (DMA code)
|
|
53
|
+
|
|
54
|
+
// Network
|
|
55
|
+
request.cf.colo // "SFO" (airport code of datacenter)
|
|
56
|
+
request.cf.asn // 13335 (ASN number)
|
|
57
|
+
request.cf.asOrganization // "Cloudflare, Inc."
|
|
58
|
+
|
|
59
|
+
// Bot Management (if enabled)
|
|
60
|
+
request.cf.botManagement.score // 1-99 (1=bot, 99=human)
|
|
61
|
+
request.cf.botManagement.verified_bot // true/false
|
|
62
|
+
request.cf.botManagement.static_resource // true/false
|
|
63
|
+
|
|
64
|
+
// TLS/HTTP version
|
|
65
|
+
request.cf.tlsVersion // "TLSv1.3"
|
|
66
|
+
request.cf.tlsCipher // "AEAD-AES128-GCM-SHA256"
|
|
67
|
+
request.cf.httpProtocol // "HTTP/2"
|
|
68
|
+
|
|
69
|
+
// Request metadata
|
|
70
|
+
request.cf.requestPriority // "weight=192;exclusive=0"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Use cases**: Geo-routing, bot detection, security decisions, analytics.
|
|
74
|
+
|
|
75
|
+
## Response Object
|
|
76
|
+
|
|
77
|
+
### Response Constructors
|
|
78
|
+
```javascript
|
|
79
|
+
// Plain text
|
|
80
|
+
new Response("Hello", { status: 200 })
|
|
81
|
+
|
|
82
|
+
// JSON
|
|
83
|
+
Response.json({ key: "value" }, { status: 200 })
|
|
84
|
+
|
|
85
|
+
// HTML
|
|
86
|
+
new Response("<h1>Hi</h1>", {
|
|
87
|
+
status: 200,
|
|
88
|
+
headers: { "Content-Type": "text/html" }
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
// Redirect
|
|
92
|
+
Response.redirect("https://example.com", 301) // or 302
|
|
93
|
+
|
|
94
|
+
// Stream (pass through)
|
|
95
|
+
new Response(response.body, response)
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Response Headers
|
|
99
|
+
```javascript
|
|
100
|
+
// Create modified response
|
|
101
|
+
const newResponse = new Response(response.body, response);
|
|
102
|
+
|
|
103
|
+
// Set/modify headers
|
|
104
|
+
newResponse.headers.set("X-Custom", "value")
|
|
105
|
+
newResponse.headers.append("Set-Cookie", "session=abc; Path=/")
|
|
106
|
+
newResponse.headers.delete("Server")
|
|
107
|
+
|
|
108
|
+
// Common headers
|
|
109
|
+
newResponse.headers.set("Cache-Control", "public, max-age=3600")
|
|
110
|
+
newResponse.headers.set("Content-Type", "application/json")
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Response Properties
|
|
114
|
+
```javascript
|
|
115
|
+
response.status // 200, 404, 500, etc.
|
|
116
|
+
response.statusText // "OK", "Not Found", etc.
|
|
117
|
+
response.headers // Headers object
|
|
118
|
+
response.body // ReadableStream
|
|
119
|
+
response.ok // true if status 200-299
|
|
120
|
+
response.redirected // true if redirected
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## REST API Operations
|
|
124
|
+
|
|
125
|
+
### List Snippets
|
|
126
|
+
```bash
|
|
127
|
+
GET /zones/{zone_id}/snippets
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Get Snippet
|
|
131
|
+
```bash
|
|
132
|
+
GET /zones/{zone_id}/snippets/{snippet_name}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Create/Update Snippet
|
|
136
|
+
```bash
|
|
137
|
+
PUT /zones/{zone_id}/snippets/{snippet_name}
|
|
138
|
+
Content-Type: multipart/form-data
|
|
139
|
+
|
|
140
|
+
files=@snippet.js
|
|
141
|
+
metadata={"main_module":"snippet.js"}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Delete Snippet
|
|
145
|
+
```bash
|
|
146
|
+
DELETE /zones/{zone_id}/snippets/{snippet_name}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### List Snippet Rules
|
|
150
|
+
```bash
|
|
151
|
+
GET /zones/{zone_id}/rulesets/phases/http_request_snippets/entrypoint
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Update Snippet Rules
|
|
155
|
+
```bash
|
|
156
|
+
PUT /zones/{zone_id}/snippets/snippet_rules
|
|
157
|
+
Content-Type: application/json
|
|
158
|
+
|
|
159
|
+
{
|
|
160
|
+
"rules": [{
|
|
161
|
+
"description": "Apply snippet",
|
|
162
|
+
"enabled": true,
|
|
163
|
+
"expression": "http.host eq \"example.com\"",
|
|
164
|
+
"snippet_name": "my_snippet"
|
|
165
|
+
}]
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Available APIs in Snippets
|
|
170
|
+
|
|
171
|
+
### ✅ Supported
|
|
172
|
+
- `fetch()` - HTTP requests (2-5 subrequests per plan)
|
|
173
|
+
- `Request` / `Response` - Standard Web APIs
|
|
174
|
+
- `URL` / `URLSearchParams` - URL manipulation
|
|
175
|
+
- `Headers` - Header manipulation
|
|
176
|
+
- `TextEncoder` / `TextDecoder` - Text encoding
|
|
177
|
+
- `crypto.subtle` - Web Crypto API (hashing, signing)
|
|
178
|
+
- `crypto.randomUUID()` - UUID generation
|
|
179
|
+
|
|
180
|
+
### ❌ Not Supported in Snippets
|
|
181
|
+
- `caches` API - Not available (use Workers)
|
|
182
|
+
- `KV`, `D1`, `R2` - Storage APIs (use Workers)
|
|
183
|
+
- `Durable Objects` - Stateful objects (use Workers)
|
|
184
|
+
- `WebSocket` - WebSocket upgrades (use Workers)
|
|
185
|
+
- `HTMLRewriter` - HTML parsing (use Workers)
|
|
186
|
+
- `import` statements - No module imports
|
|
187
|
+
- `addEventListener` - Use `export default { async fetch() {}` pattern
|
|
188
|
+
|
|
189
|
+
## Snippet Structure
|
|
190
|
+
```javascript
|
|
191
|
+
export default {
|
|
192
|
+
async fetch(request) {
|
|
193
|
+
// Your logic here
|
|
194
|
+
const response = await fetch(request);
|
|
195
|
+
return response; // or modified response
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
```
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# Snippets Configuration Guide
|
|
2
|
+
|
|
3
|
+
## Configuration Methods
|
|
4
|
+
|
|
5
|
+
### 1. Dashboard (GUI)
|
|
6
|
+
**Best for**: Quick tests, single snippets, visual rule building
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
1. Go to zone → Rules → Snippets
|
|
10
|
+
2. Click "Create Snippet" or select template
|
|
11
|
+
3. Enter snippet name (a-z, 0-9, _ only, cannot change later)
|
|
12
|
+
4. Write JavaScript code (32KB max)
|
|
13
|
+
5. Configure snippet rule:
|
|
14
|
+
- Expression Builder (visual) or Expression Editor (text)
|
|
15
|
+
- Use Ruleset Engine filter expressions
|
|
16
|
+
6. Test with Preview/HTTP tabs
|
|
17
|
+
7. Deploy or Save as Draft
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 2. REST API
|
|
21
|
+
**Best for**: CI/CD, automation, programmatic management
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Create/update snippet
|
|
25
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/$SNIPPET_NAME" \
|
|
26
|
+
--request PUT \
|
|
27
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
28
|
+
--form "files=@example.js" \
|
|
29
|
+
--form "metadata={\"main_module\": \"example.js\"}"
|
|
30
|
+
|
|
31
|
+
# Create snippet rule
|
|
32
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/snippet_rules" \
|
|
33
|
+
--request PUT \
|
|
34
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
|
|
35
|
+
--header "Content-Type: application/json" \
|
|
36
|
+
--data '{
|
|
37
|
+
"rules": [
|
|
38
|
+
{
|
|
39
|
+
"description": "Trigger snippet on /api paths",
|
|
40
|
+
"enabled": true,
|
|
41
|
+
"expression": "starts_with(http.request.uri.path, \"/api/\")",
|
|
42
|
+
"snippet_name": "api_snippet"
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
}'
|
|
46
|
+
|
|
47
|
+
# List snippets
|
|
48
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets" \
|
|
49
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
|
|
50
|
+
|
|
51
|
+
# Delete snippet
|
|
52
|
+
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/$SNIPPET_NAME" \
|
|
53
|
+
--request DELETE \
|
|
54
|
+
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 3. Terraform
|
|
58
|
+
**Best for**: Infrastructure-as-code, multi-zone deployments
|
|
59
|
+
|
|
60
|
+
```hcl
|
|
61
|
+
# Configure Terraform provider
|
|
62
|
+
terraform {
|
|
63
|
+
required_providers {
|
|
64
|
+
cloudflare = {
|
|
65
|
+
source = "cloudflare/cloudflare"
|
|
66
|
+
version = "~> 4.0"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
provider "cloudflare" {
|
|
72
|
+
api_token = var.cloudflare_api_token
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
# Create snippet
|
|
76
|
+
resource "cloudflare_snippet" "security_headers" {
|
|
77
|
+
zone_id = var.zone_id
|
|
78
|
+
name = "security_headers"
|
|
79
|
+
|
|
80
|
+
main_module = "security_headers.js"
|
|
81
|
+
files {
|
|
82
|
+
name = "security_headers.js"
|
|
83
|
+
content = file("${path.module}/snippets/security_headers.js")
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# Create snippet rule
|
|
88
|
+
resource "cloudflare_snippet_rules" "security_rules" {
|
|
89
|
+
zone_id = var.zone_id
|
|
90
|
+
|
|
91
|
+
rules {
|
|
92
|
+
description = "Apply security headers to all requests"
|
|
93
|
+
enabled = true
|
|
94
|
+
expression = "true"
|
|
95
|
+
snippet_name = cloudflare_snippet.security_headers.name
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### 4. Pulumi
|
|
101
|
+
**Best for**: Multi-cloud IaC, TypeScript/Python/Go workflows
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
import * as cloudflare from "@pulumi/cloudflare";
|
|
105
|
+
import * as fs from "fs";
|
|
106
|
+
|
|
107
|
+
// Create snippet
|
|
108
|
+
const securitySnippet = new cloudflare.Snippet("security-headers", {
|
|
109
|
+
zoneId: zoneId,
|
|
110
|
+
name: "security_headers",
|
|
111
|
+
mainModule: "security_headers.js",
|
|
112
|
+
files: [{
|
|
113
|
+
name: "security_headers.js",
|
|
114
|
+
content: fs.readFileSync("./snippets/security_headers.js", "utf8"),
|
|
115
|
+
}],
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Create snippet rule
|
|
119
|
+
const snippetRule = new cloudflare.SnippetRules("security-rules", {
|
|
120
|
+
zoneId: zoneId,
|
|
121
|
+
rules: [{
|
|
122
|
+
description: "Apply security headers",
|
|
123
|
+
enabled: true,
|
|
124
|
+
expression: "true",
|
|
125
|
+
snippetName: securitySnippet.name,
|
|
126
|
+
}],
|
|
127
|
+
});
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Filter Expressions
|
|
131
|
+
|
|
132
|
+
Snippets use Cloudflare's Ruleset Engine expression language to determine when to execute.
|
|
133
|
+
|
|
134
|
+
### Common Expression Patterns
|
|
135
|
+
|
|
136
|
+
```javascript
|
|
137
|
+
// Host matching
|
|
138
|
+
http.host eq "example.com"
|
|
139
|
+
http.host in {"example.com" "www.example.com"}
|
|
140
|
+
http.host contains "example"
|
|
141
|
+
|
|
142
|
+
// Path matching
|
|
143
|
+
http.request.uri.path eq "/api/users"
|
|
144
|
+
starts_with(http.request.uri.path, "/api/")
|
|
145
|
+
ends_with(http.request.uri.path, ".json")
|
|
146
|
+
matches(http.request.uri.path, "^/api/v[0-9]+/")
|
|
147
|
+
|
|
148
|
+
// Query parameters
|
|
149
|
+
http.request.uri.query contains "debug=true"
|
|
150
|
+
|
|
151
|
+
// Headers
|
|
152
|
+
http.headers["user-agent"] contains "Mobile"
|
|
153
|
+
http.headers["accept-language"] eq "en-US"
|
|
154
|
+
|
|
155
|
+
// Cookies
|
|
156
|
+
http.cookie contains "session="
|
|
157
|
+
|
|
158
|
+
// Geolocation
|
|
159
|
+
ip.geoip.country eq "US"
|
|
160
|
+
ip.geoip.continent eq "EU"
|
|
161
|
+
|
|
162
|
+
// Bot detection (requires Bot Management)
|
|
163
|
+
cf.bot_management.score lt 30
|
|
164
|
+
|
|
165
|
+
// Method
|
|
166
|
+
http.request.method eq "POST"
|
|
167
|
+
http.request.method in {"POST" "PUT" "PATCH"}
|
|
168
|
+
|
|
169
|
+
// Combine with logical operators
|
|
170
|
+
http.host eq "example.com" and starts_with(http.request.uri.path, "/api/")
|
|
171
|
+
ip.geoip.country eq "US" or ip.geoip.country eq "CA"
|
|
172
|
+
not http.headers["user-agent"] contains "bot"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Expression Functions
|
|
176
|
+
|
|
177
|
+
| Function | Example | Description |
|
|
178
|
+
|----------|---------|-------------|
|
|
179
|
+
| `starts_with()` | `starts_with(http.request.uri.path, "/api/")` | Check prefix |
|
|
180
|
+
| `ends_with()` | `ends_with(http.request.uri.path, ".json")` | Check suffix |
|
|
181
|
+
| `contains()` | `contains(http.headers["user-agent"], "Mobile")` | Check substring |
|
|
182
|
+
| `matches()` | `matches(http.request.uri.path, "^/api/")` | Regex match |
|
|
183
|
+
| `lower()` | `lower(http.host) eq "example.com"` | Convert to lowercase |
|
|
184
|
+
| `upper()` | `upper(http.headers["x-api-key"])` | Convert to uppercase |
|
|
185
|
+
| `len()` | `len(http.request.uri.path) gt 100` | String length |
|
|
186
|
+
|
|
187
|
+
## Deployment Workflow
|
|
188
|
+
|
|
189
|
+
### Development
|
|
190
|
+
1. Write snippet code locally
|
|
191
|
+
2. Test syntax with `node snippet.js` or TypeScript compiler
|
|
192
|
+
3. Deploy to Dashboard or use API with `Save as Draft`
|
|
193
|
+
4. Test with Preview/HTTP tabs in Dashboard
|
|
194
|
+
5. Enable rule when ready
|
|
195
|
+
|
|
196
|
+
### Production
|
|
197
|
+
1. Store snippet code in version control
|
|
198
|
+
2. Use Terraform/Pulumi for reproducible deployments
|
|
199
|
+
3. Deploy to staging zone first
|
|
200
|
+
4. Test with real traffic (use low-traffic subdomain)
|
|
201
|
+
5. Apply to production zone
|
|
202
|
+
6. Monitor with Analytics/Logpush
|
|
203
|
+
|
|
204
|
+
## Limits & Requirements
|
|
205
|
+
|
|
206
|
+
| Resource | Limit | Notes |
|
|
207
|
+
|----------|-------|-------|
|
|
208
|
+
| Snippet size | 32 KB | Per snippet, compressed |
|
|
209
|
+
| Snippet name | 64 chars | `a-z`, `0-9`, `_` only, immutable |
|
|
210
|
+
| Snippets per zone | 20 | Soft limit, contact support for more |
|
|
211
|
+
| Rules per zone | 20 | One rule per snippet typical |
|
|
212
|
+
| Expression length | 4096 chars | Per rule expression |
|
|
213
|
+
|
|
214
|
+
## Authentication
|
|
215
|
+
|
|
216
|
+
### API Token (Recommended)
|
|
217
|
+
```bash
|
|
218
|
+
# Create token at: https://dash.cloudflare.com/profile/api-tokens
|
|
219
|
+
# Required permissions: Zone.Snippets:Edit, Zone.Rules:Edit
|
|
220
|
+
export CLOUDFLARE_API_TOKEN="your_token_here"
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### API Key (Legacy)
|
|
224
|
+
```bash
|
|
225
|
+
export CLOUDFLARE_EMAIL="your@email.com"
|
|
226
|
+
export CLOUDFLARE_API_KEY="your_global_api_key"
|
|
227
|
+
```
|