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,195 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
## Agent Classes
|
|
4
|
+
|
|
5
|
+
### AIChatAgent
|
|
6
|
+
|
|
7
|
+
For AI chat with auto-streaming, message history, tools, resumable streaming.
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { AIChatAgent } from 'agents'
|
|
11
|
+
import { openai } from '@ai-sdk/openai'
|
|
12
|
+
|
|
13
|
+
export class ChatAgent extends AIChatAgent<Env> {
|
|
14
|
+
async onChatMessage(onFinish) {
|
|
15
|
+
return this.streamText({
|
|
16
|
+
model: openai('gpt-4'),
|
|
17
|
+
messages: this.messages, // Auto-managed message history
|
|
18
|
+
tools: {
|
|
19
|
+
getWeather: {
|
|
20
|
+
description: 'Get weather',
|
|
21
|
+
parameters: z.object({ city: z.string() }),
|
|
22
|
+
execute: async ({ city }) => `Sunny, 72°F in ${city}`,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
onFinish, // Persist response to this.messages
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Agent (Base Class)
|
|
32
|
+
|
|
33
|
+
Full control for custom logic, WebSockets, email, and SQL.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import { Agent } from 'agents'
|
|
37
|
+
|
|
38
|
+
export class MyAgent extends Agent<Env, State> {
|
|
39
|
+
// Lifecycle methods below
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Type params:** `Agent<Env, State, ConnState>` - Env bindings, agent state, connection state
|
|
44
|
+
|
|
45
|
+
## Lifecycle Hooks
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
onStart() { // Init/restart
|
|
49
|
+
this.sql`CREATE TABLE IF NOT EXISTS users (id TEXT, name TEXT)`;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async onRequest(req: Request) { // HTTP
|
|
53
|
+
const {pathname} = new URL(req.url);
|
|
54
|
+
if (pathname === "/users") return Response.json(this.sql<{id,name}>`SELECT * FROM users`);
|
|
55
|
+
return new Response("Not found", {status: 404});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async onConnect(conn: Connection<ConnState>, ctx: ConnectionContext) { // WebSocket
|
|
59
|
+
conn.accept();
|
|
60
|
+
conn.setState({userId: ctx.request.headers.get("X-User-ID")});
|
|
61
|
+
conn.send(JSON.stringify({type: "connected", state: this.state}));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async onMessage(conn: Connection<ConnState>, msg: WSMessage) { // WS messages
|
|
65
|
+
const m = JSON.parse(msg as string);
|
|
66
|
+
this.setState({messages: [...this.state.messages, m]});
|
|
67
|
+
this.connections.forEach(c => c.send(JSON.stringify(m)));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
async onEmail(email: AgentEmail) { // Email routing
|
|
71
|
+
this.sql`INSERT INTO emails (from_addr,subject,body) VALUES (${email.from},${email.headers.get("subject")},${await email.text()})`;
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## State, SQL, Scheduling
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
// State
|
|
79
|
+
this.setState({ count: 42 }) // Auto-syncs
|
|
80
|
+
this.setState({ ...this.state, count: this.state.count + 1 })
|
|
81
|
+
|
|
82
|
+
// SQL (parameterized queries prevent injection)
|
|
83
|
+
this.sql`CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, name TEXT)`
|
|
84
|
+
this.sql`INSERT INTO users (id,name) VALUES (${userId},${name})`
|
|
85
|
+
const users = this.sql<{ id; name }>`SELECT * FROM users WHERE id = ${userId}`
|
|
86
|
+
|
|
87
|
+
// Scheduling
|
|
88
|
+
await this.schedule(new Date('2026-12-25'), 'sendGreeting', { msg: 'Hi' }) // Date
|
|
89
|
+
await this.schedule(60, 'checkStatus', {}) // Delay (sec)
|
|
90
|
+
await this.schedule('0 0 * * *', 'dailyCleanup', {}) // Cron
|
|
91
|
+
await this.cancelSchedule(scheduleId)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## RPC Methods (@callable)
|
|
95
|
+
|
|
96
|
+
```ts
|
|
97
|
+
import { Agent, callable } from 'agents'
|
|
98
|
+
|
|
99
|
+
export class MyAgent extends Agent<Env> {
|
|
100
|
+
@callable()
|
|
101
|
+
async processTask(input: { text: string }): Promise<{ result: string }> {
|
|
102
|
+
return {
|
|
103
|
+
result: await this.env.AI.run('@cf/meta/llama-3.1-8b-instruct', { prompt: input.text }),
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Client: const result = await agent.processTask({ text: "Hello" });
|
|
108
|
+
// Must return JSON-serializable values
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Connections & AI
|
|
112
|
+
|
|
113
|
+
```ts
|
|
114
|
+
// Connections (type: Agent<Env, State, ConnState>)
|
|
115
|
+
this.connections.forEach((c) => c.send(JSON.stringify(msg))) // Broadcast
|
|
116
|
+
conn.setState({ userId: '123' })
|
|
117
|
+
conn.close(1000, 'Goodbye')
|
|
118
|
+
|
|
119
|
+
// Workers AI
|
|
120
|
+
const r = await this.env.AI.run('@cf/meta/llama-3.1-8b-instruct', { prompt })
|
|
121
|
+
|
|
122
|
+
// Manual streaming (prefer AIChatAgent)
|
|
123
|
+
const stream = await client.chat.completions.create({ model: 'gpt-4', messages, stream: true })
|
|
124
|
+
for await (const chunk of stream)
|
|
125
|
+
conn.send(JSON.stringify({ chunk: chunk.choices[0].delta.content }))
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Type-safe state:** `Agent<Env, State, ConnState>` - third param types `conn.state`
|
|
129
|
+
|
|
130
|
+
## MCP Integration
|
|
131
|
+
|
|
132
|
+
Model Context Protocol for exposing tools:
|
|
133
|
+
|
|
134
|
+
```ts
|
|
135
|
+
// Register & use MCP server
|
|
136
|
+
await this.mcp.registerServer('github', {
|
|
137
|
+
url: env.MCP_SERVER_URL,
|
|
138
|
+
auth: { type: 'oauth', clientId: env.GITHUB_CLIENT_ID, clientSecret: env.GITHUB_CLIENT_SECRET },
|
|
139
|
+
})
|
|
140
|
+
const tools = await this.mcp.getAITools(['github'])
|
|
141
|
+
return this.streamText({ model: openai('gpt-4'), messages: this.messages, tools, onFinish })
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Task Queue
|
|
145
|
+
|
|
146
|
+
```ts
|
|
147
|
+
await this.queue('processVideo', { videoId: 'abc123' }) // Add task
|
|
148
|
+
const tasks = await this.dequeue(10) // Process up to 10
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Context & Cleanup
|
|
152
|
+
|
|
153
|
+
```ts
|
|
154
|
+
const agent = getCurrentAgent<MyAgent>(); // Get current instance
|
|
155
|
+
async destroy() { /* cleanup before agent destroyed */ }
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## AI Integration
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
// Workers AI
|
|
162
|
+
const r = await this.env.AI.run('@cf/meta/llama-3.1-8b-instruct', { prompt })
|
|
163
|
+
|
|
164
|
+
// Manual streaming (prefer AIChatAgent for auto-streaming)
|
|
165
|
+
const stream = await client.chat.completions.create({ model: 'gpt-4', messages, stream: true })
|
|
166
|
+
for await (const chunk of stream) {
|
|
167
|
+
if (chunk.choices[0]?.delta?.content)
|
|
168
|
+
conn.send(JSON.stringify({ chunk: chunk.choices[0].delta.content }))
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Client Hooks (React)
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
// useAgent() - WebSocket connection + RPC
|
|
176
|
+
import { useAgent } from 'agents/react'
|
|
177
|
+
const agent = useAgent({ agent: 'MyAgent', name: 'user-123' }) // name for idFromName
|
|
178
|
+
const result = await agent.processTask({ text: 'Hello' }) // Call @callable methods
|
|
179
|
+
// agent.readyState: 0=CONNECTING, 1=OPEN, 2=CLOSING, 3=CLOSED
|
|
180
|
+
|
|
181
|
+
// useAgentChat() - AI chat UI
|
|
182
|
+
import { useAgentChat } from 'agents/ai-react'
|
|
183
|
+
const agent = useAgent({ agent: 'ChatAgent' })
|
|
184
|
+
const { messages, input, handleInputChange, handleSubmit, isLoading, stop, clearHistory } =
|
|
185
|
+
useAgentChat({
|
|
186
|
+
agent,
|
|
187
|
+
maxSteps: 5, // Max tool iterations
|
|
188
|
+
resume: true, // Auto-resume on disconnect
|
|
189
|
+
onToolCall: async (toolCall) => {
|
|
190
|
+
// Client tools (human-in-the-loop)
|
|
191
|
+
if (toolCall.toolName === 'confirm') return { ok: window.confirm('Proceed?') }
|
|
192
|
+
},
|
|
193
|
+
})
|
|
194
|
+
// status: "ready" | "submitted" | "streaming" | "error"
|
|
195
|
+
```
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
## Wrangler Setup
|
|
4
|
+
|
|
5
|
+
```jsonc
|
|
6
|
+
{
|
|
7
|
+
"name": "my-agents-app",
|
|
8
|
+
"durable_objects": {
|
|
9
|
+
"bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }],
|
|
10
|
+
},
|
|
11
|
+
"migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }],
|
|
12
|
+
"ai": {
|
|
13
|
+
"binding": "AI",
|
|
14
|
+
},
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Environment Bindings
|
|
19
|
+
|
|
20
|
+
**Type-safe pattern:**
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
interface Env {
|
|
24
|
+
AI?: Ai // Workers AI
|
|
25
|
+
MyAgent?: DurableObjectNamespace<MyAgent>
|
|
26
|
+
ChatAgent?: DurableObjectNamespace<ChatAgent>
|
|
27
|
+
DB?: D1Database // D1 database
|
|
28
|
+
KV?: KVNamespace // KV storage
|
|
29
|
+
R2?: R2Bucket // R2 bucket
|
|
30
|
+
OPENAI_API_KEY?: string // Secrets
|
|
31
|
+
GITHUB_CLIENT_ID?: string // MCP OAuth credentials
|
|
32
|
+
GITHUB_CLIENT_SECRET?: string
|
|
33
|
+
QUEUE?: Queue // Queues
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Best practice:** Define all DO bindings in Env interface for type safety.
|
|
38
|
+
|
|
39
|
+
## Deployment
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Local dev
|
|
43
|
+
npx wrangler dev
|
|
44
|
+
|
|
45
|
+
# Deploy production
|
|
46
|
+
npx wrangler deploy
|
|
47
|
+
|
|
48
|
+
# Set secrets
|
|
49
|
+
npx wrangler secret put OPENAI_API_KEY
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Agent Routing
|
|
53
|
+
|
|
54
|
+
**Recommended: Use route helpers**
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { routeAgent } from 'agents'
|
|
58
|
+
|
|
59
|
+
export default {
|
|
60
|
+
fetch(request: Request, env: Env) {
|
|
61
|
+
return routeAgent(request, env)
|
|
62
|
+
},
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Helper routes requests to agents automatically based on URL patterns.
|
|
67
|
+
|
|
68
|
+
**Manual routing (advanced):**
|
|
69
|
+
|
|
70
|
+
```typescript
|
|
71
|
+
export default {
|
|
72
|
+
async fetch(request: Request, env: Env) {
|
|
73
|
+
const url = new URL(request.url)
|
|
74
|
+
|
|
75
|
+
// Named ID (deterministic)
|
|
76
|
+
const id = env.MyAgent.idFromName('user-123')
|
|
77
|
+
|
|
78
|
+
// Random ID (from URL param)
|
|
79
|
+
// const id = env.MyAgent.idFromString(url.searchParams.get("id"));
|
|
80
|
+
|
|
81
|
+
const stub = env.MyAgent.get(id)
|
|
82
|
+
return stub.fetch(request)
|
|
83
|
+
},
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Multi-agent setup:**
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { routeAgent } from 'agents'
|
|
91
|
+
|
|
92
|
+
export default {
|
|
93
|
+
fetch(request: Request, env: Env) {
|
|
94
|
+
const url = new URL(request.url)
|
|
95
|
+
|
|
96
|
+
// Route by path
|
|
97
|
+
if (url.pathname.startsWith('/chat')) {
|
|
98
|
+
return routeAgent(request, env, 'ChatAgent')
|
|
99
|
+
}
|
|
100
|
+
if (url.pathname.startsWith('/task')) {
|
|
101
|
+
return routeAgent(request, env, 'TaskAgent')
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return new Response('Not found', { status: 404 })
|
|
105
|
+
},
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Email Routing
|
|
110
|
+
|
|
111
|
+
**Code setup:**
|
|
112
|
+
|
|
113
|
+
```typescript
|
|
114
|
+
import { routeAgentEmail } from 'agents'
|
|
115
|
+
|
|
116
|
+
export default {
|
|
117
|
+
fetch: (req: Request, env: Env) => routeAgent(req, env),
|
|
118
|
+
email: (message: ForwardableEmailMessage, env: Env) => {
|
|
119
|
+
return routeAgentEmail(message, env)
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Dashboard setup:**
|
|
125
|
+
|
|
126
|
+
Configure email routing in Cloudflare dashboard:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
Destination: Workers with Durable Objects
|
|
130
|
+
Worker: my-agents-app
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Then handle in agent:
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
export class EmailAgent extends Agent<Env> {
|
|
137
|
+
async onEmail(email: AgentEmail) {
|
|
138
|
+
const text = await email.text()
|
|
139
|
+
// Process email
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## AI Gateway (Optional)
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// Enable caching/routing through AI Gateway
|
|
148
|
+
const response = await this.env.AI.run(
|
|
149
|
+
'@cf/meta/llama-3.1-8b-instruct',
|
|
150
|
+
{ prompt },
|
|
151
|
+
{
|
|
152
|
+
gateway: {
|
|
153
|
+
id: 'my-gateway-id',
|
|
154
|
+
skipCache: false,
|
|
155
|
+
cacheTtl: 3600,
|
|
156
|
+
},
|
|
157
|
+
}
|
|
158
|
+
)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## MCP Configuration (Optional)
|
|
162
|
+
|
|
163
|
+
For exposing tools via Model Context Protocol:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
// wrangler.jsonc - Add MCP OAuth secrets
|
|
167
|
+
{
|
|
168
|
+
"vars": {
|
|
169
|
+
"MCP_SERVER_URL": "https://mcp.example.com"
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// Set secrets via CLI
|
|
174
|
+
// npx wrangler secret put GITHUB_CLIENT_ID
|
|
175
|
+
// npx wrangler secret put GITHUB_CLIENT_SECRET
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Then register in agent code (see api.md MCP section).
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# Gotchas & Best Practices
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
### "setState() not syncing"
|
|
6
|
+
|
|
7
|
+
**Cause:** Mutating state directly or not calling `setState()` after modifications
|
|
8
|
+
**Solution:** Always use `setState()` with immutable updates:
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
// ❌ this.state.count++
|
|
12
|
+
// ✅ this.setState({...this.state, count: this.state.count + 1})
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### "Message history grows unbounded (AIChatAgent)"
|
|
16
|
+
|
|
17
|
+
**Cause:** `this.messages` in `AIChatAgent` accumulates all messages indefinitely
|
|
18
|
+
**Solution:** Manually trim old messages periodically:
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
export class ChatAgent extends AIChatAgent<Env> {
|
|
22
|
+
async onChatMessage(onFinish) {
|
|
23
|
+
// Keep only last 50 messages
|
|
24
|
+
if (this.messages.length > 50) {
|
|
25
|
+
this.messages = this.messages.slice(-50)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return this.streamText({ model: openai('gpt-4'), messages: this.messages, onFinish })
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### "SQL injection vulnerability"
|
|
34
|
+
|
|
35
|
+
**Cause:** Direct string interpolation in SQL queries
|
|
36
|
+
**Solution:** Use parameterized queries:
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
// ❌ this.sql`...WHERE id = '${userId}'`
|
|
40
|
+
// ✅ this.sql`...WHERE id = ${userId}`
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### "WebSocket connection timeout"
|
|
44
|
+
|
|
45
|
+
**Cause:** Not calling `conn.accept()` in `onConnect`
|
|
46
|
+
**Solution:** Always accept connections:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
async onConnect(conn: Connection, ctx: ConnectionContext) { conn.accept(); conn.setState({userId: "123"}); }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### "Schedule limit exceeded"
|
|
53
|
+
|
|
54
|
+
**Cause:** More than 1000 scheduled tasks per agent
|
|
55
|
+
**Solution:** Clean up old schedules and limit creation rate:
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
async checkSchedules() { if ((await this.getSchedules()).length > 800) console.warn("Near limit!"); }
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### "AI Gateway unavailable"
|
|
62
|
+
|
|
63
|
+
**Cause:** AI service timeout or quota exceeded
|
|
64
|
+
**Solution:** Add error handling and fallbacks:
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
try {
|
|
68
|
+
return await this.env.AI.run(model, { prompt })
|
|
69
|
+
} catch (e) {
|
|
70
|
+
console.error('AI error:', e)
|
|
71
|
+
return { error: 'Unavailable' }
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### "@callable method returns undefined"
|
|
76
|
+
|
|
77
|
+
**Cause:** Method doesn't return JSON-serializable value, or has non-serializable types
|
|
78
|
+
**Solution:** Ensure return values are plain objects/arrays/primitives:
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
// ❌ Returns class instance
|
|
82
|
+
@callable()
|
|
83
|
+
async getData() { return new Date(); }
|
|
84
|
+
|
|
85
|
+
// ✅ Returns serializable object
|
|
86
|
+
@callable()
|
|
87
|
+
async getData() { return { timestamp: Date.now() }; }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### "Resumable stream not resuming"
|
|
91
|
+
|
|
92
|
+
**Cause:** Stream ID must be deterministic for resumption to work
|
|
93
|
+
**Solution:** Use AIChatAgent (automatic) or ensure consistent stream IDs:
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
// AIChatAgent handles this automatically
|
|
97
|
+
export class ChatAgent extends AIChatAgent<Env> {
|
|
98
|
+
// Resumption works out of the box
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### "MCP connection loss on hibernation"
|
|
103
|
+
|
|
104
|
+
**Cause:** MCP server connections don't survive hibernation
|
|
105
|
+
**Solution:** Re-register servers in `onStart()` or check connection status:
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
onStart() {
|
|
109
|
+
// Re-register MCP servers after hibernation
|
|
110
|
+
await this.mcp.registerServer("github", { url: env.MCP_URL, auth: {...} });
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### "Agent not found"
|
|
115
|
+
|
|
116
|
+
**Cause:** Durable Object binding missing or incorrect class name
|
|
117
|
+
**Solution:** Verify DO binding in wrangler.jsonc and class name matches
|
|
118
|
+
|
|
119
|
+
## Rate Limits & Quotas
|
|
120
|
+
|
|
121
|
+
| Resource/Limit | Value | Notes |
|
|
122
|
+
| ----------------------- | --------------------- | -------------------------------------------- |
|
|
123
|
+
| CPU per request | 30s (std), 300s (max) | Set in wrangler.jsonc |
|
|
124
|
+
| Memory per instance | 128MB | Shared with WebSockets |
|
|
125
|
+
| Storage per agent | 10GB | SQLite storage |
|
|
126
|
+
| Scheduled tasks | 1000 per agent | Monitor with `getSchedules()` |
|
|
127
|
+
| WebSocket connections | Unlimited | Within memory limits |
|
|
128
|
+
| SQL columns | 100 | Per table |
|
|
129
|
+
| SQL row size | 2MB | Key + value |
|
|
130
|
+
| WebSocket message | 32MiB | Max size |
|
|
131
|
+
| DO requests/sec | ~1000 | Per unique DO instance; rate limit if needed |
|
|
132
|
+
| AI Gateway (Workers AI) | Model-specific | Check dashboard for limits |
|
|
133
|
+
| MCP requests | Depends on server | Implement retry/backoff |
|
|
134
|
+
|
|
135
|
+
## Best Practices
|
|
136
|
+
|
|
137
|
+
### State Management
|
|
138
|
+
|
|
139
|
+
- Use immutable updates: `setState({...this.state, key: newValue})`
|
|
140
|
+
- Trim unbounded arrays (messages, logs) periodically
|
|
141
|
+
- Store large data in SQL, not state
|
|
142
|
+
|
|
143
|
+
### SQL Usage
|
|
144
|
+
|
|
145
|
+
- Create tables in `onStart()`, not `onRequest()`
|
|
146
|
+
- Use parameterized queries: `` sql`WHERE id = ${id}` `` (NOT `` sql`WHERE id = '${id}'` ``)
|
|
147
|
+
- Index frequently queried columns
|
|
148
|
+
|
|
149
|
+
### Scheduling
|
|
150
|
+
|
|
151
|
+
- Monitor schedule count: `await this.getSchedules()`
|
|
152
|
+
- Cancel completed tasks to stay under 1000 limit
|
|
153
|
+
- Use cron strings for recurring tasks
|
|
154
|
+
|
|
155
|
+
### WebSockets
|
|
156
|
+
|
|
157
|
+
- Always call `conn.accept()` in `onConnect()`
|
|
158
|
+
- Handle client disconnects gracefully
|
|
159
|
+
- Broadcast to `this.connections` efficiently
|
|
160
|
+
|
|
161
|
+
### AI Integration
|
|
162
|
+
|
|
163
|
+
- Use `AIChatAgent` for chat interfaces (auto-streaming, resumption)
|
|
164
|
+
- Trim message history to avoid token limits
|
|
165
|
+
- Handle AI errors with try/catch and fallbacks
|
|
166
|
+
|
|
167
|
+
### Production Deployment
|
|
168
|
+
|
|
169
|
+
- **Rate limiting:** Implement request throttling for high-traffic agents (>1000 req/s)
|
|
170
|
+
- **Monitoring:** Log critical errors, track schedule count, monitor storage usage
|
|
171
|
+
- **Graceful degradation:** Handle AI service outages with fallbacks
|
|
172
|
+
- **Message trimming:** Enforce max history length (e.g., 100 messages) in AIChatAgent
|
|
173
|
+
- **MCP reliability:** Re-register servers on hibernation, implement retry logic
|