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,441 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: next-cache-components
|
|
3
|
+
description: |
|
|
4
|
+
Next.js 16 Cache Components guidance. Use when refactoring React Server Components for performance, debugging Partial Prerendering (PPR) issues, or applying the `use cache` directive, `cacheLife`, `cacheTag`, `updateTag`, and `revalidateTag`.
|
|
5
|
+
Also use when deciding whether data should be static, cached, or dynamic, or when addressing stale data and cache invalidation. For general Next.js performance, adversarial-performance may also apply.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Cache Components (Next.js 16+)
|
|
9
|
+
|
|
10
|
+
> **Note:** Cache Components are available in Next.js canary. Verify `cacheComponents` is supported in your target version before applying this guidance.
|
|
11
|
+
|
|
12
|
+
Cache Components enable Partial Prerendering (PPR) - mix static, cached, and dynamic content in a single route.
|
|
13
|
+
|
|
14
|
+
## Enable Cache Components
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
// next.config.ts
|
|
18
|
+
import type { NextConfig } from 'next'
|
|
19
|
+
|
|
20
|
+
const nextConfig: NextConfig = {
|
|
21
|
+
cacheComponents: true,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default nextConfig
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
This replaces the old `experimental.ppr` flag.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Three Content Types
|
|
32
|
+
|
|
33
|
+
With Cache Components enabled, content falls into three categories:
|
|
34
|
+
|
|
35
|
+
### 1. Static (Auto-Prerendered)
|
|
36
|
+
|
|
37
|
+
Synchronous code, imports, pure computations - prerendered at build time:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
export default function Page() {
|
|
41
|
+
return (
|
|
42
|
+
<header>
|
|
43
|
+
<h1>Our Blog</h1> {/* Static - instant */}
|
|
44
|
+
<nav>...</nav>
|
|
45
|
+
</header>
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 2. Cached (`use cache`)
|
|
51
|
+
|
|
52
|
+
Async data that doesn't need fresh fetches every request:
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
async function BlogPosts() {
|
|
56
|
+
'use cache'
|
|
57
|
+
cacheLife('hours')
|
|
58
|
+
|
|
59
|
+
const posts = await db.posts.findMany()
|
|
60
|
+
return <PostList posts={posts} />
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3. Dynamic (Suspense)
|
|
65
|
+
|
|
66
|
+
Runtime data that must be fresh - wrap in Suspense:
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
import { Suspense } from 'react'
|
|
70
|
+
|
|
71
|
+
export default function Page() {
|
|
72
|
+
return (
|
|
73
|
+
<>
|
|
74
|
+
<BlogPosts /> {/* Cached */}
|
|
75
|
+
<Suspense fallback={<p>Loading...</p>}>
|
|
76
|
+
<UserPreferences /> {/* Dynamic - streams in */}
|
|
77
|
+
</Suspense>
|
|
78
|
+
</>
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async function UserPreferences() {
|
|
83
|
+
const theme = (await cookies()).get('theme')?.value
|
|
84
|
+
return <p>Theme: {theme}</p>
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Selection Matrix: Static vs Cached vs Dynamic
|
|
91
|
+
|
|
92
|
+
When designing a component, use this matrix to determine the correct caching strategy:
|
|
93
|
+
|
|
94
|
+
| Data Type | Frequency of Change | Strategy | Implementation |
|
|
95
|
+
| ---------------------------- | ----------------------- | ----------- | ---------------------------- |
|
|
96
|
+
| Marketing copy, Layouts, Nav | Build-time or rarely | **Static** | Default Server Component |
|
|
97
|
+
| Blog posts, Product catalog | Periodic / CMS-driven | **Cached** | `'use cache'` + `cacheLife` |
|
|
98
|
+
| User profile, Shopping cart | Per-user / Real-time | **Dynamic** | Suspense + `await cookies()` |
|
|
99
|
+
| Admin dashboard, Analytics | High-frequency / Secure | **Dynamic** | Suspense + `await headers()` |
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## `use cache` Directive
|
|
104
|
+
|
|
105
|
+
### File Level
|
|
106
|
+
|
|
107
|
+
```tsx
|
|
108
|
+
'use cache'
|
|
109
|
+
|
|
110
|
+
export default async function Page() {
|
|
111
|
+
// Entire page is cached
|
|
112
|
+
const data = await fetchData()
|
|
113
|
+
return <div>{data}</div>
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Component Level
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
export async function CachedComponent() {
|
|
121
|
+
'use cache'
|
|
122
|
+
const data = await fetchData()
|
|
123
|
+
return <div>{data}</div>
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Function Level
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
export async function getData() {
|
|
131
|
+
'use cache'
|
|
132
|
+
return db.query('SELECT * FROM posts')
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Cache Profiles
|
|
139
|
+
|
|
140
|
+
### Built-in Profiles
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
'use cache' // Default: 5m stale, 15m revalidate
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
```tsx
|
|
147
|
+
'use cache: remote' // Platform-provided cache (Redis, KV)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
'use cache: private' // For compliance, allows runtime APIs
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### `cacheLife()` - Custom Lifetime
|
|
155
|
+
|
|
156
|
+
```tsx
|
|
157
|
+
import { cacheLife } from 'next/cache'
|
|
158
|
+
|
|
159
|
+
async function getData() {
|
|
160
|
+
'use cache'
|
|
161
|
+
cacheLife('hours') // Built-in profile
|
|
162
|
+
return fetch('/api/data')
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Built-in profiles: `'default'`, `'minutes'`, `'hours'`, `'days'`, `'weeks'`, `'max'`
|
|
167
|
+
|
|
168
|
+
### Inline Configuration
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
async function getData() {
|
|
172
|
+
'use cache'
|
|
173
|
+
cacheLife({
|
|
174
|
+
stale: 3600, // 1 hour - serve stale while revalidating
|
|
175
|
+
revalidate: 7200, // 2 hours - background revalidation interval
|
|
176
|
+
expire: 86400, // 1 day - hard expiration
|
|
177
|
+
})
|
|
178
|
+
return fetch('/api/data')
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Cache Invalidation
|
|
185
|
+
|
|
186
|
+
### `cacheTag()` - Tag Cached Content
|
|
187
|
+
|
|
188
|
+
```tsx
|
|
189
|
+
import { cacheTag } from 'next/cache'
|
|
190
|
+
|
|
191
|
+
async function getProducts() {
|
|
192
|
+
'use cache'
|
|
193
|
+
cacheTag('products')
|
|
194
|
+
return db.products.findMany()
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
async function getProduct(id: string) {
|
|
198
|
+
'use cache'
|
|
199
|
+
cacheTag('products', `product-${id}`)
|
|
200
|
+
return db.products.findUnique({ where: { id } })
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### `updateTag()` - Immediate Invalidation
|
|
205
|
+
|
|
206
|
+
Use when you need the cache refreshed within the same request:
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
'use server'
|
|
210
|
+
|
|
211
|
+
import { updateTag } from 'next/cache'
|
|
212
|
+
|
|
213
|
+
export async function updateProduct(id: string, data: FormData) {
|
|
214
|
+
await db.products.update({ where: { id }, data })
|
|
215
|
+
updateTag(`product-${id}`) // Immediate - same request sees fresh data
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### `revalidateTag()` - Background Revalidation
|
|
220
|
+
|
|
221
|
+
Use for stale-while-revalidate behavior:
|
|
222
|
+
|
|
223
|
+
```tsx
|
|
224
|
+
'use server'
|
|
225
|
+
|
|
226
|
+
import { revalidateTag } from 'next/cache'
|
|
227
|
+
|
|
228
|
+
export async function createPost(data: FormData) {
|
|
229
|
+
await db.posts.create({ data })
|
|
230
|
+
revalidateTag('posts') // Background - next request sees fresh data
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Runtime Data Constraint
|
|
237
|
+
|
|
238
|
+
**Cannot** access `cookies()`, `headers()`, or `searchParams` inside `use cache`.
|
|
239
|
+
|
|
240
|
+
### Solution: Pass as Arguments
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
// Wrong - runtime API inside use cache
|
|
244
|
+
async function CachedProfile() {
|
|
245
|
+
'use cache'
|
|
246
|
+
const session = (await cookies()).get('session')?.value // Error!
|
|
247
|
+
return <div>{session}</div>
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// Correct - extract outside, pass as argument
|
|
251
|
+
async function ProfilePage() {
|
|
252
|
+
const session = (await cookies()).get('session')?.value
|
|
253
|
+
return <CachedProfile sessionId={session} />
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
async function CachedProfile({ sessionId }: { sessionId: string }) {
|
|
257
|
+
'use cache'
|
|
258
|
+
// sessionId becomes part of cache key automatically
|
|
259
|
+
const data = await fetchUserData(sessionId)
|
|
260
|
+
return <div>{data.name}</div>
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Exception: `use cache: private`
|
|
265
|
+
|
|
266
|
+
For compliance requirements when you can't refactor:
|
|
267
|
+
|
|
268
|
+
```tsx
|
|
269
|
+
async function getData() {
|
|
270
|
+
'use cache: private'
|
|
271
|
+
const session = (await cookies()).get('session')?.value // Allowed
|
|
272
|
+
return fetchData(session)
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Caching Security & Auth Boundaries
|
|
279
|
+
|
|
280
|
+
> **CRITICAL FAILURE MODE:** Caching user-specific or authorization-bound data globally will leak PII (Personally Identifiable Information) across different users' sessions.
|
|
281
|
+
|
|
282
|
+
**Rules for Auth Boundaries:**
|
|
283
|
+
|
|
284
|
+
1. **Never use standard `'use cache'` for PII:** Standard cache entries are shared globally. If a component fetches user profile data using an auth token, you MUST NOT use the standard global `'use cache'`.
|
|
285
|
+
2. **Explicitly include user identities in cache keys:** If you must cache per-user data, extract the user ID in a dynamic context and pass it as an argument so it becomes part of the automatic cache key (e.g., `async function CachedProfile({ userId }) { 'use cache'; ... }`).
|
|
286
|
+
3. **Use `'use cache: private'` cautiously:** This ensures data isn't shared across requests, but relies heavily on correct platform caching configuration.
|
|
287
|
+
4. **Dynamic by default for Auth:** For dashboards, settings, and secure data, default to **Dynamic** (Suspense) rather than Cached.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Cache Key Generation
|
|
292
|
+
|
|
293
|
+
Cache keys are automatic based on:
|
|
294
|
+
|
|
295
|
+
- **Build ID** - invalidates all caches on deploy
|
|
296
|
+
- **Function ID** - hash of function location
|
|
297
|
+
- **Serializable arguments** - props become part of key
|
|
298
|
+
- **Closure variables** - outer scope values included
|
|
299
|
+
|
|
300
|
+
```tsx
|
|
301
|
+
async function Component({ userId }: { userId: string }) {
|
|
302
|
+
const getData = async (filter: string) => {
|
|
303
|
+
'use cache'
|
|
304
|
+
// Cache key = userId (closure) + filter (argument)
|
|
305
|
+
return fetch(`/api/users/${userId}?filter=${filter}`)
|
|
306
|
+
}
|
|
307
|
+
return getData('active')
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Complete Example
|
|
314
|
+
|
|
315
|
+
```tsx
|
|
316
|
+
import { Suspense } from 'react'
|
|
317
|
+
import { cookies } from 'next/headers'
|
|
318
|
+
import { cacheLife, cacheTag } from 'next/cache'
|
|
319
|
+
|
|
320
|
+
export default function DashboardPage() {
|
|
321
|
+
return (
|
|
322
|
+
<>
|
|
323
|
+
{/* Static shell - instant from CDN */}
|
|
324
|
+
<header>
|
|
325
|
+
<h1>Dashboard</h1>
|
|
326
|
+
</header>
|
|
327
|
+
<nav>...</nav>
|
|
328
|
+
|
|
329
|
+
{/* Cached - fast, revalidates hourly */}
|
|
330
|
+
<Stats />
|
|
331
|
+
|
|
332
|
+
{/* Dynamic - streams in with fresh data */}
|
|
333
|
+
<Suspense fallback={<NotificationsSkeleton />}>
|
|
334
|
+
<Notifications />
|
|
335
|
+
</Suspense>
|
|
336
|
+
</>
|
|
337
|
+
)
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
async function Stats() {
|
|
341
|
+
'use cache'
|
|
342
|
+
cacheLife('hours')
|
|
343
|
+
cacheTag('dashboard-stats')
|
|
344
|
+
|
|
345
|
+
const stats = await db.stats.aggregate()
|
|
346
|
+
return <StatsDisplay stats={stats} />
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
async function Notifications() {
|
|
350
|
+
const userId = (await cookies()).get('userId')?.value
|
|
351
|
+
const notifications = await db.notifications.findMany({
|
|
352
|
+
where: { userId, read: false },
|
|
353
|
+
})
|
|
354
|
+
return <NotificationList items={notifications} />
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## Migration from Previous Versions
|
|
361
|
+
|
|
362
|
+
| Old Config | Replacement |
|
|
363
|
+
| --------------------------- | ---------------------------------- |
|
|
364
|
+
| `experimental.ppr` | `cacheComponents: true` |
|
|
365
|
+
| `dynamic = 'force-dynamic'` | Remove (default behavior) |
|
|
366
|
+
| `dynamic = 'force-static'` | `'use cache'` + `cacheLife('max')` |
|
|
367
|
+
| `revalidate = N` | `cacheLife({ revalidate: N })` |
|
|
368
|
+
| `unstable_cache()` | `'use cache'` directive |
|
|
369
|
+
|
|
370
|
+
### Migrating `unstable_cache` to `use cache`
|
|
371
|
+
|
|
372
|
+
`unstable_cache` has been replaced by the `use cache` directive in Next.js 16. When `cacheComponents` is enabled, convert `unstable_cache` calls to `use cache` functions:
|
|
373
|
+
|
|
374
|
+
**Before (`unstable_cache`):**
|
|
375
|
+
|
|
376
|
+
```tsx
|
|
377
|
+
import { unstable_cache } from 'next/cache'
|
|
378
|
+
|
|
379
|
+
const getCachedUser = unstable_cache(async (id) => getUser(id), ['my-app-user'], {
|
|
380
|
+
tags: ['users'],
|
|
381
|
+
revalidate: 60,
|
|
382
|
+
})
|
|
383
|
+
|
|
384
|
+
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
|
|
385
|
+
const { id } = await params
|
|
386
|
+
const user = await getCachedUser(id)
|
|
387
|
+
return <div>{user.name}</div>
|
|
388
|
+
}
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**After (`use cache`):**
|
|
392
|
+
|
|
393
|
+
```tsx
|
|
394
|
+
import { cacheLife, cacheTag } from 'next/cache'
|
|
395
|
+
|
|
396
|
+
async function getCachedUser(id: string) {
|
|
397
|
+
'use cache'
|
|
398
|
+
cacheTag('users')
|
|
399
|
+
cacheLife({ revalidate: 60 })
|
|
400
|
+
return getUser(id)
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
|
|
404
|
+
const { id } = await params
|
|
405
|
+
const user = await getCachedUser(id)
|
|
406
|
+
return <div>{user.name}</div>
|
|
407
|
+
}
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
Key differences:
|
|
411
|
+
|
|
412
|
+
- **No manual cache keys** - `use cache` generates keys automatically from function arguments and closures. The `keyParts` array from `unstable_cache` is no longer needed.
|
|
413
|
+
- **Tags** - Replace `options.tags` with `cacheTag()` calls inside the function.
|
|
414
|
+
- **Revalidation** - Replace `options.revalidate` with `cacheLife({ revalidate: N })` or a built-in profile like `cacheLife('minutes')`.
|
|
415
|
+
- **Dynamic data** - `unstable_cache` did not support `cookies()` or `headers()` inside the callback. The same restriction applies to `use cache`, but you can use `'use cache: private'` if needed.
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
## Limitations
|
|
420
|
+
|
|
421
|
+
- **Edge runtime not supported** - requires Node.js
|
|
422
|
+
- **Static export not supported** - needs server
|
|
423
|
+
- **Non-deterministic values** (`Math.random()`, `Date.now()`) execute once at build time inside `use cache`
|
|
424
|
+
|
|
425
|
+
For request-time randomness outside cache:
|
|
426
|
+
|
|
427
|
+
```tsx
|
|
428
|
+
import { connection } from 'next/server'
|
|
429
|
+
|
|
430
|
+
async function DynamicContent() {
|
|
431
|
+
await connection() // Defer to request time
|
|
432
|
+
const id = crypto.randomUUID() // Different per request
|
|
433
|
+
return <div>{id}</div>
|
|
434
|
+
}
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
Sources:
|
|
438
|
+
|
|
439
|
+
- [Cache Components Guide](https://nextjs.org/docs/app/getting-started/cache-components)
|
|
440
|
+
- [use cache Directive](https://nextjs.org/docs/app/api-reference/directives/use-cache)
|
|
441
|
+
- [unstable_cache (legacy)](https://nextjs.org/docs/app/api-reference/functions/unstable_cache)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: next-upgrade
|
|
3
|
+
description: |
|
|
4
|
+
Upgrade Next.js to a specific target version using safe dependency bumps, codemods,
|
|
5
|
+
and diff reviews. Use when you need to execute major version bumps, resolve breaking changes,
|
|
6
|
+
"upgrading Next.js", "migrate to Next.js 15 or 16", or safely "run @next/codemod" against the repository before upgrading.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Upgrade Next.js
|
|
10
|
+
|
|
11
|
+
Upgrade the current project to a targeted Next.js version following official migration guides.
|
|
12
|
+
|
|
13
|
+
## Instructions
|
|
14
|
+
|
|
15
|
+
1. **Detect current environment**:
|
|
16
|
+
- Read `package.json` to identify the current Next.js version, React version, and package manager (`npm`, `pnpm`, `yarn`).
|
|
17
|
+
- Read the lockfile to ensure you use the correct package manager.
|
|
18
|
+
|
|
19
|
+
2. **Determine target version**:
|
|
20
|
+
- Do NOT blindly use `@latest`. Always determine the explicit target version (e.g., `15.0.0`) based on user request or current LTS.
|
|
21
|
+
- For major version jumps, upgrade incrementally (e.g., 13 → 14 → 15).
|
|
22
|
+
|
|
23
|
+
3. **Consult Upgrade Decision Tree**:
|
|
24
|
+
- Read [references/decision-tree.md](references/decision-tree.md) to find the correct codemods and checklists for your target version.
|
|
25
|
+
|
|
26
|
+
4. **Security Gate**:
|
|
27
|
+
- You MUST request explicit user confirmation before running any codemod that modifies source files.
|
|
28
|
+
|
|
29
|
+
5. **Run codemods FIRST (before installing new versions)**:
|
|
30
|
+
- Next.js codemods should often be run against the _old_ codebase before upgrading to automate breaking changes.
|
|
31
|
+
- Example: `npx @next/codemod@<target-version> <transform> <path>`
|
|
32
|
+
|
|
33
|
+
6. **Pin dependencies**:
|
|
34
|
+
- Upgrade Next.js and peer dependencies to the specific target version:
|
|
35
|
+
- Example: `pnpm install next@15.0.0 react@19.0.0 react-dom@19.0.0`
|
|
36
|
+
|
|
37
|
+
7. **Review Diff**:
|
|
38
|
+
- After running codemods and installing new dependencies, you MUST run `git diff` or review the changes.
|
|
39
|
+
- Do NOT commit or ship without explicit user review of the codemod changes.
|
|
40
|
+
|
|
41
|
+
8. **Test the upgrade**:
|
|
42
|
+
- Run `npm run build` (or equivalent) to check for build errors.
|
|
43
|
+
- If there are errors in `next.config.js` or routing, resolve them manually.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Next.js Upgrade Decision Tree
|
|
2
|
+
|
|
3
|
+
When upgrading Next.js, follow this decision tree to determine which official migration guide to read and which codemods to run.
|
|
4
|
+
|
|
5
|
+
## 1. Upgrade from Next.js 14 to 15
|
|
6
|
+
|
|
7
|
+
If current version is 14.x and target is 15.x:
|
|
8
|
+
|
|
9
|
+
1. Fetch guide: `https://nextjs.org/docs/app/guides/upgrading/version-15`
|
|
10
|
+
2. **Major Breaking Change**: Async Request APIs (params, searchParams, cookies, headers are now Promises).
|
|
11
|
+
3. **Run Codemod**: `npx @next/codemod@latest next-async-request-api .`
|
|
12
|
+
4. **Other Codemods**:
|
|
13
|
+
- `next-request-geo-ip` (if using geo/ip in middleware)
|
|
14
|
+
- `next-dynamic-access-named-export` (if using dynamic imports)
|
|
15
|
+
5. **Config Changes**: `experimental.ppr` is now `cacheComponents` (Next 15+).
|
|
16
|
+
|
|
17
|
+
## 2. Upgrade from Next.js 13 to 14
|
|
18
|
+
|
|
19
|
+
If current version is 13.x and target is 14.x:
|
|
20
|
+
|
|
21
|
+
1. Fetch guide: `https://nextjs.org/docs/app/guides/upgrading/version-14`
|
|
22
|
+
2. **Major Breaking Change**: Node.js minimum version is 18.17.
|
|
23
|
+
3. **Run Codemod**: `npx @next/codemod@latest next-Image-experimental .` (if moving from legacy Image).
|
|
24
|
+
|
|
25
|
+
## 3. General Codemod Workflow
|
|
26
|
+
|
|
27
|
+
For any version upgrade:
|
|
28
|
+
|
|
29
|
+
1. Ensure git working directory is clean.
|
|
30
|
+
2. Run the specific codemod.
|
|
31
|
+
3. Review the git diff.
|
|
32
|
+
4. ONLY THEN run the `npm install` / `pnpm install` step to pin the new target version.
|
|
33
|
+
5. Rebuild the app and manually fix TypeScript errors.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nodejs
|
|
3
|
+
description: |
|
|
4
|
+
Node.js core runtime standards. Use when working with native Node.js APIs like streams, buffers, child_process, worker_threads, filesystem, or event loop tuning. Do NOT trigger for generic 'build a server' requests unless the platform/language is explicitly specified.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Node.js Core Standards
|
|
8
|
+
|
|
9
|
+
This skill provides best practices for utilizing native Node.js APIs safely and efficiently.
|
|
10
|
+
|
|
11
|
+
## 1. Streams and Memory Management
|
|
12
|
+
|
|
13
|
+
- **Streaming Data**: Always use streams (`fs.createReadStream`, `pipeline`) when handling files or network payloads larger than a few megabytes. Never buffer entire large files into memory using `fs.readFile`.
|
|
14
|
+
- **Pipeline Utility**: Always use `stream/promises.pipeline` to chain streams together. It properly handles error propagation and stream destruction to prevent memory leaks.
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { pipeline } from 'node:stream/promises'
|
|
18
|
+
import { createReadStream, createWriteStream } from 'node:fs'
|
|
19
|
+
|
|
20
|
+
await pipeline(
|
|
21
|
+
createReadStream('large-file.csv'),
|
|
22
|
+
processTransformStream,
|
|
23
|
+
createWriteStream('output.csv')
|
|
24
|
+
)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 2. Event Loop Blocking
|
|
28
|
+
|
|
29
|
+
- **Synchronous APIs**: Never use synchronous native APIs (`fs.readFileSync`, `crypto.pbkdf2Sync`) in a web server context, as they block the main event loop and freeze all other requests. Only use them during application startup or in CLI scripts.
|
|
30
|
+
- **CPU Intensive Tasks**: Offload CPU-intensive work (image processing, heavy cryptography, massive JSON parsing) to `worker_threads` or external processes.
|
|
31
|
+
|
|
32
|
+
## 3. Child Processes
|
|
33
|
+
|
|
34
|
+
- **exec vs spawn**: Avoid `child_process.exec()` for any dynamic input, as it executes in a shell and is vulnerable to command injection. Use `child_process.spawn()` or `execFile()` which bypass the shell and pass arguments directly.
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { spawn } from 'node:child_process'
|
|
38
|
+
|
|
39
|
+
// Safe: arguments are passed as an array
|
|
40
|
+
const child = spawn('ls', ['-lh', '/usr'])
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 4. Modern APIs
|
|
44
|
+
|
|
45
|
+
- **Native Fetch**: Use the native `fetch` API (Node 18+) instead of third-party libraries like `axios` or `node-fetch` unless specific interceptor functionality is required.
|
|
46
|
+
- **Prefixes**: Always use the `node:` prefix when importing core modules (e.g., `import fs from 'node:fs'`). This explicitly bypasses `node_modules` lookup and improves security.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opentelemetry
|
|
3
|
+
description: |
|
|
4
|
+
Observability standards using OpenTelemetry. Use when instrumenting applications for distributed tracing, metrics, and structured logging. NOT for Cloudflare Workers observability (use workers-best-practices). NOT for performance optimization - use adversarial-performance or web-perf. SECURITY: Ensure sensitive PII/secrets are scrubbed before logging.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# OpenTelemetry (OTel)
|
|
8
|
+
|
|
9
|
+
Production standards for instrumenting applications to achieve high-fidelity observability.
|
|
10
|
+
|
|
11
|
+
## 1. Distributed Tracing
|
|
12
|
+
|
|
13
|
+
- **Trace Context Propagation**: Always propagate the `traceparent` and `tracestate` headers across HTTP and RPC boundaries (using W3C Trace Context).
|
|
14
|
+
- **Span Granularity**: Create spans for logical units of work. Avoid creating spans for every single function call (which causes overhead). Focus on:
|
|
15
|
+
- Incoming HTTP requests
|
|
16
|
+
- Database queries
|
|
17
|
+
- External API/LLM calls
|
|
18
|
+
- Background task executions
|
|
19
|
+
- **Semantic Conventions**: Use standardized span attributes (e.g., `http.method`, `http.status_code`, `db.system`). Do not invent custom attribute names when standard ones exist.
|
|
20
|
+
|
|
21
|
+
## 2. Span Implementation Guidelines
|
|
22
|
+
|
|
23
|
+
- **Status and Errors**: explicitly set the span status to `Error` when an exception occurs, and record the exception object on the span.
|
|
24
|
+
- **Payloads**: Avoid logging sensitive PII or massive payloads in span attributes. Log structural identifiers (e.g., `user.id`, `tenant.id`).
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// Example: Creating a Span in Node.js
|
|
28
|
+
tracer.startActiveSpan('database.query', (span) => {
|
|
29
|
+
try {
|
|
30
|
+
span.setAttribute('db.statement', queryText)
|
|
31
|
+
const result = db.execute(queryText)
|
|
32
|
+
span.setStatus({ code: SpanStatusCode.OK })
|
|
33
|
+
return result
|
|
34
|
+
} catch (error) {
|
|
35
|
+
span.recordException(error)
|
|
36
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: error.message })
|
|
37
|
+
throw error
|
|
38
|
+
} finally {
|
|
39
|
+
span.end()
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## 3. Metrics
|
|
45
|
+
|
|
46
|
+
- **RED Metrics**: Focus on Rate (requests/sec), Errors (error rate), and Duration (latency distribution).
|
|
47
|
+
- **Histograms over Summaries**: Use Histograms for latency measurements to allow accurate percentile aggregations across distributed instances.
|
|
48
|
+
|
|
49
|
+
## 4. Exporters and Infrastructure
|
|
50
|
+
|
|
51
|
+
- **OTLP Exporters**: Always export telemetry using the OpenTelemetry Protocol (OTLP) via gRPC or HTTP to an OpenTelemetry Collector, rather than exporting directly to backend vendors (Datadog, Honeycomb) from the application.
|
|
52
|
+
- **Batching**: Use batch span processors (`BatchSpanProcessor`) in production to minimize performance overhead. Only use `SimpleSpanProcessor` for local debugging.
|
|
53
|
+
|
|
54
|
+
## 5. Cloudflare Workers Integration
|
|
55
|
+
|
|
56
|
+
- **Trace Exporters**: When running on Cloudflare Workers, standard OTLP exporters may fail due to runtime constraints. Use `@microlabs/otel-cf-workers` or specifically tailored fetch-based HTTP exporters for compatibility.
|
|
57
|
+
- **Context Preservation**: Always wrap the Worker's `fetch` handler or Scheduled handler using the telemetry wrapper to ensure trace context flows correctly through the V8 isolate.
|
|
58
|
+
|
|
59
|
+
## 6. Structured Logging
|
|
60
|
+
|
|
61
|
+
- **Correlated Logs**: Ensure all log lines emit the current `trace_id` and `span_id`. This allows bridging between logs and traces.
|
|
62
|
+
- **JSON Format**: Output logs in JSON format in production. Avoid unstructured string logging.
|
package/skills/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "neverinfamous-agent-skills",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "Foundational AI agent metacognitive skills and workflows for the Adamic ecosystem.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "README.md",
|
|
@@ -10,27 +10,62 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"bin/",
|
|
12
12
|
"README.md",
|
|
13
|
-
"
|
|
13
|
+
"adversarial-performance/",
|
|
14
14
|
"adversarial-planner/",
|
|
15
|
+
"adversarial-security/",
|
|
16
|
+
"adversarial-skill-audit/",
|
|
17
|
+
"adversarial-workflow-audit/",
|
|
18
|
+
"agents-sdk/",
|
|
19
|
+
"auth-identity/",
|
|
20
|
+
"autonomous-dev/",
|
|
21
|
+
"aws/",
|
|
22
|
+
"azure/",
|
|
23
|
+
"biome/",
|
|
15
24
|
"bun/",
|
|
25
|
+
"cloudflare/",
|
|
16
26
|
"docker/",
|
|
27
|
+
"docs-marketer/",
|
|
28
|
+
"drizzle-orm/",
|
|
29
|
+
"durable-objects/",
|
|
30
|
+
"gcp/",
|
|
17
31
|
"github-actions/",
|
|
18
32
|
"github-commander/",
|
|
19
33
|
"github-copilot-cli/",
|
|
34
|
+
"github-repo-setup/",
|
|
20
35
|
"gitlab/",
|
|
21
36
|
"golang/",
|
|
37
|
+
"graphql/",
|
|
38
|
+
"hono/",
|
|
39
|
+
"journal-optimizer/",
|
|
40
|
+
"llm-app-engineering/",
|
|
41
|
+
"monorepo/",
|
|
42
|
+
"multi-agent-orchestration/",
|
|
22
43
|
"mysql/",
|
|
44
|
+
"next-best-practices/",
|
|
45
|
+
"next-cache-components/",
|
|
46
|
+
"next-upgrade/",
|
|
47
|
+
"nodejs/",
|
|
48
|
+
"opentelemetry/",
|
|
23
49
|
"playwright-standard/",
|
|
24
50
|
"postgres/",
|
|
25
51
|
"python/",
|
|
26
|
-
"
|
|
52
|
+
"rag-pipelines/",
|
|
53
|
+
"redis/",
|
|
54
|
+
"render/",
|
|
27
55
|
"rust/",
|
|
56
|
+
"sandbox-sdk/",
|
|
28
57
|
"shadcn-ui/",
|
|
29
58
|
"skill-builder/",
|
|
30
59
|
"sqlite/",
|
|
31
60
|
"tailwind-css/",
|
|
61
|
+
"trpc/",
|
|
32
62
|
"typescript/",
|
|
33
|
-
"
|
|
63
|
+
"vercel-ai-sdk/",
|
|
64
|
+
"vitest-standard/",
|
|
65
|
+
"web-perf/",
|
|
66
|
+
"workers-best-practices/",
|
|
67
|
+
"wrangler/",
|
|
68
|
+
"zod/"
|
|
34
69
|
],
|
|
35
70
|
"scripts": {
|
|
36
71
|
"sync": "node bin/sync.js"
|