run402 4.94.0 → 4.96.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 (337) hide show
  1. package/README.md +23 -23
  2. package/cli.mjs +8 -40
  3. package/core-dist/keystore.js +1 -1
  4. package/git-remote-run402.mjs +6 -6
  5. package/lib/admin.mjs +5 -5
  6. package/lib/ai.mjs +5 -5
  7. package/lib/apps.mjs +9 -9
  8. package/lib/archives.mjs +371 -8
  9. package/lib/argparse.mjs +5 -5
  10. package/lib/assets.mjs +12 -12
  11. package/lib/auth.mjs +34 -34
  12. package/lib/branches.mjs +7 -7
  13. package/lib/buzz-doctor.mjs +1 -1
  14. package/lib/buzz-notifications.mjs +4 -4
  15. package/lib/buzz.mjs +2 -2
  16. package/lib/cache.mjs +1 -1
  17. package/lib/cdn.mjs +2 -2
  18. package/lib/ci.mjs +8 -8
  19. package/lib/claims.mjs +2 -2
  20. package/lib/cold-start.mjs +2 -2
  21. package/lib/command-manifest.mjs +37 -76
  22. package/lib/config.mjs +4 -4
  23. package/lib/contacts.mjs +3 -3
  24. package/lib/contracts.mjs +11 -11
  25. package/lib/credentials.mjs +32 -32
  26. package/lib/daemon-path.mjs +3 -3
  27. package/lib/delegates.mjs +13 -13
  28. package/lib/deliveries.mjs +2 -2
  29. package/lib/deploy-v2.mjs +26 -26
  30. package/lib/dev.mjs +3 -3
  31. package/lib/doctor.mjs +49 -58
  32. package/lib/domains.mjs +27 -27
  33. package/lib/email.mjs +38 -38
  34. package/lib/errors.mjs +40 -24
  35. package/lib/escalations.mjs +4 -4
  36. package/lib/events.mjs +32 -25
  37. package/lib/feedback.mjs +2 -2
  38. package/lib/functions.mjs +34 -34
  39. package/lib/grants.mjs +7 -7
  40. package/lib/image.mjs +7 -7
  41. package/lib/init.mjs +32 -32
  42. package/lib/jobs.mjs +15 -15
  43. package/lib/live.mjs +1 -1
  44. package/lib/logs.mjs +8 -8
  45. package/lib/messages.mjs +5 -5
  46. package/lib/next-actions.mjs +2 -2
  47. package/lib/org-context.mjs +22 -22
  48. package/lib/{org.mjs → orgs.mjs} +140 -179
  49. package/lib/path-lookup.mjs +7 -10
  50. package/lib/path-lookup.test.mjs +19 -21
  51. package/lib/projects.mjs +45 -56
  52. package/lib/remote-helper-session.mjs +93 -93
  53. package/lib/repos.mjs +196 -197
  54. package/lib/rooms-context.mjs +7 -7
  55. package/lib/rooms.mjs +2 -2
  56. package/lib/sdk-errors.mjs +1 -1
  57. package/lib/secrets.mjs +13 -13
  58. package/lib/sites.mjs +14 -14
  59. package/lib/snapshots.mjs +10 -10
  60. package/lib/subdomains.mjs +12 -12
  61. package/lib/subscriptions.mjs +2 -2
  62. package/lib/transfer.mjs +1 -1
  63. package/lib/up.mjs +21 -21
  64. package/lib/{gitvault-capabilities.mjs → vault-capabilities.mjs} +10 -14
  65. package/lib/{gitvault-daemon-run.mjs → vault-daemon-run.mjs} +2 -2
  66. package/lib/{gitvault-daemon.mjs → vault-daemon.mjs} +23 -23
  67. package/lib/{gitvault-scaffold.mjs → vault-scaffold.mjs} +14 -14
  68. package/lib/{gitvault-target.mjs → vault-target.mjs} +22 -17
  69. package/lib/wallet-context.mjs +1 -1
  70. package/lib/wallets.mjs +1 -1
  71. package/lib/webhooks.mjs +8 -8
  72. package/lib/whoami.mjs +32 -5
  73. package/package.json +2 -2
  74. package/sdk/core-dist/keystore.js +1 -1
  75. package/sdk/dist/actions.d.ts +3 -3
  76. package/sdk/dist/actions.d.ts.map +1 -1
  77. package/sdk/dist/app-up.d.ts +2 -2
  78. package/sdk/dist/app-up.d.ts.map +1 -1
  79. package/sdk/dist/config.d.ts +1 -2
  80. package/sdk/dist/config.d.ts.map +1 -1
  81. package/sdk/dist/config.js.map +1 -1
  82. package/sdk/dist/credentials.d.ts +1 -1
  83. package/sdk/dist/errors.d.ts +6 -6
  84. package/sdk/dist/errors.d.ts.map +1 -1
  85. package/sdk/dist/errors.js +1 -1
  86. package/sdk/dist/errors.js.map +1 -1
  87. package/sdk/dist/index.d.ts +9 -9
  88. package/sdk/dist/index.d.ts.map +1 -1
  89. package/sdk/dist/index.js +9 -9
  90. package/sdk/dist/index.js.map +1 -1
  91. package/sdk/dist/namespaces/admin.d.ts +1 -1
  92. package/sdk/dist/namespaces/admin.d.ts.map +1 -1
  93. package/sdk/dist/namespaces/ai.d.ts +1 -1
  94. package/sdk/dist/namespaces/ai.js +2 -2
  95. package/sdk/dist/namespaces/ai.js.map +1 -1
  96. package/sdk/dist/namespaces/assets.js +1 -1
  97. package/sdk/dist/namespaces/assets.js.map +1 -1
  98. package/sdk/dist/namespaces/ci.js +3 -3
  99. package/sdk/dist/namespaces/ci.js.map +1 -1
  100. package/sdk/dist/namespaces/deploy.d.ts +5 -5
  101. package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
  102. package/sdk/dist/namespaces/deploy.js +45 -46
  103. package/sdk/dist/namespaces/deploy.js.map +1 -1
  104. package/sdk/dist/namespaces/deploy.types.d.ts +19 -19
  105. package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
  106. package/sdk/dist/namespaces/domains.d.ts +10 -2
  107. package/sdk/dist/namespaces/domains.d.ts.map +1 -1
  108. package/sdk/dist/namespaces/domains.js +10 -5
  109. package/sdk/dist/namespaces/domains.js.map +1 -1
  110. package/sdk/dist/namespaces/errors.js +1 -1
  111. package/sdk/dist/namespaces/functions.js +1 -1
  112. package/sdk/dist/namespaces/functions.js.map +1 -1
  113. package/sdk/dist/namespaces/org.d.ts +2 -2
  114. package/sdk/dist/namespaces/org.js +2 -2
  115. package/sdk/dist/namespaces/org.types.d.ts +3 -3
  116. package/sdk/dist/namespaces/pay.js +1 -1
  117. package/sdk/dist/namespaces/{gitvault.d.ts → repos.d.ts} +438 -451
  118. package/sdk/dist/namespaces/repos.d.ts.map +1 -0
  119. package/sdk/dist/namespaces/{gitvault.js → repos.js} +454 -462
  120. package/sdk/dist/namespaces/repos.js.map +1 -0
  121. package/sdk/dist/namespaces/rooms.js +2 -2
  122. package/sdk/dist/namespaces/rooms.js.map +1 -1
  123. package/sdk/dist/namespaces/session.d.ts +2 -2
  124. package/sdk/dist/namespaces/session.d.ts.map +1 -1
  125. package/sdk/dist/namespaces/session.js +2 -2
  126. package/sdk/dist/namespaces/session.js.map +1 -1
  127. package/sdk/dist/namespaces/tier.d.ts +4 -4
  128. package/sdk/dist/namespaces/tier.d.ts.map +1 -1
  129. package/sdk/dist/namespaces/transfers.d.ts +46 -15
  130. package/sdk/dist/namespaces/transfers.d.ts.map +1 -1
  131. package/sdk/dist/namespaces/transfers.js.map +1 -1
  132. package/sdk/dist/namespaces/{gitvault.crypto.d.ts → vault.crypto.d.ts} +141 -141
  133. package/sdk/dist/namespaces/vault.crypto.d.ts.map +1 -0
  134. package/sdk/dist/namespaces/{gitvault.crypto.js → vault.crypto.js} +173 -173
  135. package/sdk/dist/namespaces/vault.crypto.js.map +1 -0
  136. package/sdk/dist/namespaces/{gitvault.types.d.ts → vault.types.d.ts} +136 -136
  137. package/sdk/dist/namespaces/vault.types.d.ts.map +1 -0
  138. package/sdk/dist/namespaces/{gitvault.types.js → vault.types.js} +4 -4
  139. package/sdk/dist/namespaces/vault.types.js.map +1 -0
  140. package/sdk/dist/node/actions-node.js +8 -8
  141. package/sdk/dist/node/actions-node.js.map +1 -1
  142. package/sdk/dist/node/assets-node.js +6 -6
  143. package/sdk/dist/node/assets-node.js.map +1 -1
  144. package/sdk/dist/node/bearer-redeem-key.d.ts +1 -1
  145. package/sdk/dist/node/bearer-redeem-key.js +5 -5
  146. package/sdk/dist/node/bearer-redeem-key.js.map +1 -1
  147. package/sdk/dist/node/ci.js +1 -1
  148. package/sdk/dist/node/ci.js.map +1 -1
  149. package/sdk/dist/node/credentials.d.ts +1 -1
  150. package/sdk/dist/node/credentials.js +1 -1
  151. package/sdk/dist/node/deploy-manifest.d.ts +3 -5
  152. package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
  153. package/sdk/dist/node/deploy-manifest.js +3 -12
  154. package/sdk/dist/node/deploy-manifest.js.map +1 -1
  155. package/sdk/dist/node/http-dispatcher.js +5 -5
  156. package/sdk/dist/node/http-dispatcher.js.map +1 -1
  157. package/sdk/dist/node/index.d.ts +29 -29
  158. package/sdk/dist/node/index.d.ts.map +1 -1
  159. package/sdk/dist/node/index.js +39 -39
  160. package/sdk/dist/node/index.js.map +1 -1
  161. package/sdk/dist/node/manifest-export.js +2 -2
  162. package/sdk/dist/node/manifest-export.js.map +1 -1
  163. package/sdk/dist/node/org-adopt.js +1 -1
  164. package/sdk/dist/node/org-adopt.js.map +1 -1
  165. package/sdk/dist/node/sites-node.js +1 -1
  166. package/sdk/dist/node/sites-node.js.map +1 -1
  167. package/sdk/dist/node/{gitvault-address.d.ts → vault-address.d.ts} +42 -42
  168. package/sdk/dist/node/vault-address.d.ts.map +1 -0
  169. package/sdk/dist/node/{gitvault-address.js → vault-address.js} +43 -43
  170. package/sdk/dist/node/vault-address.js.map +1 -0
  171. package/sdk/dist/node/{gitvault-apply.d.ts → vault-apply.d.ts} +27 -27
  172. package/sdk/dist/node/vault-apply.d.ts.map +1 -0
  173. package/sdk/dist/node/{gitvault-apply.js → vault-apply.js} +38 -38
  174. package/sdk/dist/node/vault-apply.js.map +1 -0
  175. package/sdk/dist/node/vault-byo-config.d.ts +29 -0
  176. package/sdk/dist/node/vault-byo-config.d.ts.map +1 -0
  177. package/sdk/dist/node/{gitvault-byo-config.js → vault-byo-config.js} +18 -18
  178. package/sdk/dist/node/vault-byo-config.js.map +1 -0
  179. package/sdk/dist/node/vault-byo-probe.d.ts +20 -0
  180. package/sdk/dist/node/vault-byo-probe.d.ts.map +1 -0
  181. package/sdk/dist/node/vault-byo-probe.js +57 -0
  182. package/sdk/dist/node/vault-byo-probe.js.map +1 -0
  183. package/sdk/dist/node/{gitvault-creation-journal.d.ts → vault-creation-journal.d.ts} +69 -69
  184. package/sdk/dist/node/vault-creation-journal.d.ts.map +1 -0
  185. package/sdk/dist/node/{gitvault-creation-journal.js → vault-creation-journal.js} +54 -54
  186. package/sdk/dist/node/vault-creation-journal.js.map +1 -0
  187. package/sdk/dist/node/{gitvault-degraded-read.d.ts → vault-degraded-read.d.ts} +34 -34
  188. package/sdk/dist/node/vault-degraded-read.d.ts.map +1 -0
  189. package/sdk/dist/node/{gitvault-degraded-read.js → vault-degraded-read.js} +24 -24
  190. package/sdk/dist/node/vault-degraded-read.js.map +1 -0
  191. package/sdk/dist/node/{gitvault-deploy.d.ts → vault-deploy.d.ts} +67 -67
  192. package/sdk/dist/node/vault-deploy.d.ts.map +1 -0
  193. package/sdk/dist/node/{gitvault-deploy.js → vault-deploy.js} +27 -27
  194. package/sdk/dist/node/vault-deploy.js.map +1 -0
  195. package/sdk/dist/node/{gitvault-edge-fetch.d.ts → vault-edge-fetch.d.ts} +9 -9
  196. package/sdk/dist/node/vault-edge-fetch.d.ts.map +1 -0
  197. package/sdk/dist/node/{gitvault-edge-fetch.js → vault-edge-fetch.js} +11 -11
  198. package/sdk/dist/node/vault-edge-fetch.js.map +1 -0
  199. package/sdk/dist/node/{gitvault-handoff.d.ts → vault-handoff.d.ts} +9 -9
  200. package/sdk/dist/node/vault-handoff.d.ts.map +1 -0
  201. package/sdk/dist/node/{gitvault-handoff.js → vault-handoff.js} +24 -24
  202. package/sdk/dist/node/vault-handoff.js.map +1 -0
  203. package/sdk/dist/node/{gitvault-keystore.d.ts → vault-keystore.d.ts} +87 -77
  204. package/sdk/dist/node/vault-keystore.d.ts.map +1 -0
  205. package/sdk/dist/node/{gitvault-keystore.js → vault-keystore.js} +105 -68
  206. package/sdk/dist/node/vault-keystore.js.map +1 -0
  207. package/sdk/dist/node/{gitvault-member-bundle.d.ts → vault-member-bundle.d.ts} +17 -17
  208. package/sdk/dist/node/vault-member-bundle.d.ts.map +1 -0
  209. package/sdk/dist/node/{gitvault-member-bundle.js → vault-member-bundle.js} +11 -11
  210. package/sdk/dist/node/vault-member-bundle.js.map +1 -0
  211. package/sdk/dist/node/{gitvault-mirror-backend.d.ts → vault-mirror-backend.d.ts} +26 -26
  212. package/sdk/dist/node/vault-mirror-backend.d.ts.map +1 -0
  213. package/sdk/dist/node/{gitvault-mirror-backend.js → vault-mirror-backend.js} +25 -25
  214. package/sdk/dist/node/vault-mirror-backend.js.map +1 -0
  215. package/sdk/dist/node/{gitvault-mirror-config.d.ts → vault-mirror-config.d.ts} +23 -23
  216. package/sdk/dist/node/vault-mirror-config.d.ts.map +1 -0
  217. package/sdk/dist/node/{gitvault-mirror-config.js → vault-mirror-config.js} +16 -16
  218. package/sdk/dist/node/vault-mirror-config.js.map +1 -0
  219. package/sdk/dist/node/{gitvault-mirror.d.ts → vault-mirror.d.ts} +36 -36
  220. package/sdk/dist/node/vault-mirror.d.ts.map +1 -0
  221. package/sdk/dist/node/{gitvault-mirror.js → vault-mirror.js} +75 -75
  222. package/sdk/dist/node/vault-mirror.js.map +1 -0
  223. package/sdk/dist/node/{gitvault-native-crypto.d.ts → vault-native-crypto.d.ts} +10 -10
  224. package/sdk/dist/node/vault-native-crypto.d.ts.map +1 -0
  225. package/sdk/dist/node/{gitvault-native-crypto.js → vault-native-crypto.js} +16 -16
  226. package/sdk/dist/node/vault-native-crypto.js.map +1 -0
  227. package/sdk/dist/node/{gitvault-open-or-create.d.ts → vault-open-or-create.d.ts} +16 -16
  228. package/sdk/dist/node/vault-open-or-create.d.ts.map +1 -0
  229. package/sdk/dist/node/{gitvault-open-or-create.js → vault-open-or-create.js} +10 -10
  230. package/sdk/dist/node/vault-open-or-create.js.map +1 -0
  231. package/sdk/dist/node/{gitvault-prewarm.d.ts → vault-prewarm.d.ts} +13 -13
  232. package/sdk/dist/node/vault-prewarm.d.ts.map +1 -0
  233. package/sdk/dist/node/{gitvault-prewarm.js → vault-prewarm.js} +25 -25
  234. package/sdk/dist/node/vault-prewarm.js.map +1 -0
  235. package/sdk/dist/node/{gitvault-profile-scan.d.ts → vault-profile-scan.d.ts} +3 -3
  236. package/sdk/dist/node/vault-profile-scan.d.ts.map +1 -0
  237. package/sdk/dist/node/{gitvault-profile-scan.js → vault-profile-scan.js} +12 -12
  238. package/sdk/dist/node/vault-profile-scan.js.map +1 -0
  239. package/sdk/dist/node/{gitvault-prune.d.ts → vault-prune.d.ts} +61 -61
  240. package/sdk/dist/node/vault-prune.d.ts.map +1 -0
  241. package/sdk/dist/node/{gitvault-prune.js → vault-prune.js} +34 -34
  242. package/sdk/dist/node/vault-prune.js.map +1 -0
  243. package/sdk/dist/node/{gitvault-publication.d.ts → vault-publication.d.ts} +399 -399
  244. package/sdk/dist/node/vault-publication.d.ts.map +1 -0
  245. package/sdk/dist/node/{gitvault-publication.js → vault-publication.js} +584 -584
  246. package/sdk/dist/node/vault-publication.js.map +1 -0
  247. package/sdk/dist/node/{gitvault-push-to-create.d.ts → vault-push-to-create.d.ts} +16 -16
  248. package/sdk/dist/node/vault-push-to-create.d.ts.map +1 -0
  249. package/sdk/dist/node/{gitvault-push-to-create.js → vault-push-to-create.js} +9 -9
  250. package/sdk/dist/node/vault-push-to-create.js.map +1 -0
  251. package/sdk/dist/node/{gitvault-recover.d.ts → vault-recover.d.ts} +50 -50
  252. package/sdk/dist/node/vault-recover.d.ts.map +1 -0
  253. package/sdk/dist/node/{gitvault-recover.js → vault-recover.js} +84 -84
  254. package/sdk/dist/node/vault-recover.js.map +1 -0
  255. package/sdk/dist/node/{gitvault-restore.d.ts → vault-restore.d.ts} +8 -8
  256. package/sdk/dist/node/vault-restore.d.ts.map +1 -0
  257. package/sdk/dist/node/{gitvault-restore.js → vault-restore.js} +11 -11
  258. package/sdk/dist/node/vault-restore.js.map +1 -0
  259. package/sdk/dist/node/{gitvault-snapshot.d.ts → vault-snapshot.d.ts} +48 -48
  260. package/sdk/dist/node/vault-snapshot.d.ts.map +1 -0
  261. package/sdk/dist/node/{gitvault-snapshot.js → vault-snapshot.js} +61 -61
  262. package/sdk/dist/node/vault-snapshot.js.map +1 -0
  263. package/sdk/dist/node/{gitvault-writer-state.d.ts → vault-writer-state.d.ts} +8 -8
  264. package/sdk/dist/node/vault-writer-state.d.ts.map +1 -0
  265. package/sdk/dist/node/{gitvault-writer-state.js → vault-writer-state.js} +15 -15
  266. package/sdk/dist/node/vault-writer-state.js.map +1 -0
  267. package/sdk/dist/node/workflow-output.js +4 -4
  268. package/sdk/dist/node/workflow-output.js.map +1 -1
  269. package/sdk/dist/scoped.d.ts +8 -8
  270. package/sdk/dist/scoped.d.ts.map +1 -1
  271. package/sdk/dist/scoped.js +3 -3
  272. package/sdk/dist/scoped.js.map +1 -1
  273. package/vault-surface.json +40 -0
  274. package/gitvault-surface.json +0 -89
  275. package/lib/cloud.mjs +0 -256
  276. package/lib/core.mjs +0 -123
  277. package/lib/gitvault.mjs +0 -163
  278. package/lib/source-access.mjs +0 -70
  279. package/sdk/dist/namespaces/gitvault.crypto.d.ts.map +0 -1
  280. package/sdk/dist/namespaces/gitvault.crypto.js.map +0 -1
  281. package/sdk/dist/namespaces/gitvault.d.ts.map +0 -1
  282. package/sdk/dist/namespaces/gitvault.js.map +0 -1
  283. package/sdk/dist/namespaces/gitvault.types.d.ts.map +0 -1
  284. package/sdk/dist/namespaces/gitvault.types.js.map +0 -1
  285. package/sdk/dist/node/gitvault-address.d.ts.map +0 -1
  286. package/sdk/dist/node/gitvault-address.js.map +0 -1
  287. package/sdk/dist/node/gitvault-apply.d.ts.map +0 -1
  288. package/sdk/dist/node/gitvault-apply.js.map +0 -1
  289. package/sdk/dist/node/gitvault-byo-config.d.ts +0 -29
  290. package/sdk/dist/node/gitvault-byo-config.d.ts.map +0 -1
  291. package/sdk/dist/node/gitvault-byo-config.js.map +0 -1
  292. package/sdk/dist/node/gitvault-byo-probe.d.ts +0 -20
  293. package/sdk/dist/node/gitvault-byo-probe.d.ts.map +0 -1
  294. package/sdk/dist/node/gitvault-byo-probe.js +0 -57
  295. package/sdk/dist/node/gitvault-byo-probe.js.map +0 -1
  296. package/sdk/dist/node/gitvault-creation-journal.d.ts.map +0 -1
  297. package/sdk/dist/node/gitvault-creation-journal.js.map +0 -1
  298. package/sdk/dist/node/gitvault-degraded-read.d.ts.map +0 -1
  299. package/sdk/dist/node/gitvault-degraded-read.js.map +0 -1
  300. package/sdk/dist/node/gitvault-deploy.d.ts.map +0 -1
  301. package/sdk/dist/node/gitvault-deploy.js.map +0 -1
  302. package/sdk/dist/node/gitvault-edge-fetch.d.ts.map +0 -1
  303. package/sdk/dist/node/gitvault-edge-fetch.js.map +0 -1
  304. package/sdk/dist/node/gitvault-handoff.d.ts.map +0 -1
  305. package/sdk/dist/node/gitvault-handoff.js.map +0 -1
  306. package/sdk/dist/node/gitvault-keystore.d.ts.map +0 -1
  307. package/sdk/dist/node/gitvault-keystore.js.map +0 -1
  308. package/sdk/dist/node/gitvault-member-bundle.d.ts.map +0 -1
  309. package/sdk/dist/node/gitvault-member-bundle.js.map +0 -1
  310. package/sdk/dist/node/gitvault-mirror-backend.d.ts.map +0 -1
  311. package/sdk/dist/node/gitvault-mirror-backend.js.map +0 -1
  312. package/sdk/dist/node/gitvault-mirror-config.d.ts.map +0 -1
  313. package/sdk/dist/node/gitvault-mirror-config.js.map +0 -1
  314. package/sdk/dist/node/gitvault-mirror.d.ts.map +0 -1
  315. package/sdk/dist/node/gitvault-mirror.js.map +0 -1
  316. package/sdk/dist/node/gitvault-native-crypto.d.ts.map +0 -1
  317. package/sdk/dist/node/gitvault-native-crypto.js.map +0 -1
  318. package/sdk/dist/node/gitvault-open-or-create.d.ts.map +0 -1
  319. package/sdk/dist/node/gitvault-open-or-create.js.map +0 -1
  320. package/sdk/dist/node/gitvault-prewarm.d.ts.map +0 -1
  321. package/sdk/dist/node/gitvault-prewarm.js.map +0 -1
  322. package/sdk/dist/node/gitvault-profile-scan.d.ts.map +0 -1
  323. package/sdk/dist/node/gitvault-profile-scan.js.map +0 -1
  324. package/sdk/dist/node/gitvault-prune.d.ts.map +0 -1
  325. package/sdk/dist/node/gitvault-prune.js.map +0 -1
  326. package/sdk/dist/node/gitvault-publication.d.ts.map +0 -1
  327. package/sdk/dist/node/gitvault-publication.js.map +0 -1
  328. package/sdk/dist/node/gitvault-push-to-create.d.ts.map +0 -1
  329. package/sdk/dist/node/gitvault-push-to-create.js.map +0 -1
  330. package/sdk/dist/node/gitvault-recover.d.ts.map +0 -1
  331. package/sdk/dist/node/gitvault-recover.js.map +0 -1
  332. package/sdk/dist/node/gitvault-restore.d.ts.map +0 -1
  333. package/sdk/dist/node/gitvault-restore.js.map +0 -1
  334. package/sdk/dist/node/gitvault-snapshot.d.ts.map +0 -1
  335. package/sdk/dist/node/gitvault-snapshot.js.map +0 -1
  336. package/sdk/dist/node/gitvault-writer-state.d.ts.map +0 -1
  337. package/sdk/dist/node/gitvault-writer-state.js.map +0 -1
