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,453 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: typescript
|
|
3
|
+
description: |
|
|
4
|
+
Master enterprise-grade TypeScript development with type-safe patterns, modern tooling, and framework integration. This skill provides comprehensive guidance for TypeScript 6.0+, covering type system fundamentals (generics, mapped types, conditional types, satisfies operator), enterprise patterns (error handling, validation with Zod), React integration for type-safe frontends, NestJS for scalable APIs, and LangChain.js for AI applications. Use when building type-safe applications, migrating JavaScript codebases, configuring modern toolchains (Vite 7, pnpm, ESLint, Vitest), implementing advanced type patterns, or comparing TypeScript with Java/Python approaches.
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
category: programming-languages
|
|
7
|
+
triggers:
|
|
8
|
+
- typescript
|
|
9
|
+
- ts
|
|
10
|
+
- type-safe
|
|
11
|
+
- generics
|
|
12
|
+
- nestjs typescript
|
|
13
|
+
- react typescript
|
|
14
|
+
- typescript migration
|
|
15
|
+
- tsconfig
|
|
16
|
+
- type guards
|
|
17
|
+
- mapped types
|
|
18
|
+
- conditional types
|
|
19
|
+
- satisfies operator
|
|
20
|
+
- zod validation
|
|
21
|
+
author: Richard Hightower
|
|
22
|
+
license: MIT
|
|
23
|
+
tags:
|
|
24
|
+
- typescript
|
|
25
|
+
- type-safety
|
|
26
|
+
- enterprise
|
|
27
|
+
- react
|
|
28
|
+
- nestjs
|
|
29
|
+
- langchain
|
|
30
|
+
- vite
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
# Mastering Modern TypeScript
|
|
34
|
+
|
|
35
|
+
Build enterprise-grade, type-safe applications with TypeScript 6.0+.
|
|
36
|
+
|
|
37
|
+
> **Compatibility:** TypeScript 6.0+, Node.js 25.3+, Vite 7, NestJS 11, React 19
|
|
38
|
+
|
|
39
|
+
## TypeScript 6.0 Modernization
|
|
40
|
+
|
|
41
|
+
Released in March 2026, TypeScript 6.0 acts as the final JavaScript-based bridge prior to the TS 7.0 native Go compiler transition:
|
|
42
|
+
|
|
43
|
+
- **Build Performance Defaults**: `strict: true` and `types: []` are now generated by default (no automatic crawling of `@types` to drastically reduce cold start compilation).
|
|
44
|
+
- **Core API Enhancements**: Standard typings added for `Temporal` API, Map "Upsert" (`getOrInsert`), and `RegExp.escape`.
|
|
45
|
+
- **Go Migration Compliance**: Adopt the new `--stableTypeOrdering` flag to preemptively map legacy TS shapes to the future TS 7.0 AST parser.
|
|
46
|
+
|
|
47
|
+
## Quick Start
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Initialize TypeScript project with ESM
|
|
51
|
+
pnpm create vite@latest my-app --template vanilla-ts
|
|
52
|
+
cd my-app && pnpm install
|
|
53
|
+
|
|
54
|
+
# Configure strict TypeScript
|
|
55
|
+
cat > tsconfig.json << 'EOF'
|
|
56
|
+
{
|
|
57
|
+
"compilerOptions": {
|
|
58
|
+
"target": "ES2024",
|
|
59
|
+
"module": "ESNext",
|
|
60
|
+
"moduleResolution": "bundler",
|
|
61
|
+
"strict": true,
|
|
62
|
+
"noUncheckedIndexedAccess": true,
|
|
63
|
+
"exactOptionalPropertyTypes": true,
|
|
64
|
+
"esModuleInterop": true,
|
|
65
|
+
"skipLibCheck": true
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
EOF
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## When to Use This Skill
|
|
72
|
+
|
|
73
|
+
Use when:
|
|
74
|
+
|
|
75
|
+
- Building type-safe React, NestJS, or Node.js applications
|
|
76
|
+
- Migrating JavaScript codebases to TypeScript
|
|
77
|
+
- Implementing advanced type patterns (generics, mapped types, conditional types)
|
|
78
|
+
- Configuring modern TypeScript toolchains (Vite, pnpm, ESLint)
|
|
79
|
+
- Designing type-safe API contracts with Zod validation
|
|
80
|
+
- Comparing TypeScript approaches with Java or Python
|
|
81
|
+
|
|
82
|
+
## Project Setup Checklist
|
|
83
|
+
|
|
84
|
+
Before starting any TypeScript project:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
- [ ] Use pnpm for package management (faster, disk-efficient)
|
|
88
|
+
- [ ] Configure ESM-first (type: "module" in package.json)
|
|
89
|
+
- [ ] Enable strict mode in tsconfig.json
|
|
90
|
+
- [ ] Set up ESLint with @typescript-eslint
|
|
91
|
+
- [ ] Add Prettier for consistent formatting
|
|
92
|
+
- [ ] Configure Vitest for testing
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Type System Quick Reference
|
|
96
|
+
|
|
97
|
+
### Primitive Types
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
const name: string = 'Alice'
|
|
101
|
+
const age: number = 30
|
|
102
|
+
const active: boolean = true
|
|
103
|
+
const id: bigint = 9007199254740991n
|
|
104
|
+
const key: symbol = Symbol('unique')
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Union and Intersection Types
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// Union: value can be one of several types
|
|
111
|
+
type Status = 'pending' | 'approved' | 'rejected'
|
|
112
|
+
|
|
113
|
+
// Intersection: value must satisfy all types
|
|
114
|
+
type Employee = Person & { employeeId: string }
|
|
115
|
+
|
|
116
|
+
// Discriminated union for type-safe handling
|
|
117
|
+
type Result<T> = { success: true; data: T } | { success: false; error: string }
|
|
118
|
+
|
|
119
|
+
function handleResult<T>(result: Result<T>): T | null {
|
|
120
|
+
if (result.success) {
|
|
121
|
+
return result.data // TypeScript knows data exists here
|
|
122
|
+
}
|
|
123
|
+
console.error(result.error)
|
|
124
|
+
return null
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Type Guards
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
// typeof guard
|
|
132
|
+
function process(value: string | number): string {
|
|
133
|
+
if (typeof value === 'string') {
|
|
134
|
+
return value.toUpperCase()
|
|
135
|
+
}
|
|
136
|
+
return value.toFixed(2)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Custom type guard
|
|
140
|
+
interface User {
|
|
141
|
+
type: 'user'
|
|
142
|
+
name: string
|
|
143
|
+
}
|
|
144
|
+
interface Admin {
|
|
145
|
+
type: 'admin'
|
|
146
|
+
permissions: string[]
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function isAdmin(person: User | Admin): person is Admin {
|
|
150
|
+
return person.type === 'admin'
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### The `satisfies` Operator (TS 5.0+)
|
|
155
|
+
|
|
156
|
+
Validate type conformance while preserving inference:
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
// Problem: Type assertion loses specific type info
|
|
160
|
+
const colors1 = {
|
|
161
|
+
red: '#ff0000',
|
|
162
|
+
green: '#00ff00',
|
|
163
|
+
} as Record<string, string>
|
|
164
|
+
|
|
165
|
+
colors1.red.toUpperCase() // OK, but red could be undefined
|
|
166
|
+
|
|
167
|
+
// Solution: satisfies preserves literal types
|
|
168
|
+
const colors2 = {
|
|
169
|
+
red: '#ff0000',
|
|
170
|
+
green: '#00ff00',
|
|
171
|
+
} satisfies Record<string, string>
|
|
172
|
+
|
|
173
|
+
colors2.red.toUpperCase() // OK, and TypeScript knows red exists
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Generics Patterns
|
|
177
|
+
|
|
178
|
+
### Basic Generic Function
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
function first<T>(items: T[]): T | undefined {
|
|
182
|
+
return items[0]
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const num = first([1, 2, 3]) // number | undefined
|
|
186
|
+
const str = first(['a', 'b']) // string | undefined
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Constrained Generics
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
interface HasLength {
|
|
193
|
+
length: number
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function logLength<T extends HasLength>(item: T): T {
|
|
197
|
+
console.log(item.length)
|
|
198
|
+
return item
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
logLength('hello') // OK: string has length
|
|
202
|
+
logLength([1, 2, 3]) // OK: array has length
|
|
203
|
+
logLength(42) // Error: number has no length
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Generic API Response Wrapper
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
interface ApiResponse<T> {
|
|
210
|
+
data: T
|
|
211
|
+
status: number
|
|
212
|
+
timestamp: Date
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async function fetchUser(id: string): Promise<ApiResponse<User>> {
|
|
216
|
+
const response = await fetch(`/api/users/${id}`)
|
|
217
|
+
const data = await response.json()
|
|
218
|
+
return {
|
|
219
|
+
data,
|
|
220
|
+
status: response.status,
|
|
221
|
+
timestamp: new Date(),
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Utility Types Reference
|
|
227
|
+
|
|
228
|
+
| Type | Purpose | Example |
|
|
229
|
+
| --------------- | ----------------------------- | ---------------------------- |
|
|
230
|
+
| `Partial<T>` | All properties optional | `Partial<User>` |
|
|
231
|
+
| `Required<T>` | All properties required | `Required<Config>` |
|
|
232
|
+
| `Pick<T, K>` | Select specific properties | `Pick<User, "id" \| "name">` |
|
|
233
|
+
| `Omit<T, K>` | Exclude specific properties | `Omit<User, "password">` |
|
|
234
|
+
| `Record<K, V>` | Object with typed keys/values | `Record<string, number>` |
|
|
235
|
+
| `ReturnType<F>` | Extract function return type | `ReturnType<typeof fn>` |
|
|
236
|
+
| `Parameters<F>` | Extract function parameters | `Parameters<typeof fn>` |
|
|
237
|
+
| `Awaited<T>` | Unwrap Promise type | `Awaited<Promise<User>>` |
|
|
238
|
+
|
|
239
|
+
## Conditional Types
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
// Basic conditional type
|
|
243
|
+
type IsString<T> = T extends string ? true : false
|
|
244
|
+
|
|
245
|
+
// Extract array element type
|
|
246
|
+
type ArrayElement<T> = T extends (infer E)[] ? E : never
|
|
247
|
+
|
|
248
|
+
type Numbers = ArrayElement<number[]> // number
|
|
249
|
+
type Strings = ArrayElement<string[]> // string
|
|
250
|
+
|
|
251
|
+
// Practical: Extract Promise result type
|
|
252
|
+
type UnwrapPromise<T> = T extends Promise<infer R> ? R : T
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Mapped Types
|
|
256
|
+
|
|
257
|
+
```typescript
|
|
258
|
+
// Make all properties readonly
|
|
259
|
+
type Immutable<T> = {
|
|
260
|
+
readonly [K in keyof T]: T[K]
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Make all properties nullable
|
|
264
|
+
type Nullable<T> = {
|
|
265
|
+
[K in keyof T]: T[K] | null
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Create getter functions for each property
|
|
269
|
+
type Getters<T> = {
|
|
270
|
+
[K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
interface Person {
|
|
274
|
+
name: string
|
|
275
|
+
age: number
|
|
276
|
+
}
|
|
277
|
+
type PersonGetters = Getters<Person>
|
|
278
|
+
// { getName: () => string; getAge: () => number }
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Framework Integration
|
|
282
|
+
|
|
283
|
+
### React with TypeScript
|
|
284
|
+
|
|
285
|
+
```typescript
|
|
286
|
+
// Typed functional component
|
|
287
|
+
interface ButtonProps {
|
|
288
|
+
label: string;
|
|
289
|
+
onClick: () => void;
|
|
290
|
+
variant?: "primary" | "secondary";
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const Button: React.FC<ButtonProps> = ({ label, onClick, variant = "primary" }) => (
|
|
294
|
+
<button className={variant} onClick={onClick}>
|
|
295
|
+
{label}
|
|
296
|
+
</button>
|
|
297
|
+
);
|
|
298
|
+
|
|
299
|
+
// Typed hooks
|
|
300
|
+
const [count, setCount] = useState<number>(0);
|
|
301
|
+
const userRef = useRef<HTMLInputElement>(null);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### NestJS with TypeScript
|
|
305
|
+
|
|
306
|
+
```typescript
|
|
307
|
+
// Type-safe DTO with class-validator
|
|
308
|
+
import { IsString, IsEmail, MinLength } from 'class-validator'
|
|
309
|
+
|
|
310
|
+
class CreateUserDto {
|
|
311
|
+
@IsString()
|
|
312
|
+
@MinLength(2)
|
|
313
|
+
name: string
|
|
314
|
+
|
|
315
|
+
@IsEmail()
|
|
316
|
+
email: string
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// Or with Zod (modern approach)
|
|
320
|
+
import { z } from 'zod'
|
|
321
|
+
|
|
322
|
+
const CreateUserSchema = z.object({
|
|
323
|
+
name: z.string().min(2),
|
|
324
|
+
email: z.string().email(),
|
|
325
|
+
})
|
|
326
|
+
|
|
327
|
+
type CreateUserDto = z.infer<typeof CreateUserSchema>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
See [react-integration.md](references/react-integration.md) and [nestjs-integration.md](references/nestjs-integration.md) for detailed patterns.
|
|
331
|
+
|
|
332
|
+
## Validation with Zod
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
import { z } from 'zod'
|
|
336
|
+
|
|
337
|
+
// Define schema
|
|
338
|
+
const UserSchema = z.object({
|
|
339
|
+
id: z.string().uuid(),
|
|
340
|
+
name: z.string().min(1).max(100),
|
|
341
|
+
email: z.string().email(),
|
|
342
|
+
role: z.enum(['user', 'admin', 'moderator']),
|
|
343
|
+
createdAt: z.coerce.date(),
|
|
344
|
+
})
|
|
345
|
+
|
|
346
|
+
// Infer TypeScript type from schema
|
|
347
|
+
type User = z.infer<typeof UserSchema>
|
|
348
|
+
|
|
349
|
+
// Validate at runtime
|
|
350
|
+
function parseUser(data: unknown): User {
|
|
351
|
+
return UserSchema.parse(data) // Throws ZodError if invalid
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Safe parsing (returns result object)
|
|
355
|
+
const result = UserSchema.safeParse(data)
|
|
356
|
+
if (result.success) {
|
|
357
|
+
console.log(result.data) // Typed as User
|
|
358
|
+
} else {
|
|
359
|
+
console.error(result.error.issues)
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
## Modern Toolchain (2025)
|
|
364
|
+
|
|
365
|
+
| Tool | Version | Purpose |
|
|
366
|
+
| ---------- | ------- | ----------------------------- |
|
|
367
|
+
| TypeScript | 6.0+ | Type checking and compilation |
|
|
368
|
+
| Node.js | 25.3+ | Runtime environment |
|
|
369
|
+
| Vite | 7.x | Build tool and dev server |
|
|
370
|
+
| pnpm | 9.x | Package manager |
|
|
371
|
+
| ESLint | 9.x | Linting with flat config |
|
|
372
|
+
| Vitest | 3.x | Testing framework |
|
|
373
|
+
| Prettier | 3.x | Code formatting |
|
|
374
|
+
|
|
375
|
+
### ESLint Flat Config (ESLint 9+)
|
|
376
|
+
|
|
377
|
+
```javascript
|
|
378
|
+
// eslint.config.js
|
|
379
|
+
import eslint from '@eslint/js'
|
|
380
|
+
import tseslint from 'typescript-eslint'
|
|
381
|
+
|
|
382
|
+
export default tseslint.config(eslint.configs.recommended, ...tseslint.configs.strictTypeChecked, {
|
|
383
|
+
languageOptions: {
|
|
384
|
+
parserOptions: {
|
|
385
|
+
projectService: true,
|
|
386
|
+
tsconfigRootDir: import.meta.dirname,
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
})
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## Migration Strategies
|
|
393
|
+
|
|
394
|
+
### Incremental Migration
|
|
395
|
+
|
|
396
|
+
1. Add `allowJs: true` and `checkJs: false` to tsconfig.json
|
|
397
|
+
2. Rename files from `.js` to `.ts` one at a time
|
|
398
|
+
3. Add type annotations gradually
|
|
399
|
+
4. Enable stricter options incrementally
|
|
400
|
+
|
|
401
|
+
### JSDoc for Gradual Typing
|
|
402
|
+
|
|
403
|
+
```javascript
|
|
404
|
+
// Before full migration, use JSDoc
|
|
405
|
+
/**
|
|
406
|
+
* @param {string} name
|
|
407
|
+
* @param {number} age
|
|
408
|
+
* @returns {User}
|
|
409
|
+
*/
|
|
410
|
+
function createUser(name, age) {
|
|
411
|
+
return { name, age }
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
See [enterprise-patterns.md](references/enterprise-patterns.md) for comprehensive migration guides.
|
|
416
|
+
|
|
417
|
+
## Common Mistakes
|
|
418
|
+
|
|
419
|
+
| Mistake | Problem | Fix |
|
|
420
|
+
| ----------------------- | -------------------------- | -------------------------- |
|
|
421
|
+
| Using `any` liberally | Defeats type safety | Use `unknown` and narrow |
|
|
422
|
+
| Ignoring strict mode | Misses null/undefined bugs | Enable all strict options |
|
|
423
|
+
| Type assertions (`as`) | Can hide type errors | Use `satisfies` or guards |
|
|
424
|
+
| Enum for simple unions | Generates runtime code | Use literal unions instead |
|
|
425
|
+
| Not validating API data | Runtime type mismatches | Use Zod at boundaries |
|
|
426
|
+
|
|
427
|
+
## Cross-Language Comparison
|
|
428
|
+
|
|
429
|
+
| Feature | TypeScript | Java | Python |
|
|
430
|
+
| ----------- | ---------------------- | ----------------------- | --------------------- |
|
|
431
|
+
| Type System | Structural | Nominal | Gradual (duck typing) |
|
|
432
|
+
| Nullability | Explicit (`T \| null`) | `@Nullable` annotations | Optional via typing |
|
|
433
|
+
| Generics | Type-level, erased | Type-level, erased | Runtime via typing |
|
|
434
|
+
| Interfaces | Structural matching | Must implement | Protocol (3.8+) |
|
|
435
|
+
| Enums | Avoid (use unions) | First-class | Enum class |
|
|
436
|
+
|
|
437
|
+
## Reference Files
|
|
438
|
+
|
|
439
|
+
- [type-system.md](references/type-system.md) — Complete type system guide
|
|
440
|
+
- [generics.md](references/generics.md) — Advanced generics patterns
|
|
441
|
+
- [enterprise-patterns.md](references/enterprise-patterns.md) — Error handling, validation, architecture
|
|
442
|
+
- [react-integration.md](references/react-integration.md) — React + TypeScript patterns
|
|
443
|
+
- [nestjs-integration.md](references/nestjs-integration.md) — NestJS API development
|
|
444
|
+
- [toolchain.md](references/toolchain.md) — Modern build tools configuration
|
|
445
|
+
|
|
446
|
+
## Assets
|
|
447
|
+
|
|
448
|
+
- [tsconfig-template.json](assets/tsconfig-template.json) — Strict enterprise config
|
|
449
|
+
- [eslint-template.js](assets/eslint-template.js) — ESLint 9 flat config
|
|
450
|
+
|
|
451
|
+
## Scripts
|
|
452
|
+
|
|
453
|
+
- [validate-setup.sh](scripts/validate-setup.sh) — Verify TypeScript environment
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: vercel-ai-sdk
|
|
3
|
+
description: |
|
|
4
|
+
Vercel AI SDK best practices and patterns. Use when building AI applications with React/Next.js and `@ai-sdk/react`, `@ai-sdk/core`, or `@ai-sdk/ui`. Covers `useChat`, `streamText`, `generateObject`, tool calling, and streaming architectures. SECURITY: Never pass raw user inputs to executable tools without strict Zod schema validation.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Vercel AI SDK Guidelines
|
|
8
|
+
|
|
9
|
+
The Vercel AI SDK is the de facto standard for building streaming AI applications in TypeScript and React.
|
|
10
|
+
|
|
11
|
+
## 1. Core API (`@ai-sdk/core`)
|
|
12
|
+
|
|
13
|
+
- **Text Generation**: Use `streamText` for any user-facing chat or text response to minimize perceived latency. Only use `generateText` for background tasks where the user is not waiting for a real-time response.
|
|
14
|
+
- **Structured Outputs**: Use `streamObject` or `generateObject` paired with Zod schemas to guarantee type-safe JSON outputs. Never prompt the model manually to "return JSON".
|
|
15
|
+
- **Tool Calling**: Define tools using the `tool()` helper with strict Zod schemas.
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
import { streamText, tool } from 'ai'
|
|
19
|
+
import { z } from 'zod'
|
|
20
|
+
|
|
21
|
+
const result = streamText({
|
|
22
|
+
model: myModel,
|
|
23
|
+
messages,
|
|
24
|
+
tools: {
|
|
25
|
+
weather: tool({
|
|
26
|
+
description: 'Get the weather in a location',
|
|
27
|
+
parameters: z.object({ location: z.string() }),
|
|
28
|
+
execute: async ({ location }) => fetchWeather(location),
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
})
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 2. UI Hooks (`@ai-sdk/react`)
|
|
35
|
+
|
|
36
|
+
- **`useChat`**: The primary hook for conversational interfaces. It automatically manages message history, streaming state, and tool invocations.
|
|
37
|
+
- **Error Handling**: Implement the `onError` callback in `useChat` to gracefully handle API rate limits or network failures.
|
|
38
|
+
- **Data Streaming**: Use the `data` property exported from `useChat` to stream auxiliary data (like tool execution metadata or citations) alongside the main text stream.
|
|
39
|
+
|
|
40
|
+
## 3. Server Actions & Next.js Integration
|
|
41
|
+
|
|
42
|
+
- **App Router**: When using Next.js App Router, implement Route Handlers (`app/api/chat/route.ts`) that return `result.toDataStreamResponse()` for seamless streaming to `useChat`.
|
|
43
|
+
- **RSC (React Server Components)**: For generative UI, use the `ai/rsc` module to stream React components directly from the server to the client.
|
|
44
|
+
|
|
45
|
+
## 4. Security & Safety
|
|
46
|
+
|
|
47
|
+
- **Rate Limiting**: Always apply rate limiting to your chat endpoints, as LLM APIs are expensive and vulnerable to abuse.
|
|
48
|
+
- **Provider API Keys**: Ensure `OPENAI_API_KEY` (or equivalent) is strictly kept server-side. Never expose these keys to the client.
|
|
@@ -3,8 +3,9 @@ name: vitest-standard
|
|
|
3
3
|
description: |
|
|
4
4
|
Comprehensive unit testing expertise covering Vitest, test-driven
|
|
5
5
|
development (TDD), mocking strategies, and production-grade best practices.
|
|
6
|
-
Activates for unit testing, Vitest, TDD, Red-Green-Refactor, mocking,
|
|
7
|
-
stubbing, spying, test coverage, and test architecture in TypeScript/Node projects.
|
|
6
|
+
Activates ONLY for unit testing scope (unit tests, integration tests, Vitest, TDD, Red-Green-Refactor, mocking,
|
|
7
|
+
stubbing, spying, test coverage, and test architecture in TypeScript/Node projects). NOT for E2E testing (use Playwright).
|
|
8
|
+
If the user asks to "write tests" without specifying the type, you MUST ask "Unit, E2E, or both?" before proceeding.
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
# Vitest Standard
|
|
@@ -23,6 +24,7 @@ This skill provides opinionated, production-tested guidance for high-integrity u
|
|
|
23
24
|
8. **Meaningful Names** — Use `it('should [action] when [condition]')` or Given-When-Then.
|
|
24
25
|
9. **Mock at Boundaries** — Mock external APIs, databases, and third-party SDKs; test your own logic.
|
|
25
26
|
10. **Red-Green-Refactor** — Prefer writing tests before code to drive API design.
|
|
27
|
+
11. **Security** — Use fake/mock credentials in all tests — never real API keys, tokens, or passwords. Load sensitive test config from `.env.test.local` (gitignored).
|
|
26
28
|
|
|
27
29
|
## Core Patterns
|
|
28
30
|
|
|
@@ -56,15 +58,7 @@ it('mocks dependencies', () => {
|
|
|
56
58
|
|
|
57
59
|
## Quick Reference: Assertions
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
| :----------------------- | :----------------------------- |
|
|
61
|
-
| `toBe(val)` | Strict equality (`===`) |
|
|
62
|
-
| `toEqual(val)` | Deep equality (objects/arrays) |
|
|
63
|
-
| `toMatchObject(obj)` | Partial match on an object |
|
|
64
|
-
| `toThrow(error?)` | Validates a thrown error |
|
|
65
|
-
| `toHaveBeenCalledWith()` | Verifies mock call arguments |
|
|
66
|
-
| `resolves.toEqual()` | Validates a fulfilled promise |
|
|
67
|
-
| `rejects.toThrow()` | Validates a rejected promise |
|
|
61
|
+
See **[assertions.md](references/assertions.md)** for a full list of Vitest assertions (`toBe`, `toEqual`, `toThrow`, etc.). This reference is auto-loaded only when writing test assertions.
|
|
68
62
|
|
|
69
63
|
---
|
|
70
64
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Vitest Assertions Quick Reference
|
|
2
|
+
|
|
3
|
+
| Assertion | Purpose |
|
|
4
|
+
| :----------------------- | :----------------------------- |
|
|
5
|
+
| `toBe(val)` | Strict equality (`===`) |
|
|
6
|
+
| `toEqual(val)` | Deep equality (objects/arrays) |
|
|
7
|
+
| `toMatchObject(obj)` | Partial match on an object |
|
|
8
|
+
| `toThrow(error?)` | Validates a thrown error |
|
|
9
|
+
| `toHaveBeenCalledWith()` | Verifies mock call arguments |
|
|
10
|
+
| `resolves.toEqual()` | Validates a fulfilled promise |
|
|
11
|
+
| `rejects.toThrow()` | Validates a rejected promise |
|