pi-cloudflare 0.1.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 (410) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +67 -0
  3. package/bin/setup.mjs +103 -0
  4. package/dist/auth-flow.d.ts +15 -0
  5. package/dist/auth-flow.d.ts.map +1 -0
  6. package/dist/auth-flow.js +90 -0
  7. package/dist/auth-flow.js.map +1 -0
  8. package/dist/client.d.ts +18 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +47 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/config.d.ts +13 -0
  13. package/dist/config.d.ts.map +1 -0
  14. package/dist/config.js +10 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/index.d.ts +24 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +109 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/oauth.d.ts +44 -0
  21. package/dist/oauth.d.ts.map +1 -0
  22. package/dist/oauth.js +135 -0
  23. package/dist/oauth.js.map +1 -0
  24. package/dist/proxy.d.ts +29 -0
  25. package/dist/proxy.d.ts.map +1 -0
  26. package/dist/proxy.js +39 -0
  27. package/dist/proxy.js.map +1 -0
  28. package/dist/servers.d.ts +19 -0
  29. package/dist/servers.d.ts.map +1 -0
  30. package/dist/servers.js +40 -0
  31. package/dist/servers.js.map +1 -0
  32. package/dist/token-store.d.ts +23 -0
  33. package/dist/token-store.d.ts.map +1 -0
  34. package/dist/token-store.js +47 -0
  35. package/dist/token-store.js.map +1 -0
  36. package/package.json +67 -0
  37. package/skills/agents-sdk/SKILL.md +221 -0
  38. package/skills/agents-sdk/references/browse-the-web.md +63 -0
  39. package/skills/agents-sdk/references/callable.md +92 -0
  40. package/skills/agents-sdk/references/client-sdk.md +110 -0
  41. package/skills/agents-sdk/references/codemode.md +110 -0
  42. package/skills/agents-sdk/references/configuration.md +72 -0
  43. package/skills/agents-sdk/references/durable-execution.md +51 -0
  44. package/skills/agents-sdk/references/email.md +146 -0
  45. package/skills/agents-sdk/references/human-in-the-loop.md +67 -0
  46. package/skills/agents-sdk/references/mcp.md +188 -0
  47. package/skills/agents-sdk/references/observability.md +44 -0
  48. package/skills/agents-sdk/references/queue-retries.md +79 -0
  49. package/skills/agents-sdk/references/routing.md +75 -0
  50. package/skills/agents-sdk/references/server-driven-messages.md +63 -0
  51. package/skills/agents-sdk/references/state-scheduling.md +171 -0
  52. package/skills/agents-sdk/references/streaming-chat.md +198 -0
  53. package/skills/agents-sdk/references/think.md +112 -0
  54. package/skills/agents-sdk/references/voice.md +68 -0
  55. package/skills/agents-sdk/references/webhooks-push.md +86 -0
  56. package/skills/agents-sdk/references/workflows.md +132 -0
  57. package/skills/cloudflare/SKILL.md +248 -0
  58. package/skills/cloudflare/references/agents-sdk/README.md +89 -0
  59. package/skills/cloudflare/references/agents-sdk/api.md +190 -0
  60. package/skills/cloudflare/references/agents-sdk/configuration.md +182 -0
  61. package/skills/cloudflare/references/agents-sdk/gotchas.md +158 -0
  62. package/skills/cloudflare/references/agents-sdk/patterns.md +192 -0
  63. package/skills/cloudflare/references/ai-gateway/README.md +175 -0
  64. package/skills/cloudflare/references/ai-gateway/configuration.md +111 -0
  65. package/skills/cloudflare/references/ai-gateway/dynamic-routing.md +82 -0
  66. package/skills/cloudflare/references/ai-gateway/features.md +96 -0
  67. package/skills/cloudflare/references/ai-gateway/sdk-integration.md +114 -0
  68. package/skills/cloudflare/references/ai-gateway/troubleshooting.md +88 -0
  69. package/skills/cloudflare/references/ai-search/README.md +138 -0
  70. package/skills/cloudflare/references/ai-search/api.md +87 -0
  71. package/skills/cloudflare/references/ai-search/configuration.md +88 -0
  72. package/skills/cloudflare/references/ai-search/gotchas.md +81 -0
  73. package/skills/cloudflare/references/ai-search/patterns.md +85 -0
  74. package/skills/cloudflare/references/analytics-engine/README.md +94 -0
  75. package/skills/cloudflare/references/analytics-engine/api.md +112 -0
  76. package/skills/cloudflare/references/analytics-engine/configuration.md +112 -0
  77. package/skills/cloudflare/references/analytics-engine/gotchas.md +85 -0
  78. package/skills/cloudflare/references/analytics-engine/patterns.md +83 -0
  79. package/skills/cloudflare/references/api/README.md +66 -0
  80. package/skills/cloudflare/references/api/api.md +204 -0
  81. package/skills/cloudflare/references/api/configuration.md +160 -0
  82. package/skills/cloudflare/references/api/gotchas.md +225 -0
  83. package/skills/cloudflare/references/api/patterns.md +204 -0
  84. package/skills/cloudflare/references/api-shield/README.md +44 -0
  85. package/skills/cloudflare/references/api-shield/api.md +141 -0
  86. package/skills/cloudflare/references/api-shield/configuration.md +192 -0
  87. package/skills/cloudflare/references/api-shield/gotchas.md +125 -0
  88. package/skills/cloudflare/references/api-shield/patterns.md +180 -0
  89. package/skills/cloudflare/references/argo-smart-routing/README.md +90 -0
  90. package/skills/cloudflare/references/argo-smart-routing/api.md +240 -0
  91. package/skills/cloudflare/references/argo-smart-routing/configuration.md +197 -0
  92. package/skills/cloudflare/references/argo-smart-routing/gotchas.md +111 -0
  93. package/skills/cloudflare/references/argo-smart-routing/patterns.md +104 -0
  94. package/skills/cloudflare/references/artifacts/README.md +79 -0
  95. package/skills/cloudflare/references/artifacts/api.md +128 -0
  96. package/skills/cloudflare/references/artifacts/configuration.md +92 -0
  97. package/skills/cloudflare/references/bindings/README.md +122 -0
  98. package/skills/cloudflare/references/bindings/api.md +203 -0
  99. package/skills/cloudflare/references/bindings/configuration.md +188 -0
  100. package/skills/cloudflare/references/bindings/gotchas.md +208 -0
  101. package/skills/cloudflare/references/bindings/patterns.md +200 -0
  102. package/skills/cloudflare/references/bot-management/README.md +94 -0
  103. package/skills/cloudflare/references/bot-management/api.md +169 -0
  104. package/skills/cloudflare/references/bot-management/configuration.md +163 -0
  105. package/skills/cloudflare/references/bot-management/gotchas.md +114 -0
  106. package/skills/cloudflare/references/bot-management/patterns.md +182 -0
  107. package/skills/cloudflare/references/browser-rendering/README.md +78 -0
  108. package/skills/cloudflare/references/browser-rendering/api.md +108 -0
  109. package/skills/cloudflare/references/browser-rendering/configuration.md +78 -0
  110. package/skills/cloudflare/references/browser-rendering/gotchas.md +88 -0
  111. package/skills/cloudflare/references/browser-rendering/patterns.md +91 -0
  112. package/skills/cloudflare/references/c3/README.md +111 -0
  113. package/skills/cloudflare/references/c3/api.md +71 -0
  114. package/skills/cloudflare/references/c3/configuration.md +81 -0
  115. package/skills/cloudflare/references/c3/gotchas.md +92 -0
  116. package/skills/cloudflare/references/c3/patterns.md +82 -0
  117. package/skills/cloudflare/references/cache-reserve/README.md +147 -0
  118. package/skills/cloudflare/references/cache-reserve/api.md +194 -0
  119. package/skills/cloudflare/references/cache-reserve/configuration.md +169 -0
  120. package/skills/cloudflare/references/cache-reserve/gotchas.md +132 -0
  121. package/skills/cloudflare/references/cache-reserve/patterns.md +197 -0
  122. package/skills/cloudflare/references/containers/README.md +85 -0
  123. package/skills/cloudflare/references/containers/api.md +187 -0
  124. package/skills/cloudflare/references/containers/configuration.md +188 -0
  125. package/skills/cloudflare/references/containers/gotchas.md +178 -0
  126. package/skills/cloudflare/references/containers/patterns.md +202 -0
  127. package/skills/cloudflare/references/cron-triggers/README.md +99 -0
  128. package/skills/cloudflare/references/cron-triggers/api.md +196 -0
  129. package/skills/cloudflare/references/cron-triggers/configuration.md +180 -0
  130. package/skills/cloudflare/references/cron-triggers/gotchas.md +199 -0
  131. package/skills/cloudflare/references/cron-triggers/patterns.md +190 -0
  132. package/skills/cloudflare/references/d1/README.md +133 -0
  133. package/skills/cloudflare/references/d1/api.md +196 -0
  134. package/skills/cloudflare/references/d1/configuration.md +191 -0
  135. package/skills/cloudflare/references/d1/gotchas.md +98 -0
  136. package/skills/cloudflare/references/d1/patterns.md +189 -0
  137. package/skills/cloudflare/references/ddos/README.md +41 -0
  138. package/skills/cloudflare/references/ddos/api.md +164 -0
  139. package/skills/cloudflare/references/ddos/configuration.md +93 -0
  140. package/skills/cloudflare/references/ddos/gotchas.md +107 -0
  141. package/skills/cloudflare/references/ddos/patterns.md +174 -0
  142. package/skills/cloudflare/references/do-storage/README.md +75 -0
  143. package/skills/cloudflare/references/do-storage/api.md +102 -0
  144. package/skills/cloudflare/references/do-storage/configuration.md +112 -0
  145. package/skills/cloudflare/references/do-storage/gotchas.md +150 -0
  146. package/skills/cloudflare/references/do-storage/patterns.md +194 -0
  147. package/skills/cloudflare/references/do-storage/testing.md +183 -0
  148. package/skills/cloudflare/references/durable-objects/README.md +185 -0
  149. package/skills/cloudflare/references/durable-objects/api.md +187 -0
  150. package/skills/cloudflare/references/durable-objects/configuration.md +160 -0
  151. package/skills/cloudflare/references/durable-objects/gotchas.md +197 -0
  152. package/skills/cloudflare/references/durable-objects/patterns.md +201 -0
  153. package/skills/cloudflare/references/email-routing/README.md +89 -0
  154. package/skills/cloudflare/references/email-routing/api.md +195 -0
  155. package/skills/cloudflare/references/email-routing/configuration.md +186 -0
  156. package/skills/cloudflare/references/email-routing/gotchas.md +196 -0
  157. package/skills/cloudflare/references/email-routing/patterns.md +229 -0
  158. package/skills/cloudflare/references/email-workers/README.md +151 -0
  159. package/skills/cloudflare/references/email-workers/api.md +237 -0
  160. package/skills/cloudflare/references/email-workers/configuration.md +112 -0
  161. package/skills/cloudflare/references/email-workers/gotchas.md +125 -0
  162. package/skills/cloudflare/references/email-workers/patterns.md +102 -0
  163. package/skills/cloudflare/references/flagship/README.md +59 -0
  164. package/skills/cloudflare/references/flagship/api.md +390 -0
  165. package/skills/cloudflare/references/flagship/configuration.md +202 -0
  166. package/skills/cloudflare/references/flagship/gotchas.md +178 -0
  167. package/skills/cloudflare/references/flagship/patterns.md +469 -0
  168. package/skills/cloudflare/references/graphql-api/README.md +147 -0
  169. package/skills/cloudflare/references/graphql-api/api.md +175 -0
  170. package/skills/cloudflare/references/graphql-api/configuration.md +118 -0
  171. package/skills/cloudflare/references/graphql-api/gotchas.md +110 -0
  172. package/skills/cloudflare/references/graphql-api/patterns.md +225 -0
  173. package/skills/cloudflare/references/hyperdrive/README.md +82 -0
  174. package/skills/cloudflare/references/hyperdrive/api.md +143 -0
  175. package/skills/cloudflare/references/hyperdrive/configuration.md +159 -0
  176. package/skills/cloudflare/references/hyperdrive/gotchas.md +77 -0
  177. package/skills/cloudflare/references/hyperdrive/patterns.md +190 -0
  178. package/skills/cloudflare/references/images/README.md +61 -0
  179. package/skills/cloudflare/references/images/api.md +96 -0
  180. package/skills/cloudflare/references/images/configuration.md +211 -0
  181. package/skills/cloudflare/references/images/gotchas.md +99 -0
  182. package/skills/cloudflare/references/images/patterns.md +115 -0
  183. package/skills/cloudflare/references/kv/README.md +89 -0
  184. package/skills/cloudflare/references/kv/api.md +160 -0
  185. package/skills/cloudflare/references/kv/configuration.md +144 -0
  186. package/skills/cloudflare/references/kv/gotchas.md +131 -0
  187. package/skills/cloudflare/references/kv/patterns.md +196 -0
  188. package/skills/cloudflare/references/miniflare/README.md +105 -0
  189. package/skills/cloudflare/references/miniflare/api.md +187 -0
  190. package/skills/cloudflare/references/miniflare/configuration.md +173 -0
  191. package/skills/cloudflare/references/miniflare/gotchas.md +160 -0
  192. package/skills/cloudflare/references/miniflare/patterns.md +181 -0
  193. package/skills/cloudflare/references/network-interconnect/README.md +99 -0
  194. package/skills/cloudflare/references/network-interconnect/api.md +199 -0
  195. package/skills/cloudflare/references/network-interconnect/configuration.md +114 -0
  196. package/skills/cloudflare/references/network-interconnect/gotchas.md +165 -0
  197. package/skills/cloudflare/references/network-interconnect/patterns.md +166 -0
  198. package/skills/cloudflare/references/observability/README.md +88 -0
  199. package/skills/cloudflare/references/observability/api.md +164 -0
  200. package/skills/cloudflare/references/observability/configuration.md +169 -0
  201. package/skills/cloudflare/references/observability/gotchas.md +115 -0
  202. package/skills/cloudflare/references/observability/patterns.md +105 -0
  203. package/skills/cloudflare/references/pages/README.md +88 -0
  204. package/skills/cloudflare/references/pages/api.md +204 -0
  205. package/skills/cloudflare/references/pages/configuration.md +201 -0
  206. package/skills/cloudflare/references/pages/gotchas.md +203 -0
  207. package/skills/cloudflare/references/pages/patterns.md +204 -0
  208. package/skills/cloudflare/references/pages-functions/README.md +98 -0
  209. package/skills/cloudflare/references/pages-functions/api.md +143 -0
  210. package/skills/cloudflare/references/pages-functions/configuration.md +122 -0
  211. package/skills/cloudflare/references/pages-functions/gotchas.md +94 -0
  212. package/skills/cloudflare/references/pages-functions/patterns.md +137 -0
  213. package/skills/cloudflare/references/pipelines/README.md +90 -0
  214. package/skills/cloudflare/references/pipelines/api.md +124 -0
  215. package/skills/cloudflare/references/pipelines/configuration.md +155 -0
  216. package/skills/cloudflare/references/pipelines/gotchas.md +58 -0
  217. package/skills/cloudflare/references/pipelines/patterns.md +130 -0
  218. package/skills/cloudflare/references/pulumi/README.md +100 -0
  219. package/skills/cloudflare/references/pulumi/api.md +200 -0
  220. package/skills/cloudflare/references/pulumi/configuration.md +198 -0
  221. package/skills/cloudflare/references/pulumi/gotchas.md +181 -0
  222. package/skills/cloudflare/references/pulumi/patterns.md +191 -0
  223. package/skills/cloudflare/references/queues/README.md +96 -0
  224. package/skills/cloudflare/references/queues/api.md +206 -0
  225. package/skills/cloudflare/references/queues/configuration.md +144 -0
  226. package/skills/cloudflare/references/queues/gotchas.md +206 -0
  227. package/skills/cloudflare/references/queues/patterns.md +220 -0
  228. package/skills/cloudflare/references/r2/README.md +95 -0
  229. package/skills/cloudflare/references/r2/api.md +200 -0
  230. package/skills/cloudflare/references/r2/configuration.md +165 -0
  231. package/skills/cloudflare/references/r2/gotchas.md +190 -0
  232. package/skills/cloudflare/references/r2/patterns.md +193 -0
  233. package/skills/cloudflare/references/r2-data-catalog/README.md +75 -0
  234. package/skills/cloudflare/references/r2-data-catalog/api.md +122 -0
  235. package/skills/cloudflare/references/r2-data-catalog/configuration.md +98 -0
  236. package/skills/cloudflare/references/r2-data-catalog/gotchas.md +55 -0
  237. package/skills/cloudflare/references/r2-data-catalog/patterns.md +122 -0
  238. package/skills/cloudflare/references/r2-sql/README.md +64 -0
  239. package/skills/cloudflare/references/r2-sql/api.md +121 -0
  240. package/skills/cloudflare/references/r2-sql/configuration.md +50 -0
  241. package/skills/cloudflare/references/r2-sql/gotchas.md +39 -0
  242. package/skills/cloudflare/references/r2-sql/patterns.md +118 -0
  243. package/skills/cloudflare/references/realtime-sfu/README.md +65 -0
  244. package/skills/cloudflare/references/realtime-sfu/api.md +158 -0
  245. package/skills/cloudflare/references/realtime-sfu/configuration.md +137 -0
  246. package/skills/cloudflare/references/realtime-sfu/gotchas.md +133 -0
  247. package/skills/cloudflare/references/realtime-sfu/patterns.md +174 -0
  248. package/skills/cloudflare/references/realtimekit/README.md +113 -0
  249. package/skills/cloudflare/references/realtimekit/api.md +212 -0
  250. package/skills/cloudflare/references/realtimekit/configuration.md +203 -0
  251. package/skills/cloudflare/references/realtimekit/gotchas.md +169 -0
  252. package/skills/cloudflare/references/realtimekit/patterns.md +223 -0
  253. package/skills/cloudflare/references/sandbox/README.md +96 -0
  254. package/skills/cloudflare/references/sandbox/api.md +198 -0
  255. package/skills/cloudflare/references/sandbox/configuration.md +143 -0
  256. package/skills/cloudflare/references/sandbox/gotchas.md +194 -0
  257. package/skills/cloudflare/references/sandbox/patterns.md +201 -0
  258. package/skills/cloudflare/references/secrets-store/README.md +74 -0
  259. package/skills/cloudflare/references/secrets-store/api.md +200 -0
  260. package/skills/cloudflare/references/secrets-store/configuration.md +185 -0
  261. package/skills/cloudflare/references/secrets-store/gotchas.md +97 -0
  262. package/skills/cloudflare/references/secrets-store/patterns.md +207 -0
  263. package/skills/cloudflare/references/smart-placement/README.md +138 -0
  264. package/skills/cloudflare/references/smart-placement/api.md +183 -0
  265. package/skills/cloudflare/references/smart-placement/configuration.md +196 -0
  266. package/skills/cloudflare/references/smart-placement/gotchas.md +174 -0
  267. package/skills/cloudflare/references/smart-placement/patterns.md +183 -0
  268. package/skills/cloudflare/references/snippets/README.md +68 -0
  269. package/skills/cloudflare/references/snippets/api.md +198 -0
  270. package/skills/cloudflare/references/snippets/configuration.md +227 -0
  271. package/skills/cloudflare/references/snippets/gotchas.md +86 -0
  272. package/skills/cloudflare/references/snippets/patterns.md +135 -0
  273. package/skills/cloudflare/references/spectrum/README.md +52 -0
  274. package/skills/cloudflare/references/spectrum/api.md +181 -0
  275. package/skills/cloudflare/references/spectrum/configuration.md +194 -0
  276. package/skills/cloudflare/references/spectrum/gotchas.md +145 -0
  277. package/skills/cloudflare/references/spectrum/patterns.md +196 -0
  278. package/skills/cloudflare/references/static-assets/README.md +65 -0
  279. package/skills/cloudflare/references/static-assets/api.md +199 -0
  280. package/skills/cloudflare/references/static-assets/configuration.md +186 -0
  281. package/skills/cloudflare/references/static-assets/gotchas.md +162 -0
  282. package/skills/cloudflare/references/static-assets/patterns.md +189 -0
  283. package/skills/cloudflare/references/stream/README.md +114 -0
  284. package/skills/cloudflare/references/stream/api-live.md +195 -0
  285. package/skills/cloudflare/references/stream/api.md +199 -0
  286. package/skills/cloudflare/references/stream/configuration.md +141 -0
  287. package/skills/cloudflare/references/stream/gotchas.md +130 -0
  288. package/skills/cloudflare/references/stream/patterns.md +184 -0
  289. package/skills/cloudflare/references/tail-workers/README.md +89 -0
  290. package/skills/cloudflare/references/tail-workers/api.md +200 -0
  291. package/skills/cloudflare/references/tail-workers/configuration.md +176 -0
  292. package/skills/cloudflare/references/tail-workers/gotchas.md +192 -0
  293. package/skills/cloudflare/references/tail-workers/patterns.md +180 -0
  294. package/skills/cloudflare/references/terraform/README.md +102 -0
  295. package/skills/cloudflare/references/terraform/api.md +178 -0
  296. package/skills/cloudflare/references/terraform/configuration.md +197 -0
  297. package/skills/cloudflare/references/terraform/gotchas.md +150 -0
  298. package/skills/cloudflare/references/terraform/patterns.md +174 -0
  299. package/skills/cloudflare/references/tunnel/README.md +129 -0
  300. package/skills/cloudflare/references/tunnel/api.md +193 -0
  301. package/skills/cloudflare/references/tunnel/configuration.md +157 -0
  302. package/skills/cloudflare/references/tunnel/gotchas.md +147 -0
  303. package/skills/cloudflare/references/tunnel/networking.md +168 -0
  304. package/skills/cloudflare/references/tunnel/patterns.md +192 -0
  305. package/skills/cloudflare/references/turn/README.md +82 -0
  306. package/skills/cloudflare/references/turn/api.md +239 -0
  307. package/skills/cloudflare/references/turn/configuration.md +179 -0
  308. package/skills/cloudflare/references/turn/gotchas.md +231 -0
  309. package/skills/cloudflare/references/turn/patterns.md +213 -0
  310. package/skills/cloudflare/references/turnstile/README.md +99 -0
  311. package/skills/cloudflare/references/turnstile/api.md +240 -0
  312. package/skills/cloudflare/references/turnstile/configuration.md +222 -0
  313. package/skills/cloudflare/references/turnstile/gotchas.md +218 -0
  314. package/skills/cloudflare/references/turnstile/patterns.md +193 -0
  315. package/skills/cloudflare/references/vectorize/README.md +133 -0
  316. package/skills/cloudflare/references/vectorize/api.md +88 -0
  317. package/skills/cloudflare/references/vectorize/configuration.md +88 -0
  318. package/skills/cloudflare/references/vectorize/gotchas.md +76 -0
  319. package/skills/cloudflare/references/vectorize/patterns.md +90 -0
  320. package/skills/cloudflare/references/waf/README.md +113 -0
  321. package/skills/cloudflare/references/waf/api.md +202 -0
  322. package/skills/cloudflare/references/waf/configuration.md +203 -0
  323. package/skills/cloudflare/references/waf/gotchas.md +204 -0
  324. package/skills/cloudflare/references/waf/patterns.md +197 -0
  325. package/skills/cloudflare/references/web-analytics/README.md +141 -0
  326. package/skills/cloudflare/references/web-analytics/configuration.md +76 -0
  327. package/skills/cloudflare/references/web-analytics/gotchas.md +82 -0
  328. package/skills/cloudflare/references/web-analytics/integration.md +60 -0
  329. package/skills/cloudflare/references/web-analytics/patterns.md +91 -0
  330. package/skills/cloudflare/references/workerd/README.md +78 -0
  331. package/skills/cloudflare/references/workerd/api.md +185 -0
  332. package/skills/cloudflare/references/workerd/configuration.md +183 -0
  333. package/skills/cloudflare/references/workerd/gotchas.md +139 -0
  334. package/skills/cloudflare/references/workerd/patterns.md +192 -0
  335. package/skills/cloudflare/references/workers/README.md +108 -0
  336. package/skills/cloudflare/references/workers/api.md +195 -0
  337. package/skills/cloudflare/references/workers/configuration.md +185 -0
  338. package/skills/cloudflare/references/workers/frameworks.md +197 -0
  339. package/skills/cloudflare/references/workers/gotchas.md +137 -0
  340. package/skills/cloudflare/references/workers/patterns.md +198 -0
  341. package/skills/cloudflare/references/workers-ai/README.md +197 -0
  342. package/skills/cloudflare/references/workers-ai/api.md +112 -0
  343. package/skills/cloudflare/references/workers-ai/configuration.md +97 -0
  344. package/skills/cloudflare/references/workers-ai/gotchas.md +114 -0
  345. package/skills/cloudflare/references/workers-ai/patterns.md +120 -0
  346. package/skills/cloudflare/references/workers-for-platforms/README.md +89 -0
  347. package/skills/cloudflare/references/workers-for-platforms/api.md +196 -0
  348. package/skills/cloudflare/references/workers-for-platforms/configuration.md +167 -0
  349. package/skills/cloudflare/references/workers-for-platforms/gotchas.md +134 -0
  350. package/skills/cloudflare/references/workers-for-platforms/patterns.md +188 -0
  351. package/skills/cloudflare/references/workers-playground/README.md +127 -0
  352. package/skills/cloudflare/references/workers-playground/api.md +101 -0
  353. package/skills/cloudflare/references/workers-playground/configuration.md +163 -0
  354. package/skills/cloudflare/references/workers-playground/gotchas.md +88 -0
  355. package/skills/cloudflare/references/workers-playground/patterns.md +132 -0
  356. package/skills/cloudflare/references/workers-vpc/README.md +127 -0
  357. package/skills/cloudflare/references/workers-vpc/api.md +202 -0
  358. package/skills/cloudflare/references/workers-vpc/configuration.md +147 -0
  359. package/skills/cloudflare/references/workers-vpc/gotchas.md +167 -0
  360. package/skills/cloudflare/references/workers-vpc/patterns.md +209 -0
  361. package/skills/cloudflare/references/workflows/README.md +77 -0
  362. package/skills/cloudflare/references/workflows/api.md +218 -0
  363. package/skills/cloudflare/references/workflows/configuration.md +152 -0
  364. package/skills/cloudflare/references/workflows/gotchas.md +90 -0
  365. package/skills/cloudflare/references/workflows/patterns.md +175 -0
  366. package/skills/cloudflare/references/wrangler/README.md +135 -0
  367. package/skills/cloudflare/references/wrangler/api.md +188 -0
  368. package/skills/cloudflare/references/wrangler/configuration.md +197 -0
  369. package/skills/cloudflare/references/wrangler/gotchas.md +197 -0
  370. package/skills/cloudflare/references/wrangler/patterns.md +209 -0
  371. package/skills/cloudflare/references/zaraz/IMPLEMENTATION_SUMMARY.md +121 -0
  372. package/skills/cloudflare/references/zaraz/README.md +111 -0
  373. package/skills/cloudflare/references/zaraz/api.md +112 -0
  374. package/skills/cloudflare/references/zaraz/configuration.md +90 -0
  375. package/skills/cloudflare/references/zaraz/gotchas.md +81 -0
  376. package/skills/cloudflare/references/zaraz/patterns.md +74 -0
  377. package/skills/cloudflare-email-service/SKILL.md +103 -0
  378. package/skills/cloudflare-email-service/references/cli-and-mcp.md +125 -0
  379. package/skills/cloudflare-email-service/references/deliverability.md +285 -0
  380. package/skills/cloudflare-email-service/references/rest-api.md +184 -0
  381. package/skills/cloudflare-email-service/references/routing.md +199 -0
  382. package/skills/cloudflare-email-service/references/sending.md +252 -0
  383. package/skills/cloudflare-one/SKILL.md +176 -0
  384. package/skills/cloudflare-one-migrations/SKILL.md +110 -0
  385. package/skills/durable-objects/SKILL.md +186 -0
  386. package/skills/durable-objects/references/rules.md +295 -0
  387. package/skills/durable-objects/references/testing.md +264 -0
  388. package/skills/durable-objects/references/workers.md +346 -0
  389. package/skills/sandbox-migrate-to-next/SKILL.md +185 -0
  390. package/skills/sandbox-next/SKILL.md +91 -0
  391. package/skills/sandbox-next/references/api-quick-ref.md +94 -0
  392. package/skills/sandbox-next/references/examples.md +15 -0
  393. package/skills/sandbox-stable/SKILL.md +110 -0
  394. package/skills/turnstile-spin/README.md +51 -0
  395. package/skills/turnstile-spin/SKILL.md +330 -0
  396. package/skills/turnstile-spin/references/astro.md +199 -0
  397. package/skills/turnstile-spin/references/hugo.md +114 -0
  398. package/skills/turnstile-spin/references/nextjs-app.md +261 -0
  399. package/skills/turnstile-spin/references/nextjs-pages.md +82 -0
  400. package/skills/turnstile-spin/references/sveltekit.md +191 -0
  401. package/skills/turnstile-spin/references/vanilla-html.md +157 -0
  402. package/skills/turnstile-spin/scripts/auth-probe.sh +285 -0
  403. package/skills/turnstile-spin/scripts/persist-skill.sh +114 -0
  404. package/skills/turnstile-spin/scripts/validate.sh +137 -0
  405. package/skills/turnstile-spin/scripts/widget-create.sh +121 -0
  406. package/skills/turnstile-spin/tests/validation.md +62 -0
  407. package/skills/workers-best-practices/SKILL.md +127 -0
  408. package/skills/workers-best-practices/references/review.md +174 -0
  409. package/skills/workers-best-practices/references/rules.md +467 -0
  410. package/skills/wrangler/SKILL.md +922 -0
