void 0.21.9 → 0.23.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 (293) hide show
  1. package/README.md +5 -1
  2. package/dist/{account-cmd-DZZGK80W.mjs → account-cmd-C84Ee8cO.mjs} +5 -5
  3. package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
  4. package/dist/application-routing-B7QEjqSR.mjs +27 -0
  5. package/dist/{auth-CZuiVsFh.mjs → auth-CCjt0hcq.mjs} +1 -1
  6. package/dist/{auth-DLNN0D3Z.mjs → auth-CSkdO2Bb.mjs} +4 -47
  7. package/dist/{auth-link-B_CeugBw.mjs → auth-link-CioEg6uY.mjs} +5 -5
  8. package/dist/{auth-router-BgEFRuvZ.mjs → auth-router-BsR981d4.mjs} +5 -5
  9. package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
  10. package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-LzvNJORH.mjs} +19 -7
  11. package/dist/{cache-7_UeZdTk.mjs → cache-C4MvnrMH.mjs} +4 -4
  12. package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-abUxpP2n.mjs} +4 -4
  13. package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BPqOT964.mjs} +141 -63
  14. package/dist/cf-build-output-_0HNWysu.mjs +2 -0
  15. package/dist/cli/cli.mjs +114 -460
  16. package/dist/cli/cloudflare-operation-process.mjs +1103 -0
  17. package/dist/cli/env-schema-probe.d.mts +2 -1
  18. package/dist/cli/env-schema-probe.mjs +3 -3
  19. package/dist/client-Cu7jWiF1.mjs +2 -0
  20. package/dist/{client-QTl6ko_D.mjs → client-RV8NVeB8.mjs} +165 -21
  21. package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -43
  22. package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BcrVyTmJ.mjs} +9 -10
  23. package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
  24. package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-B8uPZ4nx.mjs} +4 -4
  25. package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-AiWashgg.mjs} +1 -1
  26. package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-fxHb-byx.mjs} +118 -203
  27. package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
  28. package/dist/{config-CF69HgXc.d.mts → config-BMHb8RCj.d.mts} +2 -2
  29. package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
  30. package/dist/config-C_XRIPx2.mjs +89 -0
  31. package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
  32. package/dist/config-entry.d.mts +1 -1
  33. package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
  34. package/dist/{connect-BsUSRzln.mjs → connect-Bd4kJd9U.mjs} +6 -6
  35. package/dist/{create-project-BniEV0OW.mjs → create-project-Boczwj5r.mjs} +1 -1
  36. package/dist/{create-project-DBfFSZKY.mjs → create-project-bMf6ffLZ.mjs} +9 -5
  37. package/dist/{db-hRrvZaq_.mjs → db-8uG64XLl.mjs} +26 -26
  38. package/dist/{delete-D6dZ9B6B.mjs → delete-NvbiyeJf.mjs} +4 -4
  39. package/dist/{deploy-WaAQez1O.mjs → deploy-DzAIwqNU.mjs} +944 -607
  40. package/dist/{deploy-DDz7c8LK.mjs → deploy-bjXdFCtn.mjs} +1 -1
  41. package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
  42. package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
  43. package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
  44. package/dist/{domain-Dmhvb2oU.mjs → domain-y5Tvydvo.mjs} +5 -5
  45. package/dist/{email-DFi-s2t4.mjs → email-B3umsW75.mjs} +15 -30
  46. package/dist/{env-Csi-tMbT.mjs → env-BS6qYHDb.mjs} +6 -6
  47. package/dist/{env-public-D_6u46fX.d.mts → env-public-BX_r8HR6.d.mts} +2 -1
  48. package/dist/{env-validation-BB4GkLxn.mjs → env-validation-BPn7vk-V.mjs} +18 -71
  49. package/dist/{env-validation-BXge7uyK.mjs → env-validation-DbTg7-ar.mjs} +1 -1
  50. package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
  51. package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
  52. package/dist/{gen-Dz3X1Qab.mjs → gen-B580--vC.mjs} +5 -5
  53. package/dist/gen-BVaUUumi.mjs +2 -0
  54. package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-v45BdfKX.mjs} +6 -8
  55. package/dist/{handler-BXJTXd02.d.mts → handler-CZ4nAylQ.d.mts} +2 -1
  56. package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
  57. package/dist/help-DofyZuY7.mjs +2 -0
  58. package/dist/{help-DC7gdz7L.mjs → help-daGKjXGk.mjs} +268 -666
  59. package/dist/index.d.mts +1 -1
  60. package/dist/index.mjs +305 -1490
  61. package/dist/info-B97bTX9N.mjs +113 -0
  62. package/dist/{init-WO0JlPx8.mjs → init-Bvy7zrBo.mjs} +51 -20
  63. package/dist/limits-Bq5LG8Id.d.mts +27 -0
  64. package/dist/limits-Cjuk2VPm.mjs +68 -0
  65. package/dist/{link-CsHOinF7.mjs → link-CDqqCjFl.mjs} +5 -5
  66. package/dist/{list-CDb-4bZ1.mjs → list-CZj0dzKY.mjs} +5 -5
  67. package/dist/{live-CKiJilLr.d.mts → live-Chw1eIMv.d.mts} +1 -1
  68. package/dist/{local-d1-CC8sKFGu.mjs → local-d1-2CMnpuW_.mjs} +2 -2
  69. package/dist/login-DYt_An22.mjs +2 -0
  70. package/dist/{login-DvqXsfGs.mjs → login-UZKFM_u7.mjs} +5 -5
  71. package/dist/{logs-BdfiOezj.mjs → logs-CUZ6t9t3.mjs} +5 -5
  72. package/dist/migrate-8_2u55MD.mjs +2 -0
  73. package/dist/{migrate-B8KuoYsO.mjs → migrate-DHul7PRV.mjs} +5 -4
  74. package/dist/{node-BM43oz4G.mjs → node-BkyRWRx8.mjs} +2 -2
  75. package/dist/operator-args-CLgKGlwU.mjs +690 -0
  76. package/dist/{operator-cmd-03819ATr.mjs → operator-cmd-DBA6dl0m.mjs} +69 -23
  77. package/dist/output-Dm_A4Tbv.mjs +81 -0
  78. package/dist/pages/client.d.mts +34 -2
  79. package/dist/pages/client.mjs +59 -3
  80. package/dist/pages/index.d.mts +1 -1
  81. package/dist/pages/index.mjs +3 -3
  82. package/dist/pages/islands-plugin.d.mts +16 -6
  83. package/dist/pages/islands-plugin.mjs +2 -2
  84. package/dist/pages/protocol.d.mts +2 -2
  85. package/dist/pages/protocol.mjs +2 -308
  86. package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
  87. package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
  88. package/dist/plan-D1Q5rf-r.mjs +2 -0
  89. package/dist/plan-NPpwZ_kc.mjs +58 -0
  90. package/dist/platform-args-BJdRtlLq.mjs +506 -0
  91. package/dist/platform-args-D3RXyR6h.mjs +2 -0
  92. package/dist/{platform-auth-config-z92h63q5.mjs → platform-auth-config-B56E9YP1.mjs} +4 -4
  93. package/dist/{platform-auth-protection-DeE3yr2R.mjs → platform-auth-protection-BDWO_aER.mjs} +3 -3
  94. package/dist/{platform-auth-recovery-o_340Ixx.mjs → platform-auth-recovery-1gg4CSRe.mjs} +4 -4
  95. package/dist/{platform-cmd-C4ZV3Vpy.mjs → platform-cmd-Bt-1w6pY.mjs} +1 -1
  96. package/dist/{platform-cmd-DNl8WosH.mjs → platform-cmd-DMcQStSc.mjs} +26 -5
  97. package/dist/{platform-domain-CU1JtJkW.mjs → platform-domain-BNkcz0OB.mjs} +36 -9
  98. package/dist/{platform-lifecycle-Bc047IeT.mjs → platform-lifecycle-9OyBALhH.mjs} +850 -276
  99. package/dist/{platform-lifecycle-Bs2qx1E3.mjs → platform-lifecycle-BE6C_jxh.mjs} +1 -1
  100. package/dist/{platform-management-CVpGI9Y5.mjs → platform-management-CjwLVQwN.mjs} +59 -11
  101. package/dist/{platform-management-C8tt6D8h.mjs → platform-management-CnyTdcWX.mjs} +1 -1
  102. package/dist/platform-plans-config-BNGKGr4P.mjs +359 -0
  103. package/dist/{platform-recovery-dvUaptLr.mjs → platform-recovery-D6KSpuFm.mjs} +2 -2
  104. package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
  105. package/dist/{prepare-DyZ-Yok5.mjs → prepare-B5Mkic5u.mjs} +3 -3
  106. package/dist/{prepare-C3kt3Rst.mjs → prepare-DOsL0CC9.mjs} +4 -20
  107. package/dist/prepare-cgvDMtSb.mjs +2 -0
  108. package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-CNzrqvBv.mjs} +30 -16
  109. package/dist/{project-team-BkbYIsXN.mjs → project-team-DQOWPfQT.mjs} +4 -4
  110. package/dist/{project-token-C8xEEQnB.mjs → project-token-CTDYU0Cc.mjs} +4 -4
  111. package/dist/project-zero-trust-BNAkW-_0.mjs +63 -0
  112. package/dist/{protocol-ZH3jP4a7.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
  113. package/dist/protocol-U7bfjHmA.mjs +331 -0
  114. package/dist/{provision-DNtrtaVD.mjs → provision-C4ORE7G7.mjs} +1 -1
  115. package/dist/{provision-BhreDAOS.mjs → provision-CJFgTZY8.mjs} +111 -215
  116. package/dist/{requests-DFyhBMaf.mjs → requests-MhxYnau8.mjs} +4 -4
  117. package/dist/resource-name-C7LVpcRm.mjs +11 -0
  118. package/dist/{rollback-DHHxXZiS.mjs → rollback-CJ6iSDoU.mjs} +5 -5
  119. package/dist/route-url-CG7U-cRN.mjs +15 -0
  120. package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
  121. package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
  122. package/dist/runtime/ai.d.mts +12 -8
  123. package/dist/runtime/ai.mjs +84 -17
  124. package/dist/runtime/better-auth-mysql.mjs +1 -1
  125. package/dist/runtime/better-auth-pg.mjs +1 -1
  126. package/dist/runtime/better-auth.mjs +1 -1
  127. package/dist/runtime/client-react.mjs +2 -2
  128. package/dist/runtime/client-solid.mjs +2 -2
  129. package/dist/runtime/client-svelte.mjs +2 -2
  130. package/dist/runtime/client-vue.mjs +2 -2
  131. package/dist/runtime/client.mjs +2 -2
  132. package/dist/runtime/durable.d.mts +3 -1
  133. package/dist/runtime/durable.mjs +4 -1
  134. package/dist/runtime/email/testing.mjs +1 -1
  135. package/dist/runtime/env-public.d.mts +1 -1
  136. package/dist/runtime/fetch-stream.mjs +1 -1
  137. package/dist/runtime/fetch.mjs +1 -1
  138. package/dist/runtime/handler.d.mts +1 -1
  139. package/dist/runtime/kv.mjs +0 -1
  140. package/dist/runtime/limits.d.mts +2 -0
  141. package/dist/runtime/limits.mjs +2 -0
  142. package/dist/runtime/live-client.d.mts +1 -1
  143. package/dist/runtime/live-server.mjs +25 -16
  144. package/dist/runtime/live.d.mts +1 -1
  145. package/dist/runtime/migration-handler.mjs +62 -42
  146. package/dist/runtime/route-url.d.mts +4 -0
  147. package/dist/runtime/route-url.mjs +2 -0
  148. package/dist/runtime/routing.d.mts +180 -0
  149. package/dist/runtime/routing.mjs +1082 -0
  150. package/dist/runtime/sandbox-container.d.mts +3 -0
  151. package/dist/runtime/sandbox-container.mjs +2 -0
  152. package/dist/runtime/sandbox.d.mts +4 -32
  153. package/dist/runtime/sandbox.mjs +151 -75
  154. package/dist/runtime/sse.mjs +1 -1
  155. package/dist/runtime/validator.d.mts +1 -1
  156. package/dist/runtime/ws-server.d.mts +4 -2
  157. package/dist/runtime/ws-server.mjs +27 -2
  158. package/dist/runtime/ws.d.mts +2 -2
  159. package/dist/runtime/ws.mjs +8 -6
  160. package/dist/sandbox-XZAqzFlG.d.mts +52 -0
  161. package/dist/sandbox-container-Bo0eiFKz.d.mts +73 -0
  162. package/dist/sandbox-container-C6ItmVuN.mjs +281 -0
  163. package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
  164. package/dist/{secret-DN9sSNiV.mjs → secret-Dli5fP0B.mjs} +6 -6
  165. package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
  166. package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
  167. package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
  168. package/dist/validate-Dq_L3s0S.mjs +2 -0
  169. package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
  170. package/dist/{wrangler-BymcxrRa.mjs → wrangler-7K-bW_DL.mjs} +14 -235
  171. package/dist/{ws-BwcqizuH.d.mts → ws-CL1w7GXU.d.mts} +13 -2
  172. package/package.json +48 -33
  173. package/sandbox.Dockerfile +4 -0
  174. package/schema.json +10 -22
  175. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
  176. package/skills/void/SKILL.md +50 -133
  177. package/skills/void/docs/guide/ai.md +94 -84
  178. package/skills/void/docs/guide/app-types.md +3 -32
  179. package/skills/void/docs/guide/auth.md +12 -116
  180. package/skills/void/docs/guide/database/d1.md +9 -54
  181. package/skills/void/docs/guide/database/mysql.md +1 -1
  182. package/skills/void/docs/guide/database/postgresql.md +5 -26
  183. package/skills/void/docs/guide/database.md +23 -75
  184. package/skills/void/docs/guide/deployment.md +27 -113
  185. package/skills/void/docs/guide/durable-state.md +43 -18
  186. package/skills/void/docs/guide/edge/headers.md +3 -47
  187. package/skills/void/docs/guide/edge/prerendering.md +5 -20
  188. package/skills/void/docs/guide/edge/redirects.md +11 -64
  189. package/skills/void/docs/guide/edge/revalidation.md +6 -19
  190. package/skills/void/docs/guide/edge/rewrites.md +56 -284
  191. package/skills/void/docs/guide/edge/static-assets.md +23 -72
  192. package/skills/void/docs/guide/email/domains.md +112 -0
  193. package/skills/void/docs/guide/email/receiving.md +139 -0
  194. package/skills/void/docs/guide/email/sending.md +231 -0
  195. package/skills/void/docs/guide/email.md +13 -619
  196. package/skills/void/docs/guide/env-migration.md +11 -11
  197. package/skills/void/docs/guide/env-vars.md +9 -29
  198. package/skills/void/docs/guide/index.md +0 -15
  199. package/skills/void/docs/guide/jobs.md +3 -18
  200. package/skills/void/docs/guide/kv.md +5 -11
  201. package/skills/void/docs/guide/live.md +5 -56
  202. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
  203. package/skills/void/docs/guide/pages-routing/head.md +10 -10
  204. package/skills/void/docs/guide/pages-routing/islands.md +6 -36
  205. package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
  206. package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
  207. package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
  208. package/skills/void/docs/guide/pages-routing/overview.md +7 -17
  209. package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
  210. package/skills/void/docs/guide/platform/administration/access.md +1 -4
  211. package/skills/void/docs/guide/platform/administration/email.md +35 -8
  212. package/skills/void/docs/guide/platform/administration/operations.md +26 -4
  213. package/skills/void/docs/guide/platform/administration/plans.md +126 -0
  214. package/skills/void/docs/guide/platform/administration/projects.md +5 -2
  215. package/skills/void/docs/guide/platform/administration/zero-trust.md +189 -0
  216. package/skills/void/docs/guide/platform/development/local.md +2 -2
  217. package/skills/void/docs/guide/platform/development/runtime.md +3 -13
  218. package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
  219. package/skills/void/docs/guide/platform/installation/credentials.md +6 -4
  220. package/skills/void/docs/guide/platform/installation/domains.md +31 -3
  221. package/skills/void/docs/guide/platform/installation/first-deployment.md +6 -0
  222. package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
  223. package/skills/void/docs/guide/platform/installation/prerequisites.md +21 -16
  224. package/skills/void/docs/guide/platform/installation/setup.md +9 -5
  225. package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
  226. package/skills/void/docs/guide/platform-administration.md +2 -0
  227. package/skills/void/docs/guide/queues.md +7 -9
  228. package/skills/void/docs/guide/quickstart.md +38 -37
  229. package/skills/void/docs/guide/remote-dev.md +4 -9
  230. package/skills/void/docs/guide/sandboxes.md +78 -41
  231. package/skills/void/docs/guide/server-routing.md +9 -72
  232. package/skills/void/docs/guide/sse.md +4 -18
  233. package/skills/void/docs/guide/ssg.md +3 -15
  234. package/skills/void/docs/guide/ssr.md +14 -62
  235. package/skills/void/docs/guide/storage.md +9 -4
  236. package/skills/void/docs/guide/type-safety.md +3 -14
  237. package/skills/void/docs/guide/typed-fetch.md +3 -7
  238. package/skills/void/docs/guide/websockets.md +68 -40
  239. package/skills/void/docs/integrations/agents.md +3 -3
  240. package/skills/void/docs/integrations/cloudflare.md +85 -316
  241. package/skills/void/docs/integrations/frameworks/analog.md +5 -64
  242. package/skills/void/docs/integrations/frameworks/astro.md +4 -73
  243. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
  244. package/skills/void/docs/integrations/frameworks/overview.md +11 -54
  245. package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
  246. package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
  247. package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
  248. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
  249. package/skills/void/docs/reference/api/auth.md +156 -0
  250. package/skills/void/docs/reference/api/client.md +87 -0
  251. package/skills/void/docs/reference/api/database.md +95 -0
  252. package/skills/void/docs/reference/api/durable.md +46 -0
  253. package/skills/void/docs/reference/api/env.md +50 -0
  254. package/skills/void/docs/reference/api/handlers.md +254 -0
  255. package/skills/void/docs/reference/api/pages.md +241 -0
  256. package/skills/void/docs/reference/api/plugin.md +39 -0
  257. package/skills/void/docs/reference/api/resources.md +109 -0
  258. package/skills/void/docs/reference/api/rewrites.md +76 -0
  259. package/skills/void/docs/reference/api/types.md +92 -0
  260. package/skills/void/docs/reference/api.md +56 -1218
  261. package/skills/void/docs/reference/cli/auth.md +88 -0
  262. package/skills/void/docs/reference/cli/database.md +128 -0
  263. package/skills/void/docs/reference/cli/deploy.md +85 -0
  264. package/skills/void/docs/reference/cli/domains.md +41 -0
  265. package/skills/void/docs/reference/cli/email.md +129 -0
  266. package/skills/void/docs/reference/cli/generate.md +116 -0
  267. package/skills/void/docs/reference/cli/github.md +189 -0
  268. package/skills/void/docs/reference/cli/platform-config.md +92 -0
  269. package/skills/void/docs/reference/cli/platform-email.md +81 -0
  270. package/skills/void/docs/reference/cli/platform-installation.md +127 -0
  271. package/skills/void/docs/reference/cli/platform-operations.md +90 -0
  272. package/skills/void/docs/reference/cli/platform-users.md +89 -0
  273. package/skills/void/docs/reference/cli/platform-zero-trust.md +45 -0
  274. package/skills/void/docs/reference/cli/platform.md +70 -0
  275. package/skills/void/docs/reference/cli/project.md +214 -0
  276. package/skills/void/docs/reference/cli/secrets.md +76 -0
  277. package/skills/void/docs/reference/cli/setup.md +70 -0
  278. package/skills/void/docs/reference/cli.md +33 -1621
  279. package/skills/void/docs/reference/config.md +26 -32
  280. package/skills/void/docs/reference/resource-inference.md +3 -58
  281. package/skills/void/docs/reference/structure.md +14 -41
  282. package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
  283. package/dist/cli/cf-compat.mjs +0 -968
  284. package/dist/client-4cDVv7BO.mjs +0 -2
  285. package/dist/gen-Vnv2f65C.mjs +0 -2
  286. package/dist/help-DQMfeKMz.mjs +0 -2
  287. package/dist/login-DFQk7rbW.mjs +0 -2
  288. package/dist/migrate-TsHGBnDA.mjs +0 -2
  289. package/dist/plan-BEZ8VJW0.mjs +0 -256
  290. package/dist/plan-DpuOr14e.mjs +0 -2
  291. package/dist/prepare-BZXkjdNe.mjs +0 -2
  292. package/dist/validate-EKmJWxmy.mjs +0 -2
  293. /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
@@ -1,175 +1,52 @@
1
1
  ---
2
2
  name: migrate-cloudflare-to-void
3
- description: Migrate an existing Vite app using @cloudflare/vite-plugin to Vite + void. Use when a project already runs on Cloudflare Workers but needs Void file-based routes, inferred bindings, and void deploy workflow.
3
+ description: Migrate an existing Vite app using @cloudflare/vite-plugin to Void while preserving its routes, bindings, and deployment identity.
4
4
  ---
5
5
 
6
- # Migrate Vite + Cloudflare Plugin to Void
6
+ # Migrate a Cloudflare Vite app to Void
7
7
 
8
- ## When to use
8
+ Read the app's package manifest, Vite config, Worker entry, Cloudflare config,
9
+ and migrations. Identify its framework, endpoints, bindings, and deployed Worker
10
+ before changing them.
9
11
 
10
- Use this skill when the user has an existing Vite app with `@cloudflare/vite-plugin` and wants to migrate to `void` with minimal breakage.
12
+ Use the bundled guides under `../void/docs/`:
11
13
 
12
- Do not use this for greenfield apps started via `npm install -D void` + `npx void init`.
14
+ - `integrations/cloudflare.md` for existing Worker handoff and configuration.
15
+ - `integrations/frameworks/overview.md` and the matching framework guide when
16
+ another framework owns routing and SSR.
17
+ - `guide/server-routing.md` for native Void handlers and middleware.
18
+ - `guide/database.md` for schema and migration setup.
19
+ - `reference/cli.md` before running commands.
13
20
 
14
- ## Inputs to gather first
21
+ Add `void` and replace `cloudflare()` with `voidPlugin()`, preserving the
22
+ framework plugins and unrelated Vite settings. Remove dependencies and scripts
23
+ only when their replacement is working and no other workflow uses them.
15
24
 
16
- Read these files before editing:
17
-
18
- - `package.json`
19
- - `vite.config.*`
20
- - `wrangler.jsonc` (if present)
21
- - Current worker entrypoint (`src/worker.*`, `src/index.*`, etc.)
22
- - Any existing API handlers and migration SQL files
23
-
24
- Confirm:
25
-
26
- - existing routes/endpoints and HTTP methods
27
- - bindings currently used (`DB`, `KV`, `R2`, etc.)
28
- - whether the app uses framework SSR or only SPA + API
29
-
30
- ## Migration workflow
31
-
32
- 1. Update dependencies
33
-
34
- - Remove `@cloudflare/vite-plugin` if it is only used for runtime/deploy.
35
- - Add `void`.
36
- - Keep existing framework plugins (React/Vue/Svelte/etc.).
37
-
38
- 2. Update Vite config
39
-
40
- - Replace `cloudflare(...)` plugin usage with `voidPlugin()`.
41
- - Keep plugin order stable unless there is a known conflict.
42
- - Keep unrelated Vite settings unchanged.
43
-
44
- Target shape:
25
+ For native Void routes, use one file per URL with named HTTP method exports:
45
26
 
46
27
  ```ts
47
- import { defineConfig } from 'vite';
48
- import { voidPlugin } from 'void';
28
+ // routes/api/users/[id].ts
29
+ import { defineHandler } from 'void';
49
30
 
50
- export default defineConfig({
51
- plugins: [voidPlugin()],
31
+ export const GET = defineHandler((c) => {
32
+ return { id: c.req.param('id') };
52
33
  });
53
34
  ```
54
35
 
55
- 3. Migrate API surface to file-based routes
56
-
57
- - Create `routes/` if missing.
58
- - Convert each existing endpoint into route files:
59
- - `routes/api/users.get.ts`
60
- - `routes/api/users.post.ts`
61
- - `routes/api/users/[id].get.ts`
62
- - Use `defineHandler` from `void`.
63
- - If there is shared logic, move it into regular modules and import from route files.
64
-
65
- 4. Migrate middleware
66
-
67
- - Move request-wide middleware to `middleware/*.ts`.
68
- - Export with `defineMiddleware`.
69
- - Preserve behavior order by filename prefix when needed (`01.auth.ts`, `02.logger.ts`).
70
-
71
- 5. Preserve bindings with Void conventions
72
-
73
- - Keep Cloudflare-style uppercase names on `c.env` (`DB`, `KV`, `STORAGE`, etc.).
74
- - Remove manual binding config from Vite plugin config where Void now infers usage.
75
- - Ensure route code actually references required bindings so inference can detect them.
76
-
77
- 6. Migrations
78
-
79
- - Place SQL files in `migrations/` (sorted by filename).
80
- - Keep destructive operations gated by explicit pragma if needed.
81
- - If old migrations live elsewhere, copy/rename into this directory with stable ordering.
82
-
83
- 7. Deploy workflow migration
84
-
85
- - Replace old deploy instructions with:
86
- - `void account login`
87
- - `void deploy`
88
- - If CI must target a specific project, use:
89
- - `void deploy --project <slug>`
90
- - or `VOID_PROJECT=<slug> void deploy`
91
-
92
- 8. Post-migration cleanup (remove obsolete Wrangler wiring)
93
-
94
- - If the app no longer uses direct Wrangler workflows, remove `wrangler.jsonc`.
95
- - Remove direct `wrangler` dependency/devDependency from `package.json` when it is only used for old deploy/dev scripts.
96
- - Remove or rewrite npm scripts that call `wrangler` directly (for example old deploy/publish scripts).
97
- - Keep Wrangler only if the project still has explicit non-Void workflows that require it.
98
-
99
- ## Routing behavior reference (use during file conversion)
100
-
101
- Apply these filename rules exactly when mapping old handlers to `routes/`:
102
-
103
- 1. Extension and suffix parsing order
104
-
105
- - Strip extension (`.ts`, `.js`, `.mts`, `.mjs`).
106
- - Strip env suffix (`.dev`, `.prod`). The suffix restricts the route to that environment, so only use it for handlers that must not ship to the other one.
107
- - Strip HTTP method suffix (`.get`, `.post`, `.put`, `.delete`, `.patch`).
108
- - Strip trailing `index` segment.
109
- - Remove route group segments `(group-name)` from URL path.
110
-
111
- 2. Method mapping
112
-
113
- - `users.get.ts` matches only `GET /users`.
114
- - `users.post.ts` matches only `POST /users`.
115
- - `users.ts` matches all methods.
116
- - Split multi-method handlers into one file per method when preserving behavior matters.
117
-
118
- 3. Dynamic and catch-all params
119
-
120
- - `[id]` -> `:id`
121
- - `[...slug]` -> catch-all named param
122
- - `[...]` -> catch-all unnamed fallback
123
- - Use folder nesting for multiple params: `routes/api/org/[org]/repo/[repo].get.ts`.
124
-
125
- 4. Route groups and organization
126
-
127
- - Directories like `(internal)` are for code organization only and do not appear in URL.
128
- - Use them when reorganizing large route sets without changing public paths.
129
-
130
- 5. Ignored files
131
-
132
- - Files or directories starting with `_` are ignored by route scanner.
133
- - Do not place active handlers under `_legacy`, `_draft`, etc.
134
-
135
- 6. Middleware behavior
136
-
137
- - Middleware files live in `middleware/` and run in filename order.
138
- - Prefix numerically if order is important (`01.auth.ts`, `02.logger.ts`).
139
-
140
- 7. Concrete mapping examples
141
-
142
- - `src/worker.ts` handling `GET /api/users/:id` -> `routes/api/users/[id].get.ts`
143
- - single handler switching on method for `/api/users` -> `routes/api/users.get.ts` and `routes/api/users.post.ts`
144
- - legacy `GET /health` endpoint -> `routes/health.get.ts`
145
-
146
- ## Verification checklist
147
-
148
- Run and validate:
149
-
150
- 1. `npm run dev` (or project dev command)
151
- 2. Exercise representative API routes locally.
152
- 3. `npm run build`
153
- 4. `void deploy` and verify live URL responds.
154
- 5. Confirm no deploy-critical scripts still depend on `wrangler`.
155
-
156
- In the Void deploy output, verify:
157
-
158
- - worker modules uploaded
159
- - static assets uploaded
160
- - migrations applied (if present)
161
-
162
- ## Common migration pitfalls
163
-
164
- - Importing from the main `void` runtime in worker route files when a lighter handler import is expected by tooling.
165
- - Forgetting to split method-specific handlers (`GET`/`POST`) into filename suffixes.
166
- - Keeping old custom worker entry wiring that conflicts with generated route runtime.
167
- - Binding names changed to lowercase (`db`) instead of expected uppercase (`DB`), breaking inference/provisioning.
36
+ Keep GET and POST for the same URL in the same file. Middleware lives in
37
+ `middleware/` and runs in filename order. Preserve existing URLs and behavior;
38
+ framework apps keep their framework's routing conventions.
168
39
 
169
- ## Deliverable format
40
+ Preserve configured bindings and resource IDs. Use `void.config.ts` for authored
41
+ settings and `void.lock.json` for provisioned state. Let Void migrate supported
42
+ root Cloudflare configuration rather than deleting it before the handoff.
43
+ Database migrations live in `db/migrations/`; preserve their journal, ordering,
44
+ and deployed history instead of recreating them.
170
45
 
171
- When applying this migration, produce:
46
+ Verify the app's development server, representative routes, and production build.
47
+ When deployment is part of the user's request, follow the existing Worker
48
+ handoff in the Cloudflare guide and verify the reported URL. Keep new resources,
49
+ auth setup, and database or secret changes separate from that first handoff;
50
+ follow its explicit ISR cache choice when needed.
172
51
 
173
- 1. A change summary grouped by config/routes/migrations/CI.
174
- 2. A list of moved or newly created route files.
175
- 3. Exact commands to run locally and in CI.
52
+ Summarize the changes and any remaining migration work.
@@ -1,127 +1,29 @@
1
1
  ---
2
2
  name: void
3
- description: Void skill for app development and CLI operations. Use this skill to route user requests to the appropriate bundled Void docs.
3
+ description: Build Void apps and use the Void CLI by loading the relevant bundled guides and references.
4
4
  ---
5
5
 
6
- # Void Skill
6
+ # Void
7
7
 
8
- This skill is a router. Open the minimum relevant docs files under `docs/` and execute.
8
+ Read only the guides needed for the user's task. The bundled documentation lives
9
+ under `docs/` beside this skill; in an installed project it is available at
10
+ `node_modules/void/skills/void/docs/`.
9
11
 
10
- Docs in this skill are bundled from `docs/` during `void` package build and live at:
12
+ Before running a Void command, find its group in `docs/reference/cli.md`, then
13
+ read the matching page under `docs/reference/cli/` for syntax, options, and
14
+ deployment target. Use Void commands for application and platform
15
+ workflows. Mention Wrangler only when the user needs to recognize a literal
16
+ configuration file or environment variable.
11
17
 
12
- - `skills/void/docs/**/*.md`
13
-
14
- `void init --agents` always writes brief instructions to `AGENTS.md`, pointing to `node_modules/void/skills/void/docs/`. It preserves content outside its versioned block, leaves other instruction files untouched, and links skills for detected agents without asking which agent is in use.
15
-
16
- `void init` offers Git initialization with `--git` / `--no-git` overrides and suggests an optional initial commit command. It preserves existing repositories and never commits automatically; see `docs/reference/cli.md` for CI and workspace behavior.
17
-
18
- ## Command Naming
19
-
20
- For a new platform installation, prefer an app domain at the zone apex. Nested
21
- app domains need an active wildcard edge certificate and SSL-and-Certificates
22
- read permission; `void platform install --plan` verifies coverage. Use the
23
- self-hosted platform guide for certificate setup rather than enabling a paid
24
- product without an explicit request.
25
-
26
- For first-time platform setup, follow the installation pages linked from `docs/guide/self-hosted-platform.md` in order and introduce credentials when the user reaches that step. Recommend a domain; offer explicit `void platform install --workers-dev` for testing before one is ready. PostgreSQL, credentials for the selected login methods, runtime/R2 credentials, and saved signing/encryption keys are required. GitHub is the default and is optional. `--auth-config` accepts nonsecret provider configuration with environment secret references; `--plan` does not read those secrets. Configurable installations finish first-administrator setup using a one-time code and browser identity confirmation. Domain-free installation skips zone/DNS/certificate operations and can use browser login. `void platform domain set <domain>` later performs resumable DNS/HTTPS setup while preserving existing test URLs and the API origin. The command checks the deployed runtime token's cache-purge permission for the new zone; it does not ask users to retrieve that token. Interactive installation asks whether Void should create Hyperdrive or use a separately managed one; if the latter is missing, it gives setup instructions and stops before provisioning. It still prompts for the owner PostgreSQL URL. Prefer interactive prompts for secrets and keep CI variables in the CI workflow. Void creates the platform infrastructure and database tables.
27
-
28
- For an existing Cloudflare site, run `void deploy` with its root `wrangler.jsonc` or `wrangler.json`. An unlinked project gets a prompt to link and deploy using the existing Worker and resources. Accepting verifies and saves the destination, migrates the root config to `void.config.ts` and `void.lock.json`, then continues deployment. Keep new application resources, migrations, auth setup, and secret changes separate from this first handoff; ISR has its own explicit cache choice. The active Worker Version must be the latest upload so inherited secrets have an unambiguous source. Failed builds retain the link for retry. Read `docs/integrations/cloudflare.md` for the supported configuration and rollback behavior.
29
-
30
- When linking reports missing inferred resources, check the listed bindings and inference reasons against the existing Worker and `void.config.ts`; preserve `.void/cloudflare-link.json` for retries. For prerendered/revalidated sites without a cache, migration saves an explicit `routing.isr` choice in `void.config.ts`. True provisions the cache during this deployment; false keeps ISR disabled on retries and later deployments until changed. Keep page-level exports with either choice. CI must configure the boolean before resuming a migration with no saved choice. An application KV binding explicitly named `ISR_CACHE` is still required. Existing D1 bindings without checked-in migrations retain their local migration settings during handoff.
31
-
32
- For Cloudflare upload failures, use the detailed error message printed by the CLI and saved in the deploy log. A numeric error code alone may not identify the cause.
33
-
34
- Platform administration uses `void platform auth login` and the nested
35
- `user`, `project`, `deployment`, `build`, `signup`, `invitation`, `email`, `system`, and
36
- hosted-only `worker` groups. Open the operator section of `docs/reference/cli.md`
37
- before running these commands. Use `--json` for structured reads and `--plan`
38
- to inspect mutations; approved noninteractive mutations require `--yes`.
39
- The last active administrator cannot be deleted or suspended. If an allowed
40
- administrator removal reports partial cleanup, access remains revoked; use a
41
- remaining administrator to inspect the result and retry.
42
- Use `void platform config auth` to configure login methods; `platform auth`
43
- manages your administrator session. Test a pending configuration before enabling
44
- it, explicitly link identities when switching methods, and verify a linked
45
- alternative before disabling a method. Disabling revokes its human sessions,
46
- including human tokens used in CI, while scoped deployment tokens remain valid.
47
- Create CI credentials with `void project token create`; they are bound to one
48
- project, expire within 90 days, and support explicit renewal and revocation.
49
- Cloudflare Access service credentials pass only the perimeter and never renew or
50
- elevate a human or operator token.
51
- For scripted configuration, use nonsecret JSON with `--file` and read secrets
52
- with `--client-secret-env`; never put client secrets in command arguments.
53
- Use `void platform config auth admission` to select company-approved automatic
54
- signup when the organization's identity policy already determines eligibility;
55
- individual invitations remain optional. The same controls are available under
56
- Settings in the administrator UI.
57
- Access login and platform protection are independent. The installer can create
58
- dedicated Access applications or connect existing ones, including a separate
59
- identity account. Protection setup verifies API/proxy coverage and uses scoped
60
- service credentials for installation and CI. Use `platform config auth protection`
61
- to show, enable, or disable protection; retain the company gate when probes fail.
62
- Users link another enabled method with `void account link [connection-id]` after
63
- recent sign-in and explicit browser identity confirmation. For expired first-admin
64
- codes, resume installation or repair completed provisioning. Lost-provider recovery
65
- uses `platform config auth recover` with installation ownership, original recovery
66
- keys, an existing administrator ID, and a real provider login; never reopen signup.
67
- Operator credentials are separate from application deployment credentials and
68
- ignore repository platform selections. `VOID_OPERATOR_TOKEN` requires an
69
- explicit `VOID_API_URL` or `--connection`; credentials must never be written to
70
- project files. `signup open` allows public signup and `signup restrict` enforces
71
- the allowlist. For OIDC identities without verified email, use `signup allow identity
72
- <connection-id> <subject>` and the exact `signup disallow` counterpart; never infer an
73
- email or link accounts. Inspect `system events` and the target object after an ambiguous
74
- mutation failure before retrying.
75
-
76
- Use `void connect` for deployment onboarding: no arguments offers Cloudflare or a Void platform, `--platform cloudflare` signs in and selects an account, and a platform URL verifies discovery and signs in with a supported provider. It preserves existing project links when connecting elsewhere. `--no-login` saves only verified Void connection metadata; authenticated headless connection requires a valid origin-scoped keychain session or `VOID_TOKEN` with matching `VOID_API_URL`. Platform installation and administration use `void platform`.
77
-
78
- For Void platform project access, use `void project team`: invite only an email already registered on that platform and assign `reader`, `collaborator`, or `admin`. The invited account uses `void connect <url>` followed by pending/accept/decline on that active connection, regardless of the current directory's project link or deploy target. `VOID_API_URL` overrides the connection; an unscoped `VOID_TOKEN` selects Void Cloud. Acceptance preserves directory links; run `void project link` in an unlinked checkout of the invited application. Project-scoped team management does not apply to direct Cloudflare deployments. Installation administrators transfer ownership with `void platform project owner <project-id> <user-id> --plan` and apply the reviewed transfer with `--yes`.
79
-
80
- Use Void commands for every user-facing workflow. Never ask the user to install, authenticate, or run Wrangler directly. Say Cloudflare or Void instead, except when naming literal `wrangler.jsonc` / `wrangler.json` files or `WRANGLER_*` environment variables the user must inspect.
81
-
82
- `void auth login|status|logout` follows the saved deploy destination or asks the user to choose; `void account` explicitly manages a Void platform account.
83
-
84
- Use `void` in examples and commands in this skill. For first-time setup, prefer `void init` followed by `void deploy`; in an empty directory, install `void` first and let `void init` add the matching Pages adapter and starter dependencies with Vite+ as the default scaffold toolchain. In an existing app, `void init` configures Void in place by adding missing Vite scripts and creating or patching `vite.config.*` with `voidPlugin()`. For Cloudflare deployment, Void uses bundled tooling and secure browser OAuth; init or the first deploy saves the selected `account_id`, and `void cloudflare login|status|logout` manages the session; Void-managed deployment requires an explicitly connected platform. Use `void connect <url>` for an existing platform or `void platform install --plan` to preview a company control plane in the user's Cloudflare account. The core self-hosted platform excludes the dashboard, GitHub App, and build Containers; lifecycle commands are resumable and verify remote, Worker, and R2 ownership before mutations. `void platform disable` gates traffic through installation-owned routing storage and remains disabled through repair or upgrade; `void platform enable` explicitly restores traffic. Safe uninstall retains name-addressed Workers, R2, AI Gateway, external PostgreSQL, and zones for explicit manual cleanup. Direct Cloudflare deploys support native Void apps, static/SPA/SSG output, and Cloudflare builds from TanStack Start, React Router, vinext, SvelteKit, Nuxt, Analog, and Astro. They provision inferred resources, validate and apply migrations, require schema-declared server values in encrypted remote secret storage, upload and probe an immutable Worker Version, then activate and synchronize triggers. Native Void features are Workers Free-compatible by default; `void/sandbox` is an explicit exception because it uses Cloudflare Containers and therefore requires Workers Paid. A Sandbox deploy checks Containers access before provisioning/building, while apps without Sandbox perform no entitlement probe. Versions without preview URLs are staged at 0% and probed through workers.dev using a version override; the same safe fallback applies when Access blocks a generated preview alias but admits the stable Worker hostname. Set `CLOUDFLARE_WORKERS_SUBDOMAIN` in a fresh CI checkout, while local deploys cache it automatically. When Cloudflare Access protects `workers.dev`, use an admitted `CF_ACCESS_CLIENT_ID` / `CF_ACCESS_CLIENT_SECRET` service-token pair for CI, or a short-lived `CF_ACCESS_TOKEN` from `cloudflared` for an interactive local readiness probe. With Cloudflare saved in `.void/project.json`, secret, domain, project status/log/rollback, and remote database commands operate directly on the pinned Worker/account. Logs are a live tail. Rollback restores the selected version's saved schedules, queues, workflows, routes, and domains but never reverses database migrations; versions without complete trigger snapshots use code-only rollback and keep the current routes and schedules. On either deployment platform, auth-enabled `void deploy` preserves an existing `BETTER_AUTH_SECRET` or creates a persistent encrypted secret when missing; always use Void's deployment flow so it can manage that secret safely.
85
-
86
- Use `void` and `@void/*` in code examples and package manifests.
87
-
88
- Non-interactive self-hosted platform install, upgrade, repair, disable, enable, and uninstall commands require `--yes`; `--plan` is read-only and needs no acknowledgement.
89
-
90
- Platform install plans show actual resource names, the GitHub callback, and credential links without opening credential pages or saving a draft; Cloudflare browser login still opens if needed. New platforms use `void-<name>-<role>` names without random suffixes. Conflicts stop installation; existing installations retain recorded names. Approved interactive installs open the runtime-token, GitHub OAuth, and R2 pages only when those credentials are missing, with fallback instructions. Local credential drafts preserve the callback across retries and encrypt partial inputs. Interactive installs list unfinished installs, including interrupted provisioning, or offer "Start a new platform install". Entering an unfinished name asks to resume it; declining returns to name entry. Completed platforms are excluded, and new installs never inherit or delete old credentials or resources. Use `--resume --name <id>` to continue directly or in CI. Do not generate replacement signing keys or create another installation to recover a cancelled prompt.
91
-
92
- Cloudflare browser login does not grant AI Gateway access. A platform installation preview may mark that resource `inspect`; apply must verify it with the existing runtime-token input (Account → AI Gateway → Edit) before any provisioning. Never treat a permission failure as an empty resource inventory or skip ownership verification. The runtime token is used only for AI Gateway provider calls; other operations retain the operator credential.
93
-
94
- Use `--runtime <directory>` on platform install, upgrade, repair, enable, or rollback when deploying a locally built `@void/platform` runtime. The directory must contain the generated integrity manifest, Worker artifacts, and migration tree. Build it with `vp run --filter @void/platform build`; Git source revisions are detected automatically, with `-dirty` for uncommitted changes. `VOID_PLATFORM_SOURCE_REVISION` is an optional override. Do not treat this as a safety bypass: custom and packaged runtimes follow the same verification and rollback path.
95
-
96
- For self-hosted platform installation, require a dedicated empty PostgreSQL database. Interactive lifecycle commands use Cloudflare browser OAuth with keyring storage. Wrangler OAuth has Zone Read, so a plan that creates a zone or DNS record requires a scoped `CLOUDFLARE_API_TOKEN` with Account → Zone → Edit and/or Zone → DNS → Edit; finish Workers onboarding and choose a workers.dev subdomain for a fresh Cloudflare account. The installed platform uses a separate `VOID_PLATFORM_RUNTIME_CLOUDFLARE_API_TOKEN`. Its core permissions include Hyperdrive: Write at account scope and Cache Purge: Purge on the application zone; SSL and Certificates: Edit is needed only when a custom runtime enables custom project domains. Managed Sandbox apps additionally require Workers Paid plus Account → Containers → Edit and Account → Cloudchamber → Edit on that runtime token; these are checked on the first Sandbox application deploy, not during platform install or upgrade. The installer preflights account and Hyperdrive access and safely verifies Cache Purge for an existing zone with a unique nonexistent URL. Fresh installs require unique per-installation values from the operator's secret manager: `VOID_PLATFORM_JWT_SECRET` with at least 32 random bytes and `VOID_PLATFORM_PROJECT_SECRET_KEY` as canonical base64 for 32 random bytes. Never let a local checkpoint or ephemeral CI runner be their only custodian. Enabling email generates a separate signing key in encrypted recovery state; supply `VOID_PLATFORM_EMAIL_SIGNING_SECRET` from the secret manager for headless installs without persistent recovery files. The installer transactionally claims the database for one installation, pins that URL after a successful claim, never removes the claim during uninstall, and uses it for a cross-host lifecycle lock plus a secret-free authoritative lifecycle manifest. Local recovery checkpoints are AES-256-GCM encrypted with an OS-keychain key; never place platform secrets in plaintext files. After discovery on a new machine, provide `VOID_PLATFORM_DATABASE_URL`. For email-enabled installations without encrypted recovery state, also restore the original `VOID_PLATFORM_EMAIL_SIGNING_SECRET`; recreating only the email gateway needs this key, not JWT or runtime credentials. Normal upgrades preserve other deployed Worker secrets; restore the original runtime, GitHub, R2, JWT, and project-encryption values when recreating the API or proxy as documented. Upgrades enable managed Sandboxes automatically. An upgrade from the tenant-owned legacy may still require `void platform system sandbox-drain`: preview with `--plan`, follow each `nextCursor`, then apply with `--yes` until the DB-backed response reports `complete: true`; never delete an unverified app by name. The installer trusts only DB-backed sandbox-drain probe protocol v1. Before it accepts an empty inventory, the database admission barrier makes older deployment inserts finish and become visible or rejects them after the protocol floor is armed. Lifecycle redeploys preserve unmanaged Worker routes and custom domains in both the new trigger state and rollback snapshot. They stop before migrations or uploads when live Hyperdrive origin metadata differs from the pinned database. Platform upgrade SQL is forward-only: packaged hashes and the live Drizzle prefix must match, pending migrations require an exact source-version/schema rollback edge, and the old version remains authoritative until target health succeeds. Use `void platform rollback --runtime <earlier>` only when the installed runtime declares the exact earlier version/schema compatible; pass `--from-runtime` for the exact current custom artifact. Rollback preserves the forward database schema and cannot lower a database-required safety protocol. Safe uninstall retains Worker routes, custom domains, and R2 for explicit manual cleanup because Cloudflare cannot condition their deletion on an immutable generation.
97
-
98
- For an organization-managed Hyperdrive, set `VOID_PLATFORM_HYPERDRIVE_ID`, `VOID_PLATFORM_HYPERDRIVE_ORIGIN_HOST`, and `VOID_PLATFORM_HYPERDRIVE_ORIGIN_USER` together before installation. Use `VOID_PLATFORM_DATABASE_URL` for a separate owner connection that runs migrations; the Hyperdrive must be named `void-<installation-name>-database` and have SQL result caching disabled. See `docs/guide/platform/installation/prerequisites.md`.
99
-
100
- For self-hosted recovery, `VOID_PLATFORM_PROJECT_SECRET_KEY` restores an original `v1` project-secret keyring. After rotation, restore every retained version with `VOID_PLATFORM_PROJECT_SECRET_KEYS_JSON` and its active entry with `VOID_PLATFORM_PROJECT_SECRET_ACTIVE_KEY_VERSION`. These inputs restore a missing API Worker and never replace the live keyring of an existing Worker. Inject them from a secret manager without logging them or writing plaintext files.
101
-
102
- For Cloudflare user switching, `void cloudflare login` always opens a fresh browser sign-in. `void cloudflare status` distinguishes the authenticated user and credential method from the project's pinned deployment account. Login never retargets a project. Remove API-credential environment overrides from the current shell before browser sign-in, without printing their values; automatic deployment checks continue to reuse valid sessions.
103
-
104
- ## No-Args Behavior
105
-
106
- Published self-hosted platform routes and custom domains are observed and recorded as retained attachments. Lifecycle commands gate traffic through installation-owned routing storage but never delete those attachments unattended.
107
-
108
- If invoked without a concrete task, do a brief app status check and report:
109
-
110
- 1. App type (`void`, `framework`, `spa`, `static`) using `docs/app-types.md` criteria.
111
- 2. Backend feature usage (`routes/`, `pages/`, `middleware/`, `migrations/`, `crons/`, `queues/`, SSR entries).
112
- 3. Runtime signals (`void/db`, `void/kv`, `void/storage`, queue usage).
113
- 4. Auth signals (`void/auth`, `auth` client imports, OAuth env vars).
114
- 5. Deployment platform and optional Void project linkage (`.void/project.json`), plus config readiness (`void.config.ts`, Cloudflare `account_id`, tsconfig extends).
115
- 6. Optional health checks (`void account whoami`, `void db status` when relevant).
116
-
117
- Then ask what to do next.
18
+ Use `void` and `@void/*` in imports, examples, and package manifests. Follow the
19
+ project's existing framework and deployment destination.
118
20
 
119
21
  ## Task Routing
120
22
 
121
23
  | User intent | Docs file(s) |
122
24
  | ------------------------------------------ | ----------------------------------------------------------------------------------------- |
123
25
  | CLI command syntax, flags, env vars | `docs/reference/cli.md` |
124
- | Initial setup, onboarding, first app | `docs/guide/quickstart.md`, `docs/reference/cli.md` |
26
+ | Initial setup, onboarding, first app | `docs/guide/quickstart.md`, `docs/reference/cli/setup.md` |
125
27
  | App type detection and mode behavior | `docs/guide/app-types.md`, `docs/reference/config.md` |
126
28
  | Server/API routing and middleware | `docs/guide/server-routing.md`, `docs/integrations/hono.md` |
127
29
  | Pages mode, loader/action, forms, layouts | `docs/guide/pages-routing/*.md`, `docs/guide/type-safety.md` |
@@ -130,39 +32,54 @@ Then ask what to do next.
130
32
  | Authentication | `docs/guide/auth.md`, `docs/guide/env-vars.md` |
131
33
  | Cloudflare runtime bindings and config | `docs/integrations/cloudflare.md`, `docs/reference/config.md`, `docs/guide/env-vars.md` |
132
34
  | AI inference (Workers AI, providers) | `docs/guide/ai.md` |
35
+ | Durable State and WebSockets | `docs/guide/durable-state.md`, `docs/guide/websockets.md` |
36
+ | Server-sent events and live streams | `docs/guide/sse.md`, `docs/guide/live.md` |
37
+ | Sandboxes | `docs/guide/sandboxes.md` |
38
+ | Email | `docs/guide/email.md`, then the matching guide under `docs/guide/email/` |
133
39
  | KV / storage / queues / cron jobs | `docs/guide/kv.md`, `docs/guide/storage.md`, `docs/guide/queues.md`, `docs/guide/jobs.md` |
134
40
  | SSR and caching | `docs/guide/ssr.md`, `docs/guide/edge/*.md` |
135
41
  | Rewrites, redirects, fallbacks | `docs/guide/edge/rewrites.md`, `docs/guide/edge/redirects.md`, `docs/reference/config.md` |
136
42
  | Static site generation | `docs/guide/ssg.md` |
137
- | Deployment and CI | `docs/guide/deployment.md`, `docs/reference/cli.md` |
138
- | Install or maintain a company platform | `docs/guide/self-hosted-platform.md`, `docs/reference/cli.md` |
43
+ | Deployment and CI | `docs/guide/deployment.md`, `docs/reference/cli/deploy.md` |
44
+ | Install or maintain a company platform | `docs/guide/self-hosted-platform.md`, `docs/reference/cli/platform-installation.md` |
139
45
  | Develop or deploy a platform fork | `docs/guide/platform-development.md`, `docs/guide/self-hosted-platform.md` |
140
- | Platform administration | `docs/guide/platform-administration.md`, `docs/reference/cli.md` |
141
- | Self-host deploy to own Cloudflare account | `docs/integrations/cloudflare.md`, `docs/reference/cli.md` |
142
- | Project status, deployment history | `docs/reference/cli.md` |
143
- | Cache purging | `docs/reference/cli.md` |
144
- | Project logs, runtime errors | `docs/reference/cli.md` |
145
- | Secrets management (put/sync/delete) | `docs/reference/cli.md`, `docs/guide/env-vars.md` |
46
+ | Platform administration | `docs/guide/platform-administration.md`, `docs/reference/cli/platform.md` |
47
+ | Platform plans and account limits | `docs/guide/platform/administration/plans.md`, `docs/reference/cli/platform-config.md` |
48
+ | Self-host deploy to own Cloudflare account | `docs/integrations/cloudflare.md`, `docs/reference/cli/deploy.md` |
49
+ | Project status, deployment history | `docs/reference/cli/project.md` |
50
+ | Cache purging | `docs/reference/cli/project.md` |
51
+ | Project logs, runtime errors | `docs/reference/cli/project.md` |
52
+ | Secrets management (put/sync/delete) | `docs/reference/cli/secrets.md`, `docs/guide/env-vars.md` |
146
53
  | Typed env vars (`defineEnv`, `env.ts`) | `docs/guide/env-vars.md` |
147
- | Custom domain setup | `docs/reference/cli.md` |
148
- | Database status, reset, seed, export | `docs/reference/cli.md`, `docs/guide/database.md` |
149
- | Auth login/logout/whoami | `docs/reference/cli.md` |
54
+ | Custom domain setup | `docs/reference/cli/domains.md` |
55
+ | Database status, reset, seed, export | `docs/reference/cli/database.md`, `docs/guide/database.md` |
56
+ | Auth login/logout/whoami | `docs/reference/cli/auth.md` |
150
57
  | Overview / introduction | `docs/guide/index.md` |
151
58
  | API surface details | `docs/reference/api.md` |
152
59
  | Meta framework integration | `docs/integrations/frameworks/*.md` |
153
60
  | Coding agent setup | `docs/integrations/agents.md` |
154
61
  | Node.js / Bun / Deno targets | `docs/integrations/nodejs-bun-deno.md` |
155
- | ORMs and external databases | `docs/integrations/orms-and-external-dbs.md` |
62
+ | ORMs and external databases | `docs/guide/database.md` |
156
63
  | Project structure and conventions | `docs/reference/structure.md` |
157
64
  | Resource/binding inference | `docs/reference/resource-inference.md` |
158
65
 
159
- ## Working Rules
160
-
161
- - For any task involving running `void` commands — including checking status, managing secrets, viewing logs, or deploying — open `docs/reference/cli.md` FIRST. Do not guess command syntax.
162
- - Never guess or infer `void` CLI command names or flags. Always consult `docs/reference/cli.md` for the exact command before running it.
163
- - For multi-topic tasks, combine only the needed doc files.
164
- - If docs and memory differ, follow docs.
165
- - For Void-managed auth, `void db generate` automatically includes the production Better Auth schema in the generated migration, including configured model/field renames and plugin tables. Keep those migrations under `db/migrations/`; do not duplicate generated auth tables in the application Drizzle schema.
166
- - **Env vars:** When the project has `env.ts`, the canonical access pattern is `import { env } from "void/env"`. Declare every env key in `env.ts` via `defineEnv({...})` so values are typed and validated. Do not introduce ad-hoc `process.env.X` or untyped `c.env.X` access in new code — add the key to `env.ts` first.
167
-
168
- For platform email domains, use `void email domain add` with an account- and zone-scoped Cloudflare API token. Read inbound, outbound, and management readiness separately; `domain sync` reconciles without rotating secrets. Use a stable `sendEmail({ idempotencyKey })` for retryable sends and inspect `void email logs` when the result is `OUTCOME_UNKNOWN`; never retry an uncertain send with a new key. Administrators can inspect retained outcomes with `void platform email logs <project-id|slug> --json`; use the project ID after deletion. Native Cloudflare email setup remains `void email setup --platform cloudflare` and does not support platform idempotency keys.
66
+ ## Working rules
67
+
68
+ - Read the relevant guide before changing configuration, persistent resources,
69
+ authentication, or deployment workflows. The guides define current behavior;
70
+ avoid copying a second set of instructions into this skill.
71
+ - Before moving deployed Durable State or WebSocket definitions, read their
72
+ guides and use `void info` to preserve resource names and instance keys.
73
+ - Declare application environment keys in `env.ts` and access them through
74
+ `void/env`; follow `docs/guide/env-vars.md` for local and production values.
75
+ - For platform setup, follow the pages linked from
76
+ `docs/guide/self-hosted-platform.md`. For recovery, use its documented resume
77
+ or repair workflow and preserve the installation's credentials and resources.
78
+ - Use `--plan` to review platform changes. If an operation has an uncertain
79
+ outcome, inspect its status and events before retrying.
80
+
81
+ If the user invokes this skill without a task, inspect the app's local structure,
82
+ configuration, and saved deployment destination, give a brief status, and ask
83
+ what they want to work on.
84
+
85
+ For AI and Sandbox operations, use `.match({ ok, limited })` and choose a useful quota fallback. In Pages, prefer the adapter’s `Form` with `useForm()` so action failures remain visible and entered data is preserved. See `docs/guide/ai.md`, `docs/guide/sandboxes.md`, and `docs/guide/pages-routing/actions-and-forms.md`.