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,8 +1,8 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { N as note, P as outro } from "./dist-CTBk70IR.mjs";
2
+ import { B as note, H as outro } from "./prompts-BNUoTiaf.mjs";
3
3
  import { n as getPackageDir } from "./agents-B_pX_HmQ.mjs";
4
- import { c as import_picocolors, s as helpLine, t as categoryTitle, u as sectionTitle } from "./output-Dm_A4Tbv.mjs";
5
- import { t as OPERATOR_MAX_TIMEOUT_MS } from "./operator-client-DUwumHpQ.mjs";
4
+ import { c as import_picocolors, s as helpLine, t as categoryTitle, u as sectionTitle } from "./output-CbM85T4k.mjs";
5
+ import { n as operatorGroups, t as operatorCommands } from "./operator-args-B3BTmSoi.mjs";
6
6
  import { readFileSync } from "node:fs";
7
7
  //#region src/cli/ascii.ts
8
8
  const asciiArts = [
@@ -26,647 +26,6 @@ dP .dP .d8888b. dP .d888b88
26
26
  |___/\\____/_/\\__,_/`
27
27
  ];
28
28
  //#endregion
29
- //#region src/cli/operator-args.ts
30
- const operatorCommands = [
31
- {
32
- group: "auth",
33
- action: "login",
34
- description: "Sign in as a platform administrator",
35
- path: "/session",
36
- values: { provider: "OAuth provider" },
37
- booleans: ["token-stdin"]
38
- },
39
- {
40
- group: "auth",
41
- action: "logout",
42
- description: "Revoke the current operator session and remove its local credential",
43
- path: "/session/logout"
44
- },
45
- {
46
- group: "auth",
47
- action: "status",
48
- description: "Inspect operator identity, expiry, and capabilities",
49
- path: "/session"
50
- },
51
- {
52
- group: "auth",
53
- action: "token",
54
- description: "Print an operator token; exchange an API session with --token-stdin",
55
- path: "/session",
56
- booleans: ["token-stdin"]
57
- },
58
- {
59
- group: "user",
60
- action: "list",
61
- description: "List users",
62
- path: "/users",
63
- values: { search: "Search login or email" }
64
- },
65
- {
66
- group: "user",
67
- action: "show",
68
- description: "Inspect a user, usage, and projects",
69
- path: "/users/:id",
70
- positional: ["id"]
71
- },
72
- {
73
- group: "user",
74
- action: "plan",
75
- description: "Change a user plan",
76
- path: "/users/:id/plan",
77
- positional: ["id", "plan"],
78
- method: "POST"
79
- },
80
- {
81
- group: "user",
82
- action: "suspend",
83
- description: "Suspend a user and their projects",
84
- path: "/users/:id/suspend",
85
- positional: ["id"],
86
- values: { reason: "Reason for suspension" },
87
- method: "POST"
88
- },
89
- {
90
- group: "user",
91
- action: "restore",
92
- description: "Restore a suspended user",
93
- path: "/users/:id/restore",
94
- positional: ["id"],
95
- method: "POST"
96
- },
97
- {
98
- group: "user",
99
- action: "delete",
100
- description: "Delete a user and all owned resources",
101
- path: "/users/:id/delete",
102
- positional: ["id"],
103
- method: "POST"
104
- },
105
- {
106
- group: "project",
107
- action: "list",
108
- description: "List tenant projects",
109
- path: "/projects",
110
- values: {
111
- user: "Owner user ID",
112
- search: "Search projects"
113
- }
114
- },
115
- {
116
- group: "project",
117
- action: "show",
118
- description: "Inspect a project and its resources",
119
- path: "/projects/:id",
120
- positional: ["id"]
121
- },
122
- {
123
- group: "project",
124
- action: "delete",
125
- description: "Delete a project and its resources",
126
- path: "/projects/:id/delete",
127
- positional: ["id"],
128
- method: "POST"
129
- },
130
- {
131
- group: "project",
132
- action: "owner",
133
- description: "Transfer project ownership to another registered user",
134
- path: "/projects/:id/owner",
135
- positional: ["id", "userId"],
136
- method: "POST"
137
- },
138
- {
139
- group: "zero-trust",
140
- action: "status",
141
- description: "Inspect saved platform Zero Trust configuration and project state counts",
142
- path: "/zero-trust",
143
- booleans: ["check"]
144
- },
145
- {
146
- group: "zero-trust",
147
- action: "configure",
148
- description: "Configure and reconcile project Zero Trust protection",
149
- path: "/zero-trust/configure",
150
- values: {
151
- "identity-providers": "Comma-separated Access identity provider IDs",
152
- policies: "Comma-separated reusable Access policy IDs",
153
- "existing-projects": "Required when enabling: protected or public for existing projects"
154
- },
155
- booleans: ["token-stdin", "protect-new-projects"],
156
- method: "POST"
157
- },
158
- {
159
- group: "zero-trust",
160
- action: "reconcile",
161
- description: "Repair platform and project Access configuration drift",
162
- path: "/zero-trust/reconcile",
163
- method: "POST"
164
- },
165
- {
166
- group: "zero-trust",
167
- action: "disable",
168
- description: "Remove Void-managed Access applications and make projects public",
169
- path: "/zero-trust/disable",
170
- method: "POST"
171
- },
172
- {
173
- group: "zero-trust",
174
- action: "project-status",
175
- description: "Inspect one project Zero Trust override and effective state",
176
- path: "/zero-trust/projects/:id",
177
- positional: ["id"]
178
- },
179
- {
180
- group: "zero-trust",
181
- action: "project-protect",
182
- description: "Protect one project, overriding the platform default",
183
- path: "/zero-trust/projects/:id",
184
- positional: ["id"],
185
- method: "POST"
186
- },
187
- {
188
- group: "zero-trust",
189
- action: "project-public",
190
- description: "Make one project public, overriding the platform default",
191
- path: "/zero-trust/projects/:id",
192
- positional: ["id"],
193
- method: "POST"
194
- },
195
- {
196
- group: "zero-trust",
197
- action: "project-reconcile",
198
- description: "Repair Access configuration drift for one project",
199
- path: "/zero-trust/projects/:id/reconcile",
200
- positional: ["id"],
201
- method: "POST"
202
- },
203
- {
204
- group: "deployment",
205
- action: "list",
206
- description: "List tenant deployments",
207
- path: "/deployments",
208
- values: {
209
- project: "Project ID",
210
- search: "Search deployments",
211
- status: "Deployment status"
212
- }
213
- },
214
- {
215
- group: "deployment",
216
- action: "show",
217
- description: "Inspect a deployment",
218
- path: "/deployments/:id",
219
- positional: ["id"]
220
- },
221
- {
222
- group: "deployment",
223
- action: "cancel",
224
- description: "Cancel a deployment",
225
- path: "/deployments/:id/cancel",
226
- positional: ["id"],
227
- method: "POST"
228
- },
229
- {
230
- group: "deployment",
231
- action: "logs",
232
- description: "Read runtime logs (JSON follow emits one object per line)",
233
- path: "/deployments/:id/logs",
234
- positional: ["id"],
235
- values: {
236
- since: "Duration or ISO timestamp",
237
- cursor: "Opaque continuation cursor"
238
- },
239
- booleans: ["follow"]
240
- },
241
- {
242
- group: "build",
243
- action: "show",
244
- description: "Inspect a managed build",
245
- path: "/builds/:id",
246
- positional: ["id"]
247
- },
248
- {
249
- group: "build",
250
- action: "logs",
251
- description: "Read build logs (JSON follow emits one object per line)",
252
- path: "/builds/:id/logs",
253
- positional: ["id"],
254
- values: { since: "Last received sequence number" },
255
- booleans: ["follow"]
256
- },
257
- {
258
- group: "signup",
259
- action: "show",
260
- description: "Inspect signup restrictions and allowlist",
261
- path: "/signup"
262
- },
263
- {
264
- group: "signup",
265
- action: "restrict",
266
- description: "Restrict signup to the allowlist",
267
- path: "/signup/restrict",
268
- method: "POST"
269
- },
270
- {
271
- group: "signup",
272
- action: "open",
273
- description: "Open public signup",
274
- path: "/signup/open",
275
- method: "POST"
276
- },
277
- {
278
- group: "signup",
279
- action: "allow",
280
- description: "Add a GitHub, email, or exact login identity grant",
281
- path: "/signup/allow",
282
- positional: ["type", "pattern"],
283
- usage: ["void platform signup allow <github|email> <pattern> [options]", "void platform signup allow identity <connection-id> <subject> [options]"],
284
- values: { note: "Allowlist note" },
285
- method: "POST"
286
- },
287
- {
288
- group: "signup",
289
- action: "disallow",
290
- description: "Remove a GitHub, email, or exact login identity grant",
291
- path: "/signup/disallow",
292
- positional: ["type", "pattern"],
293
- usage: ["void platform signup disallow <github|email> <pattern> [options]", "void platform signup disallow identity <connection-id> <subject> [options]"],
294
- method: "POST"
295
- },
296
- {
297
- group: "signup",
298
- action: "remove",
299
- description: "Remove a GitHub or email allowlist pattern (compatibility alias)",
300
- path: "/signup/remove",
301
- positional: ["type", "pattern"],
302
- method: "POST"
303
- },
304
- {
305
- group: "invitation",
306
- action: "list",
307
- description: "List invitations",
308
- path: "/invitations"
309
- },
310
- {
311
- group: "invitation",
312
- action: "send",
313
- description: "Send invitations to comma-separated email addresses",
314
- path: "/invitations/send",
315
- positional: ["emails"],
316
- method: "POST"
317
- },
318
- {
319
- group: "invitation",
320
- action: "revoke",
321
- description: "Revoke an invitation",
322
- path: "/invitations/:id/revoke",
323
- positional: ["id"],
324
- method: "POST"
325
- },
326
- {
327
- group: "system",
328
- action: "overview",
329
- description: "Inspect platform usage and capacity",
330
- path: "/system/overview"
331
- },
332
- {
333
- group: "system",
334
- action: "health",
335
- description: "Check platform health",
336
- path: "/system/health"
337
- },
338
- {
339
- group: "system",
340
- action: "cli-versions",
341
- description: "Inspect CLI version adoption and deployment statistics",
342
- path: "/system/cli-versions"
343
- },
344
- {
345
- group: "system",
346
- action: "events",
347
- description: "List operator audit events",
348
- path: "/system/events"
349
- },
350
- {
351
- group: "system",
352
- action: "backfill-queue-tokens",
353
- description: "Repair missing queue authentication tokens",
354
- path: "/system/backfill-queue-tokens",
355
- method: "POST"
356
- },
357
- {
358
- group: "system",
359
- action: "sandbox-drain",
360
- description: "Drain and verify managed Sandbox container applications",
361
- path: "/system/sandbox-drain",
362
- values: { cursor: "Opaque cursor returned by --plan" },
363
- method: "POST"
364
- },
365
- {
366
- group: "email",
367
- action: "policy",
368
- description: "Show the recipient policy for the shared sender",
369
- path: "/email/policy"
370
- },
371
- {
372
- group: "email",
373
- action: "policy-set",
374
- description: "Set the recipient policy: verified, domains, or any",
375
- path: "/email/policy",
376
- positional: ["mode"],
377
- values: { domains: "Comma-separated recipient domains for mode=domains" },
378
- method: "POST"
379
- },
380
- {
381
- group: "email",
382
- action: "settings",
383
- description: "Show platform email settings",
384
- path: "/email/settings"
385
- },
386
- {
387
- group: "email",
388
- action: "settings-set",
389
- description: "Set who manages email domains: self-serve or admin",
390
- path: "/email/settings",
391
- values: { domains: "self-serve or admin" },
392
- method: "POST"
393
- },
394
- {
395
- group: "email",
396
- action: "limit",
397
- description: "Set a project's monthly and burst recipient submission caps",
398
- path: "/email/projects/:project/limit",
399
- positional: ["project"],
400
- values: {
401
- monthly: "Recipient submissions per UTC calendar month",
402
- burst: "Recipient submissions per rolling 60-second window"
403
- },
404
- method: "POST"
405
- },
406
- {
407
- group: "email",
408
- action: "logs",
409
- description: "Inspect retained email receipt and recipient outcomes for a project",
410
- path: "/email/projects/:project/logs",
411
- positional: ["project"]
412
- },
413
- {
414
- group: "email",
415
- action: "attempts",
416
- description: "List unresolved email send attempts awaiting operator reconciliation",
417
- path: "/email/attempts",
418
- values: { project: "Project id or slug" }
419
- },
420
- {
421
- group: "email",
422
- action: "attempt-resolve",
423
- description: "Resolve a stopped send as outcome unknown and release its cleanup fence",
424
- path: "/email/attempts/:id/resolve",
425
- positional: ["id"],
426
- values: { reason: "Audit reason without recipient or message content" },
427
- booleans: ["ended"],
428
- method: "POST"
429
- },
430
- {
431
- group: "email",
432
- action: "operation-resolve",
433
- description: "Resolve an ended ambiguous email setup write with operator attestation",
434
- path: "/email/operations/:id/resolve",
435
- positional: ["id"],
436
- values: {
437
- outcome: "Provider outcome: applied or not-applied",
438
- reason: "Audit reason for the verified provider outcome"
439
- },
440
- booleans: ["ended"],
441
- method: "POST"
442
- },
443
- {
444
- group: "email",
445
- action: "domains",
446
- description: "List email domains registered on this platform",
447
- path: "/email/domains",
448
- values: { project: "Project id or slug" }
449
- },
450
- {
451
- group: "email",
452
- action: "domain-add",
453
- description: "Register an email domain for a project with the platform credential",
454
- path: "/email/domains",
455
- positional: ["domain"],
456
- values: { project: "Project id or slug" },
457
- booleans: ["token-stdin"],
458
- method: "POST"
459
- },
460
- {
461
- group: "email",
462
- action: "domain-status",
463
- description: "Inspect an email domain's setup, credential and relay",
464
- path: "/email/domains/:domain",
465
- positional: ["domain"]
466
- },
467
- {
468
- group: "email",
469
- action: "domain-sync",
470
- description: "Reconcile an email domain with its Cloudflare setup",
471
- path: "/email/domains/:domain/sync",
472
- positional: ["domain"],
473
- method: "POST"
474
- },
475
- {
476
- group: "email",
477
- action: "domain-rotate-secret",
478
- description: "Rotate an email domain's ingress secret",
479
- path: "/email/domains/:domain/rotate-secret",
480
- positional: ["domain"],
481
- method: "POST"
482
- },
483
- {
484
- group: "email",
485
- action: "domain-remove",
486
- description: "Remove an email domain and its Cloudflare setup",
487
- path: "/email/domains/:domain/remove",
488
- positional: ["domain"],
489
- booleans: ["token-stdin"],
490
- method: "POST"
491
- },
492
- {
493
- group: "worker",
494
- action: "list",
495
- description: "List hosted platform workers",
496
- path: "/workers",
497
- values: { environment: "production or staging" }
498
- },
499
- {
500
- group: "worker",
501
- action: "show",
502
- description: "Inspect hosted worker versions",
503
- path: "/workers/:id",
504
- positional: ["id"],
505
- values: { environment: "production or staging" }
506
- },
507
- {
508
- group: "worker",
509
- action: "rollback",
510
- description: "Roll back a hosted worker to a version",
511
- path: "/workers/:id/rollback",
512
- positional: ["id", "versionId"],
513
- values: { environment: "production or staging" },
514
- method: "POST"
515
- },
516
- {
517
- group: "worker",
518
- action: "rollback-all",
519
- description: "Roll back all hosted workers to their previous versions",
520
- path: "/workers/rollback-all",
521
- values: { environment: "production or staging" },
522
- method: "POST"
523
- },
524
- {
525
- group: "worker",
526
- action: "events",
527
- description: "List hosted worker events or inspect a batch",
528
- path: "/workers/events",
529
- positional: ["batchId"],
530
- optionalPositional: true,
531
- values: { environment: "production or staging" }
532
- }
533
- ];
534
- const operatorGroups = [...new Set(operatorCommands.map(({ group }) => group))];
535
- function parseOperatorArgs(args) {
536
- const positional = [];
537
- const values = {};
538
- const flags = /* @__PURE__ */ new Set();
539
- const booleanFlags = /* @__PURE__ */ new Set([
540
- "json",
541
- "plan",
542
- "yes",
543
- "follow",
544
- "token-stdin",
545
- "force",
546
- "ended",
547
- ...operatorCommands.flatMap((command) => command.booleans ?? [])
548
- ]);
549
- for (let index = 0; index < args.length; index++) {
550
- const arg = args[index];
551
- if (!arg.startsWith("-")) {
552
- positional.push(arg);
553
- continue;
554
- }
555
- if (!arg.startsWith("--")) throw new Error(`platform: Unknown flag '${arg}'.`);
556
- const flag = arg.slice(2);
557
- if (flags.has(flag) || Object.hasOwn(values, flag)) throw new Error(`platform: Duplicate flag '${arg}'.`);
558
- if (booleanFlags.has(flag)) flags.add(flag);
559
- else {
560
- const value = args[++index];
561
- if (!value || value.startsWith("-")) throw new Error(`platform: ${arg} requires a value.`);
562
- values[flag] = value;
563
- }
564
- }
565
- const [group = "", action = "", ...parameters] = positional;
566
- if (!operatorGroups.includes(group)) throw new Error("platform: Unknown operator command group.");
567
- const parsed = {
568
- subcommand: "operator",
569
- group,
570
- action,
571
- connection: values.connection ?? "",
572
- json: flags.has("json"),
573
- plan: flags.has("plan"),
574
- yes: flags.has("yes"),
575
- follow: flags.has("follow"),
576
- tokenStdin: flags.has("token-stdin"),
577
- provider: values.provider ?? "github",
578
- ...values.provider ? { providerExplicit: true } : {},
579
- method: "GET",
580
- path: "",
581
- query: {},
582
- body: {}
583
- };
584
- if (!action && args.length === 1) return parsed;
585
- const command = operatorCommands.find((entry) => entry.group === group && entry.action === action);
586
- if (!command) throw new Error(`platform: Usage: void platform ${group} <${operatorCommands.filter((entry) => entry.group === group).map(({ action }) => action).join("|")}>.`);
587
- const count = command.positional?.length ?? 0;
588
- const identitySignupEntry = group === "signup" && ["allow", "disallow"].includes(action) && parameters[0] === "identity";
589
- if (group === "signup" && action === "remove" && parameters[0] === "identity") throw new Error("platform: Use `void platform signup disallow identity <connection-id> <subject>`.");
590
- const expectedCount = identitySignupEntry ? 3 : count;
591
- if (parameters.length > expectedCount || !command.optionalPositional && parameters.length !== expectedCount) throw new Error(`platform: Usage: ${command.usage?.[identitySignupEntry ? 1 : 0]?.replace(/ \[options\]$/, "") ?? `void platform ${group} ${action}${command.positional?.map((name) => ` <${name}>`).join("") ?? ""}`}.`);
592
- const paged = action === "list" || action === "events" || action === "logs" || action === "attempts";
593
- const allowed = /* @__PURE__ */ new Set([
594
- "connection",
595
- ...command.method ? ["timeout"] : [],
596
- ...Object.keys(command.values ?? {}),
597
- ...paged ? ["limit", ...action !== "logs" || group === "email" ? ["page"] : []] : []
598
- ]);
599
- for (const name of Object.keys(values)) if (!allowed.has(name)) throw new Error(`platform: Unknown flag '--${name}' for ${group} ${action}.`);
600
- for (const name of flags) if (![
601
- "json",
602
- ...command.method ? ["yes", "plan"] : [],
603
- ...command.booleans ?? []
604
- ].includes(name)) throw new Error(`platform: Unknown flag '--${name}' for ${group} ${action}.`);
605
- if (parsed.plan && parsed.yes) throw new Error("platform: --plan and --yes cannot be combined.");
606
- parsed.path = command.path;
607
- parsed.method = command.method ?? "GET";
608
- if (identitySignupEntry) {
609
- const connectionId = parameters[1];
610
- const subject = parameters[2];
611
- if (!/^[a-z][a-z0-9-]{0,63}$/.test(connectionId)) throw new Error("platform: Invalid login connection ID.");
612
- if (!subject || subject.length > 255) throw new Error("platform: Identity subject must be 1–255 characters.");
613
- parsed.body = {
614
- type: "identity",
615
- connectionId,
616
- subject
617
- };
618
- } else for (const [index, name] of (command.positional ?? []).entries()) {
619
- const value = parameters[index];
620
- if (value === void 0) continue;
621
- if (value === "." || value === "..") throw new Error("platform: An object ID cannot be a dot path segment.");
622
- if (parsed.path.includes(`:${name}`)) parsed.path = parsed.path.replace(`:${name}`, encodeURIComponent(value));
623
- else if (group === "worker" && action === "events") parsed.path += `/${encodeURIComponent(value)}`;
624
- else parsed.body[name] = name === "emails" ? value.split(",").map((email) => email.trim()) : value;
625
- }
626
- for (const [name, value] of Object.entries(values)) {
627
- if (name === "connection" || name === "provider") continue;
628
- if (name === "timeout") {
629
- const maximum = OPERATOR_MAX_TIMEOUT_MS / 1e3;
630
- if (!/^[1-9]\d*$/.test(value) || Number(value) > maximum) throw new Error(`platform: --timeout must be an integer from 1 to ${maximum} seconds.`);
631
- parsed.timeoutMs = Number(value) * 1e3;
632
- continue;
633
- }
634
- if (name === "page" || name === "limit") {
635
- const maximum = name === "limit" ? action === "logs" && group !== "email" ? 500 : 100 : 1e6;
636
- if (!/^[1-9]\d*$/.test(value) || Number(value) > maximum) throw new Error(`platform: --${name} must be an integer from 1 to ${maximum}.`);
637
- }
638
- if (name === "since" && group === "build" && (!/^\d+$/.test(value) || !Number.isSafeInteger(Number(value)))) throw new Error("platform: --since must be a nonnegative safe integer for build logs.");
639
- if (name === "environment" && !["production", "staging"].includes(value)) throw new Error("platform: --environment must be production or staging.");
640
- if (parsed.method === "POST") parsed.body[name] = value;
641
- else parsed.query[name] = value;
642
- }
643
- if (parsed.body.type && ![
644
- "github",
645
- "email",
646
- "identity"
647
- ].includes(String(parsed.body.type))) throw new Error("platform: Signup grant type must be github, email, or identity.");
648
- for (const name of command.booleans ?? []) if (name !== "token-stdin" && flags.has(name)) parsed.body[name] = true;
649
- if (group === "zero-trust" && action === "configure") {
650
- if (!parsed.tokenStdin) throw new Error("platform: zero-trust configure requires --token-stdin.");
651
- const identityProviderIds = values["identity-providers"]?.split(",").map((entry) => entry.trim()).filter(Boolean);
652
- const policyIds = values.policies?.split(",").map((entry) => entry.trim()).filter(Boolean);
653
- const existingProjects = values["existing-projects"];
654
- if (!identityProviderIds?.length || !policyIds?.length) throw new Error("platform: zero-trust configure requires --identity-providers and --policies.");
655
- if (existingProjects !== void 0 && existingProjects !== "protected" && existingProjects !== "public") throw new Error("platform: --existing-projects must be protected or public.");
656
- parsed.body = {
657
- identityProviderIds,
658
- policyIds,
659
- ...existingProjects ? { existingProjects } : {},
660
- protectNewProjects: flags.has("protect-new-projects")
661
- };
662
- } else if (group === "zero-trust" && action === "status") {
663
- delete parsed.body.check;
664
- if (flags.has("check")) parsed.query.check = "true";
665
- } else if (group === "zero-trust" && action === "project-protect") parsed.body.protected = true;
666
- else if (group === "zero-trust" && action === "project-public") parsed.body.protected = false;
667
- return parsed;
668
- }
669
- //#endregion
670
29
  //#region src/cli/help.ts
671
30
  function operatorHelpTree() {
672
31
  return Object.fromEntries(operatorGroups.map((group) => {
@@ -708,7 +67,8 @@ function operatorHelpTree() {
708
67
  "list",
709
68
  "events",
710
69
  "logs",
711
- "attempts"
70
+ "attempts",
71
+ "shared-recipients"
712
72
  ].includes(entry.action) ? [{
713
73
  command: "--limit <number>",
714
74
  description: entry.action === "logs" && group !== "email" ? "Maximum 500 log records" : "Maximum 100 records per page"
@@ -722,7 +82,7 @@ function operatorHelpTree() {
722
82
  })),
723
83
  ...(entry.booleans ?? []).map((flag) => ({
724
84
  command: `--${flag}`,
725
- description: flag === "follow" ? "Poll new logs until interrupted or the build ends" : flag === "ended" ? "Attest that the original provider execution has ended" : flag === "protect-new-projects" ? "Protect newly created projects by default" : flag === "check" && group === "zero-trust" ? "Also check the saved settings against Cloudflare Access (several API calls)" : flag === "token-stdin" && group === "zero-trust" ? "Read the Access management API token from stdin" : flag === "token-stdin" && group === "email" ? entry.action === "domain-remove" ? "Read a replacement Cloudflare token for blocked project cleanup from stdin" : "Read a scoped Cloudflare API token from stdin" : "Read a full API session from stdin for explicit operator session exchange"
85
+ description: flag === "follow" ? "Poll new logs until interrupted or the build ends" : flag === "ended" ? "Attest that the original provider execution has ended" : flag === "public-apps" ? "Manage public app rules without identity policies" : flag === "protect-new-projects" ? "Protect newly created projects by default" : flag === "check" && group === "zero-trust" ? "Also check the saved settings against Cloudflare Access (several API calls)" : flag === "token-stdin" && group === "zero-trust" ? "Read the Access management API token from stdin" : flag === "token-stdin" && group === "email" ? entry.action === "domain-remove" ? "Read a replacement Cloudflare token for blocked project cleanup from stdin" : "Read a scoped Cloudflare API token from stdin" : "Read a full API session from stdin for explicit operator session exchange"
726
86
  }))
727
87
  ]
728
88
  }]))
@@ -954,6 +314,10 @@ const HELP_TREE = {
954
314
  command: "config auth [command]",
955
315
  description: "Configure login methods, company protection, and provider recovery"
956
316
  },
317
+ {
318
+ command: "config plans [command]",
319
+ description: "Manage plans, account limits, and the default plan"
320
+ },
957
321
  {
958
322
  command: "list",
959
323
  description: "List installed and connected platforms"
@@ -1007,99 +371,177 @@ const HELP_TREE = {
1007
371
  ...operatorHelpTree(),
1008
372
  config: {
1009
373
  summary: "Configure platform settings.",
1010
- usage: ["void platform config auth [command] [options]"],
1011
- children: { auth: {
1012
- summary: "Manage login methods and independent platform protection. Without a command, opens interactive configuration.",
1013
- usage: ["void platform config auth [list|show|initialize|add|configure|test|enable|disable|link|admission|protection|recover] [method-or-action] [options]"],
1014
- commands: [
1015
- {
1016
- command: "list",
1017
- description: "List configured login methods and platform protection"
1018
- },
1019
- {
1020
- command: "show <id>",
1021
- description: "Inspect a login method without displaying secrets"
1022
- },
1023
- {
1024
- command: "initialize",
1025
- description: "Import existing login settings before first configuration"
1026
- },
1027
- {
1028
- command: "add <github|google|oidc|cloudflare-access>",
1029
- description: "Configure a new login method"
1030
- },
1031
- {
1032
- command: "configure <id>",
1033
- description: "Stage an update to a login method"
1034
- },
1035
- {
1036
- command: "test <id>",
1037
- description: "Verify a login configuration in the browser"
1038
- },
1039
- {
1040
- command: "enable <id>",
1041
- description: "Enable a successfully tested configuration"
1042
- },
1043
- {
1044
- command: "disable <id>",
1045
- description: "Disable a method and revoke its human sessions"
1046
- },
1047
- {
1048
- command: "link <id>",
1049
- description: "Explicitly link a tested identity to your account"
1050
- },
1051
- {
1052
- command: "admission",
1053
- description: "Choose invited, company-approved, or public signup"
1054
- },
1055
- {
1056
- command: "protection <enable|disable|show>",
1057
- description: "Create or connect Access protection independently from login"
1058
- },
1059
- {
1060
- command: "recover <id>",
1061
- description: "Recover an existing administrator using installation authority"
1062
- }
1063
- ],
1064
- options: [
1065
- {
1066
- command: "--connection <id-or-url>",
1067
- description: "Select a registered platform"
1068
- },
1069
- {
1070
- command: "--installation <id>",
1071
- description: "Select recovery authority for protection or provider recovery"
1072
- },
1073
- {
1074
- command: "--id <id>",
1075
- description: "Name a new OIDC or Access connection"
1076
- },
1077
- {
1078
- command: "--file <path>",
1079
- description: "Read nonsecret configuration from JSON"
1080
- },
1081
- {
1082
- command: "--client-secret-env <name>",
1083
- description: "Read the client secret from an environment variable"
1084
- },
1085
- {
1086
- command: "--test-id <id>",
1087
- description: "Use a completed test for enable or link"
1088
- },
1089
- {
1090
- command: "--plan",
1091
- description: "Validate and preview a change"
1092
- },
1093
- {
1094
- command: "--yes",
1095
- description: "Apply without prompting"
1096
- },
1097
- {
1098
- command: "--json",
1099
- description: "Print structured output"
1100
- }
1101
- ]
1102
- } }
374
+ usage: ["void platform config <auth|plans> [command] [options]"],
375
+ children: {
376
+ plans: {
377
+ summary: "Manage plans and limits. Without a command, opens interactive configuration.",
378
+ usage: ["void platform config plans [show|add|set|reset|archive|restore|remove|default|sync] [plan-id] [options]"],
379
+ commands: [
380
+ {
381
+ command: "show [id]",
382
+ description: "Show the catalog or one plan and its account count"
383
+ },
384
+ {
385
+ command: "add <id> --copy <id> --name <name>",
386
+ description: "Copy an existing plan with a new stable ID"
387
+ },
388
+ {
389
+ command: "set <id>",
390
+ description: "Edit a plan name, limits, or build instance size"
391
+ },
392
+ {
393
+ command: "reset <id>",
394
+ description: "Restore a built-in plan’s original limits and build size"
395
+ },
396
+ {
397
+ command: "archive <id>",
398
+ description: "Keep current accounts while stopping new assignments"
399
+ },
400
+ {
401
+ command: "restore <id>",
402
+ description: "Allow assignments to an archived plan again"
403
+ },
404
+ {
405
+ command: "remove <id>",
406
+ description: "Remove an unused plan or move its accounts to a replacement"
407
+ },
408
+ {
409
+ command: "default <id>",
410
+ description: "Choose the plan new accounts receive"
411
+ },
412
+ {
413
+ command: "sync",
414
+ description: "Continue pending account limit updates"
415
+ }
416
+ ],
417
+ options: [
418
+ {
419
+ command: "--connection <id-or-url>",
420
+ description: "Select a registered platform"
421
+ },
422
+ {
423
+ command: "--file <path>",
424
+ description: "Read plan settings and partial limits from JSON"
425
+ },
426
+ {
427
+ command: "--name <name>",
428
+ description: "Set the display name when adding or editing"
429
+ },
430
+ {
431
+ command: "--copy <id>",
432
+ description: "Copy this plan when adding a new one"
433
+ },
434
+ {
435
+ command: "--replacement <id>",
436
+ description: "Move accounts and any default before removing a plan"
437
+ },
438
+ {
439
+ command: "--plan",
440
+ description: "Preview the change and affected accounts"
441
+ },
442
+ {
443
+ command: "--yes",
444
+ description: "Apply without prompting"
445
+ },
446
+ {
447
+ command: "--json",
448
+ description: "Print structured output"
449
+ }
450
+ ]
451
+ },
452
+ auth: {
453
+ summary: "Manage login methods and independent platform protection. Without a command, opens interactive configuration.",
454
+ usage: ["void platform config auth [list|show|initialize|add|configure|test|enable|disable|link|admission|protection|recover] [method-or-action] [options]"],
455
+ commands: [
456
+ {
457
+ command: "list",
458
+ description: "List configured login methods and platform protection"
459
+ },
460
+ {
461
+ command: "show <id>",
462
+ description: "Inspect a login method without displaying secrets"
463
+ },
464
+ {
465
+ command: "initialize",
466
+ description: "Import existing login settings before first configuration"
467
+ },
468
+ {
469
+ command: "add <github|google|oidc|cloudflare-access>",
470
+ description: "Configure a new login method"
471
+ },
472
+ {
473
+ command: "configure <id>",
474
+ description: "Stage an update to a login method"
475
+ },
476
+ {
477
+ command: "test <id>",
478
+ description: "Verify a login configuration in the browser"
479
+ },
480
+ {
481
+ command: "enable <id>",
482
+ description: "Enable a successfully tested configuration"
483
+ },
484
+ {
485
+ command: "disable <id>",
486
+ description: "Disable a method and revoke its human sessions"
487
+ },
488
+ {
489
+ command: "link <id>",
490
+ description: "Explicitly link a tested identity to your account"
491
+ },
492
+ {
493
+ command: "admission",
494
+ description: "Choose invited, company-approved, or public signup"
495
+ },
496
+ {
497
+ command: "protection <enable|disable|show>",
498
+ description: "Create or connect Access protection independently from login"
499
+ },
500
+ {
501
+ command: "recover <id>",
502
+ description: "Recover an existing administrator using installation authority"
503
+ }
504
+ ],
505
+ options: [
506
+ {
507
+ command: "--connection <id-or-url>",
508
+ description: "Select a registered platform"
509
+ },
510
+ {
511
+ command: "--installation <id>",
512
+ description: "Select recovery authority for protection or provider recovery"
513
+ },
514
+ {
515
+ command: "--id <id>",
516
+ description: "Name a new OIDC or Access connection"
517
+ },
518
+ {
519
+ command: "--file <path>",
520
+ description: "Read nonsecret configuration from JSON"
521
+ },
522
+ {
523
+ command: "--client-secret-env <name>",
524
+ description: "Read the client secret from an environment variable"
525
+ },
526
+ {
527
+ command: "--test-id <id>",
528
+ description: "Use a completed test for enable or link"
529
+ },
530
+ {
531
+ command: "--plan",
532
+ description: "Validate and preview a change"
533
+ },
534
+ {
535
+ command: "--yes",
536
+ description: "Apply without prompting"
537
+ },
538
+ {
539
+ command: "--json",
540
+ description: "Print structured output"
541
+ }
542
+ ]
543
+ }
544
+ }
1103
545
  },
1104
546
  domain: {
1105
547
  summary: "Add an application domain while keeping existing workers.dev URLs.",
@@ -1153,13 +595,33 @@ const HELP_TREE = {
1153
595
  command: "--auth-config <path>",
1154
596
  description: "Read login methods and signup policy from nonsecret JSON with environment secret references"
1155
597
  },
598
+ {
599
+ command: "--login-methods <methods>",
600
+ description: "Comma-separated github, google, oidc, or cloudflare-access login methods"
601
+ },
602
+ {
603
+ command: "--access-protection",
604
+ description: "Protect platform UI and APIs with Cloudflare Access"
605
+ },
606
+ {
607
+ command: "--no-access-protection",
608
+ description: "Skip Cloudflare Access protection"
609
+ },
610
+ {
611
+ command: "--app-access <public|platform|custom>",
612
+ description: "Choose public apps, reuse platform Access, or select separate app policies"
613
+ },
614
+ {
615
+ command: "--hyperdrive <create|id>",
616
+ description: "Create Hyperdrive or use the specified existing configuration"
617
+ },
1156
618
  {
1157
619
  command: "--name <slug>",
1158
620
  description: "Installation name"
1159
621
  },
1160
622
  {
1161
623
  command: "--workers-dev",
1162
- description: "Use workers.dev for testing; add a domain later"
624
+ description: "Use workers.dev for testing. Add a domain later."
1163
625
  },
1164
626
  {
1165
627
  command: "--display-name <name>",
@@ -1171,7 +633,7 @@ const HELP_TREE = {
1171
633
  },
1172
634
  {
1173
635
  command: "--application-domain <domain>",
1174
- description: "Base domain for applications (zone apex is simplest)"
636
+ description: "Base domain for applications"
1175
637
  },
1176
638
  {
1177
639
  command: "--zone <domain>",
@@ -1181,10 +643,22 @@ const HELP_TREE = {
1181
643
  command: "--dedicated-zone",
1182
644
  description: "Allow zone-wide application catch-all routes"
1183
645
  },
646
+ {
647
+ command: "--no-dedicated-zone",
648
+ description: "Skip zone-wide application catch-all routes"
649
+ },
1184
650
  {
1185
651
  command: "--control-plane-domain <domain>",
1186
652
  description: "Optional API hostname"
1187
653
  },
654
+ {
655
+ command: "--no-control-plane-domain",
656
+ description: "Use the default workers.dev API hostname"
657
+ },
658
+ {
659
+ command: "--dashboard-url <origin>",
660
+ description: "HTTPS origin of a separately deployed dashboard"
661
+ },
1188
662
  {
1189
663
  command: "--plan",
1190
664
  description: "Print the exact plan without changing Cloudflare"
@@ -1666,20 +1140,14 @@ const HELP_TREE = {
1666
1140
  }
1667
1141
  ],
1668
1142
  options: [{
1669
- command: "--subdomain <label|host>",
1670
- description: "On add: register this subdomain instead of the proposed mail.<domain>"
1671
- }, {
1672
1143
  command: "--project <name>",
1673
1144
  description: "Project name override"
1674
1145
  }],
1675
1146
  children: {
1676
1147
  add: {
1677
- summary: "Register a domain on a Cloudflare zone you own for sending and receiving. Proposes mail.<domain> when the apex already carries MX.",
1148
+ summary: "Register a Cloudflare zone apex you own for sending and receiving.",
1678
1149
  usage: ["void email domain add <domain> [options]"],
1679
1150
  options: [{
1680
- command: "--subdomain <label|host>",
1681
- description: "Register this subdomain instead of the proposed mail.<domain>"
1682
- }, {
1683
1151
  command: "--project <name>",
1684
1152
  description: "Project name override"
1685
1153
  }]
@@ -2172,6 +1640,18 @@ const HELP_TREE = {
2172
1640
  queue: basicSubcommand("Generate a queue consumer file.", "void gen queue <name>")
2173
1641
  }
2174
1642
  },
1643
+ info: {
1644
+ summary: "Inspect persistent resource names in this project without deploying.",
1645
+ usage: ["void info [--json]"],
1646
+ options: [{
1647
+ command: "--json",
1648
+ description: "Write structured JSON to stdout"
1649
+ }],
1650
+ examples: [{
1651
+ command: "void info",
1652
+ description: "Find names to preserve before moving persistent definitions"
1653
+ }]
1654
+ },
2175
1655
  prepare: {
2176
1656
  summary: "Generate .void artifacts without starting Vite.",
2177
1657
  usage: ["void prepare"],
@@ -2204,7 +1684,7 @@ function withProjectOption(summary, usage) {
2204
1684
  function lifecycleHelp(command, summary) {
2205
1685
  return {
2206
1686
  summary,
2207
- usage: [`void platform ${command} [id] [--plan]${command === "disable" ? "" : " [--runtime <path>]"} [--yes]`],
1687
+ usage: [`void platform ${command} [id] [--plan]${command === "disable" ? "" : " [--runtime <path>]"}${command === "upgrade" || command === "repair" ? " [--dashboard-url <origin>]" : ""} [--yes]`],
2208
1688
  options: [
2209
1689
  {
2210
1690
  command: "--plan",
@@ -2214,6 +1694,10 @@ function lifecycleHelp(command, summary) {
2214
1694
  command: "--runtime <path>",
2215
1695
  description: "Deploy an integrity-checked runtime directory instead of the package"
2216
1696
  }],
1697
+ ...command === "upgrade" || command === "repair" ? [{
1698
+ command: "--dashboard-url <origin>",
1699
+ description: "Configure a separately deployed dashboard; omission keeps its saved origin"
1700
+ }] : [],
2217
1701
  {
2218
1702
  command: "--yes",
2219
1703
  description: "Acknowledge non-interactive Cloudflare changes"
@@ -2229,6 +1713,8 @@ function printGlobalHelp() {
2229
1713
  "",
2230
1714
  globalCommandLine(["migrate"], "void migrate"),
2231
1715
  "",
1716
+ globalCommandLine(["info"], "void info [--json]"),
1717
+ "",
2232
1718
  globalCommandLine(["connect"], "void connect [url]"),
2233
1719
  ...globalOptionLines(["connect"]),
2234
1720
  "",
@@ -2373,4 +1859,4 @@ function formatHelpPath(path) {
2373
1859
  return path.length === 0 ? "help" : path.join(" ");
2374
1860
  }
2375
1861
  //#endregion
2376
- export { operatorGroups as a, printVoidHeader as i, printGlobalHelp as n, parseOperatorArgs as o, printHelpPage as r, getHelpPath as t };
1862
+ export { printVoidHeader as i, printGlobalHelp as n, printHelpPage as r, getHelpPath as t };