void 0.26.0 → 0.26.1

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 (360) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-CfUXh_nU.mjs} +8 -7
  4. package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-D52yG7hl.mjs → auth-B5_tZLxT.mjs} +7 -7
  7. package/dist/{auth-B60QDbjg.mjs → auth-BgX2qYSY.mjs} +1 -1
  8. package/dist/{auth-link-DjeOptYi.mjs → auth-link-D5RmKnzh.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BRxIuqDi.mjs → auth-router-Bap-pvbn.mjs} +4 -17
  11. package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
  12. package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
  13. package/dist/{build-cmd-Ce3C8huo.mjs → build-cmd-B58c8iS8.mjs} +7 -6
  14. package/dist/{cache-CS8Yxr5a.mjs → cache-Bo52trKF.mjs} +7 -7
  15. package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-BZNz3Q26.mjs} +5 -4
  16. package/dist/{cf-access-YTlqvAsk.mjs → cf-access-ngGqZpHZ.mjs} +10 -11
  17. package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
  18. package/dist/cf-build-output-H9a97vME.mjs +2 -0
  19. package/dist/cli/cli.mjs +48 -83
  20. package/dist/cli/cloudflare-operation-process.mjs +71 -77
  21. package/dist/cli/env-schema-probe.mjs +5 -6
  22. package/dist/client-By4JjMw_.mjs +2 -0
  23. package/dist/{client-mC-dFGDD.mjs → client-C2Prx_Bi.mjs} +28 -6
  24. package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
  25. package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
  26. package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
  27. package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
  28. package/dist/{cloudflare-operations-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  29. package/dist/{cloudflare-operations-DYa3coIk.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
  30. package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
  31. package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
  32. package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
  33. package/dist/config-BtSFvXZx.mjs +2 -0
  34. package/dist/config-CLYAosnQ.mjs +78 -0
  35. package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
  36. package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
  37. package/dist/config-entry.d.mts +1 -1
  38. package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
  39. package/dist/{connect-H6EvP62X.mjs → connect-X0MUA1gk.mjs} +10 -9
  40. package/dist/{create-project-B2kk9Q0o.mjs → create-project-DxiyW6iX.mjs} +6 -6
  41. package/dist/{create-project-Dbb4uiN-.mjs → create-project-iwkbqiBU.mjs} +1 -1
  42. package/dist/{db-DpCKZto0.mjs → db-XnVMHzoV.mjs} +100 -132
  43. package/dist/{delete-CxlSvsvW.mjs → delete-esYlMiSJ.mjs} +6 -6
  44. package/dist/{deploy-CeEbnv4b.mjs → deploy-BsEvnlJl.mjs} +2346 -2495
  45. package/dist/deploy-C1d-YTfp.mjs +2 -0
  46. package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
  47. package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
  48. package/dist/discover-EDUf6JJw.mjs +2 -0
  49. package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
  50. package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
  51. package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
  52. package/dist/{domain-B_9VgOm6.mjs → domain-CbbBWhWE.mjs} +28 -29
  53. package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
  54. package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
  55. package/dist/{email-BokHgjKj.mjs → email-CpuT42g7.mjs} +23 -18
  56. package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
  57. package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
  58. package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
  59. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
  60. package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
  61. package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
  62. package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
  63. package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
  64. package/dist/{env-BdTc-K2L.mjs → env-w9jOyGZn.mjs} +9 -9
  65. package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  66. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  67. package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
  68. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  69. package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
  70. package/dist/gen-dA9hW7AV.mjs +2 -0
  71. package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-D_FsOFxq.mjs} +64 -163
  72. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  73. package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
  74. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  75. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  76. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  77. package/dist/{help-Bv44e2tm.mjs → help-CVFBTmBx.mjs} +13 -32
  78. package/dist/help-DzKUrQvk.mjs +2 -0
  79. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  80. package/dist/index.d.mts +19 -2
  81. package/dist/index.mjs +617 -530
  82. package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
  83. package/dist/{init-BMf4T03q.mjs → init-Bw-fRKGp.mjs} +160 -197
  84. package/dist/{link-BqYsSS_I.mjs → link-DlPG8iX3.mjs} +9 -9
  85. package/dist/{list-_kBToO-l.mjs → list-2GN7_ueV.mjs} +8 -7
  86. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  87. package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
  88. package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
  89. package/dist/{login-DFuo-RWO.mjs → login-D-Q4xw3Q.mjs} +7 -7
  90. package/dist/login-Dc-wuTDq.mjs +2 -0
  91. package/dist/{logs-DYgnh6dH.mjs → logs-rd8J-OFh.mjs} +27 -10
  92. package/dist/migrate-BHp07yJE.mjs +2 -0
  93. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  94. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  95. package/dist/{node-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
  96. package/dist/{operator-args-DdY54Bgb.mjs → operator-args-BNsW5gfp.mjs} +10 -1
  97. package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-AzVLbrr3.mjs} +1 -1
  98. package/dist/{operator-client-BFqpp6z0.mjs → operator-client-BQtzyG-g.mjs} +1 -1
  99. package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-B6f6Cg9Z.mjs} +24 -11
  100. package/dist/operator-cmd-Cwn50lOV.mjs +2 -0
  101. package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -2
  102. package/dist/pages/client.d.mts +19 -51
  103. package/dist/pages/client.mjs +204 -225
  104. package/dist/pages/head-client.d.mts +1 -1
  105. package/dist/pages/head.d.mts +1 -1
  106. package/dist/pages/head.mjs +1 -1
  107. package/dist/pages/index.d.mts +2 -2
  108. package/dist/pages/index.mjs +6 -12
  109. package/dist/pages/islands-plugin.d.mts +1 -1
  110. package/dist/pages/islands-plugin.mjs +21 -25
  111. package/dist/pages/protocol.d.mts +2 -2
  112. package/dist/pages/protocol.mjs +2 -2
  113. package/dist/{plan-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
  114. package/dist/plan-CH2G51je.mjs +2 -0
  115. package/dist/{platform-args-DSV2p4nY.mjs → platform-args-BoZkWQnJ.mjs} +1 -1
  116. package/dist/platform-args-DYgITk0D.mjs +2 -0
  117. package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-n603OANg.mjs} +40 -36
  118. package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-zxDr0hWW.mjs} +8 -7
  119. package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-tw9lgtgE.mjs} +7 -6
  120. package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-B8-bCb7t.mjs} +10 -10
  121. package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-C00YM14r.mjs} +1 -1
  122. package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-p0kobLV8.mjs} +5 -5
  123. package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-D_QEY32D.mjs} +75 -386
  124. package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-vFqtNPPa.mjs} +1 -1
  125. package/dist/{platform-management-BrF9STZp.mjs → platform-management-BdYblvvE.mjs} +6 -6
  126. package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-oi-SvI3f.mjs} +1 -1
  127. package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CjiFv5J4.mjs} +5 -4
  128. package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-PvNS9Nl2.mjs} +2 -2
  129. package/dist/platform-setup-DVe42Ws7.mjs +299 -0
  130. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  131. package/dist/prepare-DRUV-g3X.mjs +2 -0
  132. package/dist/{prepare-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
  133. package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
  134. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  135. package/dist/prerender-render.mjs +1 -1
  136. package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-ti8_yTcA.mjs} +18 -18
  137. package/dist/{project-team-Yiww3-go.mjs → project-team-CDPE1Tsg.mjs} +14 -17
  138. package/dist/{project-token-BrtT2NkY.mjs → project-token-CkZ1cN0Z.mjs} +13 -16
  139. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  140. package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-DdjLR61k.mjs} +11 -8
  141. package/dist/{protocol-BX8t2jiw.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  142. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  143. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  144. package/dist/{provision-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
  145. package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  146. package/dist/{requests-TIz_jtSu.mjs → requests-DFAqyYy8.mjs} +4 -4
  147. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  148. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  149. package/dist/{rollback-dBqICPzj.mjs → rollback-BKYXBduI.mjs} +29 -36
  150. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  151. package/dist/route-url-BgPja1GS.d.mts +5 -0
  152. package/dist/route-url-BjGv_KKY.mjs +28 -0
  153. package/dist/runner-9wjsSZx-.mjs +2 -0
  154. package/dist/{runner--2KF6Kua.mjs → runner-DMBKSrRk.mjs} +2 -2
  155. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  156. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  157. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  158. package/dist/runtime/ai.d.mts +1 -1
  159. package/dist/runtime/ai.mjs +34 -95
  160. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  161. package/dist/runtime/better-auth-mysql.mjs +4 -9
  162. package/dist/runtime/better-auth-pg.d.mts +1 -1
  163. package/dist/runtime/better-auth-pg.mjs +5 -10
  164. package/dist/runtime/better-auth.d.mts +1 -1
  165. package/dist/runtime/better-auth.mjs +3 -3
  166. package/dist/runtime/client-react.d.mts +2 -3
  167. package/dist/runtime/client-react.mjs +2 -2
  168. package/dist/runtime/client-solid.d.mts +2 -3
  169. package/dist/runtime/client-solid.mjs +2 -2
  170. package/dist/runtime/client-svelte.d.mts +2 -3
  171. package/dist/runtime/client-svelte.mjs +2 -2
  172. package/dist/runtime/client-vue.d.mts +2 -3
  173. package/dist/runtime/client-vue.mjs +2 -2
  174. package/dist/runtime/client.d.mts +2 -3
  175. package/dist/runtime/client.mjs +2 -2
  176. package/dist/runtime/db.mjs +1 -1
  177. package/dist/runtime/durable.mjs +3 -10
  178. package/dist/runtime/email/testing.mjs +5 -5
  179. package/dist/runtime/email.d.mts +2 -1
  180. package/dist/runtime/email.mjs +11 -27
  181. package/dist/runtime/env-public.mjs +15 -20
  182. package/dist/runtime/env.mjs +1 -1
  183. package/dist/runtime/fetch-stream.d.mts +2 -2
  184. package/dist/runtime/fetch-stream.mjs +1 -1
  185. package/dist/runtime/fetch.d.mts +2 -3
  186. package/dist/runtime/fetch.mjs +1 -1
  187. package/dist/runtime/handler.d.mts +1 -1
  188. package/dist/runtime/handler.mjs +2 -2
  189. package/dist/runtime/isr.mjs +1 -1
  190. package/dist/runtime/kv.mjs +10 -11
  191. package/dist/runtime/live-client.d.mts +1 -1
  192. package/dist/runtime/live-client.mjs +12 -22
  193. package/dist/runtime/live-server.mjs +27 -35
  194. package/dist/runtime/live.d.mts +2 -2
  195. package/dist/runtime/live.mjs +2 -2
  196. package/dist/runtime/migration-handler.mjs +4 -81
  197. package/dist/runtime/queues.mjs +1 -1
  198. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  199. package/dist/runtime/remote/binding-handler.mjs +8 -9
  200. package/dist/runtime/remote/index.mjs +27 -77
  201. package/dist/runtime/route-url.d.mts +2 -4
  202. package/dist/runtime/route-url.mjs +1 -1
  203. package/dist/runtime/routing.d.mts +1 -1
  204. package/dist/runtime/routing.mjs +15 -26
  205. package/dist/runtime/sandbox.mjs +2 -2
  206. package/dist/runtime/sse.mjs +1 -1
  207. package/dist/runtime/storage.mjs +1 -1
  208. package/dist/runtime/validator.d.mts +1 -1
  209. package/dist/runtime/ws-server.d.mts +2 -2
  210. package/dist/runtime/ws-server.mjs +30 -61
  211. package/dist/runtime/ws.d.mts +1 -1
  212. package/dist/runtime/ws.mjs +1 -1
  213. package/dist/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
  214. package/dist/{secret-AKnNXNP5.mjs → secret-BAt2KMmO.mjs} +14 -14
  215. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  216. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  217. package/dist/{subcommand-prompt-B6WS9Aoz.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  218. package/dist/sveltekit.d.mts +0 -2
  219. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  220. package/dist/validate-BJr9LfXy.mjs +2 -0
  221. package/dist/{validate-ymhap6M_.mjs → validate-C9qJArv7.mjs} +9 -28
  222. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  223. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  224. package/dist/{ws-C79j4aED.d.mts → ws-CChrrAU-.d.mts} +1 -1
  225. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  226. package/{skills/void/docs → docs}/guide/ai.md +5 -3
  227. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  228. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  229. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  230. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  231. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  232. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  233. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  234. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  235. package/{skills/void/docs → docs}/guide/live.md +10 -5
  236. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
  237. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  238. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  239. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  240. package/{skills/void/docs → docs}/guide/platform/administration/access.md +2 -10
  241. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  242. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  243. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  244. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  245. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  246. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  247. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +3 -1
  248. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
  249. package/{skills/void/docs → docs}/guide/project-collaboration.md +6 -2
  250. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  251. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  252. package/{skills/void/docs → docs}/guide/sandboxes.md +2 -2
  253. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  254. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  255. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  256. package/docs/integrations/agents.md +37 -0
  257. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  258. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  259. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  260. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  261. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  262. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  263. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  264. package/{skills/void/docs → docs}/reference/cli/auth.md +0 -5
  265. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  266. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  267. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  268. package/{skills/void/docs → docs}/reference/cli/platform-config.md +1 -1
  269. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  270. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
  271. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  272. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  273. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  274. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  275. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  276. package/{skills/void/docs → docs}/reference/cli.md +1 -1
  277. package/{skills/void/docs → docs}/reference/config.md +13 -13
  278. package/{skills/void/docs → docs}/reference/resource-inference.md +1 -16
  279. package/package.json +34 -30
  280. package/schema.json +1 -1
  281. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  282. package/skills/void/SKILL.md +6 -3
  283. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  284. package/dist/client-BxVixJBI.mjs +0 -2
  285. package/dist/config-0acf1oys.mjs +0 -2
  286. package/dist/config-D8MOgiQV.mjs +0 -32
  287. package/dist/deploy-qmiLE1G1.mjs +0 -2
  288. package/dist/discover-AMCBXivQ.mjs +0 -2
  289. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  290. package/dist/gen-qCBwH3fZ.mjs +0 -2
  291. package/dist/help-Dw5f9Xrg.mjs +0 -2
  292. package/dist/login-D7meQg_3.mjs +0 -2
  293. package/dist/migrate-CEu2X5DB.mjs +0 -2
  294. package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
  295. package/dist/plan-COtUvdMA.mjs +0 -2
  296. package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
  297. package/dist/prepare-BBknoZI1.mjs +0 -2
  298. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  299. package/dist/route-url-CG7U-cRN.mjs +0 -15
  300. package/dist/runner-voIltZrY.mjs +0 -2
  301. package/dist/validate-pna7R3Pv.mjs +0 -2
  302. package/skills/void/docs/integrations/agents.md +0 -26
  303. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  304. package/{skills/void/docs → docs}/guide/app-types.md +0 -0
  305. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  306. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  307. package/{skills/void/docs → docs}/guide/database.md +8 -8
  308. package/{skills/void/docs → docs}/guide/deployment.md +0 -0
  309. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  310. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  311. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  312. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  313. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  314. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  315. package/{skills/void/docs → docs}/guide/email.md +0 -0
  316. package/{skills/void/docs → docs}/guide/index.md +0 -0
  317. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  318. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  319. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  320. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  321. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  322. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  323. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  324. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  325. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  326. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +0 -0
  327. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  328. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
  329. package/{skills/void/docs → docs}/guide/platform/installation/uninstall.md +0 -0
  330. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  331. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  332. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  333. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  334. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  335. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  336. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  337. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  338. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  339. package/{skills/void/docs → docs}/index.md +0 -0
  340. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  341. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  342. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  343. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  344. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  345. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  346. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  347. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  348. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  349. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  350. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  351. /package/{skills/void/docs → docs}/reference/api/resources.md +0 -0
  352. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  353. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  354. /package/{skills/void/docs → docs}/reference/api.md +0 -0
  355. /package/{skills/void/docs → docs}/reference/cli/deploy.md +0 -0
  356. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  357. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  358. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  359. /package/{skills/void/docs → docs}/reference/cli/platform.md +0 -0
  360. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -1,14 +1,14 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
3
- import { m as readConfig } from "./config-Br_JZD6u.mjs";
4
- import { a as scanEmailHandlersSync } from "./email--tEtMoj_.mjs";
5
- import { B as resolveDeployTransport, F as isWranglerNonInteractiveOrCI, G as deriveWorkerName, I as runWranglerAuthToken, N as createDeployWranglerRunner, d as applyEmailSetup, f as createNodeEmailDns, g as renderEmailChecklist, h as renderAddressMap, j as discoverRootWranglerConfig, m as preflightEmail, p as findEmailConfigConflicts, q as loadProvisionModule } from "./deploy-CeEbnv4b.mjs";
3
+ import { m as readConfig } from "./config-DiowPT80.mjs";
4
+ import { a as scanEmailHandlersSync } from "./email-d_Aux1vM.mjs";
5
+ import { A as createDeployWranglerRunner, H as loadProvisionModule, L as resolveDeployTransport, M as isWranglerNonInteractiveOrCI, N as runWranglerAuthToken, O as discoverRootWranglerConfig, V as deriveWorkerName, d as applyEmailSetup, f as createNodeEmailDns, g as renderEmailChecklist, h as renderAddressMap, m as preflightEmail, p as findEmailConfigConflicts } from "./deploy-BsEvnlJl.mjs";
6
6
  import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
7
- import { A as writeProvisionedWranglerConfig } from "./wrangler-DhUerFkW.mjs";
8
- import { c as getToken, u as openBrowser } from "./auth-D52yG7hl.mjs";
9
- import { A as confirm, L as log, U as password, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
10
- import { n as PlatformApiError, r as PlatformClient } from "./client-mC-dFGDD.mjs";
11
- import { c as import_picocolors, l as note, r as createSpinner } from "./output-BvdaehtE.mjs";
7
+ import { j as writeProvisionedWranglerConfig } from "./wrangler-D9KTuqnv.mjs";
8
+ import { c as getToken, u as openBrowser } from "./auth-B5_tZLxT.mjs";
9
+ import { A as confirm, L as log, U as password, tt as isCancel } from "./dist-D3m88sjf.mjs";
10
+ import { d as printSuccess, l as import_picocolors, r as createSpinner, u as note } from "./output-C50ag2r3.mjs";
11
+ import { n as PlatformApiError, r as PlatformClient } from "./client-C2Prx_Bi.mjs";
12
12
  import { existsSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
13
13
  import { tmpdir } from "node:os";
14
14
  import { execSync } from "node:child_process";
@@ -82,10 +82,10 @@ async function emailDestinations(client, projectId) {
82
82
  async function emailAllow(client, projectId, address) {
83
83
  const dest = await client.addEmailDestination(projectId, address);
84
84
  const sent = dest.verificationSent !== false && (dest.created || dest.platformVerificationPending);
85
- if (dest.status === "verified") log.success(`${dest.address} is already verified.`);
85
+ if (dest.status === "verified") log.info(`${dest.address} is already verified.`);
86
86
  else if (sent) {
87
- log.success(`Verification email sent to ${dest.address}.`);
88
87
  log.info("They click the link in their inbox — no Void or Cloudflare account needed. `void email destinations` to poll status.");
88
+ printSuccess(`Verification email sent to ${dest.address}.`);
89
89
  } else if (dest.created) log.warn(`${dest.address} is on this project's list now, but Cloudflare already had the address pending (added by another project, or by hand), so no new verification email was sent — the link it mailed when the address was first added is the one to click. ${freshLinkHint(dest.address)}`);
90
90
  else log.info(`${dest.address} is still pending — Cloudflare emailed them a verification link when the address was first added, and a repeat add sends nothing new. ${freshLinkHint(dest.address)}`);
91
91
  }
@@ -104,7 +104,7 @@ async function emailDisallow(client, projectId, address) {
104
104
  process.exit(1);
105
105
  }
106
106
  await client.removeEmailDestination(projectId, dest.id);
107
- log.success(`Removed ${dest.address}. New sends to it are refused immediately; already admitted attempts may finish.`);
107
+ printSuccess(`Removed ${dest.address}. New sends to it are refused immediately; already admitted attempts may finish.`);
108
108
  }
109
109
  async function emailLogs(client, projectId, limit) {
110
110
  const result = await client.getEmailLogs(projectId, limit);
@@ -492,14 +492,18 @@ async function emailDomainAdd(client, projectId, rawDomain, subdomain, deps = {}
492
492
  ].join("\n"), "Email Setup");
493
493
  if (operation.error) log.error(operation.error);
494
494
  log.info(`Run \`void email domain status ${target.emailDomain}\` to inspect setup.`);
495
- if (operation.status === "completed") return;
495
+ if (operation.status === "completed") {
496
+ printSuccess(`Email domain ${target.emailDomain} configured.`);
497
+ return;
498
+ }
496
499
  return fail(`email: setup is ${operation.status}; operation ${operation.operationId} retains its confirmed progress on the platform.`);
497
500
  }
498
501
  return fail(`email: setup outcome is unknown (operation ${attemptId}). Nothing was revoked. Check \`void email domain status ${target.emailDomain}\` before starting another setup.`);
499
502
  }
500
- log.success("Token stored encrypted on the platform for this zone connection — nothing is kept on this machine.");
503
+ log.info("Token stored encrypted on the platform for this zone connection — nothing is kept on this machine.");
501
504
  printEmailDomainOutcome(row);
502
505
  if (row.operationStatus !== "completed") return exit(1);
506
+ printSuccess(`Email domain ${row.domain} configured.`);
503
507
  }
504
508
  function emailDomainStatusText(status) {
505
509
  if (status === "ready") return import_picocolors.default.green("ready");
@@ -542,6 +546,7 @@ async function emailDomainSync(client, projectId, rawDomain) {
542
546
  const row = await client.syncEmailDomain(projectId, domain);
543
547
  printEmailDomainOutcome(row);
544
548
  if (row.operationStatus !== "completed") throw new Error(`email: reconciliation ${row.operationStatus ?? "pending"}; inspect operation ${row.operationId ?? row.domain}`);
549
+ printSuccess(`Email domain ${domain} reconciled.`);
545
550
  }
546
551
  /** Rotation applies to every domain sharing this zone connection. */
547
552
  async function emailDomainRotateSecret(client, projectId, rawDomain, deps = {}) {
@@ -574,14 +579,14 @@ async function emailDomainRotateSecret(client, projectId, rawDomain, deps = {})
574
579
  `Credential: ${operation.readiness.management.status}`
575
580
  ].join("\n"), "Email Secret Rotation");
576
581
  if (operation.status !== "completed") throw new Error(`email: secret rotation ${operation.status}; inspect operation ${operation.operationId}`);
577
- log.success("Zone ingress secret rotated and verified on the deployed Worker.");
582
+ printSuccess("Zone ingress secret rotated and verified on the deployed Worker.");
578
583
  return;
579
584
  }
580
585
  throw new Error(`email: secret rotation outcome is unknown (operation key ${attemptId}); inspect \`void email domain status ${domain}\` before starting another rotation.`);
581
586
  }
