@indigoai-us/hq-cloud 6.18.93 → 6.18.95
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/dist/bin/sync-runner.d.ts +20 -1
- package/dist/bin/sync-runner.d.ts.map +1 -1
- package/dist/bin/sync-runner.js +25 -0
- package/dist/bin/sync-runner.js.map +1 -1
- package/dist/cli/reindex.d.ts +24 -0
- package/dist/cli/reindex.d.ts.map +1 -1
- package/dist/cli/reindex.js +26 -1
- package/dist/cli/reindex.js.map +1 -1
- package/dist/cli/rescue-core.d.ts +18 -3
- package/dist/cli/rescue-core.d.ts.map +1 -1
- package/dist/cli/rescue-core.js +129 -22
- package/dist/cli/rescue-core.js.map +1 -1
- package/dist/cli/share.d.ts +28 -5
- package/dist/cli/share.d.ts.map +1 -1
- package/dist/cli/share.js +189 -22
- package/dist/cli/share.js.map +1 -1
- package/dist/cli/sync.d.ts +11 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +77 -8
- package/dist/cli/sync.js.map +1 -1
- package/dist/cloud-placeholder.d.ts +23 -1
- package/dist/cloud-placeholder.d.ts.map +1 -1
- package/dist/cloud-placeholder.js +57 -0
- package/dist/cloud-placeholder.js.map +1 -1
- package/dist/hq-root-recovery.d.ts +37 -6
- package/dist/hq-root-recovery.d.ts.map +1 -1
- package/dist/hq-root-recovery.js +266 -22
- package/dist/hq-root-recovery.js.map +1 -1
- package/dist/journal.d.ts +11 -1
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +23 -2
- package/dist/journal.js.map +1 -1
- package/dist/lib/cloud-authoritative.d.ts +10 -0
- package/dist/lib/cloud-authoritative.d.ts.map +1 -1
- package/dist/lib/cloud-authoritative.js +23 -0
- package/dist/lib/cloud-authoritative.js.map +1 -1
- package/dist/manifest-reconcile.d.ts +14 -0
- package/dist/manifest-reconcile.d.ts.map +1 -1
- package/dist/manifest-reconcile.js +20 -2
- package/dist/manifest-reconcile.js.map +1 -1
- package/dist/outposts/client.d.ts +6 -1
- package/dist/outposts/client.d.ts.map +1 -1
- package/dist/outposts/client.js +13 -1
- package/dist/outposts/client.js.map +1 -1
- package/dist/outposts/command.d.ts +1 -1
- package/dist/outposts/command.d.ts.map +1 -1
- package/dist/outposts/command.js +58 -2
- package/dist/outposts/command.js.map +1 -1
- package/dist/outposts/company.d.ts +15 -1
- package/dist/outposts/company.d.ts.map +1 -1
- package/dist/outposts/company.js +36 -1
- package/dist/outposts/company.js.map +1 -1
- package/dist/s3.d.ts +22 -0
- package/dist/s3.d.ts.map +1 -1
- package/dist/s3.js +44 -0
- package/dist/s3.js.map +1 -1
- package/dist/session-log-capture.d.ts.map +1 -1
- package/dist/session-log-capture.js +5 -2
- package/dist/session-log-capture.js.map +1 -1
- package/dist/sync/area-ledger.d.ts.map +1 -1
- package/dist/sync/area-ledger.js +3 -3
- package/dist/sync/area-ledger.js.map +1 -1
- package/dist/sync/durable-apply.js +2 -2
- package/dist/sync/durable-apply.js.map +1 -1
- package/dist/sync/per-area-maintenance.js +2 -2
- package/dist/sync/per-area-maintenance.js.map +1 -1
- package/dist/sync/reconcile-cursor.js +2 -2
- package/dist/sync/reconcile-cursor.js.map +1 -1
- package/dist/sync/secret-path-policy.d.ts +37 -11
- package/dist/sync/secret-path-policy.d.ts.map +1 -1
- package/dist/sync/secret-path-policy.js +68 -34
- package/dist/sync/secret-path-policy.js.map +1 -1
- package/dist/sync/snapshot-client.js +2 -2
- package/dist/sync/snapshot-client.js.map +1 -1
- package/dist/sync/state-store.d.ts +19 -0
- package/dist/sync/state-store.d.ts.map +1 -1
- package/dist/sync/state-store.js +184 -4
- package/dist/sync/state-store.js.map +1 -1
- package/dist/sync/uploader-finalization.d.ts.map +1 -1
- package/dist/sync/uploader-finalization.js +2 -2
- package/dist/sync/uploader-finalization.js.map +1 -1
- package/dist/test-fixtures/unknown-journal-generation.d.ts +9 -0
- package/dist/test-fixtures/unknown-journal-generation.d.ts.map +1 -0
- package/dist/test-fixtures/unknown-journal-generation.js +37 -0
- package/dist/test-fixtures/unknown-journal-generation.js.map +1 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +3 -3
- package/dist/watcher.js.map +1 -1
- package/package.json +1 -1
|
@@ -18,8 +18,12 @@ export declare const CLOUD_PLACEHOLDER_MAX_BYTES = 4096;
|
|
|
18
18
|
* placeholder.
|
|
19
19
|
* - "watcher-delete-guard": the watcher and push event emitter publish no
|
|
20
20
|
* delete for a file replaced by its placeholder.
|
|
21
|
+
* - "library-original-guard": a synced placeholder that went missing while
|
|
22
|
+
* its original sits in its place (`hq library fetch`) is restored, never
|
|
23
|
+
* deleted from the vault; and an original beside (or in place of) a
|
|
24
|
+
* company-blob placeholder is never uploaded as a second copy.
|
|
21
25
|
*/
|
|
22
|
-
export declare const CLOUD_PLACEHOLDER_SYNC_CAPABILITIES: readonly ["push-delete-guard", "pull-cloud-only", "watcher-delete-guard"];
|
|
26
|
+
export declare const CLOUD_PLACEHOLDER_SYNC_CAPABILITIES: readonly ["push-delete-guard", "pull-cloud-only", "watcher-delete-guard", "library-original-guard"];
|
|
23
27
|
export interface CloudPlaceholder {
|
|
24
28
|
/** HQ-root-relative (or vault-relative) POSIX path of the original file. */
|
|
25
29
|
path: string;
|
|
@@ -101,6 +105,24 @@ export declare function isCloudOnlyLocally(localPath: string): boolean;
|
|
|
101
105
|
* did not delete the file. Invalid placeholders are logged once.
|
|
102
106
|
*/
|
|
103
107
|
export declare function hasCloudPlaceholderSibling(localPath: string): boolean;
|
|
108
|
+
/** Vault key prefix of content-addressed offload copies (`hq library add`). */
|
|
109
|
+
export declare const CLOUD_OFFLOAD_BLOB_KEY_PREFIX = ".hq-offload/blobs/";
|
|
110
|
+
/**
|
|
111
|
+
* True when `placeholderPath` names a `.hqcloud` file that is absent while
|
|
112
|
+
* the original it stands for is a regular file on disk. That is what
|
|
113
|
+
* `hq library fetch` / `hq storage fetch` leave behind: the user fetched the
|
|
114
|
+
* bytes, they did not delete the placeholder. Sync must not turn that absence
|
|
115
|
+
* into a remote delete of a synced (library) placeholder.
|
|
116
|
+
*/
|
|
117
|
+
export declare function hasLocalOriginalForMissingPlaceholder(placeholderPath: string): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* True when `localPath` sits beside a valid company placeholder whose bytes
|
|
120
|
+
* live in a content-addressed company blob (`key: .hq-offload/blobs/<sha>`,
|
|
121
|
+
* written by `hq library add`). Such a file is a local copy of a cloud-only
|
|
122
|
+
* library asset; uploading it would store a second full copy in the vault.
|
|
123
|
+
* Silent, like isSyncedCloudPlaceholderFile.
|
|
124
|
+
*/
|
|
125
|
+
export declare function isBesideCompanyBlobPlaceholder(localPath: string): boolean;
|
|
104
126
|
/**
|
|
105
127
|
* True for a `.hqcloud` file that is a valid placeholder for its sibling.
|
|
106
128
|
* Push uses this to keep placeholders out of vault uploads.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-placeholder.d.ts","sourceRoot":"","sources":["../src/cloud-placeholder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloud-placeholder.d.ts","sourceRoot":"","sources":["../src/cloud-placeholder.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
* - pull never re-downloads `x` over any `x.hqcloud` sibling. When the
|
|
14
14
|
* remote object changed it rewrites a valid placeholder's metadata, and
|
|
15
15
|
* when a peer deleted it the placeholder is marked orphaned.
|
|
16
|
+
* - a synced (library) placeholder `x.hqcloud` that is missing while `x`
|
|
17
|
+
* is on disk was fetched, not deleted: push never deletes it from the
|
|
18
|
+
* vault and pull downloads it back beside `x`. A file `x` that the
|
|
19
|
+
* journal does not track, beside (or in place of) a company placeholder
|
|
20
|
+
* keyed `.hq-offload/blobs/<sha>`, is a local copy of a cloud-only
|
|
21
|
+
* library asset and is never uploaded.
|
|
16
22
|
*
|
|
17
23
|
* A placeholder only counts as cloud-only (pull skips the download) when it
|
|
18
24
|
* parses as HQ-CLOUD-FILE v1 AND its `path` names the exact file it stands in
|
|
@@ -100,11 +106,16 @@ export const CLOUD_PLACEHOLDER_MAX_BYTES = 4096;
|
|
|
100
106
|
* placeholder.
|
|
101
107
|
* - "watcher-delete-guard": the watcher and push event emitter publish no
|
|
102
108
|
* delete for a file replaced by its placeholder.
|
|
109
|
+
* - "library-original-guard": a synced placeholder that went missing while
|
|
110
|
+
* its original sits in its place (`hq library fetch`) is restored, never
|
|
111
|
+
* deleted from the vault; and an original beside (or in place of) a
|
|
112
|
+
* company-blob placeholder is never uploaded as a second copy.
|
|
103
113
|
*/
|
|
104
114
|
export const CLOUD_PLACEHOLDER_SYNC_CAPABILITIES = [
|
|
105
115
|
"push-delete-guard",
|
|
106
116
|
"pull-cloud-only",
|
|
107
117
|
"watcher-delete-guard",
|
|
118
|
+
"library-original-guard",
|
|
108
119
|
];
|
|
109
120
|
export const CLOUD_ASSET_FENCE = "hq-asset";
|
|
110
121
|
export const CLOUD_ASSET_MEDIA_KINDS = ["image", "video", "other"];
|
|
@@ -551,6 +562,52 @@ export function hasCloudPlaceholderSibling(localPath) {
|
|
|
551
562
|
readCloudPlaceholder(placeholderPath, localPath);
|
|
552
563
|
return true;
|
|
553
564
|
}
|
|
565
|
+
/** Vault key prefix of content-addressed offload copies (`hq library add`). */
|
|
566
|
+
export const CLOUD_OFFLOAD_BLOB_KEY_PREFIX = ".hq-offload/blobs/";
|
|
567
|
+
function isRegularFile(p) {
|
|
568
|
+
try {
|
|
569
|
+
return fs.lstatSync(p).isFile();
|
|
570
|
+
}
|
|
571
|
+
catch {
|
|
572
|
+
return false;
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* True when `placeholderPath` names a `.hqcloud` file that is absent while
|
|
577
|
+
* the original it stands for is a regular file on disk. That is what
|
|
578
|
+
* `hq library fetch` / `hq storage fetch` leave behind: the user fetched the
|
|
579
|
+
* bytes, they did not delete the placeholder. Sync must not turn that absence
|
|
580
|
+
* into a remote delete of a synced (library) placeholder.
|
|
581
|
+
*/
|
|
582
|
+
export function hasLocalOriginalForMissingPlaceholder(placeholderPath) {
|
|
583
|
+
if (!isCloudPlaceholderName(path.basename(placeholderPath)))
|
|
584
|
+
return false;
|
|
585
|
+
try {
|
|
586
|
+
fs.lstatSync(placeholderPath);
|
|
587
|
+
return false;
|
|
588
|
+
}
|
|
589
|
+
catch (err) {
|
|
590
|
+
const code = err?.code;
|
|
591
|
+
if (code !== "ENOENT")
|
|
592
|
+
return false;
|
|
593
|
+
}
|
|
594
|
+
return isRegularFile(placeholderPath.slice(0, -CLOUD_PLACEHOLDER_SUFFIX.length));
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* True when `localPath` sits beside a valid company placeholder whose bytes
|
|
598
|
+
* live in a content-addressed company blob (`key: .hq-offload/blobs/<sha>`,
|
|
599
|
+
* written by `hq library add`). Such a file is a local copy of a cloud-only
|
|
600
|
+
* library asset; uploading it would store a second full copy in the vault.
|
|
601
|
+
* Silent, like isSyncedCloudPlaceholderFile.
|
|
602
|
+
*/
|
|
603
|
+
export function isBesideCompanyBlobPlaceholder(localPath) {
|
|
604
|
+
if (isCloudPlaceholderName(path.basename(localPath)))
|
|
605
|
+
return false;
|
|
606
|
+
const parsed = loadCloudPlaceholder(cloudPlaceholderPathFor(localPath), localPath, () => { });
|
|
607
|
+
return (parsed !== null &&
|
|
608
|
+
parsed.vault === "company" &&
|
|
609
|
+
parsed.key.startsWith(CLOUD_OFFLOAD_BLOB_KEY_PREFIX));
|
|
610
|
+
}
|
|
554
611
|
/**
|
|
555
612
|
* True for a `.hqcloud` file that is a valid placeholder for its sibling.
|
|
556
613
|
* Push uses this to keep placeholders out of vault uploads.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-placeholder.js","sourceRoot":"","sources":["../src/cloud-placeholder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cloud-placeholder.js","sourceRoot":"","sources":["../src/cloud-placeholder.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,9 @@ export type GitSidecarAction = "restored" | "snapshotted" | "unchanged" | "absen
|
|
|
17
17
|
/** A background snapshot was skipped because a recent attempt failed. */
|
|
18
18
|
| "deferred"
|
|
19
19
|
/** A background snapshot was skipped: the copy would not leave the free-space reserve. */
|
|
20
|
-
| "insufficient-space"
|
|
20
|
+
| "insufficient-space"
|
|
21
|
+
/** Another process holds the snapshot lock for this sidecar. */
|
|
22
|
+
| "in-progress";
|
|
21
23
|
export declare function gitSidecarDir(hqRoot: string, homeDir?: string): string;
|
|
22
24
|
export declare function shouldCopyGitSidecarEntry(src: string): boolean;
|
|
23
25
|
/**
|
|
@@ -39,6 +41,15 @@ export declare const GIT_SIDECAR_RETRY_AFTER_MS: number;
|
|
|
39
41
|
* stops sync itself (ENOSPC on its own lock and state files).
|
|
40
42
|
*/
|
|
41
43
|
export declare const GIT_SIDECAR_MIN_FREE_BYTES: number;
|
|
44
|
+
/**
|
|
45
|
+
* A legacy `${dest}.tmp` staging dir (from releases that shared one staging
|
|
46
|
+
* path) older than this is abandoned. A process on such a release may still be
|
|
47
|
+
* copying into a younger one, so it is left alone.
|
|
48
|
+
*/
|
|
49
|
+
export declare const GIT_SIDECAR_STALE_STAGING_MS: number;
|
|
50
|
+
/** A snapshot lock older than this is taken over even if its pid is alive (pid reuse). */
|
|
51
|
+
export declare const GIT_SIDECAR_LOCK_STALE_MS: number;
|
|
52
|
+
export type GitSidecarCopyMethod = "clone" | "copy";
|
|
42
53
|
export interface GitSidecarSnapshotOptions {
|
|
43
54
|
homeDir?: string;
|
|
44
55
|
/** Test seam; production uses Date.now. */
|
|
@@ -47,15 +58,35 @@ export interface GitSidecarSnapshotOptions {
|
|
|
47
58
|
/** Test seam; production reads `fs.promises.statfs` for the destination volume. */
|
|
48
59
|
freeBytes?: (dir: string) => Promise<number>;
|
|
49
60
|
minFreeBytes?: number;
|
|
61
|
+
/** Test seam; production picks "clone" on APFS when `.git` and the sidecar share a volume. */
|
|
62
|
+
copyMethod?: (gitDir: string, sidecarParent: string) => Promise<GitSidecarCopyMethod>;
|
|
63
|
+
/** Test seam; production clones with `/bin/cp -c` or copies with `fs.promises.cp`. */
|
|
64
|
+
copyTree?: (gitDir: string, staging: string, method: GitSidecarCopyMethod) => Promise<void>;
|
|
50
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* A clone shares data blocks with the source, so a 9 GB `.git` costs almost
|
|
68
|
+
* no space to snapshot. Node's `COPYFILE_FICLONE` does not clone on APFS and
|
|
69
|
+
* `COPYFILE_FICLONE_FORCE` fails with ENOSYS there, so macOS uses
|
|
70
|
+
* `/bin/cp -c`, which clones only within one APFS volume.
|
|
71
|
+
*/
|
|
72
|
+
export declare function gitSidecarCopyMethod(gitDir: string, sidecarParent: string): Promise<GitSidecarCopyMethod>;
|
|
73
|
+
/** `cp -R` has no filter: drop lock files, FIFOs, sockets and devices after the clone. */
|
|
74
|
+
export declare function pruneUncopyableEntries(root: string): Promise<void>;
|
|
75
|
+
export declare function gitSidecarLockPath(dest: string): string;
|
|
76
|
+
/**
|
|
77
|
+
* The failure backoff is also written next to the sidecar, so each new
|
|
78
|
+
* `hq sync` process honors it instead of starting another multi-gigabyte copy.
|
|
79
|
+
*/
|
|
80
|
+
export declare function gitSidecarStatePath(dest: string): string;
|
|
51
81
|
/**
|
|
52
82
|
* Snapshot `.git` without blocking the caller's event loop. The HQ `.git` can
|
|
53
83
|
* be many gigabytes, and the watch runner calls this at startup and on every
|
|
54
|
-
* pass, so the copy runs
|
|
55
|
-
* Concurrent calls for one sidecar share a single
|
|
56
|
-
* copy
|
|
57
|
-
*
|
|
58
|
-
* the
|
|
84
|
+
* pass, so the copy runs off the event loop, as a copy-on-write clone where
|
|
85
|
+
* the volume supports one. Concurrent calls for one sidecar share a single
|
|
86
|
+
* copy: in this process through one promise, across processes through a lock
|
|
87
|
+
* file. After a failed or skipped copy, every process waits `retryAfterMs`
|
|
88
|
+
* before the next attempt. The copy is skipped when it would leave less than
|
|
89
|
+
* `minFreeBytes` free on the destination volume.
|
|
59
90
|
* The returned promise never rejects.
|
|
60
91
|
*/
|
|
61
92
|
export declare function snapshotHqGitInBackground(hqRoot: string, opts?: GitSidecarSnapshotOptions): Promise<GitSidecarAction>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hq-root-recovery.d.ts","sourceRoot":"","sources":["../src/hq-root-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"hq-root-recovery.d.ts","sourceRoot":"","sources":["../src/hq-root-recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/hq-root-recovery.js
CHANGED
|
@@ -10,10 +10,14 @@
|
|
|
10
10
|
* which survived the 2026-09-18 wipe that removed `core/`, `personal/`, and
|
|
11
11
|
* `.git` while leaving the sync daemon running.
|
|
12
12
|
*/
|
|
13
|
+
import { execFile } from "child_process";
|
|
14
|
+
import { randomBytes } from "crypto";
|
|
13
15
|
import * as fs from "fs";
|
|
14
16
|
import * as os from "os";
|
|
15
17
|
import * as path from "path";
|
|
18
|
+
import { promisify } from "util";
|
|
16
19
|
import { canonicalRootHash } from "./backup-prune.js";
|
|
20
|
+
const execFileAsync = promisify(execFile);
|
|
17
21
|
const HQ_LAYOUT_DIRS = ["repos", "repos/public", "repos/private"];
|
|
18
22
|
export function gitSidecarDir(hqRoot, homeDir = os.homedir()) {
|
|
19
23
|
return path.join(homeDir, ".hq", "hq-root-git", canonicalRootHash(path.resolve(hqRoot)));
|
|
@@ -70,6 +74,14 @@ function isGitDirectory(gitDir) {
|
|
|
70
74
|
return false;
|
|
71
75
|
}
|
|
72
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Every copy stages in its own directory. A shared `${dest}.tmp` let a second
|
|
79
|
+
* process (`hq sync` next to the watcher) delete the first one's half-written
|
|
80
|
+
* copy, which then failed with ENOENT on chmod.
|
|
81
|
+
*/
|
|
82
|
+
function uniqueSiblingPath(dest, kind) {
|
|
83
|
+
return `${dest}.${kind}-${process.pid}-${randomBytes(4).toString("hex")}`;
|
|
84
|
+
}
|
|
73
85
|
export function snapshotHqGit(hqRoot, opts = {}) {
|
|
74
86
|
const gitDir = path.join(hqRoot, ".git");
|
|
75
87
|
if (!isGitDirectory(gitDir))
|
|
@@ -79,9 +91,8 @@ export function snapshotHqGit(hqRoot, opts = {}) {
|
|
|
79
91
|
if (currentHead !== null && currentHead === readHead(dest) && fs.existsSync(dest)) {
|
|
80
92
|
return "unchanged";
|
|
81
93
|
}
|
|
82
|
-
const staging =
|
|
94
|
+
const staging = uniqueSiblingPath(dest, "tmp");
|
|
83
95
|
try {
|
|
84
|
-
fs.rmSync(staging, { recursive: true, force: true });
|
|
85
96
|
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
86
97
|
fs.cpSync(gitDir, staging, {
|
|
87
98
|
recursive: true,
|
|
@@ -110,10 +121,72 @@ export const GIT_SIDECAR_RETRY_AFTER_MS = 30 * 60_000;
|
|
|
110
121
|
* stops sync itself (ENOSPC on its own lock and state files).
|
|
111
122
|
*/
|
|
112
123
|
export const GIT_SIDECAR_MIN_FREE_BYTES = 2 * 1024 ** 3;
|
|
124
|
+
/**
|
|
125
|
+
* A legacy `${dest}.tmp` staging dir (from releases that shared one staging
|
|
126
|
+
* path) older than this is abandoned. A process on such a release may still be
|
|
127
|
+
* copying into a younger one, so it is left alone.
|
|
128
|
+
*/
|
|
129
|
+
export const GIT_SIDECAR_STALE_STAGING_MS = 60 * 60_000;
|
|
130
|
+
/** A snapshot lock older than this is taken over even if its pid is alive (pid reuse). */
|
|
131
|
+
export const GIT_SIDECAR_LOCK_STALE_MS = 6 * 60 * 60_000;
|
|
132
|
+
/** `statfs` `f_type` for APFS on macOS. */
|
|
133
|
+
const APFS_STATFS_TYPE = 26;
|
|
113
134
|
async function defaultFreeBytes(dir) {
|
|
114
135
|
const stats = await fs.promises.statfs(dir);
|
|
115
136
|
return Number(stats.bavail) * Number(stats.bsize);
|
|
116
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* A clone shares data blocks with the source, so a 9 GB `.git` costs almost
|
|
140
|
+
* no space to snapshot. Node's `COPYFILE_FICLONE` does not clone on APFS and
|
|
141
|
+
* `COPYFILE_FICLONE_FORCE` fails with ENOSYS there, so macOS uses
|
|
142
|
+
* `/bin/cp -c`, which clones only within one APFS volume.
|
|
143
|
+
*/
|
|
144
|
+
export async function gitSidecarCopyMethod(gitDir, sidecarParent) {
|
|
145
|
+
if (process.platform !== "darwin")
|
|
146
|
+
return "copy";
|
|
147
|
+
try {
|
|
148
|
+
const [src, dst] = await Promise.all([fs.promises.stat(gitDir), fs.promises.stat(sidecarParent)]);
|
|
149
|
+
if (src.dev !== dst.dev)
|
|
150
|
+
return "copy";
|
|
151
|
+
const volume = await fs.promises.statfs(sidecarParent);
|
|
152
|
+
return Number(volume.type) === APFS_STATFS_TYPE ? "clone" : "copy";
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return "copy";
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async function defaultCopyTree(gitDir, staging, method) {
|
|
159
|
+
if (method === "clone") {
|
|
160
|
+
await execFileAsync("/bin/cp", ["-c", "-R", gitDir, staging]);
|
|
161
|
+
await pruneUncopyableEntries(staging);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
// FICLONE reflinks on Linux filesystems that support it (btrfs, xfs) and
|
|
165
|
+
// falls back to a plain copy elsewhere.
|
|
166
|
+
await fs.promises.cp(gitDir, staging, {
|
|
167
|
+
recursive: true,
|
|
168
|
+
filter: gitSidecarCopyFilter,
|
|
169
|
+
mode: fs.constants.COPYFILE_FICLONE,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/** `cp -R` has no filter: drop lock files, FIFOs, sockets and devices after the clone. */
|
|
173
|
+
export async function pruneUncopyableEntries(root) {
|
|
174
|
+
const pending = [root];
|
|
175
|
+
while (pending.length > 0) {
|
|
176
|
+
const current = pending.pop();
|
|
177
|
+
const entries = await fs.promises.readdir(current, { withFileTypes: true });
|
|
178
|
+
for (const entry of entries) {
|
|
179
|
+
const full = path.join(current, entry.name);
|
|
180
|
+
const kept = entry.isFile() || entry.isDirectory() || entry.isSymbolicLink();
|
|
181
|
+
if (!kept || isGitLockName(entry.name)) {
|
|
182
|
+
await fs.promises.rm(full, { recursive: true, force: true });
|
|
183
|
+
}
|
|
184
|
+
else if (entry.isDirectory()) {
|
|
185
|
+
pending.push(full);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
117
190
|
/** Bytes the filtered copy of `dir` would write (regular files only). */
|
|
118
191
|
async function copyableSizeBytes(dir) {
|
|
119
192
|
let total = 0;
|
|
@@ -156,7 +229,161 @@ async function readHeadAsync(gitDir) {
|
|
|
156
229
|
return null;
|
|
157
230
|
}
|
|
158
231
|
}
|
|
159
|
-
|
|
232
|
+
function isPidAlive(pid) {
|
|
233
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
234
|
+
return false;
|
|
235
|
+
try {
|
|
236
|
+
process.kill(pid, 0);
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
catch (err) {
|
|
240
|
+
return err.code === "EPERM";
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
export function gitSidecarLockPath(dest) {
|
|
244
|
+
return `${dest}.snapshot.lock`;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* The failure backoff is also written next to the sidecar, so each new
|
|
248
|
+
* `hq sync` process honors it instead of starting another multi-gigabyte copy.
|
|
249
|
+
*/
|
|
250
|
+
export function gitSidecarStatePath(dest) {
|
|
251
|
+
return `${dest}.snapshot-state.json`;
|
|
252
|
+
}
|
|
253
|
+
async function readPersistedFailedAt(dest) {
|
|
254
|
+
try {
|
|
255
|
+
const parsed = JSON.parse(await fs.promises.readFile(gitSidecarStatePath(dest), "utf8"));
|
|
256
|
+
return typeof parsed.failedAt === "number" ? parsed.failedAt : undefined;
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async function writePersistedState(dest, state) {
|
|
263
|
+
const file = gitSidecarStatePath(dest);
|
|
264
|
+
try {
|
|
265
|
+
if (state === null) {
|
|
266
|
+
await fs.promises.rm(file, { force: true });
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
269
|
+
const tmpFile = uniqueSiblingPath(file, "tmp");
|
|
270
|
+
await fs.promises.writeFile(tmpFile, `${JSON.stringify(state)}\n`);
|
|
271
|
+
await fs.promises.rename(tmpFile, file);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
/* the in-memory backoff still applies to this process */
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* One snapshot per sidecar across processes. Returns a release function, or
|
|
279
|
+
* null when a live process holds the lock. Two processes that take over the
|
|
280
|
+
* same stale lock at once can each copy; unique staging keeps that safe.
|
|
281
|
+
*/
|
|
282
|
+
async function acquireSnapshotLock(dest, nowMs) {
|
|
283
|
+
const lockPath = gitSidecarLockPath(dest);
|
|
284
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
285
|
+
try {
|
|
286
|
+
const handle = await fs.promises.open(lockPath, "wx");
|
|
287
|
+
try {
|
|
288
|
+
await handle.writeFile(`${process.pid}\n`);
|
|
289
|
+
}
|
|
290
|
+
finally {
|
|
291
|
+
await handle.close();
|
|
292
|
+
}
|
|
293
|
+
return async () => {
|
|
294
|
+
try {
|
|
295
|
+
const holder = Number((await fs.promises.readFile(lockPath, "utf8")).trim());
|
|
296
|
+
if (holder === process.pid)
|
|
297
|
+
await fs.promises.rm(lockPath, { force: true });
|
|
298
|
+
}
|
|
299
|
+
catch {
|
|
300
|
+
/* already gone */
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
catch (err) {
|
|
305
|
+
if (err.code !== "EEXIST")
|
|
306
|
+
throw err;
|
|
307
|
+
}
|
|
308
|
+
let holder;
|
|
309
|
+
let mtimeMs;
|
|
310
|
+
try {
|
|
311
|
+
holder = Number((await fs.promises.readFile(lockPath, "utf8")).trim());
|
|
312
|
+
mtimeMs = (await fs.promises.stat(lockPath)).mtimeMs;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
continue; // released between open and read
|
|
316
|
+
}
|
|
317
|
+
if (isPidAlive(holder) && nowMs - mtimeMs < GIT_SIDECAR_LOCK_STALE_MS)
|
|
318
|
+
return null;
|
|
319
|
+
await fs.promises.rm(lockPath, { force: true });
|
|
320
|
+
}
|
|
321
|
+
return null;
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Remove staging and swap directories that killed or crashed snapshots left
|
|
325
|
+
* next to the sidecar. One abandoned full copy of a large `.git` can be what
|
|
326
|
+
* filled the disk. Runs with the snapshot lock held, so no copy by this
|
|
327
|
+
* release is live; a legacy shared `.tmp` is removed only once it is old.
|
|
328
|
+
*/
|
|
329
|
+
async function sweepStaleStaging(dest, nowMs) {
|
|
330
|
+
const parent = path.dirname(dest);
|
|
331
|
+
const base = path.basename(dest);
|
|
332
|
+
let names;
|
|
333
|
+
try {
|
|
334
|
+
names = await fs.promises.readdir(parent);
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
for (const name of names) {
|
|
340
|
+
if (!name.startsWith(`${base}.`))
|
|
341
|
+
continue;
|
|
342
|
+
const suffix = name.slice(base.length + 1);
|
|
343
|
+
const full = path.join(parent, name);
|
|
344
|
+
let stale = /^(?:tmp|old)-\d+-[0-9a-f]+$/.test(suffix);
|
|
345
|
+
if (suffix === "tmp") {
|
|
346
|
+
try {
|
|
347
|
+
stale = nowMs - (await fs.promises.lstat(full)).mtimeMs >= GIT_SIDECAR_STALE_STAGING_MS;
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
stale = false;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
if (!stale)
|
|
354
|
+
continue;
|
|
355
|
+
try {
|
|
356
|
+
await fs.promises.rm(full, { recursive: true, force: true });
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
console.warn(`hq-root-recovery: could not remove stale sidecar staging ${full}:`, err);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
/** Replace `dest` with `staging`; on failure the previous sidecar is put back. */
|
|
364
|
+
async function swapIntoPlace(staging, dest) {
|
|
365
|
+
const previous = uniqueSiblingPath(dest, "old");
|
|
366
|
+
let moved = false;
|
|
367
|
+
try {
|
|
368
|
+
await fs.promises.rename(dest, previous);
|
|
369
|
+
moved = true;
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
if (err.code !== "ENOENT")
|
|
373
|
+
throw err;
|
|
374
|
+
}
|
|
375
|
+
try {
|
|
376
|
+
await fs.promises.rename(staging, dest);
|
|
377
|
+
}
|
|
378
|
+
catch (err) {
|
|
379
|
+
if (moved)
|
|
380
|
+
await fs.promises.rename(previous, dest).catch(() => undefined);
|
|
381
|
+
throw err;
|
|
382
|
+
}
|
|
383
|
+
if (moved)
|
|
384
|
+
await fs.promises.rm(previous, { recursive: true, force: true });
|
|
385
|
+
}
|
|
386
|
+
async function snapshotHqGitAsync(hqRoot, dest, opts, nowMs) {
|
|
160
387
|
const gitDir = path.join(hqRoot, ".git");
|
|
161
388
|
try {
|
|
162
389
|
if (!(await fs.promises.lstat(gitDir)).isDirectory())
|
|
@@ -169,11 +396,22 @@ async function snapshotHqGitAsync(hqRoot, dest, opts) {
|
|
|
169
396
|
if (currentHead !== null && currentHead === (await readHeadAsync(dest))) {
|
|
170
397
|
return "unchanged";
|
|
171
398
|
}
|
|
172
|
-
const
|
|
399
|
+
const persistedFailedAt = await readPersistedFailedAt(dest);
|
|
400
|
+
if (persistedFailedAt !== undefined &&
|
|
401
|
+
nowMs - persistedFailedAt < (opts.retryAfterMs ?? GIT_SIDECAR_RETRY_AFTER_MS)) {
|
|
402
|
+
return "deferred";
|
|
403
|
+
}
|
|
404
|
+
let release = null;
|
|
405
|
+
const staging = uniqueSiblingPath(dest, "tmp");
|
|
173
406
|
try {
|
|
174
|
-
await fs.promises.rm(staging, { recursive: true, force: true });
|
|
175
407
|
await fs.promises.mkdir(path.dirname(dest), { recursive: true });
|
|
176
|
-
|
|
408
|
+
release = await acquireSnapshotLock(dest, nowMs);
|
|
409
|
+
if (release === null)
|
|
410
|
+
return "in-progress";
|
|
411
|
+
await sweepStaleStaging(dest, nowMs);
|
|
412
|
+
const method = await (opts.copyMethod ?? gitSidecarCopyMethod)(gitDir, path.dirname(dest));
|
|
413
|
+
// A clone writes metadata only; a copy writes every byte.
|
|
414
|
+
const needed = method === "clone" ? 0 : await copyableSizeBytes(gitDir);
|
|
177
415
|
const free = await (opts.freeBytes ?? defaultFreeBytes)(path.dirname(dest));
|
|
178
416
|
const reserve = opts.minFreeBytes ?? GIT_SIDECAR_MIN_FREE_BYTES;
|
|
179
417
|
if (free - needed < reserve) {
|
|
@@ -181,12 +419,8 @@ async function snapshotHqGitAsync(hqRoot, dest, opts) {
|
|
|
181
419
|
`${Math.max(0, free - needed)} of the ${reserve}-byte free-space reserve`);
|
|
182
420
|
return "insufficient-space";
|
|
183
421
|
}
|
|
184
|
-
await
|
|
185
|
-
|
|
186
|
-
filter: gitSidecarCopyFilter,
|
|
187
|
-
});
|
|
188
|
-
await fs.promises.rm(dest, { recursive: true, force: true });
|
|
189
|
-
await fs.promises.rename(staging, dest);
|
|
422
|
+
await (opts.copyTree ?? defaultCopyTree)(gitDir, staging, method);
|
|
423
|
+
await swapIntoPlace(staging, dest);
|
|
190
424
|
return "snapshotted";
|
|
191
425
|
}
|
|
192
426
|
catch (err) {
|
|
@@ -199,15 +433,20 @@ async function snapshotHqGitAsync(hqRoot, dest, opts) {
|
|
|
199
433
|
console.warn("hq-root-recovery: git sidecar snapshot failed:", err);
|
|
200
434
|
return "failed";
|
|
201
435
|
}
|
|
436
|
+
finally {
|
|
437
|
+
if (release !== null)
|
|
438
|
+
await release();
|
|
439
|
+
}
|
|
202
440
|
}
|
|
203
441
|
/**
|
|
204
442
|
* Snapshot `.git` without blocking the caller's event loop. The HQ `.git` can
|
|
205
443
|
* be many gigabytes, and the watch runner calls this at startup and on every
|
|
206
|
-
* pass, so the copy runs
|
|
207
|
-
* Concurrent calls for one sidecar share a single
|
|
208
|
-
* copy
|
|
209
|
-
*
|
|
210
|
-
* the
|
|
444
|
+
* pass, so the copy runs off the event loop, as a copy-on-write clone where
|
|
445
|
+
* the volume supports one. Concurrent calls for one sidecar share a single
|
|
446
|
+
* copy: in this process through one promise, across processes through a lock
|
|
447
|
+
* file. After a failed or skipped copy, every process waits `retryAfterMs`
|
|
448
|
+
* before the next attempt. The copy is skipped when it would leave less than
|
|
449
|
+
* `minFreeBytes` free on the destination volume.
|
|
211
450
|
* The returned promise never rejects.
|
|
212
451
|
*/
|
|
213
452
|
export function snapshotHqGitInBackground(hqRoot, opts = {}) {
|
|
@@ -221,12 +460,17 @@ export function snapshotHqGitInBackground(hqRoot, opts = {}) {
|
|
|
221
460
|
now() - failedAt < (opts.retryAfterMs ?? GIT_SIDECAR_RETRY_AFTER_MS)) {
|
|
222
461
|
return Promise.resolve("deferred");
|
|
223
462
|
}
|
|
224
|
-
const task = snapshotHqGitAsync(hqRoot, dest, opts)
|
|
225
|
-
.then((action) => {
|
|
226
|
-
if (action === "failed" || action === "insufficient-space")
|
|
227
|
-
|
|
228
|
-
|
|
463
|
+
const task = snapshotHqGitAsync(hqRoot, dest, opts, now())
|
|
464
|
+
.then(async (action) => {
|
|
465
|
+
if (action === "failed" || action === "insufficient-space") {
|
|
466
|
+
const at = now();
|
|
467
|
+
failedSnapshotAt.set(dest, at);
|
|
468
|
+
await writePersistedState(dest, { failedAt: at, action });
|
|
469
|
+
}
|
|
470
|
+
else if (action === "snapshotted" || action === "unchanged") {
|
|
229
471
|
failedSnapshotAt.delete(dest);
|
|
472
|
+
await writePersistedState(dest, null);
|
|
473
|
+
}
|
|
230
474
|
return action;
|
|
231
475
|
})
|
|
232
476
|
.finally(() => {
|