memory-journal-mcp 7.7.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -56
- package/dist/chunk-6OHRCNYW.js +3231 -0
- package/dist/chunk-JFMITANR.js +5168 -0
- package/dist/{chunk-QCQPAF4I.js → chunk-MWNLAEHR.js} +301 -4321
- package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
- package/dist/cli.js +21 -3
- package/dist/index.d.ts +16 -13
- package/dist/index.js +4 -2
- package/dist/resources-IJVKDFGS.js +2 -0
- package/dist/tools-44DGXE3V.js +2 -0
- package/dist/worker-script.js +201 -20
- package/package.json +7 -4
- package/skills/README.md +62 -25
- package/skills/adversarial-performance/SKILL.md +139 -0
- package/skills/adversarial-performance/references/audit-categories.md +462 -0
- package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
- package/skills/adversarial-performance/references/copilot-usage.md +16 -0
- package/skills/adversarial-performance/references/feedback-loop.md +177 -0
- package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
- package/skills/adversarial-planner/SKILL.md +23 -54
- package/skills/adversarial-planner/references/copilot-integration.md +25 -40
- package/skills/adversarial-planner/references/copilot-usage.md +16 -0
- package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
- package/skills/adversarial-security/SKILL.md +149 -0
- package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
- package/skills/adversarial-security/references/audit-categories.md +723 -0
- package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
- package/skills/adversarial-security/references/copilot-usage.md +16 -0
- package/skills/adversarial-security/references/feedback-loop.md +206 -0
- package/skills/adversarial-security/references/journal-opt-out.md +7 -0
- package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
- package/skills/adversarial-skill-audit/SKILL.md +118 -0
- package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
- package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
- package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
- package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
- package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
- package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
- package/skills/adversarial-workflow-audit/SKILL.md +82 -0
- package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
- package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
- package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
- package/skills/agents-sdk/SKILL.md +220 -0
- package/skills/agents-sdk/references/callable.md +92 -0
- package/skills/agents-sdk/references/codemode.md +209 -0
- package/skills/agents-sdk/references/email.md +144 -0
- package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
- package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
- package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
- package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
- package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
- package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
- package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
- package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
- package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
- package/skills/agents-sdk/references/mcp.md +157 -0
- package/skills/agents-sdk/references/state-scheduling.md +164 -0
- package/skills/agents-sdk/references/streaming-chat.md +168 -0
- package/skills/agents-sdk/references/workflows.md +136 -0
- package/skills/auth-identity/SKILL.md +48 -0
- package/skills/autonomous-dev/SKILL.md +46 -23
- package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
- package/skills/aws/SKILL.md +39 -0
- package/skills/azure/SKILL.md +38 -0
- package/skills/bin/sync.js +7 -1
- package/skills/biome/SKILL.md +59 -0
- package/skills/bun/SKILL.md +8 -2
- package/skills/cloudflare/SKILL.md +37 -0
- package/skills/cloudflare/references/agents-sdk/README.md +95 -0
- package/skills/cloudflare/references/agents-sdk/api.md +195 -0
- package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
- package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
- package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
- package/skills/cloudflare/references/ai-gateway/README.md +176 -0
- package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
- package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
- package/skills/cloudflare/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
- package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
- package/skills/cloudflare/references/ai-search/README.md +145 -0
- package/skills/cloudflare/references/ai-search/api.md +87 -0
- package/skills/cloudflare/references/ai-search/configuration.md +91 -0
- package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
- package/skills/cloudflare/references/ai-search/patterns.md +87 -0
- package/skills/cloudflare/references/analytics-engine/README.md +96 -0
- package/skills/cloudflare/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
- package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
- package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare/references/api/README.md +66 -0
- package/skills/cloudflare/references/api/api.md +205 -0
- package/skills/cloudflare/references/api/configuration.md +158 -0
- package/skills/cloudflare/references/api/gotchas.md +231 -0
- package/skills/cloudflare/references/api/patterns.md +208 -0
- package/skills/cloudflare/references/api-shield/README.md +44 -0
- package/skills/cloudflare/references/api-shield/api.md +153 -0
- package/skills/cloudflare/references/api-shield/configuration.md +210 -0
- package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
- package/skills/cloudflare/references/api-shield/patterns.md +185 -0
- package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
- package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
- package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
- package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
- package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
- package/skills/cloudflare/references/bindings/README.md +127 -0
- package/skills/cloudflare/references/bindings/api.md +214 -0
- package/skills/cloudflare/references/bindings/configuration.md +200 -0
- package/skills/cloudflare/references/bindings/gotchas.md +210 -0
- package/skills/cloudflare/references/bindings/patterns.md +205 -0
- package/skills/cloudflare/references/bot-management/README.md +95 -0
- package/skills/cloudflare/references/bot-management/api.md +175 -0
- package/skills/cloudflare/references/bot-management/configuration.md +175 -0
- package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
- package/skills/cloudflare/references/bot-management/patterns.md +181 -0
- package/skills/cloudflare/references/browser-rendering/README.md +84 -0
- package/skills/cloudflare/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
- package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
- package/skills/cloudflare/references/c3/README.md +111 -0
- package/skills/cloudflare/references/c3/api.md +71 -0
- package/skills/cloudflare/references/c3/configuration.md +85 -0
- package/skills/cloudflare/references/c3/gotchas.md +97 -0
- package/skills/cloudflare/references/c3/patterns.md +84 -0
- package/skills/cloudflare/references/cache-reserve/README.md +150 -0
- package/skills/cloudflare/references/cache-reserve/api.md +184 -0
- package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
- package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
- package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare/references/containers/README.md +87 -0
- package/skills/cloudflare/references/containers/api.md +197 -0
- package/skills/cloudflare/references/containers/configuration.md +191 -0
- package/skills/cloudflare/references/containers/gotchas.md +182 -0
- package/skills/cloudflare/references/containers/patterns.md +204 -0
- package/skills/cloudflare/references/cron-triggers/README.md +101 -0
- package/skills/cloudflare/references/cron-triggers/api.md +224 -0
- package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
- package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
- package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
- package/skills/cloudflare/references/d1/README.md +137 -0
- package/skills/cloudflare/references/d1/api.md +213 -0
- package/skills/cloudflare/references/d1/configuration.md +198 -0
- package/skills/cloudflare/references/d1/gotchas.md +98 -0
- package/skills/cloudflare/references/d1/patterns.md +240 -0
- package/skills/cloudflare/references/ddos/README.md +42 -0
- package/skills/cloudflare/references/ddos/api.md +158 -0
- package/skills/cloudflare/references/ddos/configuration.md +94 -0
- package/skills/cloudflare/references/ddos/gotchas.md +114 -0
- package/skills/cloudflare/references/ddos/patterns.md +220 -0
- package/skills/cloudflare/references/decision-trees.md +95 -0
- package/skills/cloudflare/references/do-storage/README.md +79 -0
- package/skills/cloudflare/references/do-storage/api.md +107 -0
- package/skills/cloudflare/references/do-storage/configuration.md +114 -0
- package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
- package/skills/cloudflare/references/do-storage/patterns.md +210 -0
- package/skills/cloudflare/references/do-storage/testing.md +186 -0
- package/skills/cloudflare/references/durable-objects/README.md +194 -0
- package/skills/cloudflare/references/durable-objects/api.md +205 -0
- package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
- package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
- package/skills/cloudflare/references/email-routing/README.md +89 -0
- package/skills/cloudflare/references/email-routing/api.md +192 -0
- package/skills/cloudflare/references/email-routing/configuration.md +187 -0
- package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
- package/skills/cloudflare/references/email-routing/patterns.md +241 -0
- package/skills/cloudflare/references/email-workers/README.md +153 -0
- package/skills/cloudflare/references/email-workers/api.md +227 -0
- package/skills/cloudflare/references/email-workers/configuration.md +115 -0
- package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
- package/skills/cloudflare/references/email-workers/patterns.md +108 -0
- package/skills/cloudflare/references/graphql-api/README.md +147 -0
- package/skills/cloudflare/references/graphql-api/api.md +175 -0
- package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
- package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
- package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
- package/skills/cloudflare/references/hyperdrive/README.md +84 -0
- package/skills/cloudflare/references/hyperdrive/api.md +149 -0
- package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
- package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
- package/skills/cloudflare/references/images/README.md +65 -0
- package/skills/cloudflare/references/images/api.md +101 -0
- package/skills/cloudflare/references/images/configuration.md +206 -0
- package/skills/cloudflare/references/images/gotchas.md +106 -0
- package/skills/cloudflare/references/images/patterns.md +126 -0
- package/skills/cloudflare/references/kv/README.md +90 -0
- package/skills/cloudflare/references/kv/api.md +163 -0
- package/skills/cloudflare/references/kv/configuration.md +148 -0
- package/skills/cloudflare/references/kv/gotchas.md +133 -0
- package/skills/cloudflare/references/kv/patterns.md +195 -0
- package/skills/cloudflare/references/miniflare/README.md +113 -0
- package/skills/cloudflare/references/miniflare/api.md +204 -0
- package/skills/cloudflare/references/miniflare/configuration.md +174 -0
- package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
- package/skills/cloudflare/references/miniflare/patterns.md +187 -0
- package/skills/cloudflare/references/network-interconnect/README.md +104 -0
- package/skills/cloudflare/references/network-interconnect/api.md +220 -0
- package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
- package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
- package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
- package/skills/cloudflare/references/observability/README.md +93 -0
- package/skills/cloudflare/references/observability/api.md +168 -0
- package/skills/cloudflare/references/observability/configuration.md +178 -0
- package/skills/cloudflare/references/observability/gotchas.md +125 -0
- package/skills/cloudflare/references/observability/patterns.md +105 -0
- package/skills/cloudflare/references/pages/README.md +92 -0
- package/skills/cloudflare/references/pages/api.md +205 -0
- package/skills/cloudflare/references/pages/configuration.md +216 -0
- package/skills/cloudflare/references/pages/gotchas.md +218 -0
- package/skills/cloudflare/references/pages/patterns.md +215 -0
- package/skills/cloudflare/references/pages-functions/README.md +104 -0
- package/skills/cloudflare/references/pages-functions/api.md +159 -0
- package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
- package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
- package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
- package/skills/cloudflare/references/pipelines/README.md +109 -0
- package/skills/cloudflare/references/pipelines/api.md +214 -0
- package/skills/cloudflare/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
- package/skills/cloudflare/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare/references/product-index.md +112 -0
- package/skills/cloudflare/references/pulumi/README.md +113 -0
- package/skills/cloudflare/references/pulumi/api.md +230 -0
- package/skills/cloudflare/references/pulumi/configuration.md +213 -0
- package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
- package/skills/cloudflare/references/pulumi/patterns.md +260 -0
- package/skills/cloudflare/references/queues/README.md +99 -0
- package/skills/cloudflare/references/queues/api.md +211 -0
- package/skills/cloudflare/references/queues/configuration.md +151 -0
- package/skills/cloudflare/references/queues/gotchas.md +210 -0
- package/skills/cloudflare/references/queues/patterns.md +220 -0
- package/skills/cloudflare/references/r2/README.md +97 -0
- package/skills/cloudflare/references/r2/api.md +235 -0
- package/skills/cloudflare/references/r2/configuration.md +176 -0
- package/skills/cloudflare/references/r2/gotchas.md +190 -0
- package/skills/cloudflare/references/r2/patterns.md +203 -0
- package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
- package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
- package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare/references/r2-sql/README.md +138 -0
- package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
- package/skills/cloudflare/references/r2-sql/api.md +159 -0
- package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
- package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
- package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
- package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
- package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
- package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
- package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
- package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
- package/skills/cloudflare/references/realtimekit/README.md +118 -0
- package/skills/cloudflare/references/realtimekit/api.md +234 -0
- package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
- package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
- package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
- package/skills/cloudflare/references/sandbox/README.md +104 -0
- package/skills/cloudflare/references/sandbox/api.md +200 -0
- package/skills/cloudflare/references/sandbox/configuration.md +154 -0
- package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
- package/skills/cloudflare/references/sandbox/patterns.md +195 -0
- package/skills/cloudflare/references/secrets-store/README.md +77 -0
- package/skills/cloudflare/references/secrets-store/api.md +199 -0
- package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
- package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
- package/skills/cloudflare/references/smart-placement/README.md +143 -0
- package/skills/cloudflare/references/smart-placement/api.md +192 -0
- package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
- package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
- package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
- package/skills/cloudflare/references/snippets/README.md +74 -0
- package/skills/cloudflare/references/snippets/api.md +214 -0
- package/skills/cloudflare/references/snippets/configuration.md +239 -0
- package/skills/cloudflare/references/snippets/gotchas.md +104 -0
- package/skills/cloudflare/references/snippets/patterns.md +135 -0
- package/skills/cloudflare/references/spectrum/README.md +52 -0
- package/skills/cloudflare/references/spectrum/api.md +184 -0
- package/skills/cloudflare/references/spectrum/configuration.md +203 -0
- package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
- package/skills/cloudflare/references/spectrum/patterns.md +206 -0
- package/skills/cloudflare/references/static-assets/README.md +65 -0
- package/skills/cloudflare/references/static-assets/api.md +201 -0
- package/skills/cloudflare/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
- package/skills/cloudflare/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare/references/stream/README.md +123 -0
- package/skills/cloudflare/references/stream/api-live.md +202 -0
- package/skills/cloudflare/references/stream/api.md +206 -0
- package/skills/cloudflare/references/stream/configuration.md +151 -0
- package/skills/cloudflare/references/stream/gotchas.md +139 -0
- package/skills/cloudflare/references/stream/patterns.md +217 -0
- package/skills/cloudflare/references/tail-workers/README.md +92 -0
- package/skills/cloudflare/references/tail-workers/api.md +203 -0
- package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
- package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
- package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
- package/skills/cloudflare/references/terraform/README.md +100 -0
- package/skills/cloudflare/references/terraform/api.md +178 -0
- package/skills/cloudflare/references/terraform/configuration.md +197 -0
- package/skills/cloudflare/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare/references/terraform/patterns.md +174 -0
- package/skills/cloudflare/references/tunnel/README.md +137 -0
- package/skills/cloudflare/references/tunnel/api.md +205 -0
- package/skills/cloudflare/references/tunnel/configuration.md +163 -0
- package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
- package/skills/cloudflare/references/tunnel/networking.md +174 -0
- package/skills/cloudflare/references/tunnel/patterns.md +199 -0
- package/skills/cloudflare/references/turn/README.md +86 -0
- package/skills/cloudflare/references/turn/api.md +236 -0
- package/skills/cloudflare/references/turn/configuration.md +181 -0
- package/skills/cloudflare/references/turn/gotchas.md +236 -0
- package/skills/cloudflare/references/turn/patterns.md +228 -0
- package/skills/cloudflare/references/turnstile/README.md +102 -0
- package/skills/cloudflare/references/turnstile/api.md +253 -0
- package/skills/cloudflare/references/turnstile/configuration.md +242 -0
- package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
- package/skills/cloudflare/references/turnstile/patterns.md +195 -0
- package/skills/cloudflare/references/vectorize/README.md +133 -0
- package/skills/cloudflare/references/vectorize/api.md +89 -0
- package/skills/cloudflare/references/vectorize/configuration.md +91 -0
- package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
- package/skills/cloudflare/references/vectorize/patterns.md +92 -0
- package/skills/cloudflare/references/waf/README.md +125 -0
- package/skills/cloudflare/references/waf/api.md +203 -0
- package/skills/cloudflare/references/waf/configuration.md +215 -0
- package/skills/cloudflare/references/waf/gotchas.md +208 -0
- package/skills/cloudflare/references/waf/patterns.md +236 -0
- package/skills/cloudflare/references/web-analytics/README.md +149 -0
- package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
- package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
- package/skills/cloudflare/references/web-analytics/integration.md +63 -0
- package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
- package/skills/cloudflare/references/workerd/README.md +85 -0
- package/skills/cloudflare/references/workerd/api.md +219 -0
- package/skills/cloudflare/references/workerd/configuration.md +200 -0
- package/skills/cloudflare/references/workerd/gotchas.md +151 -0
- package/skills/cloudflare/references/workerd/patterns.md +205 -0
- package/skills/cloudflare/references/workers/README.md +110 -0
- package/skills/cloudflare/references/workers/api.md +197 -0
- package/skills/cloudflare/references/workers/configuration.md +184 -0
- package/skills/cloudflare/references/workers/frameworks.md +200 -0
- package/skills/cloudflare/references/workers/gotchas.md +145 -0
- package/skills/cloudflare/references/workers/patterns.md +220 -0
- package/skills/cloudflare/references/workers-ai/README.md +206 -0
- package/skills/cloudflare/references/workers-ai/api.md +115 -0
- package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
- package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
- package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
- package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
- package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
- package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
- package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
- package/skills/cloudflare/references/workers-playground/README.md +131 -0
- package/skills/cloudflare/references/workers-playground/api.md +101 -0
- package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
- package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
- package/skills/cloudflare/references/workers-vpc/README.md +130 -0
- package/skills/cloudflare/references/workers-vpc/api.md +196 -0
- package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
- package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
- package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
- package/skills/cloudflare/references/workflows/README.md +72 -0
- package/skills/cloudflare/references/workflows/api.md +237 -0
- package/skills/cloudflare/references/workflows/configuration.md +158 -0
- package/skills/cloudflare/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare/references/workflows/patterns.md +245 -0
- package/skills/cloudflare/references/wrangler/README.md +143 -0
- package/skills/cloudflare/references/wrangler/api.md +188 -0
- package/skills/cloudflare/references/wrangler/configuration.md +198 -0
- package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
- package/skills/cloudflare/references/wrangler/patterns.md +211 -0
- package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
- package/skills/cloudflare/references/zaraz/README.md +114 -0
- package/skills/cloudflare/references/zaraz/api.md +118 -0
- package/skills/cloudflare/references/zaraz/configuration.md +94 -0
- package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
- package/skills/cloudflare/references/zaraz/patterns.md +77 -0
- package/skills/docker/SKILL.md +7 -101
- package/skills/docker/references/advanced-examples.md +71 -0
- package/skills/docker/references/templates.md +34 -0
- package/skills/docs-marketer/SKILL.md +178 -0
- package/skills/docs-marketer/references/audit-categories.md +328 -0
- package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
- package/skills/docs-marketer/references/copilot-usage.md +16 -0
- package/skills/docs-marketer/references/feedback-loop.md +155 -0
- package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
- package/skills/drizzle-orm/SKILL.md +82 -0
- package/skills/durable-objects/SKILL.md +167 -0
- package/skills/durable-objects/references/advanced_features.md +29 -0
- package/skills/durable-objects/references/rules.md +300 -0
- package/skills/durable-objects/references/testing.md +261 -0
- package/skills/durable-objects/references/workers.md +336 -0
- package/skills/gcp/SKILL.md +37 -0
- package/skills/github-actions/SKILL.md +5 -58
- package/skills/github-actions/references/templates.md +65 -0
- package/skills/github-commander/SKILL.md +13 -21
- package/skills/github-commander/workflows/copilot-audit.md +12 -12
- package/skills/github-copilot-cli/SKILL.md +21 -26
- package/skills/github-repo-setup/SKILL.md +136 -0
- package/skills/github-repo-setup/references/community-standards.md +136 -0
- package/skills/github-repo-setup/references/github-automation.md +490 -0
- package/skills/github-repo-setup/references/inline-templates.md +205 -0
- package/skills/github-repo-setup/references/project-config.md +320 -0
- package/skills/gitlab/SKILL.md +7 -2
- package/skills/gitlab/package-lock.json +389 -389
- package/skills/golang/SKILL.md +8 -1
- package/skills/graphql/SKILL.md +30 -0
- package/skills/hono/SKILL.md +82 -0
- package/skills/journal-optimizer/SKILL.md +206 -0
- package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
- package/skills/llm-app-engineering/SKILL.md +18 -0
- package/skills/monorepo/SKILL.md +56 -0
- package/skills/multi-agent-orchestration/SKILL.md +14 -0
- package/skills/mysql/SKILL.md +6 -2
- package/skills/next-best-practices/SKILL.md +86 -0
- package/skills/next-best-practices/references/cache-components-examples.md +234 -0
- package/skills/next-best-practices/references/cache-components.md +210 -0
- package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
- package/skills/next-best-practices/references/upgrade.md +43 -0
- package/skills/next-cache-components/SKILL.md +441 -0
- package/skills/next-upgrade/SKILL.md +43 -0
- package/skills/next-upgrade/references/decision-tree.md +33 -0
- package/skills/nodejs/SKILL.md +46 -0
- package/skills/opentelemetry/SKILL.md +62 -0
- package/skills/package.json +39 -4
- package/skills/playwright-standard/SKILL.md +6 -11
- package/skills/playwright-standard/references/locators.md +7 -0
- package/skills/postgres/SKILL.md +6 -1
- package/skills/python/SKILL.md +8 -70
- package/skills/python/references/advanced-patterns.md +37 -0
- package/skills/python/references/config-templates.md +48 -0
- package/skills/rag-pipelines/SKILL.md +14 -0
- package/skills/redis/SKILL.md +31 -0
- package/skills/render/SKILL.md +35 -0
- package/skills/rust/SKILL.md +15 -25
- package/skills/rust/references/borrow-checker.md +13 -0
- package/skills/rust/references/ecosystem.md +11 -0
- package/skills/sandbox-sdk/SKILL.md +186 -0
- package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
- package/skills/sandbox-sdk/references/examples.md +52 -0
- package/skills/shadcn-ui/SKILL.md +22 -57
- package/skills/skill-builder/SKILL.md +23 -424
- package/skills/skill-builder/references/tutorial.md +457 -0
- package/skills/sqlite/SKILL.md +16 -5
- package/skills/table.md +59 -0
- package/skills/tailwind-css/SKILL.md +11 -60
- package/skills/tailwind-css/references/component-patterns.md +52 -0
- package/skills/trpc/SKILL.md +56 -0
- package/skills/typescript/SKILL.md +30 -433
- package/skills/typescript/references/tutorial.md +453 -0
- package/skills/vercel-ai-sdk/SKILL.md +48 -0
- package/skills/vitest-standard/SKILL.md +5 -11
- package/skills/vitest-standard/references/assertions.md +11 -0
- package/skills/web-perf/SKILL.md +207 -0
- package/skills/workers-best-practices/SKILL.md +120 -0
- package/skills/workers-best-practices/references/anti-patterns.md +18 -0
- package/skills/workers-best-practices/references/review.md +174 -0
- package/skills/workers-best-practices/references/rules.md +485 -0
- package/skills/wrangler/SKILL.md +43 -0
- package/skills/wrangler/references/cli-commands.md +861 -0
- package/skills/zod/SKILL.md +48 -0
- package/dist/tools-P4VGG4FH.js +0 -1
- package/skills/react-best-practices/AGENTS.md +0 -2883
- package/skills/react-best-practices/SKILL.md +0 -138
- /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# Multi-Pass Docs Marketing Protocol
|
|
2
|
+
|
|
3
|
+
Detailed reference for the documentation marketability audit pipeline. This
|
|
4
|
+
document defines the full review dimensions, scoring system, and output
|
|
5
|
+
templates for both standard (single-pass) and adversarial (dual-agent) modes.
|
|
6
|
+
|
|
7
|
+
## Phase 0 — Research (Agent A: The Marketer)
|
|
8
|
+
|
|
9
|
+
Before starting the audit, gather context:
|
|
10
|
+
|
|
11
|
+
0. **Target repository resolution** — determine which repository to audit:
|
|
12
|
+
- If the user specified a repository, resolve its absolute path via
|
|
13
|
+
workspace roots or `PROJECT_REGISTRY`.
|
|
14
|
+
- If the user invoked the skill without specifying a target (e.g., via a
|
|
15
|
+
slash command or "run the docs audit"), follow the resolution logic in
|
|
16
|
+
`SKILL.md § Target Resolution`: check workspace context, infer from
|
|
17
|
+
conversation, or ask the user.
|
|
18
|
+
- Confirm the target path in your output before proceeding (e.g.,
|
|
19
|
+
"Auditing: `C:\Users\chris\Desktop\memory-journal-mcp`").
|
|
20
|
+
- `Set-Location` (or `cd`) to the target repository for all subsequent
|
|
21
|
+
file reads and Copilot invocations.
|
|
22
|
+
1. **Documentation surface discovery** — identify all doc targets:
|
|
23
|
+
- `README.md` (primary)
|
|
24
|
+
- `DOCKER_README.md` (Docker Hub — 25,000 char limit)
|
|
25
|
+
- Wiki clone (`.wiki/` directory — check `<repo>.wiki/` sibling path)
|
|
26
|
+
- npm package README (may differ from repo README)
|
|
27
|
+
- MCP Registry listing (`server.json`)
|
|
28
|
+
- GitHub repository description and topics
|
|
29
|
+
2. **Source code capabilities** — enumerate features the project actually has:
|
|
30
|
+
- Tool groups and tool counts (from `tool-filter.ts` or `tool-constants.ts`)
|
|
31
|
+
- Environment variables (from CLI flags and `.env.example`)
|
|
32
|
+
- Resources, prompts, transport modes
|
|
33
|
+
- Security features (OAuth, rate limiting, CORS)
|
|
34
|
+
- Unique differentiators (Code Mode, briefing system, etc.)
|
|
35
|
+
3. **Prior audits** — search the journal:
|
|
36
|
+
```
|
|
37
|
+
search_entries({
|
|
38
|
+
query: "docs marketing audit",
|
|
39
|
+
entry_type: "docs_marketing_profile",
|
|
40
|
+
tags: ["docs-marketer"]
|
|
41
|
+
})
|
|
42
|
+
```
|
|
43
|
+
4. **Competitor landscape** — if the project has an MCP Registry listing,
|
|
44
|
+
briefly research similar projects to understand competitive positioning.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Phase 1 — Document Surface Inventory (Agent A: The Marketer)
|
|
49
|
+
|
|
50
|
+
### Inputs
|
|
51
|
+
|
|
52
|
+
For each discovered documentation surface, read its full content and evaluate
|
|
53
|
+
against all 10 audit categories.
|
|
54
|
+
|
|
55
|
+
### Per-Surface Scorecard
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
### [Surface Name] (e.g., README.md)
|
|
59
|
+
|
|
60
|
+
**Size**: X lines, Y KB
|
|
61
|
+
**Last Modified**: [date if available]
|
|
62
|
+
**Platform Constraints**: [e.g., Docker Hub 25K char limit]
|
|
63
|
+
|
|
64
|
+
| Category | Score (1–5) | Notes |
|
|
65
|
+
| ------------------------------ | ----------- | ----- |
|
|
66
|
+
| 1. Feature Visibility | | |
|
|
67
|
+
| 2. First Impression | | |
|
|
68
|
+
| 3. Information Architecture | | |
|
|
69
|
+
| 4. Visual Assets | | |
|
|
70
|
+
| 5. Competitive Differentiation | | |
|
|
71
|
+
| 6. Onboarding Friction | | |
|
|
72
|
+
| 7. Platform Presence | | |
|
|
73
|
+
| 8. Cross-Document Consistency | | |
|
|
74
|
+
| 9. Tone & Voice | | |
|
|
75
|
+
| 10. SEO & Discoverability | | |
|
|
76
|
+
| **Average** | **X.X** | |
|
|
77
|
+
|
|
78
|
+
**Top Opportunity**: [Single highest-impact marketing improvement]
|
|
79
|
+
**Grade**: [A–F]
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Feature Visibility Gap Analysis
|
|
83
|
+
|
|
84
|
+
Cross-reference discovered capabilities against documentation mentions:
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
### Feature Visibility Gaps
|
|
88
|
+
|
|
89
|
+
| Capability | In Source? | In README? | In Wiki? | In Docker? | Marketing Status |
|
|
90
|
+
| ----------------------------- | ---------- | ---------- | -------- | ---------- | ------------------------ |
|
|
91
|
+
| Code Mode (90% token savings) | ✅ | ✅ | ✅ | ❌ | Under-marketed in Docker |
|
|
92
|
+
| Hush Protocol flags | ✅ | ✅ | ⚠️ Brief | ❌ | Under-marketed |
|
|
93
|
+
| OAuth 2.1 (RFC 9728) | ✅ | ✅ | ❌ | ❌ | Missing from Wiki/Docker |
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Scoring Guide
|
|
97
|
+
|
|
98
|
+
| Score | Meaning |
|
|
99
|
+
| ----- | ---------------------------------------------------------------- |
|
|
100
|
+
| 5 | Excellent — compelling, well-structured, clearly differentiating |
|
|
101
|
+
| 4 | Good — solid coverage, minor marketing opportunities missed |
|
|
102
|
+
| 3 | Acceptable — features documented but not effectively marketed |
|
|
103
|
+
| 2 | Poor — significant capabilities buried or poorly presented |
|
|
104
|
+
| 1 | Failing — misleading, empty, or actively harmful to adoption |
|
|
105
|
+
|
|
106
|
+
### Portfolio Overview
|
|
107
|
+
|
|
108
|
+
After scoring all surfaces individually, produce a portfolio-level overview:
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
## Documentation Portfolio Overview
|
|
112
|
+
|
|
113
|
+
**Surfaces Audited**: N
|
|
114
|
+
**Average Marketing Score**: X.X / 5.0
|
|
115
|
+
**Portfolio Grade**: [A–F]
|
|
116
|
+
|
|
117
|
+
### Score Distribution
|
|
118
|
+
|
|
119
|
+
| Grade | Surfaces |
|
|
120
|
+
| ----------- | ---------------- |
|
|
121
|
+
| A (4.5–5.0) | README.md |
|
|
122
|
+
| B (3.5–4.4) | Wiki Home |
|
|
123
|
+
| C (2.5–3.4) | DOCKER_README.md |
|
|
124
|
+
| D (1.5–2.4) | — |
|
|
125
|
+
| F (1.0–1.4) | — |
|
|
126
|
+
|
|
127
|
+
### Cross-Surface Properties
|
|
128
|
+
|
|
129
|
+
- **Feature gaps**: [capabilities missing from specific surfaces]
|
|
130
|
+
- **Consistency issues**: [conflicting counts, outdated version numbers]
|
|
131
|
+
- **Platform violations**: [Docker Hub char limit, npm README truncation]
|
|
132
|
+
- **Strongest surface**: [which document best markets the project]
|
|
133
|
+
- **Weakest surface**: [which needs the most marketing improvement]
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Journal (Phase 1)
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
create_entry({
|
|
140
|
+
content: "<full inventory with all scorecards + gap analysis>",
|
|
141
|
+
entry_type: "docs_marketing_profile",
|
|
142
|
+
tags: ["docs-marketer", "profile"],
|
|
143
|
+
project_number: <project number>
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Standard Mode: Skip to Phase 3
|
|
148
|
+
|
|
149
|
+
In **standard mode** (`AUDIT_DEPTH: standard`), skip Phase 2 entirely and
|
|
150
|
+
proceed directly to Phase 3 (Improvement Plan) using the Phase 1 findings.
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Phase 2 — Skeptical Reader Review (Agent B: The First-Time Evaluator)
|
|
155
|
+
|
|
156
|
+
> **Only runs in adversarial mode** (`AUDIT_DEPTH: adversarial`).
|
|
157
|
+
|
|
158
|
+
Switch mental models. You are now a developer who has never seen this project
|
|
159
|
+
before. You have 5 minutes to decide whether to adopt it or move on. Your job
|
|
160
|
+
is to find where the documentation fails to sell the project.
|
|
161
|
+
|
|
162
|
+
### Review Dimensions
|
|
163
|
+
|
|
164
|
+
Score each dimension on a 1–5 scale:
|
|
165
|
+
|
|
166
|
+
| Dimension | Weight | Focus Areas |
|
|
167
|
+
| ------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
|
|
168
|
+
| **30-Second Test** | 4 | Can someone understand the value proposition in 30 seconds of scanning? Is the tagline clear? Does the badge row convey trust? |
|
|
169
|
+
| **Competitive Survival** | 3 | If choosing between this and an alternative, what would make you leave? What claims feel weak? |
|
|
170
|
+
| **Onboarding Friction** | 3 | Follow the Quick Start literally — where do you get stuck, confused, or need to context-switch? |
|
|
171
|
+
| **Feature Discovery** | 2 | What powerful capabilities are buried? What would surprise a user who only read the first 3 sections? |
|
|
172
|
+
| **Trust Signals** | 2 | Test coverage badges, security claims, maintenance signals — do they feel authentic? |
|
|
173
|
+
|
|
174
|
+
### The 30-Second Test
|
|
175
|
+
|
|
176
|
+
Read only the first screen (~40 lines) of the README. Answer:
|
|
177
|
+
|
|
178
|
+
1. What does this project do?
|
|
179
|
+
2. Why should I use it instead of alternatives?
|
|
180
|
+
3. How do I get started?
|
|
181
|
+
|
|
182
|
+
If any answer is unclear, that's a finding.
|
|
183
|
+
|
|
184
|
+
### Competitive Evaluation
|
|
185
|
+
|
|
186
|
+
```markdown
|
|
187
|
+
### Competitive Survival Test
|
|
188
|
+
|
|
189
|
+
| Question | Answer | Score (1–5) |
|
|
190
|
+
| ------------------------------------------------------- | ------ | ----------- |
|
|
191
|
+
| Is the value prop clear in the tagline? | | |
|
|
192
|
+
| Does the feature table differentiate or just list? | | |
|
|
193
|
+
| Are comparisons to alternatives explicit or implied? | | |
|
|
194
|
+
| Would a skeptic find the claims credible? | | |
|
|
195
|
+
| Is there social proof (stars, downloads, testimonials)? | | |
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Under-Marketed Features Audit
|
|
199
|
+
|
|
200
|
+
Identify capabilities that exist in source code but are:
|
|
201
|
+
|
|
202
|
+
- **Buried**: Mentioned only deep in the README (below fold)
|
|
203
|
+
- **Understated**: Mentioned briefly without explaining impact
|
|
204
|
+
- **Missing**: Not documented at all in any surface
|
|
205
|
+
- **Poorly positioned**: Documented but framed as technical detail instead of
|
|
206
|
+
user benefit
|
|
207
|
+
|
|
208
|
+
### Oversold Features Audit
|
|
209
|
+
|
|
210
|
+
Identify claims that:
|
|
211
|
+
|
|
212
|
+
- Use superlatives without evidence ("best", "fastest", "most comprehensive")
|
|
213
|
+
- Quote metrics without context (e.g., "90% token savings" — compared to what?)
|
|
214
|
+
- Claim features that are opt-in or require significant setup as defaults
|
|
215
|
+
|
|
216
|
+
### Critique Output Format
|
|
217
|
+
|
|
218
|
+
```markdown
|
|
219
|
+
## Skeptical Reader Review — [Repository Name]
|
|
220
|
+
|
|
221
|
+
**Overall Marketing Score:** [weighted average] / 5.0
|
|
222
|
+
**Portfolio Grade:** [A–F]
|
|
223
|
+
|
|
224
|
+
### Findings
|
|
225
|
+
|
|
226
|
+
| # | Surface | Category | Severity | Finding | Recommendation |
|
|
227
|
+
| --- | ------- | ------------------ | -------- | ---------------------------------- | ----------------------------------------- |
|
|
228
|
+
| 1 | README | First Impression | High | Value prop unclear in tagline | Rewrite tagline to lead with user benefit |
|
|
229
|
+
| 2 | Docker | Feature Visibility | Critical | Missing Code Mode section entirely | Add condensed Code Mode section |
|
|
230
|
+
| 3 | Wiki | Onboarding | Medium | Quick Start assumes GitHub token | Add minimal non-GitHub path |
|
|
231
|
+
|
|
232
|
+
### Dimension Scores
|
|
233
|
+
|
|
234
|
+
| Dimension | Score | Weight | Weighted |
|
|
235
|
+
| -------------------- | ----- | ------ | -------------------- |
|
|
236
|
+
| 30-Second Test | [1–5] | 4 | [score × 4] |
|
|
237
|
+
| Competitive Survival | [1–5] | 3 | [score × 3] |
|
|
238
|
+
| Onboarding Friction | [1–5] | 3 | [score × 3] |
|
|
239
|
+
| Feature Discovery | [1–5] | 2 | [score × 2] |
|
|
240
|
+
| Trust Signals | [1–5] | 2 | [score × 2] |
|
|
241
|
+
| **Total** | | **14** | **[sum]/70 = [avg]** |
|
|
242
|
+
|
|
243
|
+
### Blocking Issues
|
|
244
|
+
|
|
245
|
+
Findings that are actively hurting adoption or creating misleading impressions.
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Journal (Phase 2)
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
create_entry({
|
|
252
|
+
content: "<full skeptical reader review>",
|
|
253
|
+
entry_type: "docs_marketing_critique",
|
|
254
|
+
tags: ["docs-marketer", "critique"],
|
|
255
|
+
project_number: <project number>
|
|
256
|
+
})
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Phase 3 — Improvement Plan (Agent A: The Marketer)
|
|
262
|
+
|
|
263
|
+
Switch back to the Marketer. Address every finding with a disposition.
|
|
264
|
+
|
|
265
|
+
### Disposition Table
|
|
266
|
+
|
|
267
|
+
| Disposition | Meaning |
|
|
268
|
+
| ----------- | ------------------------------------------------- |
|
|
269
|
+
| **Accept** | Implement the improvement |
|
|
270
|
+
| **Reject** | Finding doesn't apply or trade-off isn't worth it |
|
|
271
|
+
| **Modify** | Accept the spirit but implement differently |
|
|
272
|
+
| **Defer** | Acknowledge but defer (document why) |
|
|
273
|
+
|
|
274
|
+
### Improvement Plan Output
|
|
275
|
+
|
|
276
|
+
```markdown
|
|
277
|
+
## Improvement Plan — [Repository Name]
|
|
278
|
+
|
|
279
|
+
### Disposition Summary
|
|
280
|
+
|
|
281
|
+
| # | Surface | Finding | Disposition | Rationale |
|
|
282
|
+
| --- | ------- | ----------------- | ----------- | --------------------------------- |
|
|
283
|
+
| 1 | README | Tagline unclear | Accept | Rewrite to lead with user benefit |
|
|
284
|
+
| 2 | Docker | Missing Code Mode | Accept | Add condensed section |
|
|
285
|
+
| 3 | Wiki | Assumes GitHub | Modify | Add note instead of full rewrite |
|
|
286
|
+
|
|
287
|
+
### Priority 1 — Quick Wins (<15 minutes per fix)
|
|
288
|
+
|
|
289
|
+
| Surface | Fix | Impact |
|
|
290
|
+
| ------- | ----------------------- | ---------------- |
|
|
291
|
+
| README | Update stale badge URLs | Trust |
|
|
292
|
+
| GitHub | Add missing topics | SEO |
|
|
293
|
+
| README | Strengthen tagline | First Impression |
|
|
294
|
+
|
|
295
|
+
### Priority 2 — Structural Improvements (30–60 minutes)
|
|
296
|
+
|
|
297
|
+
| Surface | Fix | Impact |
|
|
298
|
+
| ------- | ------------------------------------------- | ------------------ |
|
|
299
|
+
| README | Reorder sections for progressive disclosure | IA |
|
|
300
|
+
| Docker | Add Code Mode summary section | Feature Visibility |
|
|
301
|
+
| Wiki | Create comparison table vs. alternatives | Differentiation |
|
|
302
|
+
|
|
303
|
+
### Priority 3 — Strategic Improvements (1–2 hours)
|
|
304
|
+
|
|
305
|
+
| Surface | Fix | Impact |
|
|
306
|
+
| ------- | -------------------------------------------------- | --------------- |
|
|
307
|
+
| README | Rewrite "What Sets Us Apart" with concrete metrics | Differentiation |
|
|
308
|
+
| Wiki | Create onboarding guide for non-GitHub users | Onboarding |
|
|
309
|
+
| All | Unify tone and voice across all surfaces | Consistency |
|
|
310
|
+
|
|
311
|
+
### Projected Marketing Improvement
|
|
312
|
+
|
|
313
|
+
| Metric | Before | After |
|
|
314
|
+
| ----------------------------- | ------ | ----- |
|
|
315
|
+
| Average marketing score | X.X | X.X |
|
|
316
|
+
| Surfaces graded A/B | N/M | N/M |
|
|
317
|
+
| Feature visibility gaps | N | N |
|
|
318
|
+
| Cross-surface inconsistencies | N | N |
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Iteration Control
|
|
322
|
+
|
|
323
|
+
Check: has `MAX_AUDIT_PASSES` been reached?
|
|
324
|
+
|
|
325
|
+
- **No** → return to Phase 2 (stress-test the improvement plan itself)
|
|
326
|
+
- **Yes** → proceed to Phase 4
|
|
327
|
+
|
|
328
|
+
### Journal (Phase 3)
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
create_entry({
|
|
332
|
+
content: "<improvement plan with dispositions>",
|
|
333
|
+
entry_type: "docs_marketing_remediation",
|
|
334
|
+
tags: ["docs-marketer", "remediation"],
|
|
335
|
+
project_number: <project number>
|
|
336
|
+
})
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Phase 4 — Copilot Validation (External)
|
|
342
|
+
|
|
343
|
+
If available, invoke Copilot CLI. See
|
|
344
|
+
[copilot-docs-prompts.md](copilot-docs-prompts.md).
|
|
345
|
+
|
|
346
|
+
If unavailable, skip gracefully.
|
|
347
|
+
|
|
348
|
+
### Journal (Phase 4)
|
|
349
|
+
|
|
350
|
+
```
|
|
351
|
+
create_entry({
|
|
352
|
+
content: "<copilot findings + final dispositions>",
|
|
353
|
+
entry_type: "docs_marketing_copilot",
|
|
354
|
+
tags: ["docs-marketer", "copilot"],
|
|
355
|
+
project_number: <project number>
|
|
356
|
+
})
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## Final Report Assembly
|
|
362
|
+
|
|
363
|
+
```markdown
|
|
364
|
+
# Documentation Marketing Audit — [Repository Name]
|
|
365
|
+
|
|
366
|
+
**Date**: [ISO date]
|
|
367
|
+
**Audit Depth**: [standard | adversarial]
|
|
368
|
+
**Surfaces Audited**: N
|
|
369
|
+
**Passes Completed**: N
|
|
370
|
+
**Copilot Validation**: [yes | skipped]
|
|
371
|
+
|
|
372
|
+
## Executive Summary
|
|
373
|
+
|
|
374
|
+
[2–3 sentences: overall marketing quality, critical gaps, top recommendation]
|
|
375
|
+
|
|
376
|
+
**Portfolio Marketing Score**: [X.X] / 5.0 — Grade [A–F]
|
|
377
|
+
|
|
378
|
+
## Surface Scoreboard
|
|
379
|
+
|
|
380
|
+
| Surface | Score | Grade | Top Opportunity |
|
|
381
|
+
| ---------------- | ----- | ----- | ----------------------------------- |
|
|
382
|
+
| README.md | 4.2 | B | Strengthen competitive positioning |
|
|
383
|
+
| DOCKER_README.md | 3.0 | C | Missing Code Mode and Hush Protocol |
|
|
384
|
+
| Wiki Home | 3.8 | B | Improve onboarding flow |
|
|
385
|
+
|
|
386
|
+
## Feature Visibility Gap Map
|
|
387
|
+
|
|
388
|
+
[From Phase 1 — capabilities vs. documentation coverage]
|
|
389
|
+
|
|
390
|
+
## Top 5 Marketing Improvements (by impact)
|
|
391
|
+
|
|
392
|
+
1. [Highest-impact improvement]
|
|
393
|
+
2. ...
|
|
394
|
+
|
|
395
|
+
## Cross-Surface Consistency Issues
|
|
396
|
+
|
|
397
|
+
[Conflicting information across surfaces]
|
|
398
|
+
|
|
399
|
+
## Full Findings (by severity)
|
|
400
|
+
|
|
401
|
+
[All findings from Phases 1–2]
|
|
402
|
+
|
|
403
|
+
## Improvement Plan
|
|
404
|
+
|
|
405
|
+
[From Phase 3 — prioritized with dispositions]
|
|
406
|
+
|
|
407
|
+
## Per-Surface Scorecards
|
|
408
|
+
|
|
409
|
+
[From Phase 1 — all individual scorecards]
|
|
410
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: drizzle-orm
|
|
3
|
+
description: |
|
|
4
|
+
Drizzle ORM best practices. Use when configuring databases, designing schemas, writing queries, or handling migrations with Drizzle ORM, particularly with Cloudflare D1 or SQLite. NOT for database setup without an explicit engine. Require engine specification (Postgres/MySQL/SQLite). Use for ORM-managed migrations.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Drizzle ORM Guidelines
|
|
8
|
+
|
|
9
|
+
This skill provides opinionated standards for using Drizzle ORM, optimized for TypeScript and edge databases like Cloudflare D1.
|
|
10
|
+
|
|
11
|
+
## 1. Core Principles
|
|
12
|
+
|
|
13
|
+
- **Single Source of Truth**: Define your database schema in TypeScript. Let Drizzle generate the SQL migrations.
|
|
14
|
+
- **Explicit Returns**: Always explicitly select the columns you need using `.select({ id: table.id })`. Avoid `select *` in production queries to minimize payload size and improve performance.
|
|
15
|
+
- **Relational Queries**: Use Drizzle's Relational Query API (`db.query`) for complex joined data fetching, but use the Core API (`db.select().from()`) for mutations and simple lookups.
|
|
16
|
+
- **Type Inference**: Use `typeof schema.table.$inferSelect` and `$inferInsert` to generate application types directly from the schema.
|
|
17
|
+
|
|
18
|
+
## 2. Schema Definition
|
|
19
|
+
|
|
20
|
+
Always define schemas with precise types and constraints.
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'
|
|
24
|
+
|
|
25
|
+
export const users = sqliteTable('users', {
|
|
26
|
+
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
27
|
+
email: text('email').notNull().unique(),
|
|
28
|
+
name: text('name').notNull(),
|
|
29
|
+
createdAt: integer('created_at', { mode: 'timestamp' })
|
|
30
|
+
.notNull()
|
|
31
|
+
.$defaultFn(() => new Date()),
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export type User = typeof users.$inferSelect
|
|
35
|
+
export type NewUser = typeof users.$inferInsert
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 3. Querying Patterns
|
|
39
|
+
|
|
40
|
+
### Inserts and Returning
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
const result = await db
|
|
44
|
+
.insert(users)
|
|
45
|
+
.values({ email: 'test@example.com', name: 'Test' })
|
|
46
|
+
.returning() // Supported in D1
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Relational Queries (Read-Heavy)
|
|
50
|
+
|
|
51
|
+
Ensure you define relations in your schema file:
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
export const usersRelations = relations(users, ({ many }) => ({
|
|
55
|
+
posts: many(posts),
|
|
56
|
+
}))
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Fetch deeply nested data easily:
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
const userWithPosts = await db.query.users.findFirst({
|
|
63
|
+
where: eq(users.id, 1),
|
|
64
|
+
with: {
|
|
65
|
+
posts: true,
|
|
66
|
+
},
|
|
67
|
+
})
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 4. Migrations (Cloudflare D1)
|
|
71
|
+
|
|
72
|
+
Always generate migrations locally and apply them via Wrangler. Never execute `db.execute()` with raw migration SQL at runtime.
|
|
73
|
+
|
|
74
|
+
1. Generate: `npx drizzle-kit generate`
|
|
75
|
+
2. Apply Locally: `npx wrangler d1 migrations apply my-db --local`
|
|
76
|
+
3. Apply Remote: `npx wrangler d1 migrations apply my-db --remote`
|
|
77
|
+
|
|
78
|
+
## 5. Security & Safety
|
|
79
|
+
|
|
80
|
+
- **SQL Injection**: Drizzle is inherently safe against SQL injection as long as you use its builder functions (`eq()`, `like()`, `insert()`). Do not use `sql\`\`` with raw unescaped input.
|
|
81
|
+
- **Transactions**: Use `db.transaction()` for multi-step operations to ensure data integrity.
|
|
82
|
+
- **Migration Commits**: Always commit the generated `.sql` migration files to version control.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: durable-objects
|
|
3
|
+
description: Create and review Cloudflare Durable Objects. Use when building stateful coordination (chat rooms, multiplayer games, booking systems), implementing RPC methods, SQLite storage, alarms, WebSockets, or reviewing DO code for best practices. Covers Workers integration, wrangler config, and testing with Vitest.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Durable Objects
|
|
7
|
+
|
|
8
|
+
Build stateful, coordinated applications on Cloudflare's edge using Durable Objects.
|
|
9
|
+
|
|
10
|
+
## Retrieval-First Development
|
|
11
|
+
|
|
12
|
+
**Prefer retrieval from official docs over pre-training for Durable Objects tasks.**
|
|
13
|
+
|
|
14
|
+
| Resource | URL |
|
|
15
|
+
| -------------- | ----------------------------------------------------------------- |
|
|
16
|
+
| Docs | https://developers.cloudflare.com/durable-objects/ |
|
|
17
|
+
| API Reference | https://developers.cloudflare.com/durable-objects/api/ |
|
|
18
|
+
| Best Practices | https://developers.cloudflare.com/durable-objects/best-practices/ |
|
|
19
|
+
| Examples | https://developers.cloudflare.com/durable-objects/examples/ |
|
|
20
|
+
|
|
21
|
+
Fetch the relevant doc page when implementing features.
|
|
22
|
+
|
|
23
|
+
## When to Use
|
|
24
|
+
|
|
25
|
+
- Creating new Durable Object classes for stateful coordination
|
|
26
|
+
- Implementing RPC methods, alarms, or WebSocket handlers
|
|
27
|
+
- Reviewing existing DO code for best practices
|
|
28
|
+
- Configuring wrangler.jsonc/toml for DO bindings and migrations
|
|
29
|
+
- Writing tests with `@cloudflare/vitest-pool-workers`
|
|
30
|
+
- Designing sharding strategies and parent-child relationships
|
|
31
|
+
|
|
32
|
+
## Reference Documentation
|
|
33
|
+
|
|
34
|
+
- `./references/rules.md` - Core rules, storage, concurrency, RPC, alarms
|
|
35
|
+
- `./references/testing.md` - Vitest setup, unit/integration tests, alarm testing
|
|
36
|
+
- `./references/workers.md` - Workers handlers, types, wrangler config, observability
|
|
37
|
+
|
|
38
|
+
Search: `blockConcurrencyWhile`, `idFromName`, `getByName`, `setAlarm`, `sql.exec`
|
|
39
|
+
|
|
40
|
+
## Core Principles
|
|
41
|
+
|
|
42
|
+
### Use Durable Objects For
|
|
43
|
+
|
|
44
|
+
| Need | Example |
|
|
45
|
+
| ------------------------- | ------------------------------------------------- |
|
|
46
|
+
| Coordination | Chat rooms, multiplayer games, collaborative docs |
|
|
47
|
+
| Strong consistency | Inventory, booking systems, turn-based games |
|
|
48
|
+
| Per-entity storage | Multi-tenant SaaS, per-user data |
|
|
49
|
+
| Persistent connections | WebSockets, real-time notifications |
|
|
50
|
+
| Scheduled work per entity | Subscription renewals, game timeouts |
|
|
51
|
+
|
|
52
|
+
### Do NOT Use For
|
|
53
|
+
|
|
54
|
+
- Stateless request handling (use plain Workers)
|
|
55
|
+
- Maximum global distribution needs
|
|
56
|
+
- High fan-out independent requests
|
|
57
|
+
|
|
58
|
+
## Quick Reference
|
|
59
|
+
|
|
60
|
+
### Wrangler Configuration
|
|
61
|
+
|
|
62
|
+
```jsonc
|
|
63
|
+
// wrangler.jsonc
|
|
64
|
+
{
|
|
65
|
+
"durable_objects": {
|
|
66
|
+
"bindings": [{ "name": "MY_DO", "class_name": "MyDurableObject" }],
|
|
67
|
+
},
|
|
68
|
+
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyDurableObject"] }],
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Basic Durable Object Pattern
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import { DurableObject } from 'cloudflare:workers'
|
|
76
|
+
|
|
77
|
+
export interface Env {
|
|
78
|
+
MY_DO: DurableObjectNamespace<MyDurableObject>
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export class MyDurableObject extends DurableObject<Env> {
|
|
82
|
+
constructor(ctx: DurableObjectState, env: Env) {
|
|
83
|
+
super(ctx, env)
|
|
84
|
+
ctx.blockConcurrencyWhile(async () => {
|
|
85
|
+
this.ctx.storage.sql.exec(`
|
|
86
|
+
CREATE TABLE IF NOT EXISTS items (
|
|
87
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
88
|
+
data TEXT NOT NULL
|
|
89
|
+
)
|
|
90
|
+
`)
|
|
91
|
+
})
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async addItem(data: string): Promise<number> {
|
|
95
|
+
const result = this.ctx.storage.sql.exec<{ id: number }>(
|
|
96
|
+
'INSERT INTO items (data) VALUES (?) RETURNING id',
|
|
97
|
+
data
|
|
98
|
+
)
|
|
99
|
+
return result.one().id
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export default {
|
|
104
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
105
|
+
const stub = env.MY_DO.getByName('my-instance')
|
|
106
|
+
const id = await stub.addItem('hello')
|
|
107
|
+
return Response.json({ id })
|
|
108
|
+
},
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Critical Rules
|
|
113
|
+
|
|
114
|
+
1. **Model around coordination atoms** - One DO per chat room/game/user, not one global DO
|
|
115
|
+
2. **Use `getByName()` for deterministic routing** - Same input = same DO instance
|
|
116
|
+
3. **Use SQLite storage** - Configure `new_sqlite_classes` in migrations
|
|
117
|
+
4. **Initialize in constructor** - Use `blockConcurrencyWhile()` for schema setup only
|
|
118
|
+
5. **Use RPC methods** - Use RPC for DO-to-DO communication (compatibility date >= 2024-04-03). The outer Worker can still use the standard `fetch()` handler to route to the DO stub.
|
|
119
|
+
6. **Persist first, cache second** - Always write to storage before updating in-memory state
|
|
120
|
+
7. **One alarm per DO** - `setAlarm()` replaces any existing alarm
|
|
121
|
+
|
|
122
|
+
## Anti-Patterns (NEVER)
|
|
123
|
+
|
|
124
|
+
- Single global DO handling all requests (bottleneck)
|
|
125
|
+
- Using `blockConcurrencyWhile()` on every request (kills throughput)
|
|
126
|
+
- Storing critical state only in memory (lost on eviction/crash)
|
|
127
|
+
- Using `await` between related storage writes (breaks atomicity)
|
|
128
|
+
- Holding `blockConcurrencyWhile()` across `fetch()` or external I/O
|
|
129
|
+
|
|
130
|
+
## Stub Creation
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
// Deterministic - preferred for most cases
|
|
134
|
+
const stub = env.MY_DO.getByName('room-123')
|
|
135
|
+
|
|
136
|
+
// From existing ID string
|
|
137
|
+
const id = env.MY_DO.idFromString(storedIdString)
|
|
138
|
+
const stub = env.MY_DO.get(id)
|
|
139
|
+
|
|
140
|
+
// New unique ID - store mapping externally
|
|
141
|
+
const id = env.MY_DO.newUniqueId()
|
|
142
|
+
const stub = env.MY_DO.get(id)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Advanced Features
|
|
146
|
+
|
|
147
|
+
See [references/advanced_features.md](references/advanced_features.md) for detailed examples of Storage Operations (SQL and KV) and Alarms scheduling.
|
|
148
|
+
|
|
149
|
+
## Security
|
|
150
|
+
|
|
151
|
+
- **RPC Access Control**: RPC methods are public to any caller with a stub. Implement authorization inside the method body (e.g., check `this.env.AUTH_TOKEN`).
|
|
152
|
+
- **WebSockets**: Validate WebSocket origin in `onConnect()` to prevent cross-site hijacking.
|
|
153
|
+
|
|
154
|
+
## Testing Quick Start
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
import { env } from 'cloudflare:test'
|
|
158
|
+
import { describe, it, expect } from 'vitest'
|
|
159
|
+
|
|
160
|
+
describe('MyDO', () => {
|
|
161
|
+
it('should work', async () => {
|
|
162
|
+
const stub = env.MY_DO.getByName('test')
|
|
163
|
+
const result = await stub.addItem('test')
|
|
164
|
+
expect(result).toBe(1)
|
|
165
|
+
})
|
|
166
|
+
})
|
|
167
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Advanced Durable Object Features
|
|
2
|
+
|
|
3
|
+
## Storage Operations
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
// SQL (synchronous, recommended)
|
|
7
|
+
this.ctx.storage.sql.exec('INSERT INTO t (c) VALUES (?)', value)
|
|
8
|
+
const rows = this.ctx.storage.sql.exec<Row>('SELECT * FROM t').toArray()
|
|
9
|
+
|
|
10
|
+
// KV (async)
|
|
11
|
+
await this.ctx.storage.put('key', value)
|
|
12
|
+
const val = await this.ctx.storage.get<Type>('key')
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Alarms
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// Schedule (replaces existing)
|
|
19
|
+
await this.ctx.storage.setAlarm(Date.now() + 60_000);
|
|
20
|
+
|
|
21
|
+
// Handler
|
|
22
|
+
async alarm(): Promise<void> {
|
|
23
|
+
// Process scheduled work
|
|
24
|
+
// Optionally reschedule: await this.ctx.storage.setAlarm(...)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Cancel
|
|
28
|
+
await this.ctx.storage.deleteAlarm();
|
|
29
|
+
```
|