582
587
  printEmailDomainOutcome(row);
583
588
  if (row.operationStatus !== "completed") throw new Error(`email: secret rotation ${row.operationStatus ?? "pending"}; inspect operation ${row.operationId ?? row.domain}`);
584
- log.success("Zone ingress secret rotated and verified on the deployed Worker.");
589
+ printSuccess("Zone ingress secret rotated and verified on the deployed Worker.");
585
590
  }
586
591
  async function emailDomainRemove(client, projectId, rawDomain, options = {}) {
587
592
  const domain = normalizeEmailDomainInput(rawDomain);
@@ -592,7 +597,7 @@ async function emailDomainRemove(client, projectId, rawDomain, options = {}) {
592
597
  (options.exit ?? ((code) => process.exit(code)))(1);
593
598
  return;
594
599
  }
595
- log.success(`Removed ${domain}. Zone resources still used by other domains were retained.`);
600
+ printSuccess(`Removed ${domain}. Zone resources still used by other domains were retained.`);
596
601
  }
597
602
  async function runEmailDomainCommand(client, projectId, args) {
598
603
  switch (args.domainVerb) {
@@ -736,7 +741,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
736
741
  pendingLabel: "(no rule yet)"
737
742
  }));
738
743
  if (pre.ready) {
739
- log.success(`Email is set up on ${pre.domain}.`);
744
+ log.info(`Email is set up on ${pre.domain}.`);
740
745
  return;
741
746
  }
