@run402/sdk 4.95.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 +24 -24
- package/core-dist/keystore.d.ts +1 -1
- package/core-dist/keystore.js +1 -1
- package/dist/errors.d.ts +4 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -8
- package/dist/index.js.map +1 -1
- package/dist/namespaces/deploy.d.ts +5 -5
- package/dist/namespaces/deploy.d.ts.map +1 -1
- package/dist/namespaces/deploy.js +20 -20
- package/dist/namespaces/deploy.js.map +1 -1
- package/dist/namespaces/deploy.types.d.ts +17 -17
- package/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/dist/namespaces/org.d.ts +2 -2
- package/dist/namespaces/org.js +2 -2
- package/dist/namespaces/org.types.d.ts +3 -3
- package/dist/namespaces/pay.js +1 -1
- package/dist/namespaces/{gitvault.d.ts → repos.d.ts} +436 -449
- package/dist/namespaces/repos.d.ts.map +1 -0
- package/dist/namespaces/{gitvault.js → repos.js} +451 -459
- package/dist/namespaces/repos.js.map +1 -0
- package/dist/namespaces/rooms.js +2 -2
- package/dist/namespaces/rooms.js.map +1 -1
- package/dist/namespaces/session.d.ts +2 -2
- package/dist/namespaces/session.d.ts.map +1 -1
- package/dist/namespaces/session.js +2 -2
- package/dist/namespaces/session.js.map +1 -1
- package/dist/namespaces/tier.d.ts +3 -3
- package/dist/namespaces/tier.d.ts.map +1 -1
- package/dist/namespaces/{gitvault.crypto.d.ts → vault.crypto.d.ts} +141 -141
- package/dist/namespaces/vault.crypto.d.ts.map +1 -0
- package/dist/namespaces/{gitvault.crypto.js → vault.crypto.js} +173 -173
- package/dist/namespaces/vault.crypto.js.map +1 -0
- package/dist/namespaces/{gitvault.types.d.ts → vault.types.d.ts} +136 -136
- package/dist/namespaces/vault.types.d.ts.map +1 -0
- package/dist/namespaces/{gitvault.types.js → vault.types.js} +4 -4
- package/dist/namespaces/vault.types.js.map +1 -0
- package/dist/node/bearer-redeem-key.d.ts +1 -1
- package/dist/node/bearer-redeem-key.js +5 -5
- package/dist/node/bearer-redeem-key.js.map +1 -1
- package/dist/node/http-dispatcher.js +5 -5
- package/dist/node/http-dispatcher.js.map +1 -1
- package/dist/node/index.d.ts +29 -29
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +39 -39
- package/dist/node/index.js.map +1 -1
- package/dist/node/{gitvault-address.d.ts → vault-address.d.ts} +42 -42
- package/dist/node/vault-address.d.ts.map +1 -0
- package/dist/node/{gitvault-address.js → vault-address.js} +43 -43
- package/dist/node/vault-address.js.map +1 -0
- package/dist/node/{gitvault-apply.d.ts → vault-apply.d.ts} +27 -27
- package/dist/node/vault-apply.d.ts.map +1 -0
- package/dist/node/{gitvault-apply.js → vault-apply.js} +38 -38
- package/dist/node/vault-apply.js.map +1 -0
- package/dist/node/vault-byo-config.d.ts +29 -0
- package/dist/node/vault-byo-config.d.ts.map +1 -0
- package/dist/node/{gitvault-byo-config.js → vault-byo-config.js} +18 -18
- package/dist/node/vault-byo-config.js.map +1 -0
- package/dist/node/vault-byo-probe.d.ts +20 -0
- package/dist/node/vault-byo-probe.d.ts.map +1 -0
- package/dist/node/vault-byo-probe.js +57 -0
- package/dist/node/vault-byo-probe.js.map +1 -0
- package/dist/node/{gitvault-creation-journal.d.ts → vault-creation-journal.d.ts} +69 -69
- package/dist/node/vault-creation-journal.d.ts.map +1 -0
- package/dist/node/{gitvault-creation-journal.js → vault-creation-journal.js} +54 -54
- package/dist/node/vault-creation-journal.js.map +1 -0
- package/dist/node/{gitvault-degraded-read.d.ts → vault-degraded-read.d.ts} +34 -34
- package/dist/node/vault-degraded-read.d.ts.map +1 -0
- package/dist/node/{gitvault-degraded-read.js → vault-degraded-read.js} +24 -24
- package/dist/node/vault-degraded-read.js.map +1 -0
- package/dist/node/{gitvault-deploy.d.ts → vault-deploy.d.ts} +67 -67
- package/dist/node/vault-deploy.d.ts.map +1 -0
- package/dist/node/{gitvault-deploy.js → vault-deploy.js} +27 -27
- package/dist/node/vault-deploy.js.map +1 -0
- package/dist/node/{gitvault-edge-fetch.d.ts → vault-edge-fetch.d.ts} +9 -9
- package/dist/node/vault-edge-fetch.d.ts.map +1 -0
- package/dist/node/{gitvault-edge-fetch.js → vault-edge-fetch.js} +11 -11
- package/dist/node/vault-edge-fetch.js.map +1 -0
- package/dist/node/{gitvault-handoff.d.ts → vault-handoff.d.ts} +9 -9
- package/dist/node/vault-handoff.d.ts.map +1 -0
- package/dist/node/{gitvault-handoff.js → vault-handoff.js} +24 -24
- package/dist/node/vault-handoff.js.map +1 -0
- package/dist/node/{gitvault-keystore.d.ts → vault-keystore.d.ts} +87 -77
- package/dist/node/vault-keystore.d.ts.map +1 -0
- package/dist/node/{gitvault-keystore.js → vault-keystore.js} +105 -68
- package/dist/node/vault-keystore.js.map +1 -0
- package/dist/node/{gitvault-member-bundle.d.ts → vault-member-bundle.d.ts} +17 -17
- package/dist/node/vault-member-bundle.d.ts.map +1 -0
- package/dist/node/{gitvault-member-bundle.js → vault-member-bundle.js} +11 -11
- package/dist/node/vault-member-bundle.js.map +1 -0
- package/dist/node/{gitvault-mirror-backend.d.ts → vault-mirror-backend.d.ts} +26 -26
- package/dist/node/vault-mirror-backend.d.ts.map +1 -0
- package/dist/node/{gitvault-mirror-backend.js → vault-mirror-backend.js} +25 -25
- package/dist/node/vault-mirror-backend.js.map +1 -0
- package/dist/node/{gitvault-mirror-config.d.ts → vault-mirror-config.d.ts} +23 -23
- package/dist/node/vault-mirror-config.d.ts.map +1 -0
- package/dist/node/{gitvault-mirror-config.js → vault-mirror-config.js} +16 -16
- package/dist/node/vault-mirror-config.js.map +1 -0
- package/dist/node/{gitvault-mirror.d.ts → vault-mirror.d.ts} +36 -36
- package/dist/node/vault-mirror.d.ts.map +1 -0
- package/dist/node/{gitvault-mirror.js → vault-mirror.js} +75 -75
- package/dist/node/vault-mirror.js.map +1 -0
- package/dist/node/{gitvault-native-crypto.d.ts → vault-native-crypto.d.ts} +10 -10
- package/dist/node/vault-native-crypto.d.ts.map +1 -0
- package/dist/node/{gitvault-native-crypto.js → vault-native-crypto.js} +16 -16
- package/dist/node/vault-native-crypto.js.map +1 -0
- package/dist/node/{gitvault-open-or-create.d.ts → vault-open-or-create.d.ts} +16 -16
- package/dist/node/vault-open-or-create.d.ts.map +1 -0
- package/dist/node/{gitvault-open-or-create.js → vault-open-or-create.js} +10 -10
- package/dist/node/vault-open-or-create.js.map +1 -0
- package/dist/node/{gitvault-prewarm.d.ts → vault-prewarm.d.ts} +13 -13
- package/dist/node/vault-prewarm.d.ts.map +1 -0
- package/dist/node/{gitvault-prewarm.js → vault-prewarm.js} +25 -25
- package/dist/node/vault-prewarm.js.map +1 -0
- package/dist/node/{gitvault-profile-scan.d.ts → vault-profile-scan.d.ts} +3 -3
- package/dist/node/vault-profile-scan.d.ts.map +1 -0
- package/dist/node/{gitvault-profile-scan.js → vault-profile-scan.js} +12 -12
- package/dist/node/vault-profile-scan.js.map +1 -0
- package/dist/node/{gitvault-prune.d.ts → vault-prune.d.ts} +61 -61
- package/dist/node/vault-prune.d.ts.map +1 -0
- package/dist/node/{gitvault-prune.js → vault-prune.js} +34 -34
- package/dist/node/vault-prune.js.map +1 -0
- package/dist/node/{gitvault-publication.d.ts → vault-publication.d.ts} +399 -399
- package/dist/node/vault-publication.d.ts.map +1 -0
- package/dist/node/{gitvault-publication.js → vault-publication.js} +584 -584
- package/dist/node/vault-publication.js.map +1 -0
- package/dist/node/{gitvault-push-to-create.d.ts → vault-push-to-create.d.ts} +16 -16
- package/dist/node/vault-push-to-create.d.ts.map +1 -0
- package/dist/node/{gitvault-push-to-create.js → vault-push-to-create.js} +9 -9
- package/dist/node/vault-push-to-create.js.map +1 -0
- package/dist/node/{gitvault-recover.d.ts → vault-recover.d.ts} +50 -50
- package/dist/node/vault-recover.d.ts.map +1 -0
- package/dist/node/{gitvault-recover.js → vault-recover.js} +84 -84
- package/dist/node/vault-recover.js.map +1 -0
- package/dist/node/{gitvault-restore.d.ts → vault-restore.d.ts} +8 -8
- package/dist/node/vault-restore.d.ts.map +1 -0
- package/dist/node/{gitvault-restore.js → vault-restore.js} +11 -11
- package/dist/node/vault-restore.js.map +1 -0
- package/dist/node/{gitvault-snapshot.d.ts → vault-snapshot.d.ts} +48 -48
- package/dist/node/vault-snapshot.d.ts.map +1 -0
- package/dist/node/{gitvault-snapshot.js → vault-snapshot.js} +61 -61
- package/dist/node/vault-snapshot.js.map +1 -0
- package/dist/node/{gitvault-writer-state.d.ts → vault-writer-state.d.ts} +8 -8
- package/dist/node/vault-writer-state.d.ts.map +1 -0
- package/dist/node/{gitvault-writer-state.js → vault-writer-state.js} +15 -15
- package/dist/node/vault-writer-state.js.map +1 -0
- package/dist/node/workflow-output.js +4 -4
- package/dist/node/workflow-output.js.map +1 -1
- package/package.json +1 -1
- package/dist/namespaces/gitvault.crypto.d.ts.map +0 -1
- package/dist/namespaces/gitvault.crypto.js.map +0 -1
- package/dist/namespaces/gitvault.d.ts.map +0 -1
- package/dist/namespaces/gitvault.js.map +0 -1
- package/dist/namespaces/gitvault.types.d.ts.map +0 -1
- package/dist/namespaces/gitvault.types.js.map +0 -1
- package/dist/node/gitvault-address.d.ts.map +0 -1
- package/dist/node/gitvault-address.js.map +0 -1
- package/dist/node/gitvault-apply.d.ts.map +0 -1
- package/dist/node/gitvault-apply.js.map +0 -1
- package/dist/node/gitvault-byo-config.d.ts +0 -29
- package/dist/node/gitvault-byo-config.d.ts.map +0 -1
- package/dist/node/gitvault-byo-config.js.map +0 -1
- package/dist/node/gitvault-byo-probe.d.ts +0 -20
- package/dist/node/gitvault-byo-probe.d.ts.map +0 -1
- package/dist/node/gitvault-byo-probe.js +0 -57
- package/dist/node/gitvault-byo-probe.js.map +0 -1
- package/dist/node/gitvault-creation-journal.d.ts.map +0 -1
- package/dist/node/gitvault-creation-journal.js.map +0 -1
- package/dist/node/gitvault-degraded-read.d.ts.map +0 -1
- package/dist/node/gitvault-degraded-read.js.map +0 -1
- package/dist/node/gitvault-deploy.d.ts.map +0 -1
- package/dist/node/gitvault-deploy.js.map +0 -1
- package/dist/node/gitvault-edge-fetch.d.ts.map +0 -1
- package/dist/node/gitvault-edge-fetch.js.map +0 -1
- package/dist/node/gitvault-handoff.d.ts.map +0 -1
- package/dist/node/gitvault-handoff.js.map +0 -1
- package/dist/node/gitvault-keystore.d.ts.map +0 -1
- package/dist/node/gitvault-keystore.js.map +0 -1
- package/dist/node/gitvault-member-bundle.d.ts.map +0 -1
- package/dist/node/gitvault-member-bundle.js.map +0 -1
- package/dist/node/gitvault-mirror-backend.d.ts.map +0 -1
- package/dist/node/gitvault-mirror-backend.js.map +0 -1
- package/dist/node/gitvault-mirror-config.d.ts.map +0 -1
- package/dist/node/gitvault-mirror-config.js.map +0 -1
- package/dist/node/gitvault-mirror.d.ts.map +0 -1
- package/dist/node/gitvault-mirror.js.map +0 -1
- package/dist/node/gitvault-native-crypto.d.ts.map +0 -1
- package/dist/node/gitvault-native-crypto.js.map +0 -1
- package/dist/node/gitvault-open-or-create.d.ts.map +0 -1
- package/dist/node/gitvault-open-or-create.js.map +0 -1
- package/dist/node/gitvault-prewarm.d.ts.map +0 -1
- package/dist/node/gitvault-prewarm.js.map +0 -1
- package/dist/node/gitvault-profile-scan.d.ts.map +0 -1
- package/dist/node/gitvault-profile-scan.js.map +0 -1
- package/dist/node/gitvault-prune.d.ts.map +0 -1
- package/dist/node/gitvault-prune.js.map +0 -1
- package/dist/node/gitvault-publication.d.ts.map +0 -1
- package/dist/node/gitvault-publication.js.map +0 -1
- package/dist/node/gitvault-push-to-create.d.ts.map +0 -1
- package/dist/node/gitvault-push-to-create.js.map +0 -1
- package/dist/node/gitvault-recover.d.ts.map +0 -1
- package/dist/node/gitvault-recover.js.map +0 -1
- package/dist/node/gitvault-restore.d.ts.map +0 -1
- package/dist/node/gitvault-restore.js.map +0 -1
- package/dist/node/gitvault-snapshot.d.ts.map +0 -1
- package/dist/node/gitvault-snapshot.js.map +0 -1
- package/dist/node/gitvault-writer-state.d.ts.map +0 -1
- package/dist/node/gitvault-writer-state.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* vault — handoff restore (kygit-handoff design D1/D10).
|
|
3
3
|
*
|
|
4
4
|
* Restore is porcelain git, in two stages that deliberately run through
|
|
5
5
|
* DIFFERENT runners:
|
|
6
6
|
*
|
|
7
7
|
* 1. `git clone <remote-url> <dir>` — a REAL network operation (the vault
|
|
8
|
-
* is reached through the `git-remote-run402
|
|
8
|
+
* is reached through the `git-remote-run402` remote
|
|
9
9
|
* helper), so it must NOT run under `hardenedGit`'s
|
|
10
10
|
* `-c protocol.allow=never` (that flag exists to keep LOCAL plumbing
|
|
11
11
|
* calls — hash-object, commit-tree, write-tree — from ever touching
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* template-installed hook before step 2 neutralizes hooks.
|
|
16
16
|
* 2. Every LOCAL-only step after that (checkout the base, apply the
|
|
17
17
|
* stash-shaped commit) runs through {@link hardenedGit} exactly like
|
|
18
|
-
* every other
|
|
18
|
+
* every other vault plumbing call — hooks, fsmonitor, and replace
|
|
19
19
|
* refs all disabled, argv-only, no shell.
|
|
20
20
|
*
|
|
21
21
|
* The handoff commit ITSELF needs no separate fetch: it is a `retention
|
|
@@ -29,22 +29,22 @@ import { mkdtempSync, existsSync, readFileSync, appendFileSync, mkdirSync } from
|
|
|
29
29
|
import { tmpdir } from "node:os";
|
|
30
30
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
31
31
|
import { LocalError } from "../errors.js";
|
|
32
|
-
import { hardenedGit, hardenedGitEnv, run402PassthroughEnv } from "./
|
|
32
|
+
import { hardenedGit, hardenedGitEnv, run402PassthroughEnv } from "./vault-snapshot.js";
|
|
33
33
|
function fail(code, message, context, details) {
|
|
34
34
|
throw new LocalError(message, context, { code, details });
|
|
35
35
|
}
|
|
36
36
|
let emptyCloneHooksDir = null;
|
|
37
37
|
function cloneHooksDir() {
|
|
38
|
-
emptyCloneHooksDir ??= mkdtempSync(join(tmpdir(), "run402-
|
|
38
|
+
emptyCloneHooksDir ??= mkdtempSync(join(tmpdir(), "run402-vault-resume-clone-nohooks-"));
|
|
39
39
|
return emptyCloneHooksDir;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
42
42
|
* `git clone --no-checkout <remoteUrl> <targetDir>` — protocol-permitting
|
|
43
|
-
* (this is the one
|
|
43
|
+
* (this is the one vault git invocation allowed to touch the network),
|
|
44
44
|
* hooks and terminal prompts still neutralized. `targetDir` must not
|
|
45
45
|
* already exist (git's own clone precondition).
|
|
46
46
|
*/
|
|
47
|
-
export function
|
|
47
|
+
export function cloneVaultRemote(remoteUrl, targetDir) {
|
|
48
48
|
return new Promise((resolvePromise, reject) => {
|
|
49
49
|
const argv = ["--no-replace-objects", "-c", `core.hooksPath=${cloneHooksDir()}`, "clone", "--no-checkout", "--", remoteUrl, targetDir];
|
|
50
50
|
execFile("git", argv,
|
|
@@ -54,7 +54,7 @@ export function cloneGitvaultRemote(remoteUrl, targetDir) {
|
|
|
54
54
|
// must read was written moments ago by the same resume, and a daemon
|
|
55
55
|
// that predates that write serves the vault from what it loaded then
|
|
56
56
|
// (live: a post-rotation resume opened only the newest epoch and died
|
|
57
|
-
//
|
|
57
|
+
// VAULT_EPOCH_NOT_OPENABLE at generation 1). One clone gains nothing
|
|
58
58
|
// from a daemon; every later fetch/push in the restored checkout does.
|
|
59
59
|
{ cwd: tmpdir(), env: { ...hardenedGitEnv(run402PassthroughEnv()), RUN402_DAEMON: "0" }, encoding: "buffer", maxBuffer: 1024 * 1024 * 1024, windowsHide: true }, (error, _stdout, stderr) => {
|
|
60
60
|
if (error) {
|
|
@@ -111,7 +111,7 @@ export async function applyHandoffCheckpoint(options) {
|
|
|
111
111
|
/**
|
|
112
112
|
* `--to <dir>` wins; otherwise the vault's address-form name (`org/name` →
|
|
113
113
|
* `name`) when the redeem response carried one, otherwise the vault id.
|
|
114
|
-
* Always absolute — `
|
|
114
|
+
* Always absolute — `cloneVaultRemote` runs in `tmpdir()`, so a
|
|
115
115
|
* relative destination must be resolved against the CALLER's cwd first.
|
|
116
116
|
*/
|
|
117
117
|
export function resolveResumeTargetDir(to, address, vaultId) {
|
|
@@ -144,7 +144,7 @@ async function resolveGitDir(dir) {
|
|
|
144
144
|
* (kygit-invite design D5): the ignore file is part of the captured tree
|
|
145
145
|
* and touching it would break exact-state on the first `git status` after
|
|
146
146
|
* `join`/`resume`. `.git/info/exclude` is local-only, per-clone git state,
|
|
147
|
-
* exactly like the id-pins in `
|
|
147
|
+
* exactly like the id-pins in `vault-address.ts`. Idempotent — a second
|
|
148
148
|
* call on an already-excluding checkout is a no-op. Used by BOTH `join` and
|
|
149
149
|
* `resume` (restore is kind-agnostic, kygit-invite design D5).
|
|
150
150
|
*/
|
|
@@ -186,4 +186,4 @@ export async function isMessagingCacheExcludedFromGit(dir) {
|
|
|
186
186
|
return false;
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
-
//# sourceMappingURL=
|
|
189
|
+
//# sourceMappingURL=vault-restore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-restore.js","sourceRoot":"","sources":["../../src/node/vault-restore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* vault — snapshot + hardened git execution (protocol rev 41 §6.6; task 5.5).
|
|
3
3
|
*
|
|
4
4
|
* Snapshot policy: clean tree → `HEAD`; dirty → REFUSED BY DEFAULT
|
|
5
5
|
* (`SNAPSHOT_DIRTY_TREE`, before any object is created) unless
|
|
@@ -44,13 +44,13 @@
|
|
|
44
44
|
* no alternates. Repository-config `include`/`includeIf` is refused by name
|
|
45
45
|
* (git applies it before any `-c`; there is no override switch).
|
|
46
46
|
*/
|
|
47
|
-
import type {
|
|
47
|
+
import type { VaultHeadTarget } from "../namespaces/vault.types.js";
|
|
48
48
|
/** `MAX_GIT_OBJECT_BYTES` — any single object above this is `GIT_OBJECT_TOO_LARGE`. */
|
|
49
|
-
export declare const
|
|
49
|
+
export declare const VAULT_MAX_GIT_OBJECT_BYTES: number;
|
|
50
50
|
/** `refs/run402/deploys/latest` — the single protocol-owned deploy ref (round-3 H9). */
|
|
51
|
-
export declare const
|
|
51
|
+
export declare const VAULT_DEPLOY_REF = "refs/run402/deploys/latest";
|
|
52
52
|
/** Probed git version range: `[2.32, ∞)` — `GIT_CONFIG_GLOBAL` landed in 2.32. */
|
|
53
|
-
export declare const
|
|
53
|
+
export declare const VAULT_MIN_GIT_VERSION: readonly [2, 32];
|
|
54
54
|
export interface HardenedGitOptions {
|
|
55
55
|
/** Bytes written to stdin (closed immediately when omitted). */
|
|
56
56
|
input?: Uint8Array | string;
|
|
@@ -70,19 +70,19 @@ export interface HardenedGitResult {
|
|
|
70
70
|
/** NUL-separated output → entries (trailing NUL dropped). */
|
|
71
71
|
nul(): string[];
|
|
72
72
|
}
|
|
73
|
-
/** The environment every
|
|
73
|
+
/** The environment every vault git process runs under — nothing inherited except PATH. */
|
|
74
74
|
export declare function hardenedGitEnv(extra?: Record<string, string>): Record<string, string>;
|
|
75
75
|
/**
|
|
76
76
|
* The `RUN402_*` environment this process was configured with — for the ONE
|
|
77
|
-
*
|
|
78
|
-
* that clone spawns the `git-remote-
|
|
77
|
+
* vault git invocation that touches the network (`cloneVaultRemote`):
|
|
78
|
+
* that clone spawns the `git-remote-run402` helper,
|
|
79
79
|
* which must authenticate as THIS session's wallet and config dir. Under the
|
|
80
80
|
* bare {@link hardenedGitEnv} the helper saw no `RUN402_CONFIG_DIR` /
|
|
81
81
|
* `RUN402_WALLET` / `RUN402_API_BASE` and fell back to the machine's default
|
|
82
82
|
* config — a different wallet, not a member of the vault's org — so a
|
|
83
83
|
* `resume` on any machine that selects its identity by env (a laptop with
|
|
84
84
|
* several agent config dirs, a CI job, a harness with `RUN402_WALLET`) died
|
|
85
|
-
* `
|
|
85
|
+
* `VAULT_ACCESS_DENIED` "while resolving the project's vault" right
|
|
86
86
|
* after a successful claim (kygit-handoff live rerun, 2026-09-03). Only
|
|
87
87
|
* `RUN402_*` keys pass; git's own hardening is untouched.
|
|
88
88
|
*/
|
|
@@ -138,7 +138,7 @@ export interface GitInvocationRepo {
|
|
|
138
138
|
export declare function resolveGitInvocationRepo(env?: {
|
|
139
139
|
GIT_DIR?: string | undefined;
|
|
140
140
|
}, cwd?: string): Promise<GitInvocationRepo>;
|
|
141
|
-
/** `git version` parsed as [major, minor]; refuses below {@link
|
|
141
|
+
/** `git version` parsed as [major, minor]; refuses below {@link VAULT_MIN_GIT_VERSION}. */
|
|
142
142
|
export declare function probeGitVersion(cwd?: string): Promise<[number, number]>;
|
|
143
143
|
export interface GitConfigDiscoveryEnv {
|
|
144
144
|
HOME?: string;
|
|
@@ -153,18 +153,18 @@ export interface ParsedGitConfigEntry {
|
|
|
153
153
|
file: string;
|
|
154
154
|
}
|
|
155
155
|
export type GlobalExcludesRefusal = {
|
|
156
|
-
code: "
|
|
156
|
+
code: "VAULT_CONFIG_INCLUDE_REFUSED";
|
|
157
157
|
file: string;
|
|
158
158
|
key: string;
|
|
159
159
|
} | {
|
|
160
|
-
code: "
|
|
160
|
+
code: "VAULT_CONFIG_UNREADABLE";
|
|
161
161
|
file: string;
|
|
162
162
|
} | {
|
|
163
|
-
code: "
|
|
163
|
+
code: "VAULT_EXCLUDES_PATH_UNSUPPORTED";
|
|
164
164
|
file: string;
|
|
165
165
|
value: string;
|
|
166
166
|
} | {
|
|
167
|
-
code: "
|
|
167
|
+
code: "VAULT_EXCLUDES_UNREADABLE";
|
|
168
168
|
file: string;
|
|
169
169
|
};
|
|
170
170
|
export interface GlobalExcludesDiscovery {
|
|
@@ -186,20 +186,20 @@ export declare function parseGitConfigAsData(text: string, file: string): Parsed
|
|
|
186
186
|
* falling back to `~/.config/git/ignore`. Every refusal names its file.
|
|
187
187
|
*/
|
|
188
188
|
export declare function discoverGlobalExcludes(env?: GitConfigDiscoveryEnv): GlobalExcludesDiscovery;
|
|
189
|
-
export type
|
|
190
|
-
export interface
|
|
189
|
+
export type VaultRepositoryRefusalCode = "VAULT_BARE_REPOSITORY" | "VAULT_LINKED_WORKTREE" | "VAULT_SPARSE_CHECKOUT" | "VAULT_SHALLOW_CLONE" | "VAULT_SUBMODULES_UNSUPPORTED" | "GIT_OBJECT_FORMAT_UNSUPPORTED" | "VAULT_ALTERNATES_UNSUPPORTED" | "VAULT_GRAFTS_UNSUPPORTED" | "VAULT_CONFIG_INCLUDE_REFUSED" | "VAULT_NOT_A_REPOSITORY";
|
|
190
|
+
export interface VaultRepositoryInspection {
|
|
191
191
|
top_level: string;
|
|
192
192
|
git_dir: string;
|
|
193
193
|
git_common_dir: string;
|
|
194
194
|
object_format: "sha1";
|
|
195
|
-
head:
|
|
195
|
+
head: VaultHeadTarget & {
|
|
196
196
|
resolved_oid: string | null;
|
|
197
197
|
};
|
|
198
198
|
unmerged_paths: string[];
|
|
199
199
|
}
|
|
200
200
|
/** Inspect `dir`; every unsupported layout is refused with its named code. */
|
|
201
|
-
export declare function inspectRepository(dir: string): Promise<
|
|
202
|
-
export interface
|
|
201
|
+
export declare function inspectRepository(dir: string): Promise<VaultRepositoryInspection>;
|
|
202
|
+
export interface VaultSnapshotOptions {
|
|
203
203
|
/** The work tree (any directory inside it). */
|
|
204
204
|
dir: string;
|
|
205
205
|
/** Discovery environment; defaults to the process's HOME / XDG_CONFIG_HOME. */
|
|
@@ -214,30 +214,30 @@ export interface GitvaultSnapshotOptions {
|
|
|
214
214
|
* Capture a dirty tree anyway. Default `false` — a dirty tree (any
|
|
215
215
|
* modified/staged tracked path, or any untracked-not-ignored path) is
|
|
216
216
|
* refused with `SNAPSHOT_DIRTY_TREE` before any object is created, in
|
|
217
|
-
* BOTH capture lanes (manual `repos
|
|
217
|
+
* BOTH capture lanes (manual `repos capture` and the deploy-lane
|
|
218
218
|
* capture). Has no effect on a clean tree, and never overrides
|
|
219
219
|
* `SNAPSHOT_CONFLICTED_INDEX` (an unmerged index is checked first and
|
|
220
|
-
* refuses regardless). See {@link
|
|
221
|
-
* {@link
|
|
220
|
+
* refuses regardless). See {@link VaultSnapshot.modified_captured} /
|
|
221
|
+
* {@link VaultSnapshot.untracked_captured} for the disclosure this
|
|
222
222
|
* produces once set.
|
|
223
223
|
*/
|
|
224
224
|
allowDirty?: boolean;
|
|
225
225
|
}
|
|
226
226
|
/** How many dirty-tree paths `SNAPSHOT_DIRTY_TREE`'s `details.modified`/`details.untracked` list before capping. */
|
|
227
227
|
export declare const SNAPSHOT_DIRTY_TREE_LIST_CAP = 500;
|
|
228
|
-
export interface
|
|
228
|
+
export interface VaultSnapshotRefusalPath {
|
|
229
229
|
path: string;
|
|
230
230
|
filter: string;
|
|
231
231
|
}
|
|
232
|
-
export interface
|
|
232
|
+
export interface VaultSnapshot {
|
|
233
233
|
/** `head` = the tree was clean and the snapshot IS `HEAD`; `synthetic` = a commit was created for a dirty tree. */
|
|
234
234
|
kind: "head" | "synthetic";
|
|
235
|
-
/** The snapshot commit oid — the `
|
|
235
|
+
/** The snapshot commit oid — the `vault_commit`. */
|
|
236
236
|
oid: string;
|
|
237
237
|
/** The tree the snapshot resolves to. */
|
|
238
238
|
tree_oid: string;
|
|
239
239
|
/** What `HEAD` was at capture — symref (possibly unborn) or detached. */
|
|
240
|
-
head:
|
|
240
|
+
head: VaultHeadTarget;
|
|
241
241
|
/** `HEAD`'s commit when it had one. */
|
|
242
242
|
head_oid: string | null;
|
|
243
243
|
/** Paths included in a synthetic commit (tracked + untracked-not-ignored); empty for `head`. */
|
|
@@ -249,7 +249,7 @@ export interface GitvaultSnapshot {
|
|
|
249
249
|
* correspondence check re-derives — NOT the whole working directory, and
|
|
250
250
|
* deliberately NOT gitignored build output (see {@link capturedSetDigest}).
|
|
251
251
|
*/
|
|
252
|
-
captured:
|
|
252
|
+
captured: VaultCapturedFile[];
|
|
253
253
|
/** `sha256` over {@link captured} — the value re-derived before a plan commits. */
|
|
254
254
|
captured_digest: string;
|
|
255
255
|
/** The global excludes file honored (as data), when one existed. */
|
|
@@ -270,7 +270,7 @@ export interface GitvaultSnapshot {
|
|
|
270
270
|
untracked_captured: string[];
|
|
271
271
|
}
|
|
272
272
|
/** One member of the captured set: path, mode, and the oid of its RAW bytes (`--no-filters`). */
|
|
273
|
-
export interface
|
|
273
|
+
export interface VaultCapturedFile {
|
|
274
274
|
path: string;
|
|
275
275
|
mode: "100644" | "100755" | "120000";
|
|
276
276
|
oid: string;
|
|
@@ -287,7 +287,7 @@ export interface GitvaultCapturedFile {
|
|
|
287
287
|
* guarantee this digest buys is "the captured source did not change while the
|
|
288
288
|
* artifacts were produced", NOT "the artifacts are a function of that source".
|
|
289
289
|
*/
|
|
290
|
-
export declare function capturedSetDigest(files:
|
|
290
|
+
export declare function capturedSetDigest(files: VaultCapturedFile[]): string;
|
|
291
291
|
/**
|
|
292
292
|
* Re-derive the captured set from the work tree, without writing any object.
|
|
293
293
|
*
|
|
@@ -298,32 +298,32 @@ export declare function capturedSetDigest(files: GitvaultCapturedFile[]): string
|
|
|
298
298
|
export declare function deriveCapturedSet(options: {
|
|
299
299
|
top_level: string;
|
|
300
300
|
global_excludes_path?: string | null;
|
|
301
|
-
}): Promise<
|
|
301
|
+
}): Promise<VaultCapturedFile[]>;
|
|
302
302
|
/** What changed between two captured sets. Empty on every list means the set is byte-identical. */
|
|
303
|
-
export interface
|
|
303
|
+
export interface VaultCapturedSetDrift {
|
|
304
304
|
added: string[];
|
|
305
305
|
removed: string[];
|
|
306
306
|
modified: string[];
|
|
307
307
|
}
|
|
308
308
|
/** Name the paths that moved — added, removed, or changed content/mode. */
|
|
309
|
-
export declare function diffCapturedSets(before:
|
|
309
|
+
export declare function diffCapturedSets(before: VaultCapturedFile[], after: VaultCapturedFile[]): VaultCapturedSetDrift;
|
|
310
310
|
/** True when nothing in the captured set moved. */
|
|
311
|
-
export declare function capturedSetUnchanged(drift:
|
|
311
|
+
export declare function capturedSetUnchanged(drift: VaultCapturedSetDrift): boolean;
|
|
312
312
|
/**
|
|
313
313
|
* Capture the work tree per the §6.6 policy. Branches, index, and work tree
|
|
314
314
|
* are left byte-identical; a synthetic commit lives only in the object
|
|
315
315
|
* database (plus the local deploy ref when enabled).
|
|
316
316
|
*/
|
|
317
|
-
export declare function captureSnapshot(options:
|
|
317
|
+
export declare function captureSnapshot(options: VaultSnapshotOptions): Promise<VaultSnapshot>;
|
|
318
318
|
/** `git check-attr filter` over paths; returns every path whose `filter` attribute is set (LFS included). */
|
|
319
|
-
export declare function detectActiveFilters(top: string, paths: string[]): Promise<
|
|
319
|
+
export declare function detectActiveFilters(top: string, paths: string[]): Promise<VaultSnapshotRefusalPath[]>;
|
|
320
320
|
/**
|
|
321
321
|
* Sensitive untracked-path denylist (design D10, verbatim). Applies to the
|
|
322
322
|
* UNTRACKED set only — a tracked file is the user's own committed choice and
|
|
323
323
|
* is never filtered by this list. `--include-sensitive <glob>` re-admits a
|
|
324
324
|
* named path by matching the SAME glob grammar against the candidate.
|
|
325
325
|
*/
|
|
326
|
-
export declare const
|
|
326
|
+
export declare const VAULT_HANDOFF_SENSITIVE_DENYLIST: readonly string[];
|
|
327
327
|
/**
|
|
328
328
|
* A slash-free glob matches the path's BASENAME at any depth (gitignore's
|
|
329
329
|
* "no slash" rule). A glob ending `/**` (e.g. `.aws/**`) matches the named
|
|
@@ -335,8 +335,8 @@ export declare const GITVAULT_HANDOFF_SENSITIVE_DENYLIST: readonly string[];
|
|
|
335
335
|
export declare function globMatchesGitPath(glob: string, relPath: string): boolean;
|
|
336
336
|
/** True iff `relPath` (an untracked-not-ignored path) matches the sensitive denylist and is not re-admitted by `includeSensitive`. */
|
|
337
337
|
export declare function isHandoffSensitivePath(relPath: string, includeSensitive?: readonly string[]): boolean;
|
|
338
|
-
/** What {@link
|
|
339
|
-
export interface
|
|
338
|
+
/** What {@link VaultHandoffCaptureOptions.message} learns once capture figures are known — everything a Handoff Note's `capture` block needs, before the outer commit exists. */
|
|
339
|
+
export interface VaultHandoffCaptureStats {
|
|
340
340
|
base_head_oid: string;
|
|
341
341
|
/** `HEAD`'s symref name (`refs/heads/<branch>`, stripped) — `null` on a detached HEAD. */
|
|
342
342
|
branch: string | null;
|
|
@@ -345,7 +345,7 @@ export interface GitvaultHandoffCaptureStats {
|
|
|
345
345
|
sensitive_excluded: string[];
|
|
346
346
|
ignored_not_transferred_count: number;
|
|
347
347
|
}
|
|
348
|
-
export interface
|
|
348
|
+
export interface VaultHandoffCaptureOptions {
|
|
349
349
|
/** The work tree (any directory inside it). */
|
|
350
350
|
dir: string;
|
|
351
351
|
env?: GitConfigDiscoveryEnv;
|
|
@@ -361,7 +361,7 @@ export interface GitvaultHandoffCaptureOptions {
|
|
|
361
361
|
* commits (index/untracked) are already unreachable garbage at that
|
|
362
362
|
* point, exactly as if the capture had never run.
|
|
363
363
|
*/
|
|
364
|
-
message: string | ((stats:
|
|
364
|
+
message: string | ((stats: VaultHandoffCaptureStats) => string);
|
|
365
365
|
now?: () => Date;
|
|
366
366
|
/** Re-admit named untracked paths the sensitive denylist would otherwise exclude. */
|
|
367
367
|
includeSensitive?: string[];
|
|
@@ -376,13 +376,13 @@ export interface GitvaultHandoffCaptureOptions {
|
|
|
376
376
|
* nothing untracked survives the denylist). Restore is `git clone` at
|
|
377
377
|
* `base_head_oid` then `git stash apply --index <oid>`.
|
|
378
378
|
*/
|
|
379
|
-
export interface
|
|
379
|
+
export interface VaultHandoffSnapshot {
|
|
380
380
|
oid: string;
|
|
381
381
|
tree_oid: string;
|
|
382
382
|
base_head_oid: string;
|
|
383
383
|
index_commit_oid: string;
|
|
384
384
|
untracked_commit_oid: string;
|
|
385
|
-
head:
|
|
385
|
+
head: VaultHeadTarget;
|
|
386
386
|
top_level: string;
|
|
387
387
|
/** Tracked paths whose on-disk content differs from `base_head_oid`'s tree (staged, unstaged, or both) and are present in `tree_oid`. */
|
|
388
388
|
modified_captured: string[];
|
|
@@ -392,7 +392,7 @@ export interface GitvaultHandoffSnapshot {
|
|
|
392
392
|
sensitive_excluded: string[];
|
|
393
393
|
/** Ignored (gitignore/exclude) files present on disk — never transferred, counted only. */
|
|
394
394
|
ignored_not_transferred_count: number;
|
|
395
|
-
captured:
|
|
395
|
+
captured: VaultCapturedFile[];
|
|
396
396
|
captured_digest: string;
|
|
397
397
|
global_excludes_path: string | null;
|
|
398
398
|
}
|
|
@@ -403,7 +403,7 @@ export interface GitvaultHandoffSnapshot {
|
|
|
403
403
|
* shallow/LFS layouts) via {@link inspectRepository} + {@link
|
|
404
404
|
* detectActiveFilters}; the shape below is the ONLY thing new.
|
|
405
405
|
*/
|
|
406
|
-
export declare function captureHandoffSnapshot(options:
|
|
406
|
+
export declare function captureHandoffSnapshot(options: VaultHandoffCaptureOptions): Promise<VaultHandoffSnapshot>;
|
|
407
407
|
/**
|
|
408
408
|
* Check out `oid`'s tree into `targetDir` through a temporary index
|
|
409
409
|
* (`read-tree` + `checkout-index`) — filter-free, hook-free, and isolated
|
|
@@ -412,8 +412,8 @@ export declare function captureHandoffSnapshot(options: GitvaultHandoffCaptureOp
|
|
|
412
412
|
export declare function materializeSnapshot(repoDir: string, oid: string, targetDir?: string): Promise<string>;
|
|
413
413
|
/** `snapshot_oid_hmac` = HMAC(K_digest("snapshot_oid"), JCS({oid, format:"sha1"})) — the keyed commitment the platform compares without ever seeing the oid. */
|
|
414
414
|
export declare function snapshotCommitment(kRepo: Uint8Array, repoId: string, epoch: string, oid: string): string;
|
|
415
|
-
/** The client-side `
|
|
416
|
-
export declare function
|
|
415
|
+
/** The client-side `vault_commit` line — printed ALWAYS; commit ids never reach the platform. */
|
|
416
|
+
export declare function vaultCommitLine(snapshot: Pick<VaultSnapshot, "oid" | "kind">): string;
|
|
417
417
|
/** Object sizes for a set of oids (`cat-file --batch-check`), for the per-object cap on tracked history. */
|
|
418
418
|
export declare function findOversizeObjects(repoDir: string, tips: string[], cap?: number): Promise<Array<{
|
|
419
419
|
oid: string;
|
|
@@ -434,10 +434,10 @@ export declare function isAncestor(repoDir: string, ancestor: string, descendant
|
|
|
434
434
|
export declare function hasObject(repoDir: string, oid: string): Promise<boolean>;
|
|
435
435
|
/**
|
|
436
436
|
* Which of `oids` exist locally — ONE `cat-file --batch-check` process for
|
|
437
|
-
* the whole set (
|
|
437
|
+
* the whole set (vault-delta-fetch task 3.1), identical per-oid
|
|
438
438
|
* semantics to {@link hasObject}. `--batch-check` answers `<oid> <type>
|
|
439
439
|
* <size>` for a present object and `<oid> missing` otherwise, one line per
|
|
440
440
|
* input line, so presence is exactly "second column is not `missing`".
|
|
441
441
|
*/
|
|
442
442
|
export declare function hasObjects(repoDir: string, oids: string[]): Promise<Set<string>>;
|
|
443
|
-
//# sourceMappingURL=
|
|
443
|
+
//# sourceMappingURL=vault-snapshot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault-snapshot.d.ts","sourceRoot":"","sources":["../../src/node/vault-snapshot.ts"],"names":[],"mappings":"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"}
|