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,206 @@
|
|
|
1
|
+
# RealtimeKit Gotchas & Troubleshooting
|
|
2
|
+
|
|
3
|
+
## Common Errors
|
|
4
|
+
|
|
5
|
+
### "Cannot connect to meeting"
|
|
6
|
+
|
|
7
|
+
**Cause:** Auth token invalid/expired, API credentials lack permissions, or network blocks WebRTC
|
|
8
|
+
**Solution:**
|
|
9
|
+
Verify token validity, check API token has **Realtime / Realtime Admin** permissions, enable TURN service for restrictive networks
|
|
10
|
+
|
|
11
|
+
### "No video/audio tracks"
|
|
12
|
+
|
|
13
|
+
**Cause:** Browser permissions not granted, video/audio not enabled, device in use, or device unavailable
|
|
14
|
+
**Solution:**
|
|
15
|
+
Request browser permissions explicitly, verify initialization config, use `meeting.self.getAllDevices()` to debug, close other apps using device
|
|
16
|
+
|
|
17
|
+
### "Participant count mismatched"
|
|
18
|
+
|
|
19
|
+
**Cause:** `meeting.participants` doesn't include `meeting.self`
|
|
20
|
+
**Solution:** Total count = `meeting.participants.joined.size() + 1`
|
|
21
|
+
|
|
22
|
+
### "Events not firing"
|
|
23
|
+
|
|
24
|
+
**Cause:** Listeners registered after actions, incorrect event name, or wrong namespace
|
|
25
|
+
**Solution:**
|
|
26
|
+
Register listeners before calling `meeting.join()`, check event names against docs, verify correct namespace
|
|
27
|
+
|
|
28
|
+
### "CORS errors in API calls"
|
|
29
|
+
|
|
30
|
+
**Cause:** Making REST API calls from client-side
|
|
31
|
+
**Solution:** All REST API calls **must** be server-side (Workers, backend). Never expose API tokens to clients.
|
|
32
|
+
|
|
33
|
+
### "Preset not applying"
|
|
34
|
+
|
|
35
|
+
**Cause:** Preset doesn't exist, name mismatch (case-sensitive), or participant created before preset
|
|
36
|
+
**Solution:**
|
|
37
|
+
Verify preset exists via Dashboard or API, check exact spelling and case, create preset before adding participants
|
|
38
|
+
|
|
39
|
+
### "Token reuse error"
|
|
40
|
+
|
|
41
|
+
**Cause:** Reusing participant tokens across sessions
|
|
42
|
+
**Solution:** Generate fresh token per session. Use refresh endpoint if token expires during session.
|
|
43
|
+
|
|
44
|
+
### "Video quality poor"
|
|
45
|
+
|
|
46
|
+
**Cause:** Insufficient bandwidth, resolution/bitrate too high, or CPU overload
|
|
47
|
+
**Solution:**
|
|
48
|
+
Lower `mediaConfiguration.video` resolution/frameRate, monitor network conditions, reduce participant count or grid size
|
|
49
|
+
|
|
50
|
+
### "Echo or audio feedback"
|
|
51
|
+
|
|
52
|
+
**Cause:** Multiple devices picking up same audio source
|
|
53
|
+
**Solution:**
|
|
54
|
+
|
|
55
|
+
- Lower `mediaConfiguration.video` resolution/frameRate
|
|
56
|
+
- Monitor network conditions
|
|
57
|
+
- Reduce participant count or grid size
|
|
58
|
+
|
|
59
|
+
### Issue: Echo or audio feedback
|
|
60
|
+
|
|
61
|
+
**Cause**: Multiple devices picking up same audio source
|
|
62
|
+
|
|
63
|
+
**Solutions**:
|
|
64
|
+
Enable `echoCancellation: true` in `mediaConfiguration.audio`, use headphones, mute when not speaking
|
|
65
|
+
|
|
66
|
+
### "Screen share not working"
|
|
67
|
+
|
|
68
|
+
**Cause:** Browser doesn't support screen sharing API, permission denied, or wrong `displaySurface` config
|
|
69
|
+
**Solution:**
|
|
70
|
+
Use Chrome/Edge/Firefox (Safari limited support), check browser permissions, try different `displaySurface` values ('window', 'monitor', 'browser')
|
|
71
|
+
|
|
72
|
+
### "How do I schedule meetings?"
|
|
73
|
+
|
|
74
|
+
**Cause:** RealtimeKit has no built-in scheduling system
|
|
75
|
+
**Solution:**
|
|
76
|
+
Store meeting IDs in your database with timestamps. Generate participant tokens only when user should join. Example:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
// Store in DB
|
|
80
|
+
{ meetingId: 'abc123', scheduledFor: '2026-02-15T10:00:00Z', userId: 'user456' }
|
|
81
|
+
|
|
82
|
+
// Generate token when user clicks "Join" near scheduled time
|
|
83
|
+
const response = await fetch('/api/join-meeting', {
|
|
84
|
+
method: 'POST',
|
|
85
|
+
body: JSON.stringify({ meetingId: 'abc123' })
|
|
86
|
+
});
|
|
87
|
+
const { authToken } = await response.json();
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### "Recording not starting"
|
|
91
|
+
|
|
92
|
+
**Cause:** Preset lacks recording permissions, no active session, or API call from client
|
|
93
|
+
**Solution:**
|
|
94
|
+
Verify preset has `canRecord: true` and `canStartStopRecording: true`, ensure session is active (at least one participant), make recording API calls server-side only
|
|
95
|
+
|
|
96
|
+
## Limits
|
|
97
|
+
|
|
98
|
+
| Resource | Limit |
|
|
99
|
+
| ------------------------------- | ------------------ |
|
|
100
|
+
| Max participants per session | 100 |
|
|
101
|
+
| Max concurrent sessions per App | 1000 |
|
|
102
|
+
| Max recording duration | 6 hours |
|
|
103
|
+
| Max meeting duration | 24 hours |
|
|
104
|
+
| Max chat message length | 4000 characters |
|
|
105
|
+
| Max preset name length | 64 characters |
|
|
106
|
+
| Max meeting title length | 256 characters |
|
|
107
|
+
| Max participant name length | 256 characters |
|
|
108
|
+
| Token expiration | 24 hours (default) |
|
|
109
|
+
| WebRTC ports required | UDP 1024-65535 |
|
|
110
|
+
|
|
111
|
+
## Network Requirements
|
|
112
|
+
|
|
113
|
+
### Firewall Rules
|
|
114
|
+
|
|
115
|
+
Allow outbound UDP/TCP to:
|
|
116
|
+
|
|
117
|
+
- `*.cloudflare.com` ports 443, 80
|
|
118
|
+
- UDP ports 1024-65535 (WebRTC media)
|
|
119
|
+
|
|
120
|
+
### TURN Service
|
|
121
|
+
|
|
122
|
+
Enable for users behind restrictive firewalls/proxies:
|
|
123
|
+
|
|
124
|
+
```jsonc
|
|
125
|
+
// wrangler.jsonc
|
|
126
|
+
{
|
|
127
|
+
"vars": {
|
|
128
|
+
"TURN_SERVICE_ID": "your_turn_service_id",
|
|
129
|
+
},
|
|
130
|
+
// Set secret: wrangler secret put TURN_SERVICE_TOKEN
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
TURN automatically configured in SDK when enabled in account.
|
|
135
|
+
|
|
136
|
+
## Debugging Tips
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
// Check devices
|
|
140
|
+
const devices = await meeting.self.getAllDevices()
|
|
141
|
+
meeting.self.on('deviceListUpdate', ({ added, removed, devices }) =>
|
|
142
|
+
console.log('Devices:', { added, removed, devices })
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
// Monitor participants
|
|
146
|
+
meeting.participants.joined.on('participantJoined', (p) =>
|
|
147
|
+
console.log(`${p.name} joined:`, {
|
|
148
|
+
id: p.id,
|
|
149
|
+
userId: p.userId,
|
|
150
|
+
audioEnabled: p.audioEnabled,
|
|
151
|
+
videoEnabled: p.videoEnabled,
|
|
152
|
+
})
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
// Check room state
|
|
156
|
+
meeting.self.on('roomJoined', () =>
|
|
157
|
+
console.log('Room:', {
|
|
158
|
+
meetingId: meeting.meta.meetingId,
|
|
159
|
+
meetingTitle: meeting.meta.meetingTitle,
|
|
160
|
+
participantCount: meeting.participants.joined.size() + 1,
|
|
161
|
+
audioEnabled: meeting.self.audioEnabled,
|
|
162
|
+
videoEnabled: meeting.self.videoEnabled,
|
|
163
|
+
})
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
// Log all events
|
|
167
|
+
;[
|
|
168
|
+
'roomJoined',
|
|
169
|
+
'audioUpdate',
|
|
170
|
+
'videoUpdate',
|
|
171
|
+
'screenShareUpdate',
|
|
172
|
+
'deviceUpdate',
|
|
173
|
+
'deviceListUpdate',
|
|
174
|
+
].forEach((event) => meeting.self.on(event, (data) => console.log(`[self] ${event}:`, data)))
|
|
175
|
+
;['participantJoined', 'participantLeft'].forEach((event) =>
|
|
176
|
+
meeting.participants.joined.on(event, (data) => console.log(`[participants] ${event}:`, data))
|
|
177
|
+
)
|
|
178
|
+
meeting.chat.on('chatUpdate', (data) => console.log('[chat] chatUpdate:', data))
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Security & Performance
|
|
182
|
+
|
|
183
|
+
### Security: Do NOT
|
|
184
|
+
|
|
185
|
+
- Expose `CLOUDFLARE_API_TOKEN` in client code, hardcode credentials in frontend
|
|
186
|
+
- Reuse participant tokens, store tokens in localStorage without encryption
|
|
187
|
+
- Allow client-side meeting creation
|
|
188
|
+
|
|
189
|
+
### Security: DO
|
|
190
|
+
|
|
191
|
+
- Generate tokens server-side only, use HTTPS, implement rate limiting
|
|
192
|
+
- Validate user auth before generating tokens, use `custom_participant_id` to map to your user system
|
|
193
|
+
- Set appropriate preset permissions per user role, rotate API tokens regularly
|
|
194
|
+
|
|
195
|
+
### Performance
|
|
196
|
+
|
|
197
|
+
- **CPU**: Lower video resolution/frameRate, disable video for audio-only, use `meeting.participants.active` for large meetings, implement virtual scrolling
|
|
198
|
+
- **Bandwidth**: Set max resolution in `mediaConfiguration`, disable screenshare audio if unneeded, use audio-only mode, implement adaptive bitrate
|
|
199
|
+
- **Memory**: Clean up event listeners on unmount, call `meeting.leave()` when done, don't store large participant arrays
|
|
200
|
+
|
|
201
|
+
## In This Reference
|
|
202
|
+
|
|
203
|
+
- [README.md](README.md) - Overview, core concepts, quick start
|
|
204
|
+
- [configuration.md](configuration.md) - SDK config, presets, wrangler setup
|
|
205
|
+
- [api.md](api.md) - Client SDK APIs, REST endpoints
|
|
206
|
+
- [patterns.md](patterns.md) - Common patterns, React hooks, backend integration
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# RealtimeKit Patterns
|
|
2
|
+
|
|
3
|
+
## UI Kit (Minimal Code)
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
// React
|
|
7
|
+
import { RtkMeeting } from '@cloudflare/realtimekit-react-ui';
|
|
8
|
+
<RtkMeeting authToken="<token>" onLeave={() => console.log('Left')} />
|
|
9
|
+
|
|
10
|
+
// Angular
|
|
11
|
+
@Component({ template: `<rtk-meeting [authToken]="authToken" (rtkLeave)="onLeave($event)"></rtk-meeting>` })
|
|
12
|
+
export class AppComponent { authToken = '<token>'; onLeave(event: unknown) {} }
|
|
13
|
+
|
|
14
|
+
// HTML/Web Components
|
|
15
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/realtimekit-ui/realtimekit-ui.esm.js"></script>
|
|
16
|
+
<rtk-meeting id="meeting"></rtk-meeting>
|
|
17
|
+
<script>document.getElementById('meeting').authToken = '<token>';</script>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## UI Components
|
|
21
|
+
|
|
22
|
+
RealtimeKit provides 133+ pre-built Stencil.js Web Components with framework wrappers:
|
|
23
|
+
|
|
24
|
+
### Layout Components
|
|
25
|
+
|
|
26
|
+
- `<RtkMeeting>` - Full meeting UI (all-in-one)
|
|
27
|
+
- `<RtkHeader>`, `<RtkStage>`, `<RtkControlbar>` - Layout sections
|
|
28
|
+
- `<RtkSidebar>` - Chat/participants sidebar
|
|
29
|
+
- `<RtkGrid>` - Adaptive video grid
|
|
30
|
+
|
|
31
|
+
### Control Components
|
|
32
|
+
|
|
33
|
+
- `<RtkMicToggle>`, `<RtkCameraToggle>` - Media controls
|
|
34
|
+
- `<RtkScreenShareToggle>` - Screen sharing
|
|
35
|
+
- `<RtkLeaveButton>` - Leave meeting
|
|
36
|
+
- `<RtkSettingsModal>` - Device settings
|
|
37
|
+
|
|
38
|
+
### Grid Variants
|
|
39
|
+
|
|
40
|
+
- `<RtkSpotlightGrid>` - Active speaker focus
|
|
41
|
+
- `<RtkAudioGrid>` - Audio-only mode
|
|
42
|
+
- `<RtkPaginatedGrid>` - Paginated layout
|
|
43
|
+
|
|
44
|
+
**See full catalog**: https://docs.realtime.cloudflare.com/ui-kit
|
|
45
|
+
|
|
46
|
+
## Core SDK Patterns
|
|
47
|
+
|
|
48
|
+
### Basic Setup
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import RealtimeKitClient from '@cloudflare/realtimekit'
|
|
52
|
+
|
|
53
|
+
const meeting = new RealtimeKitClient({ authToken, video: true, audio: true })
|
|
54
|
+
meeting.self.on('roomJoined', () => console.log('Joined:', meeting.meta.meetingTitle))
|
|
55
|
+
meeting.participants.joined.on('participantJoined', (p) => console.log(`${p.name} joined`))
|
|
56
|
+
await meeting.join()
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Video Grid & Device Selection
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// Video grid
|
|
63
|
+
function VideoGrid({ meeting }) {
|
|
64
|
+
const [participants, setParticipants] = useState([]);
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
const update = () => setParticipants(meeting.participants.joined.toArray());
|
|
67
|
+
meeting.participants.joined.on('participantJoined', update);
|
|
68
|
+
meeting.participants.joined.on('participantLeft', update);
|
|
69
|
+
update();
|
|
70
|
+
return () => { meeting.participants.joined.off('participantJoined', update); meeting.participants.joined.off('participantLeft', update); };
|
|
71
|
+
}, [meeting]);
|
|
72
|
+
return <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))' }}>
|
|
73
|
+
{participants.map(p => <VideoTile key={p.id} participant={p} />)}
|
|
74
|
+
</div>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function VideoTile({ participant }) {
|
|
78
|
+
const videoRef = useRef<HTMLVideoElement>(null);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (videoRef.current && participant.videoTrack) videoRef.current.srcObject = new MediaStream([participant.videoTrack]);
|
|
81
|
+
}, [participant.videoTrack]);
|
|
82
|
+
return <div><video ref={videoRef} autoPlay playsInline muted /><div>{participant.name}</div></div>;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Device selection
|
|
86
|
+
const devices = await meeting.self.getAllDevices();
|
|
87
|
+
const switchCamera = (deviceId: string) => {
|
|
88
|
+
const device = devices.find(d => d.deviceId === deviceId);
|
|
89
|
+
if (device) await meeting.self.setDevice(device);
|
|
90
|
+
};
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## React Hooks (Official)
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
import { useRealtimeKitClient, useRealtimeKitSelector } from '@cloudflare/realtimekit-react-ui';
|
|
97
|
+
|
|
98
|
+
function MyComponent() {
|
|
99
|
+
const [meeting, initMeeting] = useRealtimeKitClient();
|
|
100
|
+
const audioEnabled = useRealtimeKitSelector(m => m.self.audioEnabled);
|
|
101
|
+
const participantCount = useRealtimeKitSelector(m => m.participants.joined.size());
|
|
102
|
+
|
|
103
|
+
useEffect(() => { initMeeting({ authToken: '<token>' }); }, []);
|
|
104
|
+
|
|
105
|
+
return <div>
|
|
106
|
+
<button onClick={() => meeting?.self.enableAudio()}>{audioEnabled ? 'Mute' : 'Unmute'}</button>
|
|
107
|
+
<span>{participantCount} participants</span>
|
|
108
|
+
</div>;
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Benefits:** Automatic re-renders, memoized selectors, type-safe
|
|
113
|
+
|
|
114
|
+
## Waitlist Handling
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
// Monitor waitlist
|
|
118
|
+
meeting.participants.waitlisted.on('participantJoined', (participant) => {
|
|
119
|
+
console.log(`${participant.name} is waiting`)
|
|
120
|
+
// Show admin UI to approve/reject
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
// Approve from waitlist (backend only)
|
|
124
|
+
await fetch(
|
|
125
|
+
`https://api.cloudflare.com/client/v4/accounts/${accountId}/realtime/kit/${appId}/meetings/${meetingId}/active-session/waitlist/approve`,
|
|
126
|
+
{
|
|
127
|
+
method: 'POST',
|
|
128
|
+
headers: { Authorization: `Bearer ${apiToken}` },
|
|
129
|
+
body: JSON.stringify({ user_ids: [participant.userId] }),
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
// Client receives automatic transition when approved
|
|
134
|
+
meeting.self.on('roomJoined', () => console.log('Approved and joined'))
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Audio-Only Mode
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
const meeting = new RealtimeKitClient({
|
|
141
|
+
authToken: '<token>',
|
|
142
|
+
video: false, // Disable video
|
|
143
|
+
audio: true,
|
|
144
|
+
mediaConfiguration: {
|
|
145
|
+
audio: {
|
|
146
|
+
echoCancellation: true,
|
|
147
|
+
noiseSuppression: true,
|
|
148
|
+
autoGainControl: true
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// Use audio grid component
|
|
154
|
+
import { RtkAudioGrid } from '@cloudflare/realtimekit-react-ui';
|
|
155
|
+
<RtkAudioGrid meeting={meeting} />
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Addon System
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
// List available addons
|
|
162
|
+
meeting.plugins.all.forEach((plugin) => {
|
|
163
|
+
console.log(plugin.id, plugin.name, plugin.active)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
// Activate collaborative app
|
|
167
|
+
await meeting.plugins.activate('whiteboard-addon-id')
|
|
168
|
+
|
|
169
|
+
// Listen for activations
|
|
170
|
+
meeting.plugins.on('pluginActivated', ({ plugin }) => {
|
|
171
|
+
console.log(`${plugin.name} activated`)
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
// Deactivate
|
|
175
|
+
await meeting.plugins.deactivate()
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Backend Integration
|
|
179
|
+
|
|
180
|
+
### Token Generation (Workers)
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
export interface Env {
|
|
184
|
+
CLOUDFLARE_API_TOKEN: string
|
|
185
|
+
CLOUDFLARE_ACCOUNT_ID: string
|
|
186
|
+
REALTIMEKIT_APP_ID: string
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export default {
|
|
190
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
191
|
+
const url = new URL(request.url)
|
|
192
|
+
|
|
193
|
+
if (url.pathname === '/api/join-meeting') {
|
|
194
|
+
const { meetingId, userName, presetName } = await request.json()
|
|
195
|
+
const response = await fetch(
|
|
196
|
+
`https://api.cloudflare.com/client/v4/accounts/${env.CLOUDFLARE_ACCOUNT_ID}/realtime/kit/${env.REALTIMEKIT_APP_ID}/meetings/${meetingId}/participants`,
|
|
197
|
+
{
|
|
198
|
+
method: 'POST',
|
|
199
|
+
headers: {
|
|
200
|
+
'Content-Type': 'application/json',
|
|
201
|
+
Authorization: `Bearer ${env.CLOUDFLARE_API_TOKEN}`,
|
|
202
|
+
},
|
|
203
|
+
body: JSON.stringify({ name: userName, preset_name: presetName }),
|
|
204
|
+
}
|
|
205
|
+
)
|
|
206
|
+
const data = await response.json()
|
|
207
|
+
return Response.json({ authToken: data.result.authToken })
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
return new Response('Not found', { status: 404 })
|
|
211
|
+
},
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Best Practices
|
|
216
|
+
|
|
217
|
+
### Security
|
|
218
|
+
|
|
219
|
+
1. **Never expose API tokens client-side** - Generate participant tokens server-side only
|
|
220
|
+
2. **Don't reuse participant tokens** - Generate fresh token per session, use refresh endpoint if expired
|
|
221
|
+
3. **Use custom participant IDs** - Map to your user system for cross-session tracking
|
|
222
|
+
|
|
223
|
+
### Performance
|
|
224
|
+
|
|
225
|
+
1. **Event-driven updates** - Listen to events, don't poll. Use `toArray()` only when needed
|
|
226
|
+
2. **Media quality constraints** - Set appropriate resolution/bitrate limits based on network conditions
|
|
227
|
+
3. **Device management** - Enable `autoSwitchAudioDevice` for better UX, handle device list updates
|
|
228
|
+
|
|
229
|
+
### Architecture
|
|
230
|
+
|
|
231
|
+
1. **Separate Apps for environments** - staging vs production to prevent data mixing
|
|
232
|
+
2. **Preset strategy** - Create presets at App level, reuse across meetings
|
|
233
|
+
3. **Token management** - Backend generates tokens, frontend receives via authenticated endpoint
|
|
234
|
+
|
|
235
|
+
## In This Reference
|
|
236
|
+
|
|
237
|
+
- [README.md](README.md) - Overview, core concepts, quick start
|
|
238
|
+
- [configuration.md](configuration.md) - SDK config, presets, wrangler setup
|
|
239
|
+
- [api.md](api.md) - Client SDK APIs, REST endpoints
|
|
240
|
+
- [gotchas.md](gotchas.md) - Common issues, troubleshooting, limits
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Cloudflare Sandbox SDK
|
|
2
|
+
|
|
3
|
+
Secure isolated code execution in containers on Cloudflare's edge. Run untrusted code, manage files, expose services, integrate with AI agents.
|
|
4
|
+
|
|
5
|
+
**Use cases**: AI code execution, interactive dev environments, data analysis, CI/CD, code interpreters, multi-tenant execution.
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
- Each sandbox = Durable Object + Container
|
|
10
|
+
- Persistent across requests (same ID = same sandbox)
|
|
11
|
+
- Isolated filesystem/processes/network
|
|
12
|
+
- Configurable sleep/wake for cost optimization
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
```typescript
|
|
17
|
+
import { getSandbox, proxyToSandbox, type Sandbox } from '@cloudflare/sandbox'
|
|
18
|
+
export { Sandbox } from '@cloudflare/sandbox'
|
|
19
|
+
|
|
20
|
+
type Env = { Sandbox: DurableObjectNamespace<Sandbox> }
|
|
21
|
+
|
|
22
|
+
export default {
|
|
23
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
24
|
+
// CRITICAL: proxyToSandbox MUST be called first for preview URLs
|
|
25
|
+
const proxyResponse = await proxyToSandbox(request, env)
|
|
26
|
+
if (proxyResponse) return proxyResponse
|
|
27
|
+
|
|
28
|
+
const sandbox = getSandbox(env.Sandbox, 'my-sandbox')
|
|
29
|
+
const result = await sandbox.exec('python3 -c "print(2 + 2)"')
|
|
30
|
+
return Response.json({ output: result.stdout })
|
|
31
|
+
},
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**wrangler.jsonc**:
|
|
36
|
+
|
|
37
|
+
```jsonc
|
|
38
|
+
{
|
|
39
|
+
"name": "my-sandbox-worker",
|
|
40
|
+
"main": "src/index.ts",
|
|
41
|
+
"compatibility_date": "2025-01-01", // Use current date for new projects
|
|
42
|
+
|
|
43
|
+
"containers": [
|
|
44
|
+
{
|
|
45
|
+
"class_name": "Sandbox",
|
|
46
|
+
"image": "./Dockerfile",
|
|
47
|
+
"instance_type": "lite", // lite | standard | heavy
|
|
48
|
+
"max_instances": 5,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
|
|
52
|
+
"durable_objects": {
|
|
53
|
+
"bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }],
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
"migrations": [
|
|
57
|
+
{
|
|
58
|
+
"tag": "v1",
|
|
59
|
+
"new_sqlite_classes": ["Sandbox"],
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Dockerfile**:
|
|
66
|
+
|
|
67
|
+
```dockerfile
|
|
68
|
+
FROM docker.io/cloudflare/sandbox:latest
|
|
69
|
+
RUN pip3 install --no-cache-dir pandas numpy matplotlib
|
|
70
|
+
EXPOSE 8080 3000 # Required for wrangler dev
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Core APIs
|
|
74
|
+
|
|
75
|
+
- `getSandbox(namespace, id, options?)` → Get/create sandbox
|
|
76
|
+
- `sandbox.exec(command, options?)` → Execute command
|
|
77
|
+
- `sandbox.readFile(path)` / `writeFile(path, content)` → File ops
|
|
78
|
+
- `sandbox.startProcess(command, options)` → Background process
|
|
79
|
+
- `sandbox.exposePort(port, options)` → Get preview URL
|
|
80
|
+
- `sandbox.createSession(options)` → Isolated session
|
|
81
|
+
- `sandbox.wsConnect(request, port)` → WebSocket proxy
|
|
82
|
+
- `sandbox.destroy()` → Terminate container
|
|
83
|
+
- `sandbox.mountBucket(bucket, path, options)` → Mount S3 storage
|
|
84
|
+
|
|
85
|
+
## Critical Rules
|
|
86
|
+
|
|
87
|
+
- ALWAYS call `proxyToSandbox()` first
|
|
88
|
+
- Same ID = reuse sandbox
|
|
89
|
+
- Use `/workspace` for persistent files
|
|
90
|
+
- `normalizeId: true` for preview URLs
|
|
91
|
+
- Retry on `CONTAINER_NOT_READY`
|
|
92
|
+
|
|
93
|
+
## In This Reference
|
|
94
|
+
|
|
95
|
+
- [configuration.md](./configuration.md) - Config, CLI, environment setup
|
|
96
|
+
- [api.md](./api.md) - Programmatic API, testing patterns
|
|
97
|
+
- [patterns.md](./patterns.md) - Common workflows, CI/CD integration
|
|
98
|
+
- [gotchas.md](./gotchas.md) - Issues, limits, best practices
|
|
99
|
+
|
|
100
|
+
## See Also
|
|
101
|
+
|
|
102
|
+
- [durable-objects](../durable-objects/) - Sandbox runs on DO infrastructure
|
|
103
|
+
- [containers](../containers/) - Container runtime fundamentals
|
|
104
|
+
- [workers](../workers/) - Entry point for sandbox requests
|