742
747
  log.warn(`Email is not set up on ${pre.domain} yet — run \`void email setup --platform cloudflare\`.`);
@@ -776,7 +781,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
776
781
  return exit(1);
777
782
  }
778
783
  if ((out.patch.addresses ?? []).length > 0) log.info("Routing rules are created by the next `void deploy --platform cloudflare`, which applies the Email Routing plan from `addresses`.");
779
- log.success(`Email set up on ${pre.domain}.`);
784
+ printSuccess(`Email set up on ${pre.domain}.`);
780
785
  }
781
786
  //#endregion
782
787
  export { runEmailCommand };
@@ -4,7 +4,7 @@ import { n as globSync, t as glob } from "./dist-Bn8Kodjp.mjs";
4
4
  /**
5
5
  * Scan `email/` for inbound email handlers.
6
6
  *
7
- * The `email/` directory sits at the project root alongside `crons/` and
7
+ * The `email/` directory sits at the source root alongside `crons/` and
8
8
  * `queues/` — non-HTTP handlers all live at the top level, since each is
9
9
  * wired into a separate worker export (`scheduled`, `queue`, `email`).
10
10
  *
@@ -4,8 +4,10 @@ import { n as isIdentifier } from "./ast-CPGPjb0V.mjs";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  import { parseSync } from "vite";
6
6
  //#region src/ssr/entry.ts
7
- const SSR_SERVER_ENTRY_RELATIVE_PATHS = ["src/main.ssr.ts", "src/main.ssr.tsx"];
8
- const SSR_CLIENT_ENTRY_RELATIVE_PATHS = ["src/main.client.ts", "src/main.client.tsx"];
7
+ const SSR_SERVER_ENTRY_NAMES = ["main.ssr.ts", "main.ssr.tsx"];
8
+ const SSR_CLIENT_ENTRY_NAMES = ["main.client.ts", "main.client.tsx"];
9
+ const SSR_SERVER_ENTRY_RELATIVE_PATHS = SSR_SERVER_ENTRY_NAMES.map((name) => `src/${name}`);
10
+ const SSR_CLIENT_ENTRY_RELATIVE_PATHS = SSR_CLIENT_ENTRY_NAMES.map((name) => `src/${name}`);
9
11
  function resolveSingleEntry(root, entries, label, paths = readProjectPaths(root)) {
10
12
  const matches = entries.map((entryName) => ({
11
13
  relativePath: relative(root, join(paths.ssrDir, entryName)),
@@ -18,8 +20,6 @@ function resolveSingleEntry(root, entries, label, paths = readProjectPaths(root)
18
20
  }
19
21
  return matches[0];
20
22
  }
21
- const SSR_SERVER_ENTRY_NAMES = ["main.ssr.ts", "main.ssr.tsx"];
22
- const SSR_CLIENT_ENTRY_NAMES = ["main.client.ts", "main.client.tsx"];
23
23
  function getSsrServerEntryPath(root, paths = readProjectPaths(root)) {
24
24
  return resolveSingleEntry(root, SSR_SERVER_ENTRY_NAMES, "SSR", paths)?.absolutePath ?? null;
25
25
  }
@@ -68,8 +68,8 @@ function validateSsrEntries(root, paths = readProjectPaths(root)) {
68
68
  const server = resolveSingleEntry(root, SSR_SERVER_ENTRY_NAMES, "SSR", paths);
69
69
  const client = resolveSingleEntry(root, SSR_CLIENT_ENTRY_NAMES, "SSR client", paths);
70
70
  if (!server && !client) return null;
71
- if (server && !client) throw new Error(`ssr: Missing client entry. Add one of: ${SSR_CLIENT_ENTRY_RELATIVE_PATHS.join(", ")}.`);
72
- if (!server && client) throw new Error(`ssr: Missing server entry. Add one of: ${SSR_SERVER_ENTRY_RELATIVE_PATHS.join(", ")}.`);
71
+ if (!client) throw new Error(`ssr: Missing client entry. Add one of: ${SSR_CLIENT_ENTRY_RELATIVE_PATHS.join(", ")}.`);
72
+ if (!server) throw new Error(`ssr: Missing server entry. Add one of: ${SSR_SERVER_ENTRY_RELATIVE_PATHS.join(", ")}.`);
73
73
  validateServerRenderExport(server);
74
74
  return {
75
75
  server,
@@ -1,5 +1,5 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { n as parseDotenvFile } from "./dotenv-VQxupEUv.mjs";
2
+ import { t as parseDotenvFile } from "./dotenv-BfU6eqFt.mjs";
3
3
  import { readdirSync } from "node:fs";
4
4
  //#region src/shared/env.ts
5
5
  /** Void's single local dotenv file. It is never a production configuration source. */
