@mohanscodex/spectra-code 0.4.8 → 0.5.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 +42 -2
- package/dist/package.json +8 -5
- package/dist/src/agents/definitions/build.d.ts +3 -0
- package/dist/src/agents/definitions/build.d.ts.map +1 -0
- package/dist/src/agents/definitions/build.js +51 -0
- package/dist/src/agents/definitions/build.js.map +1 -0
- package/dist/src/agents/definitions/debug.d.ts +3 -0
- package/dist/src/agents/definitions/debug.d.ts.map +1 -0
- package/dist/src/agents/definitions/debug.js +45 -0
- package/dist/src/agents/definitions/debug.js.map +1 -0
- package/dist/src/agents/definitions/explore.d.ts +3 -0
- package/dist/src/agents/definitions/explore.d.ts.map +1 -0
- package/dist/src/agents/definitions/explore.js +34 -0
- package/dist/src/agents/definitions/explore.js.map +1 -0
- package/dist/src/agents/definitions/index.d.ts +5 -0
- package/dist/src/agents/definitions/index.d.ts.map +1 -0
- package/dist/src/agents/definitions/index.js +19 -0
- package/dist/src/agents/definitions/index.js.map +1 -0
- package/dist/src/agents/definitions/plan.d.ts +3 -0
- package/dist/src/agents/definitions/plan.d.ts.map +1 -0
- package/dist/src/agents/definitions/plan.js +44 -0
- package/dist/src/agents/definitions/plan.js.map +1 -0
- package/dist/src/agents/definitions/title.d.ts +3 -0
- package/dist/src/agents/definitions/title.d.ts.map +1 -0
- package/dist/src/agents/definitions/title.js +34 -0
- package/dist/src/agents/definitions/title.js.map +1 -0
- package/dist/src/agents/index.d.ts +6 -0
- package/dist/src/agents/index.d.ts.map +1 -0
- package/dist/src/agents/index.js +10 -0
- package/dist/src/agents/index.js.map +1 -0
- package/dist/src/agents/types.d.ts +15 -0
- package/dist/src/agents/types.d.ts.map +1 -0
- package/dist/src/agents/types.js +2 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/cli.js +2 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/session.js +1 -1
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/integrations/acp/server.js +1 -1
- package/dist/src/integrations/acp/server.js.map +1 -1
- package/dist/src/services/prompt-history.d.ts +32 -0
- package/dist/src/services/prompt-history.d.ts.map +1 -0
- package/dist/src/services/prompt-history.js +144 -0
- package/dist/src/services/prompt-history.js.map +1 -0
- package/dist/src/services/snapshot-manager.d.ts +32 -32
- package/dist/src/services/snapshot-manager.d.ts.map +1 -1
- package/dist/src/services/snapshot-manager.js +308 -155
- package/dist/src/services/snapshot-manager.js.map +1 -1
- package/dist/src/tools/edit.d.ts.map +1 -1
- package/dist/src/tools/edit.js +5 -22
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/glob.d.ts.map +1 -1
- package/dist/src/tools/glob.js +2 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/grep.js +2 -2
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/index.d.ts +5 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +30 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/task.js +1 -1
- package/dist/src/tools/task.js.map +1 -1
- package/dist/src/tools/write.d.ts.map +1 -1
- package/dist/src/tools/write.js +7 -4
- package/dist/src/tools/write.js.map +1 -1
- package/dist/src/tui/app-constants.js +1 -1
- package/dist/src/tui/app-constants.js.map +1 -1
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +35 -15
- package/dist/src/tui/app.js.map +1 -1
- package/dist/src/tui/commands.d.ts +15 -0
- package/dist/src/tui/commands.d.ts.map +1 -1
- package/dist/src/tui/commands.js +252 -1
- package/dist/src/tui/commands.js.map +1 -1
- package/dist/src/tui/components/chat-area.d.ts.map +1 -1
- package/dist/src/tui/components/chat-area.js +1 -1
- package/dist/src/tui/components/chat-area.js.map +1 -1
- package/dist/src/tui/components/message.d.ts.map +1 -1
- package/dist/src/tui/components/message.js +79 -4
- package/dist/src/tui/components/message.js.map +1 -1
- package/dist/src/tui/hooks/use-agent.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-agent.js +17 -4
- package/dist/src/tui/hooks/use-agent.js.map +1 -1
- package/dist/src/tui/hooks/use-app-keyboard.d.ts +4 -5
- package/dist/src/tui/hooks/use-app-keyboard.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-app-keyboard.js +23 -24
- package/dist/src/tui/hooks/use-app-keyboard.js.map +1 -1
- package/dist/src/tui/hooks/use-chat-submit.d.ts +2 -2
- package/dist/src/tui/hooks/use-chat-submit.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-chat-submit.js +143 -20
- package/dist/src/tui/hooks/use-chat-submit.js.map +1 -1
- package/dist/src/tui/hooks/use-revert.d.ts +3 -5
- package/dist/src/tui/hooks/use-revert.d.ts.map +1 -1
- package/dist/src/tui/hooks/use-revert.js +83 -34
- package/dist/src/tui/hooks/use-revert.js.map +1 -1
- package/dist/src/tui/hooks/use-title-agent.d.ts +13 -0
- package/dist/src/tui/hooks/use-title-agent.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-title-agent.js +50 -0
- package/dist/src/tui/hooks/use-title-agent.js.map +1 -0
- package/dist/src/tui/prompt-bar.d.ts.map +1 -1
- package/dist/src/tui/prompt-bar.js +27 -33
- package/dist/src/tui/prompt-bar.js.map +1 -1
- package/dist/src/tui/theme.d.ts +2 -0
- package/dist/src/tui/theme.d.ts.map +1 -1
- package/dist/src/tui/theme.js +2 -0
- package/dist/src/tui/theme.js.map +1 -1
- package/dist/src/tui/types.d.ts +5 -0
- package/dist/src/tui/types.d.ts.map +1 -1
- package/dist/src/tui/ui/agent-switcher.js +1 -1
- package/dist/src/tui/ui/agent-switcher.js.map +1 -1
- package/dist/src/tui/ui/cost-dialog.d.ts +14 -0
- package/dist/src/tui/ui/cost-dialog.d.ts.map +1 -0
- package/dist/src/tui/ui/cost-dialog.js +28 -0
- package/dist/src/tui/ui/cost-dialog.js.map +1 -0
- package/dist/src/tui/ui/debug-dialog.js +1 -1
- package/dist/src/tui/ui/debug-dialog.js.map +1 -1
- package/dist/src/tui/ui/session-list.js +1 -1
- package/dist/src/tui/ui/session-list.js.map +1 -1
- package/dist/src/tui/utils/terminal-title.d.ts +3 -0
- package/dist/src/tui/utils/terminal-title.d.ts.map +1 -0
- package/dist/src/tui/utils/terminal-title.js +14 -0
- package/dist/src/tui/utils/terminal-title.js.map +1 -0
- package/dist/src/tui/utils/version.d.ts +1 -1
- package/dist/src/tui/utils/version.d.ts.map +1 -1
- package/dist/src/tui/utils/version.js +4 -22
- package/dist/src/tui/utils/version.js.map +1 -1
- package/dist/src/utils/paths.d.ts +1 -0
- package/dist/src/utils/paths.d.ts.map +1 -1
- package/dist/src/utils/paths.js +13 -0
- package/dist/src/utils/paths.js.map +1 -1
- package/package.json +9 -6
- package/skills/REQUESTS.md +36 -0
- package/skills/architecture/ABOUT.md +20 -0
- package/skills/architecture/preserving-productive-tensions/SKILL.md +152 -0
- package/skills/aspnet-core/LICENSE.txt +202 -0
- package/skills/aspnet-core/SKILL.md +61 -0
- package/skills/aspnet-core/agents/openai.yaml +5 -0
- package/skills/aspnet-core/assets/dotnet-logo.png +0 -0
- package/skills/aspnet-core/references/_sections.md +40 -0
- package/skills/aspnet-core/references/apis-minimal-and-controllers.md +81 -0
- package/skills/aspnet-core/references/data-state-and-services.md +69 -0
- package/skills/aspnet-core/references/program-and-pipeline.md +103 -0
- package/skills/aspnet-core/references/realtime-grpc-and-background-work.md +58 -0
- package/skills/aspnet-core/references/security-and-identity.md +75 -0
- package/skills/aspnet-core/references/source-map.md +43 -0
- package/skills/aspnet-core/references/stack-selection.md +63 -0
- package/skills/aspnet-core/references/testing-performance-and-operations.md +92 -0
- package/skills/aspnet-core/references/ui-blazor.md +53 -0
- package/skills/aspnet-core/references/ui-mvc.md +56 -0
- package/skills/aspnet-core/references/ui-razor-pages.md +55 -0
- package/skills/aspnet-core/references/versioning-and-upgrades.md +51 -0
- package/skills/chatgpt-apps/LICENSE.txt +201 -0
- package/skills/chatgpt-apps/SKILL.md +320 -0
- package/skills/chatgpt-apps/agents/openai.yaml +13 -0
- package/skills/chatgpt-apps/references/app-archetypes.md +132 -0
- package/skills/chatgpt-apps/references/apps-sdk-docs-workflow.md +135 -0
- package/skills/chatgpt-apps/references/interactive-state-sync-patterns.md +113 -0
- package/skills/chatgpt-apps/references/repo-contract-and-validation.md +93 -0
- package/skills/chatgpt-apps/references/search-fetch-standard.md +67 -0
- package/skills/chatgpt-apps/references/upstream-example-workflow.md +79 -0
- package/skills/chatgpt-apps/references/window-openai-patterns.md +70 -0
- package/skills/chatgpt-apps/scripts/scaffold_node_ext_apps.mjs +606 -0
- package/skills/cloudflare-deploy/LICENSE.txt +201 -0
- package/skills/cloudflare-deploy/SKILL.md +224 -0
- package/skills/cloudflare-deploy/agents/openai.yaml +6 -0
- package/skills/cloudflare-deploy/assets/cloudflare-small.svg +3 -0
- package/skills/cloudflare-deploy/assets/cloudflare.png +0 -0
- package/skills/cloudflare-deploy/references/agents-sdk/README.md +89 -0
- package/skills/cloudflare-deploy/references/agents-sdk/api.md +190 -0
- package/skills/cloudflare-deploy/references/agents-sdk/configuration.md +182 -0
- package/skills/cloudflare-deploy/references/agents-sdk/gotchas.md +158 -0
- package/skills/cloudflare-deploy/references/agents-sdk/patterns.md +192 -0
- package/skills/cloudflare-deploy/references/ai-gateway/README.md +175 -0
- package/skills/cloudflare-deploy/references/ai-gateway/configuration.md +111 -0
- package/skills/cloudflare-deploy/references/ai-gateway/dynamic-routing.md +82 -0
- package/skills/cloudflare-deploy/references/ai-gateway/features.md +96 -0
- package/skills/cloudflare-deploy/references/ai-gateway/sdk-integration.md +114 -0
- package/skills/cloudflare-deploy/references/ai-gateway/troubleshooting.md +88 -0
- package/skills/cloudflare-deploy/references/ai-search/README.md +138 -0
- package/skills/cloudflare-deploy/references/ai-search/api.md +87 -0
- package/skills/cloudflare-deploy/references/ai-search/configuration.md +88 -0
- package/skills/cloudflare-deploy/references/ai-search/gotchas.md +81 -0
- package/skills/cloudflare-deploy/references/ai-search/patterns.md +85 -0
- package/skills/cloudflare-deploy/references/analytics-engine/README.md +92 -0
- package/skills/cloudflare-deploy/references/analytics-engine/api.md +112 -0
- package/skills/cloudflare-deploy/references/analytics-engine/configuration.md +112 -0
- package/skills/cloudflare-deploy/references/analytics-engine/gotchas.md +85 -0
- package/skills/cloudflare-deploy/references/analytics-engine/patterns.md +83 -0
- package/skills/cloudflare-deploy/references/api/README.md +65 -0
- package/skills/cloudflare-deploy/references/api/api.md +204 -0
- package/skills/cloudflare-deploy/references/api/configuration.md +160 -0
- package/skills/cloudflare-deploy/references/api/gotchas.md +225 -0
- package/skills/cloudflare-deploy/references/api/patterns.md +204 -0
- package/skills/cloudflare-deploy/references/api-shield/README.md +44 -0
- package/skills/cloudflare-deploy/references/api-shield/api.md +141 -0
- package/skills/cloudflare-deploy/references/api-shield/configuration.md +192 -0
- package/skills/cloudflare-deploy/references/api-shield/gotchas.md +125 -0
- package/skills/cloudflare-deploy/references/api-shield/patterns.md +180 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/README.md +90 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/api.md +240 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/configuration.md +197 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/gotchas.md +111 -0
- package/skills/cloudflare-deploy/references/argo-smart-routing/patterns.md +104 -0
- package/skills/cloudflare-deploy/references/bindings/README.md +122 -0
- package/skills/cloudflare-deploy/references/bindings/api.md +203 -0
- package/skills/cloudflare-deploy/references/bindings/configuration.md +188 -0
- package/skills/cloudflare-deploy/references/bindings/gotchas.md +208 -0
- package/skills/cloudflare-deploy/references/bindings/patterns.md +200 -0
- package/skills/cloudflare-deploy/references/bot-management/README.md +94 -0
- package/skills/cloudflare-deploy/references/bot-management/api.md +169 -0
- package/skills/cloudflare-deploy/references/bot-management/configuration.md +163 -0
- package/skills/cloudflare-deploy/references/bot-management/gotchas.md +114 -0
- package/skills/cloudflare-deploy/references/bot-management/patterns.md +182 -0
- package/skills/cloudflare-deploy/references/browser-rendering/README.md +78 -0
- package/skills/cloudflare-deploy/references/browser-rendering/api.md +108 -0
- package/skills/cloudflare-deploy/references/browser-rendering/configuration.md +78 -0
- package/skills/cloudflare-deploy/references/browser-rendering/gotchas.md +88 -0
- package/skills/cloudflare-deploy/references/browser-rendering/patterns.md +91 -0
- package/skills/cloudflare-deploy/references/c3/README.md +111 -0
- package/skills/cloudflare-deploy/references/c3/api.md +71 -0
- package/skills/cloudflare-deploy/references/c3/configuration.md +81 -0
- package/skills/cloudflare-deploy/references/c3/gotchas.md +92 -0
- package/skills/cloudflare-deploy/references/c3/patterns.md +82 -0
- package/skills/cloudflare-deploy/references/cache-reserve/README.md +147 -0
- package/skills/cloudflare-deploy/references/cache-reserve/api.md +194 -0
- package/skills/cloudflare-deploy/references/cache-reserve/configuration.md +169 -0
- package/skills/cloudflare-deploy/references/cache-reserve/gotchas.md +132 -0
- package/skills/cloudflare-deploy/references/cache-reserve/patterns.md +197 -0
- package/skills/cloudflare-deploy/references/containers/README.md +85 -0
- package/skills/cloudflare-deploy/references/containers/api.md +187 -0
- package/skills/cloudflare-deploy/references/containers/configuration.md +188 -0
- package/skills/cloudflare-deploy/references/containers/gotchas.md +178 -0
- package/skills/cloudflare-deploy/references/containers/patterns.md +202 -0
- package/skills/cloudflare-deploy/references/cron-triggers/README.md +99 -0
- package/skills/cloudflare-deploy/references/cron-triggers/api.md +196 -0
- package/skills/cloudflare-deploy/references/cron-triggers/configuration.md +180 -0
- package/skills/cloudflare-deploy/references/cron-triggers/gotchas.md +199 -0
- package/skills/cloudflare-deploy/references/cron-triggers/patterns.md +190 -0
- package/skills/cloudflare-deploy/references/d1/README.md +133 -0
- package/skills/cloudflare-deploy/references/d1/api.md +196 -0
- package/skills/cloudflare-deploy/references/d1/configuration.md +188 -0
- package/skills/cloudflare-deploy/references/d1/gotchas.md +98 -0
- package/skills/cloudflare-deploy/references/d1/patterns.md +189 -0
- package/skills/cloudflare-deploy/references/ddos/README.md +41 -0
- package/skills/cloudflare-deploy/references/ddos/api.md +164 -0
- package/skills/cloudflare-deploy/references/ddos/configuration.md +93 -0
- package/skills/cloudflare-deploy/references/ddos/gotchas.md +107 -0
- package/skills/cloudflare-deploy/references/ddos/patterns.md +174 -0
- package/skills/cloudflare-deploy/references/do-storage/README.md +75 -0
- package/skills/cloudflare-deploy/references/do-storage/api.md +102 -0
- package/skills/cloudflare-deploy/references/do-storage/configuration.md +112 -0
- package/skills/cloudflare-deploy/references/do-storage/gotchas.md +150 -0
- package/skills/cloudflare-deploy/references/do-storage/patterns.md +182 -0
- package/skills/cloudflare-deploy/references/do-storage/testing.md +183 -0
- package/skills/cloudflare-deploy/references/durable-objects/README.md +185 -0
- package/skills/cloudflare-deploy/references/durable-objects/api.md +187 -0
- package/skills/cloudflare-deploy/references/durable-objects/configuration.md +160 -0
- package/skills/cloudflare-deploy/references/durable-objects/gotchas.md +197 -0
- package/skills/cloudflare-deploy/references/durable-objects/patterns.md +201 -0
- package/skills/cloudflare-deploy/references/email-routing/README.md +89 -0
- package/skills/cloudflare-deploy/references/email-routing/api.md +195 -0
- package/skills/cloudflare-deploy/references/email-routing/configuration.md +186 -0
- package/skills/cloudflare-deploy/references/email-routing/gotchas.md +196 -0
- package/skills/cloudflare-deploy/references/email-routing/patterns.md +229 -0
- package/skills/cloudflare-deploy/references/email-workers/README.md +151 -0
- package/skills/cloudflare-deploy/references/email-workers/api.md +237 -0
- package/skills/cloudflare-deploy/references/email-workers/configuration.md +112 -0
- package/skills/cloudflare-deploy/references/email-workers/gotchas.md +125 -0
- package/skills/cloudflare-deploy/references/email-workers/patterns.md +102 -0
- package/skills/cloudflare-deploy/references/hyperdrive/README.md +82 -0
- package/skills/cloudflare-deploy/references/hyperdrive/api.md +143 -0
- package/skills/cloudflare-deploy/references/hyperdrive/configuration.md +159 -0
- package/skills/cloudflare-deploy/references/hyperdrive/gotchas.md +77 -0
- package/skills/cloudflare-deploy/references/hyperdrive/patterns.md +190 -0
- package/skills/cloudflare-deploy/references/images/README.md +61 -0
- package/skills/cloudflare-deploy/references/images/api.md +96 -0
- package/skills/cloudflare-deploy/references/images/configuration.md +211 -0
- package/skills/cloudflare-deploy/references/images/gotchas.md +99 -0
- package/skills/cloudflare-deploy/references/images/patterns.md +115 -0
- package/skills/cloudflare-deploy/references/kv/README.md +89 -0
- package/skills/cloudflare-deploy/references/kv/api.md +160 -0
- package/skills/cloudflare-deploy/references/kv/configuration.md +144 -0
- package/skills/cloudflare-deploy/references/kv/gotchas.md +131 -0
- package/skills/cloudflare-deploy/references/kv/patterns.md +196 -0
- package/skills/cloudflare-deploy/references/miniflare/README.md +105 -0
- package/skills/cloudflare-deploy/references/miniflare/api.md +187 -0
- package/skills/cloudflare-deploy/references/miniflare/configuration.md +173 -0
- package/skills/cloudflare-deploy/references/miniflare/gotchas.md +160 -0
- package/skills/cloudflare-deploy/references/miniflare/patterns.md +181 -0
- package/skills/cloudflare-deploy/references/network-interconnect/README.md +99 -0
- package/skills/cloudflare-deploy/references/network-interconnect/api.md +199 -0
- package/skills/cloudflare-deploy/references/network-interconnect/configuration.md +114 -0
- package/skills/cloudflare-deploy/references/network-interconnect/gotchas.md +165 -0
- package/skills/cloudflare-deploy/references/network-interconnect/patterns.md +166 -0
- package/skills/cloudflare-deploy/references/observability/README.md +87 -0
- package/skills/cloudflare-deploy/references/observability/api.md +164 -0
- package/skills/cloudflare-deploy/references/observability/configuration.md +169 -0
- package/skills/cloudflare-deploy/references/observability/gotchas.md +115 -0
- package/skills/cloudflare-deploy/references/observability/patterns.md +105 -0
- package/skills/cloudflare-deploy/references/pages/README.md +88 -0
- package/skills/cloudflare-deploy/references/pages/api.md +204 -0
- package/skills/cloudflare-deploy/references/pages/configuration.md +201 -0
- package/skills/cloudflare-deploy/references/pages/gotchas.md +203 -0
- package/skills/cloudflare-deploy/references/pages/patterns.md +204 -0
- package/skills/cloudflare-deploy/references/pages-functions/README.md +98 -0
- package/skills/cloudflare-deploy/references/pages-functions/api.md +143 -0
- package/skills/cloudflare-deploy/references/pages-functions/configuration.md +122 -0
- package/skills/cloudflare-deploy/references/pages-functions/gotchas.md +94 -0
- package/skills/cloudflare-deploy/references/pages-functions/patterns.md +137 -0
- package/skills/cloudflare-deploy/references/pipelines/README.md +105 -0
- package/skills/cloudflare-deploy/references/pipelines/api.md +208 -0
- package/skills/cloudflare-deploy/references/pipelines/configuration.md +98 -0
- package/skills/cloudflare-deploy/references/pipelines/gotchas.md +80 -0
- package/skills/cloudflare-deploy/references/pipelines/patterns.md +87 -0
- package/skills/cloudflare-deploy/references/pulumi/README.md +100 -0
- package/skills/cloudflare-deploy/references/pulumi/api.md +200 -0
- package/skills/cloudflare-deploy/references/pulumi/configuration.md +198 -0
- package/skills/cloudflare-deploy/references/pulumi/gotchas.md +181 -0
- package/skills/cloudflare-deploy/references/pulumi/patterns.md +191 -0
- package/skills/cloudflare-deploy/references/queues/README.md +96 -0
- package/skills/cloudflare-deploy/references/queues/api.md +206 -0
- package/skills/cloudflare-deploy/references/queues/configuration.md +144 -0
- package/skills/cloudflare-deploy/references/queues/gotchas.md +206 -0
- package/skills/cloudflare-deploy/references/queues/patterns.md +220 -0
- package/skills/cloudflare-deploy/references/r2/README.md +95 -0
- package/skills/cloudflare-deploy/references/r2/api.md +200 -0
- package/skills/cloudflare-deploy/references/r2/configuration.md +165 -0
- package/skills/cloudflare-deploy/references/r2/gotchas.md +190 -0
- package/skills/cloudflare-deploy/references/r2/patterns.md +193 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/README.md +149 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/api.md +199 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/configuration.md +198 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/gotchas.md +170 -0
- package/skills/cloudflare-deploy/references/r2-data-catalog/patterns.md +191 -0
- package/skills/cloudflare-deploy/references/r2-sql/README.md +128 -0
- package/skills/cloudflare-deploy/references/r2-sql/api.md +158 -0
- package/skills/cloudflare-deploy/references/r2-sql/configuration.md +147 -0
- package/skills/cloudflare-deploy/references/r2-sql/gotchas.md +212 -0
- package/skills/cloudflare-deploy/references/r2-sql/patterns.md +222 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/README.md +65 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/api.md +158 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/configuration.md +137 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/gotchas.md +133 -0
- package/skills/cloudflare-deploy/references/realtime-sfu/patterns.md +174 -0
- package/skills/cloudflare-deploy/references/realtimekit/README.md +113 -0
- package/skills/cloudflare-deploy/references/realtimekit/api.md +212 -0
- package/skills/cloudflare-deploy/references/realtimekit/configuration.md +203 -0
- package/skills/cloudflare-deploy/references/realtimekit/gotchas.md +169 -0
- package/skills/cloudflare-deploy/references/realtimekit/patterns.md +223 -0
- package/skills/cloudflare-deploy/references/sandbox/README.md +96 -0
- package/skills/cloudflare-deploy/references/sandbox/api.md +198 -0
- package/skills/cloudflare-deploy/references/sandbox/configuration.md +143 -0
- package/skills/cloudflare-deploy/references/sandbox/gotchas.md +194 -0
- package/skills/cloudflare-deploy/references/sandbox/patterns.md +201 -0
- package/skills/cloudflare-deploy/references/secrets-store/README.md +74 -0
- package/skills/cloudflare-deploy/references/secrets-store/api.md +200 -0
- package/skills/cloudflare-deploy/references/secrets-store/configuration.md +185 -0
- package/skills/cloudflare-deploy/references/secrets-store/gotchas.md +97 -0
- package/skills/cloudflare-deploy/references/secrets-store/patterns.md +207 -0
- package/skills/cloudflare-deploy/references/smart-placement/README.md +138 -0
- package/skills/cloudflare-deploy/references/smart-placement/api.md +183 -0
- package/skills/cloudflare-deploy/references/smart-placement/configuration.md +196 -0
- package/skills/cloudflare-deploy/references/smart-placement/gotchas.md +174 -0
- package/skills/cloudflare-deploy/references/smart-placement/patterns.md +183 -0
- package/skills/cloudflare-deploy/references/snippets/README.md +68 -0
- package/skills/cloudflare-deploy/references/snippets/api.md +198 -0
- package/skills/cloudflare-deploy/references/snippets/configuration.md +227 -0
- package/skills/cloudflare-deploy/references/snippets/gotchas.md +86 -0
- package/skills/cloudflare-deploy/references/snippets/patterns.md +135 -0
- package/skills/cloudflare-deploy/references/spectrum/README.md +52 -0
- package/skills/cloudflare-deploy/references/spectrum/api.md +181 -0
- package/skills/cloudflare-deploy/references/spectrum/configuration.md +194 -0
- package/skills/cloudflare-deploy/references/spectrum/gotchas.md +145 -0
- package/skills/cloudflare-deploy/references/spectrum/patterns.md +196 -0
- package/skills/cloudflare-deploy/references/static-assets/README.md +65 -0
- package/skills/cloudflare-deploy/references/static-assets/api.md +199 -0
- package/skills/cloudflare-deploy/references/static-assets/configuration.md +186 -0
- package/skills/cloudflare-deploy/references/static-assets/gotchas.md +162 -0
- package/skills/cloudflare-deploy/references/static-assets/patterns.md +189 -0
- package/skills/cloudflare-deploy/references/stream/README.md +114 -0
- package/skills/cloudflare-deploy/references/stream/api-live.md +195 -0
- package/skills/cloudflare-deploy/references/stream/api.md +199 -0
- package/skills/cloudflare-deploy/references/stream/configuration.md +141 -0
- package/skills/cloudflare-deploy/references/stream/gotchas.md +130 -0
- package/skills/cloudflare-deploy/references/stream/patterns.md +184 -0
- package/skills/cloudflare-deploy/references/tail-workers/README.md +89 -0
- package/skills/cloudflare-deploy/references/tail-workers/api.md +200 -0
- package/skills/cloudflare-deploy/references/tail-workers/configuration.md +176 -0
- package/skills/cloudflare-deploy/references/tail-workers/gotchas.md +192 -0
- package/skills/cloudflare-deploy/references/tail-workers/patterns.md +180 -0
- package/skills/cloudflare-deploy/references/terraform/README.md +102 -0
- package/skills/cloudflare-deploy/references/terraform/api.md +178 -0
- package/skills/cloudflare-deploy/references/terraform/configuration.md +197 -0
- package/skills/cloudflare-deploy/references/terraform/gotchas.md +150 -0
- package/skills/cloudflare-deploy/references/terraform/patterns.md +174 -0
- package/skills/cloudflare-deploy/references/tunnel/README.md +129 -0
- package/skills/cloudflare-deploy/references/tunnel/api.md +193 -0
- package/skills/cloudflare-deploy/references/tunnel/configuration.md +157 -0
- package/skills/cloudflare-deploy/references/tunnel/gotchas.md +147 -0
- package/skills/cloudflare-deploy/references/tunnel/networking.md +168 -0
- package/skills/cloudflare-deploy/references/tunnel/patterns.md +192 -0
- package/skills/cloudflare-deploy/references/turn/README.md +82 -0
- package/skills/cloudflare-deploy/references/turn/api.md +239 -0
- package/skills/cloudflare-deploy/references/turn/configuration.md +179 -0
- package/skills/cloudflare-deploy/references/turn/gotchas.md +231 -0
- package/skills/cloudflare-deploy/references/turn/patterns.md +213 -0
- package/skills/cloudflare-deploy/references/turnstile/README.md +99 -0
- package/skills/cloudflare-deploy/references/turnstile/api.md +240 -0
- package/skills/cloudflare-deploy/references/turnstile/configuration.md +222 -0
- package/skills/cloudflare-deploy/references/turnstile/gotchas.md +218 -0
- package/skills/cloudflare-deploy/references/turnstile/patterns.md +193 -0
- package/skills/cloudflare-deploy/references/vectorize/README.md +133 -0
- package/skills/cloudflare-deploy/references/vectorize/api.md +88 -0
- package/skills/cloudflare-deploy/references/vectorize/configuration.md +88 -0
- package/skills/cloudflare-deploy/references/vectorize/gotchas.md +76 -0
- package/skills/cloudflare-deploy/references/vectorize/patterns.md +90 -0
- package/skills/cloudflare-deploy/references/waf/README.md +113 -0
- package/skills/cloudflare-deploy/references/waf/api.md +202 -0
- package/skills/cloudflare-deploy/references/waf/configuration.md +203 -0
- package/skills/cloudflare-deploy/references/waf/gotchas.md +204 -0
- package/skills/cloudflare-deploy/references/waf/patterns.md +197 -0
- package/skills/cloudflare-deploy/references/web-analytics/README.md +140 -0
- package/skills/cloudflare-deploy/references/web-analytics/configuration.md +76 -0
- package/skills/cloudflare-deploy/references/web-analytics/gotchas.md +82 -0
- package/skills/cloudflare-deploy/references/web-analytics/integration.md +60 -0
- package/skills/cloudflare-deploy/references/web-analytics/patterns.md +91 -0
- package/skills/cloudflare-deploy/references/workerd/README.md +78 -0
- package/skills/cloudflare-deploy/references/workerd/api.md +185 -0
- package/skills/cloudflare-deploy/references/workerd/configuration.md +183 -0
- package/skills/cloudflare-deploy/references/workerd/gotchas.md +139 -0
- package/skills/cloudflare-deploy/references/workerd/patterns.md +192 -0
- package/skills/cloudflare-deploy/references/workers/README.md +108 -0
- package/skills/cloudflare-deploy/references/workers/api.md +195 -0
- package/skills/cloudflare-deploy/references/workers/configuration.md +185 -0
- package/skills/cloudflare-deploy/references/workers/frameworks.md +197 -0
- package/skills/cloudflare-deploy/references/workers/gotchas.md +136 -0
- package/skills/cloudflare-deploy/references/workers/patterns.md +198 -0
- package/skills/cloudflare-deploy/references/workers-ai/README.md +197 -0
- package/skills/cloudflare-deploy/references/workers-ai/api.md +112 -0
- package/skills/cloudflare-deploy/references/workers-ai/configuration.md +97 -0
- package/skills/cloudflare-deploy/references/workers-ai/gotchas.md +114 -0
- package/skills/cloudflare-deploy/references/workers-ai/patterns.md +120 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/README.md +89 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/api.md +196 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/configuration.md +167 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/gotchas.md +134 -0
- package/skills/cloudflare-deploy/references/workers-for-platforms/patterns.md +188 -0
- package/skills/cloudflare-deploy/references/workers-playground/README.md +127 -0
- package/skills/cloudflare-deploy/references/workers-playground/api.md +101 -0
- package/skills/cloudflare-deploy/references/workers-playground/configuration.md +163 -0
- package/skills/cloudflare-deploy/references/workers-playground/gotchas.md +88 -0
- package/skills/cloudflare-deploy/references/workers-playground/patterns.md +132 -0
- package/skills/cloudflare-deploy/references/workers-vpc/README.md +127 -0
- package/skills/cloudflare-deploy/references/workers-vpc/api.md +202 -0
- package/skills/cloudflare-deploy/references/workers-vpc/configuration.md +147 -0
- package/skills/cloudflare-deploy/references/workers-vpc/gotchas.md +167 -0
- package/skills/cloudflare-deploy/references/workers-vpc/patterns.md +209 -0
- package/skills/cloudflare-deploy/references/workflows/README.md +69 -0
- package/skills/cloudflare-deploy/references/workflows/api.md +185 -0
- package/skills/cloudflare-deploy/references/workflows/configuration.md +151 -0
- package/skills/cloudflare-deploy/references/workflows/gotchas.md +97 -0
- package/skills/cloudflare-deploy/references/workflows/patterns.md +175 -0
- package/skills/cloudflare-deploy/references/wrangler/README.md +141 -0
- package/skills/cloudflare-deploy/references/wrangler/api.md +188 -0
- package/skills/cloudflare-deploy/references/wrangler/auth.md +73 -0
- package/skills/cloudflare-deploy/references/wrangler/configuration.md +197 -0
- package/skills/cloudflare-deploy/references/wrangler/gotchas.md +197 -0
- package/skills/cloudflare-deploy/references/wrangler/patterns.md +209 -0
- package/skills/cloudflare-deploy/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
- package/skills/cloudflare-deploy/references/zaraz/README.md +111 -0
- package/skills/cloudflare-deploy/references/zaraz/api.md +112 -0
- package/skills/cloudflare-deploy/references/zaraz/configuration.md +90 -0
- package/skills/cloudflare-deploy/references/zaraz/gotchas.md +81 -0
- package/skills/cloudflare-deploy/references/zaraz/patterns.md +74 -0
- package/skills/collaboration/brainstorming/SKILL.md +75 -0
- package/skills/collaboration/dispatching-parallel-agents/SKILL.md +184 -0
- package/skills/collaboration/executing-plans/SKILL.md +78 -0
- package/skills/collaboration/finishing-a-development-branch/SKILL.md +202 -0
- package/skills/collaboration/phase-prompting/SKILL.md +292 -0
- package/skills/collaboration/receiving-code-review/SKILL.md +211 -0
- package/skills/collaboration/requesting-code-review/SKILL.md +107 -0
- package/skills/collaboration/requesting-code-review/code-reviewer.md +146 -0
- package/skills/collaboration/subagent-driven-development/SKILL.md +188 -0
- package/skills/collaboration/using-git-worktrees/SKILL.md +215 -0
- package/skills/collaboration/writing-plans/SKILL.md +118 -0
- package/skills/debugging/defense-in-depth/SKILL.md +130 -0
- package/skills/debugging/root-cause-tracing/SKILL.md +177 -0
- package/skills/debugging/root-cause-tracing/find-polluter.sh +63 -0
- package/skills/debugging/systematic-debugging/SKILL.md +295 -0
- package/skills/debugging/systematic-debugging/test-academic.md +14 -0
- package/skills/debugging/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/debugging/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/debugging/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/debugging/verification-before-completion/SKILL.md +142 -0
- package/skills/develop-web-game/LICENSE.txt +201 -0
- package/skills/develop-web-game/SKILL.md +149 -0
- package/skills/develop-web-game/agents/openai.yaml +6 -0
- package/skills/develop-web-game/assets/game-small.svg +4 -0
- package/skills/develop-web-game/assets/game.png +0 -0
- package/skills/develop-web-game/references/action_payloads.json +7 -0
- package/skills/develop-web-game/scripts/web_game_playwright_client.js +356 -0
- package/skills/doc/LICENSE.txt +201 -0
- package/skills/doc/SKILL.md +80 -0
- package/skills/doc/agents/openai.yaml +6 -0
- package/skills/doc/assets/doc-small.svg +3 -0
- package/skills/doc/assets/doc.png +0 -0
- package/skills/doc/scripts/render_docx.py +296 -0
- package/skills/figma/LICENSE.txt +202 -0
- package/skills/figma/SKILL.md +42 -0
- package/skills/figma/agents/openai.yaml +14 -0
- package/skills/figma/assets/figma-small.svg +3 -0
- package/skills/figma/assets/figma.png +0 -0
- package/skills/figma/assets/icon.svg +28 -0
- package/skills/figma/references/figma-mcp-config.md +35 -0
- package/skills/figma/references/figma-tools-and-prompts.md +34 -0
- package/skills/figma-implement-design/LICENSE.txt +202 -0
- package/skills/figma-implement-design/SKILL.md +264 -0
- package/skills/figma-implement-design/agents/openai.yaml +14 -0
- package/skills/figma-implement-design/assets/figma-small.svg +3 -0
- package/skills/figma-implement-design/assets/figma.png +0 -0
- package/skills/figma-implement-design/assets/icon.svg +28 -0
- package/skills/gh-address-comments/LICENSE.txt +202 -0
- package/skills/gh-address-comments/SKILL.md +25 -0
- package/skills/gh-address-comments/agents/openai.yaml +6 -0
- package/skills/gh-address-comments/assets/github-small.svg +3 -0
- package/skills/gh-address-comments/assets/github.png +0 -0
- package/skills/gh-address-comments/scripts/fetch_comments.py +237 -0
- package/skills/gh-fix-ci/LICENSE.txt +201 -0
- package/skills/gh-fix-ci/SKILL.md +69 -0
- package/skills/gh-fix-ci/agents/openai.yaml +6 -0
- package/skills/gh-fix-ci/assets/github-small.svg +3 -0
- package/skills/gh-fix-ci/assets/github.png +0 -0
- package/skills/gh-fix-ci/scripts/inspect_pr_checks.py +509 -0
- package/skills/goal-driven-project-loop/SKILL.md +217 -0
- package/skills/goal-driven-project-loop/references/goal-contract-template.md +42 -0
- package/skills/imagegen/LICENSE.txt +201 -0
- package/skills/imagegen/SKILL.md +174 -0
- package/skills/imagegen/agents/openai.yaml +6 -0
- package/skills/imagegen/assets/imagegen-small.svg +5 -0
- package/skills/imagegen/assets/imagegen.png +0 -0
- package/skills/imagegen/references/cli.md +132 -0
- package/skills/imagegen/references/codex-network.md +28 -0
- package/skills/imagegen/references/image-api.md +36 -0
- package/skills/imagegen/references/prompting.md +81 -0
- package/skills/imagegen/references/sample-prompts.md +384 -0
- package/skills/imagegen/scripts/image_gen.py +876 -0
- package/skills/jupyter-notebook/LICENSE.txt +201 -0
- package/skills/jupyter-notebook/SKILL.md +107 -0
- package/skills/jupyter-notebook/agents/openai.yaml +6 -0
- package/skills/jupyter-notebook/assets/experiment-template.ipynb +110 -0
- package/skills/jupyter-notebook/assets/jupyter-small.svg +3 -0
- package/skills/jupyter-notebook/assets/jupyter.png +0 -0
- package/skills/jupyter-notebook/assets/tutorial-template.ipynb +107 -0
- package/skills/jupyter-notebook/references/experiment-patterns.md +10 -0
- package/skills/jupyter-notebook/references/notebook-structure.md +17 -0
- package/skills/jupyter-notebook/references/quality-checklist.md +11 -0
- package/skills/jupyter-notebook/references/tutorial-patterns.md +9 -0
- package/skills/jupyter-notebook/scripts/new_notebook.py +130 -0
- package/skills/linear/LICENSE.txt +202 -0
- package/skills/linear/SKILL.md +87 -0
- package/skills/linear/agents/openai.yaml +14 -0
- package/skills/linear/assets/linear-small.svg +5 -0
- package/skills/linear/assets/linear.png +0 -0
- package/skills/netlify-deploy/LICENSE.txt +201 -0
- package/skills/netlify-deploy/SKILL.md +247 -0
- package/skills/netlify-deploy/agents/openai.yaml +6 -0
- package/skills/netlify-deploy/assets/netlify-small.svg +11 -0
- package/skills/netlify-deploy/assets/netlify.png +0 -0
- package/skills/netlify-deploy/references/cli-commands.md +162 -0
- package/skills/netlify-deploy/references/deployment-patterns.md +303 -0
- package/skills/netlify-deploy/references/netlify-toml.md +259 -0
- package/skills/notion-knowledge-capture/LICENSE.txt +7 -0
- package/skills/notion-knowledge-capture/SKILL.md +56 -0
- package/skills/notion-knowledge-capture/agents/openai.yaml +14 -0
- package/skills/notion-knowledge-capture/assets/notion-small.svg +11 -0
- package/skills/notion-knowledge-capture/assets/notion.png +0 -0
- package/skills/notion-knowledge-capture/evaluations/README.md +95 -0
- package/skills/notion-knowledge-capture/evaluations/conversation-to-wiki.json +31 -0
- package/skills/notion-knowledge-capture/evaluations/decision-record.json +31 -0
- package/skills/notion-knowledge-capture/examples/conversation-to-faq.md +226 -0
- package/skills/notion-knowledge-capture/examples/decision-capture.md +126 -0
- package/skills/notion-knowledge-capture/examples/how-to-guide.md +118 -0
- package/skills/notion-knowledge-capture/reference/database-best-practices.md +112 -0
- package/skills/notion-knowledge-capture/reference/decision-log-database.md +58 -0
- package/skills/notion-knowledge-capture/reference/documentation-database.md +93 -0
- package/skills/notion-knowledge-capture/reference/faq-database.md +57 -0
- package/skills/notion-knowledge-capture/reference/how-to-guide-database.md +38 -0
- package/skills/notion-knowledge-capture/reference/learning-database.md +35 -0
- package/skills/notion-knowledge-capture/reference/team-wiki-database.md +27 -0
- package/skills/notion-meeting-intelligence/LICENSE.txt +7 -0
- package/skills/notion-meeting-intelligence/SKILL.md +60 -0
- package/skills/notion-meeting-intelligence/agents/openai.yaml +14 -0
- package/skills/notion-meeting-intelligence/assets/notion-small.svg +11 -0
- package/skills/notion-meeting-intelligence/assets/notion.png +0 -0
- package/skills/notion-meeting-intelligence/evaluations/README.md +101 -0
- package/skills/notion-meeting-intelligence/evaluations/decision-meeting-prep.json +35 -0
- package/skills/notion-meeting-intelligence/evaluations/status-meeting-prep.json +35 -0
- package/skills/notion-meeting-intelligence/examples/customer-meeting.md +125 -0
- package/skills/notion-meeting-intelligence/examples/executive-review.md +78 -0
- package/skills/notion-meeting-intelligence/examples/project-decision.md +431 -0
- package/skills/notion-meeting-intelligence/examples/sprint-planning.md +80 -0
- package/skills/notion-meeting-intelligence/reference/brainstorming-template.md +81 -0
- package/skills/notion-meeting-intelligence/reference/decision-meeting-template.md +94 -0
- package/skills/notion-meeting-intelligence/reference/one-on-one-template.md +58 -0
- package/skills/notion-meeting-intelligence/reference/retrospective-template.md +58 -0
- package/skills/notion-meeting-intelligence/reference/sprint-planning-template.md +68 -0
- package/skills/notion-meeting-intelligence/reference/status-update-template.md +74 -0
- package/skills/notion-meeting-intelligence/reference/template-selection-guide.md +56 -0
- package/skills/notion-research-documentation/LICENSE.txt +7 -0
- package/skills/notion-research-documentation/SKILL.md +59 -0
- package/skills/notion-research-documentation/agents/openai.yaml +14 -0
- package/skills/notion-research-documentation/assets/notion-small.svg +11 -0
- package/skills/notion-research-documentation/assets/notion.png +0 -0
- package/skills/notion-research-documentation/evaluations/README.md +109 -0
- package/skills/notion-research-documentation/evaluations/basic-research.json +28 -0
- package/skills/notion-research-documentation/evaluations/research-to-database.json +29 -0
- package/skills/notion-research-documentation/examples/competitor-analysis.md +283 -0
- package/skills/notion-research-documentation/examples/market-research.md +62 -0
- package/skills/notion-research-documentation/examples/technical-investigation.md +233 -0
- package/skills/notion-research-documentation/examples/trip-planning.md +128 -0
- package/skills/notion-research-documentation/reference/advanced-search.md +212 -0
- package/skills/notion-research-documentation/reference/citations.md +190 -0
- package/skills/notion-research-documentation/reference/comparison-format.md +37 -0
- package/skills/notion-research-documentation/reference/comparison-template.md +44 -0
- package/skills/notion-research-documentation/reference/comprehensive-report-format.md +41 -0
- package/skills/notion-research-documentation/reference/comprehensive-report-template.md +64 -0
- package/skills/notion-research-documentation/reference/format-selection-guide.md +95 -0
- package/skills/notion-research-documentation/reference/quick-brief-format.md +37 -0
- package/skills/notion-research-documentation/reference/quick-brief-template.md +25 -0
- package/skills/notion-research-documentation/reference/research-summary-format.md +33 -0
- package/skills/notion-research-documentation/reference/research-summary-template.md +49 -0
- package/skills/notion-spec-to-implementation/LICENSE.txt +7 -0
- package/skills/notion-spec-to-implementation/SKILL.md +58 -0
- package/skills/notion-spec-to-implementation/agents/openai.yaml +14 -0
- package/skills/notion-spec-to-implementation/assets/notion-small.svg +11 -0
- package/skills/notion-spec-to-implementation/assets/notion.png +0 -0
- package/skills/notion-spec-to-implementation/evaluations/README.md +120 -0
- package/skills/notion-spec-to-implementation/evaluations/basic-spec-implementation.json +32 -0
- package/skills/notion-spec-to-implementation/evaluations/spec-to-tasks.json +35 -0
- package/skills/notion-spec-to-implementation/examples/api-feature.md +461 -0
- package/skills/notion-spec-to-implementation/examples/database-migration.md +81 -0
- package/skills/notion-spec-to-implementation/examples/ui-component.md +68 -0
- package/skills/notion-spec-to-implementation/reference/milestone-summary-template.md +27 -0
- package/skills/notion-spec-to-implementation/reference/progress-tracking.md +458 -0
- package/skills/notion-spec-to-implementation/reference/progress-update-template.md +25 -0
- package/skills/notion-spec-to-implementation/reference/quick-implementation-plan.md +26 -0
- package/skills/notion-spec-to-implementation/reference/spec-parsing.md +383 -0
- package/skills/notion-spec-to-implementation/reference/standard-implementation-plan.md +146 -0
- package/skills/notion-spec-to-implementation/reference/task-creation-template.md +34 -0
- package/skills/notion-spec-to-implementation/reference/task-creation.md +441 -0
- package/skills/openai-docs/LICENSE.txt +201 -0
- package/skills/openai-docs/SKILL.md +68 -0
- package/skills/openai-docs/agents/openai.yaml +14 -0
- package/skills/openai-docs/assets/openai-small.svg +3 -0
- package/skills/openai-docs/assets/openai.png +0 -0
- package/skills/openai-docs/references/gpt-5p4-prompting-guide.md +433 -0
- package/skills/openai-docs/references/latest-model.md +35 -0
- package/skills/openai-docs/references/upgrading-to-gpt-5p4.md +164 -0
- package/skills/pdf/LICENSE.txt +201 -0
- package/skills/pdf/SKILL.md +67 -0
- package/skills/pdf/agents/openai.yaml +5 -0
- package/skills/pdf/assets/pdf.png +0 -0
- package/skills/phase-prompting/SKILL.md +162 -0
- package/skills/playwright/LICENSE.txt +201 -0
- package/skills/playwright/NOTICE.txt +14 -0
- package/skills/playwright/SKILL.md +147 -0
- package/skills/playwright/agents/openai.yaml +6 -0
- package/skills/playwright/assets/playwright-small.svg +3 -0
- package/skills/playwright/assets/playwright.png +0 -0
- package/skills/playwright/references/cli.md +116 -0
- package/skills/playwright/references/workflows.md +95 -0
- package/skills/playwright/scripts/playwright_cli.sh +25 -0
- package/skills/playwright-interactive/LICENSE.txt +201 -0
- package/skills/playwright-interactive/NOTICE.txt +13 -0
- package/skills/playwright-interactive/SKILL.md +693 -0
- package/skills/playwright-interactive/agents/openai.yaml +6 -0
- package/skills/playwright-interactive/assets/playwright-small.svg +3 -0
- package/skills/playwright-interactive/assets/playwright.png +0 -0
- package/skills/problem-solving/ABOUT.md +40 -0
- package/skills/problem-solving/collision-zone-thinking/SKILL.md +62 -0
- package/skills/problem-solving/inversion-exercise/SKILL.md +58 -0
- package/skills/problem-solving/meta-pattern-recognition/SKILL.md +54 -0
- package/skills/problem-solving/scale-game/SKILL.md +63 -0
- package/skills/problem-solving/simplification-cascades/SKILL.md +76 -0
- package/skills/problem-solving/when-stuck/SKILL.md +88 -0
- package/skills/render-deploy/LICENSE.txt +201 -0
- package/skills/render-deploy/SKILL.md +479 -0
- package/skills/render-deploy/agents/openai.yaml +14 -0
- package/skills/render-deploy/assets/docker.yaml +62 -0
- package/skills/render-deploy/assets/go-api.yaml +35 -0
- package/skills/render-deploy/assets/nextjs-postgres.yaml +35 -0
- package/skills/render-deploy/assets/node-express.yaml +25 -0
- package/skills/render-deploy/assets/python-django.yaml +89 -0
- package/skills/render-deploy/assets/render-small.svg +3 -0
- package/skills/render-deploy/assets/render.png +0 -0
- package/skills/render-deploy/assets/static-site.yaml +54 -0
- package/skills/render-deploy/references/blueprint-spec.md +718 -0
- package/skills/render-deploy/references/codebase-analysis.md +49 -0
- package/skills/render-deploy/references/configuration-guide.md +603 -0
- package/skills/render-deploy/references/deployment-details.md +224 -0
- package/skills/render-deploy/references/direct-creation.md +113 -0
- package/skills/render-deploy/references/error-patterns.md +13 -0
- package/skills/render-deploy/references/post-deploy-checks.md +36 -0
- package/skills/render-deploy/references/runtimes.md +473 -0
- package/skills/render-deploy/references/service-types.md +450 -0
- package/skills/render-deploy/references/troubleshooting-basics.md +36 -0
- package/skills/research/ABOUT.md +20 -0
- package/skills/research/tracing-knowledge-lineages/SKILL.md +203 -0
- package/skills/round-prompting/SKILL.md +148 -0
- package/skills/screenshot/LICENSE.txt +201 -0
- package/skills/screenshot/SKILL.md +267 -0
- package/skills/screenshot/agents/openai.yaml +6 -0
- package/skills/screenshot/assets/screenshot-small.svg +5 -0
- package/skills/screenshot/assets/screenshot.png +0 -0
- package/skills/screenshot/scripts/ensure_macos_permissions.sh +54 -0
- package/skills/screenshot/scripts/macos_display_info.swift +22 -0
- package/skills/screenshot/scripts/macos_permissions.swift +40 -0
- package/skills/screenshot/scripts/macos_window_info.swift +126 -0
- package/skills/screenshot/scripts/take_screenshot.ps1 +163 -0
- package/skills/screenshot/scripts/take_screenshot.py +585 -0
- package/skills/security-best-practices/LICENSE.txt +201 -0
- package/skills/security-best-practices/SKILL.md +86 -0
- package/skills/security-best-practices/agents/openai.yaml +4 -0
- package/skills/security-best-practices/references/golang-general-backend-security.md +826 -0
- package/skills/security-best-practices/references/javascript-express-web-server-security.md +1158 -0
- package/skills/security-best-practices/references/javascript-general-web-frontend-security.md +747 -0
- package/skills/security-best-practices/references/javascript-jquery-web-frontend-security.md +678 -0
- package/skills/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +1144 -0
- package/skills/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +990 -0
- package/skills/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +791 -0
- package/skills/security-best-practices/references/python-django-web-server-security.md +882 -0
- package/skills/security-best-practices/references/python-fastapi-web-server-security.md +1036 -0
- package/skills/security-best-practices/references/python-flask-web-server-security.md +705 -0
- package/skills/security-ownership-map/LICENSE.txt +201 -0
- package/skills/security-ownership-map/SKILL.md +206 -0
- package/skills/security-ownership-map/agents/openai.yaml +4 -0
- package/skills/security-ownership-map/references/neo4j-import.md +60 -0
- package/skills/security-ownership-map/scripts/build_ownership_map.py +956 -0
- package/skills/security-ownership-map/scripts/community_maintainers.py +544 -0
- package/skills/security-ownership-map/scripts/query_ownership.py +483 -0
- package/skills/security-ownership-map/scripts/run_ownership_map.py +200 -0
- package/skills/security-threat-model/LICENSE.txt +201 -0
- package/skills/security-threat-model/SKILL.md +81 -0
- package/skills/security-threat-model/agents/openai.yaml +4 -0
- package/skills/security-threat-model/references/prompt-template.md +255 -0
- package/skills/security-threat-model/references/security-controls-and-assets.md +32 -0
- package/skills/sentry/LICENSE.txt +201 -0
- package/skills/sentry/SKILL.md +123 -0
- package/skills/sentry/agents/openai.yaml +6 -0
- package/skills/sentry/assets/sentry-small.svg +3 -0
- package/skills/sentry/assets/sentry.png +0 -0
- package/skills/sentry/scripts/sentry_api.py +238 -0
- package/skills/slides/LICENSE.txt +201 -0
- package/skills/slides/SKILL.md +71 -0
- package/skills/slides/agents/openai.yaml +6 -0
- package/skills/slides/assets/pptxgenjs_helpers/code.js +104 -0
- package/skills/slides/assets/pptxgenjs_helpers/image.js +333 -0
- package/skills/slides/assets/pptxgenjs_helpers/index.js +33 -0
- package/skills/slides/assets/pptxgenjs_helpers/latex.js +51 -0
- package/skills/slides/assets/pptxgenjs_helpers/layout.js +643 -0
- package/skills/slides/assets/pptxgenjs_helpers/layout_builders.js +358 -0
- package/skills/slides/assets/pptxgenjs_helpers/svg.js +36 -0
- package/skills/slides/assets/pptxgenjs_helpers/text.js +789 -0
- package/skills/slides/assets/pptxgenjs_helpers/util.js +24 -0
- package/skills/slides/assets/slides-small.svg +3 -0
- package/skills/slides/assets/slides.png +0 -0
- package/skills/slides/references/pptxgenjs-helpers.md +61 -0
- package/skills/slides/scripts/create_montage.py +300 -0
- package/skills/slides/scripts/detect_font.py +873 -0
- package/skills/slides/scripts/ensure_raster_image.py +202 -0
- package/skills/slides/scripts/render_slides.py +273 -0
- package/skills/slides/scripts/slides_test.py +201 -0
- package/skills/sora/LICENSE.txt +201 -0
- package/skills/sora/SKILL.md +153 -0
- package/skills/sora/agents/openai.yaml +6 -0
- package/skills/sora/assets/sora-small.svg +4 -0
- package/skills/sora/assets/sora.png +0 -0
- package/skills/sora/references/cinematic-shots.md +53 -0
- package/skills/sora/references/cli.md +248 -0
- package/skills/sora/references/codex-network.md +28 -0
- package/skills/sora/references/prompting.md +137 -0
- package/skills/sora/references/sample-prompts.md +95 -0
- package/skills/sora/references/social-ads.md +42 -0
- package/skills/sora/references/troubleshooting.md +58 -0
- package/skills/sora/references/video-api.md +45 -0
- package/skills/sora/scripts/sora.py +970 -0
- package/skills/speech/LICENSE.txt +201 -0
- package/skills/speech/SKILL.md +144 -0
- package/skills/speech/agents/openai.yaml +6 -0
- package/skills/speech/assets/speech-small.svg +3 -0
- package/skills/speech/assets/speech.png +0 -0
- package/skills/speech/references/accessibility.md +32 -0
- package/skills/speech/references/audio-api.md +31 -0
- package/skills/speech/references/cli.md +99 -0
- package/skills/speech/references/codex-network.md +28 -0
- package/skills/speech/references/ivr.md +32 -0
- package/skills/speech/references/narration.md +31 -0
- package/skills/speech/references/prompting.md +38 -0
- package/skills/speech/references/sample-prompts.md +44 -0
- package/skills/speech/references/voice-directions.md +80 -0
- package/skills/speech/references/voiceover.md +31 -0
- package/skills/speech/scripts/text_to_speech.py +528 -0
- package/skills/spreadsheet/LICENSE.txt +201 -0
- package/skills/spreadsheet/SKILL.md +145 -0
- package/skills/spreadsheet/agents/openai.yaml +6 -0
- package/skills/spreadsheet/assets/spreadsheet-small.svg +3 -0
- package/skills/spreadsheet/assets/spreadsheet.png +0 -0
- package/skills/spreadsheet/references/examples/openpyxl/create_basic_spreadsheet.py +51 -0
- package/skills/spreadsheet/references/examples/openpyxl/create_spreadsheet_with_styling.py +96 -0
- package/skills/spreadsheet/references/examples/openpyxl/read_existing_spreadsheet.py +59 -0
- package/skills/spreadsheet/references/examples/openpyxl/styling_spreadsheet.py +79 -0
- package/skills/testing/condition-based-waiting/SKILL.md +123 -0
- package/skills/testing/condition-based-waiting/example.ts +158 -0
- package/skills/testing/test-driven-development/SKILL.md +367 -0
- package/skills/testing/testing-anti-patterns/SKILL.md +304 -0
- package/skills/transcribe/LICENSE.txt +201 -0
- package/skills/transcribe/SKILL.md +81 -0
- package/skills/transcribe/agents/openai.yaml +6 -0
- package/skills/transcribe/assets/transcribe-small.svg +3 -0
- package/skills/transcribe/assets/transcribe.png +0 -0
- package/skills/transcribe/references/api.md +8 -0
- package/skills/transcribe/scripts/transcribe_diarize.py +276 -0
- package/skills/using-skills/SKILL.md +102 -0
- package/skills/using-skills/find-skills +107 -0
- package/skills/using-skills/skill-run +44 -0
- package/skills/vercel-deploy/LICENSE.txt +21 -0
- package/skills/vercel-deploy/SKILL.md +77 -0
- package/skills/vercel-deploy/agents/openai.yaml +6 -0
- package/skills/vercel-deploy/assets/vercel-small.svg +5 -0
- package/skills/vercel-deploy/assets/vercel.png +0 -0
- package/skills/vercel-deploy/scripts/deploy.sh +301 -0
- package/skills/winui-app/LICENSE.txt +202 -0
- package/skills/winui-app/SKILL.md +94 -0
- package/skills/winui-app/agents/openai.yaml +5 -0
- package/skills/winui-app/assets/winui.png +0 -0
- package/skills/winui-app/config.yaml +50 -0
- package/skills/winui-app/references/_sections.md +96 -0
- package/skills/winui-app/references/accessibility-input-and-localization.md +51 -0
- package/skills/winui-app/references/build-run-and-launch-verification.md +72 -0
- package/skills/winui-app/references/community-toolkit-controls-and-helpers.md +57 -0
- package/skills/winui-app/references/controls-layout-and-adaptive-ui.md +84 -0
- package/skills/winui-app/references/foundation-environment-audit-and-remediation.md +82 -0
- package/skills/winui-app/references/foundation-setup-and-project-selection.md +67 -0
- package/skills/winui-app/references/foundation-template-first-recovery.md +62 -0
- package/skills/winui-app/references/foundation-winui-app-structure.md +62 -0
- package/skills/winui-app/references/motion-animations-and-polish.md +45 -0
- package/skills/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -0
- package/skills/winui-app/references/sample-source-map.md +37 -0
- package/skills/winui-app/references/shell-navigation-and-windowing.md +67 -0
- package/skills/winui-app/references/styling-theming-materials-and-icons.md +71 -0
- package/skills/winui-app/references/testing-debugging-and-review-checklists.md +77 -0
- package/skills/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -0
- package/skills/yeet/LICENSE.txt +201 -0
- package/skills/yeet/SKILL.md +28 -0
- package/skills/yeet/agents/openai.yaml +6 -0
- package/skills/yeet/assets/yeet-small.svg +3 -0
- package/skills/yeet/assets/yeet.png +0 -0
- package/dist/src/agents/definitions.d.ts +0 -16
- package/dist/src/agents/definitions.d.ts.map +0 -1
- package/dist/src/agents/definitions.js +0 -148
- package/dist/src/agents/definitions.js.map +0 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# R2 SQL Gotchas
|
|
2
|
+
|
|
3
|
+
Limitations, troubleshooting, and common pitfalls for R2 SQL.
|
|
4
|
+
|
|
5
|
+
## Critical Limitations
|
|
6
|
+
|
|
7
|
+
### No Workers Binding
|
|
8
|
+
|
|
9
|
+
**Cannot call R2 SQL from Workers/Pages code** - no binding exists.
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
// ❌ This doesn't exist
|
|
13
|
+
export default {
|
|
14
|
+
async fetch(request, env) {
|
|
15
|
+
const result = await env.R2_SQL.query("SELECT * FROM table"); // Not possible
|
|
16
|
+
return Response.json(result);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Solutions:**
|
|
22
|
+
- HTTP API from external systems (not Workers)
|
|
23
|
+
- PyIceberg/Spark via r2-data-catalog REST API
|
|
24
|
+
- For Workers, use D1 or external databases
|
|
25
|
+
|
|
26
|
+
### ORDER BY Limitations
|
|
27
|
+
|
|
28
|
+
Can only order by:
|
|
29
|
+
1. **Partition key columns** - Always supported
|
|
30
|
+
2. **Aggregation functions** - Supported via shuffle strategy
|
|
31
|
+
|
|
32
|
+
**Cannot order by** regular non-partition columns.
|
|
33
|
+
|
|
34
|
+
```sql
|
|
35
|
+
-- ✅ Valid: ORDER BY partition key
|
|
36
|
+
SELECT * FROM logs.requests ORDER BY timestamp DESC LIMIT 100;
|
|
37
|
+
|
|
38
|
+
-- ✅ Valid: ORDER BY aggregation
|
|
39
|
+
SELECT region, SUM(amount) FROM sales.transactions
|
|
40
|
+
GROUP BY region ORDER BY SUM(amount) DESC;
|
|
41
|
+
|
|
42
|
+
-- ❌ Invalid: ORDER BY non-partition column
|
|
43
|
+
SELECT * FROM logs.requests ORDER BY user_id;
|
|
44
|
+
|
|
45
|
+
-- ❌ Invalid: ORDER BY alias (must repeat function)
|
|
46
|
+
SELECT region, SUM(amount) as total FROM sales.transactions
|
|
47
|
+
GROUP BY region ORDER BY total; -- Use ORDER BY SUM(amount)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Check partition spec: `DESCRIBE namespace.table_name`
|
|
51
|
+
|
|
52
|
+
## SQL Feature Limitations
|
|
53
|
+
|
|
54
|
+
| Feature | Supported | Notes |
|
|
55
|
+
|---------|-----------|-------|
|
|
56
|
+
| SELECT, WHERE, GROUP BY, HAVING | ✅ | Standard support |
|
|
57
|
+
| COUNT, SUM, AVG, MIN, MAX | ✅ | Standard aggregations |
|
|
58
|
+
| ORDER BY partition/aggregation | ✅ | See above |
|
|
59
|
+
| LIMIT | ✅ | Max 10,000 |
|
|
60
|
+
| Column aliases | ❌ | No AS alias |
|
|
61
|
+
| Expressions in SELECT | ❌ | No col1 + col2 |
|
|
62
|
+
| ORDER BY non-partition | ❌ | Fails at runtime |
|
|
63
|
+
| JOINs, subqueries, CTEs | ❌ | Denormalize at write time |
|
|
64
|
+
| Window functions, UNION | ❌ | Use external engines |
|
|
65
|
+
| INSERT/UPDATE/DELETE | ❌ | Use PyIceberg/Pipelines |
|
|
66
|
+
| Nested columns, arrays, JSON | ❌ | Flatten at write time |
|
|
67
|
+
|
|
68
|
+
**Workarounds:**
|
|
69
|
+
- No JOINs: Denormalize data or use Spark/PyIceberg
|
|
70
|
+
- No subqueries: Split into multiple queries
|
|
71
|
+
- No aliases: Accept generated names, transform in app
|
|
72
|
+
|
|
73
|
+
## Common Errors
|
|
74
|
+
|
|
75
|
+
### "Column not found"
|
|
76
|
+
**Cause:** Typo, column doesn't exist, or case mismatch
|
|
77
|
+
**Solution:** `DESCRIBE namespace.table_name` to check schema
|
|
78
|
+
|
|
79
|
+
### "Type mismatch"
|
|
80
|
+
```sql
|
|
81
|
+
-- ❌ Wrong types
|
|
82
|
+
WHERE status = '200' -- string instead of integer
|
|
83
|
+
WHERE timestamp > '2025-01-01' -- missing time/timezone
|
|
84
|
+
|
|
85
|
+
-- ✅ Correct types
|
|
86
|
+
WHERE status = 200
|
|
87
|
+
WHERE timestamp > '2025-01-01T00:00:00Z'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### "ORDER BY column not in partition key"
|
|
91
|
+
**Cause:** Ordering by non-partition column
|
|
92
|
+
**Solution:** Use partition key, aggregation, or remove ORDER BY. Check: `DESCRIBE table`
|
|
93
|
+
|
|
94
|
+
### "Token authentication failed"
|
|
95
|
+
```bash
|
|
96
|
+
# Check/set token
|
|
97
|
+
echo $WRANGLER_R2_SQL_AUTH_TOKEN
|
|
98
|
+
export WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>
|
|
99
|
+
|
|
100
|
+
# Or .env file
|
|
101
|
+
echo "WRANGLER_R2_SQL_AUTH_TOKEN=<your-token>" > .env
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### "Table not found"
|
|
105
|
+
```sql
|
|
106
|
+
-- Verify catalog and tables
|
|
107
|
+
SHOW DATABASES;
|
|
108
|
+
SHOW TABLES IN namespace_name;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Enable catalog: `npx wrangler r2 bucket catalog enable <bucket>`
|
|
112
|
+
|
|
113
|
+
### "LIMIT exceeds maximum"
|
|
114
|
+
Max LIMIT is 10,000. For pagination, use WHERE filters with partition keys.
|
|
115
|
+
|
|
116
|
+
### "No data returned" (unexpected)
|
|
117
|
+
**Debug steps:**
|
|
118
|
+
1. `SELECT COUNT(*) FROM table` - verify data exists
|
|
119
|
+
2. Remove WHERE filters incrementally
|
|
120
|
+
3. `SELECT * FROM table LIMIT 10` - inspect actual data/types
|
|
121
|
+
|
|
122
|
+
## Performance Issues
|
|
123
|
+
|
|
124
|
+
### Slow Queries
|
|
125
|
+
|
|
126
|
+
**Causes:** Too many partitions, large LIMIT, no filters, small files
|
|
127
|
+
|
|
128
|
+
```sql
|
|
129
|
+
-- ❌ Slow: No filters
|
|
130
|
+
SELECT * FROM logs.requests LIMIT 10000;
|
|
131
|
+
|
|
132
|
+
-- ✅ Fast: Filter on partition key
|
|
133
|
+
SELECT * FROM logs.requests
|
|
134
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND timestamp < '2025-01-16T00:00:00Z'
|
|
135
|
+
LIMIT 1000;
|
|
136
|
+
|
|
137
|
+
-- ✅ Faster: Multiple filters
|
|
138
|
+
SELECT * FROM logs.requests
|
|
139
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND status = 404 AND method = 'GET'
|
|
140
|
+
LIMIT 1000;
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**File optimization:**
|
|
144
|
+
- Target Parquet size: 100-500MB compressed
|
|
145
|
+
- Pipelines roll interval: 300+ sec (prod), 10 sec (dev)
|
|
146
|
+
- Run compaction to merge small files
|
|
147
|
+
|
|
148
|
+
### Query Timeout
|
|
149
|
+
|
|
150
|
+
**Solution:** Add restrictive WHERE filters, reduce time range, query smaller intervals
|
|
151
|
+
|
|
152
|
+
```sql
|
|
153
|
+
-- ❌ Times out: Year-long aggregation
|
|
154
|
+
SELECT status, COUNT(*) FROM logs.requests
|
|
155
|
+
WHERE timestamp >= '2024-01-01T00:00:00Z' GROUP BY status;
|
|
156
|
+
|
|
157
|
+
-- ✅ Faster: Month-long aggregation
|
|
158
|
+
SELECT status, COUNT(*) FROM logs.requests
|
|
159
|
+
WHERE timestamp >= '2025-01-01T00:00:00Z' AND timestamp < '2025-02-01T00:00:00Z'
|
|
160
|
+
GROUP BY status;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Best Practices
|
|
164
|
+
|
|
165
|
+
### Partitioning
|
|
166
|
+
- **Time-series:** Partition by day/hour on timestamp
|
|
167
|
+
- **Avoid:** High-cardinality keys (user_id), >10,000 partitions
|
|
168
|
+
|
|
169
|
+
```python
|
|
170
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
171
|
+
from pyiceberg.transforms import DayTransform
|
|
172
|
+
|
|
173
|
+
PartitionSpec(PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day"))
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Query Writing
|
|
177
|
+
- **Always use LIMIT** for early termination
|
|
178
|
+
- **Filter on partition keys first** for pruning
|
|
179
|
+
- **Combine filters with AND** for more pruning
|
|
180
|
+
|
|
181
|
+
```sql
|
|
182
|
+
-- Good
|
|
183
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND status = 404 AND method = 'GET' LIMIT 100
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Type Safety
|
|
187
|
+
- Quote strings: `'GET'` not `GET`
|
|
188
|
+
- RFC3339 timestamps: `'2025-01-01T00:00:00Z'` not `'2025-01-01'`
|
|
189
|
+
- ISO dates: `'2025-01-15'` not `'01/15/2025'`
|
|
190
|
+
|
|
191
|
+
### Data Organization
|
|
192
|
+
- **Pipelines:** Dev `roll_file_time: 10`, Prod `roll_file_time: 300+`
|
|
193
|
+
- **Compression:** Use `zstd`
|
|
194
|
+
- **Maintenance:** Compaction for small files, expire old snapshots
|
|
195
|
+
|
|
196
|
+
## Debugging Checklist
|
|
197
|
+
|
|
198
|
+
1. `npx wrangler r2 bucket catalog enable <bucket>` - Verify catalog
|
|
199
|
+
2. `echo $WRANGLER_R2_SQL_AUTH_TOKEN` - Check token
|
|
200
|
+
3. `SHOW DATABASES` - List namespaces
|
|
201
|
+
4. `SHOW TABLES IN namespace` - List tables
|
|
202
|
+
5. `DESCRIBE namespace.table` - Check schema
|
|
203
|
+
6. `SELECT COUNT(*) FROM namespace.table` - Verify data
|
|
204
|
+
7. `SELECT * FROM namespace.table LIMIT 10` - Test simple query
|
|
205
|
+
8. Add filters incrementally
|
|
206
|
+
|
|
207
|
+
## See Also
|
|
208
|
+
|
|
209
|
+
- [api.md](api.md) - SQL syntax
|
|
210
|
+
- [patterns.md](patterns.md) - Query optimization
|
|
211
|
+
- [configuration.md](configuration.md) - Setup
|
|
212
|
+
- [Cloudflare R2 SQL Docs](https://developers.cloudflare.com/r2-sql/)
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# R2 SQL Patterns
|
|
2
|
+
|
|
3
|
+
Common patterns, use cases, and integration examples for R2 SQL.
|
|
4
|
+
|
|
5
|
+
## Wrangler CLI Query
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Basic query
|
|
9
|
+
npx wrangler r2 sql query "my-bucket" "SELECT * FROM default.logs LIMIT 10"
|
|
10
|
+
|
|
11
|
+
# Multi-line query
|
|
12
|
+
npx wrangler r2 sql query "my-bucket" "
|
|
13
|
+
SELECT status, COUNT(*), AVG(response_time)
|
|
14
|
+
FROM logs.http_requests
|
|
15
|
+
WHERE timestamp >= '2025-01-01T00:00:00Z'
|
|
16
|
+
GROUP BY status
|
|
17
|
+
ORDER BY COUNT(*) DESC
|
|
18
|
+
LIMIT 100
|
|
19
|
+
"
|
|
20
|
+
|
|
21
|
+
# Use environment variable
|
|
22
|
+
export R2_SQL_WAREHOUSE="my-bucket"
|
|
23
|
+
npx wrangler r2 sql query "$R2_SQL_WAREHOUSE" "SELECT * FROM default.logs"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## HTTP API Query
|
|
27
|
+
|
|
28
|
+
For programmatic access from external systems (not Workers - see gotchas.md).
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
curl -X POST https://api.cloudflare.com/client/v4/accounts/{account_id}/r2/sql/query \
|
|
32
|
+
-H "Authorization: Bearer <your-token>" \
|
|
33
|
+
-H "Content-Type: application/json" \
|
|
34
|
+
-d '{
|
|
35
|
+
"warehouse": "my-bucket",
|
|
36
|
+
"query": "SELECT * FROM default.my_table WHERE status = 200 LIMIT 100"
|
|
37
|
+
}'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Response:
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"success": true,
|
|
44
|
+
"result": [{"user_id": "user_123", "timestamp": "2025-01-15T10:30:00Z", "status": 200}],
|
|
45
|
+
"errors": []
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Pipelines Integration
|
|
50
|
+
|
|
51
|
+
Stream data to Iceberg tables via Pipelines, then query with R2 SQL.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Setup pipeline (select Data Catalog Table destination)
|
|
55
|
+
npx wrangler pipelines setup
|
|
56
|
+
|
|
57
|
+
# Key settings:
|
|
58
|
+
# - Destination: Data Catalog Table
|
|
59
|
+
# - Compression: zstd (recommended)
|
|
60
|
+
# - Roll file time: 300+ sec (production), 10 sec (dev)
|
|
61
|
+
|
|
62
|
+
# Send data to pipeline
|
|
63
|
+
curl -X POST https://{stream-id}.ingest.cloudflare.com \
|
|
64
|
+
-H "Content-Type: application/json" \
|
|
65
|
+
-d '[{"user_id": "user_123", "event_type": "purchase", "timestamp": "2025-01-15T10:30:00Z", "amount": 29.99}]'
|
|
66
|
+
|
|
67
|
+
# Query ingested data (wait for roll interval)
|
|
68
|
+
npx wrangler r2 sql query "my-bucket" "
|
|
69
|
+
SELECT event_type, COUNT(*), SUM(amount)
|
|
70
|
+
FROM default.events
|
|
71
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z'
|
|
72
|
+
GROUP BY event_type
|
|
73
|
+
"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
See [pipelines/patterns.md](../pipelines/patterns.md) for detailed setup.
|
|
77
|
+
|
|
78
|
+
## PyIceberg Integration
|
|
79
|
+
|
|
80
|
+
Create and populate Iceberg tables with PyIceberg, then query with R2 SQL.
|
|
81
|
+
|
|
82
|
+
```python
|
|
83
|
+
from pyiceberg.catalog.rest import RestCatalog
|
|
84
|
+
import pyarrow as pa
|
|
85
|
+
import pandas as pd
|
|
86
|
+
|
|
87
|
+
# Setup catalog
|
|
88
|
+
catalog = RestCatalog(
|
|
89
|
+
name="my_catalog",
|
|
90
|
+
warehouse="my-bucket",
|
|
91
|
+
uri="https://<account-id>.r2.cloudflarestorage.com/iceberg/my-bucket",
|
|
92
|
+
token="<your-token>",
|
|
93
|
+
)
|
|
94
|
+
catalog.create_namespace_if_not_exists("analytics")
|
|
95
|
+
|
|
96
|
+
# Create table
|
|
97
|
+
schema = pa.schema([
|
|
98
|
+
pa.field("user_id", pa.string(), nullable=False),
|
|
99
|
+
pa.field("event_time", pa.timestamp("us", tz="UTC"), nullable=False),
|
|
100
|
+
pa.field("page_views", pa.int64(), nullable=False),
|
|
101
|
+
])
|
|
102
|
+
table = catalog.create_table(("analytics", "user_metrics"), schema=schema)
|
|
103
|
+
|
|
104
|
+
# Append data
|
|
105
|
+
df = pd.DataFrame({
|
|
106
|
+
"user_id": ["user_1", "user_2"],
|
|
107
|
+
"event_time": pd.to_datetime(["2025-01-15 10:00:00", "2025-01-15 11:00:00"], utc=True),
|
|
108
|
+
"page_views": [10, 25],
|
|
109
|
+
})
|
|
110
|
+
table.append(pa.Table.from_pandas(df, schema=schema))
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Query with R2 SQL:
|
|
114
|
+
```bash
|
|
115
|
+
npx wrangler r2 sql query "my-bucket" "
|
|
116
|
+
SELECT user_id, SUM(page_views)
|
|
117
|
+
FROM analytics.user_metrics
|
|
118
|
+
WHERE event_time >= '2025-01-15T00:00:00Z'
|
|
119
|
+
GROUP BY user_id
|
|
120
|
+
"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
See [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md) for advanced PyIceberg patterns.
|
|
124
|
+
|
|
125
|
+
## Use Cases
|
|
126
|
+
|
|
127
|
+
### Log Analytics
|
|
128
|
+
```sql
|
|
129
|
+
-- Error rate by endpoint
|
|
130
|
+
SELECT path, COUNT(*), SUM(CASE WHEN status >= 400 THEN 1 ELSE 0 END) as errors
|
|
131
|
+
FROM logs.http_requests
|
|
132
|
+
WHERE timestamp BETWEEN '2025-01-01T00:00:00Z' AND '2025-01-31T23:59:59Z'
|
|
133
|
+
GROUP BY path ORDER BY errors DESC LIMIT 20;
|
|
134
|
+
|
|
135
|
+
-- Response time stats
|
|
136
|
+
SELECT method, MIN(response_time_ms), AVG(response_time_ms), MAX(response_time_ms)
|
|
137
|
+
FROM logs.http_requests WHERE timestamp >= '2025-01-15T00:00:00Z' GROUP BY method;
|
|
138
|
+
|
|
139
|
+
-- Traffic by status
|
|
140
|
+
SELECT status, COUNT(*) FROM logs.http_requests
|
|
141
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND method = 'GET'
|
|
142
|
+
GROUP BY status ORDER BY COUNT(*) DESC;
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Fraud Detection
|
|
146
|
+
```sql
|
|
147
|
+
-- High-value transactions
|
|
148
|
+
SELECT location, COUNT(*), SUM(amount), AVG(amount)
|
|
149
|
+
FROM fraud.transactions WHERE transaction_timestamp >= '2025-01-01T00:00:00Z' AND amount > 1000.0
|
|
150
|
+
GROUP BY location ORDER BY SUM(amount) DESC LIMIT 20;
|
|
151
|
+
|
|
152
|
+
-- Flagged transactions
|
|
153
|
+
SELECT merchant_category, COUNT(*), AVG(amount) FROM fraud.transactions
|
|
154
|
+
WHERE is_fraud_flag = true AND transaction_timestamp >= '2025-01-01T00:00:00Z'
|
|
155
|
+
GROUP BY merchant_category HAVING COUNT(*) > 10 ORDER BY COUNT(*) DESC;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Business Intelligence
|
|
159
|
+
```sql
|
|
160
|
+
-- Sales by department
|
|
161
|
+
SELECT department, SUM(revenue), AVG(revenue), COUNT(*) FROM sales.transactions
|
|
162
|
+
WHERE sale_date >= '2024-01-01' GROUP BY department ORDER BY SUM(revenue) DESC LIMIT 10;
|
|
163
|
+
|
|
164
|
+
-- Product performance
|
|
165
|
+
SELECT category, COUNT(DISTINCT product_id), SUM(units_sold), SUM(revenue)
|
|
166
|
+
FROM sales.product_sales WHERE sale_date BETWEEN '2024-10-01' AND '2024-12-31'
|
|
167
|
+
GROUP BY category ORDER BY SUM(revenue) DESC;
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Connecting External Engines
|
|
171
|
+
|
|
172
|
+
R2 Data Catalog exposes Iceberg REST API. Connect Spark, Snowflake, Trino, DuckDB, etc.
|
|
173
|
+
|
|
174
|
+
```scala
|
|
175
|
+
// Apache Spark example
|
|
176
|
+
val spark = SparkSession.builder()
|
|
177
|
+
.config("spark.sql.catalog.my_catalog", "org.apache.iceberg.spark.SparkCatalog")
|
|
178
|
+
.config("spark.sql.catalog.my_catalog.catalog-impl", "org.apache.iceberg.rest.RESTCatalog")
|
|
179
|
+
.config("spark.sql.catalog.my_catalog.uri", "https://<account-id>.r2.cloudflarestorage.com/iceberg/my-bucket")
|
|
180
|
+
.config("spark.sql.catalog.my_catalog.token", "<token>")
|
|
181
|
+
.getOrCreate()
|
|
182
|
+
|
|
183
|
+
spark.sql("SELECT * FROM my_catalog.default.my_table LIMIT 10").show()
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
See [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md) for more engines.
|
|
187
|
+
|
|
188
|
+
## Performance Optimization
|
|
189
|
+
|
|
190
|
+
### Partitioning
|
|
191
|
+
- **Time-series:** day/hour on timestamp
|
|
192
|
+
- **Geographic:** region/country
|
|
193
|
+
- **Avoid:** High-cardinality keys (user_id)
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
from pyiceberg.partitioning import PartitionSpec, PartitionField
|
|
197
|
+
from pyiceberg.transforms import DayTransform
|
|
198
|
+
|
|
199
|
+
PartitionSpec(PartitionField(source_id=1, field_id=1000, transform=DayTransform(), name="day"))
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Query Optimization
|
|
203
|
+
- **Always use LIMIT** for early termination
|
|
204
|
+
- **Filter on partition keys first**
|
|
205
|
+
- **Multiple filters** for better pruning
|
|
206
|
+
|
|
207
|
+
```sql
|
|
208
|
+
-- Better: Multiple filters on partition key
|
|
209
|
+
SELECT * FROM logs.requests
|
|
210
|
+
WHERE timestamp >= '2025-01-15T00:00:00Z' AND status = 404 AND method = 'GET' LIMIT 100;
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### File Organization
|
|
214
|
+
- **Pipelines roll:** Dev 10-30s, Prod 300+s
|
|
215
|
+
- **Target Parquet:** 100-500MB compressed
|
|
216
|
+
|
|
217
|
+
## See Also
|
|
218
|
+
|
|
219
|
+
- [api.md](api.md) - SQL syntax reference
|
|
220
|
+
- [gotchas.md](gotchas.md) - Limitations and troubleshooting
|
|
221
|
+
- [r2-data-catalog/patterns.md](../r2-data-catalog/patterns.md) - PyIceberg advanced patterns
|
|
222
|
+
- [pipelines/patterns.md](../pipelines/patterns.md) - Streaming ingestion patterns
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Cloudflare Realtime SFU Reference
|
|
2
|
+
|
|
3
|
+
Expert guidance for building real-time audio/video/data applications using Cloudflare Realtime SFU (Selective Forwarding Unit).
|
|
4
|
+
|
|
5
|
+
## Reading Order
|
|
6
|
+
|
|
7
|
+
| Task | Files | ~Tokens |
|
|
8
|
+
|------|-------|---------|
|
|
9
|
+
| New project | README → configuration | ~1200 |
|
|
10
|
+
| Implement publish/subscribe | README → api | ~1600 |
|
|
11
|
+
| Add PartyTracks | patterns (PartyTracks section) | ~800 |
|
|
12
|
+
| Build presence system | patterns (DO section) | ~800 |
|
|
13
|
+
| Debug connection issues | gotchas | ~700 |
|
|
14
|
+
| Scale to millions | patterns (Cascading section) | ~600 |
|
|
15
|
+
| Add simulcast | patterns (Advanced section) | ~500 |
|
|
16
|
+
| Configure TURN | configuration (TURN section) | ~400 |
|
|
17
|
+
|
|
18
|
+
## In This Reference
|
|
19
|
+
|
|
20
|
+
- **[configuration.md](configuration.md)** - Setup, deployment, environment variables, Wrangler config
|
|
21
|
+
- **[api.md](api.md)** - Sessions, tracks, endpoints, request/response patterns
|
|
22
|
+
- **[patterns.md](patterns.md)** - Architecture patterns, use cases, integration examples
|
|
23
|
+
- **[gotchas.md](gotchas.md)** - Common issues, debugging, performance, security
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
Cloudflare Realtime SFU: WebRTC infrastructure on global network (310+ cities). Anycast routing, no regional constraints, pub/sub model.
|
|
28
|
+
|
|
29
|
+
**Core concepts:**
|
|
30
|
+
- **Sessions:** WebRTC PeerConnection to Cloudflare edge
|
|
31
|
+
- **Tracks:** Audio/video/data channels you publish or subscribe to
|
|
32
|
+
- **No rooms:** Build presence layer yourself via track sharing (see patterns.md)
|
|
33
|
+
|
|
34
|
+
**Mental model:** Your client establishes one WebRTC session, publishes tracks (audio/video), shares track IDs via your backend, others subscribe to your tracks using track IDs + your session ID.
|
|
35
|
+
|
|
36
|
+
## Choose Your Approach
|
|
37
|
+
|
|
38
|
+
| Approach | When to Use | Complexity |
|
|
39
|
+
|----------|-------------|------------|
|
|
40
|
+
| **PartyTracks** | Production apps with device switching, React | Low - Observable-based, handles reconnections |
|
|
41
|
+
| **Raw API** | Custom requirements, non-browser, learning | Medium - Full control, manual WebRTC lifecycle |
|
|
42
|
+
| **RealtimeKit** | End-to-end SDK with UI components | Lowest - Managed state, React hooks |
|
|
43
|
+
|
|
44
|
+
**Recommendation:** Start with PartyTracks for most production applications. See patterns.md for PartyTracks examples.
|
|
45
|
+
|
|
46
|
+
## SFU vs RealtimeKit
|
|
47
|
+
|
|
48
|
+
- **Realtime SFU:** WebRTC infrastructure (this reference). Build your own signaling, presence, UI.
|
|
49
|
+
- **RealtimeKit:** SDK layer on top of SFU. Includes React hooks, state management, UI components. Part of Cloudflare AI platform.
|
|
50
|
+
|
|
51
|
+
Use SFU directly when you need custom signaling or non-React framework. Use RealtimeKit for faster development with React.
|
|
52
|
+
|
|
53
|
+
## Setup
|
|
54
|
+
|
|
55
|
+
Dashboard: https://dash.cloudflare.com/?to=/:account/calls
|
|
56
|
+
|
|
57
|
+
Get `CALLS_APP_ID` and `CALLS_APP_SECRET` from dashboard, then see configuration.md for deployment.
|
|
58
|
+
|
|
59
|
+
## See Also
|
|
60
|
+
|
|
61
|
+
- [Orange Meets Demo](https://demo.orange.cloudflare.dev/)
|
|
62
|
+
- [Orange Source](https://github.com/cloudflare/orange)
|
|
63
|
+
- [Calls Examples](https://github.com/cloudflare/calls-examples)
|
|
64
|
+
- [API Reference](https://developers.cloudflare.com/api/resources/calls/)
|
|
65
|
+
- [RealtimeKit Docs](https://developers.cloudflare.com/workers-ai/realtimekit/)
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# API Reference
|
|
2
|
+
|
|
3
|
+
## Authentication
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
curl -X POST 'https://rtc.live/v1/apps/${CALLS_APP_ID}/sessions/new' \
|
|
7
|
+
-H "Authorization: Bearer ${CALLS_APP_SECRET}"
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Core Concepts
|
|
11
|
+
|
|
12
|
+
**Sessions:** PeerConnection to Cloudflare edge
|
|
13
|
+
**Tracks:** Media/data channels (audio/video/datachannel)
|
|
14
|
+
**No rooms:** Build presence via track sharing
|
|
15
|
+
|
|
16
|
+
## Client Libraries
|
|
17
|
+
|
|
18
|
+
**PartyTracks (Recommended):** Observable-based client library for production use. Handles device changes, network switches, ICE restarts automatically. Push/pull API with React hooks. See patterns.md for full examples.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npm install partytracks @cloudflare/calls
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Raw API:** Direct HTTP + WebRTC for custom requirements (documented below).
|
|
25
|
+
|
|
26
|
+
## Endpoints
|
|
27
|
+
|
|
28
|
+
### Create Session
|
|
29
|
+
```http
|
|
30
|
+
POST /v1/apps/{appId}/sessions/new
|
|
31
|
+
→ {sessionId, sessionDescription}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Add Track (Publish)
|
|
35
|
+
```http
|
|
36
|
+
POST /v1/apps/{appId}/sessions/{sessionId}/tracks/new
|
|
37
|
+
Body: {
|
|
38
|
+
sessionDescription: {sdp, type: "offer"},
|
|
39
|
+
tracks: [{location: "local", trackName: "my-video"}]
|
|
40
|
+
}
|
|
41
|
+
→ {sessionDescription, tracks: [{trackName}]}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Add Track (Subscribe)
|
|
45
|
+
```http
|
|
46
|
+
POST /v1/apps/{appId}/sessions/{sessionId}/tracks/new
|
|
47
|
+
Body: {
|
|
48
|
+
tracks: [{
|
|
49
|
+
location: "remote",
|
|
50
|
+
trackName: "remote-track-id",
|
|
51
|
+
sessionId: "other-session-id"
|
|
52
|
+
}]
|
|
53
|
+
}
|
|
54
|
+
→ {sessionDescription} (server offer)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Renegotiate
|
|
58
|
+
```http
|
|
59
|
+
PUT /v1/apps/{appId}/sessions/{sessionId}/renegotiate
|
|
60
|
+
Body: {sessionDescription: {sdp, type: "answer"}}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Close Tracks
|
|
64
|
+
```http
|
|
65
|
+
PUT /v1/apps/{appId}/sessions/{sessionId}/tracks/close
|
|
66
|
+
Body: {tracks: [{trackName}]}
|
|
67
|
+
→ {requiresImmediateRenegotiation: boolean}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Get Session
|
|
71
|
+
```http
|
|
72
|
+
GET /v1/apps/{appId}/sessions/{sessionId}
|
|
73
|
+
→ {sessionId, tracks: TrackMetadata[]}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## TypeScript Types
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
interface TrackMetadata {
|
|
80
|
+
trackName: string;
|
|
81
|
+
location: "local" | "remote";
|
|
82
|
+
sessionId?: string; // For remote tracks
|
|
83
|
+
mid?: string; // WebRTC mid
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## WebRTC Flow
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// 1. Create PeerConnection
|
|
91
|
+
const pc = new RTCPeerConnection({
|
|
92
|
+
iceServers: [{urls: 'stun:stun.cloudflare.com:3478'}]
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// 2. Add tracks
|
|
96
|
+
const stream = await navigator.mediaDevices.getUserMedia({video: true, audio: true});
|
|
97
|
+
stream.getTracks().forEach(track => pc.addTrack(track, stream));
|
|
98
|
+
|
|
99
|
+
// 3. Create offer
|
|
100
|
+
const offer = await pc.createOffer();
|
|
101
|
+
await pc.setLocalDescription(offer);
|
|
102
|
+
|
|
103
|
+
// 4. Send to backend → Cloudflare API
|
|
104
|
+
const response = await fetch('/api/new-session', {
|
|
105
|
+
method: 'POST',
|
|
106
|
+
body: JSON.stringify({sdp: offer.sdp})
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// 5. Set remote answer
|
|
110
|
+
const {sessionDescription} = await response.json();
|
|
111
|
+
await pc.setRemoteDescription(sessionDescription);
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Publishing
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const offer = await pc.createOffer();
|
|
118
|
+
await pc.setLocalDescription(offer);
|
|
119
|
+
|
|
120
|
+
const res = await fetch(`/api/sessions/${sessionId}/tracks`, {
|
|
121
|
+
method: 'POST',
|
|
122
|
+
body: JSON.stringify({
|
|
123
|
+
sdp: offer.sdp,
|
|
124
|
+
tracks: [{location: 'local', trackName: 'my-video'}]
|
|
125
|
+
})
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
const {sessionDescription, tracks} = await res.json();
|
|
129
|
+
await pc.setRemoteDescription(sessionDescription);
|
|
130
|
+
const publishedTrackId = tracks[0].trackName; // Share with others
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Subscribing
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
const res = await fetch(`/api/sessions/${sessionId}/tracks`, {
|
|
137
|
+
method: 'POST',
|
|
138
|
+
body: JSON.stringify({
|
|
139
|
+
tracks: [{location: 'remote', trackName: remoteTrackId, sessionId: remoteSessionId}]
|
|
140
|
+
})
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const {sessionDescription} = await res.json();
|
|
144
|
+
await pc.setRemoteDescription(sessionDescription);
|
|
145
|
+
|
|
146
|
+
const answer = await pc.createAnswer();
|
|
147
|
+
await pc.setLocalDescription(answer);
|
|
148
|
+
|
|
149
|
+
await fetch(`/api/sessions/${sessionId}/renegotiate`, {
|
|
150
|
+
method: 'PUT',
|
|
151
|
+
body: JSON.stringify({sdp: answer.sdp})
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
pc.ontrack = (event) => {
|
|
155
|
+
const [remoteStream] = event.streams;
|
|
156
|
+
videoElement.srcObject = remoteStream;
|
|
157
|
+
};
|
|
158
|
+
```
|