run402 4.39.0 → 4.40.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/cli.mjs +1 -1
- package/git-remote-run402.mjs +15 -1
- package/lib/assets.mjs +19 -26
- package/lib/cdn.mjs +4 -6
- package/lib/command-manifest.mjs +20 -0
- package/lib/config.mjs +30 -0
- package/lib/deploy-v2.mjs +15 -0
- package/lib/doctor.mjs +33 -0
- package/lib/gitvault.mjs +348 -1
- package/package.json +1 -1
- package/sdk/dist/namespaces/gitvault.crypto.d.ts +10 -0
- package/sdk/dist/namespaces/gitvault.crypto.d.ts.map +1 -1
- package/sdk/dist/namespaces/gitvault.crypto.js +10 -0
- package/sdk/dist/namespaces/gitvault.crypto.js.map +1 -1
- package/sdk/dist/namespaces/gitvault.d.ts +141 -4
- package/sdk/dist/namespaces/gitvault.d.ts.map +1 -1
- package/sdk/dist/namespaces/gitvault.js +226 -3
- package/sdk/dist/namespaces/gitvault.js.map +1 -1
- package/sdk/dist/node/gitvault-keystore.d.ts +11 -1
- package/sdk/dist/node/gitvault-keystore.d.ts.map +1 -1
- package/sdk/dist/node/gitvault-keystore.js.map +1 -1
- package/sdk/dist/node/gitvault-mirror-backend.d.ts +88 -0
- package/sdk/dist/node/gitvault-mirror-backend.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-mirror-backend.js +374 -0
- package/sdk/dist/node/gitvault-mirror-backend.js.map +1 -0
- package/sdk/dist/node/gitvault-mirror-config.d.ts +53 -0
- package/sdk/dist/node/gitvault-mirror-config.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-mirror-config.js +112 -0
- package/sdk/dist/node/gitvault-mirror-config.js.map +1 -0
- package/sdk/dist/node/gitvault-mirror.d.ts +120 -0
- package/sdk/dist/node/gitvault-mirror.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-mirror.js +464 -0
- package/sdk/dist/node/gitvault-mirror.js.map +1 -0
- package/sdk/dist/node/gitvault-publication.d.ts +131 -0
- package/sdk/dist/node/gitvault-publication.d.ts.map +1 -1
- package/sdk/dist/node/gitvault-publication.js +145 -1
- package/sdk/dist/node/gitvault-publication.js.map +1 -1
- package/sdk/dist/node/gitvault-recover.d.ts +136 -0
- package/sdk/dist/node/gitvault-recover.d.ts.map +1 -0
- package/sdk/dist/node/gitvault-recover.js +412 -0
- package/sdk/dist/node/gitvault-recover.js.map +1 -0
- package/sdk/dist/node/gitvault-snapshot.d.ts +8 -0
- package/sdk/dist/node/gitvault-snapshot.d.ts.map +1 -1
- package/sdk/dist/node/gitvault-snapshot.js +11 -0
- package/sdk/dist/node/gitvault-snapshot.js.map +1 -1
|
@@ -29,14 +29,17 @@
|
|
|
29
29
|
* never persisted into an agent-surface result store, and never logged.
|
|
30
30
|
*/
|
|
31
31
|
import type { Client } from "../kernel.js";
|
|
32
|
-
import { GITVAULT_TERMINAL_LOSS_DOCTOR_TEXT, GITVAULT_TERMINAL_LOSS_STATEMENT } from "./gitvault.crypto.js";
|
|
33
|
-
import type { GitvaultCaptureReceipt, GitvaultHeadsListingPage, GitvaultHeadsListingRequest, GitvaultHeadTarget } from "./gitvault.types.js";
|
|
32
|
+
import { GITVAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT, GITVAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT, GITVAULT_TERMINAL_LOSS_DOCTOR_TEXT, GITVAULT_TERMINAL_LOSS_STATEMENT } from "./gitvault.crypto.js";
|
|
33
|
+
import type { GitvaultCaptureReceipt, GitvaultHeadsListingPage, GitvaultHeadsListingRequest, GitvaultHeadTarget, GitvaultRecoveryReceipt } from "./gitvault.types.js";
|
|
34
34
|
import type { GitvaultMaintenanceLease, GitvaultMaintenanceLeaseRequest, GitvaultTransport, GitvaultVaultRecord } from "../node/gitvault-publication.js";
|
|
35
35
|
import type { GitvaultDeployOptions, GitvaultDeployResult } from "../node/gitvault-deploy.js";
|
|
36
|
-
import type { GitvaultPublishResult, GitvaultRefMap, GitvaultVerifiedState } from "../node/gitvault-publication.js";
|
|
36
|
+
import type { GitvaultPublishResult, GitvaultRefMap, GitvaultReconcileEnvelopeRecipientsResult, GitvaultVerifiedState } from "../node/gitvault-publication.js";
|
|
37
37
|
import type { GitvaultCreationResult } from "../node/gitvault-creation-journal.js";
|
|
38
38
|
import type { GitvaultKeystore } from "../node/gitvault-keystore.js";
|
|
39
39
|
import type { GitvaultSnapshot } from "../node/gitvault-snapshot.js";
|
|
40
|
+
import type { GitvaultMirrorConfig, GitvaultMirrorCredential } from "../node/gitvault-mirror-config.js";
|
|
41
|
+
import type { GitvaultMirrorPushResult, GitvaultMirrorSyncSummary } from "../node/gitvault-mirror.js";
|
|
42
|
+
import type { GitvaultRecoverResult, GitvaultVerifyReport } from "../node/gitvault-recover.js";
|
|
40
43
|
/** What `r.gitvault.status()` reports. Never carries key material. */
|
|
41
44
|
export interface GitvaultStatus {
|
|
42
45
|
repo_id: string | null;
|
|
@@ -287,7 +290,32 @@ export interface GitvaultHandle {
|
|
|
287
290
|
/** The full protocol object — every verb below is built on it. */
|
|
288
291
|
vault: import("../node/gitvault-publication.js").GitvaultVault;
|
|
289
292
|
}
|
|
293
|
+
/** {@link Gitvault.push}'s best-effort envelope-recipient reconcile outcome, reported beside (never folded into) the vault result — same non-blocking contract as {@link GitvaultMirrorPushResult}. */
|
|
294
|
+
export interface GitvaultReconcileEnvelopeRecipientsPushResult {
|
|
295
|
+
attempted: boolean;
|
|
296
|
+
outcome: "reconciled" | "skipped_error";
|
|
297
|
+
result?: GitvaultReconcileEnvelopeRecipientsResult;
|
|
298
|
+
error?: string;
|
|
299
|
+
}
|
|
290
300
|
/** What {@link Gitvault.openOrCreate} did. `created` is `null` exactly when `found` is `true`. */
|
|
301
|
+
/** `run402 gitvault mirror status` — what this machine and the mirror each believe (design D8: both honesty statements ride every response). */
|
|
302
|
+
export interface GitvaultMirrorStatus {
|
|
303
|
+
repo_id: string;
|
|
304
|
+
configured: boolean;
|
|
305
|
+
/** `s3://bucket/prefix` or a directory path — never a credential. */
|
|
306
|
+
destination: string | null;
|
|
307
|
+
credential_kind: "profile" | "ambient" | null;
|
|
308
|
+
/** The newest generation the MIRROR holds and chain-verifies (keyless). `null` when unconfigured, unreachable, or empty. */
|
|
309
|
+
mirrored_generation: string | null;
|
|
310
|
+
/** The LIVE vault's newest generation (one vault-record read). `null` when unconfigured or the vault has never captured. */
|
|
311
|
+
newest_generation: string | null;
|
|
312
|
+
/** `null` when either side is unknown (never fabricated from a partial read). */
|
|
313
|
+
is_current: boolean | null;
|
|
314
|
+
/** Present exactly when `is_current === false`. */
|
|
315
|
+
closing_command: string | null;
|
|
316
|
+
validity_not_freshness: typeof GITVAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT;
|
|
317
|
+
keystore_still_required: typeof GITVAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT;
|
|
318
|
+
}
|
|
291
319
|
export interface GitvaultOpenOrCreateResult {
|
|
292
320
|
handle: GitvaultHandle;
|
|
293
321
|
/** `true` when the vault already existed — nothing was allocated by this call. */
|
|
@@ -301,6 +329,28 @@ export interface GitvaultOpenOrCreateResult {
|
|
|
301
329
|
} | null;
|
|
302
330
|
terminal_loss_statement: typeof GITVAULT_TERMINAL_LOSS_STATEMENT;
|
|
303
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* {@link Gitvault.deploy}'s post-push glue: attach the best-effort
|
|
334
|
+
* mirror/reconcile hooks to a deploy result, gated on whether this deploy
|
|
335
|
+
* actually landed a new generation in the vault. Extracted as a standalone
|
|
336
|
+
* function (rather than inlined in `deploy()`) purely so the gating can be
|
|
337
|
+
* unit-tested with fake thunks — the real hooks (`#tryMirrorPush` /
|
|
338
|
+
* `#tryReconcileEnvelopeRecipients`) are private class methods that already
|
|
339
|
+
* catch everything and never reject, so this function does not need its own
|
|
340
|
+
* try/catch: it only decides WHETHER to call them and how to merge what they
|
|
341
|
+
* resolve to.
|
|
342
|
+
*
|
|
343
|
+
* `DEPLOYED_AND_VAULTED` and `DEPLOY_FAILED_VAULTED` are the only two
|
|
344
|
+
* outcomes that carry a `generation` — a vault push actually landed. The
|
|
345
|
+
* other three (`DEPLOY_BLOCKED_PUSH_FAILED`, `DEPLOY_FAILED_UNVAULTED`,
|
|
346
|
+
* `DEPLOYED_UNVAULTED_OVERRIDE`) published nothing new, so `mirror_push` /
|
|
347
|
+
* `reconcile_recipients` are OMITTED rather than a faked `skipped_*` value —
|
|
348
|
+
* there is nothing this deploy did that either hook could report on.
|
|
349
|
+
*/
|
|
350
|
+
export declare function attachGitvaultDeployHooks(result: GitvaultDeployResult, mirror: () => Promise<GitvaultMirrorPushResult>, reconcile: () => Promise<GitvaultReconcileEnvelopeRecipientsPushResult>): Promise<GitvaultDeployResult & {
|
|
351
|
+
mirror_push?: GitvaultMirrorPushResult;
|
|
352
|
+
reconcile_recipients?: GitvaultReconcileEnvelopeRecipientsPushResult;
|
|
353
|
+
}>;
|
|
304
354
|
export declare class Gitvault {
|
|
305
355
|
#private;
|
|
306
356
|
constructor(client: Client);
|
|
@@ -594,6 +644,8 @@ export declare class Gitvault {
|
|
|
594
644
|
snapshot: GitvaultSnapshot;
|
|
595
645
|
gitvault_commit: string;
|
|
596
646
|
gitvault_commit_line: string;
|
|
647
|
+
mirror_push: GitvaultMirrorPushResult;
|
|
648
|
+
reconcile_recipients: GitvaultReconcileEnvelopeRecipientsPushResult;
|
|
597
649
|
}>;
|
|
598
650
|
/**
|
|
599
651
|
* A REAL preview of what {@link push} would publish (kychee-com/run402#565)
|
|
@@ -706,6 +758,25 @@ export declare class Gitvault {
|
|
|
706
758
|
* from its verified prefix rather than restarting.
|
|
707
759
|
*/
|
|
708
760
|
verify(options?: GitvaultVaultHandleOptions): Promise<GitvaultVerifiedState>;
|
|
761
|
+
/**
|
|
762
|
+
* Wrap this vault's current epoch key to every org member who has
|
|
763
|
+
* published an encryption key but has no `key_envelope` on this vault yet
|
|
764
|
+
* — gitvault-human-envelopes task 4.1's ADD-path workaround. See {@link
|
|
765
|
+
* import("../node/gitvault-publication.js").GitvaultVault.
|
|
766
|
+
* reconcileEnvelopeRecipients} for the full design (TOFU pinning, the
|
|
767
|
+
* gateway `public_key` gap, and why this is a workaround rather than the
|
|
768
|
+
* eventual epoch-rotation design).
|
|
769
|
+
*
|
|
770
|
+
* `run402 gitvault reconcile [--repo <id>]` is the explicit standalone
|
|
771
|
+
* CLI surface (design D5's "session start" hook). `deploy()` runs this
|
|
772
|
+
* itself, best-effort, whenever a deploy lands a new generation in the
|
|
773
|
+
* vault — design D5's "deploy time" hook, "the same 'one command every
|
|
774
|
+
* agent runs' argument that decided deploy-implies-capture." `push()`
|
|
775
|
+
* (capture-and-publish outside a deploy) runs the identical hook after
|
|
776
|
+
* every successful publish, for the vault-only-project cadence. See
|
|
777
|
+
* `#tryReconcileEnvelopeRecipients` below for both call sites.
|
|
778
|
+
*/
|
|
779
|
+
reconcileEnvelopeRecipients(options?: GitvaultVaultHandleOptions): Promise<GitvaultReconcileEnvelopeRecipientsResult>;
|
|
709
780
|
/**
|
|
710
781
|
* The push-gated deploy: both lanes under one fresh `capture_id`, resolving
|
|
711
782
|
* to exactly one of five outcomes — `DEPLOYED_AND_VAULTED`,
|
|
@@ -715,8 +786,27 @@ export declare class Gitvault {
|
|
|
715
786
|
* The push is never gated on deploy success, and a build that fails before a
|
|
716
787
|
* canonical apply plan exists still captures (with a null plan digest, so no
|
|
717
788
|
* activation token can be minted from it).
|
|
789
|
+
*
|
|
790
|
+
* `run402 deploy` is design D5's PRIMARY envelope-recipient reconcile hook
|
|
791
|
+
* ("the same 'one command every agent runs' argument that decided
|
|
792
|
+
* deploy-implies-capture") and design D6's primary dual-push mirror trigger
|
|
793
|
+
* — both fire HERE, not inside {@link runGitvaultDeploy} itself, mirroring
|
|
794
|
+
* {@link push}'s exact non-blocking contract: best-effort, NEVER throw,
|
|
795
|
+
* NEVER alter the deploy outcome already resolved above, reported BESIDE it
|
|
796
|
+
* on `mirror_push` / `reconcile_recipients`. They fire only when this
|
|
797
|
+
* deploy actually landed a new generation in the vault
|
|
798
|
+
* (`DEPLOYED_AND_VAULTED` / `DEPLOY_FAILED_VAULTED` — the outcomes carrying
|
|
799
|
+
* a `generation`); the other three outcomes published nothing new, so
|
|
800
|
+
* there is nothing to mirror or reconcile against ({@link
|
|
801
|
+
* import("../node/gitvault-mirror.js").mirrorPushForGeneration}'s own
|
|
802
|
+
* contract: "fires after an ordinary vault push/deploy produces a new
|
|
803
|
+
* generation"). Both fields are therefore OMITTED — never a faked
|
|
804
|
+
* `skipped_*` outcome — when no generation landed.
|
|
718
805
|
*/
|
|
719
|
-
deploy(options: Omit<GitvaultDeployOptions, "vault"> & GitvaultVaultHandleOptions): Promise<GitvaultDeployResult
|
|
806
|
+
deploy(options: Omit<GitvaultDeployOptions, "vault"> & GitvaultVaultHandleOptions): Promise<GitvaultDeployResult & {
|
|
807
|
+
mirror_push?: GitvaultMirrorPushResult;
|
|
808
|
+
reconcile_recipients?: GitvaultReconcileEnvelopeRecipientsPushResult;
|
|
809
|
+
}>;
|
|
720
810
|
/**
|
|
721
811
|
* Drain every unvaulted-override journal on this machine: push the exact
|
|
722
812
|
* journaled snapshot and present the capture receipt for full-field
|
|
@@ -734,6 +824,53 @@ export declare class Gitvault {
|
|
|
734
824
|
refs: Record<string, string>;
|
|
735
825
|
generation: string;
|
|
736
826
|
}>;
|
|
827
|
+
/**
|
|
828
|
+
* Configure (or replace) the customer-owned mirror destination for one
|
|
829
|
+
* vault. Client-side ONLY — the destination + credential NAME are written
|
|
830
|
+
* beside the keystore (design D2); run402 never sees or stores a raw
|
|
831
|
+
* secret value. `s3://<bucket>/<prefix>` needs `credential`; a plain
|
|
832
|
+
* filesystem path needs none.
|
|
833
|
+
*/
|
|
834
|
+
mirrorSet(options: GitvaultVaultHandleOptions & {
|
|
835
|
+
destination_url: string;
|
|
836
|
+
credential?: GitvaultMirrorCredential;
|
|
837
|
+
region?: string;
|
|
838
|
+
endpoint?: string;
|
|
839
|
+
}): Promise<GitvaultMirrorConfig>;
|
|
840
|
+
/** Remove the mirror config for one vault. Never touches the mirror's own bytes (design: config removal ≠ data deletion). */
|
|
841
|
+
mirrorRemove(options?: GitvaultVaultHandleOptions): Promise<{
|
|
842
|
+
repo_id: string;
|
|
843
|
+
removed: boolean;
|
|
844
|
+
}>;
|
|
845
|
+
/**
|
|
846
|
+
* What this machine and the mirror each believe: whether a mirror is
|
|
847
|
+
* configured, the newest generation the MIRROR holds and can chain-verify
|
|
848
|
+
* (keyless — never touches keys), the LIVE vault's newest generation (one
|
|
849
|
+
* read of the vault record), and — when they disagree — the closing
|
|
850
|
+
* command. Both honesty statements (design D8) ride every response.
|
|
851
|
+
*/
|
|
852
|
+
mirrorStatus(options?: GitvaultVaultHandleOptions): Promise<GitvaultMirrorStatus>;
|
|
853
|
+
/** List the vault's stored objects, diff against the mirror, fetch + hash-verify + write what's missing, in admission order. Resumable and idempotent. */
|
|
854
|
+
mirrorSync(options?: GitvaultVaultHandleOptions): Promise<GitvaultMirrorSyncSummary>;
|
|
855
|
+
/** Keyless integrity probe against the CONFIGURED mirror: discovery + chain verification + closure/absence adjudication, never decryption (`run402 gitvault mirror verify`). */
|
|
856
|
+
mirrorVerify(options?: GitvaultVaultHandleOptions): Promise<GitvaultVerifyReport>;
|
|
857
|
+
/**
|
|
858
|
+
* `r402s-recover` (design D4): rebuild a working git repository straight
|
|
859
|
+
* from a mirrored `source/<repo_id>/` prefix — NO SERVER INVOLVED. `source`
|
|
860
|
+
* is `s3://<bucket>[/<prefix>]` or a local directory; when it names more
|
|
861
|
+
* than one mirrored vault, pass `repo_id` explicitly. Recovery proves
|
|
862
|
+
* validity, never freshness (both honesty statements ride every result).
|
|
863
|
+
*/
|
|
864
|
+
recover(options: {
|
|
865
|
+
source: string;
|
|
866
|
+
out_dir: string;
|
|
867
|
+
repo_id?: string;
|
|
868
|
+
credential?: GitvaultMirrorCredential;
|
|
869
|
+
region?: string;
|
|
870
|
+
endpoint?: string;
|
|
871
|
+
recovery_receipt?: GitvaultRecoveryReceipt;
|
|
872
|
+
keystore_root?: string;
|
|
873
|
+
}): Promise<GitvaultRecoverResult>;
|
|
737
874
|
}
|
|
738
875
|
/**
|
|
739
876
|
* The composite escalation trigger (design D7): ANY of these crossing its
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gitvault.d.ts","sourceRoot":"","sources":["../../src/namespaces/gitvault.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gitvault.d.ts","sourceRoot":"","sources":["../../src/namespaces/gitvault.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
* never persisted into an agent-surface result store, and never logged.
|
|
30
30
|
*/
|
|
31
31
|
import { LocalError } from "../errors.js";
|
|
32
|
-
import { GITVAULT_TERMINAL_LOSS_DOCTOR_TEXT, GITVAULT_TERMINAL_LOSS_STATEMENT } from "./gitvault.crypto.js";
|
|
32
|
+
import { GITVAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT, GITVAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT, GITVAULT_TERMINAL_LOSS_DOCTOR_TEXT, GITVAULT_TERMINAL_LOSS_STATEMENT, } from "./gitvault.crypto.js";
|
|
33
33
|
/** A keystore path, or `null` when there is no id to derive it from (or it is malformed). */
|
|
34
34
|
function safePath(derive, repoId) {
|
|
35
35
|
if (!repoId)
|
|
@@ -49,6 +49,34 @@ async function nodeOnly(load, verb) {
|
|
|
49
49
|
throw new LocalError(`\`r.gitvault.${verb}\` needs the Node runtime (keystore + git); import it from a Node process, or use the read-only vault methods in a browser.`, `running gitvault ${verb}`, { code: "GITVAULT_NODE_ONLY", details: { cause: e instanceof Error ? e.message : String(e) } });
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* {@link Gitvault.deploy}'s post-push glue: attach the best-effort
|
|
54
|
+
* mirror/reconcile hooks to a deploy result, gated on whether this deploy
|
|
55
|
+
* actually landed a new generation in the vault. Extracted as a standalone
|
|
56
|
+
* function (rather than inlined in `deploy()`) purely so the gating can be
|
|
57
|
+
* unit-tested with fake thunks — the real hooks (`#tryMirrorPush` /
|
|
58
|
+
* `#tryReconcileEnvelopeRecipients`) are private class methods that already
|
|
59
|
+
* catch everything and never reject, so this function does not need its own
|
|
60
|
+
* try/catch: it only decides WHETHER to call them and how to merge what they
|
|
61
|
+
* resolve to.
|
|
62
|
+
*
|
|
63
|
+
* `DEPLOYED_AND_VAULTED` and `DEPLOY_FAILED_VAULTED` are the only two
|
|
64
|
+
* outcomes that carry a `generation` — a vault push actually landed. The
|
|
65
|
+
* other three (`DEPLOY_BLOCKED_PUSH_FAILED`, `DEPLOY_FAILED_UNVAULTED`,
|
|
66
|
+
* `DEPLOYED_UNVAULTED_OVERRIDE`) published nothing new, so `mirror_push` /
|
|
67
|
+
* `reconcile_recipients` are OMITTED rather than a faked `skipped_*` value —
|
|
68
|
+
* there is nothing this deploy did that either hook could report on.
|
|
69
|
+
*/
|
|
70
|
+
export async function attachGitvaultDeployHooks(result, mirror, reconcile) {
|
|
71
|
+
if (result.outcome !== "DEPLOYED_AND_VAULTED" && result.outcome !== "DEPLOY_FAILED_VAULTED")
|
|
72
|
+
return result;
|
|
73
|
+
// Sequential, not Promise.all — same ordering push() uses, so a reconcile
|
|
74
|
+
// failure can never be misread as a mirror failure in a log line that
|
|
75
|
+
// assumed ordering.
|
|
76
|
+
const mirrorPush = await mirror();
|
|
77
|
+
const reconcileRecipients = await reconcile();
|
|
78
|
+
return { ...result, mirror_push: mirrorPush, reconcile_recipients: reconcileRecipients };
|
|
79
|
+
}
|
|
52
80
|
// ─── The namespace ───────────────────────────────────────────────────────────
|
|
53
81
|
export class Gitvault {
|
|
54
82
|
#client;
|
|
@@ -685,7 +713,38 @@ export class Gitvault {
|
|
|
685
713
|
...(options.checkpoint ? { checkpoint: true } : {}),
|
|
686
714
|
};
|
|
687
715
|
const result = await handle.vault.push(push);
|
|
688
|
-
|
|
716
|
+
// Capture-time dual-push hook (design D6/task 2.4): fires only when a
|
|
717
|
+
// mirror is configured; NEVER throws, NEVER alters the vault outcome
|
|
718
|
+
// above (already returned/committed) — a mirror failure is a named
|
|
719
|
+
// pending finding reported BESIDE the vault result, on its own field.
|
|
720
|
+
const mirrorPush = await this.#tryMirrorPush(handle.repo_id, handle.keystore);
|
|
721
|
+
// Deploy-time reconcile hook (design D5's "deploy time" cadence,
|
|
722
|
+
// gitvault-human-envelopes task 4.1): fires on every successful push,
|
|
723
|
+
// best-effort — a reconcile failure (including a read-only principal
|
|
724
|
+
// with no signing key) is reported BESIDE the vault result, never a
|
|
725
|
+
// `push()` throw, same non-blocking contract as the mirror hook above.
|
|
726
|
+
const reconcileRecipients = await this.#tryReconcileEnvelopeRecipients(handle.vault);
|
|
727
|
+
return { ...result, snapshot, gitvault_commit: snapshot.oid, gitvault_commit_line: line, mirror_push: mirrorPush, reconcile_recipients: reconcileRecipients };
|
|
728
|
+
}
|
|
729
|
+
/** Best-effort dual-push: catches EVERYTHING, including the lazy module import itself, so a mirror problem can never surface as a `push()` throw. */
|
|
730
|
+
async #tryMirrorPush(repoId, keystore) {
|
|
731
|
+
try {
|
|
732
|
+
const { mirrorPushForGeneration } = await this.#mirror();
|
|
733
|
+
return await mirrorPushForGeneration(this.#client, repoId, { keystore });
|
|
734
|
+
}
|
|
735
|
+
catch (e) {
|
|
736
|
+
return { attempted: false, outcome: "skipped_no_mirror", error: e instanceof Error ? e.message : String(e) };
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
/** Best-effort envelope-recipient reconcile: catches EVERYTHING so a reconcile problem can never surface as a `push()` throw (mirrors {@link #tryMirrorPush}'s contract exactly). */
|
|
740
|
+
async #tryReconcileEnvelopeRecipients(vault) {
|
|
741
|
+
try {
|
|
742
|
+
const result = await vault.reconcileEnvelopeRecipients();
|
|
743
|
+
return { attempted: true, outcome: "reconciled", result };
|
|
744
|
+
}
|
|
745
|
+
catch (e) {
|
|
746
|
+
return { attempted: false, outcome: "skipped_error", error: e instanceof Error ? e.message : String(e) };
|
|
747
|
+
}
|
|
689
748
|
}
|
|
690
749
|
/**
|
|
691
750
|
* A REAL preview of what {@link push} would publish (kychee-com/run402#565)
|
|
@@ -1018,6 +1077,28 @@ export class Gitvault {
|
|
|
1018
1077
|
const handle = await this.open(options);
|
|
1019
1078
|
return handle.vault.verifyToNewest();
|
|
1020
1079
|
}
|
|
1080
|
+
/**
|
|
1081
|
+
* Wrap this vault's current epoch key to every org member who has
|
|
1082
|
+
* published an encryption key but has no `key_envelope` on this vault yet
|
|
1083
|
+
* — gitvault-human-envelopes task 4.1's ADD-path workaround. See {@link
|
|
1084
|
+
* import("../node/gitvault-publication.js").GitvaultVault.
|
|
1085
|
+
* reconcileEnvelopeRecipients} for the full design (TOFU pinning, the
|
|
1086
|
+
* gateway `public_key` gap, and why this is a workaround rather than the
|
|
1087
|
+
* eventual epoch-rotation design).
|
|
1088
|
+
*
|
|
1089
|
+
* `run402 gitvault reconcile [--repo <id>]` is the explicit standalone
|
|
1090
|
+
* CLI surface (design D5's "session start" hook). `deploy()` runs this
|
|
1091
|
+
* itself, best-effort, whenever a deploy lands a new generation in the
|
|
1092
|
+
* vault — design D5's "deploy time" hook, "the same 'one command every
|
|
1093
|
+
* agent runs' argument that decided deploy-implies-capture." `push()`
|
|
1094
|
+
* (capture-and-publish outside a deploy) runs the identical hook after
|
|
1095
|
+
* every successful publish, for the vault-only-project cadence. See
|
|
1096
|
+
* `#tryReconcileEnvelopeRecipients` below for both call sites.
|
|
1097
|
+
*/
|
|
1098
|
+
async reconcileEnvelopeRecipients(options = {}) {
|
|
1099
|
+
const handle = await this.open(options);
|
|
1100
|
+
return handle.vault.reconcileEnvelopeRecipients();
|
|
1101
|
+
}
|
|
1021
1102
|
/**
|
|
1022
1103
|
* The push-gated deploy: both lanes under one fresh `capture_id`, resolving
|
|
1023
1104
|
* to exactly one of five outcomes — `DEPLOYED_AND_VAULTED`,
|
|
@@ -1027,11 +1108,33 @@ export class Gitvault {
|
|
|
1027
1108
|
* The push is never gated on deploy success, and a build that fails before a
|
|
1028
1109
|
* canonical apply plan exists still captures (with a null plan digest, so no
|
|
1029
1110
|
* activation token can be minted from it).
|
|
1111
|
+
*
|
|
1112
|
+
* `run402 deploy` is design D5's PRIMARY envelope-recipient reconcile hook
|
|
1113
|
+
* ("the same 'one command every agent runs' argument that decided
|
|
1114
|
+
* deploy-implies-capture") and design D6's primary dual-push mirror trigger
|
|
1115
|
+
* — both fire HERE, not inside {@link runGitvaultDeploy} itself, mirroring
|
|
1116
|
+
* {@link push}'s exact non-blocking contract: best-effort, NEVER throw,
|
|
1117
|
+
* NEVER alter the deploy outcome already resolved above, reported BESIDE it
|
|
1118
|
+
* on `mirror_push` / `reconcile_recipients`. They fire only when this
|
|
1119
|
+
* deploy actually landed a new generation in the vault
|
|
1120
|
+
* (`DEPLOYED_AND_VAULTED` / `DEPLOY_FAILED_VAULTED` — the outcomes carrying
|
|
1121
|
+
* a `generation`); the other three outcomes published nothing new, so
|
|
1122
|
+
* there is nothing to mirror or reconcile against ({@link
|
|
1123
|
+
* import("../node/gitvault-mirror.js").mirrorPushForGeneration}'s own
|
|
1124
|
+
* contract: "fires after an ordinary vault push/deploy produces a new
|
|
1125
|
+
* generation"). Both fields are therefore OMITTED — never a faked
|
|
1126
|
+
* `skipped_*` outcome — when no generation landed.
|
|
1030
1127
|
*/
|
|
1031
1128
|
async deploy(options) {
|
|
1032
1129
|
const { runGitvaultDeploy } = await this.#deploy();
|
|
1033
1130
|
const handle = await this.open(options);
|
|
1034
|
-
|
|
1131
|
+
const result = await runGitvaultDeploy({ ...options, vault: handle.vault, repo_dir: options.repo_dir ?? process.cwd() });
|
|
1132
|
+
// Same ordering push() uses (mirror, then reconcile) — sequential, not
|
|
1133
|
+
// Promise.all, so a reconcile failure can never be misread as a mirror
|
|
1134
|
+
// failure in a log line that assumed ordering. Extracted to a standalone
|
|
1135
|
+
// function so the outcome-gating is unit-testable with fake thunks,
|
|
1136
|
+
// without standing up a live vault — see gitvault-deploy-hooks.test.ts.
|
|
1137
|
+
return attachGitvaultDeployHooks(result, () => this.#tryMirrorPush(handle.repo_id, handle.keystore), () => this.#tryReconcileEnvelopeRecipients(handle.vault));
|
|
1035
1138
|
}
|
|
1036
1139
|
/**
|
|
1037
1140
|
* Drain every unvaulted-override journal on this machine: push the exact
|
|
@@ -1053,6 +1156,114 @@ export class Gitvault {
|
|
|
1053
1156
|
const out = await handle.vault.restoreObjectsInto(options.target_dir);
|
|
1054
1157
|
return { refs: out.refs, generation: out.generation };
|
|
1055
1158
|
}
|
|
1159
|
+
// ── mirror (gitvault-mirror-and-recover, design D1/D2/D7) ─────────────────
|
|
1160
|
+
/**
|
|
1161
|
+
* Configure (or replace) the customer-owned mirror destination for one
|
|
1162
|
+
* vault. Client-side ONLY — the destination + credential NAME are written
|
|
1163
|
+
* beside the keystore (design D2); run402 never sees or stores a raw
|
|
1164
|
+
* secret value. `s3://<bucket>/<prefix>` needs `credential`; a plain
|
|
1165
|
+
* filesystem path needs none.
|
|
1166
|
+
*/
|
|
1167
|
+
async mirrorSet(options) {
|
|
1168
|
+
const [{ GitvaultKeystore }, { parseMirrorDestinationUrl, saveMirrorConfig }] = await Promise.all([this.#keystore(), this.#mirrorConfig()]);
|
|
1169
|
+
const repoId = await this.#resolveRepoId(options);
|
|
1170
|
+
const keystore = new GitvaultKeystore(options.keystore_root !== undefined ? { rootDir: options.keystore_root } : {});
|
|
1171
|
+
const destination = parseMirrorDestinationUrl(options.destination_url, { region: options.region, endpoint: options.endpoint });
|
|
1172
|
+
return saveMirrorConfig(keystore, { repo_id: repoId, destination, ...(options.credential ? { credential: options.credential } : {}) });
|
|
1173
|
+
}
|
|
1174
|
+
/** Remove the mirror config for one vault. Never touches the mirror's own bytes (design: config removal ≠ data deletion). */
|
|
1175
|
+
async mirrorRemove(options = {}) {
|
|
1176
|
+
const [{ GitvaultKeystore }, { removeMirrorConfig }] = await Promise.all([this.#keystore(), this.#mirrorConfig()]);
|
|
1177
|
+
const repoId = await this.#resolveRepoId(options);
|
|
1178
|
+
const keystore = new GitvaultKeystore(options.keystore_root !== undefined ? { rootDir: options.keystore_root } : {});
|
|
1179
|
+
return { repo_id: repoId, ...removeMirrorConfig(keystore, repoId) };
|
|
1180
|
+
}
|
|
1181
|
+
/**
|
|
1182
|
+
* What this machine and the mirror each believe: whether a mirror is
|
|
1183
|
+
* configured, the newest generation the MIRROR holds and can chain-verify
|
|
1184
|
+
* (keyless — never touches keys), the LIVE vault's newest generation (one
|
|
1185
|
+
* read of the vault record), and — when they disagree — the closing
|
|
1186
|
+
* command. Both honesty statements (design D8) ride every response.
|
|
1187
|
+
*/
|
|
1188
|
+
async mirrorStatus(options = {}) {
|
|
1189
|
+
const [{ GitvaultKeystore }, { readMirrorConfig, formatMirrorDestination }, { openGitvaultMirrorBackend }, { verifyGitvaultMirror }] = await Promise.all([
|
|
1190
|
+
this.#keystore(), this.#mirrorConfig(), this.#mirrorBackend(), this.#recovery(),
|
|
1191
|
+
]);
|
|
1192
|
+
const repoId = await this.#resolveRepoId(options);
|
|
1193
|
+
const keystore = new GitvaultKeystore(options.keystore_root !== undefined ? { rootDir: options.keystore_root } : {});
|
|
1194
|
+
const config = readMirrorConfig(keystore, repoId);
|
|
1195
|
+
const base = { repo_id: repoId, validity_not_freshness: GITVAULT_MIRROR_VALIDITY_NOT_FRESHNESS_STATEMENT, keystore_still_required: GITVAULT_MIRROR_KEYSTORE_STILL_REQUIRED_STATEMENT };
|
|
1196
|
+
if (!config) {
|
|
1197
|
+
return { ...base, configured: false, destination: null, credential_kind: null, mirrored_generation: null, newest_generation: null, is_current: null, closing_command: null };
|
|
1198
|
+
}
|
|
1199
|
+
let mirroredGeneration = null;
|
|
1200
|
+
try {
|
|
1201
|
+
const backend = openGitvaultMirrorBackend(config.destination, repoId, config.credential);
|
|
1202
|
+
const report = await verifyGitvaultMirror(backend, { keystore });
|
|
1203
|
+
mirroredGeneration = report.recovered_generation;
|
|
1204
|
+
}
|
|
1205
|
+
catch {
|
|
1206
|
+
// A configured-but-unreachable/empty mirror is still `configured: true` — the honest report is "unknown", not a thrown status call.
|
|
1207
|
+
}
|
|
1208
|
+
let newestGeneration = null;
|
|
1209
|
+
try {
|
|
1210
|
+
newestGeneration = (await this.get(repoId)).newest_generation;
|
|
1211
|
+
}
|
|
1212
|
+
catch {
|
|
1213
|
+
/* the live vault read is best-effort here; the mirror half of status still answers */
|
|
1214
|
+
}
|
|
1215
|
+
const isCurrent = mirroredGeneration !== null && newestGeneration !== null ? mirroredGeneration === newestGeneration : null;
|
|
1216
|
+
return {
|
|
1217
|
+
...base, configured: true, destination: formatMirrorDestination(config.destination), credential_kind: config.credential?.kind ?? null,
|
|
1218
|
+
mirrored_generation: mirroredGeneration, newest_generation: newestGeneration, is_current: isCurrent,
|
|
1219
|
+
closing_command: isCurrent === false ? "run402 gitvault mirror sync" : null,
|
|
1220
|
+
};
|
|
1221
|
+
}
|
|
1222
|
+
/** List the vault's stored objects, diff against the mirror, fetch + hash-verify + write what's missing, in admission order. Resumable and idempotent. */
|
|
1223
|
+
async mirrorSync(options = {}) {
|
|
1224
|
+
const [{ GitvaultKeystore }, { mirrorSync }] = await Promise.all([this.#keystore(), this.#mirror()]);
|
|
1225
|
+
const repoId = await this.#resolveRepoId(options);
|
|
1226
|
+
const keystore = new GitvaultKeystore(options.keystore_root !== undefined ? { rootDir: options.keystore_root } : {});
|
|
1227
|
+
return mirrorSync(this.#client, repoId, { keystore });
|
|
1228
|
+
}
|
|
1229
|
+
/** Keyless integrity probe against the CONFIGURED mirror: discovery + chain verification + closure/absence adjudication, never decryption (`run402 gitvault mirror verify`). */
|
|
1230
|
+
async mirrorVerify(options = {}) {
|
|
1231
|
+
const [{ GitvaultKeystore }, { readMirrorConfig }, { openGitvaultMirrorBackend }, { verifyGitvaultMirror }] = await Promise.all([
|
|
1232
|
+
this.#keystore(), this.#mirrorConfig(), this.#mirrorBackend(), this.#recovery(),
|
|
1233
|
+
]);
|
|
1234
|
+
const repoId = await this.#resolveRepoId(options);
|
|
1235
|
+
const keystore = new GitvaultKeystore(options.keystore_root !== undefined ? { rootDir: options.keystore_root } : {});
|
|
1236
|
+
const config = readMirrorConfig(keystore, repoId);
|
|
1237
|
+
if (!config)
|
|
1238
|
+
throw new LocalError(`no mirror is configured for ${repoId}`, "verifying gitvault mirror", { code: "GITVAULT_MIRROR_NOT_CONFIGURED", details: { repo_id: repoId }, next_actions: [{ action: "run402 gitvault mirror set <destination>" }] });
|
|
1239
|
+
const backend = openGitvaultMirrorBackend(config.destination, repoId, config.credential);
|
|
1240
|
+
return verifyGitvaultMirror(backend, { keystore });
|
|
1241
|
+
}
|
|
1242
|
+
/**
|
|
1243
|
+
* `r402s-recover` (design D4): rebuild a working git repository straight
|
|
1244
|
+
* from a mirrored `source/<repo_id>/` prefix — NO SERVER INVOLVED. `source`
|
|
1245
|
+
* is `s3://<bucket>[/<prefix>]` or a local directory; when it names more
|
|
1246
|
+
* than one mirrored vault, pass `repo_id` explicitly. Recovery proves
|
|
1247
|
+
* validity, never freshness (both honesty statements ride every result).
|
|
1248
|
+
*/
|
|
1249
|
+
async recover(options) {
|
|
1250
|
+
const [{ GitvaultKeystore }, { parseMirrorDestinationUrl }, { openGitvaultMirrorBackend, discoverMirroredRepoIds }, { recoverGitvaultMirror }] = await Promise.all([
|
|
1251
|
+
this.#keystore(), this.#mirrorConfig(), this.#mirrorBackend(), this.#recovery(),
|
|
1252
|
+
]);
|
|
1253
|
+
const keystore = new GitvaultKeystore(options.keystore_root !== undefined ? { rootDir: options.keystore_root } : {});
|
|
1254
|
+
const destination = parseMirrorDestinationUrl(options.source, { region: options.region, endpoint: options.endpoint });
|
|
1255
|
+
let repoId = options.repo_id;
|
|
1256
|
+
if (!repoId) {
|
|
1257
|
+
const found = await discoverMirroredRepoIds(destination, options.credential);
|
|
1258
|
+
if (found.length === 0)
|
|
1259
|
+
throw new LocalError(`${options.source} holds no mirrored vault (no source/<repo_id>/ prefix found)`, "recovering gitvault vault", { code: "GITVAULT_MIRROR_EMPTY", details: { source: options.source } });
|
|
1260
|
+
if (found.length > 1)
|
|
1261
|
+
throw new LocalError(`${options.source} holds ${found.length} mirrored vaults; pass repo_id to pick one`, "recovering gitvault vault", { code: "GITVAULT_MIRROR_AMBIGUOUS", details: { source: options.source, repo_ids: found }, next_actions: found.map((id) => ({ action: `recover --repo ${id}` })) });
|
|
1262
|
+
repoId = found[0];
|
|
1263
|
+
}
|
|
1264
|
+
const backend = openGitvaultMirrorBackend(destination, repoId, options.credential);
|
|
1265
|
+
return recoverGitvaultMirror({ backend, out_dir: options.out_dir, keystore, ...(options.recovery_receipt ? { recovery_receipt: options.recovery_receipt } : {}) });
|
|
1266
|
+
}
|
|
1056
1267
|
// ── internals ─────────────────────────────────────────────────────────────
|
|
1057
1268
|
async #resolveRepoId(options) {
|
|
1058
1269
|
if (options.repo_id)
|
|
@@ -1085,6 +1296,18 @@ export class Gitvault {
|
|
|
1085
1296
|
#address() {
|
|
1086
1297
|
return nodeOnly(() => import("../node/gitvault-address.js"), "resolveOrCreateAddress");
|
|
1087
1298
|
}
|
|
1299
|
+
#mirror() {
|
|
1300
|
+
return nodeOnly(() => import("../node/gitvault-mirror.js"), "mirrorSync");
|
|
1301
|
+
}
|
|
1302
|
+
#mirrorConfig() {
|
|
1303
|
+
return nodeOnly(() => import("../node/gitvault-mirror-config.js"), "mirrorSet");
|
|
1304
|
+
}
|
|
1305
|
+
#mirrorBackend() {
|
|
1306
|
+
return nodeOnly(() => import("../node/gitvault-mirror-backend.js"), "mirrorSet");
|
|
1307
|
+
}
|
|
1308
|
+
#recovery() {
|
|
1309
|
+
return nodeOnly(() => import("../node/gitvault-recover.js"), "recover");
|
|
1310
|
+
}
|
|
1088
1311
|
}
|
|
1089
1312
|
// ─── D7 — progressive terminal-loss warning (repo-first-onramp task 2.7) ────
|
|
1090
1313
|
//
|