void 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/AGENTS_TEMPLATE.md +1 -1
  2. package/README.md +5 -1
  3. package/dist/{account-cmd-CjyxcGkM.mjs → account-cmd-vJhh5lrb.mjs} +5 -5
  4. package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
  5. package/dist/application-routing-B7QEjqSR.mjs +27 -0
  6. package/dist/{auth-DLNN0D3Z.mjs → auth-CQkSDS50.mjs} +26 -96
  7. package/dist/auth-DX3JURcX.mjs +2 -0
  8. package/dist/{auth-link-BLO4ptzo.mjs → auth-link-D75t9wO2.mjs} +5 -5
  9. package/dist/{auth-router-ZUg9MF_U.mjs → auth-router-ClfhL1J7.mjs} +7 -7
  10. package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
  11. package/dist/{build-cmd-BxR5FROK.mjs → build-cmd-zMi1iFnS.mjs} +21 -9
  12. package/dist/{cache-D0sWhgKI.mjs → cache-ZtQmyxVV.mjs} +5 -5
  13. package/dist/{cancel-deploy-D4NUqFbi.mjs → cancel-deploy-Box0kkEV.mjs} +5 -5
  14. package/dist/{cf-access-P0iZnu0q.mjs → cf-access-BGe5sWXF.mjs} +4 -48
  15. package/dist/{cf-access-DRsQRe6k.mjs → cf-access-TWNzXltp.mjs} +3 -11
  16. package/dist/{cf-build-output-BJ6yGEIS.mjs → cf-build-output-BPqOT964.mjs} +2 -1
  17. package/dist/cf-build-output-_0HNWysu.mjs +2 -0
  18. package/dist/cli/cli.mjs +89 -461
  19. package/dist/cli/{cf-compat.mjs → cloudflare-operation-process.mjs} +454 -424
  20. package/dist/cli/env-schema-probe.d.mts +2 -1
  21. package/dist/cli/env-schema-probe.mjs +4 -4
  22. package/dist/client-B9UBI03V.mjs +2 -0
  23. package/dist/{client-BTZ3XkrB.mjs → client-DKAsFA4X.mjs} +161 -24
  24. package/dist/{cloudflare-auth-DQkqoMYa.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -38
  25. package/dist/{cloudflare-cmd-BKlfGHAy.mjs → cloudflare-cmd-CmY8dGkd.mjs} +6 -6
  26. package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
  27. package/dist/{cloudflare-connect-Ctmrw579.mjs → cloudflare-connect-IiR3ZieC.mjs} +4 -4
  28. package/dist/{cloudflare-operations-BT6OWFBk.mjs → cloudflare-operations-BCdXSsmo.mjs} +1 -1
  29. package/dist/{cloudflare-operations-B9tzgjmf.mjs → cloudflare-operations-DzH-A966.mjs} +116 -172
  30. package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
  31. package/dist/{config-VavjpDnp.d.mts → config-BMHb8RCj.d.mts} +1 -0
  32. package/dist/config-C_XRIPx2.mjs +89 -0
  33. package/dist/config-entry.d.mts +1 -1
  34. package/dist/{connect-Dg-WkW-C.mjs → connect-B-usTnlF.mjs} +9 -9
  35. package/dist/{create-project-l9J7pbtm.mjs → create-project-CYOOAYcn.mjs} +12 -12
  36. package/dist/{create-project-DdoqwFLF.mjs → create-project-FWbf5Olo.mjs} +1 -1
  37. package/dist/{db-gp2sCXyN.mjs → db-Ck2eZ2iB.mjs} +26 -26
  38. package/dist/{delete-TTedbH6B.mjs → delete-sK56qtzZ.mjs} +5 -5
  39. package/dist/{deploy-CH-o2CaZ.mjs → deploy-gCVaiJbS.mjs} +984 -616
  40. package/dist/{deploy-B19L2Bra.mjs → deploy-irP5q0-x.mjs} +1 -1
  41. package/dist/{domain-JRF59P_r.mjs → domain-DFfQE8jg.mjs} +6 -6
  42. package/dist/{email-Bo6G9LOZ.mjs → email-CdnhUHvJ.mjs} +15 -30
  43. package/dist/{env-BYOrWQnv.mjs → env-DmGdHi5i.mjs} +8 -8
  44. package/dist/{env-public-BxU_0yTL.d.mts → env-public-BX_r8HR6.d.mts} +1 -1
  45. package/dist/{env-types-C2_bIk_b.mjs → env-types-D5kds_OZ.mjs} +1 -1
  46. package/dist/{env-validation-BB4GkLxn.mjs → env-validation-C_8tPdhs.mjs} +20 -73
  47. package/dist/{env-validation-BXge7uyK.mjs → env-validation-zZOCcQVZ.mjs} +1 -1
  48. package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
  49. package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
  50. package/dist/{gen-sCtlCOdA.mjs → gen-CshAkukR.mjs} +4 -4
  51. package/dist/gen-DvQTWzDU.mjs +2 -0
  52. package/dist/{github-cmd-0-7PexDq.mjs → github-cmd-DftuEvIt.mjs} +13 -13
  53. package/dist/{handler-HEcZsaij.d.mts → handler-CZ4nAylQ.d.mts} +1 -1
  54. package/dist/{headers-DWi2IXWx.mjs → headers-2rKda9Y6.mjs} +1 -1
  55. package/dist/{help-GKtwl07I.mjs → help-Dotbf6iz.mjs} +236 -750
  56. package/dist/help-mabuIV98.mjs +2 -0
  57. package/dist/{inbound-aVHEUhKo.mjs → inbound-fRkqcXaC.mjs} +1 -1
  58. package/dist/index.d.mts +1 -1
  59. package/dist/index.mjs +299 -1517
  60. package/dist/info-B97bTX9N.mjs +113 -0
  61. package/dist/{init-FZx3Elvz.mjs → init-BTQEZZGJ.mjs} +61 -27
  62. package/dist/limits-Bq5LG8Id.d.mts +27 -0
  63. package/dist/limits-Cjuk2VPm.mjs +68 -0
  64. package/dist/{link-BrQfb_CU.mjs → link-B46sYH0K.mjs} +6 -6
  65. package/dist/{list-D44jmIAM.mjs → list-BnPrIsU_.mjs} +6 -6
  66. package/dist/{live-CKJlvlNp.d.mts → live-Chw1eIMv.d.mts} +1 -1
  67. package/dist/{local-d1-Bg9OzEEO.mjs → local-d1-2CMnpuW_.mjs} +2 -2
  68. package/dist/log-vqY3pqwI.mjs +29 -0
  69. package/dist/{login-CAsAsQ-_.mjs → login-BuiMyUrx.mjs} +8 -8
  70. package/dist/login-DIy9Sb-U.mjs +2 -0
  71. package/dist/{logs-BjKvFnVM.mjs → logs-CZG9d-ic.mjs} +10 -11
  72. package/dist/migrate-BCiJ8w0f.mjs +2 -0
  73. package/dist/{migrate-BPITvDJN.mjs → migrate-q4_njtaW.mjs} +4 -3
  74. package/dist/{node-Dt7z256D.mjs → node-BkyRWRx8.mjs} +1 -1
  75. package/dist/operator-args-B3BTmSoi.mjs +697 -0
  76. package/dist/{operator-auth-8KnOVXVd.mjs → operator-auth-7erYc6Lt.mjs} +2 -2
  77. package/dist/{operator-client-DUwumHpQ.mjs → operator-client-CpHjTd0t.mjs} +3 -3
  78. package/dist/{operator-cmd-BK5CCiT9.mjs → operator-cmd-DGqPJUD3.mjs} +70 -24
  79. package/dist/{output-Dm_A4Tbv.mjs → output-CbM85T4k.mjs} +18 -10
  80. package/dist/pages/client.d.mts +34 -2
  81. package/dist/pages/client.mjs +59 -3
  82. package/dist/pages/index.d.mts +1 -1
  83. package/dist/pages/index.mjs +2 -2
  84. package/dist/pages/islands-plugin.mjs +1 -1
  85. package/dist/pages/protocol.d.mts +2 -2
  86. package/dist/pages/protocol.mjs +2 -308
  87. package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
  88. package/dist/plan-D1Q5rf-r.mjs +2 -0
  89. package/dist/plan-NPpwZ_kc.mjs +58 -0
  90. package/dist/platform-args-3k8X9-H_.mjs +514 -0
  91. package/dist/platform-args-DdnM6WIf.mjs +2 -0
  92. package/dist/{platform-auth-config-BlN8xTdD.mjs → platform-auth-config-DDrxUy4m.mjs} +6 -6
  93. package/dist/{platform-auth-protection-7d5aV2Jg.mjs → platform-auth-protection-BLadnnct.mjs} +8 -8
  94. package/dist/{platform-auth-recovery-Dxij8ZbR.mjs → platform-auth-recovery-CmCzX2Fl.mjs} +6 -6
  95. package/dist/{platform-cmd-B3hwKrFK.mjs → platform-cmd-DMDEc9uS.mjs} +29 -8
  96. package/dist/{platform-cmd-E0FuL212.mjs → platform-cmd-pMTRhvYs.mjs} +1 -1
  97. package/dist/{platform-domain-D6Xcy9ZX.mjs → platform-domain-Di6EYrQl.mjs} +5 -5
  98. package/dist/{platform-lifecycle-k0E0xoxx.mjs → platform-lifecycle-BBoNzojY.mjs} +1541 -572
  99. package/dist/{platform-lifecycle-DMh_qrry.mjs → platform-lifecycle-BFdSi9Qt.mjs} +1 -1
  100. package/dist/{platform-management-Brz_BDiT.mjs → platform-management-CWOQOWXm.mjs} +10 -7
  101. package/dist/{platform-management-DOtss0BN.mjs → platform-management-DG47jys8.mjs} +1 -1
  102. package/dist/platform-plans-config-Vl9BP3H4.mjs +359 -0
  103. package/dist/{platform-recovery-BvtcXON5.mjs → platform-recovery-BJnQJEtQ.mjs} +4 -4
  104. package/dist/{platform-registry-QBa4DK32.mjs → platform-registry-DkPPXfp_.mjs} +2 -2
  105. package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
  106. package/dist/{prepare-C-6YZyyg.mjs → prepare-CBLT3CHH.mjs} +3 -3
  107. package/dist/prepare-CnjcTV2s.mjs +2 -0
  108. package/dist/{prepare-CRhJbVrG.mjs → prepare-DnaKBi--.mjs} +5 -21
  109. package/dist/{project-C0Fqu05O.mjs → project-DKG5Ra8p.mjs} +15 -82
  110. package/dist/project-DsblYifa.mjs +2 -0
  111. package/dist/{project-cmd-BZLCqOqw.mjs → project-cmd-DxnXstAq.mjs} +19 -19
  112. package/dist/{project-team-BvgM0WoX.mjs → project-team-BmHcaALJ.mjs} +5 -5
  113. package/dist/{project-token-l5DqK6Az.mjs → project-token-GionZlBI.mjs} +5 -5
  114. package/dist/{project-zero-trust-v6Mvpp8y.mjs → project-zero-trust-JLCjVQA7.mjs} +5 -5
  115. package/dist/prompts-2TGE6oXx.mjs +2 -0
  116. package/dist/prompts-BNUoTiaf.mjs +2044 -0
  117. package/dist/{protocol-BBa6cstI.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
  118. package/dist/protocol-U7bfjHmA.mjs +331 -0
  119. package/dist/{provision-Fr9pRqce.mjs → provision-CVku1JFU.mjs} +1 -1
  120. package/dist/{provision-C4IGqkBf.mjs → provision-CaoxO_U7.mjs} +90 -199
  121. package/dist/{requests-DN-BbNiM.mjs → requests-BOjIVAeF.mjs} +5 -5
  122. package/dist/resource-name-C7LVpcRm.mjs +11 -0
  123. package/dist/{rollback-D7rzSaZM.mjs → rollback-CwR3pLj3.mjs} +6 -6
  124. package/dist/route-url-CG7U-cRN.mjs +15 -0
  125. package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
  126. package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
  127. package/dist/runtime/ai.d.mts +12 -8
  128. package/dist/runtime/ai.mjs +87 -22
  129. package/dist/runtime/better-auth-mysql.mjs +1 -1
  130. package/dist/runtime/better-auth-pg.mjs +1 -1
  131. package/dist/runtime/better-auth.mjs +1 -1
  132. package/dist/runtime/client-react.mjs +2 -2
  133. package/dist/runtime/client-solid.mjs +2 -2
  134. package/dist/runtime/client-svelte.mjs +2 -2
  135. package/dist/runtime/client-vue.mjs +2 -2
  136. package/dist/runtime/client.mjs +2 -2
  137. package/dist/runtime/durable.d.mts +3 -1
  138. package/dist/runtime/durable.mjs +4 -1
  139. package/dist/runtime/email/testing.mjs +2 -2
  140. package/dist/runtime/email.mjs +1 -1
  141. package/dist/runtime/env-public.d.mts +1 -1
  142. package/dist/runtime/fetch-stream.mjs +1 -1
  143. package/dist/runtime/fetch.mjs +1 -1
  144. package/dist/runtime/handler.d.mts +1 -1
  145. package/dist/runtime/kv.mjs +0 -1
  146. package/dist/runtime/limits.d.mts +2 -0
  147. package/dist/runtime/limits.mjs +2 -0
  148. package/dist/runtime/live-client.d.mts +1 -1
  149. package/dist/runtime/live-server.mjs +25 -16
  150. package/dist/runtime/live.d.mts +1 -1
  151. package/dist/runtime/migration-handler.mjs +62 -42
  152. package/dist/runtime/remote/index.mjs +2 -2
  153. package/dist/runtime/route-url.d.mts +4 -0
  154. package/dist/runtime/route-url.mjs +2 -0
  155. package/dist/runtime/routing.d.mts +180 -0
  156. package/dist/runtime/routing.mjs +1082 -0
  157. package/dist/runtime/sandbox-container.d.mts +1 -1
  158. package/dist/runtime/sandbox-container.mjs +1 -1
  159. package/dist/runtime/sandbox.d.mts +3 -3
  160. package/dist/runtime/sandbox.mjs +75 -45
  161. package/dist/runtime/sse.mjs +1 -1
  162. package/dist/runtime/validator.d.mts +1 -1
  163. package/dist/runtime/ws-server.d.mts +4 -2
  164. package/dist/runtime/ws-server.mjs +27 -2
  165. package/dist/runtime/ws.d.mts +2 -2
  166. package/dist/runtime/ws.mjs +8 -6
  167. package/dist/{sandbox-qpNBT8a3.d.mts → sandbox-XZAqzFlG.d.mts} +11 -8
  168. package/dist/{sandbox-container-DdNEBfCc.d.mts → sandbox-container-Bo0eiFKz.d.mts} +2 -1
  169. package/dist/{sandbox-container-4fdqLnyb.mjs → sandbox-container-C6ItmVuN.mjs} +4 -2
  170. package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
  171. package/dist/{secret-BOtOl_cb.mjs → secret-ByWJWBUG.mjs} +7 -7
  172. package/dist/{skills-D1II1Juz.mjs → skills-C1PlclPt.mjs} +1 -1
  173. package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
  174. package/dist/{subcommand-prompt-CY1C4fvl.mjs → subcommand-prompt-klFCfcor.mjs} +40 -32
  175. package/dist/validate-Dq_L3s0S.mjs +2 -0
  176. package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
  177. package/dist/{wrangler-DQF1vKyf.mjs → wrangler-7K-bW_DL.mjs} +8 -239
  178. package/dist/{ws-BoY7vQML.d.mts → ws-CL1w7GXU.d.mts} +13 -2
  179. package/package.json +16 -10
  180. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
  181. package/skills/void/SKILL.md +55 -135
  182. package/skills/void/docs/guide/ai.md +94 -84
  183. package/skills/void/docs/guide/app-types.md +3 -32
  184. package/skills/void/docs/guide/auth.md +12 -116
  185. package/skills/void/docs/guide/database/d1.md +9 -54
  186. package/skills/void/docs/guide/database/mysql.md +1 -1
  187. package/skills/void/docs/guide/database/postgresql.md +5 -26
  188. package/skills/void/docs/guide/database.md +23 -75
  189. package/skills/void/docs/guide/deployment.md +48 -112
  190. package/skills/void/docs/guide/durable-state.md +43 -18
  191. package/skills/void/docs/guide/edge/headers.md +4 -48
  192. package/skills/void/docs/guide/edge/prerendering.md +5 -20
  193. package/skills/void/docs/guide/edge/redirects.md +11 -64
  194. package/skills/void/docs/guide/edge/revalidation.md +5 -18
  195. package/skills/void/docs/guide/edge/rewrites.md +56 -284
  196. package/skills/void/docs/guide/edge/static-assets.md +22 -72
  197. package/skills/void/docs/guide/email/domains.md +116 -0
  198. package/skills/void/docs/guide/email/receiving.md +139 -0
  199. package/skills/void/docs/guide/email/sending.md +231 -0
  200. package/skills/void/docs/guide/email.md +13 -619
  201. package/skills/void/docs/guide/env-migration.md +11 -11
  202. package/skills/void/docs/guide/env-vars.md +9 -29
  203. package/skills/void/docs/guide/index.md +0 -15
  204. package/skills/void/docs/guide/jobs.md +3 -18
  205. package/skills/void/docs/guide/kv.md +5 -11
  206. package/skills/void/docs/guide/live.md +5 -56
  207. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
  208. package/skills/void/docs/guide/pages-routing/head.md +10 -10
  209. package/skills/void/docs/guide/pages-routing/islands.md +6 -36
  210. package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
  211. package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
  212. package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
  213. package/skills/void/docs/guide/pages-routing/overview.md +7 -17
  214. package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
  215. package/skills/void/docs/guide/platform/administration/access.md +1 -4
  216. package/skills/void/docs/guide/platform/administration/email.md +35 -8
  217. package/skills/void/docs/guide/platform/administration/operations.md +26 -4
  218. package/skills/void/docs/guide/platform/administration/plans.md +126 -0
  219. package/skills/void/docs/guide/platform/administration/projects.md +5 -2
  220. package/skills/void/docs/guide/platform/administration/zero-trust.md +49 -160
  221. package/skills/void/docs/guide/platform/development/runtime.md +3 -13
  222. package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
  223. package/skills/void/docs/guide/platform/installation/ci.md +1 -1
  224. package/skills/void/docs/guide/platform/installation/credentials.md +15 -6
  225. package/skills/void/docs/guide/platform/installation/domains.md +35 -2
  226. package/skills/void/docs/guide/platform/installation/first-deployment.md +4 -2
  227. package/skills/void/docs/guide/platform/installation/maintenance.md +15 -1
  228. package/skills/void/docs/guide/platform/installation/prerequisites.md +24 -18
  229. package/skills/void/docs/guide/platform/installation/setup.md +88 -14
  230. package/skills/void/docs/guide/platform-administration.md +1 -0
  231. package/skills/void/docs/guide/queues.md +7 -9
  232. package/skills/void/docs/guide/quickstart.md +38 -37
  233. package/skills/void/docs/guide/remote-dev.md +5 -10
  234. package/skills/void/docs/guide/sandboxes.md +29 -21
  235. package/skills/void/docs/guide/server-routing.md +9 -72
  236. package/skills/void/docs/guide/sse.md +4 -18
  237. package/skills/void/docs/guide/ssg.md +3 -15
  238. package/skills/void/docs/guide/ssr.md +14 -62
  239. package/skills/void/docs/guide/storage.md +9 -4
  240. package/skills/void/docs/guide/type-safety.md +3 -14
  241. package/skills/void/docs/guide/typed-fetch.md +3 -7
  242. package/skills/void/docs/guide/websockets.md +68 -40
  243. package/skills/void/docs/integrations/agents.md +3 -3
  244. package/skills/void/docs/integrations/cloudflare.md +85 -316
  245. package/skills/void/docs/integrations/frameworks/analog.md +5 -64
  246. package/skills/void/docs/integrations/frameworks/astro.md +4 -73
  247. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
  248. package/skills/void/docs/integrations/frameworks/overview.md +11 -54
  249. package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
  250. package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
  251. package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
  252. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
  253. package/skills/void/docs/reference/api/auth.md +156 -0
  254. package/skills/void/docs/reference/api/client.md +87 -0
  255. package/skills/void/docs/reference/api/database.md +95 -0
  256. package/skills/void/docs/reference/api/durable.md +46 -0
  257. package/skills/void/docs/reference/api/env.md +50 -0
  258. package/skills/void/docs/reference/api/handlers.md +254 -0
  259. package/skills/void/docs/reference/api/pages.md +241 -0
  260. package/skills/void/docs/reference/api/plugin.md +39 -0
  261. package/skills/void/docs/reference/api/resources.md +109 -0
  262. package/skills/void/docs/reference/api/rewrites.md +76 -0
  263. package/skills/void/docs/reference/api/types.md +92 -0
  264. package/skills/void/docs/reference/api.md +56 -1218
  265. package/skills/void/docs/reference/cli/auth.md +89 -0
  266. package/skills/void/docs/reference/cli/database.md +128 -0
  267. package/skills/void/docs/reference/cli/deploy.md +105 -0
  268. package/skills/void/docs/reference/cli/domains.md +41 -0
  269. package/skills/void/docs/reference/cli/email.md +129 -0
  270. package/skills/void/docs/reference/cli/generate.md +116 -0
  271. package/skills/void/docs/reference/cli/github.md +189 -0
  272. package/skills/void/docs/reference/cli/platform-config.md +92 -0
  273. package/skills/void/docs/reference/cli/platform-email.md +81 -0
  274. package/skills/void/docs/reference/cli/platform-installation.md +142 -0
  275. package/skills/void/docs/reference/cli/platform-operations.md +90 -0
  276. package/skills/void/docs/reference/cli/platform-users.md +89 -0
  277. package/skills/void/docs/reference/cli/platform-zero-trust.md +59 -0
  278. package/skills/void/docs/reference/cli/platform.md +70 -0
  279. package/skills/void/docs/reference/cli/project.md +214 -0
  280. package/skills/void/docs/reference/cli/secrets.md +76 -0
  281. package/skills/void/docs/reference/cli/setup.md +70 -0
  282. package/skills/void/docs/reference/cli.md +32 -1682
  283. package/skills/void/docs/reference/config.md +12 -18
  284. package/skills/void/docs/reference/resource-inference.md +3 -58
  285. package/skills/void/docs/reference/structure.md +14 -41
  286. package/dist/auth-CZuiVsFh.mjs +0 -2
  287. package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
  288. package/dist/client-Czz8o5jP.mjs +0 -2
  289. package/dist/dist-BuDuKZJv.mjs +0 -2
  290. package/dist/dist-CTBk70IR.mjs +0 -1310
  291. package/dist/gen-CNJ62MM7.mjs +0 -2
  292. package/dist/help-CmZzxUba.mjs +0 -2
  293. package/dist/log-ChfPKsVd.mjs +0 -26
  294. package/dist/login-CGcRKEoi.mjs +0 -2
  295. package/dist/migrate-CYfbKkXh.mjs +0 -2
  296. package/dist/plan-BEZ8VJW0.mjs +0 -256
  297. package/dist/plan-DpuOr14e.mjs +0 -2
  298. package/dist/prepare-Bm3iq-u4.mjs +0 -2
  299. package/dist/project-BuUwfj6f.mjs +0 -2
  300. package/dist/validate-EKmJWxmy.mjs +0 -2
  301. /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
@@ -1,2 +1,2 @@
1
- import { A as parseRootWranglerConfig, J as runDeploy, f as checkWranglerMigrationApplySet } from "./deploy-CH-o2CaZ.mjs";
1
+ import { A as parseRootWranglerConfig, J as runDeploy, f as checkWranglerMigrationApplySet } from "./deploy-gCVaiJbS.mjs";
2
2
  export { checkWranglerMigrationApplySet, parseRootWranglerConfig, runDeploy };
@@ -1,8 +1,8 @@
1
- import { c as getToken } from "./auth-DLNN0D3Z.mjs";
2
- import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-C0Fqu05O.mjs";
3
- import { N as note, j as log } from "./dist-CTBk70IR.mjs";
4
- import { n as PlatformClient } from "./client-BTZ3XkrB.mjs";
5
- import { c as import_picocolors } from "./output-Dm_A4Tbv.mjs";
1
+ import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DKG5Ra8p.mjs";
2
+ import { c as getToken } from "./auth-CQkSDS50.mjs";
3
+ import { B as note, L as log } from "./prompts-BNUoTiaf.mjs";
4
+ import { n as PlatformClient } from "./client-DKAsFA4X.mjs";
5
+ import { c as import_picocolors } from "./output-CbM85T4k.mjs";
6
6
  //#region src/cli/domain.ts
7
7
  async function runDomainCommand(root, args) {
8
8
  const platform = readDeploymentPlatform(root);
@@ -40,7 +40,7 @@ async function runDomainCommand(root, args) {
40
40
  }
41
41
  async function runCloudflareDomainCommand(root, args) {
42
42
  if (args.projectSlug) throw new Error("domain: --project selects a Void platform project and is not used for direct Cloudflare apps.");
43
- const { changeCloudflareDomain, listCloudflareDomains } = await import("./cloudflare-operations-BT6OWFBk.mjs");
43
+ const { changeCloudflareDomain, listCloudflareDomains } = await import("./cloudflare-operations-BCdXSsmo.mjs");
44
44
  if (args.subcommand === "add") {
45
45
  const result = await changeCloudflareDomain(root, args.hostname, "add");
46
46
  log.success(result.modified ? `Domain ${args.hostname} added and activated on Cloudflare.` : `Domain ${args.hostname} is already configured.`);
@@ -1,14 +1,14 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { L as resolveDeployTransport, O as isWranglerNonInteractiveOrCI, X as runWranglerAuthToken, _ as deriveWorkerName, _t as findEmailConfigConflicts, bt as renderEmailChecklist, gt as createNodeEmailDns, h as createDeployWranglerRunner, ht as applyEmailSetup, k as loadProvisionModule, v as discoverRootWranglerConfig, vt as preflightEmail, yt as renderAddressMap } from "./deploy-CH-o2CaZ.mjs";
3
2
  import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
4
- import { c as getToken, d as openBrowser } from "./auth-DLNN0D3Z.mjs";
5
- import { o as readProjectConfig } from "./project-C0Fqu05O.mjs";
6
3
  import { m as readConfig } from "./config-Br_JZD6u.mjs";
7
- import { k as writeProvisionedWranglerConfig } from "./wrangler-DQF1vKyf.mjs";
8
- import { E as confirm, F as password, N as note, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
9
4
  import { a as scanEmailHandlersSync } from "./email--tEtMoj_.mjs";
10
- import { n as PlatformClient, t as PlatformApiError } from "./client-BTZ3XkrB.mjs";
11
- import { c as import_picocolors, i as createSpinner } from "./output-Dm_A4Tbv.mjs";
5
+ import { L as resolveDeployTransport, O as isWranglerNonInteractiveOrCI, X as runWranglerAuthToken, _ as deriveWorkerName, _t as createNodeEmailDns, bt as renderAddressMap, gt as applyEmailSetup, h as createDeployWranglerRunner, k as loadProvisionModule, v as discoverRootWranglerConfig, vt as findEmailConfigConflicts, xt as renderEmailChecklist, yt as preflightEmail } from "./deploy-gCVaiJbS.mjs";
6
+ import { r as readProjectConfig } from "./project-DKG5Ra8p.mjs";
7
+ import { c as getToken, u as openBrowser } from "./auth-CQkSDS50.mjs";
8
+ import { A as writeProvisionedWranglerConfig } from "./wrangler-7K-bW_DL.mjs";
9
+ import { A as confirm, B as note, L as log, U as password, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
10
+ import { n as PlatformClient, t as PlatformApiError } from "./client-DKAsFA4X.mjs";
11
+ import { c as import_picocolors, i as createSpinner } from "./output-CbM85T4k.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";
@@ -324,6 +324,7 @@ async function emailDomainAdd(client, projectId, rawDomain, subdomain, deps = {}
324
324
  };
325
325
  const domain = normalizeEmailDomainInput(rawDomain);
326
326
  if (!isValidEmailDomainInput(domain)) return fail(`email: invalid domain '${rawDomain}'.`);
327
+ if (subdomain !== void 0) return fail("email: Platform-managed custom email requires a Cloudflare zone apex because inbound email uses its catch-all. Omit --subdomain, choose an unused zone apex, or use the platform shared mail address.");
327
328
  let target;
328
329
  try {
329
330
  target = resolveEmailDomainTarget(domain, subdomain);
@@ -332,28 +333,16 @@ async function emailDomainAdd(client, projectId, rawDomain, subdomain, deps = {}
332
333
  }
333
334
  const dns = deps.dns ?? await createNodeEmailDns();
334
335
  const decideTarget = async () => {
335
- if (target.forced) {
336
- const mx = await lookupMxForRender(dns, target.emailDomain);
337
- if (mx !== null && mx.length > 0) log.warn(`MX ${target.emailDomain} already carries MX (${mx.join(", ")}) — the platform re-checks over public DNS and may refuse it.`);
338
- } else {
339
- const mx = await lookupMxForRender(dns, domain);
340
- if (mx === null) log.info(`MX could not read ${domain}'s MX from here — the platform decides over public DNS.`);
341
- else if (mx.length > 0) {
342
- target = {
343
- emailDomain: `mail.${domain}`,
344
- forced: false
345
- };
346
- log.info(`MX ${domain} carries MX for ${mx[0]} → apex is off limits\n using ${target.emailDomain} [change with --subdomain]`);
347
- const subMx = await lookupMxForRender(dns, target.emailDomain);
348
- if (subMx !== null && subMx.length > 0) log.warn(`MX ${target.emailDomain} also carries MX (${subMx.join(", ")}) — the platform may refuse it; pick another with --subdomain.`);
349
- } else log.info(`MX ${domain} has no MX records → using the apex`);
350
- }
336
+ const mx = await lookupMxForRender(dns, domain);
337
+ if (mx === null) log.info(`MX could not read ${domain}'s MX from here — the platform decides over public DNS.`);
338
+ else if (mx.some((exchange) => !/\.mx\.cloudflare\.net$/i.test(exchange))) fail(`email: ${domain} already receives mail from another provider. Platform custom inbound email requires an unused Cloudflare zone apex; choose another apex or use the platform shared mail address.`);
339
+ else log.info(`MX using the requested apex ${domain}`);
351
340
  };
352
341
  let renewal;
353
342
  const settings = await client.getEmailSettings(projectId);
354
343
  if (settings.domains.management === "admin") {
355
344
  const rows = await client.listEmailDomains(projectId);
356
- const existing = [target.emailDomain, ...target.forced ? [] : [`mail.${domain}`]].map((candidate) => rows.find((row) => row.domain === candidate && row.managed_by !== "admin")).find((row) => row !== void 0);
345
+ const existing = [target.emailDomain].map((candidate) => rows.find((row) => row.domain === candidate && row.managed_by !== "admin")).find((row) => row !== void 0);
357
346
  if (!existing) {
358
347
  await decideTarget();
359
348
  const project = settings.domains.projectSlug ?? projectId;
@@ -398,7 +387,7 @@ async function emailDomainAdd(client, projectId, rawDomain, subdomain, deps = {}
398
387
  "Create the token in three clicks: Continue to summary → Create Token → Copy.",
399
388
  "Watching the clipboard for it — nothing is read until you copy, and it is cleared afterwards.",
400
389
  "(Enter pastes it yourself instead.)",
401
- `If the browser didn't open, visit:\n${import_picocolors.default.cyan(url)}`
390
+ `If the browser didn't open, visit:\n${import_picocolors.default.blue(url)}`
402
391
  ].join("\n"));
403
392
  const spinner = watchSpinner;
404
393
  const deadline = Date.now() + (deps.watchTimeoutMs ?? 6e5);
@@ -724,11 +713,7 @@ async function runEmailCloudflareCommandInConfig(root, args, project, configPath
724
713
  existingAddresses: rootConfig.addresses,
725
714
  existingVars: rootConfig.vars && typeof rootConfig.vars === "object" && !Array.isArray(rootConfig.vars) ? rootConfig.vars : null,
726
715
  configConflicts: findEmailConfigConflicts(rootConfig),
727
- wranglerArgs: [
728
- "-c",
729
- wranglerConfigPath,
730
- "--env="
731
- ],
716
+ configPath: wranglerConfigPath,
732
717
  apiBaseUrl,
733
718
  runWrangler,
734
719
  getSessionBearer,
@@ -1,11 +1,11 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { c as getToken } from "./auth-DLNN0D3Z.mjs";
3
- import { i as readDeploymentPlatform, o as readProjectConfig } from "./project-C0Fqu05O.mjs";
4
- import { r as generateEnvTypes, t as findEnvFile } from "./env-types-C2_bIk_b.mjs";
5
- import { d as formatEnvReport, g as validateProdEnv, u as fetchRemoteSecretNames } from "./env-validation-BB4GkLxn.mjs";
6
- import { N as note, O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
7
- import { n as PlatformClient } from "./client-BTZ3XkrB.mjs";
8
- import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
2
+ import { n as readDeploymentPlatform, r as readProjectConfig } from "./project-DKG5Ra8p.mjs";
3
+ import { c as getToken } from "./auth-CQkSDS50.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-C_8tPdhs.mjs";
6
+ import { B as note, H as outro, L as log, N as intro } from "./prompts-BNUoTiaf.mjs";
7
+ import { n as PlatformClient } from "./client-DKAsFA4X.mjs";
8
+ import { r as cliTitle } from "./output-CbM85T4k.mjs";
9
9
  import { mkdirSync, writeFileSync } from "node:fs";
10
10
  //#region src/cli/env.ts
11
11
  async function runEnvCommand(root, args) {
@@ -26,7 +26,7 @@ async function runCheck(root, useRemoteSecrets) {
26
26
  const platform = readDeploymentPlatform(root);
27
27
  if (platform === "none") throw new Error("env: Deployment is disabled. Run `void init` to choose a platform.");
28
28
  if (platform === "cloudflare") {
29
- const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BT6OWFBk.mjs");
29
+ const { listCloudflareSecrets, resolveCloudflareOperationContext } = await import("./cloudflare-operations-BCdXSsmo.mjs");
30
30
  remoteSecrets = await listCloudflareSecrets(resolveCloudflareOperationContext(root));
31
31
  } else {
32
32
  const token = getToken(root);
@@ -1,4 +1,4 @@
1
- import { c as VoidPlatformSandbox } from "./sandbox-qpNBT8a3.mjs";
1
+ import { l as VoidPlatformSandbox } from "./sandbox-XZAqzFlG.mjs";
2
2
  import { t as StandardSchemaV1 } from "./standard-schema-Fo_vCAZh.mjs";
3
3
  //#region src/runtime/env-public.d.ts
4
4
  type AnyValidator = StandardSchemaV1<unknown, unknown>;
@@ -1,6 +1,6 @@
1
1
  import { l as relative } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
3
- import { i as voidWarn } from "./log-ChfPKsVd.mjs";
3
+ import { i as voidWarn } from "./log-vqY3pqwI.mjs";
4
4
  import { existsSync } from "node:fs";
5
5
  //#region src/codegen/env-types.ts
6
6
  /** Roots already warned about duplicate env.ts files — dedupes noisy repeat calls. */
@@ -1,8 +1,8 @@
1
1
  import { a as join, n as dirname, u as resolve } from "./dist-BVqXeR_h.mjs";
2
- import { i as voidWarn } from "./log-ChfPKsVd.mjs";
3
- import { t as findEnvFile } from "./env-types-C2_bIk_b.mjs";
2
+ import { i as voidWarn } from "./log-vqY3pqwI.mjs";
3
+ import { t as findEnvFile } from "./env-types-D5kds_OZ.mjs";
4
4
  import { a as loadLocalEnv, i as isClientEnvKey, r as findLegacyEnvFiles } from "./env-_v349JBd.mjs";
5
- import { o as resolveWranglerArgv } from "./preset-UHj9ARyP.mjs";
5
+ import { c as resolveCloudflareOperationArgv, n as decodeCloudflareOperationResult, r as encodeCloudflareOperation } from "./cloudflare-process-B-wekeR6.mjs";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  import { pathToFileURL } from "node:url";
8
8
  import { spawn } from "node:child_process";
@@ -733,59 +733,12 @@ function firstDeployMessage(missingKeys) {
733
733
  ...names.map((key) => ` void secret put ${key}`)
734
734
  ].join("\n");
735
735
  }
736
- /**
737
- * The exact `wrangler secret list` argv. Verified against the wrangler 4.131.0
738
- * bundle (`wrangler-dist/cli.js`, `secretListCommand`):
739
- * - `secret list` accepts `--format` with choices `json`/`pretty`; `json` is
740
- * the default AND suppresses the banner (`printBanner` is format==='pretty'),
741
- * printing `JSON.stringify(secrets, null, ' ')` — an array of secret
742
- * objects (each with a string `name`, per `fetchSecrets` →
743
- * `GET /accounts/{id}/workers/scripts/{name}/secrets`). Pinned explicitly
744
- * so a future default change can't silently switch us to `pretty`.
745
- * - the worker name resolves from the config's `name` (`getLegacyScriptName`:
746
- * `args.name ?? config.name` — we pass no `--name`, the pinned config is
747
- * the single source of truth).
748
- * - `-c <configPath>` (global `--config` alias) pins the ONE resolved config;
749
- * `--env=` (explicit EMPTY environment) forces the top-level config env so
750
- * a project dotenv exporting `CLOUDFLARE_ENV` can never reselect a named
751
- * `env.*` block — same rationale as the provisioner's wranglerConfigArgs.
752
- */
753
- function secretListArgs(configPath) {
754
- return [
755
- "secret",
756
- "list",
757
- "--format=json",
758
- "-c",
759
- configPath,
760
- "--env="
761
- ];
762
- }
763
- /**
764
- * wrangler 4.131's `secret list` worker-not-found signal. When the worker has
765
- * never been deployed, `fetchSecrets` throws the API worker-not-found error and
766
- * `secretListCommand.handler` — ONLY when `isWorkerNotFoundError(e)` is true
767
- * (`e.code === 10007` WORKER_NOT_FOUND or `10090`
768
- * WORKER_LEGACY_ENVIRONMENT_NOT_FOUND, per wrangler-dist/cli.js) — rethrows a
769
- * `UserError` with this exact fixed diagnostic block:
770
- *
771
- * Worker "<name>"[ (env: <env>)] not found.
772
- *
773
- * If this is a new Worker, run `wrangler deploy` first to create it.
774
- * Otherwise, check that the Worker name is correct and you're logged into the right account.
775
- *
776
- * The API code itself is caught and never printed, so the child's stderr
777
- * carries this MESSAGE, not `10007`/`10090`. Matching only the bare lead-in
778
- * `If this is a new Worker` misclassifies any unrelated status-1
779
- * diagnostic that merely contains that fragment. So we require the COMPLETE
780
- * structured block — the `… not found.` lead AND both fixed sentences of the
781
- * guidance — after normalizing whitespace (wrangler may wrap/indent the
782
- * multi-line UserError when it prints). The block carries no secret content, so
783
- * it survives `WRANGLER_LOG_SANITIZE=true`; the combined output is inspected
784
- * INTERNALLY only and never copied into any thrown error.
785
- */
786
- function isWorkerNotFoundOutput(output) {
787
- const normalized = output.replace(/\s+/g, " ");
788
- return /Worker ".*?"(?: \(env: [^)]*\))? not found\./.test(normalized) && (normalized.includes("[code: 10007]") || normalized.includes("[code: 10090]") || normalized.includes("If this is a new Worker, run `wrangler deploy` first to create it.") && normalized.includes("Otherwise, check that the Worker name is correct and you're logged into the right account."));
736
+ /** Select the generated top-level Worker config for structured secret discovery. */
737
+ function secretListOperation(configPath) {
738
+ return {
739
+ type: "secret.list",
740
+ configPath
741
+ };
789
742
  }
790
743
  /**
791
744
  * Build the THROWN message for a wrangler-run failure from the structural
@@ -793,7 +746,7 @@ function isWorkerNotFoundOutput(output) {
793
746
  * `result.stdout`, a spawn-error string, or a rejection message — those are
794
747
  * unconstrained (the child inherits `process.env`) and could embed an env
795
748
  * value. Where wrangler's own diagnostics would help, the message tells the
796
- * user to re-run wrangler themselves rather than echoing its output here.
749
+ * user to retry through Void rather than echoing its output here.
797
750
  */
798
751
  function secretListFailureMessage(reason, detail) {
799
752
  const base = "env: `wrangler secret list` could not confirm the remote secrets";
@@ -815,14 +768,13 @@ function secretListError(reason, detail = {}) {
815
768
  * is never interpreted as "no secrets exist" — that would let a deploy proceed
816
769
  * with required secrets actually missing on the worker.
817
770
  *
818
- * A nonzero exit whose output carries wrangler's worker-not-found signal is a
771
+ * A completed failure with a typed missing-Worker code is a
819
772
  * DISTINCT, structured {@link SelfHostFirstDeployError} carrying the still
820
- * unsatisfied required `missingKeys` + `wrangler secret put` bootstrap guidance,
773
+ * unsatisfied required `missingKeys` + `void secret put` bootstrap guidance,
821
774
  * instead of the generic "list exited nonzero" dead end.
822
775
  *
823
776
  * Raw child output (stderr/stdout, spawn-error text, rejection messages)
824
- * is used ONLY internally: for worker-not-found classification the combined
825
- * output is matched to a boolean that never leaves this function. Every THROWN
777
+ * does not participate in missing-Worker classification. Every THROWN
826
778
  * error carries only a structural {@link SecretListFailureReason} code and safe
827
779
  * scalars (exit code / signal name), so no env value the child may have echoed
828
780
  * can reach the error's message, fields, or JSON — even under `VOID_ENV_UNMASK`.
@@ -830,7 +782,7 @@ function secretListError(reason, detail = {}) {
830
782
  async function fetchSelfHostSecretNames(run, configPath, missingKeys) {
831
783
  let result;
832
784
  try {
833
- result = await Promise.resolve(run(secretListArgs(configPath)));
785
+ result = await Promise.resolve(run(secretListOperation(configPath)));
834
786
  } catch {
835
787
  throw secretListError("spawn-error");
836
788
  }
@@ -838,15 +790,10 @@ async function fetchSelfHostSecretNames(run, configPath, missingKeys) {
838
790
  if (result.signal != null) throw secretListError("signal", { signal: String(result.signal) });
839
791
  if (typeof result.status !== "number" || result.status !== 0) {
840
792
  const exitCode = typeof result.status === "number" ? result.status : void 0;
841
- if (isWorkerNotFoundOutput(`${result.stdout}\n${result.stderr}`)) throw new SelfHostFirstDeployError(firstDeployMessage(missingKeys), missingKeys, exitCode);
793
+ if (Number.isSafeInteger(result.status) && result.status > 0 && ([10007, 10090].includes(result.errorCode ?? 0) || result.failure === "not-found")) throw new SelfHostFirstDeployError(firstDeployMessage(missingKeys), missingKeys, exitCode);
842
794
  throw secretListError("nonzero-exit", { exitCode });
843
795
  }
844
- let parsed;
845
- try {
846
- parsed = JSON.parse(result.stdout);
847
- } catch {
848
- throw secretListError("malformed-output");
849
- }
796
+ const parsed = result.data;
850
797
  if (!Array.isArray(parsed)) throw secretListError("malformed-output");
851
798
  const names = [];
852
799
  for (const member of parsed) {
@@ -881,7 +828,7 @@ const SECRET_LIST_TIMEOUT_MS = 12e4;
881
828
  /**
882
829
  * Default {@link RunSecretList}: resolves wrangler's REAL CLI entry
883
830
  * (`wrangler-dist/cli.js`, not the signal-swallowing `bin` wrapper) via
884
- * {@link resolveWranglerArgv} and spawns it ASYNC with `shell: false`, so every
831
+ * {@link resolveCloudflareOperationArgv} and spawns it ASYNC with `shell: false`, so every
885
832
  * argv element is passed literally (no shell → no metacharacter injection) and
886
833
  * the event loop stays free. A hard timeout SIGKILLs a hung child; the result
887
834
  * carries `{status, signal, error}` provenance so the caller fails closed on
@@ -894,11 +841,11 @@ const SECRET_LIST_TIMEOUT_MS = 12e4;
894
841
  * fires), a bounded fallback settles the call as a HARD failure anyway.
895
842
  */
896
843
  function createDefaultSecretListRunner(root, options) {
897
- const launcher = options?.launcher ?? resolveWranglerArgv(root);
844
+ const launcher = options?.launcher ?? resolveCloudflareOperationArgv(root);
898
845
  const timeoutMs = options?.timeoutMs ?? SECRET_LIST_TIMEOUT_MS;
899
846
  const [command, ...prefix] = launcher;
900
847
  return (args) => new Promise((resolvePromise) => {
901
- const child = spawn(command, [...prefix, ...args], {
848
+ const child = spawn(command, [...prefix, ...encodeCloudflareOperation(args)], {
902
849
  cwd: root,
903
850
  shell: false,
904
851
  env: secretListEnv(options?.accountId),
@@ -927,7 +874,7 @@ function createDefaultSecretListRunner(root, options) {
927
874
  settled = true;
928
875
  clearTimeout(commandTimer);
929
876
  clearTimeout(killFallbackTimer);
930
- resolvePromise(result);
877
+ resolvePromise(decodeCloudflareOperationResult(result));
931
878
  };
932
879
  const timeoutNote = `env: wrangler secret list exceeded the ${timeoutMs}ms timeout`;
933
880
  const commandTimer = setTimeout(() => {
@@ -1,2 +1,2 @@
1
- import { a as computeInvalidEmittedKeys, c as deriveSelfHostSchemaFacts, p as readEmittedWorkerVars, r as SelfHostSchemaError } from "./env-validation-BB4GkLxn.mjs";
1
+ import { a as computeInvalidEmittedKeys, c as deriveSelfHostSchemaFacts, p as readEmittedWorkerVars, r as SelfHostSchemaError } from "./env-validation-C_8tPdhs.mjs";
2
2
  export { SelfHostSchemaError, computeInvalidEmittedKeys, deriveSelfHostSchemaFacts, readEmittedWorkerVars };
@@ -1,8 +1,8 @@
1
1
  import { n as ofetch } from "./fetch-error-Dj3crt0e.mjs";
2
+ import { t as interpolateRouteParams } from "./route-url-CG7U-cRN.mjs";
2
3
  //#region src/runtime/fetch.ts
3
4
  async function fetch(path, options) {
4
- let url = path;
5
- if (options?.params) for (const [key, value] of Object.entries(options.params)) url = url.replace(`:${key}`, encodeURIComponent(value));
5
+ const url = interpolateRouteParams(path, options?.params);
6
6
  return ofetch(url, {
7
7
  method: options?.method ?? "GET",
8
8
  body: options?.body,
@@ -1,4 +1,5 @@
1
- import { n as ofetch } from "./fetch-error-Dj3crt0e.mjs";
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
3
  //#region src/runtime/fetch-stream.ts
3
4
  /**
4
5
  * Consume an SSE endpoint as an async generator of text chunks.
@@ -20,8 +21,7 @@ import { n as ofetch } from "./fetch-error-Dj3crt0e.mjs";
20
21
  * @yields {string} Text chunks from SSE data frames.
21
22
  */
22
23
  async function* fetchStream(path, options) {
23
- let url = path;
24
- if (options?.params) for (const [key, value] of Object.entries(options.params)) url = url.replace(`:${key}`, encodeURIComponent(value));
24
+ const url = interpolateRouteParams(path, options?.params);
25
25
  const body = (await ofetch.raw(url, {
26
26
  method: options?.method ?? "POST",
27
27
  body: options?.body,
@@ -35,6 +35,16 @@ async function* fetchStream(path, options) {
35
35
  const reader = body.getReader();
36
36
  const decoder = new TextDecoder();
37
37
  let buffer = "";
38
+ let event = "";
39
+ const terminal = (data) => {
40
+ if (event !== "void:error" && event !== "void:limit") return;
41
+ let message = "Generation was interrupted.";
42
+ try {
43
+ const body = JSON.parse(data);
44
+ if (typeof body.message === "string") message = body.message;
45
+ } catch {}
46
+ throw new FetchError(message);
47
+ };
38
48
  try {
39
49
  while (true) {
40
50
  const { done, value } = await reader.read();
@@ -44,9 +54,18 @@ async function* fetchStream(path, options) {
44
54
  buffer = lines.pop();
45
55
  for (const line of lines) {
46
56
  const trimmed = line.trim();
47
- if (!trimmed || trimmed.startsWith(":")) continue;
57
+ if (trimmed.startsWith("event:")) {
58
+ event = trimmed.slice(6).trim();
59
+ continue;
60
+ }
61
+ if (!trimmed) {
62
+ event = "";
63
+ continue;
64
+ }
65
+ if (trimmed.startsWith(":")) continue;
48
66
  if (trimmed.startsWith("data: ")) {
49
67
  const data = trimmed.slice(6);
68
+ terminal(data);
50
69
  if (data === "[DONE]") return;
51
70
  try {
52
71
  const parsed = JSON.parse(data);
@@ -64,6 +83,7 @@ async function* fetchStream(path, options) {
64
83
  const trimmed = buffer.trim();
65
84
  if (trimmed.startsWith("data: ")) {
66
85
  const data = trimmed.slice(6);
86
+ terminal(data);
67
87
  if (data !== "[DONE]") try {
68
88
  const parsed = JSON.parse(data);
69
89
  if (typeof parsed.response === "string") yield parsed.response;
@@ -1,12 +1,12 @@
1
1
  import { a as join, l as relative, n as dirname } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
3
3
  import { m as readConfig, u as getDatabaseDialect } from "./config-Br_JZD6u.mjs";
4
- import { n as ensureProjectTsconfig } from "./project-tsconfig-B8GeM0RM.mjs";
5
4
  import { n as readJournal, t as collectMigrations } from "./collect-DiTn9yr6.mjs";
6
- import { I as select, O as intro, P as outro, T as cancel, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
5
+ import { n as ensureProjectTsconfig } from "./project-tsconfig-B8GeM0RM.mjs";
6
+ import { H as outro, K as select, L as log, N as intro, O as cancel, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
7
7
  import { t as writeDrizzleConfig } from "./config-D8MOgiQV.mjs";
8
- import { r as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-CIUwFpjB.mjs";
9
- import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
8
+ import { r as listDrizzleArtifacts, t as assertJournalCoherence } from "./validate-ctOrgiS3.mjs";
9
+ import { r as cliTitle } from "./output-CbM85T4k.mjs";
10
10
  import { t as buildDrizzleKitSpawnEnv } from "./yarn-pnp-BV4AzNul.mjs";
11
11
  import { existsSync, mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from "node:fs";
12
12
  import { fileURLToPath } from "node:url";
@@ -0,0 +1,2 @@
1
+ import { r as runGenCommand } from "./gen-CshAkukR.mjs";
2
+ export { runGenCommand };
@@ -1,8 +1,8 @@
1
- import { c as getToken, d as openBrowser, n as createCodeChallenge, r as createCodeVerifier, t as awaitBrowserCallback } from "./auth-DLNN0D3Z.mjs";
2
- import { o as readProjectConfig } from "./project-C0Fqu05O.mjs";
3
- import { B as text, E as confirm, I as select, T as cancel, W as isCancel, j as log } from "./dist-CTBk70IR.mjs";
4
- import { n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-BTZ3XkrB.mjs";
5
- import { c as import_picocolors } from "./output-Dm_A4Tbv.mjs";
1
+ import { r as readProjectConfig } from "./project-DKG5Ra8p.mjs";
2
+ import { c as getToken, n as createCodeChallenge, r as createCodeVerifier, t as awaitBrowserCallback, u as openBrowser } from "./auth-CQkSDS50.mjs";
3
+ import { A as confirm, K as select, L as log, O as cancel, X as text, tt as isCancel } from "./prompts-BNUoTiaf.mjs";
4
+ import { n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-DKAsFA4X.mjs";
5
+ import { c as import_picocolors } from "./output-CbM85T4k.mjs";
6
6
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
7
7
  import { t as collectGitDeployMetadata } from "./git-metadata-D-gurjzG.mjs";
8
8
  import { randomBytes } from "node:crypto";
@@ -145,7 +145,7 @@ async function runInstall(root, client, linkIdentity = runGithubLink) {
145
145
  }
146
146
  } else throw err;
147
147
  }
148
- log.message(`Open this URL to install the Void GitHub App:\n${import_picocolors.default.cyan(url)}`);
148
+ log.message(`Open this URL to install the Void GitHub App:\n${import_picocolors.default.blue(url)}`);
149
149
  const { execFile } = await import("node:child_process");
150
150
  openBrowser(url, execFile);
151
151
  log.message("After installing, run `void github connect` to link a repository to your project.");
@@ -173,7 +173,7 @@ async function runGithubLink(root, client) {
173
173
  return url;
174
174
  },
175
175
  describeError: (p) => p.get("error") ? "GitHub authorization failed." : null,
176
- onUrl: (url) => log.message(`Open this URL to link your GitHub account:\n${import_picocolors.default.cyan(url)}`),
176
+ onUrl: (url) => log.message(`Open this URL to link your GitHub account:\n${import_picocolors.default.blue(url)}`),
177
177
  finalize: async (params) => {
178
178
  const linkCode = params.get("link_code");
179
179
  if (!linkCode) throw new Error("github: link callback did not return a link code.");
@@ -214,7 +214,7 @@ async function performGithubJoin(client) {
214
214
  return url;
215
215
  },
216
216
  describeError: (p) => p.get("error") ? "GitHub authorization failed." : null,
217
- onUrl: (url) => log.message(`Open this URL to join your organization's shared GitHub App installations:\n${import_picocolors.default.cyan(url)}`),
217
+ onUrl: (url) => log.message(`Open this URL to join your organization's shared GitHub App installations:\n${import_picocolors.default.blue(url)}`),
218
218
  finalize: async (params) => {
219
219
  const joinCode = params.get("join_code");
220
220
  if (!joinCode) throw new Error("github: join callback did not return a join code.");
@@ -280,7 +280,7 @@ async function runGithubConnectAuthorize(client, installationId, repoFullName) {
280
280
  if (e === "repo_not_accessible") return `You don't have access to ${repoFullName} under this installation on GitHub.`;
281
281
  return e ? "GitHub authorization failed." : null;
282
282
  },
283
- onUrl: (url) => log.message(`Open this URL to authorize access to ${repoFullName}:\n${import_picocolors.default.cyan(url)}`),
283
+ onUrl: (url) => log.message(`Open this URL to authorize access to ${repoFullName}:\n${import_picocolors.default.blue(url)}`),
284
284
  finalize: async (params) => {
285
285
  const grant = params.get("connect_grant");
286
286
  if (!grant) throw new Error("github: connect authorization did not return a grant.");
@@ -303,8 +303,8 @@ async function promptRepoFullName(root) {
303
303
  const input = await text({
304
304
  message: "Repository (owner/repo):",
305
305
  placeholder: gitDefault ?? "owner/repo",
306
- initialValue: gitDefault ?? "",
307
- validate: (value) => /^[^/\s]+\/[^/\s]+$/.test((value ?? "").trim()) ? void 0 : "Enter the repository as owner/repo."
306
+ defaultValue: gitDefault ?? void 0,
307
+ validate: (value) => /^[^/\s]+\/[^/\s]+$/.test((value || gitDefault || "").trim()) ? void 0 : "Enter the repository as owner/repo."
308
308
  });
309
309
  if (isCancel(input)) {
310
310
  cancel("Cancelled.");
@@ -447,7 +447,7 @@ async function runConnect(root, client, args) {
447
447
  const input = await text({
448
448
  message: "Branch to deploy from:",
449
449
  placeholder: branchDefault,
450
- initialValue: branchDefault
450
+ defaultValue: branchDefault
451
451
  });
452
452
  if (isCancel(input)) {
453
453
  cancel("Cancelled.");
@@ -483,7 +483,7 @@ async function runConnect(root, client, args) {
483
483
  const input = await text({
484
484
  message: "Deploy workflow file:",
485
485
  placeholder: DEFAULT_WORKFLOW_PATH,
486
- initialValue: DEFAULT_WORKFLOW_PATH,
486
+ defaultValue: DEFAULT_WORKFLOW_PATH,
487
487
  validate(value) {
488
488
  const v = (value ?? "").trim();
489
489
  if (v.length === 0 || isValidWorkflowPath(v)) return;
@@ -1,4 +1,4 @@
1
- import { c as VoidPlatformSandbox } from "./sandbox-qpNBT8a3.mjs";
1
+ import { l as VoidPlatformSandbox } from "./sandbox-XZAqzFlG.mjs";
2
2
  import { t as StandardSchemaV1 } from "./standard-schema-Fo_vCAZh.mjs";
3
3
  import { n as HeadDescriptor } from "./head-Do8P4puT.mjs";
4
4
  import { r as AuthUser, t as AuthSession } from "./auth-DkcFflXV.mjs";
@@ -1,6 +1,6 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
2
  import { a as convertFallbacksConfig, c as convertRewritesConfig, f as isProtocolRelative, l as countSplats, n as VALID_REDIRECT_STATUSES, o as convertHeadersConfig, p as parseHostPrefixedSource, s as convertRedirectsConfig } from "./config-Br_JZD6u.mjs";
3
- import { i as voidWarn } from "./log-ChfPKsVd.mjs";
3
+ import { i as voidWarn } from "./log-vqY3pqwI.mjs";
4
4
  import { existsSync, readFileSync } from "node:fs";
5
5
  //#region src/cli/headers.ts
6
6
  /**