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.
- package/README.md +23 -23
- package/cli.mjs +8 -40
- package/core-dist/keystore.js +1 -1
- package/git-remote-run402.mjs +6 -6
- package/lib/admin.mjs +5 -5
- package/lib/ai.mjs +5 -5
- package/lib/apps.mjs +9 -9
- package/lib/archives.mjs +371 -8
- package/lib/argparse.mjs +5 -5
- package/lib/assets.mjs +12 -12
- package/lib/auth.mjs +34 -34
- package/lib/branches.mjs +7 -7
- package/lib/buzz-doctor.mjs +1 -1
- package/lib/buzz-notifications.mjs +4 -4
- package/lib/buzz.mjs +2 -2
- package/lib/cache.mjs +1 -1
- package/lib/cdn.mjs +2 -2
- package/lib/ci.mjs +8 -8
- package/lib/claims.mjs +2 -2
- package/lib/cold-start.mjs +2 -2
- package/lib/command-manifest.mjs +37 -76
- package/lib/config.mjs +4 -4
- package/lib/contacts.mjs +3 -3
- package/lib/contracts.mjs +11 -11
- package/lib/credentials.mjs +32 -32
- package/lib/daemon-path.mjs +3 -3
- package/lib/delegates.mjs +13 -13
- package/lib/deliveries.mjs +2 -2
- package/lib/deploy-v2.mjs +26 -26
- package/lib/dev.mjs +3 -3
- package/lib/doctor.mjs +49 -58
- package/lib/domains.mjs +27 -27
- package/lib/email.mjs +38 -38
- package/lib/errors.mjs +40 -24
- package/lib/escalations.mjs +4 -4
- package/lib/events.mjs +32 -25
- package/lib/feedback.mjs +2 -2
- package/lib/functions.mjs +34 -34
- package/lib/grants.mjs +7 -7
- package/lib/image.mjs +7 -7
- package/lib/init.mjs +32 -32
- package/lib/jobs.mjs +15 -15
- package/lib/live.mjs +1 -1
- package/lib/logs.mjs +8 -8
- package/lib/messages.mjs +5 -5
- package/lib/next-actions.mjs +2 -2
- package/lib/org-context.mjs +22 -22
- package/lib/{org.mjs → orgs.mjs} +140 -179
- package/lib/path-lookup.mjs +7 -10
- package/lib/path-lookup.test.mjs +19 -21
- package/lib/projects.mjs +45 -56
- package/lib/remote-helper-session.mjs +93 -93
- package/lib/repos.mjs +196 -197
- package/lib/rooms-context.mjs +7 -7
- package/lib/rooms.mjs +2 -2
- package/lib/sdk-errors.mjs +1 -1
- package/lib/secrets.mjs +13 -13
- package/lib/sites.mjs +14 -14
- package/lib/snapshots.mjs +10 -10
- package/lib/subdomains.mjs +12 -12
- package/lib/subscriptions.mjs +2 -2
- package/lib/transfer.mjs +1 -1
- package/lib/up.mjs +21 -21
- package/lib/{gitvault-capabilities.mjs → vault-capabilities.mjs} +10 -14
- package/lib/{gitvault-daemon-run.mjs → vault-daemon-run.mjs} +2 -2
- package/lib/{gitvault-daemon.mjs → vault-daemon.mjs} +23 -23
- package/lib/{gitvault-scaffold.mjs → vault-scaffold.mjs} +14 -14
- package/lib/{gitvault-target.mjs → vault-target.mjs} +22 -17
- package/lib/wallet-context.mjs +1 -1
- package/lib/wallets.mjs +1 -1
- package/lib/webhooks.mjs +8 -8
- package/lib/whoami.mjs +32 -5
- package/package.json +2 -2
- package/sdk/core-dist/keystore.js +1 -1
- package/sdk/dist/actions.d.ts +3 -3
- package/sdk/dist/actions.d.ts.map +1 -1
- package/sdk/dist/app-up.d.ts +2 -2
- package/sdk/dist/app-up.d.ts.map +1 -1
- package/sdk/dist/config.d.ts +1 -2
- package/sdk/dist/config.d.ts.map +1 -1
- package/sdk/dist/config.js.map +1 -1
- package/sdk/dist/credentials.d.ts +1 -1
- package/sdk/dist/errors.d.ts +6 -6
- package/sdk/dist/errors.d.ts.map +1 -1
- package/sdk/dist/errors.js +1 -1
- package/sdk/dist/errors.js.map +1 -1
- package/sdk/dist/index.d.ts +9 -9
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +9 -9
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/namespaces/admin.d.ts +1 -1
- package/sdk/dist/namespaces/admin.d.ts.map +1 -1
- package/sdk/dist/namespaces/ai.d.ts +1 -1
- package/sdk/dist/namespaces/ai.js +2 -2
- package/sdk/dist/namespaces/ai.js.map +1 -1
- package/sdk/dist/namespaces/assets.js +1 -1
- package/sdk/dist/namespaces/assets.js.map +1 -1
- package/sdk/dist/namespaces/ci.js +3 -3
- package/sdk/dist/namespaces/ci.js.map +1 -1
- package/sdk/dist/namespaces/deploy.d.ts +5 -5
- package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.js +45 -46
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +19 -19
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/domains.d.ts +10 -2
- package/sdk/dist/namespaces/domains.d.ts.map +1 -1
- package/sdk/dist/namespaces/domains.js +10 -5
- package/sdk/dist/namespaces/domains.js.map +1 -1
- package/sdk/dist/namespaces/errors.js +1 -1
- package/sdk/dist/namespaces/functions.js +1 -1
- package/sdk/dist/namespaces/functions.js.map +1 -1
- package/sdk/dist/namespaces/org.d.ts +2 -2
- package/sdk/dist/namespaces/org.js +2 -2
- package/sdk/dist/namespaces/org.types.d.ts +3 -3
- package/sdk/dist/namespaces/pay.js +1 -1
- package/sdk/dist/namespaces/{gitvault.d.ts → repos.d.ts} +438 -451
- package/sdk/dist/namespaces/repos.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.js → repos.js} +454 -462
- package/sdk/dist/namespaces/repos.js.map +1 -0
- package/sdk/dist/namespaces/rooms.js +2 -2
- package/sdk/dist/namespaces/rooms.js.map +1 -1
- package/sdk/dist/namespaces/session.d.ts +2 -2
- package/sdk/dist/namespaces/session.d.ts.map +1 -1
- package/sdk/dist/namespaces/session.js +2 -2
- package/sdk/dist/namespaces/session.js.map +1 -1
- package/sdk/dist/namespaces/tier.d.ts +4 -4
- package/sdk/dist/namespaces/tier.d.ts.map +1 -1
- package/sdk/dist/namespaces/transfers.d.ts +46 -15
- package/sdk/dist/namespaces/transfers.d.ts.map +1 -1
- package/sdk/dist/namespaces/transfers.js.map +1 -1
- package/sdk/dist/namespaces/{gitvault.crypto.d.ts → vault.crypto.d.ts} +141 -141
- package/sdk/dist/namespaces/vault.crypto.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.crypto.js → vault.crypto.js} +173 -173
- package/sdk/dist/namespaces/vault.crypto.js.map +1 -0
- package/sdk/dist/namespaces/{gitvault.types.d.ts → vault.types.d.ts} +136 -136
- package/sdk/dist/namespaces/vault.types.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.types.js → vault.types.js} +4 -4
- package/sdk/dist/namespaces/vault.types.js.map +1 -0
- package/sdk/dist/node/actions-node.js +8 -8
- package/sdk/dist/node/actions-node.js.map +1 -1
- package/sdk/dist/node/assets-node.js +6 -6
- package/sdk/dist/node/assets-node.js.map +1 -1
- package/sdk/dist/node/bearer-redeem-key.d.ts +1 -1
- package/sdk/dist/node/bearer-redeem-key.js +5 -5
- package/sdk/dist/node/bearer-redeem-key.js.map +1 -1
- package/sdk/dist/node/ci.js +1 -1
- package/sdk/dist/node/ci.js.map +1 -1
- package/sdk/dist/node/credentials.d.ts +1 -1
- package/sdk/dist/node/credentials.js +1 -1
- package/sdk/dist/node/deploy-manifest.d.ts +3 -5
- package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
- package/sdk/dist/node/deploy-manifest.js +3 -12
- package/sdk/dist/node/deploy-manifest.js.map +1 -1
- package/sdk/dist/node/http-dispatcher.js +5 -5
- package/sdk/dist/node/http-dispatcher.js.map +1 -1
- package/sdk/dist/node/index.d.ts +29 -29
- package/sdk/dist/node/index.d.ts.map +1 -1
- package/sdk/dist/node/index.js +39 -39
- package/sdk/dist/node/index.js.map +1 -1
- package/sdk/dist/node/manifest-export.js +2 -2
- package/sdk/dist/node/manifest-export.js.map +1 -1
- package/sdk/dist/node/org-adopt.js +1 -1
- package/sdk/dist/node/org-adopt.js.map +1 -1
- package/sdk/dist/node/sites-node.js +1 -1
- package/sdk/dist/node/sites-node.js.map +1 -1
- package/sdk/dist/node/{gitvault-address.d.ts → vault-address.d.ts} +42 -42
- package/sdk/dist/node/vault-address.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-address.js → vault-address.js} +43 -43
- package/sdk/dist/node/vault-address.js.map +1 -0
- package/sdk/dist/node/{gitvault-apply.d.ts → vault-apply.d.ts} +27 -27
- package/sdk/dist/node/vault-apply.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-apply.js → vault-apply.js} +38 -38
- package/sdk/dist/node/vault-apply.js.map +1 -0
- package/sdk/dist/node/vault-byo-config.d.ts +29 -0
- package/sdk/dist/node/vault-byo-config.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-byo-config.js → vault-byo-config.js} +18 -18
- package/sdk/dist/node/vault-byo-config.js.map +1 -0
- package/sdk/dist/node/vault-byo-probe.d.ts +20 -0
- package/sdk/dist/node/vault-byo-probe.d.ts.map +1 -0
- package/sdk/dist/node/vault-byo-probe.js +57 -0
- package/sdk/dist/node/vault-byo-probe.js.map +1 -0
- package/sdk/dist/node/{gitvault-creation-journal.d.ts → vault-creation-journal.d.ts} +69 -69
- package/sdk/dist/node/vault-creation-journal.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-creation-journal.js → vault-creation-journal.js} +54 -54
- package/sdk/dist/node/vault-creation-journal.js.map +1 -0
- package/sdk/dist/node/{gitvault-degraded-read.d.ts → vault-degraded-read.d.ts} +34 -34
- package/sdk/dist/node/vault-degraded-read.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-degraded-read.js → vault-degraded-read.js} +24 -24
- package/sdk/dist/node/vault-degraded-read.js.map +1 -0
- package/sdk/dist/node/{gitvault-deploy.d.ts → vault-deploy.d.ts} +67 -67
- package/sdk/dist/node/vault-deploy.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-deploy.js → vault-deploy.js} +27 -27
- package/sdk/dist/node/vault-deploy.js.map +1 -0
- package/sdk/dist/node/{gitvault-edge-fetch.d.ts → vault-edge-fetch.d.ts} +9 -9
- package/sdk/dist/node/vault-edge-fetch.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-edge-fetch.js → vault-edge-fetch.js} +11 -11
- package/sdk/dist/node/vault-edge-fetch.js.map +1 -0
- package/sdk/dist/node/{gitvault-handoff.d.ts → vault-handoff.d.ts} +9 -9
- package/sdk/dist/node/vault-handoff.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-handoff.js → vault-handoff.js} +24 -24
- package/sdk/dist/node/vault-handoff.js.map +1 -0
- package/sdk/dist/node/{gitvault-keystore.d.ts → vault-keystore.d.ts} +87 -77
- package/sdk/dist/node/vault-keystore.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-keystore.js → vault-keystore.js} +105 -68
- package/sdk/dist/node/vault-keystore.js.map +1 -0
- package/sdk/dist/node/{gitvault-member-bundle.d.ts → vault-member-bundle.d.ts} +17 -17
- package/sdk/dist/node/vault-member-bundle.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-member-bundle.js → vault-member-bundle.js} +11 -11
- package/sdk/dist/node/vault-member-bundle.js.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-backend.d.ts → vault-mirror-backend.d.ts} +26 -26
- package/sdk/dist/node/vault-mirror-backend.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-backend.js → vault-mirror-backend.js} +25 -25
- package/sdk/dist/node/vault-mirror-backend.js.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-config.d.ts → vault-mirror-config.d.ts} +23 -23
- package/sdk/dist/node/vault-mirror-config.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-mirror-config.js → vault-mirror-config.js} +16 -16
- package/sdk/dist/node/vault-mirror-config.js.map +1 -0
- package/sdk/dist/node/{gitvault-mirror.d.ts → vault-mirror.d.ts} +36 -36
- package/sdk/dist/node/vault-mirror.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-mirror.js → vault-mirror.js} +75 -75
- package/sdk/dist/node/vault-mirror.js.map +1 -0
- package/sdk/dist/node/{gitvault-native-crypto.d.ts → vault-native-crypto.d.ts} +10 -10
- package/sdk/dist/node/vault-native-crypto.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-native-crypto.js → vault-native-crypto.js} +16 -16
- package/sdk/dist/node/vault-native-crypto.js.map +1 -0
- package/sdk/dist/node/{gitvault-open-or-create.d.ts → vault-open-or-create.d.ts} +16 -16
- package/sdk/dist/node/vault-open-or-create.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-open-or-create.js → vault-open-or-create.js} +10 -10
- package/sdk/dist/node/vault-open-or-create.js.map +1 -0
- package/sdk/dist/node/{gitvault-prewarm.d.ts → vault-prewarm.d.ts} +13 -13
- package/sdk/dist/node/vault-prewarm.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-prewarm.js → vault-prewarm.js} +25 -25
- package/sdk/dist/node/vault-prewarm.js.map +1 -0
- package/sdk/dist/node/{gitvault-profile-scan.d.ts → vault-profile-scan.d.ts} +3 -3
- package/sdk/dist/node/vault-profile-scan.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-profile-scan.js → vault-profile-scan.js} +12 -12
- package/sdk/dist/node/vault-profile-scan.js.map +1 -0
- package/sdk/dist/node/{gitvault-prune.d.ts → vault-prune.d.ts} +61 -61
- package/sdk/dist/node/vault-prune.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-prune.js → vault-prune.js} +34 -34
- package/sdk/dist/node/vault-prune.js.map +1 -0
- package/sdk/dist/node/{gitvault-publication.d.ts → vault-publication.d.ts} +399 -399
- package/sdk/dist/node/vault-publication.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-publication.js → vault-publication.js} +584 -584
- package/sdk/dist/node/vault-publication.js.map +1 -0
- package/sdk/dist/node/{gitvault-push-to-create.d.ts → vault-push-to-create.d.ts} +16 -16
- package/sdk/dist/node/vault-push-to-create.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-push-to-create.js → vault-push-to-create.js} +9 -9
- package/sdk/dist/node/vault-push-to-create.js.map +1 -0
- package/sdk/dist/node/{gitvault-recover.d.ts → vault-recover.d.ts} +50 -50
- package/sdk/dist/node/vault-recover.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-recover.js → vault-recover.js} +84 -84
- package/sdk/dist/node/vault-recover.js.map +1 -0
- package/sdk/dist/node/{gitvault-restore.d.ts → vault-restore.d.ts} +8 -8
- package/sdk/dist/node/vault-restore.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-restore.js → vault-restore.js} +11 -11
- package/sdk/dist/node/vault-restore.js.map +1 -0
- package/sdk/dist/node/{gitvault-snapshot.d.ts → vault-snapshot.d.ts} +48 -48
- package/sdk/dist/node/vault-snapshot.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-snapshot.js → vault-snapshot.js} +61 -61
- package/sdk/dist/node/vault-snapshot.js.map +1 -0
- package/sdk/dist/node/{gitvault-writer-state.d.ts → vault-writer-state.d.ts} +8 -8
- package/sdk/dist/node/vault-writer-state.d.ts.map +1 -0
- package/sdk/dist/node/{gitvault-writer-state.js → vault-writer-state.js} +15 -15
- package/sdk/dist/node/vault-writer-state.js.map +1 -0
- package/sdk/dist/node/workflow-output.js +4 -4
- package/sdk/dist/node/workflow-output.js.map +1 -1
- package/sdk/dist/scoped.d.ts +8 -8
- package/sdk/dist/scoped.d.ts.map +1 -1
- package/sdk/dist/scoped.js +3 -3
- package/sdk/dist/scoped.js.map +1 -1
- package/vault-surface.json +40 -0
- package/gitvault-surface.json +0 -89
- package/lib/cloud.mjs +0 -256
- package/lib/core.mjs +0 -123
- package/lib/gitvault.mjs +0 -163
- package/lib/source-access.mjs +0 -70
- package/sdk/dist/namespaces/gitvault.crypto.d.ts.map +0 -1
- package/sdk/dist/namespaces/gitvault.crypto.js.map +0 -1
- package/sdk/dist/namespaces/gitvault.d.ts.map +0 -1
- package/sdk/dist/namespaces/gitvault.js.map +0 -1
- package/sdk/dist/namespaces/gitvault.types.d.ts.map +0 -1
- package/sdk/dist/namespaces/gitvault.types.js.map +0 -1
- package/sdk/dist/node/gitvault-address.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-address.js.map +0 -1
- package/sdk/dist/node/gitvault-apply.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-apply.js.map +0 -1
- package/sdk/dist/node/gitvault-byo-config.d.ts +0 -29
- package/sdk/dist/node/gitvault-byo-config.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-byo-config.js.map +0 -1
- package/sdk/dist/node/gitvault-byo-probe.d.ts +0 -20
- package/sdk/dist/node/gitvault-byo-probe.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-byo-probe.js +0 -57
- package/sdk/dist/node/gitvault-byo-probe.js.map +0 -1
- package/sdk/dist/node/gitvault-creation-journal.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-creation-journal.js.map +0 -1
- package/sdk/dist/node/gitvault-degraded-read.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-degraded-read.js.map +0 -1
- package/sdk/dist/node/gitvault-deploy.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-deploy.js.map +0 -1
- package/sdk/dist/node/gitvault-edge-fetch.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-edge-fetch.js.map +0 -1
- package/sdk/dist/node/gitvault-handoff.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-handoff.js.map +0 -1
- package/sdk/dist/node/gitvault-keystore.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-keystore.js.map +0 -1
- package/sdk/dist/node/gitvault-member-bundle.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-member-bundle.js.map +0 -1
- package/sdk/dist/node/gitvault-mirror-backend.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-mirror-backend.js.map +0 -1
- package/sdk/dist/node/gitvault-mirror-config.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-mirror-config.js.map +0 -1
- package/sdk/dist/node/gitvault-mirror.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-mirror.js.map +0 -1
- package/sdk/dist/node/gitvault-native-crypto.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-native-crypto.js.map +0 -1
- package/sdk/dist/node/gitvault-open-or-create.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-open-or-create.js.map +0 -1
- package/sdk/dist/node/gitvault-prewarm.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-prewarm.js.map +0 -1
- package/sdk/dist/node/gitvault-profile-scan.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-profile-scan.js.map +0 -1
- package/sdk/dist/node/gitvault-prune.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-prune.js.map +0 -1
- package/sdk/dist/node/gitvault-publication.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-publication.js.map +0 -1
- package/sdk/dist/node/gitvault-push-to-create.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-push-to-create.js.map +0 -1
- package/sdk/dist/node/gitvault-recover.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-recover.js.map +0 -1
- package/sdk/dist/node/gitvault-restore.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-restore.js.map +0 -1
- package/sdk/dist/node/gitvault-snapshot.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-snapshot.js.map +0 -1
- package/sdk/dist/node/gitvault-writer-state.d.ts.map +0 -1
- package/sdk/dist/node/gitvault-writer-state.js.map +0 -1
package/lib/rooms-context.mjs
CHANGED
|
@@ -39,16 +39,16 @@ export const PRESENCE_ENV = "RUN402_PRESENCE_ID";
|
|
|
39
39
|
/**
|
|
40
40
|
* `r402.room` from `cwd`'s LOCAL git config (kygit-handoff design D10) —
|
|
41
41
|
* best-effort, `null` on any absence or failure. Checks a real vault
|
|
42
|
-
* checkout's pin first (`
|
|
42
|
+
* checkout's pin first (`readPinnedVaultRepo`, gated on `r402.repoId`
|
|
43
43
|
* being present), then falls back to the bare room/org pin `rooms join
|
|
44
44
|
* <key>` writes in a directory with NO vault at all (add-room-invite design
|
|
45
|
-
* D10) — `
|
|
45
|
+
* D10) — `readPinnedVaultRepo` would otherwise see that pin as absent,
|
|
46
46
|
* since it never sets `r402.repoId`.
|
|
47
47
|
*/
|
|
48
|
-
async function
|
|
48
|
+
async function readVaultPinnedRoom(cwd) {
|
|
49
49
|
try {
|
|
50
|
-
const {
|
|
51
|
-
const pinned = await
|
|
50
|
+
const { readPinnedVaultRepo, readPinnedRoomBinding } = await import("#sdk/node");
|
|
51
|
+
const pinned = await readPinnedVaultRepo(cwd);
|
|
52
52
|
const room = typeof pinned?.room === "string" ? pinned.room.trim() : "";
|
|
53
53
|
if (room.length > 0) return room;
|
|
54
54
|
const bare = await readPinnedRoomBinding(cwd);
|
|
@@ -102,11 +102,11 @@ export async function resolveRoom({ org, room, project } = {}) {
|
|
|
102
102
|
// (`--room` alone works whenever the org resolves, and fails with
|
|
103
103
|
// ORG_REQUIRED — naming every way to supply one — when it does not.)
|
|
104
104
|
// kygit-handoff design D10: `r402.room` in this checkout's LOCAL git
|
|
105
|
-
// config — written by `resume` and every other
|
|
105
|
+
// config — written by `resume` and every other vault pin site — is
|
|
106
106
|
// the LAST room-key source before falling to the project default,
|
|
107
107
|
// below the binding file's own `room` key.
|
|
108
108
|
const bindingRoom = findBindingKey(process.cwd(), "room");
|
|
109
|
-
const roomKey = room ?? bindingRoom?.value ?? (await
|
|
109
|
+
const roomKey = room ?? bindingRoom?.value ?? (await readVaultPinnedRoom(process.cwd()));
|
|
110
110
|
if (roomKey) {
|
|
111
111
|
const resolved = await resolveOrg({ org, project }, { cmd: "rooms" });
|
|
112
112
|
return {
|
package/lib/rooms.mjs
CHANGED
|
@@ -53,8 +53,8 @@ Usage:
|
|
|
53
53
|
run402 rooms leave [<presence_id>]
|
|
54
54
|
|
|
55
55
|
Addressing:
|
|
56
|
-
--project <
|
|
57
|
-
--org <
|
|
56
|
+
--project <project_id> That project's DEFAULT room (the room key IS the project id)
|
|
57
|
+
--org <org_id> --room <key> A named org room
|
|
58
58
|
(omit both) Resolved from RUN402_ROOM, a .run402.json binding, or the
|
|
59
59
|
wallet profile's selected org
|
|
60
60
|
|
package/lib/sdk-errors.mjs
CHANGED
|
@@ -82,7 +82,7 @@ export function reportSdkError(err) {
|
|
|
82
82
|
fail({
|
|
83
83
|
code: "PROJECT_CREDENTIAL_NOT_FOUND",
|
|
84
84
|
message: err?.message || "Local project credentials are not cached.",
|
|
85
|
-
hint: "This is a local credential-cache miss, not proof that the project does not exist. Use a principal-auth command, or import keys with `run402 credentials project-keys import --project <
|
|
85
|
+
hint: "This is a local credential-cache miss, not proof that the project does not exist. Use a principal-auth command, or import keys with `run402 credentials project-keys import --project <project_id> --service-key-stdin` for credential-required operations.",
|
|
86
86
|
details: err?.details,
|
|
87
87
|
next_actions: err?.nextActions,
|
|
88
88
|
retryable: err?.retryable ?? false,
|
package/lib/secrets.mjs
CHANGED
|
@@ -10,10 +10,10 @@ Usage:
|
|
|
10
10
|
run402 secrets <subcommand> [args...]
|
|
11
11
|
|
|
12
12
|
Subcommands:
|
|
13
|
-
set <key> (--value <v> | --file <path> | --stdin) [--project <
|
|
13
|
+
set <key> (--value <v> | --file <path> | --stdin) [--project <project_id>]
|
|
14
14
|
Set a secret on a project
|
|
15
|
-
list [--project <
|
|
16
|
-
delete <key> [--project <
|
|
15
|
+
list [--project <project_id>] List all secrets for a project
|
|
16
|
+
delete <key> [--project <project_id>] Delete a secret from a project
|
|
17
17
|
|
|
18
18
|
Legacy (still supported):
|
|
19
19
|
run402 secrets set <prj_id> <key> <value>
|
|
@@ -38,9 +38,9 @@ const SUB_HELP = {
|
|
|
38
38
|
set: `run402 secrets set — Set a secret on a project
|
|
39
39
|
|
|
40
40
|
Usage:
|
|
41
|
-
run402 secrets set <key> --value <v> [--project <
|
|
42
|
-
run402 secrets set <key> --file <path> [--project <
|
|
43
|
-
run402 secrets set <key> --stdin [--project <
|
|
41
|
+
run402 secrets set <key> --value <v> [--project <project_id>]
|
|
42
|
+
run402 secrets set <key> --file <path> [--project <project_id>]
|
|
43
|
+
run402 secrets set <key> --stdin [--project <project_id>]
|
|
44
44
|
|
|
45
45
|
Legacy (still supported):
|
|
46
46
|
run402 secrets set <prj_id> <key> <value>
|
|
@@ -50,7 +50,7 @@ Arguments:
|
|
|
50
50
|
<key> Secret key name (exposed as process.env.<key>)
|
|
51
51
|
|
|
52
52
|
Options:
|
|
53
|
-
--project <
|
|
53
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
54
54
|
--value <v> Inline secret value (alternative to the legacy positional)
|
|
55
55
|
--file <path> Read the secret value from a file instead of inline
|
|
56
56
|
Use --file - or --file /dev/stdin to read from stdin
|
|
@@ -71,13 +71,13 @@ Examples:
|
|
|
71
71
|
list: `run402 secrets list — List all secrets for a project
|
|
72
72
|
|
|
73
73
|
Usage:
|
|
74
|
-
run402 secrets list [--project <
|
|
74
|
+
run402 secrets list [--project <project_id>]
|
|
75
75
|
|
|
76
76
|
Legacy (still supported):
|
|
77
77
|
run402 secrets list <prj_id>
|
|
78
78
|
|
|
79
79
|
Options:
|
|
80
|
-
--project <
|
|
80
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
81
81
|
|
|
82
82
|
Notes:
|
|
83
83
|
- Returns secret keys and timestamps only; raw values and value-derived hashes are never returned
|
|
@@ -88,7 +88,7 @@ Examples:
|
|
|
88
88
|
delete: `run402 secrets delete — Delete a secret from a project
|
|
89
89
|
|
|
90
90
|
Usage:
|
|
91
|
-
run402 secrets delete <key> [--project <
|
|
91
|
+
run402 secrets delete <key> [--project <project_id>]
|
|
92
92
|
|
|
93
93
|
Legacy (still supported):
|
|
94
94
|
run402 secrets delete <prj_id> <key>
|
|
@@ -97,7 +97,7 @@ Arguments:
|
|
|
97
97
|
<key> Secret key name to remove
|
|
98
98
|
|
|
99
99
|
Options:
|
|
100
|
-
--project <
|
|
100
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
101
101
|
|
|
102
102
|
Examples:
|
|
103
103
|
run402 secrets delete STRIPE_KEY --project prj_abc123
|
|
@@ -147,7 +147,7 @@ async function set(projectId, args = []) {
|
|
|
147
147
|
fail({
|
|
148
148
|
code: "BAD_USAGE",
|
|
149
149
|
message: "Missing <key>.",
|
|
150
|
-
hint: "run402 secrets set <key> --value <v> [--project <
|
|
150
|
+
hint: "run402 secrets set <key> --value <v> [--project <project_id>]",
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
153
|
const values = positionals.slice(1);
|
|
@@ -235,7 +235,7 @@ async function deleteSecret(projectId, args = []) {
|
|
|
235
235
|
fail({
|
|
236
236
|
code: "BAD_USAGE",
|
|
237
237
|
message: "Missing <key>.",
|
|
238
|
-
hint: "run402 secrets delete <key> [--project <
|
|
238
|
+
hint: "run402 secrets delete <key> [--project <project_id>]",
|
|
239
239
|
});
|
|
240
240
|
}
|
|
241
241
|
if (positionals.length > 1) {
|
package/lib/sites.mjs
CHANGED
|
@@ -13,8 +13,8 @@ const SMALL_DIR_THRESHOLD = 5;
|
|
|
13
13
|
const HELP = `run402 sites - Deploy and manage static sites
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
|
-
run402 sites deploy --manifest <file> [--project <
|
|
17
|
-
run402 sites deploy-dir <path> --project <
|
|
16
|
+
run402 sites deploy --manifest <file> [--project <project_id>]
|
|
17
|
+
run402 sites deploy-dir <path> --project <project_id>
|
|
18
18
|
cat manifest.json | run402 sites deploy
|
|
19
19
|
|
|
20
20
|
Subcommands:
|
|
@@ -23,12 +23,12 @@ Subcommands:
|
|
|
23
23
|
|
|
24
24
|
Options (deploy):
|
|
25
25
|
--manifest <file> Path to manifest JSON file (or read from stdin)
|
|
26
|
-
--project <
|
|
26
|
+
--project <project_id> Project ID (defaults to active project)
|
|
27
27
|
--help, -h Show this help message
|
|
28
28
|
|
|
29
29
|
Options (deploy-dir):
|
|
30
30
|
<path> Positional: local directory to deploy
|
|
31
|
-
--project <
|
|
31
|
+
--project <project_id> Project ID (defaults to active project)
|
|
32
32
|
--quiet Suppress progress events on stderr
|
|
33
33
|
--dry-run Plan-only: print the diff envelope and exit
|
|
34
34
|
--confirm-prune Required when <path> has fewer files than the
|
|
@@ -58,7 +58,7 @@ Notes:
|
|
|
58
58
|
(CAS-backed): only bytes the gateway doesn't already have are uploaded.
|
|
59
59
|
Re-deploys of an unchanged tree make no S3 PUTs.
|
|
60
60
|
- To check status of an in-flight deploy, use 'run402 deploy events <op>'
|
|
61
|
-
or 'run402 deploy list --project <
|
|
61
|
+
or 'run402 deploy list --project <project_id>'.
|
|
62
62
|
- deploy-dir walks the directory, skips .git / node_modules / .DS_Store,
|
|
63
63
|
and auto-detects binary files. Symlinks are rejected.
|
|
64
64
|
- Progress events are emitted as JSON-line objects on stderr by default
|
|
@@ -71,12 +71,12 @@ const SUB_HELP = {
|
|
|
71
71
|
deploy: `run402 sites deploy - Deploy a static site from a manifest
|
|
72
72
|
|
|
73
73
|
Usage:
|
|
74
|
-
run402 sites deploy --manifest <file> [--project <
|
|
75
|
-
cat manifest.json | run402 sites deploy [--project <
|
|
74
|
+
run402 sites deploy --manifest <file> [--project <project_id>]
|
|
75
|
+
cat manifest.json | run402 sites deploy [--project <project_id>]
|
|
76
76
|
|
|
77
77
|
Options:
|
|
78
78
|
--manifest <file> Path to manifest JSON file (or read from stdin)
|
|
79
|
-
--project <
|
|
79
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
80
80
|
|
|
81
81
|
Manifest format (JSON):
|
|
82
82
|
{
|
|
@@ -99,14 +99,14 @@ Examples:
|
|
|
99
99
|
"deploy-dir": `run402 sites deploy-dir - Deploy a static site from a local directory
|
|
100
100
|
|
|
101
101
|
Usage:
|
|
102
|
-
run402 sites deploy-dir <path> [--project <
|
|
102
|
+
run402 sites deploy-dir <path> [--project <project_id>] [--quiet]
|
|
103
103
|
[--dry-run] [--confirm-prune]
|
|
104
104
|
|
|
105
105
|
Arguments:
|
|
106
106
|
<path> Local directory to deploy (positional, required)
|
|
107
107
|
|
|
108
108
|
Options:
|
|
109
|
-
--project <
|
|
109
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
110
110
|
--quiet Suppress progress events on stderr (events are on by
|
|
111
111
|
default — see Progress events below)
|
|
112
112
|
--dry-run Plan the deploy and print a JSON envelope describing
|
|
@@ -196,7 +196,7 @@ async function deploy(args) {
|
|
|
196
196
|
fail({
|
|
197
197
|
code: "BAD_USAGE",
|
|
198
198
|
message: `Unexpected argument for sites deploy: ${extra[0]}`,
|
|
199
|
-
hint: "Use `run402 sites deploy --manifest <file> [--project <
|
|
199
|
+
hint: "Use `run402 sites deploy --manifest <file> [--project <project_id>]`.",
|
|
200
200
|
});
|
|
201
201
|
}
|
|
202
202
|
const opts = { manifest: null, project: undefined, target: undefined, quiet: false };
|
|
@@ -252,7 +252,7 @@ async function deployDir(args) {
|
|
|
252
252
|
fail({
|
|
253
253
|
code: "BAD_USAGE",
|
|
254
254
|
message: `Unexpected argument for sites deploy-dir: ${positionals[1]}`,
|
|
255
|
-
hint: "Use `run402 sites deploy-dir <path> --project <
|
|
255
|
+
hint: "Use `run402 sites deploy-dir <path> --project <project_id>`.",
|
|
256
256
|
});
|
|
257
257
|
}
|
|
258
258
|
const opts = {
|
|
@@ -282,7 +282,7 @@ async function deployDir(args) {
|
|
|
282
282
|
fail({
|
|
283
283
|
code: "BAD_USAGE",
|
|
284
284
|
message: "Missing <path>.",
|
|
285
|
-
hint: "run402 sites deploy-dir <path> --project <
|
|
285
|
+
hint: "run402 sites deploy-dir <path> --project <project_id>",
|
|
286
286
|
});
|
|
287
287
|
}
|
|
288
288
|
const projectId = resolveProjectId(opts.project);
|
|
@@ -325,7 +325,7 @@ async function deployDir(args) {
|
|
|
325
325
|
if (opts.dryRun) {
|
|
326
326
|
try {
|
|
327
327
|
const { plan } = await getSdk()._applyEngine.plan({
|
|
328
|
-
|
|
328
|
+
project_id: projectId,
|
|
329
329
|
site: { replace: fileSet },
|
|
330
330
|
}, { dryRun: true });
|
|
331
331
|
console.log(JSON.stringify({
|
package/lib/snapshots.mjs
CHANGED
|
@@ -15,14 +15,14 @@ import {
|
|
|
15
15
|
const HELP = `run402 snapshots — Project database restore points
|
|
16
16
|
|
|
17
17
|
Usage:
|
|
18
|
-
run402 snapshots create [--project <
|
|
19
|
-
run402 snapshots list [--project <
|
|
20
|
-
run402 snapshots get <
|
|
21
|
-
run402 snapshots restore <
|
|
22
|
-
run402 snapshots delete <
|
|
18
|
+
run402 snapshots create [--project <project_id>] [--json]
|
|
19
|
+
run402 snapshots list [--project <project_id>] [--kind <kind>] [--limit <n>] [--after <cursor>] [--json]
|
|
20
|
+
run402 snapshots get <snapshot_id> [--project <project_id>] [--json]
|
|
21
|
+
run402 snapshots restore <snapshot_id> [--project <project_id>] [--include-auth] [--confirm <token>] [--json]
|
|
22
|
+
run402 snapshots delete <snapshot_id> [--project <project_id>] [--json]
|
|
23
23
|
|
|
24
24
|
Legacy (still supported): a leading prj_... positional selects the project,
|
|
25
|
-
e.g. run402 snapshots restore prj_abc123 <
|
|
25
|
+
e.g. run402 snapshots restore prj_abc123 <snapshot_id>. --project defaults to
|
|
26
26
|
the active project.
|
|
27
27
|
|
|
28
28
|
Restore is a two-step handshake. First call without --confirm to get a
|
|
@@ -82,7 +82,7 @@ async function list(args) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
async function get(args) {
|
|
85
|
-
const { projectId, snapshotId } = resolveProjectAndSnapshot(args, "run402 snapshots get [
|
|
85
|
+
const { projectId, snapshotId } = resolveProjectAndSnapshot(args, "run402 snapshots get [project_id] <snapshot_id>");
|
|
86
86
|
try {
|
|
87
87
|
const snapshot = await getSdk().snapshots.get(projectId, snapshotId);
|
|
88
88
|
console.log(JSON.stringify({ snapshot }, null, 2));
|
|
@@ -92,7 +92,7 @@ async function get(args) {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
async function restore(args) {
|
|
95
|
-
const { projectId, snapshotId } = resolveProjectAndSnapshot(args, "run402 snapshots restore [
|
|
95
|
+
const { projectId, snapshotId } = resolveProjectAndSnapshot(args, "run402 snapshots restore [project_id] <snapshot_id> [--confirm <token>]");
|
|
96
96
|
const includeAuth = args.includes("--include-auth");
|
|
97
97
|
const confirm = flagValue(args, "--confirm");
|
|
98
98
|
try {
|
|
@@ -115,7 +115,7 @@ async function restore(args) {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
async function deleteSnapshot(args) {
|
|
118
|
-
const { projectId, snapshotId } = resolveProjectAndSnapshot(args, "run402 snapshots delete [
|
|
118
|
+
const { projectId, snapshotId } = resolveProjectAndSnapshot(args, "run402 snapshots delete [project_id] <snapshot_id>");
|
|
119
119
|
try {
|
|
120
120
|
await getSdk().snapshots.delete(projectId, snapshotId);
|
|
121
121
|
console.log(JSON.stringify({ ok: true, project_id: projectId, snapshot_id: snapshotId, deleted: true }, null, 2));
|
|
@@ -125,7 +125,7 @@ async function deleteSnapshot(args) {
|
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
function resolveProjectAndSnapshot(args, usage) {
|
|
128
|
-
// Canonical: `<
|
|
128
|
+
// Canonical: `<snapshot_id> [--project <project_id>]`; legacy `<prj_id> <snapshot_id>`
|
|
129
129
|
// still works (requireRestPositional keeps a lone snapshot id that happens to
|
|
130
130
|
// start with prj_ from being eaten as the project selector).
|
|
131
131
|
const { projectId, rest } = resolveProjectSelector(args, { valueFlags: FLAG_VALUES, requireRestPositional: true });
|
package/lib/subdomains.mjs
CHANGED
|
@@ -10,8 +10,8 @@ Usage:
|
|
|
10
10
|
|
|
11
11
|
Subcommands:
|
|
12
12
|
add <name> [--project <project_id>] [--release <release_id> | --deployment <deployment_id>] Add a subdomain
|
|
13
|
-
delete <name> --confirm [--project <
|
|
14
|
-
list [--project <
|
|
13
|
+
delete <name> --confirm [--project <project_id>] Release a subdomain. Requires --confirm.
|
|
14
|
+
list [--project <project_id>] List subdomains for a project
|
|
15
15
|
|
|
16
16
|
Options default to the active project. With neither --release nor
|
|
17
17
|
--deployment, add binds the project's live release.
|
|
@@ -39,10 +39,10 @@ Arguments:
|
|
|
39
39
|
hyphens). Creates <name>.run402.com.
|
|
40
40
|
|
|
41
41
|
Options:
|
|
42
|
-
--project <
|
|
43
|
-
--release <
|
|
42
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
43
|
+
--release <release_id> Release ID (rel_...) to point at. With neither flag,
|
|
44
44
|
the project's live release is bound.
|
|
45
|
-
--deployment <
|
|
45
|
+
--deployment <deployment_id> Legacy deployment ID (dpl_...); rel_.../op_... ids are
|
|
46
46
|
accepted too.
|
|
47
47
|
|
|
48
48
|
Notes:
|
|
@@ -57,10 +57,10 @@ Examples:
|
|
|
57
57
|
list: `run402 subdomains list — List a project's subdomains
|
|
58
58
|
|
|
59
59
|
Usage:
|
|
60
|
-
run402 subdomains list [--project <
|
|
60
|
+
run402 subdomains list [--project <project_id>]
|
|
61
61
|
|
|
62
62
|
Options:
|
|
63
|
-
--project <
|
|
63
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
64
64
|
|
|
65
65
|
Examples:
|
|
66
66
|
run402 subdomains list
|
|
@@ -69,7 +69,7 @@ Examples:
|
|
|
69
69
|
delete: `run402 subdomains delete — Release a subdomain
|
|
70
70
|
|
|
71
71
|
Usage:
|
|
72
|
-
run402 subdomains delete <name> --confirm [--project <
|
|
72
|
+
run402 subdomains delete <name> --confirm [--project <project_id>]
|
|
73
73
|
|
|
74
74
|
Arguments:
|
|
75
75
|
<name> Subdomain name to release
|
|
@@ -77,7 +77,7 @@ Arguments:
|
|
|
77
77
|
Options:
|
|
78
78
|
--confirm Required: releasing a subdomain is irreversible and
|
|
79
79
|
makes it available for any other project to add
|
|
80
|
-
--project <
|
|
80
|
+
--project <project_id> Project ID (defaults to the active project)
|
|
81
81
|
|
|
82
82
|
Examples:
|
|
83
83
|
run402 subdomains delete myapp --confirm
|
|
@@ -117,7 +117,7 @@ async function add(args) {
|
|
|
117
117
|
fail({
|
|
118
118
|
code: "BAD_USAGE",
|
|
119
119
|
message: "Pass either --release or --deployment, not both.",
|
|
120
|
-
hint: "run402 subdomains add <name> [--release <
|
|
120
|
+
hint: "run402 subdomains add <name> [--release <release_id> | --deployment <deployment_id>]",
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
const projectId = resolveProjectId(opts.project);
|
|
@@ -147,7 +147,7 @@ async function deleteSubdomain(allArgs) {
|
|
|
147
147
|
fail({
|
|
148
148
|
code: "BAD_USAGE",
|
|
149
149
|
message: "Missing <name>.",
|
|
150
|
-
hint: "run402 subdomains delete <name> --confirm [--project <
|
|
150
|
+
hint: "run402 subdomains delete <name> --confirm [--project <project_id>]",
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
153
|
if (positionals.length > 1) {
|
|
@@ -186,7 +186,7 @@ async function list(args) {
|
|
|
186
186
|
fail({
|
|
187
187
|
code: "BAD_USAGE",
|
|
188
188
|
message: `Unexpected argument for subdomains list: ${rest[0]}`,
|
|
189
|
-
hint: "Use `run402 subdomains list --project <
|
|
189
|
+
hint: "Use `run402 subdomains list --project <project_id>`.",
|
|
190
190
|
});
|
|
191
191
|
}
|
|
192
192
|
const projectId = resolveProjectId(project);
|
package/lib/subscriptions.mjs
CHANGED
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
const HELP = `run402 subscriptions — which events go where
|
|
36
36
|
|
|
37
37
|
Usage:
|
|
38
|
-
run402 subscriptions add --binding <binding_id> [--project <
|
|
38
|
+
run402 subscriptions add --binding <binding_id> [--project <project_id>] [--source app|platform] [--type a,b] [--class a,b]
|
|
39
39
|
run402 subscriptions list
|
|
40
40
|
run402 subscriptions rm <subscription_id>
|
|
41
41
|
|
|
@@ -68,7 +68,7 @@ function splitCsv(value) {
|
|
|
68
68
|
* alias for anyone who learned it from that help text. */
|
|
69
69
|
export const SUBSCRIPTIONS_ADD_VALUE_FLAGS = ["--binding", "--contact", "--project", "--source", "--type", "--class"];
|
|
70
70
|
export const SUBSCRIPTIONS_ADD_USAGE =
|
|
71
|
-
"run402 subscriptions add --binding <binding_id> [--project <
|
|
71
|
+
"run402 subscriptions add --binding <binding_id> [--project <project_id>] [--source app|platform] [--type a,b] [--class a,b]";
|
|
72
72
|
export { HELP as SUBSCRIPTIONS_HELP };
|
|
73
73
|
|
|
74
74
|
async function rulesAdd(args) {
|
package/lib/transfer.mjs
CHANGED
|
@@ -140,7 +140,7 @@ async function init(args) {
|
|
|
140
140
|
const projectFlag = flagValue(parsedArgs, "--project");
|
|
141
141
|
const projectId = await resolveProjectId(projectFlag);
|
|
142
142
|
if (!projectId) {
|
|
143
|
-
fail({ code: "NO_PROJECT", message: "No project id. Pass --project <
|
|
143
|
+
fail({ code: "NO_PROJECT", message: "No project id. Pass --project <project_id> or set an active project with 'run402 projects use <project_id>'." });
|
|
144
144
|
}
|
|
145
145
|
const billingPolicy = flagValue(parsedArgs, "--billing-policy");
|
|
146
146
|
if (billingPolicy !== null && !BILLING_POLICIES.has(billingPolicy)) {
|
package/lib/up.mjs
CHANGED
|
@@ -13,15 +13,15 @@ import { loadLiveControlPlaneSession } from "../core-dist/control-plane-session.
|
|
|
13
13
|
const HELP = `run402 up — Provision/link/deploy the current app
|
|
14
14
|
|
|
15
15
|
Usage:
|
|
16
|
-
run402 up [repo-or-path] [--name <name>] [--project <
|
|
17
|
-
run402 up verify [repo-or-path] [--project <
|
|
16
|
+
run402 up [repo-or-path] [--name <name>] [--project <project_id>] [--manifest <path>] [--dir <path>] [--tier <tier>] [-y|--yes] [--check|--print-spec|--print-manifest|--plan|--require-plan <plan_id>|--repo-only] [--nested] [--verify] [--human|--json-stream] [--quiet]
|
|
17
|
+
run402 up verify [repo-or-path] [--project <project_id>] [--manifest <path>] [--dir <path>] [--human|--json-stream]
|
|
18
18
|
|
|
19
19
|
Options:
|
|
20
20
|
repo-or-path Local app directory or public Git repository URL. Defaults
|
|
21
21
|
to the current directory.
|
|
22
22
|
--name <name> Project display name when up needs to create a project.
|
|
23
23
|
Not a deploy manifest field and never renames a project.
|
|
24
|
-
--project <
|
|
24
|
+
--project <project_id> Explicit project id. All supplied selectors must agree.
|
|
25
25
|
--manifest <path> Manifest path. Defaults to run402.json, then
|
|
26
26
|
run402.deploy.json, then app.json in --dir/current directory.
|
|
27
27
|
--dir <path> Workspace directory to inspect (default: current dir).
|
|
@@ -39,7 +39,7 @@ Options:
|
|
|
39
39
|
uploads, or local writes.
|
|
40
40
|
--plan Ask the gateway for a reviewed deploy plan. No upload,
|
|
41
41
|
commit, project provisioning, or workspace link write.
|
|
42
|
-
--require-plan <
|
|
42
|
+
--require-plan <plan_id> Apply only if this reviewed plan still matches.
|
|
43
43
|
--plan-fingerprint <fingerprint>
|
|
44
44
|
Optional fingerprint returned by --plan. Only valid
|
|
45
45
|
with --require-plan.
|
|
@@ -84,12 +84,12 @@ Options:
|
|
|
84
84
|
Repo composition (D4): against a local directory (not a git URL source), up
|
|
85
85
|
composes git init (only when the app root is not already a repository) +
|
|
86
86
|
provision + a run402 remote scaffold (origin is never claimed) + a first
|
|
87
|
-
|
|
87
|
+
vault push — one command, the fly-launch shape. The app root is the
|
|
88
88
|
manifest's directory; an app root that lies INSIDE another repository is
|
|
89
89
|
left untouched (result.repo.status "skipped", reason
|
|
90
90
|
"inside_other_repository", toplevel named) and result.repo.next_actions
|
|
91
91
|
carries create_nested_repo — re-run with --nested to give the app its own
|
|
92
|
-
encrypted remote (result.repo.
|
|
92
|
+
encrypted remote (result.repo.vault.nested true, enclosing_toplevel,
|
|
93
93
|
excluded_in_enclosing). The scaffold and first push are best-effort: a git
|
|
94
94
|
or vault hiccup never turns an otherwise-successful deploy into a failure,
|
|
95
95
|
and is reported under result.repo (default apply) or result (--repo-only)
|
|
@@ -104,7 +104,7 @@ coordination only. RUN402_AGENT_NAME=<name> sets the name, overriding an
|
|
|
104
104
|
existing one; RUN402_CLIENT=<name> declares the client when it is not
|
|
105
105
|
auto-detected. A detected client that was not applied (the principal is
|
|
106
106
|
already named) is still reported. Change the name any time with
|
|
107
|
-
'run402
|
|
107
|
+
'run402 whoami --set-name <name>'. Reported under result.identity
|
|
108
108
|
(source, detected, detection).
|
|
109
109
|
--json Emit one final JSON object on stdout (default; compatibility no-op).
|
|
110
110
|
--human Emit the legacy human success/blocking summary on stdout.
|
|
@@ -138,12 +138,12 @@ Works for both app manifests (run402.json) and deploy manifests
|
|
|
138
138
|
(run402.deploy.json / app.json) that declare a top-level verify block.
|
|
139
139
|
|
|
140
140
|
Usage:
|
|
141
|
-
run402 up verify [repo-or-path] [--project <
|
|
141
|
+
run402 up verify [repo-or-path] [--project <project_id>] [--manifest <path>] [--dir <path>] [--name <name>] [--human|--json-stream]
|
|
142
142
|
|
|
143
143
|
Options:
|
|
144
144
|
repo-or-path Local app directory or public Git repository URL. Defaults
|
|
145
145
|
to the current directory.
|
|
146
|
-
--project <
|
|
146
|
+
--project <project_id> Existing project id. Defaults to .run402/project.json,
|
|
147
147
|
manifest project id, then active project.
|
|
148
148
|
--manifest <path> Manifest path. Defaults to run402.json, then
|
|
149
149
|
run402.deploy.json, then app.json.
|
|
@@ -395,7 +395,7 @@ export async function run(args = []) {
|
|
|
395
395
|
createdRepository = await gitInitIfNeeded(workDir);
|
|
396
396
|
result.result.repo = await composeRepoPushStep({ sdk, workDir, projectId, createdRepository, nested });
|
|
397
397
|
} catch (err) {
|
|
398
|
-
result.result.repo = { status: "failed", first_push: null, first_push_error: { code: err?.code ?? "
|
|
398
|
+
result.result.repo = { status: "failed", first_push: null, first_push_error: { code: err?.code ?? "VAULT_SETUP_FAILED", message: err?.message ?? String(err) }, ...repoNextActionsOf(err) };
|
|
399
399
|
}
|
|
400
400
|
}
|
|
401
401
|
}
|
|
@@ -658,13 +658,13 @@ function looksLikeGitRemoteUrl(source) {
|
|
|
658
658
|
*
|
|
659
659
|
* `-b main`, not whatever `init.defaultBranch` (or the pre-2.28 hardcoded
|
|
660
660
|
* `master`) happens to be — the docs teach `git push origin main`, and the
|
|
661
|
-
*
|
|
661
|
+
* vault remote helper's own dangling-HEAD hazard note (a first push of
|
|
662
662
|
* any OTHER branch leaves HEAD naming a ref that does not exist yet) is
|
|
663
663
|
* exactly what a mismatched default branch here would walk `up` straight
|
|
664
664
|
* into. `-b` needs git 2.28+ (2020); an older git falls back to the same
|
|
665
665
|
* result by a different route — `symbolic-ref` on a still-empty repository
|
|
666
666
|
* has no existing ref to disturb, so it is exactly as safe as `-b main`
|
|
667
|
-
* would have been. Mirrors `
|
|
667
|
+
* would have been. Mirrors `Repos.scaffoldRemote`'s identical fallback.
|
|
668
668
|
*/
|
|
669
669
|
async function gitInitIfNeeded(dir) {
|
|
670
670
|
const { hardenedGit } = await import("#sdk/node");
|
|
@@ -685,20 +685,20 @@ async function gitInitIfNeeded(dir) {
|
|
|
685
685
|
/**
|
|
686
686
|
* Remote scaffold + first push, against an already-known project. Best-effort
|
|
687
687
|
* in every branch — the same non-fatal discipline `projects provision`'s own
|
|
688
|
-
* fold-in follows (`
|
|
688
|
+
* fold-in follows (`vault-scaffold.mjs`): a git or vault hiccup here must
|
|
689
689
|
* never turn an otherwise-successful `up` into a failure.
|
|
690
690
|
*/
|
|
691
691
|
async function composeRepoPushStep({ sdk, workDir, projectId, createdRepository, nested = false }) {
|
|
692
692
|
const { resolveOwningOrgId } = await import("./org-context.mjs");
|
|
693
|
-
const {
|
|
693
|
+
const { scaffoldVaultRemote } = await import("./vault-scaffold.mjs");
|
|
694
694
|
const orgId = await resolveOwningOrgId(projectId);
|
|
695
695
|
// `--nested`: an app root INSIDE another repository (a monorepo workspace)
|
|
696
696
|
// becomes its own repository with the encrypted remote — the enclosing
|
|
697
697
|
// checkout only gains one local `.git/info/exclude` line. Without it the
|
|
698
698
|
// scaffold is skipped there and the result's `next_actions` name
|
|
699
699
|
// `run402 up --nested` (the caller's own spelling of the way out).
|
|
700
|
-
const scaffold = await
|
|
701
|
-
if (createdRepository && scaffold.
|
|
700
|
+
const scaffold = await scaffoldVaultRemote({ repoDir: workDir, projectId, orgId: orgId ?? undefined, createRepoIfMissing: false, nested, nestedCommand: "run402 up --nested" });
|
|
701
|
+
if (createdRepository && scaffold.vault) scaffold.vault.created_repository = true;
|
|
702
702
|
const out = { ...scaffold, first_push: null, first_push_error: null };
|
|
703
703
|
if (scaffold.status !== "scaffolded") {
|
|
704
704
|
// Nothing was scaffolded (the app root is inside another repository, or
|
|
@@ -707,7 +707,7 @@ async function composeRepoPushStep({ sdk, workDir, projectId, createdRepository,
|
|
|
707
707
|
return out;
|
|
708
708
|
}
|
|
709
709
|
if (!orgId) {
|
|
710
|
-
out.first_push_error = { code: "
|
|
710
|
+
out.first_push_error = { code: "VAULT_ORG_UNRESOLVED", message: `could not resolve the owning org for ${projectId} — the first push was skipped` };
|
|
711
711
|
return out;
|
|
712
712
|
}
|
|
713
713
|
// Read BEFORE the push decision: an unborn HEAD is what decides the lane.
|
|
@@ -717,7 +717,7 @@ async function composeRepoPushStep({ sdk, workDir, projectId, createdRepository,
|
|
|
717
717
|
// a repository the agent `git init`ed itself and never committed to (an
|
|
718
718
|
// UNBORN HEAD): there is no clean tree to keep, only untracked files, and
|
|
719
719
|
// the strict lane would refuse SNAPSHOT_DIRTY_TREE on every first push.
|
|
720
|
-
const freshRepository = createdRepository || scaffold.
|
|
720
|
+
const freshRepository = createdRepository || scaffold.vault?.created_repository === true || out.local_git.unborn === true;
|
|
721
721
|
try {
|
|
722
722
|
let vaultCreated = null;
|
|
723
723
|
// A fresh repository has, by definition, nothing committed yet — every
|
|
@@ -726,7 +726,7 @@ async function composeRepoPushStep({ sdk, workDir, projectId, createdRepository,
|
|
|
726
726
|
// first commit the dirty-tree lane produces (disclosed under
|
|
727
727
|
// first_push.snapshot); a repository WITH commits keeps the clean-tree
|
|
728
728
|
// rule and its refusal is reported, never overridden.
|
|
729
|
-
const pushed = await sdk.
|
|
729
|
+
const pushed = await sdk.repos.capture({
|
|
730
730
|
project_id: projectId,
|
|
731
731
|
org_id: orgId,
|
|
732
732
|
repo_dir: workDir,
|
|
@@ -736,14 +736,14 @@ async function composeRepoPushStep({ sdk, workDir, projectId, createdRepository,
|
|
|
736
736
|
out.first_push = {
|
|
737
737
|
generation: pushed.generation,
|
|
738
738
|
form: pushed.form,
|
|
739
|
-
|
|
739
|
+
vault_commit: pushed.vault_commit,
|
|
740
740
|
vault_created: vaultCreated,
|
|
741
741
|
snapshot: pushed.snapshot ? { id: pushed.snapshot.oid, kind: pushed.snapshot.kind, backup_status: "succeeded" } : null,
|
|
742
742
|
note: "Vault backup does not create a local branch commit or stage files. Local HEAD and dirty state are independent.",
|
|
743
743
|
...(freshRepository ? { captured_dirty: true, modified_captured: pushed.snapshot?.modified_captured ?? null, untracked_captured: pushed.snapshot?.untracked_captured ?? null } : {}),
|
|
744
744
|
};
|
|
745
745
|
} catch (err) {
|
|
746
|
-
out.first_push_error = { code: err?.body?.code ?? err?.code ?? "
|
|
746
|
+
out.first_push_error = { code: err?.body?.code ?? err?.code ?? "VAULT_PUSH_FAILED", message: err?.message ?? String(err) };
|
|
747
747
|
Object.assign(out, repoNextActionsOf(err));
|
|
748
748
|
}
|
|
749
749
|
return out;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* marketing surface (openspec/changes/
|
|
2
|
+
* vault-capabilities.mjs — the capability ledger for the KyGit
|
|
3
|
+
* marketing surface (openspec/changes/kygit-page-truth-gate, design D1).
|
|
4
4
|
*
|
|
5
5
|
* THIS FILE IS MARKETING-CLAIM GROUND TRUTH. run402-private's page-truth
|
|
6
|
-
* gate (`scripts/check-
|
|
6
|
+
* gate (`scripts/check-kygit-page-truth.mjs`) resolves the PUBLISHED
|
|
7
7
|
* `run402` package, reads these flags out of the generated
|
|
8
|
-
* `cli/
|
|
8
|
+
* `cli/vault-surface.json`, and fails the KyGit product page's build
|
|
9
9
|
* when a claim marker contradicts what is asserted here. It lives NEXT TO
|
|
10
10
|
* `command-manifest.mjs` so the change that flips a capability (ships a
|
|
11
11
|
* feature, retires a spelling) is the SAME change that flips the fact this
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
* behavior and this file in the same change, never one without the other.
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
export const
|
|
16
|
+
export const VAULT_CAPABILITIES = {
|
|
17
17
|
// `repos access repair` / `repos access revoke-key` /
|
|
18
18
|
// `repos access declare-exposure` (rev 42, D193-D203) drive a real epoch
|
|
19
19
|
// rotation against the gateway — revocation is a live, shipped feature.
|
|
20
20
|
revocation_live: true,
|
|
21
|
-
// `
|
|
21
|
+
// `Repos#reconcileEnvelopeRecipients` (vault-human-envelopes task
|
|
22
22
|
// 4.1's ADD-path workaround) runs automatically after every successful
|
|
23
23
|
// `push()`/`deploy()` and wraps the vault's current epoch key to every org
|
|
24
24
|
// member who has published an encryption key but has no `key_envelope` on
|
|
@@ -34,7 +34,7 @@ export const GITVAULT_CAPABILITIES = {
|
|
|
34
34
|
// fail-closed before allocation; chain-copy dual-write; attested finalize
|
|
35
35
|
// with `storage_verification: "client_attested"`; degraded reads from the
|
|
36
36
|
// destination; fsck absence check) — shipped end to end in the same
|
|
37
|
-
// change that flips this flag (
|
|
37
|
+
// change that flips this flag (vault-byo-primary-bucket, Phase 3).
|
|
38
38
|
byo_live: true,
|
|
39
39
|
// `repos recover` materializes a git repository from a mirror source,
|
|
40
40
|
// offline, with no server call.
|
|
@@ -42,15 +42,15 @@ export const GITVAULT_CAPABILITIES = {
|
|
|
42
42
|
// `repos create` allocates the vault IMMEDIATELY — the moment the repo
|
|
43
43
|
// starts existing — not lazily deferred to first push.
|
|
44
44
|
allocation: "create_immediate",
|
|
45
|
-
// `repos
|
|
45
|
+
// `repos capture` refuses to capture a dirty working tree
|
|
46
46
|
// (`SNAPSHOT_DIRTY_TREE`) by default; `--allow-dirty` opts in explicitly.
|
|
47
|
-
|
|
47
|
+
capture_dirty_default: "refuse",
|
|
48
48
|
// kygit-handoff (design D10): `repos handoff` / `repos resume` mint and
|
|
49
49
|
// claim a real single-use bearer key against a live gateway route —
|
|
50
50
|
// shipped, not aspirational.
|
|
51
51
|
handoff_live: true,
|
|
52
52
|
// `repos handoff` captures dirty work by DEFAULT (the opposite default
|
|
53
|
-
// from `
|
|
53
|
+
// from `capture_dirty_default` above) — two verbs, two defaults, one
|
|
54
54
|
// capture path (design D1).
|
|
55
55
|
handoff_dirty_default: "capture",
|
|
56
56
|
// kygit-invite (design D10): `repos invite` / `repos join` mint and claim
|
|
@@ -59,8 +59,4 @@ export const GITVAULT_CAPABILITIES = {
|
|
|
59
59
|
// while the inviter keeps working.
|
|
60
60
|
invite_live: true,
|
|
61
61
|
join_live: true,
|
|
62
|
-
// Both remote door spellings resolve identically (design D8):
|
|
63
|
-
// `run402::` (canonical, plumbing) and `kygit::` (rendered by
|
|
64
|
-
// `@kychee/kygit` once it sets `RUN402_REMOTE_SCHEME=kygit`).
|
|
65
|
-
remote_schemes: ["run402", "kygit"],
|
|
66
62
|
};
|