memory-journal-mcp 7.7.1 → 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.
Files changed (531) hide show
  1. package/README.md +126 -56
  2. package/dist/chunk-6OHRCNYW.js +3231 -0
  3. package/dist/chunk-JFMITANR.js +5168 -0
  4. package/dist/{chunk-6LPTBIB6.js → chunk-MWNLAEHR.js} +309 -4332
  5. package/dist/{chunk-ARLYSFSI.js → chunk-UHSO65A4.js} +4242 -6092
  6. package/dist/cli.js +21 -3
  7. package/dist/index.d.ts +16 -13
  8. package/dist/index.js +4 -2
  9. package/dist/resources-IJVKDFGS.js +2 -0
  10. package/dist/tools-44DGXE3V.js +2 -0
  11. package/dist/worker-script.js +201 -20
  12. package/package.json +6 -4
  13. package/skills/README.md +62 -25
  14. package/skills/adversarial-performance/SKILL.md +139 -0
  15. package/skills/adversarial-performance/references/audit-categories.md +462 -0
  16. package/skills/adversarial-performance/references/copilot-performance-prompts.md +44 -0
  17. package/skills/adversarial-performance/references/copilot-usage.md +16 -0
  18. package/skills/adversarial-performance/references/feedback-loop.md +177 -0
  19. package/skills/adversarial-performance/references/multi-pass-performance-protocol.md +398 -0
  20. package/skills/adversarial-planner/SKILL.md +23 -54
  21. package/skills/adversarial-planner/references/copilot-integration.md +25 -40
  22. package/skills/adversarial-planner/references/copilot-usage.md +16 -0
  23. package/skills/adversarial-planner/references/multi-pass-protocol.md +4 -0
  24. package/skills/adversarial-security/SKILL.md +149 -0
  25. package/skills/adversarial-security/references/adversarial-base-protocol.md +44 -0
  26. package/skills/adversarial-security/references/audit-categories.md +723 -0
  27. package/skills/adversarial-security/references/copilot-security-prompts.md +142 -0
  28. package/skills/adversarial-security/references/copilot-usage.md +16 -0
  29. package/skills/adversarial-security/references/feedback-loop.md +206 -0
  30. package/skills/adversarial-security/references/journal-opt-out.md +7 -0
  31. package/skills/adversarial-security/references/multi-pass-security-protocol.md +403 -0
  32. package/skills/adversarial-skill-audit/SKILL.md +118 -0
  33. package/skills/adversarial-skill-audit/references/audit-categories.md +308 -0
  34. package/skills/adversarial-skill-audit/references/copilot-skill-prompts.md +68 -0
  35. package/skills/adversarial-skill-audit/references/copilot-usage.md +16 -0
  36. package/skills/adversarial-skill-audit/references/feedback-loop.md +155 -0
  37. package/skills/adversarial-skill-audit/references/multi-pass-skill-protocol.md +367 -0
  38. package/skills/adversarial-skill-audit/scripts/check-skills.ps1 +48 -0
  39. package/skills/adversarial-skill-audit/scripts/run-copilot.ps1 +52 -0
  40. package/skills/adversarial-workflow-audit/SKILL.md +82 -0
  41. package/skills/adversarial-workflow-audit/references/audit-categories.md +28 -0
  42. package/skills/adversarial-workflow-audit/references/copilot-usage.md +16 -0
  43. package/skills/adversarial-workflow-audit/scripts/check-workflows.ps1 +24 -0
  44. package/skills/agents-sdk/SKILL.md +220 -0
  45. package/skills/agents-sdk/references/callable.md +92 -0
  46. package/skills/agents-sdk/references/codemode.md +209 -0
  47. package/skills/agents-sdk/references/email.md +144 -0
  48. package/skills/agents-sdk/references/mcp/SKILL.md +65 -0
  49. package/skills/agents-sdk/references/mcp/code-mode-reference.md +245 -0
  50. package/skills/agents-sdk/references/mcp/oauth-reference.md +359 -0
  51. package/skills/agents-sdk/references/mcp/references/architecture-reference.md +208 -0
  52. package/skills/agents-sdk/references/mcp/references/cloudflare-quickstart.md +156 -0
  53. package/skills/agents-sdk/references/mcp/references/error-handling.md +343 -0
  54. package/skills/agents-sdk/references/mcp/references/http-security.md +164 -0
  55. package/skills/agents-sdk/references/mcp/references/implementation-guide.md +507 -0
  56. package/skills/agents-sdk/references/mcp/references/testing-reference.md +171 -0
  57. package/skills/agents-sdk/references/mcp.md +157 -0
  58. package/skills/agents-sdk/references/state-scheduling.md +164 -0
  59. package/skills/agents-sdk/references/streaming-chat.md +168 -0
  60. package/skills/agents-sdk/references/workflows.md +136 -0
  61. package/skills/auth-identity/SKILL.md +48 -0
  62. package/skills/autonomous-dev/SKILL.md +46 -23
  63. package/skills/autonomous-dev/references/workflow_orchestration.md +22 -0
  64. package/skills/aws/SKILL.md +39 -0
  65. package/skills/azure/SKILL.md +38 -0
  66. package/skills/bin/sync.js +7 -1
  67. package/skills/biome/SKILL.md +59 -0
  68. package/skills/bun/SKILL.md +8 -2
  69. package/skills/cloudflare/SKILL.md +37 -0
  70. package/skills/cloudflare/references/agents-sdk/README.md +95 -0
  71. package/skills/cloudflare/references/agents-sdk/api.md +195 -0
  72. package/skills/cloudflare/references/agents-sdk/configuration.md +178 -0
  73. package/skills/cloudflare/references/agents-sdk/gotchas.md +173 -0
  74. package/skills/cloudflare/references/agents-sdk/patterns.md +215 -0
  75. package/skills/cloudflare/references/ai-gateway/README.md +176 -0
  76. package/skills/cloudflare/references/ai-gateway/configuration.md +117 -0
  77. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +88 -0
  78. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  79. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +110 -0
  80. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +90 -0
  81. package/skills/cloudflare/references/ai-search/README.md +145 -0
  82. package/skills/cloudflare/references/ai-search/api.md +87 -0
  83. package/skills/cloudflare/references/ai-search/configuration.md +91 -0
  84. package/skills/cloudflare/references/ai-search/gotchas.md +92 -0
  85. package/skills/cloudflare/references/ai-search/patterns.md +87 -0
  86. package/skills/cloudflare/references/analytics-engine/README.md +96 -0
  87. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  88. package/skills/cloudflare/references/analytics-engine/configuration.md +107 -0
  89. package/skills/cloudflare/references/analytics-engine/gotchas.md +87 -0
  90. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  91. package/skills/cloudflare/references/api/README.md +66 -0
  92. package/skills/cloudflare/references/api/api.md +205 -0
  93. package/skills/cloudflare/references/api/configuration.md +158 -0
  94. package/skills/cloudflare/references/api/gotchas.md +231 -0
  95. package/skills/cloudflare/references/api/patterns.md +208 -0
  96. package/skills/cloudflare/references/api-shield/README.md +44 -0
  97. package/skills/cloudflare/references/api-shield/api.md +153 -0
  98. package/skills/cloudflare/references/api-shield/configuration.md +210 -0
  99. package/skills/cloudflare/references/api-shield/gotchas.md +132 -0
  100. package/skills/cloudflare/references/api-shield/patterns.md +185 -0
  101. package/skills/cloudflare/references/argo-smart-routing/README.md +96 -0
  102. package/skills/cloudflare/references/argo-smart-routing/api.md +253 -0
  103. package/skills/cloudflare/references/argo-smart-routing/configuration.md +205 -0
  104. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +115 -0
  105. package/skills/cloudflare/references/argo-smart-routing/patterns.md +107 -0
  106. package/skills/cloudflare/references/bindings/README.md +127 -0
  107. package/skills/cloudflare/references/bindings/api.md +214 -0
  108. package/skills/cloudflare/references/bindings/configuration.md +200 -0
  109. package/skills/cloudflare/references/bindings/gotchas.md +210 -0
  110. package/skills/cloudflare/references/bindings/patterns.md +205 -0
  111. package/skills/cloudflare/references/bot-management/README.md +95 -0
  112. package/skills/cloudflare/references/bot-management/api.md +175 -0
  113. package/skills/cloudflare/references/bot-management/configuration.md +175 -0
  114. package/skills/cloudflare/references/bot-management/gotchas.md +116 -0
  115. package/skills/cloudflare/references/bot-management/patterns.md +181 -0
  116. package/skills/cloudflare/references/browser-rendering/README.md +84 -0
  117. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  118. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  119. package/skills/cloudflare/references/browser-rendering/gotchas.md +91 -0
  120. package/skills/cloudflare/references/browser-rendering/patterns.md +93 -0
  121. package/skills/cloudflare/references/c3/README.md +111 -0
  122. package/skills/cloudflare/references/c3/api.md +71 -0
  123. package/skills/cloudflare/references/c3/configuration.md +85 -0
  124. package/skills/cloudflare/references/c3/gotchas.md +97 -0
  125. package/skills/cloudflare/references/c3/patterns.md +84 -0
  126. package/skills/cloudflare/references/cache-reserve/README.md +150 -0
  127. package/skills/cloudflare/references/cache-reserve/api.md +184 -0
  128. package/skills/cloudflare/references/cache-reserve/configuration.md +170 -0
  129. package/skills/cloudflare/references/cache-reserve/gotchas.md +136 -0
  130. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  131. package/skills/cloudflare/references/containers/README.md +87 -0
  132. package/skills/cloudflare/references/containers/api.md +197 -0
  133. package/skills/cloudflare/references/containers/configuration.md +191 -0
  134. package/skills/cloudflare/references/containers/gotchas.md +182 -0
  135. package/skills/cloudflare/references/containers/patterns.md +204 -0
  136. package/skills/cloudflare/references/cron-triggers/README.md +101 -0
  137. package/skills/cloudflare/references/cron-triggers/api.md +224 -0
  138. package/skills/cloudflare/references/cron-triggers/configuration.md +190 -0
  139. package/skills/cloudflare/references/cron-triggers/gotchas.md +207 -0
  140. package/skills/cloudflare/references/cron-triggers/patterns.md +274 -0
  141. package/skills/cloudflare/references/d1/README.md +137 -0
  142. package/skills/cloudflare/references/d1/api.md +213 -0
  143. package/skills/cloudflare/references/d1/configuration.md +198 -0
  144. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  145. package/skills/cloudflare/references/d1/patterns.md +240 -0
  146. package/skills/cloudflare/references/ddos/README.md +42 -0
  147. package/skills/cloudflare/references/ddos/api.md +158 -0
  148. package/skills/cloudflare/references/ddos/configuration.md +94 -0
  149. package/skills/cloudflare/references/ddos/gotchas.md +114 -0
  150. package/skills/cloudflare/references/ddos/patterns.md +220 -0
  151. package/skills/cloudflare/references/decision-trees.md +95 -0
  152. package/skills/cloudflare/references/do-storage/README.md +79 -0
  153. package/skills/cloudflare/references/do-storage/api.md +107 -0
  154. package/skills/cloudflare/references/do-storage/configuration.md +114 -0
  155. package/skills/cloudflare/references/do-storage/gotchas.md +153 -0
  156. package/skills/cloudflare/references/do-storage/patterns.md +210 -0
  157. package/skills/cloudflare/references/do-storage/testing.md +186 -0
  158. package/skills/cloudflare/references/durable-objects/README.md +194 -0
  159. package/skills/cloudflare/references/durable-objects/api.md +205 -0
  160. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  161. package/skills/cloudflare/references/durable-objects/gotchas.md +200 -0
  162. package/skills/cloudflare/references/durable-objects/patterns.md +205 -0
  163. package/skills/cloudflare/references/email-routing/README.md +89 -0
  164. package/skills/cloudflare/references/email-routing/api.md +192 -0
  165. package/skills/cloudflare/references/email-routing/configuration.md +187 -0
  166. package/skills/cloudflare/references/email-routing/gotchas.md +203 -0
  167. package/skills/cloudflare/references/email-routing/patterns.md +241 -0
  168. package/skills/cloudflare/references/email-workers/README.md +153 -0
  169. package/skills/cloudflare/references/email-workers/api.md +227 -0
  170. package/skills/cloudflare/references/email-workers/configuration.md +115 -0
  171. package/skills/cloudflare/references/email-workers/gotchas.md +133 -0
  172. package/skills/cloudflare/references/email-workers/patterns.md +108 -0
  173. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  174. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  175. package/skills/cloudflare/references/graphql-api/configuration.md +151 -0
  176. package/skills/cloudflare/references/graphql-api/gotchas.md +111 -0
  177. package/skills/cloudflare/references/graphql-api/patterns.md +276 -0
  178. package/skills/cloudflare/references/hyperdrive/README.md +84 -0
  179. package/skills/cloudflare/references/hyperdrive/api.md +149 -0
  180. package/skills/cloudflare/references/hyperdrive/configuration.md +166 -0
  181. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  182. package/skills/cloudflare/references/hyperdrive/patterns.md +203 -0
  183. package/skills/cloudflare/references/images/README.md +65 -0
  184. package/skills/cloudflare/references/images/api.md +101 -0
  185. package/skills/cloudflare/references/images/configuration.md +206 -0
  186. package/skills/cloudflare/references/images/gotchas.md +106 -0
  187. package/skills/cloudflare/references/images/patterns.md +126 -0
  188. package/skills/cloudflare/references/kv/README.md +90 -0
  189. package/skills/cloudflare/references/kv/api.md +163 -0
  190. package/skills/cloudflare/references/kv/configuration.md +148 -0
  191. package/skills/cloudflare/references/kv/gotchas.md +133 -0
  192. package/skills/cloudflare/references/kv/patterns.md +195 -0
  193. package/skills/cloudflare/references/miniflare/README.md +113 -0
  194. package/skills/cloudflare/references/miniflare/api.md +204 -0
  195. package/skills/cloudflare/references/miniflare/configuration.md +174 -0
  196. package/skills/cloudflare/references/miniflare/gotchas.md +179 -0
  197. package/skills/cloudflare/references/miniflare/patterns.md +187 -0
  198. package/skills/cloudflare/references/network-interconnect/README.md +104 -0
  199. package/skills/cloudflare/references/network-interconnect/api.md +220 -0
  200. package/skills/cloudflare/references/network-interconnect/configuration.md +123 -0
  201. package/skills/cloudflare/references/network-interconnect/gotchas.md +175 -0
  202. package/skills/cloudflare/references/network-interconnect/patterns.md +174 -0
  203. package/skills/cloudflare/references/observability/README.md +93 -0
  204. package/skills/cloudflare/references/observability/api.md +168 -0
  205. package/skills/cloudflare/references/observability/configuration.md +178 -0
  206. package/skills/cloudflare/references/observability/gotchas.md +125 -0
  207. package/skills/cloudflare/references/observability/patterns.md +105 -0
  208. package/skills/cloudflare/references/pages/README.md +92 -0
  209. package/skills/cloudflare/references/pages/api.md +205 -0
  210. package/skills/cloudflare/references/pages/configuration.md +216 -0
  211. package/skills/cloudflare/references/pages/gotchas.md +218 -0
  212. package/skills/cloudflare/references/pages/patterns.md +215 -0
  213. package/skills/cloudflare/references/pages-functions/README.md +104 -0
  214. package/skills/cloudflare/references/pages-functions/api.md +159 -0
  215. package/skills/cloudflare/references/pages-functions/configuration.md +130 -0
  216. package/skills/cloudflare/references/pages-functions/gotchas.md +102 -0
  217. package/skills/cloudflare/references/pages-functions/patterns.md +148 -0
  218. package/skills/cloudflare/references/pipelines/README.md +109 -0
  219. package/skills/cloudflare/references/pipelines/api.md +214 -0
  220. package/skills/cloudflare/references/pipelines/configuration.md +98 -0
  221. package/skills/cloudflare/references/pipelines/gotchas.md +84 -0
  222. package/skills/cloudflare/references/pipelines/patterns.md +87 -0
  223. package/skills/cloudflare/references/product-index.md +112 -0
  224. package/skills/cloudflare/references/pulumi/README.md +113 -0
  225. package/skills/cloudflare/references/pulumi/api.md +230 -0
  226. package/skills/cloudflare/references/pulumi/configuration.md +213 -0
  227. package/skills/cloudflare/references/pulumi/gotchas.md +205 -0
  228. package/skills/cloudflare/references/pulumi/patterns.md +260 -0
  229. package/skills/cloudflare/references/queues/README.md +99 -0
  230. package/skills/cloudflare/references/queues/api.md +211 -0
  231. package/skills/cloudflare/references/queues/configuration.md +151 -0
  232. package/skills/cloudflare/references/queues/gotchas.md +210 -0
  233. package/skills/cloudflare/references/queues/patterns.md +220 -0
  234. package/skills/cloudflare/references/r2/README.md +97 -0
  235. package/skills/cloudflare/references/r2/api.md +235 -0
  236. package/skills/cloudflare/references/r2/configuration.md +176 -0
  237. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  238. package/skills/cloudflare/references/r2/patterns.md +203 -0
  239. package/skills/cloudflare/references/r2-data-catalog/README.md +157 -0
  240. package/skills/cloudflare/references/r2-data-catalog/api.md +199 -0
  241. package/skills/cloudflare/references/r2-data-catalog/configuration.md +205 -0
  242. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +170 -0
  243. package/skills/cloudflare/references/r2-data-catalog/patterns.md +191 -0
  244. package/skills/cloudflare/references/r2-sql/README.md +138 -0
  245. package/skills/cloudflare/references/r2-sql/SKILL.md.backup +512 -0
  246. package/skills/cloudflare/references/r2-sql/api.md +159 -0
  247. package/skills/cloudflare/references/r2-sql/configuration.md +152 -0
  248. package/skills/cloudflare/references/r2-sql/gotchas.md +228 -0
  249. package/skills/cloudflare/references/r2-sql/patterns.md +230 -0
  250. package/skills/cloudflare/references/realtime-sfu/README.md +66 -0
  251. package/skills/cloudflare/references/realtime-sfu/api.md +164 -0
  252. package/skills/cloudflare/references/realtime-sfu/configuration.md +141 -0
  253. package/skills/cloudflare/references/realtime-sfu/gotchas.md +138 -0
  254. package/skills/cloudflare/references/realtime-sfu/patterns.md +187 -0
  255. package/skills/cloudflare/references/realtimekit/README.md +118 -0
  256. package/skills/cloudflare/references/realtimekit/api.md +234 -0
  257. package/skills/cloudflare/references/realtimekit/configuration.md +226 -0
  258. package/skills/cloudflare/references/realtimekit/gotchas.md +206 -0
  259. package/skills/cloudflare/references/realtimekit/patterns.md +240 -0
  260. package/skills/cloudflare/references/sandbox/README.md +104 -0
  261. package/skills/cloudflare/references/sandbox/api.md +200 -0
  262. package/skills/cloudflare/references/sandbox/configuration.md +154 -0
  263. package/skills/cloudflare/references/sandbox/gotchas.md +201 -0
  264. package/skills/cloudflare/references/sandbox/patterns.md +195 -0
  265. package/skills/cloudflare/references/secrets-store/README.md +77 -0
  266. package/skills/cloudflare/references/secrets-store/api.md +199 -0
  267. package/skills/cloudflare/references/secrets-store/configuration.md +187 -0
  268. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  269. package/skills/cloudflare/references/secrets-store/patterns.md +218 -0
  270. package/skills/cloudflare/references/smart-placement/README.md +143 -0
  271. package/skills/cloudflare/references/smart-placement/api.md +192 -0
  272. package/skills/cloudflare/references/smart-placement/configuration.md +202 -0
  273. package/skills/cloudflare/references/smart-placement/gotchas.md +180 -0
  274. package/skills/cloudflare/references/smart-placement/patterns.md +190 -0
  275. package/skills/cloudflare/references/snippets/README.md +74 -0
  276. package/skills/cloudflare/references/snippets/api.md +214 -0
  277. package/skills/cloudflare/references/snippets/configuration.md +239 -0
  278. package/skills/cloudflare/references/snippets/gotchas.md +104 -0
  279. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  280. package/skills/cloudflare/references/spectrum/README.md +52 -0
  281. package/skills/cloudflare/references/spectrum/api.md +184 -0
  282. package/skills/cloudflare/references/spectrum/configuration.md +203 -0
  283. package/skills/cloudflare/references/spectrum/gotchas.md +155 -0
  284. package/skills/cloudflare/references/spectrum/patterns.md +206 -0
  285. package/skills/cloudflare/references/static-assets/README.md +65 -0
  286. package/skills/cloudflare/references/static-assets/api.md +201 -0
  287. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  288. package/skills/cloudflare/references/static-assets/gotchas.md +164 -0
  289. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  290. package/skills/cloudflare/references/stream/README.md +123 -0
  291. package/skills/cloudflare/references/stream/api-live.md +202 -0
  292. package/skills/cloudflare/references/stream/api.md +206 -0
  293. package/skills/cloudflare/references/stream/configuration.md +151 -0
  294. package/skills/cloudflare/references/stream/gotchas.md +139 -0
  295. package/skills/cloudflare/references/stream/patterns.md +217 -0
  296. package/skills/cloudflare/references/tail-workers/README.md +92 -0
  297. package/skills/cloudflare/references/tail-workers/api.md +203 -0
  298. package/skills/cloudflare/references/tail-workers/configuration.md +178 -0
  299. package/skills/cloudflare/references/tail-workers/gotchas.md +206 -0
  300. package/skills/cloudflare/references/tail-workers/patterns.md +190 -0
  301. package/skills/cloudflare/references/terraform/README.md +100 -0
  302. package/skills/cloudflare/references/terraform/api.md +178 -0
  303. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  304. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  305. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  306. package/skills/cloudflare/references/tunnel/README.md +137 -0
  307. package/skills/cloudflare/references/tunnel/api.md +205 -0
  308. package/skills/cloudflare/references/tunnel/configuration.md +163 -0
  309. package/skills/cloudflare/references/tunnel/gotchas.md +159 -0
  310. package/skills/cloudflare/references/tunnel/networking.md +174 -0
  311. package/skills/cloudflare/references/tunnel/patterns.md +199 -0
  312. package/skills/cloudflare/references/turn/README.md +86 -0
  313. package/skills/cloudflare/references/turn/api.md +236 -0
  314. package/skills/cloudflare/references/turn/configuration.md +181 -0
  315. package/skills/cloudflare/references/turn/gotchas.md +236 -0
  316. package/skills/cloudflare/references/turn/patterns.md +228 -0
  317. package/skills/cloudflare/references/turnstile/README.md +102 -0
  318. package/skills/cloudflare/references/turnstile/api.md +253 -0
  319. package/skills/cloudflare/references/turnstile/configuration.md +242 -0
  320. package/skills/cloudflare/references/turnstile/gotchas.md +253 -0
  321. package/skills/cloudflare/references/turnstile/patterns.md +195 -0
  322. package/skills/cloudflare/references/vectorize/README.md +133 -0
  323. package/skills/cloudflare/references/vectorize/api.md +89 -0
  324. package/skills/cloudflare/references/vectorize/configuration.md +91 -0
  325. package/skills/cloudflare/references/vectorize/gotchas.md +83 -0
  326. package/skills/cloudflare/references/vectorize/patterns.md +92 -0
  327. package/skills/cloudflare/references/waf/README.md +125 -0
  328. package/skills/cloudflare/references/waf/api.md +203 -0
  329. package/skills/cloudflare/references/waf/configuration.md +215 -0
  330. package/skills/cloudflare/references/waf/gotchas.md +208 -0
  331. package/skills/cloudflare/references/waf/patterns.md +236 -0
  332. package/skills/cloudflare/references/web-analytics/README.md +149 -0
  333. package/skills/cloudflare/references/web-analytics/configuration.md +81 -0
  334. package/skills/cloudflare/references/web-analytics/gotchas.md +86 -0
  335. package/skills/cloudflare/references/web-analytics/integration.md +63 -0
  336. package/skills/cloudflare/references/web-analytics/patterns.md +98 -0
  337. package/skills/cloudflare/references/workerd/README.md +85 -0
  338. package/skills/cloudflare/references/workerd/api.md +219 -0
  339. package/skills/cloudflare/references/workerd/configuration.md +200 -0
  340. package/skills/cloudflare/references/workerd/gotchas.md +151 -0
  341. package/skills/cloudflare/references/workerd/patterns.md +205 -0
  342. package/skills/cloudflare/references/workers/README.md +110 -0
  343. package/skills/cloudflare/references/workers/api.md +197 -0
  344. package/skills/cloudflare/references/workers/configuration.md +184 -0
  345. package/skills/cloudflare/references/workers/frameworks.md +200 -0
  346. package/skills/cloudflare/references/workers/gotchas.md +145 -0
  347. package/skills/cloudflare/references/workers/patterns.md +220 -0
  348. package/skills/cloudflare/references/workers-ai/README.md +206 -0
  349. package/skills/cloudflare/references/workers-ai/api.md +115 -0
  350. package/skills/cloudflare/references/workers-ai/configuration.md +98 -0
  351. package/skills/cloudflare/references/workers-ai/gotchas.md +130 -0
  352. package/skills/cloudflare/references/workers-ai/patterns.md +122 -0
  353. package/skills/cloudflare/references/workers-for-platforms/README.md +95 -0
  354. package/skills/cloudflare/references/workers-for-platforms/api.md +212 -0
  355. package/skills/cloudflare/references/workers-for-platforms/configuration.md +178 -0
  356. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  357. package/skills/cloudflare/references/workers-for-platforms/patterns.md +210 -0
  358. package/skills/cloudflare/references/workers-playground/README.md +131 -0
  359. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  360. package/skills/cloudflare/references/workers-playground/configuration.md +169 -0
  361. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  362. package/skills/cloudflare/references/workers-playground/patterns.md +134 -0
  363. package/skills/cloudflare/references/workers-vpc/README.md +130 -0
  364. package/skills/cloudflare/references/workers-vpc/api.md +196 -0
  365. package/skills/cloudflare/references/workers-vpc/configuration.md +151 -0
  366. package/skills/cloudflare/references/workers-vpc/gotchas.md +171 -0
  367. package/skills/cloudflare/references/workers-vpc/patterns.md +235 -0
  368. package/skills/cloudflare/references/workflows/README.md +72 -0
  369. package/skills/cloudflare/references/workflows/api.md +237 -0
  370. package/skills/cloudflare/references/workflows/configuration.md +158 -0
  371. package/skills/cloudflare/references/workflows/gotchas.md +97 -0
  372. package/skills/cloudflare/references/workflows/patterns.md +245 -0
  373. package/skills/cloudflare/references/wrangler/README.md +143 -0
  374. package/skills/cloudflare/references/wrangler/api.md +188 -0
  375. package/skills/cloudflare/references/wrangler/configuration.md +198 -0
  376. package/skills/cloudflare/references/wrangler/gotchas.md +212 -0
  377. package/skills/cloudflare/references/wrangler/patterns.md +211 -0
  378. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +131 -0
  379. package/skills/cloudflare/references/zaraz/README.md +114 -0
  380. package/skills/cloudflare/references/zaraz/api.md +118 -0
  381. package/skills/cloudflare/references/zaraz/configuration.md +94 -0
  382. package/skills/cloudflare/references/zaraz/gotchas.md +88 -0
  383. package/skills/cloudflare/references/zaraz/patterns.md +77 -0
  384. package/skills/docker/SKILL.md +7 -101
  385. package/skills/docker/references/advanced-examples.md +71 -0
  386. package/skills/docker/references/templates.md +34 -0
  387. package/skills/docs-marketer/SKILL.md +178 -0
  388. package/skills/docs-marketer/references/audit-categories.md +328 -0
  389. package/skills/docs-marketer/references/copilot-docs-prompts.md +88 -0
  390. package/skills/docs-marketer/references/copilot-usage.md +16 -0
  391. package/skills/docs-marketer/references/feedback-loop.md +155 -0
  392. package/skills/docs-marketer/references/multi-pass-docs-protocol.md +410 -0
  393. package/skills/drizzle-orm/SKILL.md +82 -0
  394. package/skills/durable-objects/SKILL.md +167 -0
  395. package/skills/durable-objects/references/advanced_features.md +29 -0
  396. package/skills/durable-objects/references/rules.md +300 -0
  397. package/skills/durable-objects/references/testing.md +261 -0
  398. package/skills/durable-objects/references/workers.md +336 -0
  399. package/skills/gcp/SKILL.md +37 -0
  400. package/skills/github-actions/SKILL.md +5 -58
  401. package/skills/github-actions/references/templates.md +65 -0
  402. package/skills/github-commander/SKILL.md +13 -21
  403. package/skills/github-commander/workflows/copilot-audit.md +12 -12
  404. package/skills/github-copilot-cli/SKILL.md +21 -26
  405. package/skills/github-repo-setup/SKILL.md +136 -0
  406. package/skills/github-repo-setup/references/community-standards.md +136 -0
  407. package/skills/github-repo-setup/references/github-automation.md +490 -0
  408. package/skills/github-repo-setup/references/inline-templates.md +205 -0
  409. package/skills/github-repo-setup/references/project-config.md +320 -0
  410. package/skills/gitlab/SKILL.md +7 -2
  411. package/skills/gitlab/package-lock.json +389 -389
  412. package/skills/golang/SKILL.md +8 -1
  413. package/skills/graphql/SKILL.md +30 -0
  414. package/skills/hono/SKILL.md +82 -0
  415. package/skills/journal-optimizer/SKILL.md +206 -0
  416. package/skills/journal-optimizer/references/optimizer-scripts.md +169 -0
  417. package/skills/llm-app-engineering/SKILL.md +18 -0
  418. package/skills/monorepo/SKILL.md +56 -0
  419. package/skills/multi-agent-orchestration/SKILL.md +14 -0
  420. package/skills/mysql/SKILL.md +6 -2
  421. package/skills/next-best-practices/SKILL.md +86 -0
  422. package/skills/next-best-practices/references/cache-components-examples.md +234 -0
  423. package/skills/next-best-practices/references/cache-components.md +210 -0
  424. package/skills/next-best-practices/references/upgrade-decision-tree.md +33 -0
  425. package/skills/next-best-practices/references/upgrade.md +43 -0
  426. package/skills/next-cache-components/SKILL.md +441 -0
  427. package/skills/next-upgrade/SKILL.md +43 -0
  428. package/skills/next-upgrade/references/decision-tree.md +33 -0
  429. package/skills/nodejs/SKILL.md +46 -0
  430. package/skills/opentelemetry/SKILL.md +62 -0
  431. package/skills/package.json +39 -4
  432. package/skills/playwright-standard/SKILL.md +6 -11
  433. package/skills/playwright-standard/references/locators.md +7 -0
  434. package/skills/postgres/SKILL.md +6 -1
  435. package/skills/python/SKILL.md +8 -70
  436. package/skills/python/references/advanced-patterns.md +37 -0
  437. package/skills/python/references/config-templates.md +48 -0
  438. package/skills/rag-pipelines/SKILL.md +14 -0
  439. package/skills/redis/SKILL.md +31 -0
  440. package/skills/render/SKILL.md +35 -0
  441. package/skills/rust/SKILL.md +15 -25
  442. package/skills/rust/references/borrow-checker.md +13 -0
  443. package/skills/rust/references/ecosystem.md +11 -0
  444. package/skills/sandbox-sdk/SKILL.md +186 -0
  445. package/skills/sandbox-sdk/references/api-quick-ref.md +113 -0
  446. package/skills/sandbox-sdk/references/examples.md +52 -0
  447. package/skills/shadcn-ui/SKILL.md +22 -57
  448. package/skills/skill-builder/SKILL.md +23 -424
  449. package/skills/skill-builder/references/tutorial.md +457 -0
  450. package/skills/sqlite/SKILL.md +16 -5
  451. package/skills/table.md +59 -0
  452. package/skills/tailwind-css/SKILL.md +11 -60
  453. package/skills/tailwind-css/references/component-patterns.md +52 -0
  454. package/skills/trpc/SKILL.md +56 -0
  455. package/skills/typescript/SKILL.md +30 -433
  456. package/skills/typescript/references/tutorial.md +453 -0
  457. package/skills/vercel-ai-sdk/SKILL.md +48 -0
  458. package/skills/vitest-standard/SKILL.md +5 -11
  459. package/skills/vitest-standard/references/assertions.md +11 -0
  460. package/skills/web-perf/SKILL.md +207 -0
  461. package/skills/workers-best-practices/SKILL.md +120 -0
  462. package/skills/workers-best-practices/references/anti-patterns.md +18 -0
  463. package/skills/workers-best-practices/references/review.md +174 -0
  464. package/skills/workers-best-practices/references/rules.md +485 -0
  465. package/skills/wrangler/SKILL.md +43 -0
  466. package/skills/wrangler/references/cli-commands.md +861 -0
  467. package/skills/zod/SKILL.md +48 -0
  468. package/dist/tools-P4VGG4FH.js +0 -1
  469. package/skills/react-best-practices/AGENTS.md +0 -2883
  470. package/skills/react-best-practices/SKILL.md +0 -138
  471. /package/skills/{react-best-practices → next-best-practices}/README.md +0 -0
  472. /package/skills/{react-best-practices → next-best-practices}/metadata.json +0 -0
  473. /package/skills/{react-best-practices → next-best-practices}/rules/_sections.md +0 -0
  474. /package/skills/{react-best-practices → next-best-practices}/rules/_template.md +0 -0
  475. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-event-handler-refs.md +0 -0
  476. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-init-once.md +0 -0
  477. /package/skills/{react-best-practices → next-best-practices}/rules/advanced-use-latest.md +0 -0
  478. /package/skills/{react-best-practices → next-best-practices}/rules/async-api-routes.md +0 -0
  479. /package/skills/{react-best-practices → next-best-practices}/rules/async-defer-await.md +0 -0
  480. /package/skills/{react-best-practices → next-best-practices}/rules/async-dependencies.md +0 -0
  481. /package/skills/{react-best-practices → next-best-practices}/rules/async-parallel.md +0 -0
  482. /package/skills/{react-best-practices → next-best-practices}/rules/async-suspense-boundaries.md +0 -0
  483. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-barrel-imports.md +0 -0
  484. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-conditional.md +0 -0
  485. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-defer-third-party.md +0 -0
  486. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-dynamic-imports.md +0 -0
  487. /package/skills/{react-best-practices → next-best-practices}/rules/bundle-preload.md +0 -0
  488. /package/skills/{react-best-practices → next-best-practices}/rules/client-event-listeners.md +0 -0
  489. /package/skills/{react-best-practices → next-best-practices}/rules/client-localstorage-schema.md +0 -0
  490. /package/skills/{react-best-practices → next-best-practices}/rules/client-passive-event-listeners.md +0 -0
  491. /package/skills/{react-best-practices → next-best-practices}/rules/client-swr-dedup.md +0 -0
  492. /package/skills/{react-best-practices → next-best-practices}/rules/js-batch-dom-css.md +0 -0
  493. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-function-results.md +0 -0
  494. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-property-access.md +0 -0
  495. /package/skills/{react-best-practices → next-best-practices}/rules/js-cache-storage.md +0 -0
  496. /package/skills/{react-best-practices → next-best-practices}/rules/js-combine-iterations.md +0 -0
  497. /package/skills/{react-best-practices → next-best-practices}/rules/js-early-exit.md +0 -0
  498. /package/skills/{react-best-practices → next-best-practices}/rules/js-hoist-regexp.md +0 -0
  499. /package/skills/{react-best-practices → next-best-practices}/rules/js-index-maps.md +0 -0
  500. /package/skills/{react-best-practices → next-best-practices}/rules/js-length-check-first.md +0 -0
  501. /package/skills/{react-best-practices → next-best-practices}/rules/js-min-max-loop.md +0 -0
  502. /package/skills/{react-best-practices → next-best-practices}/rules/js-set-map-lookups.md +0 -0
  503. /package/skills/{react-best-practices → next-best-practices}/rules/js-tosorted-immutable.md +0 -0
  504. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-activity.md +0 -0
  505. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
  506. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-conditional-render.md +0 -0
  507. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-content-visibility.md +0 -0
  508. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hoist-jsx.md +0 -0
  509. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
  510. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-hydration-suppress-warning.md +0 -0
  511. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-svg-precision.md +0 -0
  512. /package/skills/{react-best-practices → next-best-practices}/rules/rendering-usetransition-loading.md +0 -0
  513. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-defer-reads.md +0 -0
  514. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-dependencies.md +0 -0
  515. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state-no-effect.md +0 -0
  516. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-derived-state.md +0 -0
  517. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-functional-setstate.md +0 -0
  518. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-lazy-state-init.md +0 -0
  519. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo-with-default-value.md +0 -0
  520. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-memo.md +0 -0
  521. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-move-effect-to-event.md +0 -0
  522. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-simple-expression-in-memo.md +0 -0
  523. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-transitions.md +0 -0
  524. /package/skills/{react-best-practices → next-best-practices}/rules/rerender-use-ref-transient-values.md +0 -0
  525. /package/skills/{react-best-practices → next-best-practices}/rules/server-after-nonblocking.md +0 -0
  526. /package/skills/{react-best-practices → next-best-practices}/rules/server-auth-actions.md +0 -0
  527. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-lru.md +0 -0
  528. /package/skills/{react-best-practices → next-best-practices}/rules/server-cache-react.md +0 -0
  529. /package/skills/{react-best-practices → next-best-practices}/rules/server-dedup-props.md +0 -0
  530. /package/skills/{react-best-practices → next-best-practices}/rules/server-parallel-fetching.md +0 -0
  531. /package/skills/{react-best-practices → next-best-practices}/rules/server-serialization.md +0 -0