@@ -41,12 +41,12 @@ function findLegacyEnvFiles(root) {
41
41
  * Tri-state override semantics:
42
42
  * - `VOID_REMOTE=1` → force remote mode on
43
43
  * - `VOID_REMOTE=0` → force remote mode off (e.g. local/CI builds of a
44
- * project whose `void.json` has `remote: true`)
44
+ * project whose `void.config.ts` sets `remote: true`)
45
45
  * - unset / any other value → fall back to `config.remote`
46
46
  *
47
- * Both the dev-server plugin (index.ts) and the prerender build plugin
48
- * (plugin-prerender.ts) must derive `remoteMode` through this helper so
49
- * dev and build stay in lockstep.
47
+ * The dev-server plugin (index.ts), the prerender build plugin
48
+ * (plugin-prerender.ts), and managed deploy (cli/deploy-managed-full.ts) must
49
+ * derive `remoteMode` through this helper so dev and build stay in lockstep.
50
50
  */
51
51
  function resolveRemoteMode(configRemote) {
52
52
  const override = process.env.VOID_REMOTE;
@@ -54,6 +54,25 @@ function resolveRemoteMode(configRemote) {
54
54
  if (override === "0") return false;
55
55
  return configRemote === true;
56
56
  }
57
+ /**
58
+ * Names starting with this prefix are reserved for Void. Void sets them
59
+ * itself (proxy credentials, email and AI wiring), so `.env` and `env.ts`
60
+ * must not define them: Wrangler loads `.env` into the dev Worker on its own
61
+ * and writes it over `vars`, so dropping keys from `vars` cannot keep them
62
+ * out. `envSchemaPlugin` and `void env check` reject them instead.
63
+ */
64
+ const RESERVED_ENV_PREFIX = "__VOID_";
65
+ /** Names in `keys` that use the reserved `__VOID_` prefix, in input order. */
66
+ function findReservedEnvKeys(keys) {
67
+ return Array.from(keys).filter((key) => key.startsWith(RESERVED_ENV_PREFIX));
68
+ }
69
+ /**
70
+ * The error for reserved names found in `.env` or `env.ts`. Shared by the
71
+ * Vite plugin and `void env check` so both print the same text.
72
+ */
73
+ function reservedEnvKeysMessage(source, keys) {
74
+ return `${source} ${source === ".env" ? "defines" : "declares"} names reserved for Void: ${keys.join(", ")}. Void sets these itself; remove them. To trigger crons or queues locally, use the x-void-dev-trigger header printed at dev start.`;
75
+ }
57
76
  const INTERNAL_ENV_KEY_SET = /* @__PURE__ */ new Set([
58
77
  "__VOID_ACCESS_CREDENTIALS",
59
78
  "__VOID_TOKEN",
@@ -93,4 +112,4 @@ function stripInternalEnvKeys(input) {
93
112
  };
94
113
  }
95
114
  //#endregion
96
- export { loadLocalEnv as a, isClientEnvKey as i, CLOUDFLARE_DEPLOY_BUILD_ENV as n, resolveRemoteMode as o, findLegacyEnvFiles as r, stripInternalEnvKeys as s, CLIENT_ENV_PREFIX as t };
115
+ export { isClientEnvKey as a, resolveRemoteMode as c, findReservedEnvKeys as i, stripInternalEnvKeys as l, LOCAL_ENV_FILE as n, loadLocalEnv as o, findLegacyEnvFiles as r, reservedEnvKeysMessage as s, CLOUDFLARE_DEPLOY_BUILD_ENV as t };
@@ -1,4 +1,4 @@
1
- import { a as getRawRuntimeEnv, i as envContext, n as INTERNAL_BINDING_PREFIXES, o as isIsrActive, r as asEnv, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-Cx8ElDdj.mjs";
1
+ import { a as getRawRuntimeEnv, i as envContext, n as INTERNAL_BINDING_PREFIXES, o as isIsrActive, r as asEnv, t as INTERNAL_BINDING_EXACT_NAMES } from "./env-raw-jZpP5n47.mjs";
2
2
  import { AsyncLocalStorage } from "node:async_hooks";
3
3
  //#region src/runtime/env.ts
4
4
  /**
@@ -4,8 +4,7 @@ import { AsyncLocalStorage } from "node:async_hooks";
4
4
  * Raw runtime env resolution — framework-internal only.
5
5
  *
6
6
  * This module is NOT exported in package.json, so it cannot be imported
7
- * via "void/..." subpaths. Only framework modules using relative imports
8
- * (isr.ts, ai.ts, env.ts) can access it.
7
+ * via "void/..." subpaths. Only framework modules can import it by relative path.
9
8
  */
10
9
  /** Prefixes for platform-internal bindings that must be hidden from user code. */
11
10
  const INTERNAL_BINDING_PREFIXES = ["__VOID_", "__PROJECT_"];
@@ -24,7 +24,7 @@ function findEnvFileForPaths(root, paths) {
24
24
  * - `void/env`'s `ValidatedEnv` so `env.X` is typed
25
25
  * - `void/handler`'s `CloudBindings` so `c.env.X` is typed
26
26
  *
27
- * Uses `typeof import("../env.ts").default` so TypeScript handles the
27
+ * Uses `typeof import(...)` on the env schema file so TypeScript handles the
28
28
  * inference — codegen never analyses types itself.
29
29
  *
30
30
  * @param envFileAbs Absolute path to the user's env schema file.
@@ -1,2 +1,2 @@
1
- import { a as computeInvalidEmittedKeys, c as deriveSelfHostSchemaFacts, p as readEmittedWorkerVars, r as SelfHostSchemaError } from "./env-validation-vBSQ8gw5.mjs";
1
+ import { a as computeInvalidEmittedKeys, c as deriveSelfHostSchemaFacts, p as readEmittedWorkerVars, r as SelfHostSchemaError } from "./env-validation-Dxdx_5wo.mjs";
2
2
  export { SelfHostSchemaError, computeInvalidEmittedKeys, deriveSelfHostSchemaFacts, readEmittedWorkerVars };
@@ -1,8 +1,9 @@
1
1
  import { a as join, n as dirname, u as resolve } from "./dist-BVqXeR_h.mjs";
2
2
  import { i as voidWarn } from "./log-vqY3pqwI.mjs";
3
- import { t as findEnvFile } from "./env-types-D5kds_OZ.mjs";
4
- import { a as loadLocalEnv, i as isClientEnvKey, r as findLegacyEnvFiles } from "./env-_v349JBd.mjs";
5
- import { c as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-B-wekeR6.mjs";
3
+ import { n as scanWranglerDotenvKeys } from "./dotenv-BfU6eqFt.mjs";
4
+ import { a as isClientEnvKey, i as findReservedEnvKeys, n as LOCAL_ENV_FILE, o as loadLocalEnv, r as findLegacyEnvFiles, s as reservedEnvKeysMessage } from "./env-BxocywBB.mjs";
5
+ import { t as findEnvFile } from "./env-types-CwXgeMgL.mjs";
6
+ import { l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-2-TfIEzB.mjs";
6
7
  import { existsSync, readFileSync } from "node:fs";
7
8
  import { pathToFileURL } from "node:url";
8
9
  import { parse } from "jsonc-parser";
@@ -29,11 +30,7 @@ import { spawn } from "node:child_process";
29
30
  * that ships in worker bundles.
30
31
  */
31
32
  let loadCounter = 0;
32
- /**
33
- * Returns the specifier from a Node resolution error if the error looks
34
- * like one — otherwise `null`. Both `ERR_MODULE_NOT_FOUND` and
35
- * `ERR_UNSUPPORTED_DIR_IMPORT` have the specifier embedded in the message.
36
- */
33
+ /** Returns the failed specifier from a Node module-resolution error, or `null`. */
37
34
  function extractFailedSpecifier(err) {
38
35
  if (!(err instanceof Error)) return null;
39
36
  const code = err.code;
@@ -132,6 +129,8 @@ function emptyReport() {
132
129
  async function validateProdEnv(root, options) {
133
130
  const legacyFiles = findLegacyEnvFiles(root);
134
131
  if (legacyFiles.length > 0) throw new Error(`env: only .env is supported for local development. Remove ${legacyFiles.join(", ")} and follow the env migration guide.`);
132
+ const reservedInDotenv = options.productionOnly ? [] : findReservedEnvKeys(scanWranglerDotenvKeys(join(root, LOCAL_ENV_FILE)));
133
+ if (reservedInDotenv.length > 0) throw new Error(`env: ${reservedEnvKeysMessage(".env", reservedInDotenv)}`);
135
134
  const envFile = findEnvFile(root);
136
135
  if (!envFile) return {
137
136
  hasSchema: false,
@@ -142,6 +141,8 @@ async function validateProdEnv(root, options) {
142
141
  hasSchema: false,
143
142
  report: emptyReport()
144
143
  };
144
+ const reservedInSchema = findReservedEnvKeys(Object.keys(mod._getRegisteredSchema() ?? {}));
145
+ if (reservedInSchema.length > 0) throw new Error(`env: ${reservedEnvKeysMessage("env.ts", reservedInSchema)}`);
145
146
  const local = options.productionOnly ? {} : loadLocalEnv(root, { onWarn: (message) => voidWarn(message) });
146
147
  const shell = options.productionOnly ? Object.fromEntries(Object.entries(process.env).filter(([key]) => isClientEnvKey(key))) : process.env;
147
148
  const merged = {
@@ -307,8 +308,8 @@ function selfHostSchemaFailureMessage(reason) {
307
308
  * its message, stack, or cause (and `VOID_ENV_UNMASK` disables redaction). Any
308
309
  * throw/reject from `fn` is caught, its original message/stack/cause DROPPED,
309
310
  * and a fixed structural {@link SelfHostSchemaError} rethrown in its place. The
310
- * managed `validateProdEnv` itself is NEVER wrapped — only the self-host CALL
311
- * SITES pass through here, so the managed path is byte-identical.
311
+ * managed `validateProdEnv` itself is NEVER wrapped — only the self-host call
312
+ * sites pass through here.
312
313
  */
313
314
  async function withSchemaBoundary(reason, fn) {
314
315
  try {
@@ -501,10 +502,9 @@ function invalidEnvReport(missing, invalidKeys) {
501
502
  }
502
503
  /**
503
504
  * DISCHARGE half of the self-host gate — PURE parent work over the values-free
504
- * {@link SelfHostEnvContext} the subprocess derived, plus at most one `wrangler
505
- * secret list`. Runs NO project code, NO `loadEnv`, and imports NO env.ts, so the
506
- * parent never evaluates arbitrary code with live credentials in scope. Applies
507
- * the three fences unchanged:
505
+ * {@link SelfHostEnvContext}, plus at most one `wrangler secret list`. Runs NO
506
+ * project code, NO `loadEnv`, and imports NO env.ts, so the parent never
507
+ * evaluates arbitrary code with live credentials in scope. Applies three fences:
508
508
  * - a PRESENT-EMPTY required key fails closed ALWAYS, before any wrangler spawn;
509
509
  * - the pinned worker `name` is reconciled against the config's `name`, and the
510
510
  * target account against the config's `account_id`, BOTH BEFORE `secret list`
@@ -686,13 +686,9 @@ function describeVarSource(source) {
686
686
  * config var precedence over a same-named remote secret (`checkRemoteSecretsOverride`
687
687
  * in wrangler-dist/cli.js warns "… will replace these remote secrets with the
688
688
  * configuration values"), so shipping this would ship an empty value for a
689
- * required secret (overwriting a remote one if it exists). The fix is to REMOVE
690
- * the empty assignment, not `secret put`.
691
- *
692
- * The empty value can come from ANY of the four build layers, so the
693
- * remediation names each key's ACTUAL source (its {@link VarSource} provenance)
694
- * — a dotenv file / `void.json` `worker.vars` / root `wrangler.jsonc` `vars` —
695
- * instead of misdirecting the user to `.env` files.
689
+ * required secret (overwriting a remote one if it exists). The remedy is to
690
+ * REMOVE the empty assignment, not `secret put`. The remediation names each
691
+ * key's source (its {@link VarSource} provenance).
696
692
  */
697
693
  function emptyAssignmentError(keys, sources) {
698
694
  const sorted = [...keys].sort((a, b) => a.localeCompare(b));
@@ -1,11 +1,11 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DQstYTxO.mjs";
3
- import { c as getToken } from "./auth-D52yG7hl.mjs";
4
- import { r as generateEnvTypes, t as findEnvFile } from "./env-types-D5kds_OZ.mjs";
5
- import { d as formatEnvReport, g as validateProdEnv, u as fetchRemoteSecretNames } from "./env-validation-vBSQ8gw5.mjs";
6
- import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
7
- import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
8
- import { l as note } from "./output-BvdaehtE.mjs";
3
+ import { c as getToken } from "./auth-B5_tZLxT.mjs";
4
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
5
+ import { d as printSuccess, u as note } from "./output-C50ag2r3.mjs";
6
+ import { r as generateEnvTypes, t as findEnvFile } from "./env-types-CwXgeMgL.mjs";
7
+ import { d as formatEnvReport, g as validateProdEnv, u as fetchRemoteSecretNames } from "./env-validation-Dxdx_5wo.mjs";
8
+ import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
9
9
  import { mkdirSync, writeFileSync } from "node:fs";
10
10
  //#region src/cli/env.ts
11
11
  async function runEnvCommand(root, args) {
@@ -25,7 +25,7 @@ async function runCheck(root, useRemoteSecrets) {
25
25
  const platform = readDeploymentPlatform(root);
26
26
  if (platform === "none") throw new Error("env: Deployment is disabled. Run `void init` to choose a platform.");
27
27
  if (platform === "cloudflare") {
28
- const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-DoQrVHAt.mjs");
28
+ const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BlYLlowZ.mjs");
29
29
  remoteSecrets = await listCloudflareSecrets(resolveCloudflareOperationContext(root));
30
30
  } else {
31
31
  const token = getToken(root);
@@ -51,7 +51,7 @@ async function runCheck(root, useRemoteSecrets) {
51
51
  return;
52
52
  }
53
53
  if (report.valid) {
54
- outro(useRemoteSecrets ? "All required remote env names are present; values validate at runtime." : "Local .env values are valid.");
54
+ printSuccess(useRemoteSecrets ? "All required remote env names are present; values validate at runtime." : "Local .env values are valid.");
55
55
  return;
56
56
  }
57
57
  note(formatEnvReport(report), "Env validation failed");
@@ -68,7 +68,7 @@ function runTypes(root) {
68
68
  mkdirSync(outDir, { recursive: true });
69
69
  const { dts } = generateEnvTypes(envFile, outDir);
70
70
  writeFileSync(join(outDir, "env.d.ts"), dts);
71
- outro(`Wrote ${join(".void", "env.d.ts")}.`);
71
+ printSuccess(`Wrote ${join(".void", "env.d.ts")}.`);
72
72
  }
73
73
  //#endregion
74
74
  export { runEnvCommand };
@@ -1,4 +1,23 @@
1
1
  import { RouteMap } from "void/routes";
2
+ //#region src/runtime/fetch-error.d.ts
3
+ type FetchResponse<T = unknown> = Response & {
4
+ _data?: T;
5
+ };
6
+ type FetchError<T = unknown> = Error & {
7
+ request?: RequestInfo;
8
+ options?: RequestInit & Record<string, unknown>;
9
+ response?: FetchResponse<T>;
10
+ data?: T;
11
+ status?: number;
12
+ statusText?: string;
13
+ statusCode?: number;
14
+ statusMessage?: string;
15
+ };
16
+ type FetchErrorConstructor = new <T = unknown>(message: string, opts?: {
17
+ cause: unknown;
18
+ }) => FetchError<T>;
19
+ declare const FetchError: FetchErrorConstructor;
20
+ //#endregion
2
21
  //#region src/runtime/fetch.d.ts
3
22
  type MethodsOf<P extends keyof RouteMap> = keyof RouteMap[P] & string;
4
23
  type DefaultMethod<P extends keyof RouteMap> = "GET" extends MethodsOf<P> ? "GET" : never;
@@ -54,4 +73,4 @@ type FetchOptions<P extends keyof RouteMap, M extends MethodsOf<P>> = BodyOption
54
73
  declare function fetch<P extends keyof RouteMap & string>(path: HasRequiredInput<P, DefaultMethod<P>> extends false ? P : never): Promise<OutputOf<P, DefaultMethod<P>>>;
55
74
  declare function fetch<P extends keyof RouteMap & string, M extends MethodsOf<P> = DefaultMethod<P>>(path: P, options: FetchOptions<P, M>): Promise<OutputOf<P, M>>;
56
75
  //#endregion
57
- export { fetch as t };
76
+ export { fetch as a, QueryOption as i, MethodsOf as n, FetchError as o, ParamsOption as r, BodyOption as t };
@@ -1,5 +1,5 @@
1
1
  import { n as ofetch } from "./fetch-error-Dj3crt0e.mjs";
2
- import { t as interpolateRouteParams } from "./route-url-CG7U-cRN.mjs";
2
+ import { t as interpolateRouteParams } from "./route-url-BjGv_KKY.mjs";
3
3
  //#region src/runtime/fetch.ts
4
4
  async function fetch(path, options) {
5
5
  const url = interpolateRouteParams(path, options?.params);
@@ -1,5 +1,5 @@
1
1
  import { n as ofetch, t as FetchError } from "./fetch-error-Dj3crt0e.mjs";
2
- import { t as interpolateRouteParams } from "./route-url-CG7U-cRN.mjs";
2
+ import { t as interpolateRouteParams } from "./route-url-BjGv_KKY.mjs";
3
3
  import { n as asUsageLimit, r as limitFromResponse } from "./limits-D0vD1M9A.mjs";
4
4
  //#region src/runtime/fetch-stream.ts
5
5
  /**
@@ -74,35 +74,30 @@ async function* fetchStream(path, options) {
74
74
  const data = trimmed.slice(6);
75
75
  terminal(data);
76
76
  if (data === "[DONE]") return;
77
- try {
78
- const parsed = JSON.parse(data);
79
- if (typeof parsed.response === "string") {
80
- yield parsed.response;
81
- continue;
82
- }
83
- if ("response" in parsed) continue;
84
- } catch {}
85
- yield data;
77
+ const chunk = chunkText(data);
78
+ if (chunk !== void 0) yield chunk;
86
79
  }
87
80
  }
88
81
  }
89
- if (buffer.trim()) {
90
- const trimmed = buffer.trim();
91
- if (trimmed.startsWith("data: ")) {
92
- const data = trimmed.slice(6);
93
- terminal(data);
94
- if (data !== "[DONE]") try {
95
- const parsed = JSON.parse(data);
96
- if (typeof parsed.response === "string") yield parsed.response;
97
- else if (!("response" in parsed)) yield data;
98
- } catch {
99
- yield data;
100
- }
101
- }
82
+ const trimmed = buffer.trim();
83
+ if (trimmed.startsWith("data: ")) {
84
+ const data = trimmed.slice(6);
85
+ terminal(data);
86
+ const chunk = data === "[DONE]" ? void 0 : chunkText(data);
87
+ if (chunk !== void 0) yield chunk;
102
88
  }
103
89
  } finally {
104
90
  reader.releaseLock();
105
91
  }
106
92
  }
93
+ /** Workers AI frames carry text in `response`; other JSON with that key (e.g. usage metadata) is skipped. */
94
+ function chunkText(data) {
95
+ try {
96
+ const parsed = JSON.parse(data);
97
+ if (typeof parsed.response === "string") return parsed.response;
98
+ if ("response" in parsed) return;
99
+ } catch {}
100
+ return data;
101
+ }
107
102
  //#endregion
108
103
  export { fetchStream as t };
@@ -1,24 +1,9 @@
1
+ import { i as QueryOption, n as MethodsOf, r as ParamsOption, t as BodyOption } from "./fetch-BPCYVi3H.mjs";
1
2
  import { RouteMap } from "void/routes";
2
3
  //#region src/runtime/fetch-stream.d.ts
3
- type MethodsOf<P extends keyof RouteMap> = keyof RouteMap[P] & string;
4
4
  type InputOf<P extends keyof RouteMap, M extends MethodsOf<P>> = RouteMap[P][M] extends {
5
5
  input: infer I;
6
6
  } ? I : {};
7
- type BodyOption<I> = "body" extends keyof I ? {
8
- body: I["body" & keyof I];
9
- } : {
10
- body?: Record<string, unknown> | BodyInit | null;
11
- };
12
- type QueryOption<I> = "query" extends keyof I ? {
13
- query: I["query" & keyof I];
14
- } : {
15
- query?: Record<string, string>;
16
- };
17
- type ParamsOption<I> = "params" extends keyof I ? {
18
- params: I["params" & keyof I];
19
- } : {
20
- params?: Record<string, string>;
21
- };
22
7
  type StreamOptions<P extends keyof RouteMap, M extends MethodsOf<P>> = BodyOption<InputOf<P, M>> & QueryOption<InputOf<P, M>> & ParamsOption<InputOf<P, M>> & {
23
8
  method?: M;
24
9
  headers?: HeadersInit;