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/command-manifest.mjs
CHANGED
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
* positionals canonical positional ATTRIBUTES (post-conventions).
|
|
14
14
|
* A variadic list of the SAME kind counts as one.
|
|
15
15
|
* projectScoped command operates on a project and accepts
|
|
16
|
-
* `--project <
|
|
16
|
+
* `--project <project_id>` (precedence: --project > legacy
|
|
17
17
|
* leading prj_ positional > active project)
|
|
18
18
|
* orgScoped command acts ON an organization and resolves it
|
|
19
19
|
* through the ONE shared chain (cli-org-context):
|
|
20
20
|
* an optional leading <org_id> positional, else
|
|
21
21
|
* --org, else RUN402_ORG, else the .run402.json
|
|
22
|
-
* binding, else `
|
|
22
|
+
* binding, else `orgs use`. The gate drives every
|
|
23
23
|
* such entry through --org AND RUN402_ORG with no
|
|
24
24
|
* positional and fails on any "Missing <org_id>".
|
|
25
25
|
* Any entry with an `org_id` positional MUST be
|
|
@@ -151,7 +151,6 @@ export const COMMAND_MANIFEST = [
|
|
|
151
151
|
{ path: ["projects", "delete"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [] },
|
|
152
152
|
{ path: ["projects", "promote-user"], positionals: [p("email")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["user@example.com"] },
|
|
153
153
|
{ path: ["projects", "demote-user"], positionals: [p("email")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["user@example.com"] },
|
|
154
|
-
{ path: ["projects", "export"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [] },
|
|
155
154
|
|
|
156
155
|
// ── snapshots ────────────────────────────────────────────────────────────
|
|
157
156
|
{ path: ["snapshots", "create"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [] },
|
|
@@ -171,13 +170,13 @@ export const COMMAND_MANIFEST = [
|
|
|
171
170
|
{ path: ["admin", "archive"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["--reason", "gate"] },
|
|
172
171
|
{ path: ["admin", "reactivate"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [] },
|
|
173
172
|
|
|
174
|
-
// ──
|
|
175
|
-
{ path: ["
|
|
176
|
-
{ path: ["
|
|
177
|
-
{ path: ["
|
|
173
|
+
// ── archives ─────────────────────────────────────────────────────────────
|
|
174
|
+
{ path: ["archives", "create"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [] },
|
|
175
|
+
{ path: ["archives", "download"], positionals: [p("archive_id")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["arc_gate1", "--output", "__OUT_FILE__"] },
|
|
176
|
+
{ path: ["archives", "status"], positionals: [p("archive_id")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["arc_gate1"] },
|
|
178
177
|
{ path: ["archives", "inspect"], positionals: [p("archive_path")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["__FIXTURE_FILE__"] },
|
|
179
178
|
{ path: ["archives", "verify"], positionals: [p("archive_path")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["__FIXTURE_FILE__"] },
|
|
180
|
-
{ path: ["
|
|
179
|
+
{ path: ["archives", "import"], positionals: [p("archive_path")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["__FIXTURE_FILE__", "--name", "gate-import"] },
|
|
181
180
|
|
|
182
181
|
// ── deploy (unified deploy v2) ───────────────────────────────────────────
|
|
183
182
|
// Bare `run402 deploy` IS the deploy (a verb); the family's subcommands
|
|
@@ -209,31 +208,30 @@ export const COMMAND_MANIFEST = [
|
|
|
209
208
|
{ path: ["transfer", "accept"], positionals: [p("transfer_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["tr_gate1"] },
|
|
210
209
|
{ path: ["transfer", "cancel"], positionals: [p("transfer_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["tr_gate1"] },
|
|
211
210
|
|
|
212
|
-
// ──
|
|
213
|
-
{ path: ["
|
|
214
|
-
{ path: ["
|
|
215
|
-
{ path: ["
|
|
216
|
-
{ path: ["
|
|
217
|
-
{ path: ["
|
|
211
|
+
// ── orgs ──────────────────────────────────────────────────────────────────
|
|
212
|
+
{ path: ["orgs", "create"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
213
|
+
{ path: ["orgs", "list"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
214
|
+
{ path: ["orgs", "get"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG] },
|
|
215
|
+
{ path: ["orgs", "rename"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "--name", "Gate"] },
|
|
216
|
+
{ path: ["orgs", "payout-wallet"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "0x1111111111111111111111111111111111111111"] },
|
|
218
217
|
// `--org` (not a positional org_id
|
|
219
218
|
// like rename/payout-wallet above) goes through resolveOrg's SHAPE
|
|
220
219
|
// validation (a real UUID) — "org_gate1" fails that locally, so this needs
|
|
221
|
-
// the same UUID-shaped fixture `
|
|
222
|
-
{ path: ["
|
|
223
|
-
{ path: ["
|
|
224
|
-
{ path: ["
|
|
225
|
-
{ path: ["
|
|
226
|
-
{ path: ["
|
|
227
|
-
{ path: ["
|
|
228
|
-
{ path: ["
|
|
229
|
-
{ path: ["
|
|
230
|
-
{ path: ["
|
|
231
|
-
{ path: ["
|
|
232
|
-
{ path: ["
|
|
233
|
-
{ path: ["
|
|
234
|
-
{ path: ["
|
|
235
|
-
{ path: ["
|
|
236
|
-
{ path: ["org", "invite", "rm"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "--principal", "prn_gate1"] },
|
|
220
|
+
// the same UUID-shaped fixture `orgs use` below already established.
|
|
221
|
+
{ path: ["orgs", "slug"], positionals: [p("slug")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["acme", "--org", "11111111-2222-3333-4444-555555555555"] },
|
|
222
|
+
{ path: ["orgs", "audit"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG] },
|
|
223
|
+
{ path: ["orgs", "use"], positionals: [p("org_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["11111111-2222-3333-4444-555555555555"] },
|
|
224
|
+
{ path: ["orgs", "current"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
225
|
+
{ path: ["orgs", "clear"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
226
|
+
{ path: ["orgs", "bind"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["--org", "11111111-2222-3333-4444-555555555555"] },
|
|
227
|
+
{ path: ["orgs", "unbind"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
228
|
+
{ path: ["orgs", "members", "list"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG] },
|
|
229
|
+
{ path: ["orgs", "members", "add"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "0x1111111111111111111111111111111111111111"] },
|
|
230
|
+
{ path: ["orgs", "members", "role"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "--principal", "prn_gate1", "--role", "viewer"] },
|
|
231
|
+
{ path: ["orgs", "members", "rm"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "--principal", "prn_gate1"] },
|
|
232
|
+
{ path: ["orgs", "invite", "list"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG] },
|
|
233
|
+
{ path: ["orgs", "invite", "create"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "--email", "gate@example.com"] },
|
|
234
|
+
{ path: ["orgs", "invite", "rm"], positionals: [p("org_id", { required: false })], projectScoped: false, orgScoped: true, legacyPositionalProject: false, minimalArgs: [GATE_ORG, "--principal", "prn_gate1"] },
|
|
237
235
|
|
|
238
236
|
// ── grants ───────────────────────────────────────────────────────────────
|
|
239
237
|
{ path: ["grants", "create"], positionals: [p("wallet")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["0x1111111111111111111111111111111111111111", "--capability", "deploy"] },
|
|
@@ -245,8 +243,8 @@ export const COMMAND_MANIFEST = [
|
|
|
245
243
|
{ path: ["delegates", "revoke"], legacyPositionalProject: false, positionals: [p("delegate_id")], projectScoped: true, minimalArgs: ["dlg_gate1"] },
|
|
246
244
|
{ path: ["delegates", "rotate"], legacyPositionalProject: false, positionals: [p("delegate_id")], projectScoped: true, minimalArgs: ["dlg_gate1"] },
|
|
247
245
|
|
|
248
|
-
// ── events /
|
|
249
|
-
{ path: ["events"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "
|
|
246
|
+
// ── events / live ────────────────────────────────────────────────────────
|
|
247
|
+
{ path: ["events", "list"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub" },
|
|
250
248
|
{ path: ["live"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["--tables", "cells", "--once"], runStyle: "merged" },
|
|
251
249
|
{ path: ["deliveries", "list"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub" },
|
|
252
250
|
{ path: ["deliveries", "get"], positionals: [p("notification_id")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["n_1"], runStyle: "sub" },
|
|
@@ -283,12 +281,6 @@ export const COMMAND_MANIFEST = [
|
|
|
283
281
|
{ path: ["claims", "list"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub" },
|
|
284
282
|
{ path: ["claims", "release"], positionals: [p("claim_id")], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["clm_1"], runStyle: "sub" },
|
|
285
283
|
|
|
286
|
-
// ── gitvault — no manifest entries ──────────────────────
|
|
287
|
-
// `cli/lib/gitvault.mjs`'s dispatcher handles every `gitvault <verb>` and
|
|
288
|
-
// answers a structural COMMAND_MOVED (or, for `push`/`reconcile`,
|
|
289
|
-
// COMMAND_REMOVED) redirect that dispatches nothing — see
|
|
290
|
-
// RESERVED_SUBCOMMANDS below, and "gitvault" in SKIPPED_FAMILIES.
|
|
291
|
-
|
|
292
284
|
// ── repos (the consolidated 15-verb family) ─
|
|
293
285
|
// Every verb needs a real principal keystore and, for most, an allocated
|
|
294
286
|
// repo and a local git working tree, so the gate runs structural checks
|
|
@@ -301,7 +293,7 @@ export const COMMAND_MANIFEST = [
|
|
|
301
293
|
// name, with `--repo`/`--project` addressing.
|
|
302
294
|
{ path: ["repos", "rename"], positionals: [p("new_name")], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["my-notes"], runStyle: "sub", skipBehavioral: "claims a per-org-unique repo name against a live project" },
|
|
303
295
|
{ path: ["repos", "delete"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [], runStyle: "sub", skipBehavioral: "irreversibly deletes a project after reading its live non-repo-resource state and vault generation count" },
|
|
304
|
-
{ path: ["repos", "
|
|
296
|
+
{ path: ["repos", "capture"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub", skipBehavioral: "captures the cwd git working tree and publishes a signed head" },
|
|
305
297
|
// kygit-handoff: `handoff` captures a stash-shaped checkpoint and mints a
|
|
306
298
|
// single-use bearer key through a live gateway call; `resume` claims one
|
|
307
299
|
// (a real membership mutation) and writes into a fresh working tree.
|
|
@@ -322,12 +314,13 @@ export const COMMAND_MANIFEST = [
|
|
|
322
314
|
{ path: ["repos", "access", "repair"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["--recipient-state-version", "0", "--recipient-revocation-version", "0"], runStyle: "sub", skipBehavioral: "owner+step-up-gated epoch rotation (D193-D203, rev 42) — samples a fresh epoch key and re-seals a live vault's recipients" },
|
|
323
315
|
{ path: ["repos", "access", "revoke-key"], positionals: [p("principal_id")], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["prin_00000000000000000000000000000000"], runStyle: "sub", skipBehavioral: "owner+step-up-gated: declares a recipient's key revoked (org-scoped watermark) and drives a real epoch rotation off it" },
|
|
324
316
|
{ path: ["repos", "access", "declare-exposure"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub", skipBehavioral: "owner+step-up-gated: declares this vault's epoch secret exposed, forcing every subsequent ordinary push to refuse until a rotation lands" },
|
|
325
|
-
{ path: ["repos", "access", "sync"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub", skipBehavioral: "
|
|
317
|
+
{ path: ["repos", "access", "sync"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub", skipBehavioral: "vault-multi-writer (rev 47): on-demand writer-admission reconcile — resolves pending candidates' signing keys via the live org encryption-key directory and publishes a real add_writer_key head per candidate" },
|
|
326
318
|
{ path: ["repos", "recover"], positionals: [p("source")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["s3://example-mirror-bucket", "--out", "__SCRATCH_DIR__/recover-out"], runStyle: "sub", skipBehavioral: "materializes a git repository from a mirror source, offline, with no server call" },
|
|
327
319
|
// Principal-scoped (one bundle covers every vault you can read), so no
|
|
328
320
|
// --project — deliberately unlike its eleven vault-scoped siblings.
|
|
329
321
|
{ path: ["repos", "recovery-bundle"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["--out", "-"], runStyle: "sub", skipBehavioral: "exports the caller's live member recovery bundle (stamps recovery-posture export evidence server-side)" },
|
|
330
|
-
{ path: ["errors"
|
|
322
|
+
{ path: ["errors", "list"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub" },
|
|
323
|
+
{ path: ["errors", "get"], positionals: [p("fingerprint_id")], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["fp_gate1"], runStyle: "sub" },
|
|
331
324
|
|
|
332
325
|
// ── jobs ─────────────────────────────────────────────────────────────────
|
|
333
326
|
{ path: ["jobs", "submit"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["--file", "__FIXTURE_FILE__"] },
|
|
@@ -478,14 +471,14 @@ export const COMMAND_MANIFEST = [
|
|
|
478
471
|
{ path: ["service", "health"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
479
472
|
{ path: ["cache", "inspect"], positionals: [p("url")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["https://example.com/"] },
|
|
480
473
|
{ path: ["cache", "invalidate"], positionals: [p("url", { required: false })], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["--all", "--host", "example.com"] },
|
|
481
|
-
// projectScoped: --project targets the
|
|
474
|
+
// projectScoped: --project targets the vault
|
|
482
475
|
// check only (see doctor.mjs's own HELP) — every other check stays
|
|
483
476
|
// wallet/machine-wide, but the gate's contract is "accepts --project
|
|
484
477
|
// without rejecting it," which this satisfies.
|
|
485
478
|
{ path: ["doctor"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["--no-scan"], runStyle: "merged" },
|
|
486
479
|
{ path: ["webhook-secret", "rotate"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
487
|
-
// `run402 logs [<function>] --request-id <
|
|
488
|
-
// the function name (`run402 errors` samples print it that way); it is
|
|
480
|
+
// `run402 logs [<function>] --request-id <request_id>`: the optional positional is
|
|
481
|
+
// the function name (`run402 errors list` samples print it that way); it is
|
|
489
482
|
// never a project id.
|
|
490
483
|
{ path: ["logs"], positionals: [p("function", { required: false })], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["--request-id", "req_gate123"], runStyle: "merged" },
|
|
491
484
|
];
|
|
@@ -502,20 +495,6 @@ export const SKIPPED_FAMILIES = {
|
|
|
502
495
|
// Split into `deliveries` / `contacts` / `subscriptions`; every subcommand
|
|
503
496
|
// answers COMMAND_REMOVED naming its successor.
|
|
504
497
|
"notifications": "reserved group; split by legible-cli-surface",
|
|
505
|
-
// The gitvault dispatcher answers COMMAND_MOVED/COMMAND_REMOVED for every
|
|
506
|
-
// `gitvault <verb>` (see RESERVED_SUBCOMMANDS below for the per-verb list)
|
|
507
|
-
// — the family stays dispatched in cli.mjs (so the redirect fires instead
|
|
508
|
-
// of UNKNOWN_COMMAND) but has zero manifest entries, since a redirect
|
|
509
|
-
// dispatches nothing.
|
|
510
|
-
"gitvault": "retired; every subcommand answers COMMAND_MOVED/COMMAND_REMOVED naming its `repos`/git successor",
|
|
511
|
-
// Shipped in exactly one release (v4.54.0, live for hours) before the
|
|
512
|
-
// one-noun review caught it: a gateway route namespace is not a CLI noun.
|
|
513
|
-
// Both verbs answer COMMAND_MOVED into the repos family for one release,
|
|
514
|
-
// then the spelling is reserved and answers nothing.
|
|
515
|
-
"source-access": "retired same-day; `export` -> `repos recovery-bundle`, `status` -> `repos access` (member_custody block)",
|
|
516
|
-
// `repo` singular resolves identically to `repos` — same
|
|
517
|
-
// module, same case block in cli.mjs, so it needs no manifest of its own.
|
|
518
|
-
"repo": "alias for `repos`, resolves identically (design D1)",
|
|
519
498
|
};
|
|
520
499
|
|
|
521
500
|
/**
|
|
@@ -531,23 +510,5 @@ export const SKIPPED_FAMILIES = {
|
|
|
531
510
|
* which the family list cannot express.
|
|
532
511
|
*/
|
|
533
512
|
export const RESERVED_SUBCOMMANDS = {
|
|
534
|
-
"source-access:export": "moved to `repos recovery-bundle` — the artifact `repos recover --bundle` consumes belongs to the repos family",
|
|
535
|
-
"source-access:status": "moved to `repos access` — your own wrapper custody rides its member_custody block; the org advisory is `doctor --only recovery_posture`",
|
|
536
513
|
"escalations:contacts": "merged into `contacts` — the ladder and Telegram channels are one question",
|
|
537
|
-
// Every `gitvault <verb>` spelling. Nine
|
|
538
|
-
// answer COMMAND_MOVED naming their `repos` successor; `push` and
|
|
539
|
-
// `reconcile` answer COMMAND_REMOVED (no equivalent successor for either —
|
|
540
|
-
// `push`'s one-release alias window is over, `reconcile` was a workaround
|
|
541
|
-
// with no permanent replacement, only a read at `repos access`).
|
|
542
|
-
"gitvault:init": "moved to `repos create --project <id>`",
|
|
543
|
-
"gitvault:status": "moved to `repos view`",
|
|
544
|
-
"gitvault:snapshot": "moved to `repos snapshot`",
|
|
545
|
-
"gitvault:policy": "moved to `repos policy`",
|
|
546
|
-
"gitvault:compact": "moved to `repos gc`",
|
|
547
|
-
"gitvault:prune": "moved to `repos gc`",
|
|
548
|
-
"gitvault:verify": "moved to `repos fsck`",
|
|
549
|
-
"gitvault:mirror": "moved to `repos mirror`",
|
|
550
|
-
"gitvault:recover": "moved to `repos recover`",
|
|
551
|
-
"gitvault:push": "removed — its one-release deprecation-alias window is over; `git push` / `repos snapshot`",
|
|
552
|
-
"gitvault:reconcile": "removed — a workaround with no permanent successor; read `repos access` instead",
|
|
553
514
|
};
|
package/lib/config.mjs
CHANGED
|
@@ -101,11 +101,11 @@ export function findProject(id) {
|
|
|
101
101
|
fail({
|
|
102
102
|
code: "PROJECT_CREDENTIAL_NOT_FOUND",
|
|
103
103
|
message: `No local project credentials cached for ${idStr}.`,
|
|
104
|
-
hint: "Use a principal-auth command, or import project keys with `run402 credentials project-keys import --project <
|
|
104
|
+
hint: "Use a principal-auth command, or import project keys with `run402 credentials project-keys import --project <project_id> --service-key-stdin`.",
|
|
105
105
|
details: { project_id: idStr, source: "local_cache", cache_path: projectCredentialsFile(), wallet: activeProfile(), profile: activeProfile() },
|
|
106
106
|
next_actions: [{
|
|
107
107
|
type: "run_command",
|
|
108
|
-
command: `run402 credentials project-keys status --project ${idStr || "<
|
|
108
|
+
command: `run402 credentials project-keys status --project ${idStr || "<project_id>"}`,
|
|
109
109
|
why: "Inspect the local project-key cache without revealing secrets.",
|
|
110
110
|
}],
|
|
111
111
|
});
|
|
@@ -119,7 +119,7 @@ export function resolveProject(id) {
|
|
|
119
119
|
fail({
|
|
120
120
|
code: "PROJECT_REQUIRED",
|
|
121
121
|
message: "no project specified and no active project set.",
|
|
122
|
-
hint: "Pass --project <
|
|
122
|
+
hint: "Pass --project <project_id>, set RUN402_PROJECT_ID, or run: run402 projects use <project_id>",
|
|
123
123
|
next_actions: [selectProjectAction()],
|
|
124
124
|
});
|
|
125
125
|
}
|
|
@@ -132,7 +132,7 @@ export function resolveProjectId(id) {
|
|
|
132
132
|
fail({
|
|
133
133
|
code: "PROJECT_REQUIRED",
|
|
134
134
|
message: "no project specified and no active project set.",
|
|
135
|
-
hint: "Pass --project <
|
|
135
|
+
hint: "Pass --project <project_id>, set RUN402_PROJECT_ID, or run: run402 projects use <project_id>",
|
|
136
136
|
next_actions: [selectProjectAction()],
|
|
137
137
|
});
|
|
138
138
|
}
|
package/lib/contacts.mjs
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* "how can this human be reached" — not the mechanisms, which really are
|
|
13
13
|
* different and are not pretended otherwise.
|
|
14
14
|
*
|
|
15
|
-
* `rm <
|
|
15
|
+
* `rm <contact_id>` takes a bare id and works out which backend owns it, because both
|
|
16
16
|
* are UUIDs and a caller holding one from `contacts list` should not have to
|
|
17
17
|
* know which subsystem minted it. That costs one extra read and removes a
|
|
18
18
|
* `--kind` flag nobody could answer without looking it up.
|
|
@@ -44,7 +44,7 @@ Usage:
|
|
|
44
44
|
run402 contacts list
|
|
45
45
|
run402 contacts add <email> [--level <1-10>] [--name <display>]
|
|
46
46
|
run402 contacts connect telegram [--label <name>]
|
|
47
|
-
run402 contacts rm <
|
|
47
|
+
run402 contacts rm <contact_id>
|
|
48
48
|
run402 contacts preferences
|
|
49
49
|
run402 contacts preferences set <key>=<value> [<key>=<value> ...]
|
|
50
50
|
run402 contacts test [--source app|platform] [--type <event_type>]
|
|
@@ -339,7 +339,7 @@ async function removeContact(args) {
|
|
|
339
339
|
assertKnownFlags(a, ["--org", "--help", "-h"], ["--org"]);
|
|
340
340
|
const positionals = positionalArgs(a, ["--org"]);
|
|
341
341
|
requirePositionalCount(positionals, ["--org"], {
|
|
342
|
-
min: 1, max: 1, command: "run402 contacts rm", missing: "<
|
|
342
|
+
min: 1, max: 1, command: "run402 contacts rm", missing: "<contact_id>",
|
|
343
343
|
});
|
|
344
344
|
const id = positionals[0];
|
|
345
345
|
const sdk = getSdk();
|
package/lib/contracts.mjs
CHANGED
|
@@ -53,7 +53,7 @@ const SUB_HELP = {
|
|
|
53
53
|
"provision-signer": `run402 contracts provision-signer — Provision a KMS-backed signer
|
|
54
54
|
|
|
55
55
|
Usage:
|
|
56
|
-
run402 contracts provision-signer --chain <chain> [--project <
|
|
56
|
+
run402 contracts provision-signer --chain <chain> [--project <project_id>] [options]
|
|
57
57
|
|
|
58
58
|
Legacy (still supported):
|
|
59
59
|
run402 contracts provision-signer <project_id> --chain <chain> [options]
|
|
@@ -69,7 +69,7 @@ Options:
|
|
|
69
69
|
"set-recovery": `run402 contracts set-recovery — Set or clear the signer recovery address
|
|
70
70
|
|
|
71
71
|
Usage:
|
|
72
|
-
run402 contracts set-recovery <signer_id> [--project <
|
|
72
|
+
run402 contracts set-recovery <signer_id> [--project <project_id>] [options]
|
|
73
73
|
|
|
74
74
|
Legacy (still supported):
|
|
75
75
|
run402 contracts set-recovery <project_id> <signer_id> [options]
|
|
@@ -77,7 +77,7 @@ Legacy (still supported):
|
|
|
77
77
|
"set-alert": `run402 contracts set-alert — Set the low-balance alert threshold
|
|
78
78
|
|
|
79
79
|
Usage:
|
|
80
|
-
run402 contracts set-alert <signer_id> --threshold-wei <n> [--project <
|
|
80
|
+
run402 contracts set-alert <signer_id> --threshold-wei <n> [--project <project_id>]
|
|
81
81
|
|
|
82
82
|
Legacy (still supported):
|
|
83
83
|
run402 contracts set-alert <project_id> <signer_id> --threshold-wei <n>
|
|
@@ -85,7 +85,7 @@ Legacy (still supported):
|
|
|
85
85
|
call: `run402 contracts call — Submit a contract write call
|
|
86
86
|
|
|
87
87
|
Usage:
|
|
88
|
-
run402 contracts call <signer_id> --to 0x... --abi <json> [--project <
|
|
88
|
+
run402 contracts call <signer_id> --to 0x... --abi <json> [--project <project_id>]
|
|
89
89
|
|
|
90
90
|
Legacy (still supported):
|
|
91
91
|
run402 contracts call <project_id> <signer_id> --to 0x... --abi <json>
|
|
@@ -98,7 +98,7 @@ Returns the deterministic CREATE address synchronously — known from (signer, n
|
|
|
98
98
|
before the tx confirms. Cost: chain gas at-cost + $0.000005 KMS sign fee.
|
|
99
99
|
|
|
100
100
|
Usage:
|
|
101
|
-
run402 contracts deploy <signer_id> --bytecode 0x... [--project <
|
|
101
|
+
run402 contracts deploy <signer_id> --bytecode 0x... [--project <project_id>] [options]
|
|
102
102
|
|
|
103
103
|
Legacy (still supported):
|
|
104
104
|
run402 contracts deploy <project_id> <signer_id> --bytecode 0x... [options]
|
|
@@ -125,7 +125,7 @@ Usage:
|
|
|
125
125
|
drain: `run402 contracts drain — Drain native balance to a destination address
|
|
126
126
|
|
|
127
127
|
Usage:
|
|
128
|
-
run402 contracts drain <signer_id> --to 0x... --confirm [--project <
|
|
128
|
+
run402 contracts drain <signer_id> --to 0x... --confirm [--project <project_id>]
|
|
129
129
|
|
|
130
130
|
Legacy (still supported):
|
|
131
131
|
run402 contracts drain <project_id> <signer_id> --to 0x... --confirm
|
|
@@ -133,7 +133,7 @@ Legacy (still supported):
|
|
|
133
133
|
delete: `run402 contracts delete — Schedule the KMS key for deletion
|
|
134
134
|
|
|
135
135
|
Usage:
|
|
136
|
-
run402 contracts delete <signer_id> --confirm [--project <
|
|
136
|
+
run402 contracts delete <signer_id> --confirm [--project <project_id>]
|
|
137
137
|
|
|
138
138
|
Legacy (still supported):
|
|
139
139
|
run402 contracts delete <project_id> <signer_id> --confirm
|
|
@@ -141,7 +141,7 @@ Legacy (still supported):
|
|
|
141
141
|
"get-signer": `run402 contracts get-signer — Get signer metadata + live balance
|
|
142
142
|
|
|
143
143
|
Usage:
|
|
144
|
-
run402 contracts get-signer <signer_id> [--project <
|
|
144
|
+
run402 contracts get-signer <signer_id> [--project <project_id>]
|
|
145
145
|
|
|
146
146
|
Legacy (still supported):
|
|
147
147
|
run402 contracts get-signer <project_id> <signer_id>
|
|
@@ -156,7 +156,7 @@ Examples:
|
|
|
156
156
|
"list-signers": `run402 contracts list-signers — List all KMS signers for a project
|
|
157
157
|
|
|
158
158
|
Usage:
|
|
159
|
-
run402 contracts list-signers [--project <
|
|
159
|
+
run402 contracts list-signers [--project <project_id>]
|
|
160
160
|
|
|
161
161
|
Legacy (still supported):
|
|
162
162
|
run402 contracts list-signers <project_id>
|
|
@@ -173,7 +173,7 @@ Examples:
|
|
|
173
173
|
status: `run402 contracts status — Get a contract call's status and receipt
|
|
174
174
|
|
|
175
175
|
Usage:
|
|
176
|
-
run402 contracts status <call_id> [--project <
|
|
176
|
+
run402 contracts status <call_id> [--project <project_id>]
|
|
177
177
|
|
|
178
178
|
Legacy (still supported):
|
|
179
179
|
run402 contracts status <project_id> <call_id>
|
|
@@ -502,7 +502,7 @@ async function deleteSigner(projectId, signerId, args) {
|
|
|
502
502
|
export async function run(sub, args) {
|
|
503
503
|
if (!sub || sub === "--help" || sub === "-h") { console.log(HELP); process.exit(0); }
|
|
504
504
|
if (Array.isArray(args) && (args.includes("--help") || args.includes("-h"))) { console.log(SUB_HELP[sub] || HELP); process.exit(0); }
|
|
505
|
-
// Project selection (CLI-wide convention): `--project <
|
|
505
|
+
// Project selection (CLI-wide convention): `--project <project_id>` wins, else a
|
|
506
506
|
// legacy leading `prj_...` positional, else the active project. The signer /
|
|
507
507
|
// call id stays positional (`cwlt_...` / `ccall_...`). Computed lazily so
|
|
508
508
|
// unknown subcommands (and the anonymous `read`) never trip project
|
package/lib/credentials.mjs
CHANGED
|
@@ -26,18 +26,18 @@ Usage:
|
|
|
26
26
|
run402 credentials <subcommand> [args...]
|
|
27
27
|
|
|
28
28
|
Project credentials (on the gateway — named, revocable, rotatable):
|
|
29
|
-
issue --kind <anon|service> --name <name> [--project <
|
|
29
|
+
issue --kind <anon|service> --name <name> [--project <project_id>] [--expires <iso8601>] [--import]
|
|
30
30
|
Mint one. The secret is printed ONCE.
|
|
31
31
|
--import also writes it into this machine's
|
|
32
32
|
local key cache (the cold-restart re-key path).
|
|
33
|
-
list [--project <
|
|
33
|
+
list [--project <project_id>] [--include-revoked]
|
|
34
34
|
List credentials (metadata only, never secrets)
|
|
35
|
-
status [--project <
|
|
36
|
-
rotate <credential_id> [--project <
|
|
35
|
+
status [--project <project_id>] Are you still on the retiring legacy key?
|
|
36
|
+
rotate <credential_id> [--project <project_id>]
|
|
37
37
|
Replace in one step; new secret printed ONCE
|
|
38
|
-
revoke <credential_id> [--project <
|
|
38
|
+
revoke <credential_id> [--project <project_id>] [--reason <text>]
|
|
39
39
|
Revoke immediately, freeing the name
|
|
40
|
-
token [--project <
|
|
40
|
+
token [--project <project_id>] [--kind <anon|service>]
|
|
41
41
|
Mint a SHORT-LIVED token. Works with only a
|
|
42
42
|
delegate — the unattended recovery path.
|
|
43
43
|
|
|
@@ -68,12 +68,12 @@ Usage:
|
|
|
68
68
|
|
|
69
69
|
Subcommands:
|
|
70
70
|
list List cached project-key entries, redacted
|
|
71
|
-
status --project <
|
|
72
|
-
import --project <
|
|
73
|
-
import --project <
|
|
74
|
-
import --project <
|
|
75
|
-
export --project <
|
|
76
|
-
remove --project <
|
|
71
|
+
status --project <project_id> Show one cached entry, redacted
|
|
72
|
+
import --project <project_id> --service-key-stdin
|
|
73
|
+
import --project <project_id> --service-key-env <env>
|
|
74
|
+
import --project <project_id> --anon-key-env <env> Rotate only the anon key
|
|
75
|
+
export --project <project_id> --reveal Print cached keys, including secrets
|
|
76
|
+
remove --project <project_id> Remove one cached key entry
|
|
77
77
|
|
|
78
78
|
Notes:
|
|
79
79
|
- This is a LOCAL CACHE surface. It is not project inventory.
|
|
@@ -89,7 +89,7 @@ const SUB_HELP = {
|
|
|
89
89
|
issue: `run402 credentials issue — mint a named project credential
|
|
90
90
|
|
|
91
91
|
Usage:
|
|
92
|
-
run402 credentials issue --kind <anon|service> --name <name> [--project <
|
|
92
|
+
run402 credentials issue --kind <anon|service> --name <name> [--project <project_id>] [--import]
|
|
93
93
|
[--expires <iso8601>]
|
|
94
94
|
|
|
95
95
|
--kind "anon" is the tenant-facing key; "service" is the privileged one.
|
|
@@ -112,14 +112,14 @@ can NEVER do this; use 'run402 credentials token' instead.
|
|
|
112
112
|
list: `run402 credentials list — list a project's credentials
|
|
113
113
|
|
|
114
114
|
Usage:
|
|
115
|
-
run402 credentials list [--project <
|
|
115
|
+
run402 credentials list [--project <project_id>] [--include-revoked]
|
|
116
116
|
|
|
117
117
|
Metadata only — never a secret or a secret hash. Only project.read is needed.
|
|
118
118
|
`,
|
|
119
119
|
status: `run402 credentials status — are you still on the retiring legacy key?
|
|
120
120
|
|
|
121
121
|
Usage:
|
|
122
|
-
run402 credentials status [--project <
|
|
122
|
+
run402 credentials status [--project <project_id>]
|
|
123
123
|
|
|
124
124
|
Returns state "legacy" while the project still depends on the derived
|
|
125
125
|
anon/service keys, or "rotatable" once it holds credentials it can revoke
|
|
@@ -133,7 +133,7 @@ date the platform has not committed to.
|
|
|
133
133
|
rotate: `run402 credentials rotate — replace a credential in one step
|
|
134
134
|
|
|
135
135
|
Usage:
|
|
136
|
-
run402 credentials rotate <credential_id> [--project <
|
|
136
|
+
run402 credentials rotate <credential_id> [--project <project_id>]
|
|
137
137
|
|
|
138
138
|
Mints a replacement and revokes the old one in a single transaction, keeping
|
|
139
139
|
the name. The NEW secret is printed once.
|
|
@@ -146,7 +146,7 @@ compromised.
|
|
|
146
146
|
revoke: `run402 credentials revoke — revoke a credential immediately
|
|
147
147
|
|
|
148
148
|
Usage:
|
|
149
|
-
run402 credentials revoke <credential_id> [--project <
|
|
149
|
+
run402 credentials revoke <credential_id> [--project <project_id>] [--reason <text>]
|
|
150
150
|
|
|
151
151
|
Takes effect for every subsequent request and frees the name for reuse.
|
|
152
152
|
Requires owner membership plus step-up.
|
|
@@ -154,7 +154,7 @@ Requires owner membership plus step-up.
|
|
|
154
154
|
token: `run402 credentials token — mint a short-lived project token
|
|
155
155
|
|
|
156
156
|
Usage:
|
|
157
|
-
run402 credentials token [--project <
|
|
157
|
+
run402 credentials token [--project <project_id>] [--kind <anon|service>]
|
|
158
158
|
|
|
159
159
|
The cold-restart recovery path, and the ONE credential call an agent can make
|
|
160
160
|
with no human present: a delegate is accepted here. There is no step-up because
|
|
@@ -214,7 +214,7 @@ function requireProjectFlag(projectId, usage) {
|
|
|
214
214
|
if (!projectId) {
|
|
215
215
|
fail({
|
|
216
216
|
code: "BAD_USAGE",
|
|
217
|
-
message: "Missing --project <
|
|
217
|
+
message: "Missing --project <project_id>.",
|
|
218
218
|
hint: usage,
|
|
219
219
|
});
|
|
220
220
|
}
|
|
@@ -227,7 +227,7 @@ function requireCachedProject(projectId) {
|
|
|
227
227
|
fail({
|
|
228
228
|
code: "PROJECT_CREDENTIAL_NOT_FOUND",
|
|
229
229
|
message: `No local project credentials cached for ${projectId}.`,
|
|
230
|
-
hint: "Import keys with `run402 credentials project-keys import --project <
|
|
230
|
+
hint: "Import keys with `run402 credentials project-keys import --project <project_id> --service-key-stdin` if this operation truly requires local project credentials.",
|
|
231
231
|
details: { project_id: projectId, ...provenance() },
|
|
232
232
|
next_actions: [{
|
|
233
233
|
type: "run_command",
|
|
@@ -256,7 +256,7 @@ async function status(args) {
|
|
|
256
256
|
if (rest.length > 0) {
|
|
257
257
|
fail({ code: "BAD_USAGE", message: `Unexpected argument for project-keys status: ${rest[0]}` });
|
|
258
258
|
}
|
|
259
|
-
const id = requireProjectFlag(projectId, "run402 credentials project-keys status --project <
|
|
259
|
+
const id = requireProjectFlag(projectId, "run402 credentials project-keys status --project <project_id>");
|
|
260
260
|
console.log(JSON.stringify(redactedEntry(id, getProject(id)), null, 2));
|
|
261
261
|
}
|
|
262
262
|
|
|
@@ -311,7 +311,7 @@ async function importKey(args) {
|
|
|
311
311
|
if (rest.length > 0) {
|
|
312
312
|
fail({ code: "BAD_USAGE", message: `Unexpected argument for project-keys import: ${rest[0]}` });
|
|
313
313
|
}
|
|
314
|
-
const id = requireProjectFlag(projectId, "run402 credentials project-keys import --project <
|
|
314
|
+
const id = requireProjectFlag(projectId, "run402 credentials project-keys import --project <project_id> --service-key-stdin");
|
|
315
315
|
// Resolve --anon-key-env before requiring a service key, so a missing service
|
|
316
316
|
// key can report against the flags actually passed and an anon-only rotation
|
|
317
317
|
// can reuse the cached service key.
|
|
@@ -346,12 +346,12 @@ async function exportKey(args) {
|
|
|
346
346
|
if (rest.length > 0) {
|
|
347
347
|
fail({ code: "BAD_USAGE", message: `Unexpected argument for project-keys export: ${rest[0]}` });
|
|
348
348
|
}
|
|
349
|
-
const id = requireProjectFlag(projectId, "run402 credentials project-keys export --project <
|
|
349
|
+
const id = requireProjectFlag(projectId, "run402 credentials project-keys export --project <project_id> --reveal");
|
|
350
350
|
if (!parsed.includes("--reveal")) {
|
|
351
351
|
fail({
|
|
352
352
|
code: "REVEAL_REQUIRED",
|
|
353
353
|
message: "Exporting full project keys requires --reveal.",
|
|
354
|
-
hint: "Use `run402 credentials project-keys status --project <
|
|
354
|
+
hint: "Use `run402 credentials project-keys status --project <project_id>` for redacted output.",
|
|
355
355
|
details: { project_id: id, ...provenance() },
|
|
356
356
|
});
|
|
357
357
|
}
|
|
@@ -364,7 +364,7 @@ async function remove(args) {
|
|
|
364
364
|
if (rest.length > 0) {
|
|
365
365
|
fail({ code: "BAD_USAGE", message: `Unexpected argument for project-keys remove: ${rest[0]}` });
|
|
366
366
|
}
|
|
367
|
-
const id = requireProjectFlag(projectId, "run402 credentials project-keys remove --project <
|
|
367
|
+
const id = requireProjectFlag(projectId, "run402 credentials project-keys remove --project <project_id>");
|
|
368
368
|
const existed = Boolean(getProject(id));
|
|
369
369
|
removeProject(id, projectCredentialsFile());
|
|
370
370
|
console.log(JSON.stringify({ project_id: id, removed: existed, ...provenance() }, null, 2));
|
|
@@ -423,7 +423,7 @@ async function issue(args) {
|
|
|
423
423
|
requirePositionalCount(rest, ISSUE_VALUE_FLAGS, {
|
|
424
424
|
min: 0,
|
|
425
425
|
max: 0,
|
|
426
|
-
command: "run402 credentials issue --kind <anon|service> --name <name> [--project <
|
|
426
|
+
command: "run402 credentials issue --kind <anon|service> --name <name> [--project <project_id>] [--import]",
|
|
427
427
|
missing: "",
|
|
428
428
|
});
|
|
429
429
|
if (kind !== "anon" && kind !== "service") {
|
|
@@ -454,7 +454,7 @@ async function issue(args) {
|
|
|
454
454
|
try {
|
|
455
455
|
const res = await getSdk().credentials.issue(projectId, { kind, name, expiresAt: expiresAt || undefined });
|
|
456
456
|
if (importToCache && res?.secret) {
|
|
457
|
-
// The cold-restart re-key path (
|
|
457
|
+
// The cold-restart re-key path (vault-deploy-lane 6.5a): the minted
|
|
458
458
|
// secret goes straight into the local cache the deploy and data-plane
|
|
459
459
|
// commands read, so a fresh machine re-keys in one command per kind
|
|
460
460
|
// instead of the four-command issue-then-project-keys-import dance.
|
|
@@ -485,7 +485,7 @@ async function listCredentials(args) {
|
|
|
485
485
|
requirePositionalCount(rest, ["--project"], {
|
|
486
486
|
min: 0,
|
|
487
487
|
max: 0,
|
|
488
|
-
command: "run402 credentials list [--project <
|
|
488
|
+
command: "run402 credentials list [--project <project_id>]",
|
|
489
489
|
missing: "",
|
|
490
490
|
});
|
|
491
491
|
try {
|
|
@@ -503,7 +503,7 @@ async function credentialStatus(args) {
|
|
|
503
503
|
requirePositionalCount(rest, ["--project"], {
|
|
504
504
|
min: 0,
|
|
505
505
|
max: 0,
|
|
506
|
-
command: "run402 credentials status [--project <
|
|
506
|
+
command: "run402 credentials status [--project <project_id>]",
|
|
507
507
|
missing: "",
|
|
508
508
|
});
|
|
509
509
|
try {
|
|
@@ -527,7 +527,7 @@ async function rotate(args) {
|
|
|
527
527
|
const [credentialId] = requirePositionalCount(rest, ["--project"], {
|
|
528
528
|
min: 1,
|
|
529
529
|
max: 1,
|
|
530
|
-
command: "run402 credentials rotate <credential_id> [--project <
|
|
530
|
+
command: "run402 credentials rotate <credential_id> [--project <project_id>]",
|
|
531
531
|
missing: "Missing <credential_id>. Find it with: run402 credentials list",
|
|
532
532
|
});
|
|
533
533
|
try {
|
|
@@ -545,7 +545,7 @@ async function revoke(args) {
|
|
|
545
545
|
const [credentialId] = requirePositionalCount(rest, ["--project", "--reason"], {
|
|
546
546
|
min: 1,
|
|
547
547
|
max: 1,
|
|
548
|
-
command: "run402 credentials revoke <credential_id> [--project <
|
|
548
|
+
command: "run402 credentials revoke <credential_id> [--project <project_id>]",
|
|
549
549
|
missing: "Missing <credential_id>. Find it with: run402 credentials list",
|
|
550
550
|
});
|
|
551
551
|
try {
|
|
@@ -564,7 +564,7 @@ async function token(args) {
|
|
|
564
564
|
requirePositionalCount(rest, ["--project", "--kind"], {
|
|
565
565
|
min: 0,
|
|
566
566
|
max: 0,
|
|
567
|
-
command: "run402 credentials token [--project <
|
|
567
|
+
command: "run402 credentials token [--project <project_id>]",
|
|
568
568
|
missing: "",
|
|
569
569
|
});
|
|
570
570
|
if (kind && kind !== "anon" && kind !== "service") {
|
package/lib/daemon-path.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Daemon identity + transport addressing (
|
|
2
|
+
* Daemon identity + transport addressing (vault-persistent-helper D4/D5)
|
|
3
3
|
* — the ONE module the thin client's fast path may import beside node
|
|
4
4
|
* builtins (pinned by the import-graph gate test), so it must stay tiny.
|
|
5
5
|
*
|
|
6
6
|
* The socket lives INSIDE the client configuration directory — the same
|
|
7
7
|
* 0700 trust boundary that already holds the wallet private key and the
|
|
8
|
-
*
|
|
8
|
+
* vault keystore — and its path is keyed by CLI version, so a CLI
|
|
9
9
|
* upgrade resolves a NEW path: the new client never reaches the old daemon,
|
|
10
10
|
* which idles out on its own. Windows uses a named pipe whose name carries
|
|
11
11
|
* a hash of the config dir (pipes have no filesystem home) plus the same
|
|
@@ -79,7 +79,7 @@ export function daemonSocketPath() {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
export function daemonRunnerPath() {
|
|
82
|
-
return join(dirname(fileURLToPath(import.meta.url)), "
|
|
82
|
+
return join(dirname(fileURLToPath(import.meta.url)), "vault-daemon-run.mjs");
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|