@@ -0,0 +1,164 @@
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
+
30
+ ```http
31
+ POST /v1/apps/{appId}/sessions/new
32
+ → {sessionId, sessionDescription}
33
+ ```
34
+
35
+ ### Add Track (Publish)
36
+
37
+ ```http
38
+ POST /v1/apps/{appId}/sessions/{sessionId}/tracks/new
39
+ Body: {
40
+ sessionDescription: {sdp, type: "offer"},
41
+ tracks: [{location: "local", trackName: "my-video"}]
42
+ }
43
+ → {sessionDescription, tracks: [{trackName}]}
44
+ ```
45
+
46
+ ### Add Track (Subscribe)
47
+
48
+ ```http
49
+ POST /v1/apps/{appId}/sessions/{sessionId}/tracks/new
50
+ Body: {
51
+ tracks: [{
52
+ location: "remote",
53
+ trackName: "remote-track-id",
54
+ sessionId: "other-session-id"
55
+ }]
56
+ }
57
+ → {sessionDescription} (server offer)
58
+ ```
59
+
60
+ ### Renegotiate
61
+
62
+ ```http
63
+ PUT /v1/apps/{appId}/sessions/{sessionId}/renegotiate
64
+ Body: {sessionDescription: {sdp, type: "answer"}}
65
+ ```
66
+
67
+ ### Close Tracks
68
+
69
+ ```http
70
+ PUT /v1/apps/{appId}/sessions/{sessionId}/tracks/close
71
+ Body: {tracks: [{trackName}]}
72
+ → {requiresImmediateRenegotiation: boolean}
73
+ ```
74
+
75
+ ### Get Session
76
+
77
+ ```http
78
+ GET /v1/apps/{appId}/sessions/{sessionId}
79
+ → {sessionId, tracks: TrackMetadata[]}
80
+ ```
81
+
82
+ ## TypeScript Types
83
+
84
+ ```typescript
85
+ interface TrackMetadata {
86
+ trackName: string
87
+ location: 'local' | 'remote'
88
+ sessionId?: string // For remote tracks
89
+ mid?: string // WebRTC mid
90
+ }
91
+ ```
92
+
93
+ ## WebRTC Flow
94
+
95
+ ```typescript
96
+ // 1. Create PeerConnection
97
+ const pc = new RTCPeerConnection({
98
+ iceServers: [{ urls: 'stun:stun.cloudflare.com:3478' }],
99
+ })
100
+
101
+ // 2. Add tracks
102
+ const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: true })
103
+ stream.getTracks().forEach((track) => pc.addTrack(track, stream))
104
+
105
+ // 3. Create offer
106
+ const offer = await pc.createOffer()
107
+ await pc.setLocalDescription(offer)
108
+
109
+ // 4. Send to backend → Cloudflare API
110
+ const response = await fetch('/api/new-session', {
111
+ method: 'POST',
112
+ body: JSON.stringify({ sdp: offer.sdp }),
113
+ })
114
+
115
+ // 5. Set remote answer
116
+ const { sessionDescription } = await response.json()
117
+ await pc.setRemoteDescription(sessionDescription)
118
+ ```
119
+
120
+ ## Publishing
121
+
122
+ ```typescript
123
+ const offer = await pc.createOffer()
124
+ await pc.setLocalDescription(offer)
125
+
126
+ const res = await fetch(`/api/sessions/${sessionId}/tracks`, {
127
+ method: 'POST',
128
+ body: JSON.stringify({
129
+ sdp: offer.sdp,
130
+ tracks: [{ location: 'local', trackName: 'my-video' }],
131
+ }),
132
+ })
133
+
134
+ const { sessionDescription, tracks } = await res.json()
135
+ await pc.setRemoteDescription(sessionDescription)
136
+ const publishedTrackId = tracks[0].trackName // Share with others
137
+ ```
138
+
139
+ ## Subscribing
140
+
141
+ ```typescript
142
+ const res = await fetch(`/api/sessions/${sessionId}/tracks`, {
143
+ method: 'POST',
144
+ body: JSON.stringify({
145
+ tracks: [{ location: 'remote', trackName: remoteTrackId, sessionId: remoteSessionId }],
146
+ }),
147
+ })
148
+
149
+ const { sessionDescription } = await res.json()
150
+ await pc.setRemoteDescription(sessionDescription)
151
+
152
+ const answer = await pc.createAnswer()
153
+ await pc.setLocalDescription(answer)
154
+
155
+ await fetch(`/api/sessions/${sessionId}/renegotiate`, {
156
+ method: 'PUT',
157
+ body: JSON.stringify({ sdp: answer.sdp }),
158
+ })
159
+
160
+ pc.ontrack = (event) => {
161
+ const [remoteStream] = event.streams
162
+ videoElement.srcObject = remoteStream
163
+ }
164
+ ```
@@ -0,0 +1,141 @@
1
+ # Configuration & Deployment
2
+
3
+ ## Dashboard Setup
4
+
5
+ 1. Navigate to https://dash.cloudflare.com/?to=/:account/calls
6
+ 2. Click "Create Application" (or use existing app)
7
+ 3. Copy `CALLS_APP_ID` from dashboard
8
+ 4. Generate and copy `CALLS_APP_SECRET` (treat as sensitive credential)
9
+ 5. Use credentials in Wrangler config or environment variables below
10
+
11
+ ## Dependencies
12
+
13
+ **Backend (Workers):** Built-in fetch API, no additional packages required
14
+
15
+ **Client (PartyTracks):**
16
+
17
+ ```bash
18
+ npm install partytracks @cloudflare/calls
19
+ ```
20
+
21
+ **Client (React + PartyTracks):**
22
+
23
+ ```bash
24
+ npm install partytracks @cloudflare/calls observable-hooks
25
+ # Observable hooks: useObservableAsValue, useValueAsObservable
26
+ ```
27
+
28
+ **Client (Raw API):** Native browser WebRTC API only
29
+
30
+ ## Wrangler Setup
31
+
32
+ ```jsonc
33
+ {
34
+ "name": "my-calls-app",
35
+ "main": "src/index.ts",
36
+ "compatibility_date": "2025-01-01", // Use current date for new projects
37
+ "vars": {
38
+ "CALLS_APP_ID": "your-app-id",
39
+ "MAX_WEBCAM_BITRATE": "1200000",
40
+ "MAX_WEBCAM_FRAMERATE": "24",
41
+ "MAX_WEBCAM_QUALITY_LEVEL": "1080",
42
+ },
43
+ // Set secret: wrangler secret put CALLS_APP_SECRET
44
+ "durable_objects": {
45
+ "bindings": [
46
+ {
47
+ "name": "ROOM",
48
+ "class_name": "Room",
49
+ },
50
+ ],
51
+ },
52
+ }
53
+ ```
54
+
55
+ ## Deploy
56
+
57
+ ```bash
58
+ wrangler login
59
+ wrangler secret put CALLS_APP_SECRET
60
+ wrangler deploy
61
+ ```
62
+
63
+ ## Environment Variables
64
+
65
+ **Required:**
66
+
67
+ - `CALLS_APP_ID`: From dashboard
68
+ - `CALLS_APP_SECRET`: From dashboard (secret)
69
+
70
+ **Optional:**
71
+
72
+ - `MAX_WEBCAM_BITRATE` (default: 1200000)
73
+ - `MAX_WEBCAM_FRAMERATE` (default: 24)
74
+ - `MAX_WEBCAM_QUALITY_LEVEL` (default: 1080)
75
+ - `TURN_SERVICE_ID`: TURN service
76
+ - `TURN_SERVICE_TOKEN`: TURN auth (secret)
77
+
78
+ ## TURN Configuration
79
+
80
+ ```javascript
81
+ const pc = new RTCPeerConnection({
82
+ iceServers: [
83
+ { urls: 'stun:stun.cloudflare.com:3478' },
84
+ {
85
+ urls: [
86
+ 'turn:turn.cloudflare.com:3478?transport=udp',
87
+ 'turn:turn.cloudflare.com:3478?transport=tcp',
88
+ 'turns:turn.cloudflare.com:5349?transport=tcp',
89
+ ],
90
+ username: turnUsername,
91
+ credential: turnCredential,
92
+ },
93
+ ],
94
+ bundlePolicy: 'max-bundle', // Recommended: reduces overhead
95
+ iceTransportPolicy: 'all', // Use 'relay' to force TURN (testing only)
96
+ })
97
+ ```
98
+
99
+ **Ports:** 3478 (UDP/TCP), 53 (UDP), 80 (TCP), 443 (TLS), 5349 (TLS)
100
+
101
+ **When to use TURN:** Required for restrictive corporate firewalls/networks that block UDP. ~5-10% of connections fallback to TURN. STUN works for most users.
102
+
103
+ **ICE candidate filtering:** Cloudflare handles candidate filtering automatically. No need to manually filter candidates.
104
+
105
+ ## Durable Object Boilerplate
106
+
107
+ Minimal presence system:
108
+
109
+ ```typescript
110
+ export class Room {
111
+ private sessions = new Map<string, { userId: string; tracks: string[] }>()
112
+
113
+ async fetch(req: Request) {
114
+ const { pathname } = new URL(req.url)
115
+ const body = await req.json()
116
+
117
+ if (pathname === '/join') {
118
+ this.sessions.set(body.sessionId, { userId: body.userId, tracks: [] })
119
+ return Response.json({ participants: this.sessions.size })
120
+ }
121
+
122
+ if (pathname === '/publish') {
123
+ this.sessions.get(body.sessionId)?.tracks.push(...body.tracks)
124
+ // Broadcast to others via WebSocket (not shown)
125
+ return new Response('OK')
126
+ }
127
+
128
+ return new Response('Not found', { status: 404 })
129
+ }
130
+ }
131
+ ```
132
+
133
+ ## Environment Validation
134
+
135
+ Check credentials before first API call:
136
+
137
+ ```typescript
138
+ if (!env.CALLS_APP_ID || !env.CALLS_APP_SECRET) {
139
+ throw new Error('CALLS_APP_ID and CALLS_APP_SECRET required')
140
+ }
141
+ ```
@@ -0,0 +1,138 @@
1
+ # Gotchas & Troubleshooting
2
+
3
+ ## Common Errors
4
+
5
+ ### "Slow initial connect (~1.8s)"
6
+
7
+ **Cause:** First STUN delayed during consensus forming (normal behavior)
8
+ **Solution:** Subsequent connections are faster. CF detects DTLS ClientHello early to compensate.
9
+
10
+ ### "No media flow"
11
+
12
+ **Cause:** SDP exchange incomplete, connection not established, tracks not added before offer, browser permissions missing
13
+ **Solution:**
14
+
15
+ 1. Verify SDP exchange complete
16
+ 2. Check `pc.connectionState === 'connected'`
17
+ 3. Ensure tracks added before creating offer
18
+ 4. Confirm browser permissions granted
19
+ 5. Use `chrome://webrtc-internals` for debugging
20
+
21
+ ### "Track not receiving"
22
+
23
+ **Cause:** Track not published, track ID not shared, session IDs mismatch, `pc.ontrack` not set, renegotiation needed
24
+ **Solution:**
25
+
26
+ 1. Verify track published successfully
27
+ 2. Confirm track ID shared between peers
28
+ 3. Check session IDs match
29
+ 4. Set `pc.ontrack` handler before answer
30
+ 5. Trigger renegotiation if needed
31
+
32
+ ### "ICE connection failed"
33
+
34
+ **Cause:** Network changed, firewall blocked UDP, TURN needed, transient network issue
35
+ **Solution:**
36
+
37
+ ```typescript
38
+ pc.oniceconnectionstatechange = async () => {
39
+ if (pc.iceConnectionState === 'failed') {
40
+ console.warn('ICE failed, attempting restart')
41
+ await pc.restartIce() // Triggers new ICE gathering
42
+
43
+ // Create new offer with ICE restart flag
44
+ const offer = await pc.createOffer({ iceRestart: true })
45
+ await pc.setLocalDescription(offer)
46
+
47
+ // Send to backend → Cloudflare API
48
+ await fetch(`/api/sessions/${sessionId}/renegotiate`, {
49
+ method: 'PUT',
50
+ body: JSON.stringify({ sdp: offer.sdp }),
51
+ })
52
+ }
53
+ }
54
+ ```
55
+
56
+ ### "Track stuck/frozen"
57
+
58
+ **Cause:** Sender paused track, network congestion, codec mismatch, mobile browser backgrounded
59
+ **Solution:**
60
+
61
+ 1. Check `track.enabled` and `track.readyState === 'live'`
62
+ 2. Verify sender active: `pc.getSenders().find(s => s.track === track)`
63
+ 3. Check stats for packet loss/jitter (see patterns.md)
64
+ 4. On mobile: Re-acquire tracks when app foregrounded
65
+ 5. Test with different codecs if persistent
66
+
67
+ ### "Network change disconnects call"
68
+
69
+ **Cause:** Mobile switching WiFi↔cellular, laptop changing networks
70
+ **Solution:**
71
+
72
+ ```typescript
73
+ // Listen for network changes
74
+ if ('connection' in navigator) {
75
+ ;(navigator as any).connection.addEventListener('change', async () => {
76
+ console.log('Network changed')
77
+ await pc.restartIce() // Use ICE restart pattern above
78
+ })
79
+ }
80
+
81
+ // Or use PartyTracks (handles automatically)
82
+ ```
83
+
84
+ ## Retry with Exponential Backoff
85
+
86
+ ```typescript
87
+ async function fetchWithRetry(url: string, options: RequestInit, maxRetries = 3) {
88
+ for (let i = 0; i < maxRetries; i++) {
89
+ try {
90
+ const res = await fetch(url, options)
91
+ if (res.ok) return res
92
+ if (res.status >= 500) throw new Error('Server error')
93
+ return res // Client error, don't retry
94
+ } catch (err) {
95
+ if (i === maxRetries - 1) throw err
96
+ const delay = Math.min(1000 * 2 ** i, 10000) // Cap at 10s
97
+ await new Promise((resolve) => setTimeout(resolve, delay))
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ ## Debugging with chrome://webrtc-internals
104
+
105
+ 1. Open `chrome://webrtc-internals` in Chrome/Edge
106
+ 2. Find your PeerConnection in the list
107
+ 3. Check **Stats graphs** for packet loss, jitter, bandwidth
108
+ 4. Check **ICE candidate pairs**: Look for `succeeded` state, relay vs host candidates
109
+ 5. Check **getStats**: Raw metrics for inbound/outbound RTP
110
+ 6. Look for errors in **Event log**: `iceConnectionState`, `connectionState` changes
111
+ 7. Export data with "Download the PeerConnection updates and stats data" button
112
+ 8. Common issues visible here: ICE failures, high packet loss, bitrate drops
113
+
114
+ ## Limits
115
+
116
+ | Resource/Limit | Value | Notes |
117
+ | ------------------ | -------------- | --------------------------------------------------- |
118
+ | Egress (Free) | 1TB/month | Per account |
119
+ | Egress (Paid) | $0.05/GB | After free tier |
120
+ | Inbound traffic | Free | All plans |
121
+ | TURN service | Free | Included with SFU |
122
+ | Participants | No hard limit | Client bandwidth/CPU bound (typically 10-50 tracks) |
123
+ | Tracks per session | No hard limit | Client resources limited |
124
+ | Session duration | No hard limit | Production calls run for hours |
125
+ | WebRTC ports | UDP 1024-65535 | Outbound only, required for media |
126
+ | API rate limit | 600 req/min | Per app, burst allowed |
127
+
128
+ ## Security Checklist
129
+
130
+ - ✅ **Never expose** `CALLS_APP_SECRET` to client
131
+ - ✅ **Validate user identity** in backend before creating sessions
132
+ - ✅ **Implement auth tokens** for session access (JWT in custom header)
133
+ - ✅ **Rate limit** session creation endpoints
134
+ - ✅ **Expire sessions** server-side after inactivity
135
+ - ✅ **Validate track IDs** before subscribing (prevent unauthorized access)
136
+ - ✅ **Use HTTPS** for all signaling (API calls)
137
+ - ✅ **Enable DTLS-SRTP** (automatic with Cloudflare, encrypts media)
138
+ - ⚠️ **Consider E2EE** for sensitive content (implement client-side with Insertable Streams API)
@@ -0,0 +1,187 @@
1
+ # Patterns & Use Cases
2
+
3
+ ## Architecture
4
+
5
+ ```
6
+ Client (WebRTC) <---> CF Edge <---> Backend (HTTP)
7
+ |
8
+ CF Backbone (310+ DCs)
9
+ |
10
+ Other Edges <---> Other Clients
11
+ ```
12
+
13
+ Anycast: Last-mile <50ms (95%), no region select, NACK shield, distributed consensus
14
+
15
+ Cascading trees auto-scale to millions:
16
+
17
+ ```
18
+ Publisher -> Edge A -> Edge B -> Sub1
19
+ \-> Edge C -> Sub2,3
20
+ ```
21
+
22
+ ## Use Cases
23
+
24
+ **1:1:** A creates session+publishes, B creates+subscribes to A+publishes, A subscribes to B
25
+ **N:N:** All create session+publish, backend broadcasts track IDs, all subscribe to others
26
+ **1:N:** Publisher creates+publishes, viewers each create+subscribe (no fan-out limit)
27
+ **Breakout:** Same PeerConnection! Backend closes/adds tracks, no recreation
28
+
29
+ ## PartyTracks (Recommended)
30
+
31
+ Observable-based client with automatic device/network handling:
32
+
33
+ ```typescript
34
+ import {PartyTracks} from 'partytracks';
35
+
36
+ // Create client
37
+ const pt = new PartyTracks({
38
+ apiUrl: '/api/calls',
39
+ sessionId: 'my-session',
40
+ onTrack: (track, peer) => {
41
+ const video = document.getElementById(`video-${peer.id}`) as HTMLVideoElement;
42
+ video.srcObject = new MediaStream([track]);
43
+ }
44
+ });
45
+
46
+ // Publish camera (push API)
47
+ const camera = await pt.getCamera(); // Auto-requests permissions, handles device changes
48
+ await pt.publishTrack(camera, {trackName: 'my-camera'});
49
+
50
+ // Subscribe to remote track (pull API)
51
+ await pt.subscribeToTrack({trackName: 'remote-camera', sessionId: 'other-session'});
52
+
53
+ // React hook example
54
+ import {useObservableAsValue} from 'observable-hooks';
55
+
56
+ function VideoCall() {
57
+ const localTracks = useObservableAsValue(pt.localTracks$);
58
+ const remoteTracks = useObservableAsValue(pt.remoteTracks$);
59
+
60
+ return <div>{/* Render tracks */}</div>;
61
+ }
62
+
63
+ // Screenshare
64
+ const screen = await pt.getScreenshare();
65
+ await pt.publishTrack(screen, {trackName: 'my-screen'});
66
+
67
+ // Handle device changes (automatic)
68
+ // PartyTracks detects device changes (e.g., Bluetooth headset) and renegotiates
69
+ ```
70
+
71
+ ## Backend
72
+
73
+ Express:
74
+
75
+ ```js
76
+ app.post('/api/new-session', async (req, res) => {
77
+ const r = await fetch(`${CALLS_API}/apps/${process.env.CALLS_APP_ID}/sessions/new`, {
78
+ method: 'POST',
79
+ headers: { Authorization: `Bearer ${process.env.CALLS_APP_SECRET}` },
80
+ })
81
+ res.json(await r.json())
82
+ })
83
+ ```
84
+
85
+ Workers: Same pattern, use `env.CALLS_APP_ID` and `env.CALLS_APP_SECRET`
86
+
87
+ DO Presence: See configuration.md for boilerplate
88
+
89
+ ## Audio Level Detection
90
+
91
+ ```typescript
92
+ // Attach analyzer to audio track
93
+ function attachAudioLevelDetector(track: MediaStreamTrack) {
94
+ const ctx = new AudioContext()
95
+ const analyzer = ctx.createAnalyser()
96
+ const src = ctx.createMediaStreamSource(new MediaStream([track]))
97
+ src.connect(analyzer)
98
+
99
+ const data = new Uint8Array(analyzer.frequencyBinCount)
100
+ const checkLevel = () => {
101
+ analyzer.getByteFrequencyData(data)
102
+ const level = data.reduce((a, b) => a + b) / data.length
103
+ if (level > 30) console.log('Speaking:', level) // Trigger UI update
104
+ requestAnimationFrame(checkLevel)
105
+ }
106
+ checkLevel()
107
+ }
108
+ ```
109
+
110
+ ## Connection Quality Monitoring
111
+
112
+ ```typescript
113
+ pc.getStats().then((stats) => {
114
+ stats.forEach((report) => {
115
+ if (report.type === 'inbound-rtp' && report.kind === 'video') {
116
+ const { packetsLost, packetsReceived, jitter } = report
117
+ const lossRate = packetsLost / (packetsLost + packetsReceived)
118
+ if (lossRate > 0.05) console.warn('High packet loss:', lossRate)
119
+ if (jitter > 100) console.warn('High jitter:', jitter)
120
+ }
121
+ })
122
+ })
123
+ ```
124
+
125
+ ## Stage Management (Limit Visible Participants)
126
+
127
+ ```typescript
128
+ // Subscribe to top 6 active speakers only
129
+ let activeSubscriptions = new Set<string>()
130
+
131
+ function updateStage(topSpeakers: string[]) {
132
+ const toAdd = topSpeakers.filter((id) => !activeSubscriptions.has(id)).slice(0, 6)
133
+ const toRemove = [...activeSubscriptions].filter((id) => !topSpeakers.includes(id))
134
+
135
+ toRemove.forEach((id) => {
136
+ pc.getSenders()
137
+ .find((s) => s.track?.id === id)
138
+ ?.track?.stop()
139
+ activeSubscriptions.delete(id)
140
+ })
141
+
142
+ toAdd.forEach(async (id) => {
143
+ await fetch(`/api/subscribe`, { method: 'POST', body: JSON.stringify({ trackId: id }) })
144
+ activeSubscriptions.add(id)
145
+ })
146
+ }
147
+ ```
148
+
149
+ ## Advanced
150
+
151
+ Bandwidth mgmt:
152
+
153
+ ```ts
154
+ const s = pc.getSenders().find((s) => s.track?.kind === 'video')
155
+ const p = s.getParameters()
156
+ if (!p.encodings) p.encodings = [{}]
157
+ p.encodings[0].maxBitrate = 1200000
158
+ p.encodings[0].maxFramerate = 24
159
+ await s.setParameters(p)
160
+ ```
161
+
162
+ Simulcast (CF auto-forwards best layer):
163
+
164
+ ```ts
165
+ pc.addTransceiver('video', {
166
+ direction: 'sendonly',
167
+ sendEncodings: [
168
+ { rid: 'high', maxBitrate: 1200000 },
169
+ { rid: 'med', maxBitrate: 600000, scaleResolutionDownBy: 2 },
170
+ { rid: 'low', maxBitrate: 200000, scaleResolutionDownBy: 4 },
171
+ ],
172
+ })
173
+ ```
174
+
175
+ DataChannel:
176
+
177
+ ```ts
178
+ const dc = pc.createDataChannel('chat', { ordered: true, maxRetransmits: 3 })
179
+ dc.onopen = () => dc.send(JSON.stringify({ type: 'chat', text: 'Hi' }))
180
+ dc.onmessage = (e) => console.log('RX:', JSON.parse(e.data))
181
+ ```
182
+
183
+ **WHIP/WHEP:** For streaming interop (OBS → SFU, SFU → video players), use WHIP (ingest) and WHEP (egress) protocols. See Cloudflare Stream integration docs.
184
+
185
+ Integrations: R2 for recording `env.R2_BUCKET.put(...)`, Queues for analytics
186
+
187
+ Perf: 100-250ms connect, ~50ms latency (95%), 200-400ms glass-to-glass, no participant limit (client: 10-50 tracks)