run402 4.95.0 → 4.97.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 +5 -5
- package/cli.mjs +2 -28
- package/core-dist/keystore.js +1 -1
- package/git-remote-run402.mjs +6 -6
- package/lib/buzz.mjs +1 -1
- package/lib/cold-start.mjs +2 -2
- package/lib/command-manifest.mjs +6 -47
- package/lib/credentials.mjs +5 -5
- package/lib/daemon-path.mjs +3 -3
- package/lib/deploy-v2.mjs +44 -44
- package/lib/doctor.mjs +45 -54
- package/lib/errors.mjs +1 -1
- package/lib/events.mjs +1 -1
- package/lib/grants.mjs +148 -46
- package/lib/init.mjs +29 -29
- package/lib/logs.mjs +1 -1
- package/lib/next-actions.mjs +1 -1
- package/lib/org-context.mjs +9 -9
- package/lib/orgs.mjs +19 -19
- package/lib/path-lookup.mjs +7 -10
- package/lib/path-lookup.test.mjs +19 -21
- package/lib/projects.mjs +1 -1
- package/lib/remote-helper-session.mjs +93 -93
- package/lib/repos.mjs +174 -175
- package/lib/rooms-context.mjs +7 -7
- package/lib/sites.mjs +5 -5
- package/lib/up.mjs +14 -14
- 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} +12 -12
- package/lib/{gitvault-target.mjs → vault-target.mjs} +22 -17
- package/package.json +2 -2
- package/sdk/core-dist/keystore.js +1 -1
- package/sdk/dist/errors.d.ts +5 -5
- package/sdk/dist/errors.d.ts.map +1 -1
- package/sdk/dist/errors.js +2 -2
- package/sdk/dist/errors.js.map +1 -1
- package/sdk/dist/grant-key-credentials.d.ts +38 -0
- package/sdk/dist/grant-key-credentials.d.ts.map +1 -0
- package/sdk/dist/grant-key-credentials.js +42 -0
- package/sdk/dist/grant-key-credentials.js.map +1 -0
- package/sdk/dist/index.d.ts +16 -23
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +14 -21
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/namespaces/billing.d.ts +1 -1
- package/sdk/dist/namespaces/billing.js +1 -1
- package/sdk/dist/namespaces/buzz.js +1 -1
- package/sdk/dist/namespaces/buzz.js.map +1 -1
- package/sdk/dist/namespaces/credentials.d.ts +4 -4
- package/sdk/dist/namespaces/credentials.js +4 -4
- 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 +25 -25
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +17 -17
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/domains.d.ts +1 -1
- package/sdk/dist/namespaces/domains.js +1 -1
- package/sdk/dist/namespaces/errors.d.ts +1 -1
- package/sdk/dist/namespaces/errors.js +2 -2
- package/sdk/dist/namespaces/escalations.d.ts +2 -2
- package/sdk/dist/namespaces/escalations.js +2 -2
- package/sdk/dist/namespaces/escalations.types.d.ts +3 -3
- package/sdk/dist/namespaces/escalations.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/events.d.ts +1 -1
- package/sdk/dist/namespaces/events.js +1 -1
- package/sdk/dist/namespaces/functions.js +1 -1
- package/sdk/dist/namespaces/functions.js.map +1 -1
- package/sdk/dist/namespaces/grants.d.ts +43 -9
- package/sdk/dist/namespaces/grants.d.ts.map +1 -1
- package/sdk/dist/namespaces/grants.js +99 -10
- package/sdk/dist/namespaces/grants.js.map +1 -1
- package/sdk/dist/namespaces/grants.types.d.ts +120 -15
- package/sdk/dist/namespaces/grants.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/grants.types.js +12 -3
- package/sdk/dist/namespaces/grants.types.js.map +1 -1
- package/sdk/dist/namespaces/identity-links.types.d.ts +2 -2
- package/sdk/dist/namespaces/identity-links.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/org.d.ts +3 -3
- package/sdk/dist/namespaces/org.js +3 -3
- package/sdk/dist/namespaces/org.types.d.ts +3 -3
- package/sdk/dist/namespaces/pay.js +1 -1
- package/sdk/dist/namespaces/projects.d.ts +1 -1
- package/sdk/dist/namespaces/projects.js +1 -1
- package/sdk/dist/namespaces/{gitvault.d.ts → repos.d.ts} +436 -449
- package/sdk/dist/namespaces/repos.d.ts.map +1 -0
- package/sdk/dist/namespaces/{gitvault.js → repos.js} +452 -460
- package/sdk/dist/namespaces/repos.js.map +1 -0
- package/sdk/dist/namespaces/rooms.d.ts +3 -3
- package/sdk/dist/namespaces/rooms.js +5 -5
- 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 +3 -3
- package/sdk/dist/namespaces/tier.d.ts.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/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/credentials.d.ts +9 -9
- package/sdk/dist/node/credentials.d.ts.map +1 -1
- package/sdk/dist/node/credentials.js +12 -12
- package/sdk/dist/node/credentials.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 +34 -34
- package/sdk/dist/node/index.d.ts.map +1 -1
- package/sdk/dist/node/index.js +41 -41
- package/sdk/dist/node/index.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/project-auth-classification.d.ts +8 -8
- package/sdk/dist/project-auth-classification.d.ts.map +1 -1
- package/sdk/dist/project-auth-classification.js +7 -7
- package/sdk/dist/project-auth-classification.js.map +1 -1
- package/sdk/dist/scoped.d.ts +6 -14
- package/sdk/dist/scoped.d.ts.map +1 -1
- package/sdk/dist/scoped.js +10 -21
- package/sdk/dist/scoped.js.map +1 -1
- package/vault-surface.json +40 -0
- package/gitvault-surface.json +0 -89
- package/lib/delegates.mjs +0 -189
- package/lib/gitvault.mjs +0 -163
- package/lib/source-access.mjs +0 -70
- package/sdk/dist/delegate-credentials.d.ts +0 -37
- package/sdk/dist/delegate-credentials.d.ts.map +0 -1
- package/sdk/dist/delegate-credentials.js +0 -41
- package/sdk/dist/delegate-credentials.js.map +0 -1
- package/sdk/dist/namespaces/delegates.d.ts +0 -50
- package/sdk/dist/namespaces/delegates.d.ts.map +0 -1
- package/sdk/dist/namespaces/delegates.js +0 -99
- package/sdk/dist/namespaces/delegates.js.map +0 -1
- package/sdk/dist/namespaces/delegates.types.d.ts +0 -88
- package/sdk/dist/namespaces/delegates.types.d.ts.map +0 -1
- package/sdk/dist/namespaces/delegates.types.js +0 -10
- package/sdk/dist/namespaces/delegates.types.js.map +0 -1
- 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/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
Command-line interface for [Run402](https://run402.com) — provision Postgres databases, deploy static sites, run Node 22 serverless functions, host content-addressed CDN assets, send email, sign on-chain. Paid autonomously with x402 (USDC on Base) or MPP (pathUSD on Tempo, or sats over Bitcoin Lightning). **Prototype tier is free on testnet.**
|
|
6
6
|
|
|
7
|
-
The CLI lets an agent act as its own first-class Run402 principal rather than borrowing a human account. Identity records who invoked an action; organization roles, grants,
|
|
7
|
+
The CLI lets an agent act as its own first-class Run402 principal rather than borrowing a human account. Identity records who invoked an action; organization roles, grants, grant keys, freshness, and spend policy determine what that principal may do. People remain first-class owners and members without having to run the CLI themselves.
|
|
8
8
|
|
|
9
9
|
For the full CLI reference (every flag, every subcommand) start at **<https://docs.run402.com/llms-cli.txt>** — the index holds the first-deploy contract and links one fetchable `/llms-cli-<slice>.txt` per topic (deploy, commands, repos, orgs, functions, assets, ops, errors, frontend, platform); <https://docs.run402.com/llms-cli-full.txt> is the whole reference as one document.
|
|
10
10
|
|
|
@@ -61,7 +61,7 @@ Every mode (and `run402 deploy`) verifies the files the manifest references befo
|
|
|
61
61
|
|
|
62
62
|
### repos — host-blind encrypted git repos (zero deploy ceremony)
|
|
63
63
|
|
|
64
|
-
One noun,
|
|
64
|
+
One noun, seventeen verbs: KyGit is the brand, a vault is the resource, a repo is what you have.
|
|
65
65
|
|
|
66
66
|
```bash
|
|
67
67
|
run402 init # once per machine
|
|
@@ -76,7 +76,7 @@ run402 repos list --org org_1a2b3c
|
|
|
76
76
|
run402 repos delete --project prj_xyz --force # refuses without --force while the vault holds generations
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
-
A hosted git remote, encrypted before it leaves the machine — no deploy, no manifest, no app. `origin` is claimed additively — an existing `origin` is never touched, the run402 remote falls back to `run402` instead. A directory inside another repository is never scaffolded into that repository: the skip carries a `create_nested_repo` next action, `--nested` makes it its own nested repository (one line appended to the enclosing repository's local `.git/info/exclude`, nothing else touched), and `create` prints a `git push` next action only for a remote it actually added. Every mutating `repos` verb (`create`, `rename`, `delete`, `
|
|
79
|
+
A hosted git remote, encrypted before it leaves the machine — no deploy, no manifest, no app. `origin` is claimed additively — an existing `origin` is never touched, the run402 remote falls back to `run402` instead. A directory inside another repository is never scaffolded into that repository: the skip carries a `create_nested_repo` next action, `--nested` makes it its own nested repository (one line appended to the enclosing repository's local `.git/info/exclude`, nothing else touched), and `create` prints a `git push` next action only for a remote it actually added. Every mutating `repos` verb (`create`, `rename`, `delete`, `capture`, `policy`, `mirror`, `gc`, `handoff`, `resume`, `invite`, `join`) is CLI/OpenClaw-only by design — no MCP tool exists or will exist for them (one-shot recovery receipts, immutable generations, irreversible delete, single-use bearer keys). Three READ-ONLY tools do exist — `repos_view`, `repos_list_heads`, `repos_fsck` — teaching only `repos` spellings. See `run402 repos --help` for the full tiered surface (common: `create`/`view`/`list`; occasional: `capture`/`mirror`/`recover`/`handoff`/`resume`/`invite`/`join`; lifecycle: `rename`/`delete`; maintenance: `fsck`/`gc`/`access`/`policy`), and the CLI reference's `repos` section for the terminal-loss statement and the progressive backup warning.
|
|
80
80
|
|
|
81
81
|
**Handoff / resume.** `run402 repos handoff [--note-file <path>]` captures the actual working tree (staged/unstaged/untracked, like `git stash push -u`) into the vault and mints a single-use bearer key (`kgh1_…`, printed to stdout exactly once); `run402 repos resume <kgh1_…>` claims it on another machine, clones fresh, and reapplies the exact dirty state with `git stash apply --index`. No shared keystore, no shared wallet — the key is the whole handoff. On a wallet with no active tier, `resume` first folds the same cold-start chain `create` does (wallet → faucet → one x402 prototype payment); `--no-init` opts out, and the claim itself never waits on it. Sensitive untracked files (`.env`, `*.pem`, SSH/AWS/GPG dirs, …) are excluded from capture by default (`--include-sensitive <glob>` re-admits one). See the reference `run402.com/llms-cli.txt` for the full note-schema and flag reference.
|
|
82
82
|
|
|
@@ -121,7 +121,7 @@ This links two separately held public identities through fresh signatures; it ne
|
|
|
121
121
|
|
|
122
122
|
### Buzz community control plane
|
|
123
123
|
|
|
124
|
-
`run402 buzz status` reports skill installation, human-adoption offers/adoptions, community installation, and this agent's enrollment independently, and safely reports `supported: false` against an older gateway. The canonical ownership workflow is `buzz adopt offer --org … --identity-link …`: it capability-checks before mutation and returns a normal durable HTTPS handoff. Poll with `buzz adopt offer show <buzzhao_id>` and cancel with `buzz adopt offer cancel <buzzhao_id>`. The raw challenge command is explicitly advanced as `buzz adopt direct …`; direct completion/cancellation remain `buzz adopt complete|cancel`. Other goal workflows are `buzz install` and `buzz enroll`; decisions are `buzz install activate|update|revoke` and `buzz approve|deny|revoke`. `buzz install discover --community <buzz:community:host>` lists Run402-owned active descriptors without authentication. MCP intentionally has no signing/passkey mutation and only renders exact HTTPS/CLI handoffs. All commands print JSON to stdout, advice to stderr, have zero spend impact, and never accept Nostr/wallet secrets, session material, service keys,
|
|
124
|
+
`run402 buzz status` reports skill installation, human-adoption offers/adoptions, community installation, and this agent's enrollment independently, and safely reports `supported: false` against an older gateway. The canonical ownership workflow is `buzz adopt offer --org … --identity-link …`: it capability-checks before mutation and returns a normal durable HTTPS handoff. Poll with `buzz adopt offer show <buzzhao_id>` and cancel with `buzz adopt offer cancel <buzzhao_id>`. The raw challenge command is explicitly advanced as `buzz adopt direct …`; direct completion/cancellation remain `buzz adopt complete|cancel`. Other goal workflows are `buzz install` and `buzz enroll`; decisions are `buzz install activate|update|revoke` and `buzz approve|deny|revoke`. `buzz install discover --community <buzz:community:host>` lists Run402-owned active descriptors without authentication. MCP intentionally has no signing/passkey mutation and only renders exact HTTPS/CLI handoffs. All commands print JSON to stdout, advice to stderr, have zero spend impact, and never accept Nostr/wallet secrets, session material, service keys, grant keys, or payment credentials. Failure JSON preserves the gateway's code-specific `next_actions`, exact repair `field`, and retry safety; never replace it with a generic edit-and-retry. See the [Fizz/Honey examples](../buzz/references/community-control-plane.md).
|
|
125
125
|
|
|
126
126
|
### Buy from an x402 URL
|
|
127
127
|
|
|
@@ -323,7 +323,7 @@ run402 doctor # { ok, blocking[], warnings[], checks[] }
|
|
|
323
323
|
run402 doctor --refresh # live npm check for a newer run402
|
|
324
324
|
```
|
|
325
325
|
|
|
326
|
-
`ok` is structural: `true` exactly when `blocking[]` is empty. Every check carries `severity: "blocking" | "advisory" | "info"`; advisory findings (an unbound contact passkey, a degraded recovery posture on another org, a stale CLI,
|
|
326
|
+
`ok` is structural: `true` exactly when `blocking[]` is empty. Every check carries `severity: "blocking" | "advisory" | "info"`; advisory findings (an unbound contact passkey, a degraded recovery posture on another org, a stale CLI, vault gaps) land in `warnings[]` without changing `ok` or the exit code. The `tier` check's `status` is a fixed vocabulary (`ok | inactive | frozen | past_due | dormant | purged | missing | unknown | error`, never a tier name; see `value.tier` / `value.lifecycle`), and a wallet whose own org holds no tier but can reach another org's projects reports `missing` as advisory (`TIER_MISSING_ON_OWN_ORG`).
|
|
327
327
|
|
|
328
328
|
## State
|
|
329
329
|
|
package/cli.mjs
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { readFileSync } from "node:fs";
|
|
8
8
|
import * as nodeModule from "node:module";
|
|
9
9
|
|
|
10
|
-
//
|
|
10
|
+
// vault-startup-amortization (D2): on-disk V8 compile cache for the
|
|
11
11
|
// lazily-imported subcommand graphs. Feature-guarded (Node 22.8+) and
|
|
12
12
|
// try/caught — absence or an unwritable cache dir degrade silently.
|
|
13
13
|
try {
|
|
@@ -70,8 +70,7 @@ COORDINATE — work alongside other agents and humans
|
|
|
70
70
|
|
|
71
71
|
AUTHORITY — who may act, and with what credential
|
|
72
72
|
credentials Manage local credential material (project-keys)
|
|
73
|
-
|
|
74
|
-
grants Per-project capability grants for agent/CI principals (create, revoke)
|
|
73
|
+
grants Project grants and grant keys for agents (create, list, revoke, revoke-key, rotate-key)
|
|
75
74
|
orgs Organizations, members, invites & audit (list, get, members, invite, audit)
|
|
76
75
|
identity Public proof-backed external agent identity links
|
|
77
76
|
auth Manage project user authentication (magic link, passwords, settings)
|
|
@@ -95,8 +94,6 @@ PLATFORM — everything else, and the things still finding a home
|
|
|
95
94
|
jobs Submit and inspect platform-managed jobs
|
|
96
95
|
transfer Project transfer to a wallet, an email, or an owned org (init, preview, list, accept, cancel)
|
|
97
96
|
archives Portable project archives (create, status, download --target cloud; inspect, verify; import --target core)
|
|
98
|
-
gitvault RETIRED — moved to repos (repo-surface-consolidation); every spelling answers COMMAND_MOVED/COMMAND_REMOVED
|
|
99
|
-
source-access RETIRED — moved into repos (recovery-bundle + access); every spelling answers COMMAND_MOVED
|
|
100
97
|
buzz Buzz human/community/agent control-plane workflows
|
|
101
98
|
apps Browse and manage the app marketplace
|
|
102
99
|
ai AI translation and moderation tools
|
|
@@ -232,14 +229,6 @@ switch (cmd) {
|
|
|
232
229
|
await run(sub, rest);
|
|
233
230
|
break;
|
|
234
231
|
}
|
|
235
|
-
// `repo` singular resolves identically to `repos` (design D1 — agents type
|
|
236
|
-
// what `gh repo` already taught them). Its own case block, not a
|
|
237
|
-
// fall-through, so cli-conventions-gate's per-line family scanner sees it.
|
|
238
|
-
case "repo": {
|
|
239
|
-
const { run } = await import("./lib/repos.mjs");
|
|
240
|
-
await run(sub, rest);
|
|
241
|
-
break;
|
|
242
|
-
}
|
|
243
232
|
case "snapshots": {
|
|
244
233
|
const { run } = await import("./lib/snapshots.mjs");
|
|
245
234
|
await run(sub, rest);
|
|
@@ -295,11 +284,6 @@ switch (cmd) {
|
|
|
295
284
|
await run(sub, rest);
|
|
296
285
|
break;
|
|
297
286
|
}
|
|
298
|
-
case "delegates": {
|
|
299
|
-
const { run } = await import("./lib/delegates.mjs");
|
|
300
|
-
await run(sub, rest);
|
|
301
|
-
break;
|
|
302
|
-
}
|
|
303
287
|
case "events": {
|
|
304
288
|
const { run } = await import("./lib/events.mjs");
|
|
305
289
|
await run(sub, rest);
|
|
@@ -325,11 +309,6 @@ switch (cmd) {
|
|
|
325
309
|
await run(sub, rest);
|
|
326
310
|
break;
|
|
327
311
|
}
|
|
328
|
-
case "gitvault": {
|
|
329
|
-
const { run } = await import("./lib/gitvault.mjs");
|
|
330
|
-
await run(sub, rest);
|
|
331
|
-
break;
|
|
332
|
-
}
|
|
333
312
|
case "escalations": {
|
|
334
313
|
const { run } = await import("./lib/escalations.mjs");
|
|
335
314
|
await run(sub, rest);
|
|
@@ -448,11 +427,6 @@ switch (cmd) {
|
|
|
448
427
|
await run([sub, ...rest].filter(Boolean));
|
|
449
428
|
break;
|
|
450
429
|
}
|
|
451
|
-
case "source-access": {
|
|
452
|
-
const { run } = await import("./lib/source-access.mjs");
|
|
453
|
-
await run(sub, rest);
|
|
454
|
-
break;
|
|
455
|
-
}
|
|
456
430
|
case "auth": {
|
|
457
431
|
const { run } = await import("./lib/auth.mjs");
|
|
458
432
|
await run(sub, rest);
|
package/core-dist/keystore.js
CHANGED
|
@@ -190,7 +190,7 @@ export function removeProject(projectId, path) {
|
|
|
190
190
|
* bucket, not "unknown") and PERMANENTLY shadows every later wallet-scoped
|
|
191
191
|
* activation for every caller that reads through this module: `resolveProjectId`
|
|
192
192
|
* / `resolveProject` (cli/lib/config.mjs), `projects current`, and every
|
|
193
|
-
*
|
|
193
|
+
* vault-verb target resolution. The failure it causes: `repos create`
|
|
194
194
|
* calls `projects.provision`, whose `creds.setActiveProject` correctly
|
|
195
195
|
* persists the new project under the real wallet's scoped bucket AND the
|
|
196
196
|
* flat fallback, yet every CLI read of "the active project" resolves the
|
package/git-remote-run402.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* `git-remote-run402` — the THIN CLIENT (
|
|
3
|
+
* `git-remote-run402` — the THIN CLIENT (vault-persistent-helper).
|
|
4
4
|
*
|
|
5
5
|
* git spawns a fresh helper process per remote operation, so everything warm
|
|
6
6
|
* dies per command — Node boot, the SDK graph, the signer, the paid stack,
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* when that is impossible does it load the full session module and run
|
|
11
11
|
* in-process — which is byte-identical to the pre-daemon behavior.
|
|
12
12
|
*
|
|
13
|
-
* INVARIANTS (spec:
|
|
13
|
+
* INVARIANTS (spec: vault-client-surface, "A resident helper engine…"):
|
|
14
14
|
* - The daemon is never load-bearing: any failure to use it — absent,
|
|
15
15
|
* busy, stale, mismatched, dying mid-handshake — falls back silently to
|
|
16
16
|
* the in-process path. The handshake completes BEFORE this client
|
|
@@ -35,7 +35,7 @@ import net from "node:net";
|
|
|
35
35
|
import { spawn } from "node:child_process";
|
|
36
36
|
import { daemonSocketPath, daemonRunnerPath, DAEMON_PROTOCOL_VERSION, cliVersion, forwardableEnv } from "./lib/daemon-path.mjs";
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// vault-startup-amortization (D2): on-disk V8 compile cache for every
|
|
39
39
|
// module loaded from here on. Feature-guarded (Node 22.8+) and try/caught
|
|
40
40
|
// (a read-only install dir degrades silently).
|
|
41
41
|
try {
|
|
@@ -201,11 +201,11 @@ if (invokedDirectly) {
|
|
|
201
201
|
process.exitCode = code;
|
|
202
202
|
} else {
|
|
203
203
|
// Fallback: today's in-process path, byte-identical. Fire the prewarm
|
|
204
|
-
// BEFORE the heavy graph evaluates (
|
|
204
|
+
// BEFORE the heavy graph evaluates (vault-startup-amortization D1),
|
|
205
205
|
// and leave a daemon behind for next time.
|
|
206
206
|
if (daemonEnabled) spawnDaemon();
|
|
207
|
-
const {
|
|
208
|
-
|
|
207
|
+
const { prewarmVaultConnection } = await import("./sdk/dist/node/vault-prewarm.js");
|
|
208
|
+
prewarmVaultConnection();
|
|
209
209
|
const { runHelperSession } = await import("./lib/remote-helper-session.mjs");
|
|
210
210
|
process.exitCode = await runHelperSession(argv);
|
|
211
211
|
}
|
package/lib/buzz.mjs
CHANGED
|
@@ -67,7 +67,7 @@ Advanced recovery reads:
|
|
|
67
67
|
Security:
|
|
68
68
|
- JSON stdout only; progress and pending-state advice go to stderr.
|
|
69
69
|
- This command never accepts an nsec, private key, mnemonic, seed, service key,
|
|
70
|
-
|
|
70
|
+
grant key, recovery code, or payment material.
|
|
71
71
|
- Buzz signatures are public evidence. Run402 authority still comes only from
|
|
72
72
|
human/agent principals, org membership, and project grants.
|
|
73
73
|
- Every command in this group has zero spend impact.
|
package/lib/cold-start.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `cold-start.mjs` — the minimal x402/Base-Sepolia cold-start chain
|
|
3
3
|
* (kygit-handoff design D5): wallet → faucet → one x402 prototype
|
|
4
|
-
* payment. `repos create`
|
|
5
|
-
* refused `NO_ACTIVE_TIER`, so `
|
|
4
|
+
* payment. `repos create` folds this in when it is
|
|
5
|
+
* refused `NO_ACTIVE_TIER`, so `run402 repos create` on a genuinely fresh machine
|
|
6
6
|
* ends with a vault, no human signup, no cloud dashboard.
|
|
7
7
|
*
|
|
8
8
|
* This is the SAME shape `run402 init` already walks (create the wallet →
|
package/lib/command-manifest.mjs
CHANGED
|
@@ -235,13 +235,10 @@ export const COMMAND_MANIFEST = [
|
|
|
235
235
|
|
|
236
236
|
// ── grants ───────────────────────────────────────────────────────────────
|
|
237
237
|
{ path: ["grants", "create"], positionals: [p("wallet")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["0x1111111111111111111111111111111111111111", "--capability", "deploy"] },
|
|
238
|
+
{ path: ["grants", "list"], positionals: [], projectScoped: true, legacyPositionalProject: true, minimalArgs: [] },
|
|
238
239
|
{ path: ["grants", "revoke"], positionals: [p("grant_id")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["grt_gate1"] },
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
{ path: ["delegates", "create"], legacyPositionalProject: false, positionals: [], projectScoped: true, minimalArgs: ["--grant", "11111111-1111-1111-1111-111111111111"] },
|
|
242
|
-
{ path: ["delegates", "list"], legacyPositionalProject: false, positionals: [], projectScoped: true, minimalArgs: [] },
|
|
243
|
-
{ path: ["delegates", "revoke"], legacyPositionalProject: false, positionals: [p("delegate_id")], projectScoped: true, minimalArgs: ["dlg_gate1"] },
|
|
244
|
-
{ path: ["delegates", "rotate"], legacyPositionalProject: false, positionals: [p("delegate_id")], projectScoped: true, minimalArgs: ["dlg_gate1"] },
|
|
240
|
+
{ path: ["grants", "revoke-key"], positionals: [p("key_id")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["key_gate1"] },
|
|
241
|
+
{ path: ["grants", "rotate-key"], positionals: [p("key_id")], projectScoped: true, legacyPositionalProject: true, minimalArgs: ["key_gate1"] },
|
|
245
242
|
|
|
246
243
|
// ── events / live ────────────────────────────────────────────────────────
|
|
247
244
|
{ path: ["events", "list"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub" },
|
|
@@ -281,12 +278,6 @@ export const COMMAND_MANIFEST = [
|
|
|
281
278
|
{ path: ["claims", "list"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub" },
|
|
282
279
|
{ path: ["claims", "release"], positionals: [p("claim_id")], projectScoped: true, legacyPositionalProject: false, minimalArgs: ["clm_1"], runStyle: "sub" },
|
|
283
280
|
|
|
284
|
-
// ── gitvault — no manifest entries ──────────────────────
|
|
285
|
-
// `cli/lib/gitvault.mjs`'s dispatcher handles every `gitvault <verb>` and
|
|
286
|
-
// answers a structural COMMAND_MOVED (or, for `push`/`reconcile`,
|
|
287
|
-
// COMMAND_REMOVED) redirect that dispatches nothing — see
|
|
288
|
-
// RESERVED_SUBCOMMANDS below, and "gitvault" in SKIPPED_FAMILIES.
|
|
289
|
-
|
|
290
281
|
// ── repos (the consolidated 15-verb family) ─
|
|
291
282
|
// Every verb needs a real principal keystore and, for most, an allocated
|
|
292
283
|
// repo and a local git working tree, so the gate runs structural checks
|
|
@@ -299,7 +290,7 @@ export const COMMAND_MANIFEST = [
|
|
|
299
290
|
// name, with `--repo`/`--project` addressing.
|
|
300
291
|
{ 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" },
|
|
301
292
|
{ 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" },
|
|
302
|
-
{ path: ["repos", "
|
|
293
|
+
{ path: ["repos", "capture"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub", skipBehavioral: "captures the cwd git working tree and publishes a signed head" },
|
|
303
294
|
// kygit-handoff: `handoff` captures a stash-shaped checkpoint and mints a
|
|
304
295
|
// single-use bearer key through a live gateway call; `resume` claims one
|
|
305
296
|
// (a real membership mutation) and writes into a fresh working tree.
|
|
@@ -320,7 +311,7 @@ export const COMMAND_MANIFEST = [
|
|
|
320
311
|
{ 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" },
|
|
321
312
|
{ 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" },
|
|
322
313
|
{ 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" },
|
|
323
|
-
{ path: ["repos", "access", "sync"], positionals: [], projectScoped: true, legacyPositionalProject: false, minimalArgs: [], runStyle: "sub", skipBehavioral: "
|
|
314
|
+
{ 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" },
|
|
324
315
|
{ 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" },
|
|
325
316
|
// Principal-scoped (one bundle covers every vault you can read), so no
|
|
326
317
|
// --project — deliberately unlike its eleven vault-scoped siblings.
|
|
@@ -477,7 +468,7 @@ export const COMMAND_MANIFEST = [
|
|
|
477
468
|
{ path: ["service", "health"], positionals: [], projectScoped: false, legacyPositionalProject: false, minimalArgs: [] },
|
|
478
469
|
{ path: ["cache", "inspect"], positionals: [p("url")], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["https://example.com/"] },
|
|
479
470
|
{ path: ["cache", "invalidate"], positionals: [p("url", { required: false })], projectScoped: false, legacyPositionalProject: false, minimalArgs: ["--all", "--host", "example.com"] },
|
|
480
|
-
// projectScoped: --project targets the
|
|
471
|
+
// projectScoped: --project targets the vault
|
|
481
472
|
// check only (see doctor.mjs's own HELP) — every other check stays
|
|
482
473
|
// wallet/machine-wide, but the gate's contract is "accepts --project
|
|
483
474
|
// without rejecting it," which this satisfies.
|
|
@@ -501,20 +492,6 @@ export const SKIPPED_FAMILIES = {
|
|
|
501
492
|
// Split into `deliveries` / `contacts` / `subscriptions`; every subcommand
|
|
502
493
|
// answers COMMAND_REMOVED naming its successor.
|
|
503
494
|
"notifications": "reserved group; split by legible-cli-surface",
|
|
504
|
-
// The gitvault dispatcher answers COMMAND_MOVED/COMMAND_REMOVED for every
|
|
505
|
-
// `gitvault <verb>` (see RESERVED_SUBCOMMANDS below for the per-verb list)
|
|
506
|
-
// — the family stays dispatched in cli.mjs (so the redirect fires instead
|
|
507
|
-
// of UNKNOWN_COMMAND) but has zero manifest entries, since a redirect
|
|
508
|
-
// dispatches nothing.
|
|
509
|
-
"gitvault": "retired; every subcommand answers COMMAND_MOVED/COMMAND_REMOVED naming its `repos`/git successor",
|
|
510
|
-
// Shipped in exactly one release (v4.54.0, live for hours) before the
|
|
511
|
-
// one-noun review caught it: a gateway route namespace is not a CLI noun.
|
|
512
|
-
// Both verbs answer COMMAND_MOVED into the repos family for one release,
|
|
513
|
-
// then the spelling is reserved and answers nothing.
|
|
514
|
-
"source-access": "retired same-day; `export` -> `repos recovery-bundle`, `status` -> `repos access` (member_custody block)",
|
|
515
|
-
// `repo` singular resolves identically to `repos` — same
|
|
516
|
-
// module, same case block in cli.mjs, so it needs no manifest of its own.
|
|
517
|
-
"repo": "alias for `repos`, resolves identically (design D1)",
|
|
518
495
|
};
|
|
519
496
|
|
|
520
497
|
/**
|
|
@@ -530,23 +507,5 @@ export const SKIPPED_FAMILIES = {
|
|
|
530
507
|
* which the family list cannot express.
|
|
531
508
|
*/
|
|
532
509
|
export const RESERVED_SUBCOMMANDS = {
|
|
533
|
-
"source-access:export": "moved to `repos recovery-bundle` — the artifact `repos recover --bundle` consumes belongs to the repos family",
|
|
534
|
-
"source-access:status": "moved to `repos access` — your own wrapper custody rides its member_custody block; the org advisory is `doctor --only recovery_posture`",
|
|
535
510
|
"escalations:contacts": "merged into `contacts` — the ladder and Telegram channels are one question",
|
|
536
|
-
// Every `gitvault <verb>` spelling. Nine
|
|
537
|
-
// answer COMMAND_MOVED naming their `repos` successor; `push` and
|
|
538
|
-
// `reconcile` answer COMMAND_REMOVED (no equivalent successor for either —
|
|
539
|
-
// `push`'s one-release alias window is over, `reconcile` was a workaround
|
|
540
|
-
// with no permanent replacement, only a read at `repos access`).
|
|
541
|
-
"gitvault:init": "moved to `repos create --project <project_id>`",
|
|
542
|
-
"gitvault:status": "moved to `repos view`",
|
|
543
|
-
"gitvault:snapshot": "moved to `repos snapshot`",
|
|
544
|
-
"gitvault:policy": "moved to `repos policy`",
|
|
545
|
-
"gitvault:compact": "moved to `repos gc`",
|
|
546
|
-
"gitvault:prune": "moved to `repos gc`",
|
|
547
|
-
"gitvault:verify": "moved to `repos fsck`",
|
|
548
|
-
"gitvault:mirror": "moved to `repos mirror`",
|
|
549
|
-
"gitvault:recover": "moved to `repos recover`",
|
|
550
|
-
"gitvault:push": "removed — its one-release deprecation-alias window is over; `git push` / `repos snapshot`",
|
|
551
|
-
"gitvault:reconcile": "removed — a workaround with no permanent successor; read `repos access` instead",
|
|
552
511
|
};
|
package/lib/credentials.mjs
CHANGED
|
@@ -39,7 +39,7 @@ Project credentials (on the gateway — named, revocable, rotatable):
|
|
|
39
39
|
Revoke immediately, freeing the name
|
|
40
40
|
token [--project <project_id>] [--kind <anon|service>]
|
|
41
41
|
Mint a SHORT-LIVED token. Works with only a
|
|
42
|
-
|
|
42
|
+
grant key — the unattended recovery path.
|
|
43
43
|
|
|
44
44
|
Local cache (on this machine):
|
|
45
45
|
project-keys Manage the local project-key cache
|
|
@@ -49,7 +49,7 @@ Notes:
|
|
|
49
49
|
plus a fresh step-up, so a scoped agent credential can never escalate
|
|
50
50
|
itself into a permanent root. Authenticate with a wallet (SIWX) or a
|
|
51
51
|
sign-in session ('run402 login').
|
|
52
|
-
- 'token' is the exception: a
|
|
52
|
+
- 'token' is the exception: a grant key can mint one with no human present.
|
|
53
53
|
- Secrets are returned EXACTLY ONCE and are never recoverable. Full JSON goes
|
|
54
54
|
to stdout so you can pipe it; the warnings go to stderr.
|
|
55
55
|
|
|
@@ -106,7 +106,7 @@ Usage:
|
|
|
106
106
|
The secret is printed ONCE, on stdout, inside the JSON. Pipe it:
|
|
107
107
|
run402 credentials issue --kind service --name ci | jq -r .secret
|
|
108
108
|
|
|
109
|
-
Requires owner membership on the project's org plus a fresh step-up. A
|
|
109
|
+
Requires owner membership on the project's org plus a fresh step-up. A grant key
|
|
110
110
|
can NEVER do this; use 'run402 credentials token' instead.
|
|
111
111
|
`,
|
|
112
112
|
list: `run402 credentials list — list a project's credentials
|
|
@@ -157,7 +157,7 @@ Usage:
|
|
|
157
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
|
-
with no human present: a
|
|
160
|
+
with no human present: a grant key is accepted here. There is no step-up because
|
|
161
161
|
there is nobody to prompt, and what you get back expires, so it cannot become a
|
|
162
162
|
durable root. Defaults to --kind service.
|
|
163
163
|
`,
|
|
@@ -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.
|
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
|
/**
|