opencodekit 0.15.4 → 0.15.6
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/dist/index.js +2 -2
- package/dist/template/.opencode/agent/explore.md +13 -12
- package/dist/template/.opencode/command/cloudflare.md +70 -0
- package/dist/template/.opencode/memory/observations/2026-01-19-learning-oh-my-opencode-slim-vs-opencodekit-templ.md +27 -0
- package/dist/template/.opencode/package.json +1 -1
- package/dist/template/.opencode/plugin/sessions.ts +38 -4
- package/dist/template/.opencode/skill/cloudflare/SKILL.md +233 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/README.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/api.md +100 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/dist/template/.opencode/skill/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-gateway/README.md +695 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/api.md +38 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/configuration.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/gotchas.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/ai-search/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/api.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/api.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/configuration.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/api/patterns.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/README.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/api.md +78 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/gotchas.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/api-shield/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/configuration.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/bindings/patterns.md +37 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/README.md +71 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/api.md +168 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/configuration.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/bot-management/patterns.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/api.md +54 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/c3/README.md +264 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/README.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/api.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/api.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/configuration.md +56 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/containers/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/README.md +85 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/api.md +198 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/README.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/api.md +141 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/gotchas.md +70 -0
- package/dist/template/.opencode/skill/cloudflare/references/d1/patterns.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/README.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/api.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/configuration.md +67 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/gotchas.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/ddos/patterns.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/api.md +89 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/configuration.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/do-storage/patterns.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/README.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/api.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/configuration.md +148 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/dist/template/.opencode/skill/cloudflare/references/durable-objects/patterns.md +255 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/api.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/gotchas.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-routing/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/email-workers/README.md +598 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/dist/template/.opencode/skill/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/configuration.md +45 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/gotchas.md +23 -0
- package/dist/template/.opencode/skill/cloudflare/references/images/patterns.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/api.md +114 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/configuration.md +92 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/gotchas.md +117 -0
- package/dist/template/.opencode/skill/cloudflare/references/kv/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/README.md +64 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/api.md +144 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/configuration.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/gotchas.md +187 -0
- package/dist/template/.opencode/skill/cloudflare/references/miniflare/patterns.md +211 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/README.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/api.md +240 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/api.md +51 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/configuration.md +60 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/gotchas.md +36 -0
- package/dist/template/.opencode/skill/cloudflare/references/observability/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/api.md +200 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/configuration.md +228 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/gotchas.md +161 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages/patterns.md +145 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/README.md +57 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/api.md +201 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/configuration.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/dist/template/.opencode/skill/cloudflare/references/pages-functions/patterns.md +190 -0
- package/dist/template/.opencode/skill/cloudflare/references/pipelines/README.md +664 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/README.md +107 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/api.md +194 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/configuration.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/gotchas.md +223 -0
- package/dist/template/.opencode/skill/cloudflare/references/pulumi/patterns.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/README.md +69 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/api.md +138 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/configuration.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/gotchas.md +112 -0
- package/dist/template/.opencode/skill/cloudflare/references/queues/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/README.md +61 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/api.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/configuration.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/gotchas.md +94 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2/patterns.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/dist/template/.opencode/skill/cloudflare/references/r2-sql/README.md +512 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/README.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/api.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/README.md +81 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/api.md +164 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/dist/template/.opencode/skill/cloudflare/references/realtimekit/patterns.md +155 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/api.md +178 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/configuration.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/gotchas.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/sandbox/patterns.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/README.md +58 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/api.md +182 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/configuration.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/secrets-store/patterns.md +218 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/README.md +91 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/api.md +139 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/configuration.md +129 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/dist/template/.opencode/skill/cloudflare/references/smart-placement/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/README.md +15 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/api.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/configuration.md +33 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/gotchas.md +21 -0
- package/dist/template/.opencode/skill/cloudflare/references/snippets/patterns.md +34 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/api.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/configuration.md +43 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/gotchas.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/spectrum/patterns.md +40 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/configuration.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/gotchas.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/static-assets/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/README.md +103 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/api.md +204 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/configuration.md +127 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/gotchas.md +131 -0
- package/dist/template/.opencode/skill/cloudflare/references/stream/patterns.md +152 -0
- package/dist/template/.opencode/skill/cloudflare/references/tail-workers/README.md +640 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/README.md +76 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/api.md +159 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/configuration.md +156 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/gotchas.md +207 -0
- package/dist/template/.opencode/skill/cloudflare/references/terraform/patterns.md +135 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/README.md +82 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/api.md +105 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/configuration.md +113 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/gotchas.md +115 -0
- package/dist/template/.opencode/skill/cloudflare/references/tunnel/patterns.md +157 -0
- package/dist/template/.opencode/skill/cloudflare/references/turn/README.md +699 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/configuration.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/gotchas.md +27 -0
- package/dist/template/.opencode/skill/cloudflare/references/turnstile/patterns.md +41 -0
- package/dist/template/.opencode/skill/cloudflare/references/vectorize/README.md +682 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/README.md +14 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/api.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/configuration.md +44 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/gotchas.md +24 -0
- package/dist/template/.opencode/skill/cloudflare/references/waf/patterns.md +29 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/README.md +19 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/api.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/configuration.md +31 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/dist/template/.opencode/skill/cloudflare/references/web-analytics/patterns.md +52 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/README.md +47 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/api.md +199 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/configuration.md +185 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/gotchas.md +203 -0
- package/dist/template/.opencode/skill/cloudflare/references/workerd/patterns.md +216 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/README.md +96 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/api.md +137 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/configuration.md +147 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/gotchas.md +99 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers/patterns.md +149 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-ai/README.md +116 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/README.md +16 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/api.md +20 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/configuration.md +3 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-playground/patterns.md +42 -0
- package/dist/template/.opencode/skill/cloudflare/references/workers-vpc/README.md +579 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/README.md +62 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/api.md +125 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/configuration.md +177 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/gotchas.md +136 -0
- package/dist/template/.opencode/skill/cloudflare/references/workflows/patterns.md +132 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/README.md +90 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/api.md +140 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/configuration.md +128 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/gotchas.md +93 -0
- package/dist/template/.opencode/skill/cloudflare/references/wrangler/patterns.md +150 -0
- package/dist/template/.opencode/skill/cloudflare/references/zaraz/README.md +360 -0
- package/dist/template/.opencode/skill/react-best-practices/AGENTS.md +2410 -0
- package/dist/template/.opencode/skill/react-best-practices/README.md +123 -0
- package/dist/template/.opencode/skill/react-best-practices/SKILL.md +125 -0
- package/dist/template/.opencode/skill/react-best-practices/metadata.json +15 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_sections.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/_template.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-dependencies.md +36 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-parallel.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/template/.opencode/skill/react-best-practices/rules/server-serialization.md +38 -0
- package/dist/template/.opencode/skill/supabase/SKILL.md +120 -0
- package/dist/template/.opencode/skill/supabase/mcp.json +27 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/SKILL.md +112 -0
- package/dist/template/.opencode/skill/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/dist/template/.opencode/skill/web-design-guidelines/SKILL.md +39 -0
- package/dist/template/.opencode/tool/memory-read.ts +64 -44
- package/dist/template/.opencode/tool/memory-search.ts +9 -2
- package/dist/template/.opencode/tool/memory-update.ts +59 -47
- package/dist/template/.opencode/tool/observation.ts +16 -2
- package/package.json +1 -1
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Per-Request Deduplication with React.cache()
|
|
3
|
+
impact: MEDIUM
|
|
4
|
+
impactDescription: deduplicates within request
|
|
5
|
+
tags: server, cache, react-cache, deduplication
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Per-Request Deduplication with React.cache()
|
|
9
|
+
|
|
10
|
+
Use `React.cache()` for server-side request deduplication. Authentication and database queries benefit most.
|
|
11
|
+
|
|
12
|
+
**Usage:**
|
|
13
|
+
|
|
14
|
+
```typescript
|
|
15
|
+
import { cache } from 'react'
|
|
16
|
+
|
|
17
|
+
export const getCurrentUser = cache(async () => {
|
|
18
|
+
const session = await auth()
|
|
19
|
+
if (!session?.user?.id) return null
|
|
20
|
+
return await db.user.findUnique({
|
|
21
|
+
where: { id: session.user.id }
|
|
22
|
+
})
|
|
23
|
+
})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Within a single request, multiple calls to `getCurrentUser()` execute the query only once.
|
|
27
|
+
|
|
28
|
+
**Avoid inline objects as arguments:**
|
|
29
|
+
|
|
30
|
+
`React.cache()` uses shallow equality (`Object.is`) to determine cache hits. Inline objects create new references each call, preventing cache hits.
|
|
31
|
+
|
|
32
|
+
**Incorrect (always cache miss):**
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
const getUser = cache(async (params: { uid: number }) => {
|
|
36
|
+
return await db.user.findUnique({ where: { id: params.uid } })
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
// Each call creates new object, never hits cache
|
|
40
|
+
getUser({ uid: 1 })
|
|
41
|
+
getUser({ uid: 1 }) // Cache miss, runs query again
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Correct (cache hit):**
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
const getUser = cache(async (uid: number) => {
|
|
48
|
+
return await db.user.findUnique({ where: { id: uid } })
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
// Primitive args use value equality
|
|
52
|
+
getUser(1)
|
|
53
|
+
getUser(1) // Cache hit, returns cached result
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If you must pass objects, pass the same reference:
|
|
57
|
+
|
|
58
|
+
```typescript
|
|
59
|
+
const params = { uid: 1 }
|
|
60
|
+
getUser(params) // Query runs
|
|
61
|
+
getUser(params) // Cache hit (same reference)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Next.js-Specific Note:**
|
|
65
|
+
|
|
66
|
+
In Next.js, the `fetch` API is automatically extended with request memoization. Requests with the same URL and options are automatically deduplicated within a single request, so you don't need `React.cache()` for `fetch` calls. However, `React.cache()` is still essential for other async tasks:
|
|
67
|
+
|
|
68
|
+
- Database queries (Prisma, Drizzle, etc.)
|
|
69
|
+
- Heavy computations
|
|
70
|
+
- Authentication checks
|
|
71
|
+
- File system operations
|
|
72
|
+
- Any non-fetch async work
|
|
73
|
+
|
|
74
|
+
Use `React.cache()` to deduplicate these operations across your component tree.
|
|
75
|
+
|
|
76
|
+
Reference: [React.cache documentation](https://react.dev/reference/react/cache)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Parallel Data Fetching with Component Composition
|
|
3
|
+
impact: CRITICAL
|
|
4
|
+
impactDescription: eliminates server-side waterfalls
|
|
5
|
+
tags: server, rsc, parallel-fetching, composition
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Parallel Data Fetching with Component Composition
|
|
9
|
+
|
|
10
|
+
React Server Components execute sequentially within a tree. Restructure with composition to parallelize data fetching.
|
|
11
|
+
|
|
12
|
+
**Incorrect (Sidebar waits for Page's fetch to complete):**
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
export default async function Page() {
|
|
16
|
+
const header = await fetchHeader()
|
|
17
|
+
return (
|
|
18
|
+
<div>
|
|
19
|
+
<div>{header}</div>
|
|
20
|
+
<Sidebar />
|
|
21
|
+
</div>
|
|
22
|
+
)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function Sidebar() {
|
|
26
|
+
const items = await fetchSidebarItems()
|
|
27
|
+
return <nav>{items.map(renderItem)}</nav>
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Correct (both fetch simultaneously):**
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
async function Header() {
|
|
35
|
+
const data = await fetchHeader()
|
|
36
|
+
return <div>{data}</div>
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async function Sidebar() {
|
|
40
|
+
const items = await fetchSidebarItems()
|
|
41
|
+
return <nav>{items.map(renderItem)}</nav>
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default function Page() {
|
|
45
|
+
return (
|
|
46
|
+
<div>
|
|
47
|
+
<Header />
|
|
48
|
+
<Sidebar />
|
|
49
|
+
</div>
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Alternative with children prop:**
|
|
55
|
+
|
|
56
|
+
```tsx
|
|
57
|
+
async function Header() {
|
|
58
|
+
const data = await fetchHeader()
|
|
59
|
+
return <div>{data}</div>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function Sidebar() {
|
|
63
|
+
const items = await fetchSidebarItems()
|
|
64
|
+
return <nav>{items.map(renderItem)}</nav>
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function Layout({ children }: { children: ReactNode }) {
|
|
68
|
+
return (
|
|
69
|
+
<div>
|
|
70
|
+
<Header />
|
|
71
|
+
{children}
|
|
72
|
+
</div>
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export default function Page() {
|
|
77
|
+
return (
|
|
78
|
+
<Layout>
|
|
79
|
+
<Sidebar />
|
|
80
|
+
</Layout>
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Minimize Serialization at RSC Boundaries
|
|
3
|
+
impact: HIGH
|
|
4
|
+
impactDescription: reduces data transfer size
|
|
5
|
+
tags: server, rsc, serialization, props
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Minimize Serialization at RSC Boundaries
|
|
9
|
+
|
|
10
|
+
The React Server/Client boundary serializes all object properties into strings and embeds them in the HTML response and subsequent RSC requests. This serialized data directly impacts page weight and load time, so **size matters a lot**. Only pass fields that the client actually uses.
|
|
11
|
+
|
|
12
|
+
**Incorrect (serializes all 50 fields):**
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
async function Page() {
|
|
16
|
+
const user = await fetchUser() // 50 fields
|
|
17
|
+
return <Profile user={user} />
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
'use client'
|
|
21
|
+
function Profile({ user }: { user: User }) {
|
|
22
|
+
return <div>{user.name}</div> // uses 1 field
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Correct (serializes only 1 field):**
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
async function Page() {
|
|
30
|
+
const user = await fetchUser()
|
|
31
|
+
return <Profile name={user.name} />
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
'use client'
|
|
35
|
+
function Profile({ name }: { name: string }) {
|
|
36
|
+
return <div>{name}</div>
|
|
37
|
+
}
|
|
38
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: supabase
|
|
3
|
+
description: Comprehensive Supabase platform MCP for database operations, edge functions, development tools, debugging, and project management. Use when working with Supabase projects, databases, or APIs.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Supabase Platform (MCP)
|
|
7
|
+
|
|
8
|
+
Supabase MCP server for database operations, edge functions, project management, and debugging.
|
|
9
|
+
|
|
10
|
+
## Available Tools
|
|
11
|
+
|
|
12
|
+
### Account & Projects
|
|
13
|
+
|
|
14
|
+
- `list_projects` - Lists all Supabase projects
|
|
15
|
+
- `get_project` - Gets details for a specific project
|
|
16
|
+
- `list_organizations` - Lists all organizations
|
|
17
|
+
|
|
18
|
+
### Database
|
|
19
|
+
|
|
20
|
+
- `list_tables` - Lists all tables in specified schemas
|
|
21
|
+
- `list_extensions` - Lists PostgreSQL extensions
|
|
22
|
+
- `list_migrations` - Lists database migrations
|
|
23
|
+
- `execute_sql` - Executes raw SQL queries
|
|
24
|
+
|
|
25
|
+
### Development
|
|
26
|
+
|
|
27
|
+
- `get_project_url` - Gets the API URL for a project
|
|
28
|
+
- `get_publishable_keys` - Gets anonymous API keys (client-safe)
|
|
29
|
+
- `generate_typescript_types` - Generates TypeScript types from schema
|
|
30
|
+
|
|
31
|
+
### Edge Functions
|
|
32
|
+
|
|
33
|
+
- `list_edge_functions` - Lists all Edge Functions
|
|
34
|
+
- `get_edge_function` - Retrieves Edge Function file contents
|
|
35
|
+
- `deploy_edge_function` - Deploys or updates an Edge Function
|
|
36
|
+
|
|
37
|
+
### Debugging
|
|
38
|
+
|
|
39
|
+
- `get_logs` - Retrieves logs by service type
|
|
40
|
+
- `get_advisors` - Gets security/performance advisory notices
|
|
41
|
+
|
|
42
|
+
### Documentation
|
|
43
|
+
|
|
44
|
+
- `search_docs` - Searches Supabase documentation
|
|
45
|
+
|
|
46
|
+
## Workflow
|
|
47
|
+
|
|
48
|
+
### Quick Start
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
# List projects
|
|
52
|
+
skill_mcp(skill_name="supabase", tool_name="list_projects")
|
|
53
|
+
|
|
54
|
+
# List tables in database
|
|
55
|
+
skill_mcp(skill_name="supabase", tool_name="list_tables")
|
|
56
|
+
|
|
57
|
+
# Execute SQL query
|
|
58
|
+
skill_mcp(skill_name="supabase", tool_name="execute_sql", arguments='{"query": "SELECT * FROM users LIMIT 10"}')
|
|
59
|
+
|
|
60
|
+
# Generate TypeScript types
|
|
61
|
+
skill_mcp(skill_name="supabase", tool_name="generate_typescript_types")
|
|
62
|
+
|
|
63
|
+
# Search docs
|
|
64
|
+
skill_mcp(skill_name="supabase", tool_name="search_docs", arguments='{"query": "auth custom claims"}')
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Get Project Credentials
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
# Get API URL and keys for project
|
|
71
|
+
skill_mcp(skill_name="supabase", tool_name="get_project_url")
|
|
72
|
+
skill_mcp(skill_name="supabase", tool_name="get_publishable_keys")
|
|
73
|
+
|
|
74
|
+
# List Edge Functions
|
|
75
|
+
skill_mcp(skill_name="supabase", tool_name="list_edge_functions")
|
|
76
|
+
|
|
77
|
+
# Deploy Edge Function
|
|
78
|
+
skill_mcp(skill_name="supabase", tool_name="deploy_edge_function", arguments='{"name": "my-function", "import_map": {...}, "entrypoint": "index.ts"}')
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Debug Issues
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
# Get logs by service
|
|
85
|
+
skill_mcp(skill_name="supabase", tool_name="get_logs", arguments='{"service": "postgres", "limit": 100}')
|
|
86
|
+
|
|
87
|
+
# Check advisories
|
|
88
|
+
skill_mcp(skill_name="supabase", tool_name="get_advisors")
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Security Notes
|
|
92
|
+
|
|
93
|
+
- **Read-only mode**: Set `"read_only": true` in mcp.json to disable write operations
|
|
94
|
+
- **Project scoping**: Use `project_ref` to limit access to specific projects
|
|
95
|
+
- **Environment variables**: Set `SUPABASE_ACCESS_TOKEN` for authentication
|
|
96
|
+
|
|
97
|
+
## Server Options
|
|
98
|
+
|
|
99
|
+
For advanced usage, modify `mcp.json`:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"supabase": {
|
|
104
|
+
"command": "npx",
|
|
105
|
+
"args": ["-y", "@supabase/mcp@latest"],
|
|
106
|
+
"env": {
|
|
107
|
+
"SUPABASE_ACCESS_TOKEN": "your-token-here"
|
|
108
|
+
},
|
|
109
|
+
"includeTools": ["list_tables", "execute_sql", "..."]
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Configuration options:
|
|
115
|
+
|
|
116
|
+
- `project_ref` - Scope to specific project (recommended)
|
|
117
|
+
- `read_only` - Restrict to read-only operations (recommended)
|
|
118
|
+
- `features` - Enable specific tool groups
|
|
119
|
+
|
|
120
|
+
> **Note**: This skill loads 14 essential tools. Excludes experimental (branching) and storage tools that require paid plans.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"supabase": {
|
|
3
|
+
"command": "npx",
|
|
4
|
+
"args": ["-y", "@supabase/mcp-server-supabase@latest"],
|
|
5
|
+
"env": {
|
|
6
|
+
"SUPABASE_ACCESS_TOKEN": "${SUPABASE_ACCESS_TOKEN}"
|
|
7
|
+
},
|
|
8
|
+
"includeTools": [
|
|
9
|
+
"list_projects",
|
|
10
|
+
"get_project",
|
|
11
|
+
"list_organizations",
|
|
12
|
+
"list_tables",
|
|
13
|
+
"list_extensions",
|
|
14
|
+
"list_migrations",
|
|
15
|
+
"execute_sql",
|
|
16
|
+
"get_project_url",
|
|
17
|
+
"get_publishable_keys",
|
|
18
|
+
"generate_typescript_types",
|
|
19
|
+
"list_edge_functions",
|
|
20
|
+
"get_edge_function",
|
|
21
|
+
"deploy_edge_function",
|
|
22
|
+
"get_logs",
|
|
23
|
+
"get_advisors",
|
|
24
|
+
"search_docs"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vercel-deploy
|
|
3
|
+
description: Deploy applications and websites to Vercel. Use this skill when the user requests deployment actions such as "Deploy my app", "Deploy this to production", "Create a preview deployment", "Deploy and give me the link", or "Push this live". No authentication required - returns preview URL and claimable deployment link.
|
|
4
|
+
metadata:
|
|
5
|
+
author: vercel
|
|
6
|
+
version: "1.0.0"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Vercel Deploy
|
|
10
|
+
|
|
11
|
+
Deploy any project to Vercel instantly. No authentication required.
|
|
12
|
+
|
|
13
|
+
## How It Works
|
|
14
|
+
|
|
15
|
+
1. Packages your project into a tarball (excludes `node_modules` and `.git`)
|
|
16
|
+
2. Auto-detects framework from `package.json`
|
|
17
|
+
3. Uploads to deployment service
|
|
18
|
+
4. Returns **Preview URL** (live site) and **Claim URL** (transfer to your Vercel account)
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh [path]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Arguments:**
|
|
27
|
+
- `path` - Directory to deploy, or a `.tgz` file (defaults to current directory)
|
|
28
|
+
|
|
29
|
+
**Examples:**
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# Deploy current directory
|
|
33
|
+
bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh
|
|
34
|
+
|
|
35
|
+
# Deploy specific project
|
|
36
|
+
bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh /path/to/project
|
|
37
|
+
|
|
38
|
+
# Deploy existing tarball
|
|
39
|
+
bash /mnt/skills/user/vercel-deploy/scripts/deploy.sh /path/to/project.tgz
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Output
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Preparing deployment...
|
|
46
|
+
Detected framework: nextjs
|
|
47
|
+
Creating deployment package...
|
|
48
|
+
Deploying...
|
|
49
|
+
✓ Deployment successful!
|
|
50
|
+
|
|
51
|
+
Preview URL: https://skill-deploy-abc123.vercel.app
|
|
52
|
+
Claim URL: https://vercel.com/claim-deployment?code=...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The script also outputs JSON to stdout for programmatic use:
|
|
56
|
+
|
|
57
|
+
```json
|
|
58
|
+
{
|
|
59
|
+
"previewUrl": "https://skill-deploy-abc123.vercel.app",
|
|
60
|
+
"claimUrl": "https://vercel.com/claim-deployment?code=...",
|
|
61
|
+
"deploymentId": "dpl_...",
|
|
62
|
+
"projectId": "prj_..."
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Framework Detection
|
|
67
|
+
|
|
68
|
+
The script auto-detects frameworks from `package.json`. Supported frameworks include:
|
|
69
|
+
|
|
70
|
+
- **React**: Next.js, Gatsby, Create React App, Remix, React Router
|
|
71
|
+
- **Vue**: Nuxt, Vitepress, Vuepress, Gridsome
|
|
72
|
+
- **Svelte**: SvelteKit, Svelte, Sapper
|
|
73
|
+
- **Other Frontend**: Astro, Solid Start, Angular, Ember, Preact, Docusaurus
|
|
74
|
+
- **Backend**: Express, Hono, Fastify, NestJS, Elysia, h3, Nitro
|
|
75
|
+
- **Build Tools**: Vite, Parcel
|
|
76
|
+
- **And more**: Blitz, Hydrogen, RedwoodJS, Storybook, Sanity, etc.
|
|
77
|
+
|
|
78
|
+
For static HTML projects (no `package.json`), framework is set to `null`.
|
|
79
|
+
|
|
80
|
+
## Static HTML Projects
|
|
81
|
+
|
|
82
|
+
For projects without a `package.json`:
|
|
83
|
+
- If there's a single `.html` file not named `index.html`, it gets renamed automatically
|
|
84
|
+
- This ensures the page is served at the root URL (`/`)
|
|
85
|
+
|
|
86
|
+
## Present Results to User
|
|
87
|
+
|
|
88
|
+
Always show both URLs:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
✓ Deployment successful!
|
|
92
|
+
|
|
93
|
+
Preview URL: https://skill-deploy-abc123.vercel.app
|
|
94
|
+
Claim URL: https://vercel.com/claim-deployment?code=...
|
|
95
|
+
|
|
96
|
+
View your site at the Preview URL.
|
|
97
|
+
To transfer this deployment to your Vercel account, visit the Claim URL.
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Troubleshooting
|
|
101
|
+
|
|
102
|
+
### Network Egress Error
|
|
103
|
+
|
|
104
|
+
If deployment fails due to network restrictions (common on claude.ai), tell the user:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Deployment failed due to network restrictions. To fix this:
|
|
108
|
+
|
|
109
|
+
1. Go to https://claude.ai/settings/capabilities
|
|
110
|
+
2. Add *.vercel.com to the allowed domains
|
|
111
|
+
3. Try deploying again
|
|
112
|
+
```
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Vercel Deployment Script (via claimable deploy endpoint)
|
|
4
|
+
# Usage: ./deploy.sh [project-path]
|
|
5
|
+
# Returns: JSON with previewUrl, claimUrl, deploymentId, projectId
|
|
6
|
+
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
DEPLOY_ENDPOINT="https://claude-skills-deploy.vercel.com/api/deploy"
|
|
10
|
+
|
|
11
|
+
# Detect framework from package.json
|
|
12
|
+
detect_framework() {
|
|
13
|
+
local pkg_json="$1"
|
|
14
|
+
|
|
15
|
+
if [ ! -f "$pkg_json" ]; then
|
|
16
|
+
echo "null"
|
|
17
|
+
return
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
local content=$(cat "$pkg_json")
|
|
21
|
+
|
|
22
|
+
# Helper to check if a package exists in dependencies or devDependencies
|
|
23
|
+
has_dep() {
|
|
24
|
+
echo "$content" | grep -q "\"$1\""
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
# Order matters - check more specific frameworks first
|
|
28
|
+
|
|
29
|
+
# Blitz
|
|
30
|
+
if has_dep "blitz"; then echo "blitzjs"; return; fi
|
|
31
|
+
|
|
32
|
+
# Next.js
|
|
33
|
+
if has_dep "next"; then echo "nextjs"; return; fi
|
|
34
|
+
|
|
35
|
+
# Gatsby
|
|
36
|
+
if has_dep "gatsby"; then echo "gatsby"; return; fi
|
|
37
|
+
|
|
38
|
+
# Remix
|
|
39
|
+
if has_dep "@remix-run/"; then echo "remix"; return; fi
|
|
40
|
+
|
|
41
|
+
# React Router (v7 framework mode)
|
|
42
|
+
if has_dep "@react-router/"; then echo "react-router"; return; fi
|
|
43
|
+
|
|
44
|
+
# TanStack Start
|
|
45
|
+
if has_dep "@tanstack/start"; then echo "tanstack-start"; return; fi
|
|
46
|
+
|
|
47
|
+
# Astro
|
|
48
|
+
if has_dep "astro"; then echo "astro"; return; fi
|
|
49
|
+
|
|
50
|
+
# Hydrogen (Shopify)
|
|
51
|
+
if has_dep "@shopify/hydrogen"; then echo "hydrogen"; return; fi
|
|
52
|
+
|
|
53
|
+
# SvelteKit
|
|
54
|
+
if has_dep "@sveltejs/kit"; then echo "sveltekit-1"; return; fi
|
|
55
|
+
|
|
56
|
+
# Svelte (standalone)
|
|
57
|
+
if has_dep "svelte"; then echo "svelte"; return; fi
|
|
58
|
+
|
|
59
|
+
# Nuxt
|
|
60
|
+
if has_dep "nuxt"; then echo "nuxtjs"; return; fi
|
|
61
|
+
|
|
62
|
+
# Vue with Vitepress
|
|
63
|
+
if has_dep "vitepress"; then echo "vitepress"; return; fi
|
|
64
|
+
|
|
65
|
+
# Vue with Vuepress
|
|
66
|
+
if has_dep "vuepress"; then echo "vuepress"; return; fi
|
|
67
|
+
|
|
68
|
+
# Gridsome
|
|
69
|
+
if has_dep "gridsome"; then echo "gridsome"; return; fi
|
|
70
|
+
|
|
71
|
+
# SolidStart
|
|
72
|
+
if has_dep "@solidjs/start"; then echo "solidstart-1"; return; fi
|
|
73
|
+
|
|
74
|
+
# Docusaurus
|
|
75
|
+
if has_dep "@docusaurus/core"; then echo "docusaurus-2"; return; fi
|
|
76
|
+
|
|
77
|
+
# RedwoodJS
|
|
78
|
+
if has_dep "@redwoodjs/"; then echo "redwoodjs"; return; fi
|
|
79
|
+
|
|
80
|
+
# Hexo
|
|
81
|
+
if has_dep "hexo"; then echo "hexo"; return; fi
|
|
82
|
+
|
|
83
|
+
# Eleventy
|
|
84
|
+
if has_dep "@11ty/eleventy"; then echo "eleventy"; return; fi
|
|
85
|
+
|
|
86
|
+
# Angular / Ionic Angular
|
|
87
|
+
if has_dep "@ionic/angular"; then echo "ionic-angular"; return; fi
|
|
88
|
+
if has_dep "@angular/core"; then echo "angular"; return; fi
|
|
89
|
+
|
|
90
|
+
# Ionic React
|
|
91
|
+
if has_dep "@ionic/react"; then echo "ionic-react"; return; fi
|
|
92
|
+
|
|
93
|
+
# Create React App
|
|
94
|
+
if has_dep "react-scripts"; then echo "create-react-app"; return; fi
|
|
95
|
+
|
|
96
|
+
# Ember
|
|
97
|
+
if has_dep "ember-cli" || has_dep "ember-source"; then echo "ember"; return; fi
|
|
98
|
+
|
|
99
|
+
# Dojo
|
|
100
|
+
if has_dep "@dojo/framework"; then echo "dojo"; return; fi
|
|
101
|
+
|
|
102
|
+
# Polymer
|
|
103
|
+
if has_dep "@polymer/"; then echo "polymer"; return; fi
|
|
104
|
+
|
|
105
|
+
# Preact
|
|
106
|
+
if has_dep "preact"; then echo "preact"; return; fi
|
|
107
|
+
|
|
108
|
+
# Stencil
|
|
109
|
+
if has_dep "@stencil/core"; then echo "stencil"; return; fi
|
|
110
|
+
|
|
111
|
+
# UmiJS
|
|
112
|
+
if has_dep "umi"; then echo "umijs"; return; fi
|
|
113
|
+
|
|
114
|
+
# Sapper (legacy Svelte)
|
|
115
|
+
if has_dep "sapper"; then echo "sapper"; return; fi
|
|
116
|
+
|
|
117
|
+
# Saber
|
|
118
|
+
if has_dep "saber"; then echo "saber"; return; fi
|
|
119
|
+
|
|
120
|
+
# Sanity
|
|
121
|
+
if has_dep "sanity"; then echo "sanity-v3"; return; fi
|
|
122
|
+
if has_dep "@sanity/"; then echo "sanity"; return; fi
|
|
123
|
+
|
|
124
|
+
# Storybook
|
|
125
|
+
if has_dep "@storybook/"; then echo "storybook"; return; fi
|
|
126
|
+
|
|
127
|
+
# NestJS
|
|
128
|
+
if has_dep "@nestjs/core"; then echo "nestjs"; return; fi
|
|
129
|
+
|
|
130
|
+
# Elysia
|
|
131
|
+
if has_dep "elysia"; then echo "elysia"; return; fi
|
|
132
|
+
|
|
133
|
+
# Hono
|
|
134
|
+
if has_dep "hono"; then echo "hono"; return; fi
|
|
135
|
+
|
|
136
|
+
# Fastify
|
|
137
|
+
if has_dep "fastify"; then echo "fastify"; return; fi
|
|
138
|
+
|
|
139
|
+
# h3
|
|
140
|
+
if has_dep "h3"; then echo "h3"; return; fi
|
|
141
|
+
|
|
142
|
+
# Nitro
|
|
143
|
+
if has_dep "nitropack"; then echo "nitro"; return; fi
|
|
144
|
+
|
|
145
|
+
# Express
|
|
146
|
+
if has_dep "express"; then echo "express"; return; fi
|
|
147
|
+
|
|
148
|
+
# Vite (generic - check last among JS frameworks)
|
|
149
|
+
if has_dep "vite"; then echo "vite"; return; fi
|
|
150
|
+
|
|
151
|
+
# Parcel
|
|
152
|
+
if has_dep "parcel"; then echo "parcel"; return; fi
|
|
153
|
+
|
|
154
|
+
# No framework detected
|
|
155
|
+
echo "null"
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
# Parse arguments
|
|
159
|
+
INPUT_PATH="${1:-.}"
|
|
160
|
+
|
|
161
|
+
# Create temp directory for packaging
|
|
162
|
+
TEMP_DIR=$(mktemp -d)
|
|
163
|
+
TARBALL="$TEMP_DIR/project.tgz"
|
|
164
|
+
CLEANUP_TEMP=true
|
|
165
|
+
|
|
166
|
+
cleanup() {
|
|
167
|
+
if [ "$CLEANUP_TEMP" = true ]; then
|
|
168
|
+
rm -rf "$TEMP_DIR"
|
|
169
|
+
fi
|
|
170
|
+
}
|
|
171
|
+
trap cleanup EXIT
|
|
172
|
+
|
|
173
|
+
echo "Preparing deployment..." >&2
|
|
174
|
+
|
|
175
|
+
# Check if input is a .tgz file or a directory
|
|
176
|
+
FRAMEWORK="null"
|
|
177
|
+
|
|
178
|
+
if [ -f "$INPUT_PATH" ] && [[ "$INPUT_PATH" == *.tgz ]]; then
|
|
179
|
+
# Input is already a tarball, use it directly
|
|
180
|
+
echo "Using provided tarball..." >&2
|
|
181
|
+
TARBALL="$INPUT_PATH"
|
|
182
|
+
CLEANUP_TEMP=false
|
|
183
|
+
# Can't detect framework from tarball, leave as null
|
|
184
|
+
elif [ -d "$INPUT_PATH" ]; then
|
|
185
|
+
# Input is a directory, need to tar it
|
|
186
|
+
PROJECT_PATH=$(cd "$INPUT_PATH" && pwd)
|
|
187
|
+
|
|
188
|
+
# Detect framework from package.json
|
|
189
|
+
FRAMEWORK=$(detect_framework "$PROJECT_PATH/package.json")
|
|
190
|
+
|
|
191
|
+
# Check if this is a static HTML project (no package.json)
|
|
192
|
+
if [ ! -f "$PROJECT_PATH/package.json" ]; then
|
|
193
|
+
# Find HTML files in root
|
|
194
|
+
HTML_FILES=$(find "$PROJECT_PATH" -maxdepth 1 -name "*.html" -type f)
|
|
195
|
+
HTML_COUNT=$(echo "$HTML_FILES" | grep -c . || echo 0)
|
|
196
|
+
|
|
197
|
+
# If there's exactly one HTML file and it's not index.html, rename it
|
|
198
|
+
if [ "$HTML_COUNT" -eq 1 ]; then
|
|
199
|
+
HTML_FILE=$(echo "$HTML_FILES" | head -1)
|
|
200
|
+
BASENAME=$(basename "$HTML_FILE")
|
|
201
|
+
if [ "$BASENAME" != "index.html" ]; then
|
|
202
|
+
echo "Renaming $BASENAME to index.html..." >&2
|
|
203
|
+
mv "$HTML_FILE" "$PROJECT_PATH/index.html"
|
|
204
|
+
fi
|
|
205
|
+
fi
|
|
206
|
+
fi
|
|
207
|
+
|
|
208
|
+
# Create tarball of the project (excluding node_modules and .git)
|
|
209
|
+
echo "Creating deployment package..." >&2
|
|
210
|
+
tar -czf "$TARBALL" -C "$PROJECT_PATH" --exclude='node_modules' --exclude='.git' .
|
|
211
|
+
else
|
|
212
|
+
echo "Error: Input must be a directory or a .tgz file" >&2
|
|
213
|
+
exit 1
|
|
214
|
+
fi
|
|
215
|
+
|
|
216
|
+
if [ "$FRAMEWORK" != "null" ]; then
|
|
217
|
+
echo "Detected framework: $FRAMEWORK" >&2
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
# Deploy
|
|
221
|
+
echo "Deploying..." >&2
|
|
222
|
+
RESPONSE=$(curl -s -X POST "$DEPLOY_ENDPOINT" -F "file=@$TARBALL" -F "framework=$FRAMEWORK")
|
|
223
|
+
|
|
224
|
+
# Check for error in response
|
|
225
|
+
if echo "$RESPONSE" | grep -q '"error"'; then
|
|
226
|
+
ERROR_MSG=$(echo "$RESPONSE" | grep -o '"error":"[^"]*"' | cut -d'"' -f4)
|
|
227
|
+
echo "Error: $ERROR_MSG" >&2
|
|
228
|
+
exit 1
|
|
229
|
+
fi
|
|
230
|
+
|
|
231
|
+
# Extract URLs from response
|
|
232
|
+
PREVIEW_URL=$(echo "$RESPONSE" | grep -o '"previewUrl":"[^"]*"' | cut -d'"' -f4)
|
|
233
|
+
CLAIM_URL=$(echo "$RESPONSE" | grep -o '"claimUrl":"[^"]*"' | cut -d'"' -f4)
|
|
234
|
+
|
|
235
|
+
if [ -z "$PREVIEW_URL" ]; then
|
|
236
|
+
echo "Error: Could not extract preview URL from response" >&2
|
|
237
|
+
echo "$RESPONSE" >&2
|
|
238
|
+
exit 1
|
|
239
|
+
fi
|
|
240
|
+
|
|
241
|
+
echo "" >&2
|
|
242
|
+
echo "Deployment successful!" >&2
|
|
243
|
+
echo "" >&2
|
|
244
|
+
echo "Preview URL: $PREVIEW_URL" >&2
|
|
245
|
+
echo "Claim URL: $CLAIM_URL" >&2
|
|
246
|
+
echo "" >&2
|
|
247
|
+
|
|
248
|
+
# Output JSON for programmatic use
|
|
249
|
+
echo "$RESPONSE"
|