@@ -0,0 +1,223 @@
1
+ # RealtimeKit Patterns
2
+
3
+ ## UI Kit (Minimal Code)
4
+
5
+ ```tsx
6
+ // React
7
+ import { RtkMeeting } from '@cloudflare/realtimekit-react-ui';
8
+ <RtkMeeting authToken="<token>" onLeave={() => console.log('Left')} />
9
+
10
+ // Angular
11
+ @Component({ template: `<rtk-meeting [authToken]="authToken" (rtkLeave)="onLeave($event)"></rtk-meeting>` })
12
+ export class AppComponent { authToken = '<token>'; onLeave(event: unknown) {} }
13
+
14
+ // HTML/Web Components
15
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/realtimekit-ui/realtimekit-ui.esm.js"></script>
16
+ <rtk-meeting id="meeting"></rtk-meeting>
17
+ <script>document.getElementById('meeting').authToken = '<token>';</script>
18
+ ```
19
+
20
+ ## UI Components
21
+
22
+ RealtimeKit provides 133+ pre-built Stencil.js Web Components with framework wrappers:
23
+
24
+ ### Layout Components
25
+ - `<RtkMeeting>` - Full meeting UI (all-in-one)
26
+ - `<RtkHeader>`, `<RtkStage>`, `<RtkControlbar>` - Layout sections
27
+ - `<RtkSidebar>` - Chat/participants sidebar
28
+ - `<RtkGrid>` - Adaptive video grid
29
+
30
+ ### Control Components
31
+ - `<RtkMicToggle>`, `<RtkCameraToggle>` - Media controls
32
+ - `<RtkScreenShareToggle>` - Screen sharing
33
+ - `<RtkLeaveButton>` - Leave meeting
34
+ - `<RtkSettingsModal>` - Device settings
35
+
36
+ ### Grid Variants
37
+ - `<RtkSpotlightGrid>` - Active speaker focus
38
+ - `<RtkAudioGrid>` - Audio-only mode
39
+ - `<RtkPaginatedGrid>` - Paginated layout
40
+
41
+ **See full catalog**: https://docs.realtime.cloudflare.com/ui-kit
42
+
43
+ ## Core SDK Patterns
44
+
45
+ ### Basic Setup
46
+ ```typescript
47
+ import RealtimeKitClient from '@cloudflare/realtimekit';
48
+
49
+ const meeting = new RealtimeKitClient({ authToken, video: true, audio: true });
50
+ meeting.self.on('roomJoined', () => console.log('Joined:', meeting.meta.meetingTitle));
51
+ meeting.participants.joined.on('participantJoined', (p) => console.log(`${p.name} joined`));
52
+ await meeting.join();
53
+ ```
54
+
55
+ ### Video Grid & Device Selection
56
+ ```typescript
57
+ // Video grid
58
+ function VideoGrid({ meeting }) {
59
+ const [participants, setParticipants] = useState([]);
60
+ useEffect(() => {
61
+ const update = () => setParticipants(meeting.participants.joined.toArray());
62
+ meeting.participants.joined.on('participantJoined', update);
63
+ meeting.participants.joined.on('participantLeft', update);
64
+ update();
65
+ return () => { meeting.participants.joined.off('participantJoined', update); meeting.participants.joined.off('participantLeft', update); };
66
+ }, [meeting]);
67
+ return <div style={{ display: 'grid', gridTemplateColumns: 'repeat(auto-fill, minmax(300px, 1fr))' }}>
68
+ {participants.map(p => <VideoTile key={p.id} participant={p} />)}
69
+ </div>;
70
+ }
71
+
72
+ function VideoTile({ participant }) {
73
+ const videoRef = useRef<HTMLVideoElement>(null);
74
+ useEffect(() => {
75
+ if (videoRef.current && participant.videoTrack) videoRef.current.srcObject = new MediaStream([participant.videoTrack]);
76
+ }, [participant.videoTrack]);
77
+ return <div><video ref={videoRef} autoPlay playsInline muted /><div>{participant.name}</div></div>;
78
+ }
79
+
80
+ // Device selection
81
+ const devices = await meeting.self.getAllDevices();
82
+ const switchCamera = (deviceId: string) => {
83
+ const device = devices.find(d => d.deviceId === deviceId);
84
+ if (device) await meeting.self.setDevice(device);
85
+ };
86
+ ```
87
+
88
+ ## React Hooks (Official)
89
+
90
+ ```typescript
91
+ import { useRealtimeKitClient, useRealtimeKitSelector } from '@cloudflare/realtimekit-react-ui';
92
+
93
+ function MyComponent() {
94
+ const [meeting, initMeeting] = useRealtimeKitClient();
95
+ const audioEnabled = useRealtimeKitSelector(m => m.self.audioEnabled);
96
+ const participantCount = useRealtimeKitSelector(m => m.participants.joined.size());
97
+
98
+ useEffect(() => { initMeeting({ authToken: '<token>' }); }, []);
99
+
100
+ return <div>
101
+ <button onClick={() => meeting?.self.enableAudio()}>{audioEnabled ? 'Mute' : 'Unmute'}</button>
102
+ <span>{participantCount} participants</span>
103
+ </div>;
104
+ }
105
+ ```
106
+
107
+ **Benefits:** Automatic re-renders, memoized selectors, type-safe
108
+
109
+ ## Waitlist Handling
110
+
111
+ ```typescript
112
+ // Monitor waitlist
113
+ meeting.participants.waitlisted.on('participantJoined', (participant) => {
114
+ console.log(`${participant.name} is waiting`);
115
+ // Show admin UI to approve/reject
116
+ });
117
+
118
+ // Approve from waitlist (backend only)
119
+ await fetch(
120
+ `https://api.cloudflare.com/client/v4/accounts/${accountId}/realtime/kit/${appId}/meetings/${meetingId}/active-session/waitlist/approve`,
121
+ {
122
+ method: 'POST',
123
+ headers: { 'Authorization': `Bearer ${apiToken}` },
124
+ body: JSON.stringify({ user_ids: [participant.userId] })
125
+ }
126
+ );
127
+
128
+ // Client receives automatic transition when approved
129
+ meeting.self.on('roomJoined', () => console.log('Approved and joined'));
130
+ ```
131
+
132
+ ## Audio-Only Mode
133
+
134
+ ```typescript
135
+ const meeting = new RealtimeKitClient({
136
+ authToken: '<token>',
137
+ video: false, // Disable video
138
+ audio: true,
139
+ mediaConfiguration: {
140
+ audio: {
141
+ echoCancellation: true,
142
+ noiseSuppression: true,
143
+ autoGainControl: true
144
+ }
145
+ }
146
+ });
147
+
148
+ // Use audio grid component
149
+ import { RtkAudioGrid } from '@cloudflare/realtimekit-react-ui';
150
+ <RtkAudioGrid meeting={meeting} />
151
+ ```
152
+
153
+ ## Addon System
154
+
155
+ ```typescript
156
+ // List available addons
157
+ meeting.plugins.all.forEach(plugin => {
158
+ console.log(plugin.id, plugin.name, plugin.active);
159
+ });
160
+
161
+ // Activate collaborative app
162
+ await meeting.plugins.activate('whiteboard-addon-id');
163
+
164
+ // Listen for activations
165
+ meeting.plugins.on('pluginActivated', ({ plugin }) => {
166
+ console.log(`${plugin.name} activated`);
167
+ });
168
+
169
+ // Deactivate
170
+ await meeting.plugins.deactivate();
171
+ ```
172
+
173
+ ## Backend Integration
174
+
175
+ ### Token Generation (Workers)
176
+ ```typescript
177
+ export interface Env { CLOUDFLARE_API_TOKEN: string; CLOUDFLARE_ACCOUNT_ID: string; REALTIMEKIT_APP_ID: string; }
178
+
179
+ export default {
180
+ async fetch(request: Request, env: Env): Promise<Response> {
181
+ const url = new URL(request.url);
182
+
183
+ if (url.pathname === '/api/join-meeting') {
184
+ const { meetingId, userName, presetName } = await request.json();
185
+ const response = await fetch(
186
+ `https://api.cloudflare.com/client/v4/accounts/${env.CLOUDFLARE_ACCOUNT_ID}/realtime/kit/${env.REALTIMEKIT_APP_ID}/meetings/${meetingId}/participants`,
187
+ {
188
+ method: 'POST',
189
+ headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${env.CLOUDFLARE_API_TOKEN}` },
190
+ body: JSON.stringify({ name: userName, preset_name: presetName })
191
+ }
192
+ );
193
+ const data = await response.json();
194
+ return Response.json({ authToken: data.result.authToken });
195
+ }
196
+
197
+ return new Response('Not found', { status: 404 });
198
+ }
199
+ };
200
+ ```
201
+
202
+ ## Best Practices
203
+
204
+ ### Security
205
+ 1. **Never expose API tokens client-side** - Generate participant tokens server-side only
206
+ 2. **Don't reuse participant tokens** - Generate fresh token per session, use refresh endpoint if expired
207
+ 3. **Use custom participant IDs** - Map to your user system for cross-session tracking
208
+
209
+ ### Performance
210
+ 1. **Event-driven updates** - Listen to events, don't poll. Use `toArray()` only when needed
211
+ 2. **Media quality constraints** - Set appropriate resolution/bitrate limits based on network conditions
212
+ 3. **Device management** - Enable `autoSwitchAudioDevice` for better UX, handle device list updates
213
+
214
+ ### Architecture
215
+ 1. **Separate Apps for environments** - staging vs production to prevent data mixing
216
+ 2. **Preset strategy** - Create presets at App level, reuse across meetings
217
+ 3. **Token management** - Backend generates tokens, frontend receives via authenticated endpoint
218
+
219
+ ## In This Reference
220
+ - [README.md](README.md) - Overview, core concepts, quick start
221
+ - [configuration.md](configuration.md) - SDK config, presets, wrangler setup
222
+ - [api.md](api.md) - Client SDK APIs, REST endpoints
223
+ - [gotchas.md](gotchas.md) - Common issues, troubleshooting, limits
@@ -0,0 +1,96 @@
1
+ # Cloudflare Sandbox SDK
2
+
3
+ Secure isolated code execution in containers on Cloudflare's edge. Run untrusted code, manage files, expose services, integrate with AI agents.
4
+
5
+ **Use cases**: AI code execution, interactive dev environments, data analysis, CI/CD, code interpreters, multi-tenant execution.
6
+
7
+ ## Architecture
8
+
9
+ - Each sandbox = Durable Object + Container
10
+ - Persistent across requests (same ID = same sandbox)
11
+ - Isolated filesystem/processes/network
12
+ - Configurable sleep/wake for cost optimization
13
+
14
+ ## Quick Start
15
+
16
+ ```typescript
17
+ import { getSandbox, proxyToSandbox, type Sandbox } from '@cloudflare/sandbox';
18
+ export { Sandbox } from '@cloudflare/sandbox';
19
+
20
+ type Env = { Sandbox: DurableObjectNamespace<Sandbox>; };
21
+
22
+ export default {
23
+ async fetch(request: Request, env: Env): Promise<Response> {
24
+ // CRITICAL: proxyToSandbox MUST be called first for preview URLs
25
+ const proxyResponse = await proxyToSandbox(request, env);
26
+ if (proxyResponse) return proxyResponse;
27
+
28
+ const sandbox = getSandbox(env.Sandbox, 'my-sandbox');
29
+ const result = await sandbox.exec('python3 -c "print(2 + 2)"');
30
+ return Response.json({ output: result.stdout });
31
+ }
32
+ };
33
+ ```
34
+
35
+ **wrangler.jsonc**:
36
+ ```jsonc
37
+ {
38
+ "name": "my-sandbox-worker",
39
+ "main": "src/index.ts",
40
+ "compatibility_date": "2025-01-01", // Use current date for new projects
41
+
42
+ "containers": [{
43
+ "class_name": "Sandbox",
44
+ "image": "./Dockerfile",
45
+ "instance_type": "lite", // lite | standard | heavy
46
+ "max_instances": 5
47
+ }],
48
+
49
+ "durable_objects": {
50
+ "bindings": [{ "class_name": "Sandbox", "name": "Sandbox" }]
51
+ },
52
+
53
+ "migrations": [{
54
+ "tag": "v1",
55
+ "new_sqlite_classes": ["Sandbox"]
56
+ }]
57
+ }
58
+ ```
59
+
60
+ **Dockerfile**:
61
+ ```dockerfile
62
+ FROM docker.io/cloudflare/sandbox:0.7.0
63
+ RUN pip3 install --no-cache-dir pandas numpy matplotlib
64
+ EXPOSE 8080 3000 # Required for wrangler dev
65
+ ```
66
+
67
+ ## Core APIs
68
+
69
+ - `getSandbox(namespace, id, options?)` → Get/create sandbox
70
+ - `sandbox.exec(command, options?)` → Execute command
71
+ - `sandbox.readFile(path)` / `writeFile(path, content)` → File ops
72
+ - `sandbox.startProcess(command, options)` → Background process
73
+ - `sandbox.exposePort(port, options)` → Get preview URL
74
+ - `sandbox.createSession(options)` → Isolated session
75
+ - `sandbox.wsConnect(request, port)` → WebSocket proxy
76
+ - `sandbox.destroy()` → Terminate container
77
+ - `sandbox.mountBucket(bucket, path, options)` → Mount S3 storage
78
+
79
+ ## Critical Rules
80
+
81
+ - ALWAYS call `proxyToSandbox()` first
82
+ - Same ID = reuse sandbox
83
+ - Use `/workspace` for persistent files
84
+ - `normalizeId: true` for preview URLs
85
+ - Retry on `CONTAINER_NOT_READY`
86
+
87
+ ## In This Reference
88
+ - [configuration.md](./configuration.md) - Config, CLI, environment setup
89
+ - [api.md](./api.md) - Programmatic API, testing patterns
90
+ - [patterns.md](./patterns.md) - Common workflows, CI/CD integration
91
+ - [gotchas.md](./gotchas.md) - Issues, limits, best practices
92
+
93
+ ## See Also
94
+ - [durable-objects](../durable-objects/) - Sandbox runs on DO infrastructure
95
+ - [containers](../containers/) - Container runtime fundamentals
96
+ - [workers](../workers/) - Entry point for sandbox requests
@@ -0,0 +1,198 @@
1
+ # API Reference
2
+
3
+ ## Command Execution
4
+
5
+ ```typescript
6
+ // Basic
7
+ const result = await sandbox.exec('python3 script.py');
8
+ // Returns: { stdout, stderr, exitCode, success, duration }
9
+
10
+ // With options
11
+ await sandbox.exec('python3 test.py', {
12
+ cwd: '/workspace/project',
13
+ env: { API_KEY: 'secret' },
14
+ stream: true,
15
+ onOutput: (stream, data) => console.log(data)
16
+ });
17
+ ```
18
+
19
+ ## File Operations
20
+
21
+ ```typescript
22
+ // Read/Write
23
+ const { content } = await sandbox.readFile('/workspace/data.txt');
24
+ await sandbox.writeFile('/workspace/file.txt', 'content'); // Auto-creates dirs
25
+
26
+ // List/Delete
27
+ const files = await sandbox.listFiles('/workspace');
28
+ await sandbox.deleteFile('/workspace/temp.txt');
29
+ await sandbox.deleteFile('/workspace/dir', { recursive: true });
30
+
31
+ // Utils
32
+ await sandbox.mkdir('/workspace/dir', { recursive: true });
33
+ await sandbox.pathExists('/workspace/file.txt');
34
+ ```
35
+
36
+ ## Background Processes
37
+
38
+ ```typescript
39
+ // Start
40
+ const process = await sandbox.startProcess('python3 -m http.server 8080', {
41
+ processId: 'web-server',
42
+ cwd: '/workspace/public',
43
+ env: { PORT: '8080' }
44
+ });
45
+ // Returns: { id, pid, command }
46
+
47
+ // Wait for readiness
48
+ await process.waitForPort(8080); // Wait for port to listen
49
+ await process.waitForLog(/Server running/); // Wait for log pattern
50
+ await process.waitForExit(); // Wait for completion
51
+
52
+ // Management
53
+ const processes = await sandbox.listProcesses();
54
+ const info = await sandbox.getProcess('web-server');
55
+ await sandbox.stopProcess('web-server');
56
+ const logs = await sandbox.getProcessLogs('web-server');
57
+ ```
58
+
59
+ ## Port Exposure
60
+
61
+ ```typescript
62
+ // Expose port
63
+ const { url } = await sandbox.exposePort(8080, {
64
+ name: 'web-app',
65
+ hostname: request.hostname
66
+ });
67
+
68
+ // Management
69
+ await sandbox.isPortExposed(8080);
70
+ await sandbox.getExposedPorts(request.hostname);
71
+ await sandbox.unexposePort(8080);
72
+ ```
73
+
74
+ ## Sessions (Isolated Contexts)
75
+
76
+ Each session maintains own shell state, env vars, cwd, process namespace.
77
+
78
+ ```typescript
79
+ // Create with context
80
+ const session = await sandbox.createSession({
81
+ id: 'user-123',
82
+ cwd: '/workspace/user123',
83
+ env: { USER_ID: '123' }
84
+ });
85
+
86
+ // Use (full sandbox API)
87
+ await session.exec('echo $USER_ID');
88
+ await session.writeFile('config.txt', 'data');
89
+
90
+ // Manage
91
+ await sandbox.getSession('user-123');
92
+ await sandbox.deleteSession('user-123');
93
+ ```
94
+
95
+ ## Code Interpreter
96
+
97
+ ```typescript
98
+ // Create context with variables
99
+ const ctx = await sandbox.createCodeContext({
100
+ language: 'python',
101
+ variables: {
102
+ data: [1, 2, 3, 4, 5],
103
+ config: { verbose: true }
104
+ }
105
+ });
106
+
107
+ // Execute code with rich outputs
108
+ const result = await sandbox.runCode(`
109
+ import matplotlib.pyplot as plt
110
+ plt.plot(data, [x**2 for x in data])
111
+ plt.savefig('plot.png')
112
+ print(f"Processed {len(data)} points")
113
+ `, { context: ctx });
114
+ // Returns: ExecutionResult { code, logs, results: RichOutput[], error, executionCount }
115
+
116
+ // Context persists variables across runs
117
+ const result2 = await sandbox.runCode('print(data[0])', { context: ctx }); // Still has 'data'
118
+ ```
119
+
120
+ ## WebSocket Connections
121
+
122
+ ```typescript
123
+ // Proxy WebSocket to sandbox service
124
+ export default {
125
+ async fetch(request: Request, env: Env): Promise<Response> {
126
+ const proxyResponse = await proxyToSandbox(request, env);
127
+ if (proxyResponse) return proxyResponse;
128
+
129
+ if (request.headers.get('Upgrade')?.toLowerCase() === 'websocket') {
130
+ const sandbox = getSandbox(env.Sandbox, 'realtime');
131
+ return await sandbox.wsConnect(request, 8080);
132
+ }
133
+
134
+ return new Response('Not a WebSocket request', { status: 400 });
135
+ }
136
+ };
137
+ ```
138
+
139
+ ## Bucket Mounting (S3 Storage)
140
+
141
+ ```typescript
142
+ // Mount R2 bucket (production only, not wrangler dev)
143
+ await sandbox.mountBucket(env.DATA_BUCKET, '/data', {
144
+ readOnly: false
145
+ });
146
+
147
+ // Access files in mounted bucket
148
+ await sandbox.exec('ls /data');
149
+ await sandbox.writeFile('/data/output.txt', 'result');
150
+
151
+ // Unmount
152
+ await sandbox.unmountBucket('/data');
153
+ ```
154
+
155
+ **Note**: Bucket mounting only works in production. Mounted buckets are sandbox-scoped (visible to all sessions in that sandbox).
156
+
157
+ ## Lifecycle Management
158
+
159
+ ```typescript
160
+ // Terminate container immediately
161
+ await sandbox.destroy();
162
+
163
+ // REQUIRED when using keepAlive: true
164
+ const sandbox = getSandbox(env.Sandbox, 'temp', { keepAlive: true });
165
+ try {
166
+ await sandbox.writeFile('/tmp/code.py', code);
167
+ const result = await sandbox.exec('python /tmp/code.py');
168
+ return result.stdout;
169
+ } finally {
170
+ await sandbox.destroy(); // Free resources
171
+ }
172
+ ```
173
+
174
+ Deletes: files, processes, sessions, network connections, exposed ports.
175
+
176
+ ## Error Handling
177
+
178
+ ```typescript
179
+ // Command errors
180
+ const result = await sandbox.exec('python3 invalid.py');
181
+ if (!result.success) {
182
+ console.error('Exit code:', result.exitCode);
183
+ console.error('Stderr:', result.stderr);
184
+ }
185
+
186
+ // SDK errors
187
+ try {
188
+ await sandbox.readFile('/nonexistent');
189
+ } catch (error) {
190
+ if (error.code === 'FILE_NOT_FOUND') { /* ... */ }
191
+ else if (error.code === 'CONTAINER_NOT_READY') { /* retry */ }
192
+ else if (error.code === 'TIMEOUT') { /* ... */ }
193
+ }
194
+
195
+ // Retry pattern (see gotchas.md for full implementation)
196
+ ```
197
+
198
+
@@ -0,0 +1,143 @@
1
+ # Configuration
2
+
3
+ ## getSandbox Options
4
+
5
+ ```typescript
6
+ const sandbox = getSandbox(env.Sandbox, 'sandbox-id', {
7
+ normalizeId: true, // lowercase ID (required for preview URLs)
8
+ sleepAfter: '10m', // sleep after inactivity: '5m', '1h', '2d' (default: '10m')
9
+ keepAlive: false, // false = auto-timeout, true = never sleep
10
+
11
+ containerTimeouts: {
12
+ instanceGetTimeoutMS: 30000, // 30s for provisioning (default: 30000)
13
+ portReadyTimeoutMS: 90000 // 90s for container startup (default: 90000)
14
+ }
15
+ });
16
+ ```
17
+
18
+ **Sleep Config**:
19
+ - `sleepAfter`: Duration string (e.g., '5m', '10m', '1h') - default: '10m'
20
+ - `keepAlive: false`: Auto-sleep (default, cost-optimized)
21
+ - `keepAlive: true`: Never sleep (higher cost, requires explicit `destroy()`)
22
+ - Sleeping sandboxes wake automatically (cold start)
23
+
24
+ ## Instance Types
25
+
26
+ wrangler.jsonc `instance_type`:
27
+ - `lite`: 256MB RAM, 0.5 vCPU (default)
28
+ - `standard`: 512MB RAM, 1 vCPU
29
+ - `heavy`: 1GB RAM, 2 vCPU
30
+
31
+ ## Dockerfile Patterns
32
+
33
+ **Basic**:
34
+ ```dockerfile
35
+ FROM docker.io/cloudflare/sandbox:0.7.0
36
+ RUN pip3 install --no-cache-dir pandas numpy
37
+ EXPOSE 8080 # Required for wrangler dev
38
+ ```
39
+
40
+ **Scientific**:
41
+ ```dockerfile
42
+ FROM docker.io/cloudflare/sandbox:0.7.0
43
+ RUN pip3 install --no-cache-dir \
44
+ jupyter-server ipykernel matplotlib \
45
+ pandas seaborn plotly scipy scikit-learn
46
+ ```
47
+
48
+ **Node.js**:
49
+ ```dockerfile
50
+ FROM docker.io/cloudflare/sandbox:0.7.0
51
+ RUN npm install -g typescript ts-node
52
+ ```
53
+
54
+ **CRITICAL**: `EXPOSE` required for `wrangler dev` port access. Production auto-exposes all ports.
55
+
56
+ ## CLI Commands
57
+
58
+ ```bash
59
+ # Dev
60
+ wrangler dev # Start local dev server
61
+ wrangler deploy # Deploy to production
62
+ wrangler tail # Monitor logs
63
+ wrangler containers list # Check container status
64
+ wrangler secret put KEY # Set secret
65
+ ```
66
+
67
+ ## Environment & Secrets
68
+
69
+ **wrangler.jsonc**:
70
+ ```jsonc
71
+ {
72
+ "vars": {
73
+ "ENVIRONMENT": "production",
74
+ "API_URL": "https://api.example.com"
75
+ },
76
+ "r2_buckets": [{
77
+ "binding": "DATA_BUCKET",
78
+ "bucket_name": "my-data-bucket"
79
+ }]
80
+ }
81
+ ```
82
+
83
+ **Usage**:
84
+ ```typescript
85
+ const token = env.GITHUB_TOKEN; // From wrangler secret
86
+ await sandbox.exec('git clone ...', {
87
+ env: { GIT_TOKEN: token }
88
+ });
89
+ ```
90
+
91
+ ## Preview URL Setup
92
+
93
+ **Prerequisites**:
94
+ - Custom domain with wildcard DNS: `*.yourdomain.com → worker.yourdomain.com`
95
+ - `.workers.dev` domains NOT supported
96
+ - `normalizeId: true` in getSandbox
97
+ - `proxyToSandbox()` called first in fetch handler
98
+
99
+ ## Cron Triggers (Pre-warming)
100
+
101
+ ```jsonc
102
+ {
103
+ "triggers": {
104
+ "crons": ["*/5 * * * *"] // Every 5 minutes
105
+ }
106
+ }
107
+ ```
108
+
109
+ ```typescript
110
+ export default {
111
+ async scheduled(event: ScheduledEvent, env: Env) {
112
+ const sandbox = getSandbox(env.Sandbox, 'main');
113
+ await sandbox.exec('echo "keepalive"'); // Wake sandbox
114
+ }
115
+ };
116
+ ```
117
+
118
+ ## Logging Configuration
119
+
120
+ **wrangler.jsonc**:
121
+ ```jsonc
122
+ {
123
+ "vars": {
124
+ "SANDBOX_LOG_LEVEL": "debug", // debug | info | warn | error (default: info)
125
+ "SANDBOX_LOG_FORMAT": "pretty" // json | pretty (default: json)
126
+ }
127
+ }
128
+ ```
129
+
130
+ **Dev**: `debug` + `pretty`. **Production**: `info`/`warn` + `json`.
131
+
132
+ ## Timeout Environment Overrides
133
+
134
+ Override default timeouts via environment variables:
135
+
136
+ ```jsonc
137
+ {
138
+ "vars": {
139
+ "SANDBOX_INSTANCE_TIMEOUT_MS": "60000", // Override instanceGetTimeoutMS
140
+ "SANDBOX_PORT_TIMEOUT_MS": "120000" // Override portReadyTimeoutMS
141
+ }
142
+ }
143
+ ```