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
@@ -2,13 +2,14 @@
2
2
  import { n as __toESM } from "../rolldown-runtime-DXIUcv95.mjs";
3
3
  import { a as join, n as dirname, u as resolve } from "../dist-BVqXeR_h.mjs";
4
4
  import { t as require_picocolors } from "../picocolors-BTps1_gs.mjs";
5
+ import { t as sanitizeTerminalLogText } from "../terminal-log-text-D9ACPOuG.mjs";
5
6
  import { copyFileSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
6
7
  import { fileURLToPath } from "node:url";
7
8
  import { tmpdir } from "node:os";
8
9
  import { parse } from "jsonc-parser";
9
10
  import { stripVTControlCharacters } from "node:util";
10
11
  import { spawn, spawnSync } from "node:child_process";
11
- import { EnvHttpProxyAgent, fetch as fetch$1 } from "undici";
12
+ import { setGlobalProxyFromEnv } from "node:http";
12
13
  import { getCloudflareAuthUseKeyringFromEnv } from "@cloudflare/workers-auth";
13
14
  import { createCfAuth, createCfProfileStore, readUserPreferences, setKeyringPreference } from "@cloudflare/workers-auth/cf";
14
15
  //#region src/cli/cf-session.ts
@@ -40,8 +41,9 @@ function readCfSessionCredential(root, identity) {
40
41
  const auth = session(root);
41
42
  if (identity.authSource !== `OAuth token from ${auth.getCredentialStore().path()}`) return null;
42
43
  const token = auth.readAuthCredentials()?.oauth_token;
43
- if (typeof token === "string" && token.length > 0) persistCfKeyringPreference(root);
44
- return typeof token === "string" && token.length > 0 ? token : null;
44
+ if (typeof token !== "string" || token.length === 0) return null;
45
+ persistCfKeyringPreference(root);
46
+ return token;
45
47
  }
46
48
  /** Keep subsequent cf logins on the encrypted profile adopted by Void. */
47
49
  function persistCfKeyringPreference(root) {
@@ -81,6 +83,13 @@ const operation = (() => {
81
83
  }
82
84
  })();
83
85
  process.env.CLOUDFLARE_AUTH_USE_KEYRING ??= "true";
86
+ if (hasProxyEnvironment(process.env)) setGlobalProxyFromEnv();
87
+ function hasProxyEnvironment(env) {
88
+ return Boolean(env.HTTP_PROXY || env.HTTPS_PROXY || env.http_proxy || env.https_proxy);
89
+ }
90
+ function apiBaseUrl() {
91
+ return (process.env.CLOUDFLARE_API_BASE_URL ?? "https://api.cloudflare.com/client/v4").replace(/\/$/, "");
92
+ }
84
93
  function cfEnvironment() {
85
94
  const env = {
86
95
  ...process.env,
@@ -89,7 +98,7 @@ function cfEnvironment() {
89
98
  CF_NO_OSC_PROGRESS: "1",
90
99
  CLOUDFLARE_AUTH_USE_KEYRING: process.env.CLOUDFLARE_AUTH_USE_KEYRING
91
100
  };
92
- if (env.HTTP_PROXY || env.HTTPS_PROXY || env.http_proxy || env.https_proxy) env.NODE_USE_ENV_PROXY = "1";
101
+ if (hasProxyEnvironment(env)) env.NODE_USE_ENV_PROXY = "1";
93
102
  for (const [canonical, alias] of [
94
103
  ["CLOUDFLARE_API_TOKEN", "CF_API_TOKEN"],
95
104
  ["CLOUDFLARE_API_KEY", "CF_API_KEY"],
@@ -219,7 +228,7 @@ async function withBuildOutput(raw, sourceMain, action) {
219
228
  }), { mode: 384 });
220
229
  const accountId = process.env.CLOUDFLARE_ACCOUNT_ID ?? raw.account_id;
221
230
  if (typeof accountId !== "string" || !accountId) throw new Error("Cloudflare account is not pinned for Worker deployment.");
222
- const { prepareCfBuildOutput } = await import("../cf-build-output-ChY6-XWP.mjs");
231
+ const { prepareCfBuildOutput } = await import("../cf-build-output-H9a97vME.mjs");
223
232
  const output = await prepareCfBuildOutput(scratch, accountId);
224
233
  if (!output) throw new Error("Could not prepare the Cloudflare Worker build output.");
225
234
  try {
@@ -291,80 +300,62 @@ function accountId() {
291
300
  return accountId;
292
301
  }
293
302
  async function cloudflareApiGet(path, failure, extraHeaders = {}) {
294
- const url = `${(process.env.CLOUDFLARE_API_BASE_URL ?? "https://api.cloudflare.com/client/v4").replace(/\/$/, "")}${path}`;
295
- const proxy = process.env.HTTP_PROXY || process.env.HTTPS_PROXY || process.env.http_proxy || process.env.https_proxy ? new EnvHttpProxyAgent() : null;
296
- try {
297
- const response = await fetch$1(url, {
298
- headers: {
299
- ...await apiHeaders(),
300
- ...extraHeaders
301
- },
302
- redirect: "error",
303
- signal: AbortSignal.timeout(3e4),
304
- ...proxy ? { dispatcher: proxy } : {}
305
- });
306
- const body = object(await response.json());
307
- if (!response.ok || body.success !== true) throw new Error(`${failure} (HTTP ${response.status})`);
308
- return body;
309
- } finally {
310
- await proxy?.close();
311
- }
303
+ const url = `${apiBaseUrl()}${path}`;
304
+ const response = await fetch(url, {
305
+ headers: {
306
+ ...await apiHeaders(),
307
+ ...extraHeaders
308
+ },
309
+ redirect: "error",
310
+ signal: AbortSignal.timeout(3e4)
311
+ });
312
+ const body = object(await response.json());
313
+ if (!response.ok || body.success !== true) throw new Error(`${failure} (HTTP ${response.status})`);
314
+ return body;
312
315
  }
313
316
  async function clearWorkerCronSchedules(worker) {
314
- const endpoint = `${(process.env.CLOUDFLARE_API_BASE_URL ?? "https://api.cloudflare.com/client/v4").replace(/\/$/, "")}/accounts/${encodeURIComponent(accountId())}/workers/scripts/${encodeURIComponent(worker)}/schedules`;
315
- const proxy = process.env.HTTP_PROXY || process.env.HTTPS_PROXY || process.env.http_proxy || process.env.https_proxy ? new EnvHttpProxyAgent() : null;
316
- try {
317
- const response = await fetch$1(endpoint, {
318
- method: "PUT",
319
- headers: {
320
- ...await apiHeaders(),
321
- "Content-Type": "application/json"
322
- },
323
- body: "[]",
324
- redirect: "error",
325
- signal: AbortSignal.timeout(3e4),
326
- ...proxy ? { dispatcher: proxy } : {}
327
- });
328
- const body = object(await response.json());
329
- const schedules = object(body.result).schedules;
330
- if (!response.ok || body.success !== true || !Array.isArray(schedules) || schedules.length !== 0) throw new Error(`Cloudflare did not clear the Worker Cron Triggers (HTTP ${response.status}).`);
331
- return result(0);
332
- } finally {
333
- await proxy?.close();
334
- }
317
+ const endpoint = `${apiBaseUrl()}/accounts/${encodeURIComponent(accountId())}/workers/scripts/${encodeURIComponent(worker)}/schedules`;
318
+ const response = await fetch(endpoint, {
319
+ method: "PUT",
320
+ headers: {
321
+ ...await apiHeaders(),
322
+ "Content-Type": "application/json"
323
+ },
324
+ body: "[]",
325
+ redirect: "error",
326
+ signal: AbortSignal.timeout(3e4)
327
+ });
328
+ const body = object(await response.json());
329
+ const schedules = object(body.result).schedules;
330
+ if (!response.ok || body.success !== true || !Array.isArray(schedules) || schedules.length !== 0) throw new Error(`Cloudflare did not clear the Worker Cron Triggers (HTTP ${response.status}).`);
331
+ return result(0);
335
332
  }
336
333
  async function clearWorkerCustomDomains(worker) {
337
- const endpoint = `${(process.env.CLOUDFLARE_API_BASE_URL ?? "https://api.cloudflare.com/client/v4").replace(/\/$/, "")}/accounts/${encodeURIComponent(accountId())}/workers/scripts/${encodeURIComponent(worker)}/domains/records`;
338
- const proxy = process.env.HTTP_PROXY || process.env.HTTPS_PROXY || process.env.http_proxy || process.env.https_proxy ? new EnvHttpProxyAgent() : null;
334
+ const endpoint = `${apiBaseUrl()}/accounts/${encodeURIComponent(accountId())}/workers/scripts/${encodeURIComponent(worker)}/domains/records`;
335
+ const response = await fetch(endpoint, {
336
+ method: "PUT",
337
+ headers: {
338
+ ...await apiHeaders(),
339
+ "Content-Type": "application/json"
340
+ },
341
+ body: JSON.stringify({
342
+ override_scope: true,
343
+ override_existing_origin: false,
344
+ override_existing_dns_record: false,
345
+ origins: []
346
+ }),
347
+ redirect: "error",
348
+ signal: AbortSignal.timeout(3e4)
349
+ });
350
+ if (!response.ok) throw new Error(`Cloudflare rejected the empty custom-domain set (HTTP ${response.status}).`);
351
+ let body;
339
352
  try {
340
- const response = await fetch$1(endpoint, {
341
- method: "PUT",
342
- headers: {
343
- ...await apiHeaders(),
344
- "Content-Type": "application/json"
345
- },
346
- body: JSON.stringify({
347
- override_scope: true,
348
- override_existing_origin: false,
349
- override_existing_dns_record: false,
350
- origins: []
351
- }),
352
- redirect: "error",
353
- signal: AbortSignal.timeout(3e4),
354
- ...proxy ? { dispatcher: proxy } : {}
355
- });
356
- if (!response.ok) throw new Error(`Cloudflare rejected the empty custom-domain set (HTTP ${response.status}).`);
357
- let body;
358
- try {
359
- body = await response.json();
360
- } catch {
361
- throw new Error(`Cloudflare returned HTTP ${response.status} with a non-JSON custom-domain response.`);
362
- }
363
- if (object(body).success !== true) throw new Error(`Cloudflare rejected the empty custom-domain set (HTTP ${response.status}).`);
364
- return result(0);
365
- } finally {
366
- await proxy?.close();
353
+ body = await response.json();
354
+ } catch {
355
+ throw new Error(`Cloudflare returned HTTP ${response.status} with a non-JSON custom-domain response.`);
367
356
  }
357
+ if (object(body).success !== true) throw new Error(`Cloudflare rejected the empty custom-domain set (HTTP ${response.status}).`);
358
+ return result(0);
368
359
  }
369
360
  async function assertExistingProvisionableResources(directory, account) {
370
361
  const { readBuildOutput } = await import("@cloudflare/build-output-utils");
@@ -990,7 +981,7 @@ async function tail() {
990
981
  "exceededMemory",
991
982
  "unknown"
992
983
  ] });
993
- const endpoint = `${(process.env.CLOUDFLARE_API_BASE_URL ?? "https://api.cloudflare.com/client/v4").replace(/\/$/, "")}/accounts/${encodeURIComponent(accountId)}/workers/scripts/${encodeURIComponent(worker)}/tails`;
984
+ const endpoint = `${apiBaseUrl()}/accounts/${encodeURIComponent(accountId)}/workers/scripts/${encodeURIComponent(worker)}/tails`;
994
985
  const headers = {
995
986
  ...await apiHeaders(),
996
987
  "Content-Type": "application/json"
@@ -1035,9 +1026,12 @@ async function tail() {
1035
1026
  const detail = object(log.event ?? {});
1036
1027
  const request = object(detail.request ?? {});
1037
1028
  const prefix = typeof request.url === "string" ? `${request.method ?? "GET"} ${request.url}` : typeof detail.queue === "string" ? `Queue ${detail.queue}` : typeof detail.mailFrom === "string" ? `Email from ${detail.mailFrom}` : "Worker event";
1038
- process.stdout.write(`${prefix} - ${log.outcome ?? "unknown"} @ ${new Date(Number(log.eventTimestamp)).toLocaleString()}\n`);
1039
- if (Array.isArray(log.logs)) for (const line of log.logs.map(object)) process.stdout.write(` (${line.level ?? "log"}) ${Array.isArray(line.message) ? line.message.join(" ") : ""}\n`);
1040
- if (Array.isArray(log.exceptions)) for (const exception of log.exceptions.map(object)) process.stderr.write(` ${exception.name ?? "Error"}: ${exception.message ?? ""}\n`);
1029
+ process.stdout.write(`${sanitizeTerminalLogText(prefix)} - ${log.outcome ?? "unknown"} @ ${new Date(Number(log.eventTimestamp)).toLocaleString()}\n`);
1030
+ if (Array.isArray(log.logs)) for (const line of log.logs.map(object)) {
1031
+ const message = Array.isArray(line.message) ? line.message.join(" ") : "";
1032
+ process.stdout.write(` (${line.level ?? "log"}) ${sanitizeTerminalLogText(message)}\n`);
1033
+ }
1034
+ if (Array.isArray(log.exceptions)) for (const exception of log.exceptions.map(object)) process.stderr.write(` ${sanitizeTerminalLogText(`${exception.name ?? "Error"}: ${exception.message ?? ""}`)}\n`);
1041
1035
  }).catch(() => {
1042
1036
  process.stderr.write("Cloudflare returned a malformed tail event.\n");
1043
1037
  });
@@ -1,4 +1,4 @@
1
- import { t as findEnvFile } from "../env-types-D5kds_OZ.mjs";
1
+ import { t as findEnvFile } from "../env-types-CwXgeMgL.mjs";
2
2
  import { writeSync } from "node:fs";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { spawnSync } from "node:child_process";
@@ -125,9 +125,8 @@ async function validateEmittedVarsViaSubprocess(input, env, spawn = defaultSpawn
125
125
  }
126
126
  /**
127
127
  * Parse the child's framed result from the DEDICATED fd-3 channel. The whole buffer
128
- * is the JSON result (nothing else writes to fd 3), so no sentinel scan is needed —
129
- * that is the truncation fix: config/env.ts stdout noise lives on a different fd and
130
- * can never reach here. Returns undefined on a missing/unparseable/ill-shaped result
128
+ * is the JSON result (nothing else writes to fd 3), so no sentinel scan is needed:
129
+ * config/env.ts stdout noise lives on a different fd and can never reach here. Returns undefined on a missing/unparseable/ill-shaped result
131
130
  * so the caller fails closed.
132
131
  */
133
132
  function parseProbeResult(fd3) {
@@ -169,7 +168,7 @@ function emitResult(result) {
169
168
  * facts. The import stays isolated because env.ts is arbitrary project code.
170
169
  */
171
170
  async function runFactsChild(root) {
172
- const { deriveSelfHostSchemaFacts, SelfHostSchemaError } = await import("../env-validation-cZBvGWaP.mjs");
171
+ const { deriveSelfHostSchemaFacts, SelfHostSchemaError } = await import("../env-validation-CrVNjsPm.mjs");
173
172
  try {
174
173
  emitResult({
175
174
  kind: "ok",
@@ -194,7 +193,7 @@ async function runFactsChild(root) {
194
193
  * fault → fail closed as a values-free schema error.
195
194
  */
196
195
  async function runValidateEmittedChild(root) {
197
- const { computeInvalidEmittedKeys, readEmittedWorkerVars, SelfHostSchemaError } = await import("../env-validation-cZBvGWaP.mjs");
196
+ const { computeInvalidEmittedKeys, readEmittedWorkerVars, SelfHostSchemaError } = await import("../env-validation-CrVNjsPm.mjs");
198
197
  const emitted = readEmittedWorkerVars(root);
199
198
  if (!emitted.ok) {
200
199
  emitResult({
@@ -0,0 +1,2 @@
1
+ import { r as PlatformClient } from "./client-C2Prx_Bi.mjs";
2
+ export { PlatformClient };
@@ -1,8 +1,8 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { c as normalizePlatformApiUrl } from "./platform-registry-P387v42A.mjs";
3
3
  import { t as cfAccessHeaders } from "./cf-access-TWNzXltp.mjs";
4
- import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, t as ensureCloudflaredToken } from "./cf-access-YTlqvAsk.mjs";
5
- import { a as getApiUrl } from "./auth-D52yG7hl.mjs";
4
+ import { i as isCloudflareAccessChallenge, n as ensurePlatformAccessToken, t as ensureCloudflaredToken } from "./cf-access-ngGqZpHZ.mjs";
5
+ import { a as getApiUrl } from "./auth-B5_tZLxT.mjs";
6
6
  import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
7
7
  import { n as readPlatformDiscoveryResponse } from "./platform-discovery-BC0HCKYt.mjs";
8
8
  import { readFileSync } from "node:fs";
@@ -108,7 +108,7 @@ function readCliVersion() {
108
108
  }
109
109
  const VOID_CLI_VERSION = readCliVersion();
110
110
  /** The oldest Void platform release this CLI supports. */
111
- const MIN_PLATFORM_VERSION = "0.26.0";
111
+ const MIN_PLATFORM_VERSION = "0.26.1";
112
112
  const RELEASE_VERSION = /^(\d+)\.(\d+)\.(\d+)(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$/;
113
113
  /**
114
114
  * Version checks keyed by platform base URL. Every outcome (pass, inconclusive,
@@ -174,6 +174,20 @@ function isExpiredTokenError(error) {
174
174
  if (error instanceof PlatformApiError) return error.status === 401 && error.code === "invalid or expired token";
175
175
  return false;
176
176
  }
177
+ /**
178
+ * True when `fetch` gave up waiting for response headers (undici's
179
+ * `HeadersTimeoutError`, 300 seconds by default). The request reached the
180
+ * server, which is still working on it.
181
+ */
182
+ function isHeadersTimeoutError(error) {
183
+ let current = error;
184
+ for (let depth = 0; depth < 6 && current !== null && typeof current === "object"; depth++) {
185
+ const { code, name } = current;
186
+ if (code === "UND_ERR_HEADERS_TIMEOUT" || name === "HeadersTimeoutError") return true;
187
+ current = current.cause;
188
+ }
189
+ return false;
190
+ }
177
191
  function isPreflightRejection(error) {
178
192
  return error instanceof PlatformApiError && ([401, 403].includes(error.status) && !!parsePlatformErrorBody(error.body)?.error || isCliOutdatedError(error));
179
193
  }
@@ -183,6 +197,10 @@ function isPreflightRejection(error) {
183
197
  * - Only `fetch` rejections (`TypeError` — no HTTP response) are retried.
184
198
  * A Response of any status means the server answered; surface it
185
199
  * verbatim rather than replay a request it may have accepted.
200
+ * - A headers timeout is retried too. Every attempt sends the same
201
+ * idempotency key, so once an earlier request has created its deployment,
202
+ * a receipt-aware platform answers the retry with that deployment's
203
+ * receipt and the CLI follows it to the real result.
186
204
  * - A rejected fetch does NOT prove the request never arrived — the
187
205
  * connection may have dropped after delivery. Arbitration is left to
188
206
  * the server's precheck, the only atomic (project-locked) verdict: if
@@ -415,7 +433,11 @@ var PlatformClient = class {
415
433
  async listProjectMembers(projectId) {
416
434
  const res = await this.request(`${this.baseUrl}/projects/${projectId}/members`, { headers: { ...this.authHeaders } });
417
435
  if (!res.ok) await throwPlatformApiError("Failed to list project members", res, "read");
418
- return (await res.json()).members;
436
+ const body = await res.json();
437
+ return {
438
+ members: body.members,
439
+ ...body.warnings ? { warnings: body.warnings } : {}
440
+ };
419
441
  }
420
442
  async listProjectInvitations(projectId) {
421
443
  const res = await this.request(`${this.baseUrl}/projects/${projectId}/invitations`, { headers: { ...this.authHeaders } });
@@ -1039,7 +1061,7 @@ var PlatformClient = class {
1039
1061
  }
1040
1062
  /**
1041
1063
  * Start the per-repo connect-authorization round-trip used by a non-owner org
1042
- * member (Task 7 platform contract). The callback redirects back to `redirect`
1064
+ * member. The callback redirects back to `redirect`
1043
1065
  * with either `?connect_grant=<signed>` (proof of per-repo access) or
1044
1066
  * `?error=repo_not_accessible`. Mirrors {@link getGithubLinkUrl} but carries
1045
1067
  * the installation + repo the grant is scoped to.
@@ -1243,4 +1265,4 @@ function sleep(ms) {
1243
1265
  return new Promise((resolve) => setTimeout(resolve, ms));
1244
1266
  }
1245
1267
  //#endregion
1246
- export { isExpiredTokenError as a, platformErrorMessage as c, isCliOutdatedError as i, PlatformApiError as n, readCliVersion as o, PlatformClient as r, parsePlatformErrorBody as s, MIN_PLATFORM_VERSION as t };
1268
+ export { isExpiredTokenError as a, parsePlatformErrorBody as c, isCliOutdatedError as i, platformErrorMessage as l, PlatformApiError as n, isHeadersTimeoutError as o, PlatformClient as r, readCliVersion as s, MIN_PLATFORM_VERSION as t };
@@ -1,4 +1,4 @@
1
- import { c as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-B-wekeR6.mjs";
1
+ import { i as writeUncapturedOperationOutput, l as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-2-TfIEzB.mjs";
2
2
  import { execFile, spawn, spawnSync } from "node:child_process";
3
3
  //#region src/cli/cloudflare-auth.ts
4
4
  var CloudflareAuthenticationError = class extends Error {
@@ -76,7 +76,7 @@ function createBundledCloudflareAuthRunner(root) {
76
76
  const [command, ...prefix] = resolveCloudflareOperationArgv(root);
77
77
  return (operation, capture) => {
78
78
  const args = encodeCloudflareOperation(operation);
79
- const env = cloudflareAuthCommandEnvironment(operation);
79
+ const env = cloudflareAuthEnvironment();
80
80
  const streaming = cloudflareAuthNeedsTerminal(operation);
81
81
  const result = spawnSync(command, [...prefix, ...args], {
82
82
  cwd: root,
@@ -101,10 +101,7 @@ function createBundledCloudflareAuthRunner(root) {
101
101
  };
102
102
  if (streaming) return raw;
103
103
  const decoded = decodeCloudflareOperationResult(raw);
104
- if (!capture) {
105
- if (decoded.stdout) process.stdout.write(decoded.stdout);
106
- if (decoded.stderr) process.stderr.write(decoded.stderr);
107
- }
104
+ if (!capture) writeUncapturedOperationOutput(decoded);
108
105
  return decoded;
109
106
  };
110
107
  }
@@ -115,7 +112,7 @@ function runCloudflareAuthCommand(root, operation, signal) {
115
112
  if (cloudflareAuthNeedsTerminal(operation)) return new Promise((resolve) => {
116
113
  const child = spawn(command, [...prefix, ...args], {
117
114
  cwd: root,
118
- env: cloudflareAuthCommandEnvironment(operation),
115
+ env: cloudflareAuthEnvironment(),
119
116
  shell: false,
120
117
  signal,
121
118
  stdio: "inherit",
@@ -143,7 +140,7 @@ function runCloudflareAuthCommand(root, operation, signal) {
143
140
  execFile(command, [...prefix, ...args], {
144
141
  cwd: root,
145
142
  encoding: "utf8",
146
- env: cloudflareAuthCommandEnvironment(operation),
143
+ env: cloudflareAuthEnvironment(),
147
144
  maxBuffer: 10485760,
148
145
  shell: false,
149
146
  signal,
@@ -160,24 +157,19 @@ function runCloudflareAuthCommand(root, operation, signal) {
160
157
  }).stdin?.end();
161
158
  });
162
159
  }
163
- function cloudflareAuthCommandEnvironment(operation, source = process.env) {
164
- return cloudflareAuthEnvironment(source);
165
- }
166
160
  /** Browser login must display cf's prompts before it completes. */
167
161
  function cloudflareAuthNeedsTerminal(operation) {
168
162
  return operation.type === "auth.login";
169
163
  }
170
164
  function cloudflareAuthEnvironment(source = process.env) {
171
165
  const env = { ...source };
172
- const scrubbedWranglerKeys = /* @__PURE__ */ new Set([
166
+ const scrubbedKeys = /* @__PURE__ */ new Set([
173
167
  "WRANGLER_OUTPUT_FILE_DIRECTORY",
174
168
  "WRANGLER_OUTPUT_FILE_PATH",
175
- "WRANGLER_LOG_SANITIZE"
169
+ "WRANGLER_LOG_SANITIZE",
170
+ "CLOUDFLARE_AUTH_USE_KEYRING"
176
171
  ]);
177
- for (const key of Object.keys(env)) {
178
- if (/^VOID_PLATFORM_/i.test(key) || /^(?:DATABASE_URL|CF_ACCESS_CLIENT_ID|CF_ACCESS_CLIENT_SECRET|CF_ACCESS_TOKEN|VOID_ACCESS_CREDENTIALS|VOID_ACCESS_ORIGIN)$/i.test(key) || scrubbedWranglerKeys.has(key.toUpperCase())) delete env[key];
179
- if (key.toUpperCase() === "CLOUDFLARE_AUTH_USE_KEYRING") delete env[key];
180
- }
172
+ for (const key of Object.keys(env)) if (/^VOID_PLATFORM_/i.test(key) || /^(?:DATABASE_URL|CF_ACCESS_CLIENT_ID|CF_ACCESS_CLIENT_SECRET|CF_ACCESS_TOKEN|VOID_ACCESS_CREDENTIALS|VOID_ACCESS_ORIGIN)$/i.test(key) || scrubbedKeys.has(key.toUpperCase())) delete env[key];
181
173
  env.CLOUDFLARE_AUTH_USE_KEYRING = "true";
182
174
  return env;
183
175
  }
@@ -1,7 +1,8 @@
1
1
  import { t as basename } from "./dist-BVqXeR_h.mjs";
2
- import { y as readRootWranglerConfig } from "./wrangler-DhUerFkW.mjs";
3
- import { L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Qdc7tw8F.mjs";
2
+ import { b as readRootWranglerConfig } from "./wrangler-D9KTuqnv.mjs";
3
+ import { L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess } from "./output-C50ag2r3.mjs";
5
+ import { a as parseCloudflareAuthSession, i as ensureCloudflareAuthentication, n as cloudflareCredentialOverrides, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-CuxfF6OA.mjs";
5
6
  //#region src/cli/cloudflare-cmd.ts
6
7
  async function runCloudflareCommand(root, args) {
7
8
  const runWrangler = createBundledCloudflareAuthRunner(root);
@@ -11,7 +12,7 @@ async function runCloudflareCommand(root, args) {
11
12
  runWrangler,
12
13
  forceLogin: true
13
14
  });
14
- console.log("Successfully logged in.");
15
+ printSuccess("Successfully logged in to Cloudflare.");
15
16
  return;
16
17
  case "status": {
17
18
  const result = await runWrangler({ type: "auth.whoami" }, true);
@@ -24,7 +25,7 @@ async function runCloudflareCommand(root, args) {
24
25
  if ((await runWrangler({ type: "auth.logout" }, true)).status !== 0) throw new Error("Could not remove the local Cloudflare browser session.");
25
26
  const overrides = cloudflareCredentialOverrides();
26
27
  if (overrides.length > 0) log.warn(`Removed the local Cloudflare browser session. Environment credentials remain active: ${overrides.join(", ")}.`);
27
- else log.success("Signed out of Cloudflare.");
28
+ else printSuccess("Signed out of Cloudflare.");
28
29
  return;
29
30
  }
30
31
  }
@@ -1,6 +1,6 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import "./project-paths-GgcMozYz.mjs";
3
- import { m as readConfig } from "./config-Br_JZD6u.mjs";
3
+ import { m as readConfig } from "./config-DiowPT80.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { randomUUID } from "node:crypto";
6
6
  import { parse } from "jsonc-parser";
@@ -1,7 +1,7 @@
1
1
  import { a as join, t as basename } from "./dist-BVqXeR_h.mjs";
2
- import { A as writeProvisionedWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE, y as readRootWranglerConfig } from "./wrangler-DhUerFkW.mjs";
3
- import { K as select, L as log, tt as isCancel } from "./prompts-6OSVA7DJ.mjs";
4
- import { i as ensureCloudflareAuthentication, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-Qdc7tw8F.mjs";
2
+ import { b as readRootWranglerConfig, i as LATEST_KNOWN_COMPAT_DATE, j as writeProvisionedWranglerConfig } from "./wrangler-D9KTuqnv.mjs";
3
+ import { K as select, L as log, tt as isCancel } from "./dist-D3m88sjf.mjs";
4
+ import { i as ensureCloudflareAuthentication, r as createBundledCloudflareAuthRunner } from "./cloudflare-auth-CuxfF6OA.mjs";
5
5
  import { existsSync } from "node:fs";
6
6
  //#region src/cli/cloudflare-connect.ts
7
7
  async function connectCloudflare(root, interactive = Boolean(process.stdin.isTTY)) {
@@ -49,7 +49,7 @@ async function connectCloudflare(root, interactive = Boolean(process.stdin.isTTY
49
49
  compatibilityDate
50
50
  }, existingConfigPath ? { configPath: existingConfigPath } : void 0);
51
51
  log.info(`${basename(written.configPath)} is ready for Cloudflare deployment`);
52
- log.success(`Configured Cloudflare account: ${account.name}`);
52
+ log.step(`Configured Cloudflare account: ${account.name}`);
53
53
  return account;
54
54
  }
55
55
  //#endregion
@@ -1,2 +1,2 @@
1
- import { _ as resolveCloudflareD1Context, b as tailCloudflareWorker, c as listCloudflareDomains, g as readCloudflareWorkerStatus, h as readCloudflareD1Migrations, l as listCloudflareSecrets, m as putCloudflareSecret, n as applyCloudflareD1Migrations, o as deleteCloudflareSecret, r as changeCloudflareDomain, s as executeCloudflareD1Sql, t as activateCloudflareExistingVersion, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets } from "./cloudflare-operations-DYa3coIk.mjs";
1
+ import { _ as resolveCloudflareD1Context, b as tailCloudflareWorker, c as listCloudflareDomains, g as readCloudflareWorkerStatus, h as readCloudflareD1Migrations, l as listCloudflareSecrets, m as putCloudflareSecret, n as applyCloudflareD1Migrations, o as deleteCloudflareSecret, r as changeCloudflareDomain, s as executeCloudflareD1Sql, t as activateCloudflareExistingVersion, v as resolveCloudflareOperationContext, y as syncCloudflareSecrets } from "./cloudflare-operations-CwI1bChl.mjs";
2
2
  export { activateCloudflareExistingVersion, applyCloudflareD1Migrations, changeCloudflareDomain, deleteCloudflareSecret, executeCloudflareD1Sql, listCloudflareDomains, listCloudflareSecrets, putCloudflareSecret, readCloudflareD1Migrations, readCloudflareWorkerStatus, resolveCloudflareD1Context, resolveCloudflareOperationContext, syncCloudflareSecrets, tailCloudflareWorker };