@@ -1,10 +1,8 @@
1
1
  /**
2
2
  * `path-lookup.mjs` — the tiny, dependency-free "is this executable on
3
- * PATH" check kygit-handoff design D8 needs twice (`run402 doctor` and
4
- * `repos view`, both naming `npm i -g @kychee/kygit` when a `kygit::`
5
- * remote has no `git-remote-kygit` helper installed). No shell, no `which`
6
- * subprocess — a plain directory scan mirrors what the OS loader itself
7
- * does to resolve an unqualified command name.
3
+ * PATH" check behind `repos resume` / `repos join`'s remote-helper next
4
+ * action. No shell, no `which` subprocess — a plain directory scan mirrors
5
+ * what the OS loader itself does to resolve an unqualified command name.
8
6
  */
9
7
  import {accessSync, constants, readFileSync } from "node:fs";
10
8
  import { delimiter, join } from "node:path";
@@ -26,8 +24,7 @@ export function isExecutableOnPath(name, env = process.env) {
26
24
  /**
27
25
  * After a restore into `dir`, the ONE thing that still stands between the
28
26
  * caller and its first `git push` is git finding the remote helper the
29
- * checkout's origin scheme names (`git-remote-kygit` for `kygit::`,
30
- * `git-remote-run402` for `run402::`). A resume or join run through
27
+ * checkout's `run402::` origin names (`git-remote-run402`). A resume or join run through
31
28
  * `npx` has the helper only inside the npx cache, so git cannot see it.
32
29
  * Returns a `next_actions` entry naming the fix, or null when the helper
33
30
  * is on PATH or the checkout's remote cannot be read (never throws).
@@ -42,11 +39,11 @@ export function remoteHelperNextAction(dir, env = process.env) {
42
39
  return null;
43
40
  }
44
41
  if (!url) return null;
45
- const helper = url.startsWith("kygit::") ? "git-remote-kygit" : url.startsWith("run402::") ? "git-remote-run402" : null;
42
+ const helper = url.startsWith("run402::") ? "git-remote-run402" : null;
46
43
  if (!helper || isExecutableOnPath(helper, env)) return null;
47
44
  return {
48
45
  type: "install_remote_helper",
49
- command: "npm i -g @kychee/kygit run402",
50
- why: `git push needs ${helper} on PATH and this session does not have it there (an npx run keeps it inside the npx cache); install both packages once and every git command in this checkout works`,
46
+ command: "npm i -g run402",
47
+ why: `git push needs ${helper} on PATH and this session does not have it there (an npx run keeps it inside the npx cache); install run402 once and every git command in this checkout works`,
51
48
  };
52
49
  }
@@ -1,8 +1,6 @@
1
1
  /**
2
- * `path-lookup.mjs` — the PATH-executable probe `doctor.mjs`/`repos.mjs`'s
3
- * `view()` both use to detect a `kygit::` remote with no `git-remote-kygit`
4
- * helper installed (kygit-handoff design D8, mirroring
5
- * `kygit/kygit.mjs`'s own `findRemoteHelper`).
2
+ * `path-lookup.mjs` — the PATH-executable probe behind `repos resume` /
3
+ * `repos join`'s remote-helper next action.
6
4
  */
7
5
  import { describe, it } from "node:test";
8
6
  import assert from "node:assert/strict";
@@ -15,10 +13,10 @@ describe("isExecutableOnPath", () => {
15
13
  it("finds an executable file on PATH", () => {
16
14
  const dir = mkdtempSync(join(tmpdir(), "path-lookup-"));
17
15
  try {
18
- const bin = join(dir, "git-remote-kygit");
16
+ const bin = join(dir, "git-remote-run402");
19
17
  writeFileSync(bin, "#!/bin/sh\n");
20
18
  chmodSync(bin, 0o755);
21
- assert.equal(isExecutableOnPath("git-remote-kygit", { PATH: dir }), true);
19
+ assert.equal(isExecutableOnPath("git-remote-run402", { PATH: dir }), true);
22
20
  } finally {
23
21
  rmSync(dir, { recursive: true, force: true });
24
22
  }
@@ -27,10 +25,10 @@ describe("isExecutableOnPath", () => {
27
25
  it("returns false when the name exists but is not executable", () => {
28
26
  const dir = mkdtempSync(join(tmpdir(), "path-lookup-"));
29
27
  try {
30
- const bin = join(dir, "git-remote-kygit");
28
+ const bin = join(dir, "git-remote-run402");
31
29
  writeFileSync(bin, "not executable");
32
30
  chmodSync(bin, 0o644);
33
- assert.equal(isExecutableOnPath("git-remote-kygit", { PATH: dir }), false);
31
+ assert.equal(isExecutableOnPath("git-remote-run402", { PATH: dir }), false);
34
32
  } finally {
35
33
  rmSync(dir, { recursive: true, force: true });
36
34
  }
@@ -39,7 +37,7 @@ describe("isExecutableOnPath", () => {
39
37
  it("returns false when the name is nowhere on PATH", () => {
40
38
  const dir = mkdtempSync(join(tmpdir(), "path-lookup-"));
41
39
  try {
42
- assert.equal(isExecutableOnPath("git-remote-kygit", { PATH: dir }), false);
40
+ assert.equal(isExecutableOnPath("git-remote-run402", { PATH: dir }), false);
43
41
  } finally {
44
42
  rmSync(dir, { recursive: true, force: true });
45
43
  }
@@ -49,10 +47,10 @@ describe("isExecutableOnPath", () => {
49
47
  const dirA = mkdtempSync(join(tmpdir(), "path-lookup-a-"));
50
48
  const dirB = mkdtempSync(join(tmpdir(), "path-lookup-b-"));
51
49
  try {
52
- const bin = join(dirB, "git-remote-kygit");
50
+ const bin = join(dirB, "git-remote-run402");
53
51
  writeFileSync(bin, "#!/bin/sh\n");
54
52
  chmodSync(bin, 0o755);
55
- assert.equal(isExecutableOnPath("git-remote-kygit", { PATH: `${dirA}:${dirB}` }), true);
53
+ assert.equal(isExecutableOnPath("git-remote-run402", { PATH: `${dirA}:${dirB}` }), true);
56
54
  } finally {
57
55
  rmSync(dirA, { recursive: true, force: true });
58
56
  rmSync(dirB, { recursive: true, force: true });
@@ -60,29 +58,29 @@ describe("isExecutableOnPath", () => {
60
58
  });
61
59
 
62
60
  it("returns false for an empty or missing PATH rather than throwing", () => {
63
- assert.equal(isExecutableOnPath("git-remote-kygit", {}), false);
64
- assert.equal(isExecutableOnPath("git-remote-kygit", { PATH: "" }), false);
61
+ assert.equal(isExecutableOnPath("git-remote-run402", {}), false);
62
+ assert.equal(isExecutableOnPath("git-remote-run402", { PATH: "" }), false);
65
63
  });
66
64
  });
67
65
 
68
66
  describe("remoteHelperNextAction", () => {
69
- it("names the missing helper for the checkout's remote scheme, and nothing when it is on PATH or the checkout is unreadable", () => {
67
+ it("names the missing helper for a run402:: checkout, and nothing when it is on PATH or the checkout is unreadable", () => {
70
68
  const dir = mkdtempSync(join(tmpdir(), "run402-remote-helper-"));
71
69
  try {
72
70
  mkdirSync(join(dir, ".git"));
73
- writeFileSync(join(dir, ".git", "config"), `[core]\n\trepositoryformatversion = 0\n[remote "origin"]\n\turl = kygit::org/name\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`);
71
+ writeFileSync(join(dir, ".git", "config"), `[core]\n\trepositoryformatversion = 0\n[remote "origin"]\n\turl = run402::org/name\n\tfetch = +refs/heads/*:refs/remotes/origin/*\n`);
74
72
  const emptyPath = { PATH: dir };
75
73
  const missing = remoteHelperNextAction(dir, emptyPath);
76
74
  assert.equal(missing?.type, "install_remote_helper");
77
- assert.match(missing.why, /git-remote-kygit/);
78
- assert.equal(missing.command, "npm i -g @kychee/kygit run402");
75
+ assert.match(missing.why, /git-remote-run402/);
76
+ assert.equal(missing.command, "npm i -g run402");
79
77
  // present on PATH → nothing to say
80
78
  const bin = join(dir, "bin"); mkdirSync(bin);
81
- writeFileSync(join(bin, "git-remote-kygit"), "#!/bin/sh\n"); chmodSync(join(bin, "git-remote-kygit"), 0o755);
79
+ writeFileSync(join(bin, "git-remote-run402"), "#!/bin/sh\n"); chmodSync(join(bin, "git-remote-run402"), 0o755);
82
80
  assert.equal(remoteHelperNextAction(dir, { PATH: bin }), null);
83
- // run402:: scheme names the other helper
84
- writeFileSync(join(dir, ".git", "config"), `[remote "origin"]\n\turl = run402::org/name\n`);
85
- assert.match(remoteHelperNextAction(dir, emptyPath).why, /git-remote-run402/);
81
+ // any other remote → nothing to say
82
+ writeFileSync(join(dir, ".git", "config"), `[remote "origin"]\n\turl = https://example.com/x.git\n`);
83
+ assert.equal(remoteHelperNextAction(dir, emptyPath), null);
86
84
  // no checkout → null, never a throw
87
85
  assert.equal(remoteHelperNextAction(join(dir, "nope"), emptyPath), null);
88
86
  } finally {
package/lib/projects.mjs CHANGED
@@ -14,27 +14,26 @@ Usage:
14
14
 
15
15
  Subcommands:
16
16
  quote Show pricing tiers
17
- provision [--tier <tier>] [--name <n>] [--org <id>] Provision a new Postgres project
18
- use <id> Set the active project (used as default for other commands)
19
- list [--org <id>] [--all] List your projects from the server (name, site_url, custom domains, org_id, active marker)
20
- rename <id> --name <label> Rename a project (fix an auto-generated name)
17
+ provision [--tier <tier>] [--name <n>] [--org <org_id>] Provision a new Postgres project
18
+ use <project_id> Set the active project (used as default for other commands)
19
+ list [--org <org_id>] [--all] List your projects from the server (name, site_url, custom domains, org_id, active marker)
20
+ rename <project_id> --name <label> Rename a project (fix an auto-generated name)
21
21
  tenant-payments [project_id] [--status <s>] List redacted tenant x402 payments for priced routes
22
- get [id] Authoritative server read: status, org, tier, active deploy, mailbox, usage vs limits (live; no keys)
22
+ get [project_id] Authoritative server read: status, org, tier, active deploy, mailbox, usage vs limits (live; no keys)
23
23
  current Show the active project pointer and validation status
24
- sql "<query>" [--project <id>] [--file <path>] [--params '<json>'] Run a SQL query (supports parameterized queries)
25
- rest <table> [--query "<params>"] [--project <id>] Query a table via the REST API (PostgREST)
26
- usage [id] Show compute/storage usage for a project
27
- costs [id] [--window <w>] Show admin-only per-project revenue/cost/margin
28
- schema [id] Inspect the database schema
29
- apply-expose [id] <manifest_json> Apply a declarative authorization manifest
30
- apply-expose [id] --file <path> Apply a manifest from a JSON file
31
- validate-expose [id] <manifest_json> Validate an authorization manifest without applying it
32
- validate-expose [id] --file <path> Validate a manifest file without mutating the project
33
- get-expose [id] Get the current authorization manifest
34
- delete [id] --confirm Immediately and irreversibly delete a project (cascade purge) and remove from local state. Requires --confirm.
35
- promote-user [id] <email> Promote a user to project_admin role
36
- demote-user [id] <email> Demote a user from project_admin role
37
- export [id] [archive options] Export a portable Run402 Core archive
24
+ sql "<query>" [--project <project_id>] [--file <path>] [--params '<json>'] Run a SQL query (supports parameterized queries)
25
+ rest <table> [--query "<params>"] [--project <project_id>] Query a table via the REST API (PostgREST)
26
+ usage [project_id] Show compute/storage usage for a project
27
+ costs [project_id] [--window <w>] Show admin-only per-project revenue/cost/margin
28
+ schema [project_id] Inspect the database schema
29
+ apply-expose [project_id] <manifest_json> Apply a declarative authorization manifest
30
+ apply-expose [project_id] --file <path> Apply a manifest from a JSON file
31
+ validate-expose [project_id] <manifest_json> Validate an authorization manifest without applying it
32
+ validate-expose [project_id] --file <path> Validate a manifest file without mutating the project
33
+ get-expose [project_id] Get the current authorization manifest
34
+ delete [project_id] --confirm Immediately and irreversibly delete a project (cascade purge) and remove from local state. Requires --confirm.
35
+ promote-user [project_id] <email> Promote a user to project_admin role
36
+ demote-user [project_id] <email> Demote a user from project_admin role
38
37
 
39
38
  Examples:
40
39
  run402 projects quote
@@ -59,7 +58,6 @@ Examples:
59
58
  run402 projects apply-expose prj_abc123 --file manifest.json
60
59
  run402 projects get-expose prj_abc123
61
60
  run402 projects delete prj_abc123 --confirm
62
- run402 projects export prj_abc123 --wait --output ./project.r402ar --json
63
61
 
64
62
  Global options (any command):
65
63
  --wallet <name> Use a named wallet (profile) for this command. Precedence:
@@ -67,15 +65,15 @@ Global options (any command):
67
65
  'run402 wallets use' default > 'default'. See 'run402 wallets'.
68
66
 
69
67
  Notes:
70
- - <id> is the project_id shown in 'run402 projects list' (prefix: 'prj_')
71
- - Most commands that take <id> default to the active project when omitted
72
- (set it with 'run402 projects use <id>'). Project IDs start with 'prj_';
68
+ - <project_id> is the project_id shown in 'run402 projects list' (prefix: 'prj_')
69
+ - Most commands that take <project_id> default to the active project when omitted
70
+ (set it with 'run402 projects use <project_id>'). Project IDs start with 'prj_';
73
71
  any first positional that doesn't is treated as the next argument instead.
74
72
  - 'list', 'get', and 'use' are SERVER-authoritative project identity flows.
75
73
  Local project keys live under 'run402 credentials project-keys ...'.
76
74
  - 'list' is a SERVER read, not the local key cache: it shows every project the
77
75
  active wallet can reach (membership-scoped), with name, site_url, custom
78
- domains, and org_id. '--org <id>' filters to one org; '--all' reads every
76
+ domains, and org_id. '--org <org_id>' filters to one org; '--all' reads every
79
77
  project you can reach across all your orgs (as your sign-in session after
80
78
  'run402 login', else as the current wallet). The 'active' marker still
81
79
  comes from local state.
@@ -108,10 +106,10 @@ const SUB_HELP = {
108
106
  list: `run402 projects list — List your projects from the server
109
107
 
110
108
  Usage:
111
- run402 projects list [--org <id>] [--all]
109
+ run402 projects list [--org <org_id>] [--all]
112
110
 
113
111
  Options:
114
- --org <id> Filter to projects owned by one org (organization).
112
+ --org <org_id> Filter to projects owned by one org (organization).
115
113
  Authorize-before-reveal: a non-member or guessed id is a
116
114
  403; a non-UUID id is a 400.
117
115
  --all Read every project you can reach across all your orgs
@@ -135,10 +133,10 @@ Examples:
135
133
  rename: `run402 projects rename — Rename a project
136
134
 
137
135
  Usage:
138
- run402 projects rename <id> --name <label>
136
+ run402 projects rename <project_id> --name <label>
139
137
 
140
138
  Arguments:
141
- <id> Project ID (prefix: 'prj_'). Required.
139
+ <project_id> Project ID (prefix: 'prj_'). Required.
142
140
 
143
141
  Options:
144
142
  --name <label> New display name (1-200 chars, no control characters).
@@ -183,12 +181,12 @@ Notes:
183
181
  provision: `run402 projects provision — Provision a new Postgres project
184
182
 
185
183
  Usage:
186
- run402 projects provision [--tier <tier>] [--name <name>] [--org <id>] [--idempotency-key <key>]
184
+ run402 projects provision [--tier <tier>] [--name <name>] [--org <org_id>] [--idempotency-key <key>]
187
185
 
188
186
  Options:
189
187
  --tier <tier> Tier for the new project (default: prototype)
190
188
  --name <name> Human-readable name for the project
191
- --org <id> Provision into an EXISTING org (needs developer+ on it).
189
+ --org <org_id> Provision into an EXISTING org (needs developer+ on it).
192
190
  Omit for the cold-start path. Tier is org-governed.
193
191
  --idempotency-key <key> Retry-safe key: re-running with the same key returns
194
192
  the existing project instead of duplicating it. Auto-derived
@@ -209,8 +207,8 @@ Examples:
209
207
  sql: `run402 projects sql — Run a SQL query against a project's database
210
208
 
211
209
  Usage:
212
- run402 projects sql "<query>" [--project <id>] [options]
213
- run402 projects sql --file <path> [--project <id>] [options]
210
+ run402 projects sql "<query>" [--project <project_id>] [options]
211
+ run402 projects sql --file <path> [--project <project_id>] [options]
214
212
 
215
213
  Legacy (still supported):
216
214
  run402 projects sql <prj_id> "<query>" [options]
@@ -219,7 +217,7 @@ Arguments:
219
217
  <query> Inline SQL query (quote it to preserve spaces)
220
218
 
221
219
  Options:
222
- --project <id> Project ID (defaults to the active project; a leading
220
+ --project <project_id> Project ID (defaults to the active project; a leading
223
221
  prj_... positional is also still accepted)
224
222
  --file <path> Read SQL from a file instead of an inline query
225
223
  --params '<json>' JSON array of parameters for a parameterized query
@@ -232,10 +230,10 @@ Examples:
232
230
  costs: `run402 projects costs — Show admin-only per-project finance
233
231
 
234
232
  Usage:
235
- run402 projects costs [id] [--window <24h|7d|30d|90d>]
233
+ run402 projects costs [project_id] [--window <24h|7d|30d|90d>]
236
234
 
237
235
  Arguments:
238
- [id] Project ID (defaults to the active project if omitted)
236
+ [project_id] Project ID (defaults to the active project if omitted)
239
237
 
240
238
  Options:
241
239
  --window <w> Finance window (default: 30d). One of: 24h, 7d, 30d, 90d
@@ -258,12 +256,12 @@ Examples:
258
256
  "validate-expose": `run402 projects validate-expose — Validate an authorization manifest without applying it
259
257
 
260
258
  Usage:
261
- run402 projects validate-expose [id] <manifest_json> [options]
262
- run402 projects validate-expose [id] --file <path> [options]
263
- cat manifest.json | run402 projects validate-expose [id] [options]
259
+ run402 projects validate-expose [project_id] <manifest_json> [options]
260
+ run402 projects validate-expose [project_id] --file <path> [options]
261
+ cat manifest.json | run402 projects validate-expose [project_id] [options]
264
262
 
265
263
  Arguments:
266
- [id] Optional project ID. When omitted, the active project is
264
+ [project_id] Optional project ID. When omitted, the active project is
267
265
  used if one is set; otherwise validation is projectless.
268
266
  <manifest_json> Inline auth/expose manifest JSON.
269
267
 
@@ -328,7 +326,7 @@ async function provision(args) {
328
326
  code: "BAD_USAGE",
329
327
  message: "--org must not be empty.",
330
328
  details: { field: "--org" },
331
- hint: "Pass an org id (run402 org list), or omit --org for the cold-start path.",
329
+ hint: "Pass an org id (run402 orgs list), or omit --org for the cold-start path.",
332
330
  });
333
331
  }
334
332
  // Validate --name when provided. Omitted --name lets the server pick a
@@ -452,7 +450,7 @@ async function validateExpose(args = []) {
452
450
  fail({
453
451
  code: "BAD_USAGE",
454
452
  message: `Unexpected extra argument: ${arg}`,
455
- hint: "run402 projects validate-expose [id] <manifest_json>",
453
+ hint: "run402 projects validate-expose [project_id] <manifest_json>",
456
454
  });
457
455
  }
458
456
  }
@@ -460,7 +458,7 @@ async function validateExpose(args = []) {
460
458
  fail({
461
459
  code: "BAD_USAGE",
462
460
  message: "Provide either inline manifest JSON or --file <path>, not both.",
463
- hint: "run402 projects validate-expose [id] --file manifest.json",
461
+ hint: "run402 projects validate-expose [project_id] --file manifest.json",
464
462
  });
465
463
  }
466
464
  if (migrationFile && migrationSql !== null) {
@@ -571,7 +569,7 @@ async function rename(projectId, args = []) {
571
569
  fail({
572
570
  code: "BAD_USAGE",
573
571
  message: "Missing --name.",
574
- hint: "run402 projects rename <id> --name \"My Site\"",
572
+ hint: "run402 projects rename <project_id> --name \"My Site\"",
575
573
  });
576
574
  }
577
575
  try {
@@ -649,7 +647,7 @@ function commandMoved(name) {
649
647
  fail({
650
648
  code: "COMMAND_MOVED",
651
649
  message: `run402 projects ${name} moved to the explicit local credential-cache surface.`,
652
- hint: "Use `run402 credentials project-keys status/export --project <id>`.",
650
+ hint: "Use `run402 credentials project-keys status/export --project <project_id>`.",
653
651
  details: {
654
652
  old_command: `projects ${name}`,
655
653
  new_command: name === "keys" ? "credentials project-keys export --reveal" : "credentials project-keys status",
@@ -658,12 +656,12 @@ function commandMoved(name) {
658
656
  next_actions: [
659
657
  {
660
658
  type: "run_command",
661
- command: "run402 credentials project-keys status --project <id>",
659
+ command: "run402 credentials project-keys status --project <project_id>",
662
660
  why: "Inspect cached key presence without revealing secrets.",
663
661
  },
664
662
  {
665
663
  type: "run_command",
666
- command: "run402 credentials project-keys export --project <id> --reveal",
664
+ command: "run402 credentials project-keys export --project <project_id> --reveal",
667
665
  why: "Reveal cached project keys only when you explicitly need secret material.",
668
666
  },
669
667
  ],
@@ -733,7 +731,7 @@ async function rest(projectId, restArgs = []) {
733
731
  if (!table) {
734
732
  fail({
735
733
  code: "BAD_USAGE",
736
- message: "Missing <table> argument. Usage: run402 projects rest <table> [--query \"<query>\"] [--project <id>]",
734
+ message: "Missing <table> argument. Usage: run402 projects rest <table> [--query \"<query>\"] [--project <project_id>]",
737
735
  hint: "Run 'run402 projects schema' to list tables.",
738
736
  });
739
737
  }
@@ -886,10 +884,6 @@ const FLAGS_BY_SUB = {
886
884
  values: ["--project", "--file", "--migration-file", "--migration-sql"],
887
885
  },
888
886
  delete: { known: ["--project", "--confirm"], values: ["--project"] },
889
- export: {
890
- known: ["--project", "--scope", "--auth", "--consistency", "--idempotency-key", "--output", "--poll-interval", "--timeout", "--wait", "--json", "--json-stream"],
891
- values: ["--project", "--scope", "--auth", "--consistency", "--idempotency-key", "--output", "--poll-interval", "--timeout"],
892
- },
893
887
  };
894
888
 
895
889
  function validateFlags(sub, args) {
@@ -937,11 +931,6 @@ export async function run(sub, args) {
937
931
  case "validate-expose": await validateExpose(args); break;
938
932
  case "get-expose": { const { projectId } = resolveProjectSelector(args, { rejectBareFirst: true }); await getExpose(projectId); break; }
939
933
  case "delete": { const { projectId, rest } = resolveProjectSelector(args, { rejectBareFirst: true }); await deleteProject(projectId, rest); break; }
940
- case "export": {
941
- const { run } = await import("./cloud.mjs");
942
- await run("archives", ["create", ...args]);
943
- break;
944
- }
945
934
  case "promote-user": { const { projectId, rest } = resolveProjectSelector(args); await promoteUser(projectId, rest[0]); break; }
946
935
  case "demote-user": { const { projectId, rest } = resolveProjectSelector(args); await demoteUser(projectId, rest[0]); break; }
947
936
  default: