@minhduydev/mdpi 0.3.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 +31 -0
- package/dist/index.js +1187 -0
- package/dist/template/.pi/.env.example +28 -0
- package/dist/template/.pi/AGENTS.md +226 -0
- package/dist/template/.pi/QUALITY.md +13 -0
- package/dist/template/.pi/README.md +452 -0
- package/dist/template/.pi/VERSION +1 -0
- package/dist/template/.pi/agents/INDEX.md +54 -0
- package/dist/template/.pi/agents/build.md +194 -0
- package/dist/template/.pi/agents/explore.md +85 -0
- package/dist/template/.pi/agents/general.md +189 -0
- package/dist/template/.pi/agents/plan.md +407 -0
- package/dist/template/.pi/agents/review.md +198 -0
- package/dist/template/.pi/agents/scout.md +142 -0
- package/dist/template/.pi/agents/vision.md +157 -0
- package/dist/template/.pi/artifacts/example/plan.md +12 -0
- package/dist/template/.pi/artifacts/example/progress.md +4 -0
- package/dist/template/.pi/artifacts/example/research.md +4 -0
- package/dist/template/.pi/artifacts/example/spec.md +16 -0
- package/dist/template/.pi/context/architecture.md +141 -0
- package/dist/template/.pi/context/fallow.md +137 -0
- package/dist/template/.pi/extensions/templates-injector.ts +76 -0
- package/dist/template/.pi/extensions/workflows-runner.ts +301 -0
- package/dist/template/.pi/guard.example.json +75 -0
- package/dist/template/.pi/prompts/INDEX.md +78 -0
- package/dist/template/.pi/prompts/audit.md +109 -0
- package/dist/template/.pi/prompts/close.md +88 -0
- package/dist/template/.pi/prompts/create.md +197 -0
- package/dist/template/.pi/prompts/fix.md +117 -0
- package/dist/template/.pi/prompts/gc.md +112 -0
- package/dist/template/.pi/prompts/init.md +206 -0
- package/dist/template/.pi/prompts/loop-check.md +87 -0
- package/dist/template/.pi/prompts/loop-init.md +157 -0
- package/dist/template/.pi/prompts/loop-review.md +90 -0
- package/dist/template/.pi/prompts/plan.md +254 -0
- package/dist/template/.pi/prompts/research.md +136 -0
- package/dist/template/.pi/prompts/ship.md +219 -0
- package/dist/template/.pi/prompts/status.md +92 -0
- package/dist/template/.pi/prompts/verify.md +154 -0
- package/dist/template/.pi/scripts/gc-check.sh +86 -0
- package/dist/template/.pi/settings.json +15 -0
- package/dist/template/.pi/skills/INDEX.md +331 -0
- package/dist/template/.pi/skills/accessibility-audit/SKILL.md +205 -0
- package/dist/template/.pi/skills/accessibility-audit/references/accessibility-checklist.md +109 -0
- package/dist/template/.pi/skills/agent-code-quality-gate/SKILL.md +131 -0
- package/dist/template/.pi/skills/api-and-interface-design/SKILL.md +159 -0
- package/dist/template/.pi/skills/behavioral-kernel/SKILL.md +92 -0
- package/dist/template/.pi/skills/brainstorming/SKILL.md +138 -0
- package/dist/template/.pi/skills/browser-testing-with-devtools/SKILL.md +90 -0
- package/dist/template/.pi/skills/chrome-devtools/SKILL.md +129 -0
- package/dist/template/.pi/skills/ci-cd-and-automation/SKILL.md +199 -0
- package/dist/template/.pi/skills/cloudflare/SKILL.md +271 -0
- package/dist/template/.pi/skills/cloudflare/references/agents-sdk/README.md +35 -0
- package/dist/template/.pi/skills/cloudflare/references/agents-sdk/api.md +100 -0
- package/dist/template/.pi/skills/cloudflare/references/agents-sdk/configuration.md +99 -0
- package/dist/template/.pi/skills/cloudflare/references/agents-sdk/gotchas.md +59 -0
- package/dist/template/.pi/skills/cloudflare/references/agents-sdk/patterns.md +89 -0
- package/dist/template/.pi/skills/cloudflare/references/ai-gateway/README.md +695 -0
- package/dist/template/.pi/skills/cloudflare/references/ai-search/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/ai-search/api.md +38 -0
- package/dist/template/.pi/skills/cloudflare/references/ai-search/configuration.md +52 -0
- package/dist/template/.pi/skills/cloudflare/references/ai-search/gotchas.md +41 -0
- package/dist/template/.pi/skills/cloudflare/references/ai-search/patterns.md +45 -0
- package/dist/template/.pi/skills/cloudflare/references/analytics-engine/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/analytics-engine/api.md +27 -0
- package/dist/template/.pi/skills/cloudflare/references/analytics-engine/configuration.md +45 -0
- package/dist/template/.pi/skills/cloudflare/references/analytics-engine/gotchas.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/analytics-engine/patterns.md +36 -0
- package/dist/template/.pi/skills/cloudflare/references/api/README.md +21 -0
- package/dist/template/.pi/skills/cloudflare/references/api/api.md +31 -0
- package/dist/template/.pi/skills/cloudflare/references/api/configuration.md +20 -0
- package/dist/template/.pi/skills/cloudflare/references/api/gotchas.md +28 -0
- package/dist/template/.pi/skills/cloudflare/references/api/patterns.md +47 -0
- package/dist/template/.pi/skills/cloudflare/references/api-shield/README.md +20 -0
- package/dist/template/.pi/skills/cloudflare/references/api-shield/api.md +78 -0
- package/dist/template/.pi/skills/cloudflare/references/api-shield/configuration.md +128 -0
- package/dist/template/.pi/skills/cloudflare/references/api-shield/gotchas.md +51 -0
- package/dist/template/.pi/skills/cloudflare/references/api-shield/patterns.md +145 -0
- package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/README.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/api.md +50 -0
- package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/configuration.md +53 -0
- package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/gotchas.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/argo-smart-routing/patterns.md +45 -0
- package/dist/template/.pi/skills/cloudflare/references/bindings/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/bindings/api.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/bindings/configuration.md +58 -0
- package/dist/template/.pi/skills/cloudflare/references/bindings/gotchas.md +35 -0
- package/dist/template/.pi/skills/cloudflare/references/bindings/patterns.md +37 -0
- package/dist/template/.pi/skills/cloudflare/references/bot-management/README.md +71 -0
- package/dist/template/.pi/skills/cloudflare/references/bot-management/api.md +168 -0
- package/dist/template/.pi/skills/cloudflare/references/bot-management/configuration.md +114 -0
- package/dist/template/.pi/skills/cloudflare/references/bot-management/gotchas.md +99 -0
- package/dist/template/.pi/skills/cloudflare/references/bot-management/patterns.md +125 -0
- package/dist/template/.pi/skills/cloudflare/references/browser-rendering/README.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/browser-rendering/api.md +54 -0
- package/dist/template/.pi/skills/cloudflare/references/browser-rendering/configuration.md +47 -0
- package/dist/template/.pi/skills/cloudflare/references/browser-rendering/gotchas.md +29 -0
- package/dist/template/.pi/skills/cloudflare/references/browser-rendering/patterns.md +29 -0
- package/dist/template/.pi/skills/cloudflare/references/c3/README.md +264 -0
- package/dist/template/.pi/skills/cloudflare/references/cache-reserve/README.md +93 -0
- package/dist/template/.pi/skills/cloudflare/references/cache-reserve/api.md +176 -0
- package/dist/template/.pi/skills/cloudflare/references/cache-reserve/configuration.md +164 -0
- package/dist/template/.pi/skills/cloudflare/references/cache-reserve/gotchas.md +203 -0
- package/dist/template/.pi/skills/cloudflare/references/cache-reserve/patterns.md +180 -0
- package/dist/template/.pi/skills/cloudflare/references/containers/README.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/containers/api.md +43 -0
- package/dist/template/.pi/skills/cloudflare/references/containers/configuration.md +56 -0
- package/dist/template/.pi/skills/cloudflare/references/containers/gotchas.md +21 -0
- package/dist/template/.pi/skills/cloudflare/references/containers/patterns.md +40 -0
- package/dist/template/.pi/skills/cloudflare/references/cron-triggers/README.md +85 -0
- package/dist/template/.pi/skills/cloudflare/references/cron-triggers/api.md +198 -0
- package/dist/template/.pi/skills/cloudflare/references/cron-triggers/configuration.md +151 -0
- package/dist/template/.pi/skills/cloudflare/references/cron-triggers/gotchas.md +129 -0
- package/dist/template/.pi/skills/cloudflare/references/cron-triggers/patterns.md +122 -0
- package/dist/template/.pi/skills/cloudflare/references/d1/README.md +92 -0
- package/dist/template/.pi/skills/cloudflare/references/d1/api.md +141 -0
- package/dist/template/.pi/skills/cloudflare/references/d1/configuration.md +127 -0
- package/dist/template/.pi/skills/cloudflare/references/d1/gotchas.md +70 -0
- package/dist/template/.pi/skills/cloudflare/references/d1/patterns.md +144 -0
- package/dist/template/.pi/skills/cloudflare/references/ddos/README.md +34 -0
- package/dist/template/.pi/skills/cloudflare/references/ddos/api.md +136 -0
- package/dist/template/.pi/skills/cloudflare/references/ddos/configuration.md +67 -0
- package/dist/template/.pi/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/dist/template/.pi/skills/cloudflare/references/ddos/patterns.md +158 -0
- package/dist/template/.pi/skills/cloudflare/references/do-storage/README.md +62 -0
- package/dist/template/.pi/skills/cloudflare/references/do-storage/api.md +89 -0
- package/dist/template/.pi/skills/cloudflare/references/do-storage/configuration.md +116 -0
- package/dist/template/.pi/skills/cloudflare/references/do-storage/gotchas.md +93 -0
- package/dist/template/.pi/skills/cloudflare/references/do-storage/patterns.md +112 -0
- package/dist/template/.pi/skills/cloudflare/references/durable-objects/README.md +125 -0
- package/dist/template/.pi/skills/cloudflare/references/durable-objects/api.md +152 -0
- package/dist/template/.pi/skills/cloudflare/references/durable-objects/configuration.md +148 -0
- package/dist/template/.pi/skills/cloudflare/references/durable-objects/gotchas.md +158 -0
- package/dist/template/.pi/skills/cloudflare/references/durable-objects/patterns.md +255 -0
- package/dist/template/.pi/skills/cloudflare/references/email-routing/README.md +18 -0
- package/dist/template/.pi/skills/cloudflare/references/email-routing/api.md +46 -0
- package/dist/template/.pi/skills/cloudflare/references/email-routing/configuration.md +63 -0
- package/dist/template/.pi/skills/cloudflare/references/email-routing/gotchas.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/email-routing/patterns.md +46 -0
- package/dist/template/.pi/skills/cloudflare/references/email-workers/README.md +598 -0
- package/dist/template/.pi/skills/cloudflare/references/hyperdrive/README.md +62 -0
- package/dist/template/.pi/skills/cloudflare/references/hyperdrive/api.md +137 -0
- package/dist/template/.pi/skills/cloudflare/references/hyperdrive/configuration.md +133 -0
- package/dist/template/.pi/skills/cloudflare/references/hyperdrive/gotchas.md +184 -0
- package/dist/template/.pi/skills/cloudflare/references/hyperdrive/patterns.md +176 -0
- package/dist/template/.pi/skills/cloudflare/references/images/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/images/api.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/images/configuration.md +45 -0
- package/dist/template/.pi/skills/cloudflare/references/images/gotchas.md +23 -0
- package/dist/template/.pi/skills/cloudflare/references/images/patterns.md +31 -0
- package/dist/template/.pi/skills/cloudflare/references/kv/README.md +60 -0
- package/dist/template/.pi/skills/cloudflare/references/kv/api.md +114 -0
- package/dist/template/.pi/skills/cloudflare/references/kv/configuration.md +92 -0
- package/dist/template/.pi/skills/cloudflare/references/kv/gotchas.md +117 -0
- package/dist/template/.pi/skills/cloudflare/references/kv/patterns.md +139 -0
- package/dist/template/.pi/skills/cloudflare/references/miniflare/README.md +64 -0
- package/dist/template/.pi/skills/cloudflare/references/miniflare/api.md +144 -0
- package/dist/template/.pi/skills/cloudflare/references/miniflare/configuration.md +203 -0
- package/dist/template/.pi/skills/cloudflare/references/miniflare/gotchas.md +187 -0
- package/dist/template/.pi/skills/cloudflare/references/miniflare/patterns.md +211 -0
- package/dist/template/.pi/skills/cloudflare/references/network-interconnect/README.md +60 -0
- package/dist/template/.pi/skills/cloudflare/references/network-interconnect/api.md +240 -0
- package/dist/template/.pi/skills/cloudflare/references/network-interconnect/configuration.md +127 -0
- package/dist/template/.pi/skills/cloudflare/references/network-interconnect/gotchas.md +171 -0
- package/dist/template/.pi/skills/cloudflare/references/network-interconnect/patterns.md +171 -0
- package/dist/template/.pi/skills/cloudflare/references/observability/README.md +18 -0
- package/dist/template/.pi/skills/cloudflare/references/observability/api.md +51 -0
- package/dist/template/.pi/skills/cloudflare/references/observability/configuration.md +60 -0
- package/dist/template/.pi/skills/cloudflare/references/observability/gotchas.md +36 -0
- package/dist/template/.pi/skills/cloudflare/references/observability/patterns.md +42 -0
- package/dist/template/.pi/skills/cloudflare/references/pages/README.md +76 -0
- package/dist/template/.pi/skills/cloudflare/references/pages/api.md +200 -0
- package/dist/template/.pi/skills/cloudflare/references/pages/configuration.md +228 -0
- package/dist/template/.pi/skills/cloudflare/references/pages/gotchas.md +161 -0
- package/dist/template/.pi/skills/cloudflare/references/pages/patterns.md +145 -0
- package/dist/template/.pi/skills/cloudflare/references/pages-functions/README.md +57 -0
- package/dist/template/.pi/skills/cloudflare/references/pages-functions/api.md +201 -0
- package/dist/template/.pi/skills/cloudflare/references/pages-functions/configuration.md +159 -0
- package/dist/template/.pi/skills/cloudflare/references/pages-functions/gotchas.md +151 -0
- package/dist/template/.pi/skills/cloudflare/references/pages-functions/patterns.md +190 -0
- package/dist/template/.pi/skills/cloudflare/references/pipelines/README.md +664 -0
- package/dist/template/.pi/skills/cloudflare/references/pulumi/README.md +107 -0
- package/dist/template/.pi/skills/cloudflare/references/pulumi/api.md +194 -0
- package/dist/template/.pi/skills/cloudflare/references/pulumi/configuration.md +216 -0
- package/dist/template/.pi/skills/cloudflare/references/pulumi/gotchas.md +223 -0
- package/dist/template/.pi/skills/cloudflare/references/pulumi/patterns.md +139 -0
- package/dist/template/.pi/skills/cloudflare/references/queues/README.md +69 -0
- package/dist/template/.pi/skills/cloudflare/references/queues/api.md +138 -0
- package/dist/template/.pi/skills/cloudflare/references/queues/configuration.md +125 -0
- package/dist/template/.pi/skills/cloudflare/references/queues/gotchas.md +112 -0
- package/dist/template/.pi/skills/cloudflare/references/queues/patterns.md +155 -0
- package/dist/template/.pi/skills/cloudflare/references/r2/README.md +61 -0
- package/dist/template/.pi/skills/cloudflare/references/r2/api.md +127 -0
- package/dist/template/.pi/skills/cloudflare/references/r2/configuration.md +76 -0
- package/dist/template/.pi/skills/cloudflare/references/r2/gotchas.md +94 -0
- package/dist/template/.pi/skills/cloudflare/references/r2/patterns.md +127 -0
- package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/README.md +18 -0
- package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/api.md +29 -0
- package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/configuration.md +39 -0
- package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/gotchas.md +20 -0
- package/dist/template/.pi/skills/cloudflare/references/r2-data-catalog/patterns.md +46 -0
- package/dist/template/.pi/skills/cloudflare/references/r2-sql/README.md +512 -0
- package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/README.md +21 -0
- package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/api.md +135 -0
- package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/configuration.md +63 -0
- package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/gotchas.md +75 -0
- package/dist/template/.pi/skills/cloudflare/references/realtime-sfu/patterns.md +102 -0
- package/dist/template/.pi/skills/cloudflare/references/realtimekit/README.md +81 -0
- package/dist/template/.pi/skills/cloudflare/references/realtimekit/api.md +164 -0
- package/dist/template/.pi/skills/cloudflare/references/realtimekit/configuration.md +147 -0
- package/dist/template/.pi/skills/cloudflare/references/realtimekit/gotchas.md +172 -0
- package/dist/template/.pi/skills/cloudflare/references/realtimekit/patterns.md +155 -0
- package/dist/template/.pi/skills/cloudflare/references/sandbox/README.md +90 -0
- package/dist/template/.pi/skills/cloudflare/references/sandbox/api.md +178 -0
- package/dist/template/.pi/skills/cloudflare/references/sandbox/configuration.md +131 -0
- package/dist/template/.pi/skills/cloudflare/references/sandbox/gotchas.md +156 -0
- package/dist/template/.pi/skills/cloudflare/references/sandbox/patterns.md +203 -0
- package/dist/template/.pi/skills/cloudflare/references/secrets-store/README.md +58 -0
- package/dist/template/.pi/skills/cloudflare/references/secrets-store/api.md +182 -0
- package/dist/template/.pi/skills/cloudflare/references/secrets-store/configuration.md +140 -0
- package/dist/template/.pi/skills/cloudflare/references/secrets-store/gotchas.md +129 -0
- package/dist/template/.pi/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/dist/template/.pi/skills/cloudflare/references/smart-placement/README.md +91 -0
- package/dist/template/.pi/skills/cloudflare/references/smart-placement/api.md +139 -0
- package/dist/template/.pi/skills/cloudflare/references/smart-placement/configuration.md +129 -0
- package/dist/template/.pi/skills/cloudflare/references/smart-placement/gotchas.md +87 -0
- package/dist/template/.pi/skills/cloudflare/references/smart-placement/patterns.md +135 -0
- package/dist/template/.pi/skills/cloudflare/references/snippets/README.md +15 -0
- package/dist/template/.pi/skills/cloudflare/references/snippets/api.md +47 -0
- package/dist/template/.pi/skills/cloudflare/references/snippets/configuration.md +33 -0
- package/dist/template/.pi/skills/cloudflare/references/snippets/gotchas.md +21 -0
- package/dist/template/.pi/skills/cloudflare/references/snippets/patterns.md +34 -0
- package/dist/template/.pi/skills/cloudflare/references/spectrum/README.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/spectrum/api.md +24 -0
- package/dist/template/.pi/skills/cloudflare/references/spectrum/configuration.md +43 -0
- package/dist/template/.pi/skills/cloudflare/references/spectrum/gotchas.md +42 -0
- package/dist/template/.pi/skills/cloudflare/references/spectrum/patterns.md +40 -0
- package/dist/template/.pi/skills/cloudflare/references/static-assets/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/static-assets/api.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/static-assets/configuration.md +47 -0
- package/dist/template/.pi/skills/cloudflare/references/static-assets/gotchas.md +44 -0
- package/dist/template/.pi/skills/cloudflare/references/static-assets/patterns.md +42 -0
- package/dist/template/.pi/skills/cloudflare/references/stream/README.md +103 -0
- package/dist/template/.pi/skills/cloudflare/references/stream/api.md +204 -0
- package/dist/template/.pi/skills/cloudflare/references/stream/configuration.md +127 -0
- package/dist/template/.pi/skills/cloudflare/references/stream/gotchas.md +131 -0
- package/dist/template/.pi/skills/cloudflare/references/stream/patterns.md +152 -0
- package/dist/template/.pi/skills/cloudflare/references/tail-workers/README.md +640 -0
- package/dist/template/.pi/skills/cloudflare/references/terraform/README.md +76 -0
- package/dist/template/.pi/skills/cloudflare/references/terraform/api.md +159 -0
- package/dist/template/.pi/skills/cloudflare/references/terraform/configuration.md +156 -0
- package/dist/template/.pi/skills/cloudflare/references/terraform/gotchas.md +207 -0
- package/dist/template/.pi/skills/cloudflare/references/terraform/patterns.md +135 -0
- package/dist/template/.pi/skills/cloudflare/references/tunnel/README.md +82 -0
- package/dist/template/.pi/skills/cloudflare/references/tunnel/api.md +105 -0
- package/dist/template/.pi/skills/cloudflare/references/tunnel/configuration.md +113 -0
- package/dist/template/.pi/skills/cloudflare/references/tunnel/gotchas.md +115 -0
- package/dist/template/.pi/skills/cloudflare/references/tunnel/patterns.md +157 -0
- package/dist/template/.pi/skills/cloudflare/references/turn/README.md +699 -0
- package/dist/template/.pi/skills/cloudflare/references/turnstile/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/turnstile/api.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/turnstile/configuration.md +19 -0
- package/dist/template/.pi/skills/cloudflare/references/turnstile/gotchas.md +27 -0
- package/dist/template/.pi/skills/cloudflare/references/turnstile/patterns.md +41 -0
- package/dist/template/.pi/skills/cloudflare/references/vectorize/README.md +682 -0
- package/dist/template/.pi/skills/cloudflare/references/waf/README.md +14 -0
- package/dist/template/.pi/skills/cloudflare/references/waf/api.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/waf/configuration.md +44 -0
- package/dist/template/.pi/skills/cloudflare/references/waf/gotchas.md +24 -0
- package/dist/template/.pi/skills/cloudflare/references/waf/patterns.md +29 -0
- package/dist/template/.pi/skills/cloudflare/references/web-analytics/README.md +19 -0
- package/dist/template/.pi/skills/cloudflare/references/web-analytics/api.md +52 -0
- package/dist/template/.pi/skills/cloudflare/references/web-analytics/configuration.md +31 -0
- package/dist/template/.pi/skills/cloudflare/references/web-analytics/gotchas.md +28 -0
- package/dist/template/.pi/skills/cloudflare/references/web-analytics/patterns.md +52 -0
- package/dist/template/.pi/skills/cloudflare/references/workerd/README.md +47 -0
- package/dist/template/.pi/skills/cloudflare/references/workerd/api.md +199 -0
- package/dist/template/.pi/skills/cloudflare/references/workerd/configuration.md +185 -0
- package/dist/template/.pi/skills/cloudflare/references/workerd/gotchas.md +203 -0
- package/dist/template/.pi/skills/cloudflare/references/workerd/patterns.md +216 -0
- package/dist/template/.pi/skills/cloudflare/references/workers/README.md +96 -0
- package/dist/template/.pi/skills/cloudflare/references/workers/api.md +137 -0
- package/dist/template/.pi/skills/cloudflare/references/workers/configuration.md +147 -0
- package/dist/template/.pi/skills/cloudflare/references/workers/gotchas.md +99 -0
- package/dist/template/.pi/skills/cloudflare/references/workers/patterns.md +149 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-ai/README.md +116 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/README.md +48 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/api.md +169 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/configuration.md +136 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/gotchas.md +130 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-for-platforms/patterns.md +170 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-playground/README.md +16 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-playground/api.md +20 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-playground/configuration.md +3 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-playground/gotchas.md +35 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-playground/patterns.md +42 -0
- package/dist/template/.pi/skills/cloudflare/references/workers-vpc/README.md +579 -0
- package/dist/template/.pi/skills/cloudflare/references/workflows/README.md +62 -0
- package/dist/template/.pi/skills/cloudflare/references/workflows/api.md +125 -0
- package/dist/template/.pi/skills/cloudflare/references/workflows/configuration.md +177 -0
- package/dist/template/.pi/skills/cloudflare/references/workflows/gotchas.md +136 -0
- package/dist/template/.pi/skills/cloudflare/references/workflows/patterns.md +132 -0
- package/dist/template/.pi/skills/cloudflare/references/wrangler/README.md +90 -0
- package/dist/template/.pi/skills/cloudflare/references/wrangler/api.md +140 -0
- package/dist/template/.pi/skills/cloudflare/references/wrangler/configuration.md +128 -0
- package/dist/template/.pi/skills/cloudflare/references/wrangler/gotchas.md +93 -0
- package/dist/template/.pi/skills/cloudflare/references/wrangler/patterns.md +150 -0
- package/dist/template/.pi/skills/cloudflare/references/zaraz/README.md +360 -0
- package/dist/template/.pi/skills/code-cleanup/SKILL.md +232 -0
- package/dist/template/.pi/skills/code-review-and-quality/SKILL.md +344 -0
- package/dist/template/.pi/skills/code-simplification/SKILL.md +348 -0
- package/dist/template/.pi/skills/context-engineering/SKILL.md +296 -0
- package/dist/template/.pi/skills/core-data-expert/SKILL.md +117 -0
- package/dist/template/.pi/skills/core-data-expert/references/batch-operations.md +543 -0
- package/dist/template/.pi/skills/core-data-expert/references/cloudkit-integration.md +259 -0
- package/dist/template/.pi/skills/core-data-expert/references/concurrency.md +522 -0
- package/dist/template/.pi/skills/core-data-expert/references/fetch-requests.md +643 -0
- package/dist/template/.pi/skills/core-data-expert/references/glossary.md +233 -0
- package/dist/template/.pi/skills/core-data-expert/references/migration.md +393 -0
- package/dist/template/.pi/skills/core-data-expert/references/model-configuration.md +597 -0
- package/dist/template/.pi/skills/core-data-expert/references/performance.md +300 -0
- package/dist/template/.pi/skills/core-data-expert/references/persistent-history.md +553 -0
- package/dist/template/.pi/skills/core-data-expert/references/project-audit.md +60 -0
- package/dist/template/.pi/skills/core-data-expert/references/saving.md +574 -0
- package/dist/template/.pi/skills/core-data-expert/references/stack-setup.md +625 -0
- package/dist/template/.pi/skills/core-data-expert/references/testing.md +300 -0
- package/dist/template/.pi/skills/core-data-expert/references/threading.md +589 -0
- package/dist/template/.pi/skills/debugging-and-error-recovery/SKILL.md +274 -0
- package/dist/template/.pi/skills/deep-module-design/SKILL.md +218 -0
- package/dist/template/.pi/skills/defense-in-depth/SKILL.md +161 -0
- package/dist/template/.pi/skills/deprecation-and-migration/SKILL.md +186 -0
- package/dist/template/.pi/skills/design-system-audit/SKILL.md +176 -0
- package/dist/template/.pi/skills/design-taste-frontend/SKILL.md +255 -0
- package/dist/template/.pi/skills/development-lifecycle/SKILL.md +285 -0
- package/dist/template/.pi/skills/documentation-and-adrs/SKILL.md +217 -0
- package/dist/template/.pi/skills/doubt-driven-development/SKILL.md +207 -0
- package/dist/template/.pi/skills/fallow/SKILL.md +457 -0
- package/dist/template/.pi/skills/fallow/references/cli-reference.md +1905 -0
- package/dist/template/.pi/skills/fallow/references/gotchas.md +644 -0
- package/dist/template/.pi/skills/fallow/references/patterns.md +791 -0
- package/dist/template/.pi/skills/figma/SKILL.md +241 -0
- package/dist/template/.pi/skills/frontend-design/SKILL.md +262 -0
- package/dist/template/.pi/skills/frontend-design/references/animation/motion-advanced.md +224 -0
- package/dist/template/.pi/skills/frontend-design/references/animation/motion-core.md +181 -0
- package/dist/template/.pi/skills/frontend-design/references/canvas/execution.md +90 -0
- package/dist/template/.pi/skills/frontend-design/references/canvas/philosophy.md +94 -0
- package/dist/template/.pi/skills/frontend-design/references/design/color-system.md +111 -0
- package/dist/template/.pi/skills/frontend-design/references/design/interaction.md +149 -0
- package/dist/template/.pi/skills/frontend-design/references/design/typography-rules.md +106 -0
- package/dist/template/.pi/skills/frontend-design/references/design/ux-writing.md +99 -0
- package/dist/template/.pi/skills/frontend-design/references/shadcn/accessibility.md +132 -0
- package/dist/template/.pi/skills/frontend-design/references/shadcn/core-components.md +153 -0
- package/dist/template/.pi/skills/frontend-design/references/shadcn/form-components.md +158 -0
- package/dist/template/.pi/skills/frontend-design/references/shadcn/setup.md +69 -0
- package/dist/template/.pi/skills/frontend-design/references/shadcn/theming.md +152 -0
- package/dist/template/.pi/skills/frontend-design/references/tailwind/responsive.md +112 -0
- package/dist/template/.pi/skills/frontend-design/references/tailwind/utilities-layout.md +134 -0
- package/dist/template/.pi/skills/frontend-design/references/tailwind/utilities-styling.md +165 -0
- package/dist/template/.pi/skills/frontend-design/references/tailwind/v4-config.md +147 -0
- package/dist/template/.pi/skills/frontend-design/references/tailwind/v4-features.md +128 -0
- package/dist/template/.pi/skills/frontend-ui-engineering/SKILL.md +217 -0
- package/dist/template/.pi/skills/gemini-large-context/SKILL.md +238 -0
- package/dist/template/.pi/skills/git-workflow-and-versioning/SKILL.md +217 -0
- package/dist/template/.pi/skills/grill-me/SKILL.md +162 -0
- package/dist/template/.pi/skills/high-end-visual-design/SKILL.md +128 -0
- package/dist/template/.pi/skills/idea-refine/SKILL.md +195 -0
- package/dist/template/.pi/skills/idea-refine/examples.md +62 -0
- package/dist/template/.pi/skills/idea-refine/frameworks.md +63 -0
- package/dist/template/.pi/skills/idea-refine/refinement-criteria.md +56 -0
- package/dist/template/.pi/skills/incremental-implementation/SKILL.md +190 -0
- package/dist/template/.pi/skills/industrial-brutalist-ui/SKILL.md +131 -0
- package/dist/template/.pi/skills/interview-me/SKILL.md +227 -0
- package/dist/template/.pi/skills/jira/SKILL.md +306 -0
- package/dist/template/.pi/skills/loop-audit/SKILL.md +141 -0
- package/dist/template/.pi/skills/loop-cost/SKILL.md +130 -0
- package/dist/template/.pi/skills/loop-engineering/SKILL.md +175 -0
- package/dist/template/.pi/skills/minimalist-ui/SKILL.md +124 -0
- package/dist/template/.pi/skills/mockup-to-code/SKILL.md +197 -0
- package/dist/template/.pi/skills/observability-and-instrumentation/SKILL.md +202 -0
- package/dist/template/.pi/skills/opensrc/SKILL.md +297 -0
- package/dist/template/.pi/skills/opensrc/references/architecture.md +176 -0
- package/dist/template/.pi/skills/opensrc/references/cli-usage.md +176 -0
- package/dist/template/.pi/skills/opensrc/references/registry-support.md +137 -0
- package/dist/template/.pi/skills/pdf-extract/SKILL.md +461 -0
- package/dist/template/.pi/skills/performance-optimization/SKILL.md +233 -0
- package/dist/template/.pi/skills/performance-optimization/references/performance-checklist.md +85 -0
- package/dist/template/.pi/skills/planning-and-task-breakdown/SKILL.md +204 -0
- package/dist/template/.pi/skills/playwright/SKILL.md +404 -0
- package/dist/template/.pi/skills/playwright/references/agent-browser-cli.md +405 -0
- package/dist/template/.pi/skills/polar/SKILL.md +125 -0
- package/dist/template/.pi/skills/react-best-practices/SKILL.md +156 -0
- package/dist/template/.pi/skills/react-best-practices/rules/_sections.md +46 -0
- package/dist/template/.pi/skills/react-best-practices/rules/_template.md +28 -0
- package/dist/template/.pi/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/dist/template/.pi/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/dist/template/.pi/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/dist/template/.pi/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/dist/template/.pi/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/dist/template/.pi/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/dist/template/.pi/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/dist/template/.pi/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/dist/template/.pi/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/dist/template/.pi/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/dist/template/.pi/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/dist/template/.pi/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/dist/template/.pi/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/dist/template/.pi/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/dist/template/.pi/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/dist/template/.pi/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/dist/template/.pi/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/dist/template/.pi/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/dist/template/.pi/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/dist/template/.pi/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/dist/template/.pi/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/dist/template/.pi/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/dist/template/.pi/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/dist/template/.pi/skills/redesign-existing-projects/SKILL.md +217 -0
- package/dist/template/.pi/skills/resend/SKILL.md +196 -0
- package/dist/template/.pi/skills/resend/references/react-email.md +287 -0
- package/dist/template/.pi/skills/resend/references/receive-email.md +248 -0
- package/dist/template/.pi/skills/resend/references/send-email.md +318 -0
- package/dist/template/.pi/skills/root-cause-tracing/SKILL.md +216 -0
- package/dist/template/.pi/skills/security-and-hardening/SKILL.md +293 -0
- package/dist/template/.pi/skills/security-and-hardening/references/security-checklist.md +105 -0
- package/dist/template/.pi/skills/shipping-and-launch/SKILL.md +101 -0
- package/dist/template/.pi/skills/source-driven-development/SKILL.md +108 -0
- package/dist/template/.pi/skills/spec-driven-development/SKILL.md +177 -0
- package/dist/template/.pi/skills/srcwalk/SKILL.md +182 -0
- package/dist/template/.pi/skills/subagent-driven-development/SKILL.md +253 -0
- package/dist/template/.pi/skills/supabase/SKILL.md +153 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/SKILL.md +88 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/advanced-full-text-search.md +55 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/advanced-jsonb-indexing.md +49 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-idle-timeout.md +46 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-limits.md +44 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-pooling.md +41 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/conn-prepared-statements.md +46 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-batch-inserts.md +54 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-n-plus-one.md +53 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-pagination.md +50 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/data-upsert.md +50 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-advisory.md +56 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-deadlock-prevention.md +68 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-short-transactions.md +50 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/lock-skip-locked.md +54 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/monitor-explain-analyze.md +45 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/monitor-pg-stat-statements.md +55 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/monitor-vacuum-analyze.md +55 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-composite-indexes.md +44 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-covering-indexes.md +40 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-index-types.md +45 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-missing-indexes.md +43 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/query-partial-indexes.md +45 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-data-types.md +46 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-foreign-key-indexes.md +59 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-lowercase-identifiers.md +55 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-partitioning.md +55 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/schema-primary-keys.md +61 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/security-privileges.md +54 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/security-rls-basics.md +50 -0
- package/dist/template/.pi/skills/supabase-postgres-best-practices/rules/security-rls-performance.md +57 -0
- package/dist/template/.pi/skills/swift-concurrency/SKILL.md +290 -0
- package/dist/template/.pi/skills/swift-concurrency/references/actors.md +640 -0
- package/dist/template/.pi/skills/swift-concurrency/references/async-algorithms.md +822 -0
- package/dist/template/.pi/skills/swift-concurrency/references/async-await-basics.md +249 -0
- package/dist/template/.pi/skills/swift-concurrency/references/async-sequences.md +670 -0
- package/dist/template/.pi/skills/swift-concurrency/references/core-data.md +533 -0
- package/dist/template/.pi/skills/swift-concurrency/references/glossary.md +128 -0
- package/dist/template/.pi/skills/swift-concurrency/references/linting.md +142 -0
- package/dist/template/.pi/skills/swift-concurrency/references/memory-management.md +542 -0
- package/dist/template/.pi/skills/swift-concurrency/references/migration.md +1076 -0
- package/dist/template/.pi/skills/swift-concurrency/references/performance.md +574 -0
- package/dist/template/.pi/skills/swift-concurrency/references/sendable.md +578 -0
- package/dist/template/.pi/skills/swift-concurrency/references/tasks.md +604 -0
- package/dist/template/.pi/skills/swift-concurrency/references/testing.md +565 -0
- package/dist/template/.pi/skills/swift-concurrency/references/threading.md +452 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/SKILL.md +343 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/animation-advanced.md +351 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/animation-basics.md +284 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/animation-transitions.md +326 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/image-optimization.md +286 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/layout-best-practices.md +312 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/liquid-glass.md +377 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/list-patterns.md +153 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/modern-apis.md +400 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/performance-patterns.md +377 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/scroll-patterns.md +305 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/sheet-navigation-patterns.md +292 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/state-management.md +447 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/text-formatting.md +285 -0
- package/dist/template/.pi/skills/swiftui-expert-skill/references/view-structure.md +276 -0
- package/dist/template/.pi/skills/test-driven-development/SKILL.md +400 -0
- package/dist/template/.pi/skills/test-driven-development/references/testing-patterns.md +155 -0
- package/dist/template/.pi/skills/testing-anti-patterns/SKILL.md +339 -0
- package/dist/template/.pi/skills/using-agent-skills/SKILL.md +371 -0
- package/dist/template/.pi/skills/using-git-worktrees/SKILL.md +275 -0
- package/dist/template/.pi/skills/vercel-deploy-claimable/SKILL.md +144 -0
- package/dist/template/.pi/skills/vercel-deploy-claimable/scripts/deploy.sh +249 -0
- package/dist/template/.pi/skills/verification-before-completion/SKILL.md +348 -0
- package/dist/template/.pi/skills/webclaw/SKILL.md +188 -0
- package/dist/template/.pi/skills/writing-skills/SKILL.md +329 -0
- package/dist/template/.pi/skills/writing-skills/references/anti-patterns.md +25 -0
- package/dist/template/.pi/skills/writing-skills/references/claude-search-optimization.md +140 -0
- package/dist/template/.pi/skills/writing-skills/references/discovery-workflow.md +11 -0
- package/dist/template/.pi/skills/writing-skills/references/file-organization.md +32 -0
- package/dist/template/.pi/skills/writing-skills/references/flowcharts-and-examples.md +57 -0
- package/dist/template/.pi/skills/writing-skills/references/rationalization-hardening.md +75 -0
- package/dist/template/.pi/skills/writing-skills/references/testing-methodology.md +397 -0
- package/dist/template/.pi/skills/writing-skills/references/testing-skill-types.md +52 -0
- package/dist/template/.pi/subagents.json +10 -0
- package/dist/template/.pi/templates/adr.md +47 -0
- package/dist/template/.pi/templates/design.md +61 -0
- package/dist/template/.pi/templates/loop-github-action.yml +162 -0
- package/dist/template/.pi/templates/loop-orchestrator.sh +514 -0
- package/dist/template/.pi/templates/loop-orchestrator.test.ts +332 -0
- package/dist/template/.pi/templates/loop-orchestrator.ts +936 -0
- package/dist/template/.pi/templates/loop-state.json +24 -0
- package/dist/template/.pi/templates/loop-state.md +98 -0
- package/dist/template/.pi/templates/loop-vision.md +110 -0
- package/dist/template/.pi/templates/prd.md +204 -0
- package/dist/template/.pi/templates/progress.md +55 -0
- package/dist/template/.pi/templates/project.md +58 -0
- package/dist/template/.pi/templates/proposal.md +40 -0
- package/dist/template/.pi/templates/review-state.json +20 -0
- package/dist/template/.pi/templates/roadmap.md +93 -0
- package/dist/template/.pi/templates/state.md +97 -0
- package/dist/template/.pi/templates/tasks.md +202 -0
- package/dist/template/.pi/templates/tech-stack.md +85 -0
- package/dist/template/.pi/templates/user.md +26 -0
- package/dist/template/.pi/workflows/INDEX.md +63 -0
- package/dist/template/.pi/workflows/audit-pattern.md +84 -0
- package/dist/template/.pi/workflows/batch-implement.md +121 -0
- package/dist/template/.pi/workflows/deep-research.md +89 -0
- package/dist/template/.pi/workflows/development-lifecycle-workflow.md +175 -0
- package/dist/template/.pi/workflows/garbage-collection.md +144 -0
- package/dist/template/.pi/workflows/quality-loop.md +211 -0
- package/package.json +57 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
# agent-browser
|
|
2
|
+
|
|
3
|
+
## When to Use
|
|
4
|
+
|
|
5
|
+
- When you need Playwright-based browser automation via the agent-browser CLI.
|
|
6
|
+
|
|
7
|
+
## When NOT to Use
|
|
8
|
+
|
|
9
|
+
- When MCP-based browser control is required instead of a CLI workflow.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install -g agent-browser
|
|
16
|
+
agent-browser install # Download Chromium
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Linux: `agent-browser install --with-deps`
|
|
20
|
+
|
|
21
|
+
## Architecture
|
|
22
|
+
|
|
23
|
+
- **Rust CLI** (fast native binary) parses commands, communicates with daemon
|
|
24
|
+
- **Node.js daemon** manages Playwright browser instance, persists between commands
|
|
25
|
+
- Daemon auto-starts on first command, stays alive for fast subsequent ops
|
|
26
|
+
- Each session has own daemon process + Unix socket (or TCP on Windows)
|
|
27
|
+
|
|
28
|
+
## Core Workflow
|
|
29
|
+
|
|
30
|
+
1. **Open page**: `agent-browser open <url>`
|
|
31
|
+
2. **Get snapshot**: `agent-browser snapshot -i` (interactive elements only)
|
|
32
|
+
3. **Use refs**: `agent-browser click @e2` / `agent-browser fill @e3 "text"`
|
|
33
|
+
4. **Repeat snapshot** after page changes
|
|
34
|
+
|
|
35
|
+
## Refs (Primary Selection Method)
|
|
36
|
+
|
|
37
|
+
Snapshot generates ARIA accessibility tree with `[ref=eN]` tags. Refs map to `getByRole()` locators internally.
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
agent-browser snapshot
|
|
41
|
+
# - heading "Example Domain" [ref=e1] [level=1]
|
|
42
|
+
# - button "Submit" [ref=e2]
|
|
43
|
+
# - textbox "Email" [ref=e3]
|
|
44
|
+
# - link "Learn more" [ref=e4]
|
|
45
|
+
|
|
46
|
+
agent-browser click @e2 # Click button
|
|
47
|
+
agent-browser fill @e3 "test@example.com"
|
|
48
|
+
agent-browser get text @e1 # Get heading text
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Ref syntax: `@e1`, `e1`, or `ref=e1` all work.
|
|
52
|
+
|
|
53
|
+
**Why refs?**
|
|
54
|
+
|
|
55
|
+
- Deterministic: points to exact element from snapshot
|
|
56
|
+
- Fast: no DOM re-query, uses cached role/name locator
|
|
57
|
+
- AI-friendly: snapshot + ref workflow optimal for LLMs
|
|
58
|
+
|
|
59
|
+
### Interactive Roles (get refs automatically)
|
|
60
|
+
|
|
61
|
+
`button`, `link`, `textbox`, `checkbox`, `radio`, `combobox`, `listbox`, `menuitem`, `option`, `searchbox`, `slider`, `spinbutton`, `switch`, `tab`, `treeitem`
|
|
62
|
+
|
|
63
|
+
### Content Roles (get refs when named)
|
|
64
|
+
|
|
65
|
+
`heading`, `cell`, `gridcell`, `columnheader`, `rowheader`, `listitem`, `article`, `region`, `main`, `navigation`
|
|
66
|
+
|
|
67
|
+
## Commands
|
|
68
|
+
|
|
69
|
+
### Navigation
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
agent-browser open <url> # Auto-prepends https:// if needed
|
|
73
|
+
agent-browser back
|
|
74
|
+
agent-browser forward
|
|
75
|
+
agent-browser reload
|
|
76
|
+
agent-browser close # Closes browser + daemon
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Interaction
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
agent-browser click <sel> # Left click
|
|
83
|
+
agent-browser dblclick <sel> # Double click
|
|
84
|
+
agent-browser fill <sel> <text> # Clear field + set value (atomic)
|
|
85
|
+
agent-browser type <sel> <text> # Type character by character (preserves existing)
|
|
86
|
+
agent-browser press <key> # Key press: Enter, Tab, Control+a, Shift+Tab
|
|
87
|
+
agent-browser keydown <key> # Hold key down
|
|
88
|
+
agent-browser keyup <key> # Release key
|
|
89
|
+
agent-browser hover <sel>
|
|
90
|
+
agent-browser focus <sel>
|
|
91
|
+
agent-browser select <sel> <val> # Select dropdown option by value
|
|
92
|
+
agent-browser check <sel> # Check checkbox
|
|
93
|
+
agent-browser uncheck <sel> # Uncheck checkbox
|
|
94
|
+
agent-browser scroll up|down|left|right [px] # Default 300px
|
|
95
|
+
agent-browser scrollintoview <sel>
|
|
96
|
+
agent-browser drag <src> <tgt> # Drag and drop
|
|
97
|
+
agent-browser upload <sel> <file1> [file2...]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Get Info
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
agent-browser get text <sel> # textContent
|
|
104
|
+
agent-browser get html <sel> # innerHTML
|
|
105
|
+
agent-browser get value <sel> # input value
|
|
106
|
+
agent-browser get attr <sel> <attr>
|
|
107
|
+
agent-browser get title
|
|
108
|
+
agent-browser get url
|
|
109
|
+
agent-browser get count <sel> # Number of matching elements
|
|
110
|
+
agent-browser get box <sel> # Bounding box {x,y,width,height}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Check State
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
agent-browser is visible <sel>
|
|
117
|
+
agent-browser is enabled <sel>
|
|
118
|
+
agent-browser is checked <sel>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Snapshot Options
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
agent-browser snapshot # Full accessibility tree
|
|
125
|
+
agent-browser snapshot -i # Interactive elements only (buttons, inputs, links)
|
|
126
|
+
agent-browser snapshot -c # Compact (remove empty structural elements)
|
|
127
|
+
agent-browser snapshot -d 3 # Limit depth to 3 levels
|
|
128
|
+
agent-browser snapshot -s "#main" # Scope to CSS selector
|
|
129
|
+
agent-browser snapshot -i -c -d 5 # Combine options
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Screenshots & PDF
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
agent-browser screenshot [path] # PNG to stdout (base64) or file
|
|
136
|
+
agent-browser screenshot --full # Full page screenshot
|
|
137
|
+
agent-browser screenshot -f page.png
|
|
138
|
+
agent-browser pdf <path> # Save as PDF (format: Letter, A4, etc)
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Wait
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
agent-browser wait <selector> # Wait for element visible
|
|
145
|
+
agent-browser wait <ms> # Wait for time (numeric = milliseconds)
|
|
146
|
+
agent-browser wait --text "Welcome"
|
|
147
|
+
agent-browser wait --url "**/dashboard"
|
|
148
|
+
agent-browser wait --load networkidle # load | domcontentloaded | networkidle
|
|
149
|
+
agent-browser wait --fn "window.ready === true" # Wait for JS condition
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Find (Semantic Locators)
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
agent-browser find role button click --name "Submit"
|
|
156
|
+
agent-browser find text "Sign In" click
|
|
157
|
+
agent-browser find label "Email" fill "test@test.com"
|
|
158
|
+
agent-browser find placeholder "Search" fill "query"
|
|
159
|
+
agent-browser find alt "Logo" click # By alt text
|
|
160
|
+
agent-browser find title "Close" click # By title attribute
|
|
161
|
+
agent-browser find testid "submit-btn" click
|
|
162
|
+
agent-browser find first ".item" click # First match
|
|
163
|
+
agent-browser find last ".item" click # Last match
|
|
164
|
+
agent-browser find nth 2 "a" text # Nth match (0-indexed)
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Actions: `click`, `fill`, `check`, `hover`, `text`
|
|
168
|
+
|
|
169
|
+
### Sessions (Isolated Browser Instances)
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
agent-browser --session agent1 open site-a.com
|
|
173
|
+
agent-browser --session agent2 open site-b.com
|
|
174
|
+
AGENT_BROWSER_SESSION=agent1 agent-browser click @e2
|
|
175
|
+
|
|
176
|
+
agent-browser session list # List active sessions
|
|
177
|
+
agent-browser session # Show current session
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Each session has: own browser, cookies/storage, navigation history, auth state.
|
|
181
|
+
|
|
182
|
+
### Storage & Cookies
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
agent-browser cookies # Get all cookies
|
|
186
|
+
agent-browser cookies set <name> <val>
|
|
187
|
+
agent-browser cookies clear
|
|
188
|
+
|
|
189
|
+
agent-browser storage local # Get all localStorage
|
|
190
|
+
agent-browser storage local <key> # Get specific key
|
|
191
|
+
agent-browser storage local set <k> <v>
|
|
192
|
+
agent-browser storage local clear
|
|
193
|
+
agent-browser storage session # Same for sessionStorage
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Tabs & Windows
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
agent-browser tab # List tabs
|
|
200
|
+
agent-browser tab new [url] # New tab
|
|
201
|
+
agent-browser tab <n> # Switch to tab n
|
|
202
|
+
agent-browser tab close [n] # Close tab
|
|
203
|
+
agent-browser window new # New window (new context)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Frames
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
agent-browser frame <sel> # Switch to iframe by selector
|
|
210
|
+
agent-browser frame main # Back to main frame
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Dialogs (alert/confirm/prompt)
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
agent-browser dialog accept [text] # Accept (with optional prompt text)
|
|
217
|
+
agent-browser dialog dismiss # Dismiss
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Network Interception
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
agent-browser network route <url> # Intercept requests
|
|
224
|
+
agent-browser network route <url> --abort # Block requests
|
|
225
|
+
agent-browser network route <url> --body '{"mock":true}' # Mock response
|
|
226
|
+
agent-browser network unroute [url] # Remove routes
|
|
227
|
+
agent-browser network requests # View tracked requests
|
|
228
|
+
agent-browser network requests --filter api # Filter by URL pattern
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Browser Settings
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
agent-browser set viewport <w> <h>
|
|
235
|
+
agent-browser set device "iPhone 14" # Emulate device
|
|
236
|
+
agent-browser set geo <lat> <lng> # Geolocation
|
|
237
|
+
agent-browser set offline [on|off] # Toggle offline mode
|
|
238
|
+
agent-browser set media dark|light # Color scheme
|
|
239
|
+
agent-browser set credentials <u> <p> # HTTP basic auth
|
|
240
|
+
agent-browser set headers '{"X-Custom":"value"}'
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Debug & Tracing
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
agent-browser --headed open <url> # Show browser window (not headless)
|
|
247
|
+
agent-browser console # View console messages
|
|
248
|
+
agent-browser console --clear # Clear console
|
|
249
|
+
agent-browser errors # View page errors
|
|
250
|
+
agent-browser errors --clear
|
|
251
|
+
agent-browser highlight <sel> # Highlight element visually
|
|
252
|
+
agent-browser eval <js> # Run JavaScript, returns result
|
|
253
|
+
agent-browser trace start [path] # Start recording trace
|
|
254
|
+
agent-browser trace stop [path] # Stop and save trace
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### Auth State Persistence
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
agent-browser state save auth.json # Save cookies, localStorage, sessionStorage
|
|
261
|
+
agent-browser state load auth.json # Load at next launch (must be at browser start)
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Mouse Control
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
agent-browser mouse move <x> <y> # Move to coordinates
|
|
268
|
+
agent-browser mouse down [button] # left|right|middle
|
|
269
|
+
agent-browser mouse up [button]
|
|
270
|
+
agent-browser mouse wheel <dy> [dx] # Scroll wheel
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Options
|
|
274
|
+
|
|
275
|
+
| Option | Description |
|
|
276
|
+
| ------------------ | ------------------------------------------------- |
|
|
277
|
+
| `--session <name>` | Isolated session (or `AGENT_BROWSER_SESSION` env) |
|
|
278
|
+
| `--json` | JSON output (for parsing) |
|
|
279
|
+
| `--full, -f` | Full page screenshot |
|
|
280
|
+
| `--headed` | Show browser window |
|
|
281
|
+
| `--name, -n` | Locator name filter |
|
|
282
|
+
| `--exact` | Exact text match |
|
|
283
|
+
| `--debug` | Debug output |
|
|
284
|
+
|
|
285
|
+
## Selector Types
|
|
286
|
+
|
|
287
|
+
1. **Refs** (preferred): `@e1`, `@e2` from snapshot
|
|
288
|
+
2. **CSS**: `#id`, `.class`, `div > button`
|
|
289
|
+
3. **Text**: `text=Submit`
|
|
290
|
+
4. **XPath**: `xpath=//button`
|
|
291
|
+
|
|
292
|
+
## JSON Output Format
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
agent-browser snapshot --json
|
|
296
|
+
# {"success":true,"data":{"snapshot":"...","refs":{"e1":{"role":"heading","name":"Title"},...}}}
|
|
297
|
+
|
|
298
|
+
agent-browser get text @e1 --json
|
|
299
|
+
# {"success":true,"data":{"text":"Hello World"}}
|
|
300
|
+
|
|
301
|
+
agent-browser is visible @e2 --json
|
|
302
|
+
# {"success":true,"data":{"visible":true}}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Patterns
|
|
306
|
+
|
|
307
|
+
### Login Flow
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
agent-browser open https://example.com/login
|
|
311
|
+
agent-browser snapshot -i
|
|
312
|
+
# Identify refs for username, password, submit
|
|
313
|
+
agent-browser fill @e2 "username"
|
|
314
|
+
agent-browser fill @e3 "password"
|
|
315
|
+
agent-browser click @e4
|
|
316
|
+
agent-browser wait --url "**/dashboard"
|
|
317
|
+
agent-browser state save auth.json # Persist auth for later
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Form Submission
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
agent-browser open https://example.com/form
|
|
324
|
+
agent-browser snapshot -i --json
|
|
325
|
+
# Parse refs from JSON response
|
|
326
|
+
agent-browser fill @e1 "John Doe"
|
|
327
|
+
agent-browser fill @e2 "john@example.com"
|
|
328
|
+
agent-browser select @e3 "option-value"
|
|
329
|
+
agent-browser check @e4
|
|
330
|
+
agent-browser click @e5
|
|
331
|
+
agent-browser wait --text "Success"
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
### Scraping Data
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
agent-browser open https://example.com/data
|
|
338
|
+
agent-browser snapshot
|
|
339
|
+
agent-browser get text @e1
|
|
340
|
+
agent-browser get attr @e2 "href"
|
|
341
|
+
agent-browser eval "document.querySelectorAll('.item').length"
|
|
342
|
+
agent-browser eval "JSON.stringify([...document.querySelectorAll('.price')].map(e => e.textContent))"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Multi-page Navigation
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
agent-browser open https://example.com
|
|
349
|
+
agent-browser snapshot -i
|
|
350
|
+
agent-browser click @e3 # Navigate to new page
|
|
351
|
+
agent-browser wait --load networkidle
|
|
352
|
+
agent-browser snapshot -i # Fresh snapshot for new page
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Parallel Browser Sessions
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
# Terminal 1
|
|
359
|
+
agent-browser --session scraper1 open https://site-a.com
|
|
360
|
+
agent-browser --session scraper1 snapshot -i
|
|
361
|
+
|
|
362
|
+
# Terminal 2
|
|
363
|
+
agent-browser --session scraper2 open https://site-b.com
|
|
364
|
+
agent-browser --session scraper2 snapshot -i
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Mock API Response
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
agent-browser network route "**/api/users" --body '[{"id":1,"name":"Mock User"}]'
|
|
371
|
+
agent-browser open https://example.com # App sees mocked data
|
|
372
|
+
agent-browser network unroute "**/api/users"
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Handle File Downloads
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
agent-browser open https://example.com/downloads
|
|
379
|
+
agent-browser snapshot -i
|
|
380
|
+
agent-browser click @e2 # Download button
|
|
381
|
+
# Download handled automatically, saved to suggested filename
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Anti-Patterns
|
|
385
|
+
|
|
386
|
+
- **Don't use CSS selectors when refs available** - refs from snapshot are deterministic
|
|
387
|
+
- **Don't skip snapshot after page changes** - refs become stale after navigation
|
|
388
|
+
- **Don't use `type` when `fill` works** - `fill` atomically clears + sets, `type` appends
|
|
389
|
+
- **Don't hardcode wait times** - use semantic waits (`--text`, `--url`, `--load`, `--fn`)
|
|
390
|
+
- **Don't use `--headed` in automation** - only for debugging
|
|
391
|
+
- **Don't call `state load` after browser started** - must be at launch time
|
|
392
|
+
|
|
393
|
+
## Timeouts
|
|
394
|
+
|
|
395
|
+
Default timeout: 10 seconds (Playwright default is 30s). Commands will fail after timeout if element not found or condition not met.
|
|
396
|
+
|
|
397
|
+
## Browser Support
|
|
398
|
+
|
|
399
|
+
| Platform | Binary | Fallback |
|
|
400
|
+
| ----------- | ----------- | -------- |
|
|
401
|
+
| macOS ARM64 | Native Rust | Node.js |
|
|
402
|
+
| macOS x64 | Native Rust | Node.js |
|
|
403
|
+
| Linux ARM64 | Native Rust | Node.js |
|
|
404
|
+
| Linux x64 | Native Rust | Node.js |
|
|
405
|
+
| Windows | - | Node.js |
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: polar
|
|
3
|
+
description: Use when implementing payment flows, subscriptions, license keys, or customer portals with Polar. MUST load before writing any checkout, monetization, or billing code using Polar platform.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Polar Integration
|
|
7
|
+
|
|
8
|
+
## When to Use
|
|
9
|
+
|
|
10
|
+
- When implementing Polar checkout, subscriptions, or license key flows.
|
|
11
|
+
|
|
12
|
+
## When NOT to Use
|
|
13
|
+
|
|
14
|
+
- When payments are handled by a different platform.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## What I Do
|
|
18
|
+
|
|
19
|
+
- Guide implementation of Polar checkout and payments
|
|
20
|
+
- Help with subscription management and billing
|
|
21
|
+
- Assist with license key validation
|
|
22
|
+
- Set up webhook handlers for payment events
|
|
23
|
+
|
|
24
|
+
## When to Use Me
|
|
25
|
+
|
|
26
|
+
- Implementing checkout flow for a product
|
|
27
|
+
- Adding subscription billing to an app
|
|
28
|
+
- Setting up license key validation
|
|
29
|
+
- Building a customer portal
|
|
30
|
+
- Handling payment webhooks
|
|
31
|
+
|
|
32
|
+
## Quick Start
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install @polar-sh/sdk
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { Polar } from "@polar-sh/sdk";
|
|
40
|
+
|
|
41
|
+
const polar = new Polar({
|
|
42
|
+
accessToken: process.env.POLAR_ACCESS_TOKEN!,
|
|
43
|
+
server: "production", // or "sandbox"
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Key APIs
|
|
48
|
+
|
|
49
|
+
| API | Purpose |
|
|
50
|
+
| ----------------------- | --------------------------------- |
|
|
51
|
+
| `polar.products.*` | Create/manage products and prices |
|
|
52
|
+
| `polar.checkouts.*` | Create checkout sessions |
|
|
53
|
+
| `polar.subscriptions.*` | Manage subscriptions |
|
|
54
|
+
| `polar.orders.*` | View order history |
|
|
55
|
+
| `polar.customers.*` | Customer management |
|
|
56
|
+
| `polar.licenseKeys.*` | Issue and validate licenses |
|
|
57
|
+
|
|
58
|
+
## Environment Variables
|
|
59
|
+
|
|
60
|
+
| Variable | Description |
|
|
61
|
+
| ---------------------- | ------------------------------- |
|
|
62
|
+
| `POLAR_ACCESS_TOKEN` | Organization Access Token (OAT) |
|
|
63
|
+
| `POLAR_WEBHOOK_SECRET` | Webhook signing secret |
|
|
64
|
+
|
|
65
|
+
## Common Patterns
|
|
66
|
+
|
|
67
|
+
### Create Checkout
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
const checkout = await polar.checkouts.create({
|
|
71
|
+
productId: "prod_xxx",
|
|
72
|
+
successUrl: "https://myapp.com/success",
|
|
73
|
+
});
|
|
74
|
+
// Redirect to checkout.url
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Validate License Key
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
const result = await polar.licenseKeys.validate({
|
|
81
|
+
key: "XXXX-XXXX-XXXX-XXXX",
|
|
82
|
+
organizationId: "org_xxx",
|
|
83
|
+
});
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Handle Webhook
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { validateEvent } from "@polar-sh/sdk/webhooks";
|
|
90
|
+
|
|
91
|
+
const event = validateEvent(body, signature, process.env.POLAR_WEBHOOK_SECRET!);
|
|
92
|
+
// event.type: "subscription.created", "order.created", etc.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Links
|
|
96
|
+
|
|
97
|
+
- [Dashboard](https://polar.sh)
|
|
98
|
+
- [API Docs](https://docs.polar.sh/api-reference)
|
|
99
|
+
- [SDK](https://www.npmjs.com/package/@polar-sh/sdk)
|
|
100
|
+
|
|
101
|
+
## Common Rationalizations
|
|
102
|
+
|
|
103
|
+
| Rationalization | Reality |
|
|
104
|
+
|---|---|
|
|
105
|
+
| "I'll test payments in production" | Payment bugs cost real money. Test in sandbox with every scenario. |
|
|
106
|
+
| "The webhook handler is simple enough" | Webhook failures mean lost revenue. Validate signatures, handle retries, log everything. |
|
|
107
|
+
| "Subscription logic can go in the frontend" | Pricing logic in the frontend is spoofable. Server-side validation is mandatory. |
|
|
108
|
+
|
|
109
|
+
## Red Flags
|
|
110
|
+
|
|
111
|
+
- Payment logic without error handling for all failure modes
|
|
112
|
+
- Webhook signatures not verified
|
|
113
|
+
- Test mode vs live mode not clearly separated in code
|
|
114
|
+
- Subscription state stored locally without server reconciliation
|
|
115
|
+
- Pricing changes deployed without migration plan for existing subscribers
|
|
116
|
+
|
|
117
|
+
## Verification
|
|
118
|
+
|
|
119
|
+
After implementing Polar payments:
|
|
120
|
+
|
|
121
|
+
- [ ] All payment flows tested in sandbox mode
|
|
122
|
+
- [ ] Webhook signatures are verified on every request
|
|
123
|
+
- [ ] Test mode and live mode are explicitly separated in configuration
|
|
124
|
+
- [ ] Error handling covers: declined, expired, insufficient funds, network failure
|
|
125
|
+
- [ ] Subscription state is reconciled server-side, not client-authoritative
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: react-best-practices
|
|
3
|
+
description: MUST load when writing, reviewing, or refactoring React/Next.js code for performance. Covers Vercel Engineering patterns — components, data fetching, bundle optimization, server components. Critical for any Next.js performance work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Vercel React Best Practices
|
|
7
|
+
|
|
8
|
+
## When to Use
|
|
9
|
+
|
|
10
|
+
- Applying performance guidelines to React/Next.js components or pages.
|
|
11
|
+
|
|
12
|
+
## When NOT to Use
|
|
13
|
+
|
|
14
|
+
- Non-React codebases or UI-free/backend-only changes.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## When to Apply
|
|
18
|
+
|
|
19
|
+
Reference these guidelines when:
|
|
20
|
+
|
|
21
|
+
- Writing new React components or Next.js pages
|
|
22
|
+
- Implementing data fetching (client or server-side)
|
|
23
|
+
- Reviewing code for performance issues
|
|
24
|
+
- Refactoring existing React/Next.js code
|
|
25
|
+
- Optimizing bundle size or load times
|
|
26
|
+
|
|
27
|
+
## Rule Categories by Priority
|
|
28
|
+
|
|
29
|
+
| Priority | Category | Impact | Prefix |
|
|
30
|
+
| -------- | ------------------------- | ----------- | ------------ |
|
|
31
|
+
| 1 | Eliminating Waterfalls | CRITICAL | `async-` |
|
|
32
|
+
| 2 | Bundle Size Optimization | CRITICAL | `bundle-` |
|
|
33
|
+
| 3 | Server-Side Performance | HIGH | `server-` |
|
|
34
|
+
| 4 | Client-Side Data Fetching | MEDIUM-HIGH | `client-` |
|
|
35
|
+
| 5 | Re-render Optimization | MEDIUM | `rerender-` |
|
|
36
|
+
| 6 | Rendering Performance | MEDIUM | `rendering-` |
|
|
37
|
+
| 7 | JavaScript Performance | LOW-MEDIUM | `js-` |
|
|
38
|
+
| 8 | Advanced Patterns | LOW | `advanced-` |
|
|
39
|
+
|
|
40
|
+
## Quick Reference
|
|
41
|
+
|
|
42
|
+
### 1. Eliminating Waterfalls (CRITICAL)
|
|
43
|
+
|
|
44
|
+
- `async-defer-await` - Move await into branches where actually used
|
|
45
|
+
- `async-parallel` - Use Promise.all() for independent operations
|
|
46
|
+
- `async-dependencies` - Use better-all for partial dependencies
|
|
47
|
+
- `async-api-routes` - Start promises early, await late in API routes
|
|
48
|
+
- `async-suspense-boundaries` - Use Suspense to stream content
|
|
49
|
+
|
|
50
|
+
### 2. Bundle Size Optimization (CRITICAL)
|
|
51
|
+
|
|
52
|
+
- `bundle-barrel-imports` - Import directly, avoid barrel files
|
|
53
|
+
- `bundle-dynamic-imports` - Use next/dynamic for heavy components
|
|
54
|
+
- `bundle-defer-third-party` - Load analytics/logging after hydration
|
|
55
|
+
- `bundle-conditional` - Load modules only when feature is activated
|
|
56
|
+
- `bundle-preload` - Preload on hover/focus for perceived speed
|
|
57
|
+
|
|
58
|
+
### 3. Server-Side Performance (HIGH)
|
|
59
|
+
|
|
60
|
+
- `server-cache-react` - Use React.cache() for per-request deduplication
|
|
61
|
+
- `server-cache-lru` - Use LRU cache for cross-request caching
|
|
62
|
+
- `server-serialization` - Minimize data passed to client components
|
|
63
|
+
- `server-parallel-fetching` - Restructure components to parallelize fetches
|
|
64
|
+
- `server-after-nonblocking` - Use after() for non-blocking operations
|
|
65
|
+
|
|
66
|
+
### 4. Client-Side Data Fetching (MEDIUM-HIGH)
|
|
67
|
+
|
|
68
|
+
- `client-swr-dedup` - Use SWR for automatic request deduplication
|
|
69
|
+
- `client-event-listeners` - Deduplicate global event listeners
|
|
70
|
+
|
|
71
|
+
### 5. Re-render Optimization (MEDIUM)
|
|
72
|
+
|
|
73
|
+
- `rerender-defer-reads` - Don't subscribe to state only used in callbacks
|
|
74
|
+
- `rerender-memo` - Extract expensive work into memoized components
|
|
75
|
+
- `rerender-dependencies` - Use primitive dependencies in effects
|
|
76
|
+
- `rerender-derived-state` - Subscribe to derived booleans, not raw values
|
|
77
|
+
- `rerender-functional-setstate` - Use functional setState for stable callbacks
|
|
78
|
+
- `rerender-lazy-state-init` - Pass function to useState for expensive values
|
|
79
|
+
- `rerender-transitions` - Use startTransition for non-urgent updates
|
|
80
|
+
|
|
81
|
+
### 6. Rendering Performance (MEDIUM)
|
|
82
|
+
|
|
83
|
+
- `rendering-animate-svg-wrapper` - Animate div wrapper, not SVG element
|
|
84
|
+
- `rendering-content-visibility` - Use content-visibility for long lists
|
|
85
|
+
- `rendering-hoist-jsx` - Extract static JSX outside components
|
|
86
|
+
- `rendering-svg-precision` - Reduce SVG coordinate precision
|
|
87
|
+
- `rendering-hydration-no-flicker` - Use inline script for client-only data
|
|
88
|
+
- `rendering-activity` - Use Activity component for show/hide
|
|
89
|
+
- `rendering-conditional-render` - Use ternary, not && for conditionals
|
|
90
|
+
|
|
91
|
+
### 7. JavaScript Performance (LOW-MEDIUM)
|
|
92
|
+
|
|
93
|
+
- `js-batch-dom-css` - Group CSS changes via classes or cssText
|
|
94
|
+
- `js-index-maps` - Build Map for repeated lookups
|
|
95
|
+
- `js-cache-property-access` - Cache object properties in loops
|
|
96
|
+
- `js-cache-function-results` - Cache function results in module-level Map
|
|
97
|
+
- `js-cache-storage` - Cache localStorage/sessionStorage reads
|
|
98
|
+
- `js-combine-iterations` - Combine multiple filter/map into one loop
|
|
99
|
+
- `js-length-check-first` - Check array length before expensive comparison
|
|
100
|
+
- `js-early-exit` - Return early from functions
|
|
101
|
+
- `js-hoist-regexp` - Hoist RegExp creation outside loops
|
|
102
|
+
- `js-min-max-loop` - Use loop for min/max instead of sort
|
|
103
|
+
- `js-set-map-lookups` - Use Set/Map for O(1) lookups
|
|
104
|
+
- `js-tosorted-immutable` - Use toSorted() for immutability
|
|
105
|
+
|
|
106
|
+
### 8. Advanced Patterns (LOW)
|
|
107
|
+
|
|
108
|
+
- `advanced-event-handler-refs` - Store event handlers in refs
|
|
109
|
+
- `advanced-use-latest` - useLatest for stable callback refs
|
|
110
|
+
|
|
111
|
+
## How to Use
|
|
112
|
+
|
|
113
|
+
Read individual rule files for detailed explanations and code examples:
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
rules/async-parallel.md
|
|
117
|
+
rules/bundle-barrel-imports.md
|
|
118
|
+
rules/_sections.md
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Each rule file contains:
|
|
122
|
+
|
|
123
|
+
- Brief explanation of why it matters
|
|
124
|
+
- Incorrect code example with explanation
|
|
125
|
+
- Correct code example with explanation
|
|
126
|
+
- Additional context and references
|
|
127
|
+
|
|
128
|
+
## Full Compiled Document
|
|
129
|
+
|
|
130
|
+
For the complete guide with all rules expanded: `AGENTS.md`
|
|
131
|
+
|
|
132
|
+
## Common Rationalizations
|
|
133
|
+
|
|
134
|
+
| Rationalization | Reality |
|
|
135
|
+
|---|---|
|
|
136
|
+
| "This is straightforward, I don't need the full process" | Simple tasks mask hidden complexity. The process catches what "straightforward" misses. |
|
|
137
|
+
| "I'll reference the docs instead of loading the skill" | Docs describe what. The skill describes how. Both are needed for reliable execution. |
|
|
138
|
+
| "I've used this before, I know the patterns" | Patterns evolve. The skill captures current best practices, not remembered ones. |
|
|
139
|
+
| "The skill's steps add overhead" | The overhead is minutes. The rework from skipping them is hours. |
|
|
140
|
+
|
|
141
|
+
## Red Flags
|
|
142
|
+
|
|
143
|
+
- Skill's process steps being skipped without explicit justification
|
|
144
|
+
- Output that doesn't match the skill's expected quality standards
|
|
145
|
+
- No evidence of verification before claiming completion
|
|
146
|
+
- The same shortcut being taken repeatedly (pattern of avoidance)
|
|
147
|
+
|
|
148
|
+
## Verification
|
|
149
|
+
|
|
150
|
+
After completing work with this skill:
|
|
151
|
+
|
|
152
|
+
- [ ] All relevant tests pass
|
|
153
|
+
- [ ] Build succeeds with no new warnings
|
|
154
|
+
- [ ] The skill's process steps were followed in order
|
|
155
|
+
- [ ] No skipped steps without explicit justification
|
|
156
|
+
- [ ] Evidence of completion is documented (test output, screenshots, logs)
|