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,63 @@
1
+ # Server-Driven Messages (Trigger Patterns)
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/trigger-patterns/ for complete documentation.
4
+
5
+ Patterns for server-initiated LLM turns in `AIChatAgent` — from schedules, webhooks, email, or other agents.
6
+
7
+ ## `saveMessages` — Trigger an LLM Turn
8
+
9
+ ```typescript
10
+ await this.saveMessages((existingMessages) => [
11
+ ...existingMessages,
12
+ { role: "user", content: "Check for new notifications" }
13
+ ]);
14
+ ```
15
+
16
+ `saveMessages` persists the messages AND triggers `onChatMessage`.
17
+
18
+ ## `persistMessages` — Save Without Triggering
19
+
20
+ ```typescript
21
+ await this.persistMessages([
22
+ ...this.messages,
23
+ { role: "assistant", content: "System note: checked at " + new Date() }
24
+ ]);
25
+ ```
26
+
27
+ ## `waitUntilStable`
28
+
29
+ **Always call before `saveMessages` from non-chat contexts** (schedules, webhooks, email):
30
+
31
+ ```typescript
32
+ async checkNotifications(payload: unknown, schedule: Schedule) {
33
+ await this.waitUntilStable({ timeout: 30_000 });
34
+ await this.saveMessages((msgs) => [
35
+ ...msgs,
36
+ { role: "user", content: "Run scheduled notification check" }
37
+ ]);
38
+ }
39
+ ```
40
+
41
+ ## `onChatResponse`
42
+
43
+ Runs after each LLM turn completes. Use for chaining:
44
+
45
+ ```typescript
46
+ async onChatResponse(result: ChatResponseResult) {
47
+ if (result.type === "finish" && needsFollowUp(result)) {
48
+ await this.saveMessages((msgs) => [
49
+ ...msgs,
50
+ { role: "user", content: "Continue with next step" }
51
+ ]);
52
+ }
53
+ }
54
+ ```
55
+
56
+ ## Client Status
57
+
58
+ ```tsx
59
+ const { isStreaming, isServerStreaming } = useAgentChat({ agent });
60
+ ```
61
+
62
+ - `isStreaming` — true during any streaming (user-initiated or server-initiated)
63
+ - `isServerStreaming` — true only during server-initiated streams
@@ -0,0 +1,171 @@
1
+ # State & Scheduling
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/store-and-sync-state/ and https://developers.cloudflare.com/agents/api-reference/schedule-tasks/ for complete documentation.
4
+
5
+ ## State Management
6
+
7
+ State persists to SQLite and broadcasts to connected clients automatically.
8
+
9
+ ### Define Typed State
10
+
11
+ ```typescript
12
+ type State = {
13
+ count: number;
14
+ items: string[];
15
+ };
16
+
17
+ export class MyAgent extends Agent<Env, State> {
18
+ initialState: State = { count: 0, items: [] };
19
+ }
20
+ ```
21
+
22
+ ### Read and Update
23
+
24
+ ```typescript
25
+ // Read (lazy-loaded from SQLite)
26
+ const count = this.state.count;
27
+
28
+ // Write (sync, persists, broadcasts)
29
+ this.setState({ count: this.state.count + 1 });
30
+ ```
31
+
32
+ ### Validation Hook
33
+
34
+ `validateStateChange()` runs synchronously before state persists. Throw to reject the update.
35
+
36
+ ```typescript
37
+ validateStateChange(nextState: State, source: Connection | "server") {
38
+ if (nextState.count < 0) {
39
+ throw new Error("Count cannot be negative");
40
+ }
41
+ }
42
+ ```
43
+
44
+ ### Execution Order
45
+
46
+ 1. `validateStateChange(nextState, source)` - sync, gating
47
+ 2. State persisted to SQLite
48
+ 3. State broadcast to connected clients
49
+ 4. `onStateUpdate(nextState, source)` - async via `ctx.waitUntil`, non-gating
50
+
51
+ ### Client-Side Sync (React)
52
+
53
+ ```tsx
54
+ import { useAgent } from "agents/react";
55
+
56
+ function App() {
57
+ const [state, setLocalState] = useState<State>({ count: 0 });
58
+
59
+ const agent = useAgent<State>({
60
+ agent: "MyAgent",
61
+ name: "instance-1",
62
+ onStateUpdate: (newState) => setLocalState(newState)
63
+ });
64
+
65
+ return <button onClick={() => agent.setState({ count: state.count + 1 })}>
66
+ Count: {state.count}
67
+ </button>;
68
+ }
69
+ ```
70
+
71
+ ## SQL API
72
+
73
+ Direct SQLite access for custom queries:
74
+
75
+ ```typescript
76
+ // Create table
77
+ this.sql`
78
+ CREATE TABLE IF NOT EXISTS items (
79
+ id TEXT PRIMARY KEY,
80
+ name TEXT,
81
+ created_at INTEGER DEFAULT (unixepoch())
82
+ )
83
+ `;
84
+
85
+ // Insert
86
+ this.sql`INSERT INTO items (id, name) VALUES (${id}, ${name})`;
87
+
88
+ // Query with types
89
+ const items = this.sql<{ id: string; name: string }>`
90
+ SELECT * FROM items WHERE name LIKE ${`%${search}%`}
91
+ `;
92
+ ```
93
+
94
+ ## Scheduling
95
+
96
+ ### Schedule Types
97
+
98
+ | Mode | Syntax | Use Case |
99
+ |------|--------|----------|
100
+ | Delay | `this.schedule(60, ...)` | Run in 60 seconds |
101
+ | Date | `this.schedule(new Date(...), ...)` | Run at specific time |
102
+ | Cron | `this.schedule("0 8 * * *", ...)` | Recurring schedule |
103
+ | Interval | `this.scheduleEvery(30, ...)` | Fixed interval (every 30s) |
104
+
105
+ ### Examples
106
+
107
+ ```typescript
108
+ // Delay (seconds)
109
+ await this.schedule(60, "checkStatus", { id: "abc123" });
110
+
111
+ // Specific date
112
+ await this.schedule(new Date("2025-12-25T00:00:00Z"), "sendGreeting", { to: "user" });
113
+
114
+ // Cron (recurring)
115
+ await this.schedule("0 9 * * 1-5", "weekdayReport", {});
116
+
117
+ // Fixed interval (every 30 seconds, overlap prevention built-in)
118
+ await this.scheduleEvery(30, "pollUpdates");
119
+ await this.scheduleEvery(300, "syncData", { source: "api" });
120
+ ```
121
+
122
+ ### Handler
123
+
124
+ ```typescript
125
+ async sendGreeting(payload: { to: string }, schedule: Schedule) {
126
+ console.log(`Sending greeting to ${payload.to}`);
127
+ // Cron schedules auto-reschedule; one-time schedules are deleted
128
+ }
129
+ ```
130
+
131
+ ### Manage Schedules
132
+
133
+ ```typescript
134
+ const schedules = this.getSchedules();
135
+ const crons = this.getSchedules({ type: "cron" });
136
+ await this.cancelSchedule(schedule.id);
137
+ ```
138
+
139
+ ### Retry on Schedules
140
+
141
+ ```typescript
142
+ await this.schedule(60, "task", payload, { retry: { maxAttempts: 3 } });
143
+ await this.scheduleEvery(30, "poll", undefined, { retry: { maxAttempts: 2 } });
144
+ ```
145
+
146
+ ## Lifecycle Callbacks
147
+
148
+ ```typescript
149
+ export class MyAgent extends Agent<Env, State> {
150
+ async onStart() {
151
+ // Agent started or woke from hibernation
152
+ }
153
+
154
+ onConnect(conn: Connection, ctx: ConnectionContext) {
155
+ // WebSocket connected
156
+ }
157
+
158
+ onMessage(conn: Connection, message: WSMessage) {
159
+ // WebSocket message (non-RPC)
160
+ }
161
+
162
+ onStateUpdate(state: State, source: Connection | "server") {
163
+ // State changed (async, non-blocking)
164
+ }
165
+
166
+ onError(error: unknown) {
167
+ // Error handler
168
+ throw error; // Re-throw to propagate
169
+ }
170
+ }
171
+ ```
@@ -0,0 +1,198 @@
1
+ # Streaming Chat with AIChatAgent
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/chat-agents/ for complete documentation.
4
+
5
+ `AIChatAgent` from `@cloudflare/ai-chat` provides streaming chat with automatic message persistence and resumable streams.
6
+
7
+ ## Basic Chat Agent
8
+
9
+ ```typescript
10
+ import { AIChatAgent } from "@cloudflare/ai-chat";
11
+ import { streamText, convertToModelMessages } from "ai";
12
+ import { openai } from "@ai-sdk/openai";
13
+
14
+ export class Chat extends AIChatAgent<Env> {
15
+ async onChatMessage(onFinish, options) {
16
+ const result = streamText({
17
+ model: openai("gpt-4o"),
18
+ system: "You are a helpful assistant.",
19
+ messages: await convertToModelMessages(this.messages),
20
+ abortSignal: options?.abortSignal,
21
+ onFinish
22
+ });
23
+ return result.toUIMessageStreamResponse();
24
+ }
25
+ }
26
+ ```
27
+
28
+ **Important:** Always pass `abortSignal` and `onFinish` — they enable proper cleanup and message persistence.
29
+
30
+ ## With Tools
31
+
32
+ ```typescript
33
+ import { tool } from "ai";
34
+ import { z } from "zod";
35
+
36
+ const tools = {
37
+ getWeather: tool({
38
+ description: "Get weather for a location",
39
+ parameters: z.object({ location: z.string() }),
40
+ execute: async ({ location }) => `Weather in ${location}: 72°F, sunny`
41
+ })
42
+ };
43
+
44
+ export class Chat extends AIChatAgent<Env> {
45
+ async onChatMessage(onFinish, options) {
46
+ const result = streamText({
47
+ model: openai("gpt-4o"),
48
+ messages: await convertToModelMessages(this.messages),
49
+ tools,
50
+ abortSignal: options?.abortSignal,
51
+ onFinish
52
+ });
53
+ return result.toUIMessageStreamResponse();
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## With Workers AI (no API keys)
59
+
60
+ ```typescript
61
+ import { createWorkersAI } from "workers-ai-provider";
62
+
63
+ export class Chat extends AIChatAgent<Env> {
64
+ async onChatMessage(onFinish, options) {
65
+ const workersai = createWorkersAI({ binding: this.env.AI });
66
+ const result = streamText({
67
+ model: workersai("@cf/meta/llama-4-scout-17b-16e-instruct"),
68
+ messages: await convertToModelMessages(this.messages),
69
+ abortSignal: options?.abortSignal,
70
+ onFinish
71
+ });
72
+ return result.toUIMessageStreamResponse();
73
+ }
74
+ }
75
+ ```
76
+
77
+ ## Custom UI Message Stream
78
+
79
+ For more control, use `createUIMessageStream`:
80
+
81
+ ```typescript
82
+ import { createUIMessageStream, createUIMessageStreamResponse } from "ai";
83
+
84
+ export class Chat extends AIChatAgent<Env> {
85
+ async onChatMessage(onFinish) {
86
+ const stream = createUIMessageStream({
87
+ execute: async ({ writer }) => {
88
+ const result = streamText({
89
+ model: openai("gpt-4o"),
90
+ messages: await convertToModelMessages(this.messages),
91
+ onFinish
92
+ });
93
+ writer.merge(result.toUIMessageStream());
94
+ }
95
+ });
96
+ return createUIMessageStreamResponse({ stream });
97
+ }
98
+ }
99
+ ```
100
+
101
+ ## Resumable Streaming
102
+
103
+ Streams automatically resume if client disconnects and reconnects:
104
+
105
+ 1. Chunks buffered to SQLite during streaming
106
+ 2. On reconnect, buffered chunks sent immediately
107
+ 3. Live streaming continues from where it left off
108
+
109
+ **Enabled by default.** To disable:
110
+
111
+ ```tsx
112
+ const { messages } = useAgentChat({ agent, resume: false });
113
+ ```
114
+
115
+ ## React Client
116
+
117
+ ```tsx
118
+ import { useAgent } from "agents/react";
119
+ import { useAgentChat } from "@cloudflare/ai-chat/react";
120
+
121
+ function ChatUI() {
122
+ const agent = useAgent({
123
+ agent: "Chat",
124
+ name: "my-chat-session"
125
+ });
126
+
127
+ const {
128
+ messages,
129
+ input,
130
+ handleInputChange,
131
+ handleSubmit,
132
+ status
133
+ } = useAgentChat({ agent });
134
+
135
+ return (
136
+ <div>
137
+ {messages.map((m) => (
138
+ <div key={m.id}>
139
+ <strong>{m.role}:</strong> {m.content}
140
+ </div>
141
+ ))}
142
+
143
+ <form onSubmit={handleSubmit}>
144
+ <input
145
+ value={input}
146
+ onChange={handleInputChange}
147
+ disabled={status === "streaming"}
148
+ />
149
+ <button type="submit">Send</button>
150
+ </form>
151
+ </div>
152
+ );
153
+ }
154
+ ```
155
+
156
+ ## Streaming RPC Methods
157
+
158
+ For non-chat streaming, use `@callable({ streaming: true })`:
159
+
160
+ ```typescript
161
+ import { Agent, callable, StreamingResponse } from "agents";
162
+
163
+ export class MyAgent extends Agent<Env> {
164
+ @callable({ streaming: true })
165
+ async streamData(stream: StreamingResponse, query: string) {
166
+ for (let i = 0; i < 10; i++) {
167
+ stream.send(`Result ${i}: ${query}`);
168
+ await sleep(100);
169
+ }
170
+ stream.close();
171
+ }
172
+ }
173
+ ```
174
+
175
+ Client receives streamed messages via WebSocket RPC.
176
+
177
+ ## Key Properties
178
+
179
+ | Property | Purpose |
180
+ |----------|---------|
181
+ | `this.messages` | All persisted messages |
182
+ | `maxPersistedMessages` | Limit stored messages (prune oldest) |
183
+ | `messageConcurrency` | `"queue"` (default), `"latest"`, `"merge"`, `"drop"` |
184
+ | `chatRecovery` | `"persist"` (default) or `"continue"` on reconnect |
185
+ | `waitForMcpConnections` | Wait for MCP servers before first turn |
186
+
187
+ ## Status Values
188
+
189
+ `useAgentChat` status:
190
+
191
+ | Status | Meaning |
192
+ |--------|---------|
193
+ | `ready` | Idle, ready for input |
194
+ | `streaming` | Response streaming |
195
+ | `submitted` | Request sent, waiting |
196
+ | `error` | Error occurred |
197
+
198
+ Also: `isStreaming`, `isServerStreaming` for distinguishing user vs server-initiated streams.
@@ -0,0 +1,112 @@
1
+ # Think (Experimental)
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/think/ for complete documentation.
4
+
5
+ `@cloudflare/think` — a higher-level chat agent class that handles the `streamText` loop, tool execution, and message persistence for you. You provide `getModel()` and `getSystemPrompt()`; Think handles the rest.
6
+
7
+ ```bash
8
+ npm install @cloudflare/think
9
+ ```
10
+
11
+ ## Minimal Agent
12
+
13
+ ```typescript
14
+ import { Think } from "@cloudflare/think";
15
+ import { createWorkersAI } from "workers-ai-provider";
16
+ import { routeAgentRequest } from "agents";
17
+
18
+ export class MyAgent extends Think<Env> {
19
+ getModel() {
20
+ return createWorkersAI({ binding: this.env.AI })("@cf/meta/llama-4-scout-17b-16e-instruct");
21
+ }
22
+
23
+ getSystemPrompt() {
24
+ return "You are a helpful assistant.";
25
+ }
26
+ }
27
+
28
+ export default {
29
+ fetch: (req, env) => routeAgentRequest(req, env)
30
+ };
31
+ ```
32
+
33
+ ## Wrangler Config
34
+
35
+ ```jsonc
36
+ {
37
+ "compatibility_flags": ["nodejs_compat", "experimental"],
38
+ "durable_objects": {
39
+ "bindings": [{ "name": "MyAgent", "class_name": "MyAgent" }]
40
+ },
41
+ "migrations": [{ "tag": "v1", "new_sqlite_classes": ["MyAgent"] }],
42
+ "ai": { "binding": "AI" }
43
+ }
44
+ ```
45
+
46
+ **Note:** Think requires the `experimental` compatibility flag.
47
+
48
+ ## Custom Tools
49
+
50
+ ```typescript
51
+ import { tool } from "ai";
52
+ import { z } from "zod";
53
+
54
+ export class MyAgent extends Think<Env> {
55
+ getTools() {
56
+ return {
57
+ getWeather: tool({
58
+ description: "Get weather",
59
+ parameters: z.object({ city: z.string() }),
60
+ execute: async ({ city }) => `72°F in ${city}`
61
+ })
62
+ };
63
+ }
64
+ }
65
+ ```
66
+
67
+ ## Lifecycle Hooks
68
+
69
+ | Hook | When | Use for |
70
+ |------|------|---------|
71
+ | `configureSession()` | Agent starts | Set up memory, context providers |
72
+ | `beforeTurn(ctx)` | Before each LLM call | Per-turn model/tools/system prompt; return `TurnConfig` |
73
+ | `onChunk(chunk)` | Each streaming chunk | Progress tracking |
74
+ | `onChatResponse(result)` | After LLM turn completes | Chaining, follow-up `saveMessages` |
75
+ | `onChatError(error)` | On LLM error | Error handling |
76
+
77
+ ```typescript
78
+ async beforeTurn(ctx: TurnContext): Promise<TurnConfig> {
79
+ if (ctx.continuation) {
80
+ return { model: cheaperModel };
81
+ }
82
+ return {};
83
+ }
84
+ ```
85
+
86
+ ## Sub-Agents
87
+
88
+ ```typescript
89
+ const child = this.subAgent(SpecialistAgent, "specialist-1");
90
+ await child.chat("Analyze this data...", (chunk) => {
91
+ // stream callback
92
+ });
93
+ ```
94
+
95
+ ## Client
96
+
97
+ Same React hooks as `AIChatAgent`:
98
+
99
+ ```tsx
100
+ const agent = useAgent({ agent: "MyAgent", name: "session-1" });
101
+ const { messages, input, handleInputChange, handleSubmit } = useAgentChat({ agent });
102
+ ```
103
+
104
+ ## Think vs AIChatAgent
105
+
106
+ | | Think | AIChatAgent |
107
+ |-|-------|-------------|
108
+ | `streamText` loop | Built-in | You write it |
109
+ | Tool execution | Automatic | You wire it |
110
+ | Customization | Override hooks | Full control in `onChatMessage` |
111
+ | Built-in tools | Workspace, execute, browser | None |
112
+ | Compatibility flag | Requires `experimental` | Standard |
@@ -0,0 +1,68 @@
1
+ # Voice (Experimental)
2
+
3
+ Fetch https://developers.cloudflare.com/agents/api-reference/voice/ for complete documentation.
4
+
5
+ `@cloudflare/voice` — real-time speech-to-text and text-to-speech for agents. Audio streams over WebSocket.
6
+
7
+ ```bash
8
+ npm install @cloudflare/voice
9
+ ```
10
+
11
+ ## Server
12
+
13
+ ```typescript
14
+ import { Agent } from "agents";
15
+ import { withVoice, WorkersAITTS, WorkersAINova3STT } from "@cloudflare/voice";
16
+
17
+ export class VoiceAgent extends withVoice(Agent)<Env> {
18
+ transcriber = new WorkersAINova3STT(this);
19
+ tts = new WorkersAITTS(this);
20
+
21
+ async onTurn(transcript: string, context: VoiceTurnContext) {
22
+ const result = streamText({
23
+ model: createWorkersAI({ binding: this.env.AI })("@cf/meta/llama-4-scout-17b-16e-instruct"),
24
+ messages: [
25
+ { role: "system", content: "You are a voice assistant." },
26
+ ...context.conversationHistory,
27
+ { role: "user", content: transcript }
28
+ ]
29
+ });
30
+
31
+ for await (const chunk of result.textStream) {
32
+ if (context.signal.aborted) break;
33
+ context.speak(chunk);
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ ## Lifecycle Hooks
40
+
41
+ | Hook | Purpose |
42
+ |------|---------|
43
+ | `onTurn(transcript, ctx)` | Handle transcribed speech (required) |
44
+ | `beforeCallStart(conn)` | Auth/validation before call starts |
45
+ | `onCallStart(conn)` | Call connected |
46
+ | `onCallEnd(conn)` | Call disconnected |
47
+ | `onInterrupt()` | User interrupted agent speech |
48
+
49
+ ## Client (React)
50
+
51
+ ```tsx
52
+ import { useVoiceAgent } from "@cloudflare/voice/react";
53
+
54
+ function VoiceUI() {
55
+ const { isConnected, isSpeaking, connect, disconnect } = useVoiceAgent({
56
+ agent: "VoiceAgent",
57
+ name: "session-1"
58
+ });
59
+
60
+ return <button onClick={isConnected ? disconnect : connect}>
61
+ {isConnected ? "End Call" : "Start Call"}
62
+ </button>;
63
+ }
64
+ ```
65
+
66
+ ## STT/TTS Providers
67
+
68
+ Workers AI (default), Deepgram, ElevenLabs — install the provider package and swap the `transcriber`/`tts` properties.
@@ -0,0 +1,86 @@
1
+ # Webhooks & Push Notifications
2
+
3
+ ## Webhooks
4
+
5
+ Fetch https://developers.cloudflare.com/agents/api-reference/webhooks/ for complete documentation.
6
+
7
+ Route external webhooks to agent instances via `onRequest`:
8
+
9
+ ```typescript
10
+ export default {
11
+ async fetch(req: Request, env: Env) {
12
+ const url = new URL(req.url);
13
+ if (url.pathname.startsWith("/webhooks/")) {
14
+ const entityId = url.pathname.split("/")[2];
15
+ const agent = getAgentByName(env.MyAgent, entityId);
16
+ return agent.fetch(req);
17
+ }
18
+ return routeAgentRequest(req, env);
19
+ }
20
+ };
21
+ ```
22
+
23
+ In the agent:
24
+
25
+ ```typescript
26
+ export class MyAgent extends Agent<Env, State> {
27
+ async onRequest(request: Request) {
28
+ const signature = request.headers.get("X-Signature");
29
+ if (!verifySignature(signature, await request.text(), this.env.WEBHOOK_SECRET)) {
30
+ return new Response("Unauthorized", { status: 401 });
31
+ }
32
+ const payload = JSON.parse(await request.text());
33
+ this.queue("processWebhook", payload);
34
+ return new Response("OK", { status: 202 });
35
+ }
36
+ }
37
+ ```
38
+
39
+ **Tips:** Respond quickly (200/202), verify signatures, deduplicate with stored event IDs, use `queue()` for async processing.
40
+
41
+ ## Push Notifications
42
+
43
+ Fetch https://developers.cloudflare.com/agents/api-reference/push-notifications/ for complete documentation.
44
+
45
+ Web Push via VAPID from agents. Store subscriptions in agent state, send via `web-push`.
46
+
47
+ ```bash
48
+ npm install web-push
49
+ ```
50
+
51
+ ```typescript
52
+ import webpush from "web-push";
53
+
54
+ export class NotifyAgent extends Agent<Env, State> {
55
+ @callable()
56
+ async subscribe(subscription: PushSubscription) {
57
+ this.setState({
58
+ ...this.state,
59
+ subscriptions: [...this.state.subscriptions, subscription]
60
+ });
61
+ }
62
+
63
+ async sendReminder(payload: { message: string }, schedule: Schedule) {
64
+ for (const sub of this.state.subscriptions) {
65
+ try {
66
+ await webpush.sendNotification(sub, JSON.stringify({
67
+ title: "Reminder",
68
+ body: payload.message
69
+ }), {
70
+ vapidDetails: {
71
+ subject: "mailto:you@example.com",
72
+ publicKey: this.env.VAPID_PUBLIC_KEY,
73
+ privateKey: this.env.VAPID_PRIVATE_KEY
74
+ }
75
+ });
76
+ } catch (err) {
77
+ if (err.statusCode === 404 || err.statusCode === 410) {
78
+ // Remove expired subscription
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ ```
85
+
86
+ VAPID keys: generate with `npx web-push generate-vapid-keys`, store as secrets.