@claudexor/daemon 3.3.16 → 3.4.1
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/command-store.d.ts +3 -0
- package/dist/command-store.d.ts.map +1 -1
- package/dist/command-store.js +4 -0
- package/dist/command-store.js.map +1 -1
- package/dist/daemon-listen.d.ts +10 -0
- package/dist/daemon-listen.d.ts.map +1 -0
- package/dist/daemon-listen.js +36 -0
- package/dist/daemon-listen.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions.d.ts +3 -0
- package/dist/interactions.d.ts.map +1 -1
- package/dist/interactions.js +4 -0
- package/dist/interactions.js.map +1 -1
- package/dist/journal-manager-lifecycle.d.ts +8 -0
- package/dist/journal-manager-lifecycle.d.ts.map +1 -0
- package/dist/journal-manager-lifecycle.js +2 -0
- package/dist/journal-manager-lifecycle.js.map +1 -0
- package/dist/journal-manager.d.ts +21 -11
- package/dist/journal-manager.d.ts.map +1 -1
- package/dist/journal-manager.js +234 -198
- package/dist/journal-manager.js.map +1 -1
- package/dist/journal-prepared-operation.d.ts +53 -0
- package/dist/journal-prepared-operation.d.ts.map +1 -0
- package/dist/journal-prepared-operation.js +158 -0
- package/dist/journal-prepared-operation.js.map +1 -0
- package/dist/journal-projection-slot.d.ts +28 -0
- package/dist/journal-projection-slot.d.ts.map +1 -0
- package/dist/journal-projection-slot.js +71 -0
- package/dist/journal-projection-slot.js.map +1 -0
- package/dist/journal-projection.d.ts +2 -0
- package/dist/journal-projection.d.ts.map +1 -1
- package/dist/journal-recovery-files.d.ts +19 -1
- package/dist/journal-recovery-files.d.ts.map +1 -1
- package/dist/journal-recovery-files.js +271 -26
- package/dist/journal-recovery-files.js.map +1 -1
- package/dist/journal-recovery-operation.d.ts +27 -0
- package/dist/journal-recovery-operation.d.ts.map +1 -0
- package/dist/journal-recovery-operation.js +68 -0
- package/dist/journal-recovery-operation.js.map +1 -0
- package/dist/project-partition-preparation.d.ts +75 -0
- package/dist/project-partition-preparation.d.ts.map +1 -0
- package/dist/project-partition-preparation.js +233 -0
- package/dist/project-partition-preparation.js.map +1 -0
- package/dist/project-partitions.d.ts +18 -16
- package/dist/project-partitions.d.ts.map +1 -1
- package/dist/project-partitions.js +98 -99
- package/dist/project-partitions.js.map +1 -1
- package/dist/project-thread-listing.d.ts +14 -0
- package/dist/project-thread-listing.d.ts.map +1 -0
- package/dist/project-thread-listing.js +37 -0
- package/dist/project-thread-listing.js.map +1 -0
- package/dist/quota-projection.d.ts +9 -0
- package/dist/quota-projection.d.ts.map +1 -0
- package/dist/quota-projection.js +10 -0
- package/dist/quota-projection.js.map +1 -0
- package/dist/quota-registry.d.ts +3 -5
- package/dist/quota-registry.d.ts.map +1 -1
- package/dist/quota-registry.js +9 -10
- package/dist/quota-registry.js.map +1 -1
- package/dist/root-authority.d.ts +68 -0
- package/dist/root-authority.d.ts.map +1 -0
- package/dist/root-authority.js +380 -0
- package/dist/root-authority.js.map +1 -0
- package/dist/rpc-followers.d.ts +17 -0
- package/dist/rpc-followers.d.ts.map +1 -0
- package/dist/rpc-followers.js +46 -0
- package/dist/rpc-followers.js.map +1 -0
- package/dist/server.d.ts +4 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +42 -62
- package/dist/server.js.map +1 -1
- package/dist/serving-admission.d.ts +21 -0
- package/dist/serving-admission.d.ts.map +1 -0
- package/dist/serving-admission.js +17 -0
- package/dist/serving-admission.js.map +1 -0
- package/dist/terminate.d.ts +18 -7
- package/dist/terminate.d.ts.map +1 -1
- package/dist/terminate.js +213 -69
- package/dist/terminate.js.map +1 -1
- package/dist/token.d.ts +6 -0
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js +8 -0
- package/dist/token.js.map +1 -1
- package/dist/writer-lease.d.ts +76 -4
- package/dist/writer-lease.d.ts.map +1 -1
- package/dist/writer-lease.js +346 -56
- package/dist/writer-lease.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
-
import { closeSync, constants, existsSync, fchmodSync, fstatSync, fsyncSync, lstatSync, openSync, readFileSync, readdirSync, readlinkSync, readSync, renameSync, rmSync, writeSync, } from "node:fs";
|
|
3
|
-
import { dirname, join } from "node:path";
|
|
2
|
+
import { closeSync, constants, existsSync, fchmodSync, fstatSync, fsyncSync, lstatSync, openSync, readFileSync, readdirSync, readlinkSync, readSync, realpathSync, renameSync, rmSync, writeSync, } from "node:fs";
|
|
3
|
+
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
4
4
|
import { JournalRecoveryRequiredError } from "@claudexor/journal";
|
|
5
5
|
import { ensureCanonicalPrivateDirectory, fsyncDirectory } from "@claudexor/util";
|
|
6
6
|
export function recoveryFrom(error, fallback) {
|
|
@@ -22,30 +22,169 @@ export function cloneRecovery(value) {
|
|
|
22
22
|
export function safeMessage(value) {
|
|
23
23
|
return value instanceof Error ? value.message : String(value);
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
/** Observe a recovery tree without throwing. Callers must reject `problem`
|
|
26
|
+
* before trusting the fingerprint for activation or mutation. */
|
|
27
|
+
export function fingerprintPartition(path, trustedRoot = dirname(path)) {
|
|
28
|
+
const contentHash = createHash("sha256");
|
|
29
|
+
const identityHash = createHash("sha256");
|
|
30
|
+
let exists = false;
|
|
31
|
+
const problems = [];
|
|
32
|
+
try {
|
|
33
|
+
const ancestry = inspectCanonicalAncestry(path, trustedRoot, identityHash, problems);
|
|
34
|
+
const root = ancestry.target;
|
|
35
|
+
exists = root !== null;
|
|
36
|
+
if (!root) {
|
|
37
|
+
contentHash.update("missing\0");
|
|
38
|
+
}
|
|
39
|
+
else if (root.isSymbolicLink()) {
|
|
40
|
+
contentHash.update(`symlink\0${safeReadlink(path)}\0`);
|
|
41
|
+
problems.push("journal tree root is a symbolic link");
|
|
42
|
+
}
|
|
43
|
+
else if (!root.isDirectory()) {
|
|
44
|
+
contentHash.update(`other\0${metadata(root)}\0`);
|
|
45
|
+
problems.push("journal tree root is not a directory");
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// Preserve the public recovery fingerprint across an atomic quarantine
|
|
49
|
+
// rename and across this preparation hardening. Path/security identity
|
|
50
|
+
// is intentionally separate below.
|
|
51
|
+
contentHash.update("directory\0");
|
|
52
|
+
fingerprintDirectory(path, contentHash, root);
|
|
53
|
+
}
|
|
54
|
+
revalidateAncestry(ancestry, problems);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
problems.push(`journal tree could not be fingerprinted safely: ${safeMessage(error)}`);
|
|
58
|
+
contentHash.update(`fingerprint-error\0${safeMessage(error)}\0`);
|
|
59
|
+
identityHash.update(`fingerprint-error\0${safeMessage(error)}\0`);
|
|
60
|
+
}
|
|
61
|
+
const fingerprint = contentHash.digest("hex");
|
|
62
|
+
identityHash.update(`content\0${fingerprint}\0`);
|
|
63
|
+
return {
|
|
64
|
+
fingerprint,
|
|
65
|
+
preparationIdentity: identityHash.digest("hex"),
|
|
66
|
+
exists,
|
|
67
|
+
problem: problems[0] ?? null,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function requireStablePreparationIdentity(observed, context) {
|
|
71
|
+
if (observed.problem)
|
|
72
|
+
throw new Error(`${context}: ${observed.problem}`);
|
|
73
|
+
return observed.preparationIdentity;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* S2-CR1: the shared parent of every partition's recovery-operations dir is
|
|
77
|
+
* DAEMON-OWNED MUTABLE INFRASTRUCTURE — the first quarantine on a root
|
|
78
|
+
* creates it (journal-manager quarantineAndStartFresh). Its existence must
|
|
79
|
+
* not bear preparation identity, or that legitimate write would poison the
|
|
80
|
+
* missing-ancestry suffix of every OTHER still-prepared partition and flip a
|
|
81
|
+
* healthy sibling into recovery_required. Its privacy/canonical form is
|
|
82
|
+
* still fully validated whenever it is present, and it stays identity-BEARING
|
|
83
|
+
* when it is the fingerprinted target itself.
|
|
84
|
+
*/
|
|
85
|
+
const IDENTITY_EXEMPT_INFRASTRUCTURE = "recovery-operations";
|
|
86
|
+
function inspectCanonicalAncestry(path, trustedRoot, identityHash, problems) {
|
|
87
|
+
const absolutePath = resolve(path);
|
|
88
|
+
const absoluteRoot = resolve(trustedRoot);
|
|
89
|
+
const rel = relative(absoluteRoot, absolutePath);
|
|
90
|
+
if (isAbsolute(rel) || rel === ".." || rel.startsWith(`..${sep}`)) {
|
|
91
|
+
throw new Error(`journal tree escapes trusted root: ${absolutePath}`);
|
|
92
|
+
}
|
|
93
|
+
const paths = [absoluteRoot];
|
|
94
|
+
if (rel) {
|
|
95
|
+
let cursor = absoluteRoot;
|
|
96
|
+
for (const component of rel.split(sep)) {
|
|
97
|
+
cursor = join(cursor, component);
|
|
98
|
+
paths.push(cursor);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const identityExempt = (index) => index !== paths.length - 1 &&
|
|
102
|
+
relative(absoluteRoot, paths[index]) === IDENTITY_EXEMPT_INFRASTRUCTURE;
|
|
103
|
+
const entries = [];
|
|
104
|
+
let missingPath = null;
|
|
105
|
+
for (const [index, entryPath] of paths.entries()) {
|
|
106
|
+
let stat;
|
|
107
|
+
try {
|
|
108
|
+
stat = lstatSync(entryPath, { bigint: true });
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
if (errorCode(error) !== "ENOENT")
|
|
112
|
+
throw error;
|
|
113
|
+
missingPath = entryPath;
|
|
114
|
+
identityHash.update(`missing\0${paths
|
|
115
|
+
.slice(index)
|
|
116
|
+
.filter((_, offset) => !identityExempt(index + offset))
|
|
117
|
+
.map((value) => relative(absoluteRoot, value))
|
|
118
|
+
.join("\0")}\0`);
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
entries.push({ path: entryPath, stat });
|
|
122
|
+
if (!identityExempt(index)) {
|
|
123
|
+
identityHash.update(`path\0${relative(absoluteRoot, entryPath)}\0${identityMetadata(stat)}\0`);
|
|
124
|
+
}
|
|
125
|
+
if (stat.isSymbolicLink()) {
|
|
126
|
+
problems.push(`journal tree ancestry is a symbolic link: ${entryPath}`);
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
const isTarget = index === paths.length - 1;
|
|
130
|
+
if (!isTarget && !stat.isDirectory()) {
|
|
131
|
+
problems.push(`journal tree ancestry is not a directory: ${entryPath}`);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
if (stat.isDirectory())
|
|
135
|
+
validatePrivateDirectory(entryPath, stat, problems);
|
|
136
|
+
}
|
|
137
|
+
const final = entries.at(-1);
|
|
138
|
+
return {
|
|
139
|
+
target: !missingPath && final?.path === absolutePath ? final.stat : null,
|
|
140
|
+
entries,
|
|
141
|
+
missingPath,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function validatePrivateDirectory(path, stat, problems) {
|
|
145
|
+
if (typeof process.getuid === "function" && stat.uid !== BigInt(process.getuid())) {
|
|
146
|
+
problems.push(`journal tree directory is not owned by the current user: ${path}`);
|
|
147
|
+
}
|
|
148
|
+
if (process.platform !== "win32" && Number(stat.mode & 511n) !== 0o700) {
|
|
149
|
+
problems.push(`journal tree directory is not private: ${path}`);
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
if (realpathSync.native(path) !== resolve(path)) {
|
|
153
|
+
problems.push(`journal tree directory is not canonical: ${path}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
problems.push(`journal tree directory cannot be resolved canonically: ${safeMessage(error)}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function revalidateAncestry(observed, problems) {
|
|
161
|
+
for (const entry of observed.entries) {
|
|
162
|
+
try {
|
|
163
|
+
const after = lstatSync(entry.path, { bigint: true });
|
|
164
|
+
if (observationMetadata(entry.stat) !== observationMetadata(after)) {
|
|
165
|
+
problems.push(`journal tree ancestry changed while fingerprinting: ${entry.path}`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
problems.push(`journal tree ancestry became unavailable: ${safeMessage(error)}`);
|
|
170
|
+
}
|
|
47
171
|
}
|
|
48
|
-
|
|
172
|
+
if (observed.missingPath) {
|
|
173
|
+
try {
|
|
174
|
+
lstatSync(observed.missingPath);
|
|
175
|
+
problems.push(`journal tree appeared while fingerprinting: ${observed.missingPath}`);
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
if (errorCode(error) !== "ENOENT") {
|
|
179
|
+
problems.push(`journal tree missing state is ambiguous: ${safeMessage(error)}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
export function requireStableFingerprint(observed, context) {
|
|
185
|
+
if (observed.problem)
|
|
186
|
+
throw new Error(`${context}: ${observed.problem}`);
|
|
187
|
+
return observed.fingerprint;
|
|
49
188
|
}
|
|
50
189
|
export function exportPartitionEntries(source, destination) {
|
|
51
190
|
if (!existsSync(source))
|
|
@@ -99,6 +238,46 @@ export function exportPartitionEntries(source, destination) {
|
|
|
99
238
|
};
|
|
100
239
|
});
|
|
101
240
|
}
|
|
241
|
+
export function exportJournalRecovery(input) {
|
|
242
|
+
const fingerprint = requireStableFingerprint(fingerprintPartition(input.partitionDir, input.rootDir), "journal recovery export input is unavailable");
|
|
243
|
+
const exportId = `journal-export-${input.now().getTime().toString(36)}-${randomUUID()}`;
|
|
244
|
+
const exportsRoot = join(input.rootDir, "recovery-exports");
|
|
245
|
+
ensureCanonicalPrivateDirectory(exportsRoot);
|
|
246
|
+
const bundlePath = join(exportsRoot, exportId);
|
|
247
|
+
ensureCanonicalPrivateDirectory(bundlePath);
|
|
248
|
+
try {
|
|
249
|
+
const entries = exportPartitionEntries(input.partitionDir, bundlePath);
|
|
250
|
+
const createdAt = input.now().toISOString();
|
|
251
|
+
const manifestPath = join(bundlePath, "manifest.json");
|
|
252
|
+
writeExclusiveFile(manifestPath, Buffer.from(`${JSON.stringify({
|
|
253
|
+
schemaVersion: 1,
|
|
254
|
+
exportId,
|
|
255
|
+
partition: input.partition,
|
|
256
|
+
fingerprint,
|
|
257
|
+
recovery: input.recovery,
|
|
258
|
+
createdAt,
|
|
259
|
+
entries,
|
|
260
|
+
}, null, 2)}\n`), 0o400);
|
|
261
|
+
fsyncDirectory(bundlePath);
|
|
262
|
+
if (requireStableFingerprint(fingerprintPartition(input.partitionDir, input.rootDir), "journal recovery export input became unavailable") !== fingerprint) {
|
|
263
|
+
throw new Error("journal changed during recovery export");
|
|
264
|
+
}
|
|
265
|
+
return {
|
|
266
|
+
schemaVersion: 1,
|
|
267
|
+
exportId,
|
|
268
|
+
partition: input.partition,
|
|
269
|
+
fingerprint,
|
|
270
|
+
bundlePath,
|
|
271
|
+
manifestSha256: sha256File(manifestPath),
|
|
272
|
+
createdAt,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
catch (error) {
|
|
276
|
+
rmSync(bundlePath, { recursive: true, force: true });
|
|
277
|
+
fsyncDirectory(exportsRoot);
|
|
278
|
+
throw error;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
102
281
|
export function readOwnedFile(path) {
|
|
103
282
|
const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
104
283
|
try {
|
|
@@ -144,10 +323,13 @@ export function sha256(bytes) {
|
|
|
144
323
|
export function sha256File(path) {
|
|
145
324
|
return hashOwnedFile(path).toString("hex");
|
|
146
325
|
}
|
|
147
|
-
function hashOwnedFile(path) {
|
|
326
|
+
function hashOwnedFile(path, expected) {
|
|
148
327
|
const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
149
328
|
try {
|
|
150
329
|
const before = fstatSync(fd, { bigint: true });
|
|
330
|
+
if (expected && metadata(expected) !== metadata(before)) {
|
|
331
|
+
throw new Error(`journal file changed before hashing: ${path}`);
|
|
332
|
+
}
|
|
151
333
|
assertOwnedRegular(path, before);
|
|
152
334
|
const hash = createHash("sha256");
|
|
153
335
|
const buffer = Buffer.allocUnsafe(64 * 1024);
|
|
@@ -183,6 +365,69 @@ function assertOwnedRegular(path, opened) {
|
|
|
183
365
|
function metadata(stat) {
|
|
184
366
|
return [stat.dev, stat.ino, stat.mode, stat.nlink, stat.size, stat.mtimeNs, stat.ctimeNs].join(":");
|
|
185
367
|
}
|
|
368
|
+
function securityMetadata(stat) {
|
|
369
|
+
const base = [entryType(stat), stat.mode & 511n, stat.uid, stat.gid];
|
|
370
|
+
if (!stat.isDirectory())
|
|
371
|
+
base.push(stat.nlink);
|
|
372
|
+
return base.join(":");
|
|
373
|
+
}
|
|
374
|
+
function identityMetadata(stat) {
|
|
375
|
+
return [stat.dev, stat.ino, securityMetadata(stat)].join(":");
|
|
376
|
+
}
|
|
377
|
+
function observationMetadata(stat) {
|
|
378
|
+
return [identityMetadata(stat), stat.size, stat.mtimeNs, stat.ctimeNs].join(":");
|
|
379
|
+
}
|
|
380
|
+
function entryType(stat) {
|
|
381
|
+
if (stat.isDirectory())
|
|
382
|
+
return "directory";
|
|
383
|
+
if (stat.isFile())
|
|
384
|
+
return "file";
|
|
385
|
+
if (stat.isSymbolicLink())
|
|
386
|
+
return "symlink";
|
|
387
|
+
return "other";
|
|
388
|
+
}
|
|
389
|
+
function safeReadlink(path) {
|
|
390
|
+
try {
|
|
391
|
+
return readlinkSync(path);
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
return `unavailable:${errorCode(error) ?? "unknown"}`;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
function fingerprintDirectory(path, hash, before) {
|
|
398
|
+
const names = readdirSync(path).sort();
|
|
399
|
+
for (const name of names) {
|
|
400
|
+
const entryPath = join(path, name);
|
|
401
|
+
const stat = lstatSync(entryPath, { bigint: true });
|
|
402
|
+
hash.update(`entry\0${name}\0${metadata(stat)}\0`);
|
|
403
|
+
if (stat.isSymbolicLink()) {
|
|
404
|
+
hash.update(`target\0${readlinkSync(entryPath)}\0`);
|
|
405
|
+
assertUnchanged(entryPath, stat);
|
|
406
|
+
}
|
|
407
|
+
else if (stat.isFile() && stat.nlink === 1n) {
|
|
408
|
+
hash.update(hashOwnedFile(entryPath, stat));
|
|
409
|
+
assertUnchanged(entryPath, stat);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
assertUnchanged(entryPath, stat);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
if (readdirSync(path).sort().join("\0") !== names.join("\0")) {
|
|
416
|
+
throw new Error(`journal directory entries changed while hashing: ${path}`);
|
|
417
|
+
}
|
|
418
|
+
assertUnchanged(path, before);
|
|
419
|
+
}
|
|
420
|
+
function assertUnchanged(path, before) {
|
|
421
|
+
const after = lstatSync(path, { bigint: true });
|
|
422
|
+
if (metadata(before) !== metadata(after)) {
|
|
423
|
+
throw new Error(`journal tree changed while hashing: ${path}`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
function errorCode(error) {
|
|
427
|
+
return error && typeof error === "object" && "code" in error
|
|
428
|
+
? String(error.code)
|
|
429
|
+
: undefined;
|
|
430
|
+
}
|
|
186
431
|
export function writeExclusiveFile(path, bytes, mode) {
|
|
187
432
|
const fd = openSync(path, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
188
433
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-recovery-files.js","sourceRoot":"","sources":["../src/journal-recovery-files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"journal-recovery-files.js","sourceRoot":"","sources":["../src/journal-recovery-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type ControlJournalQuarantineReceipt, type ControlJournalQuarantineRequest } from "@claudexor/schema";
|
|
2
|
+
export type JournalQuarantineRequest = ControlJournalQuarantineRequest & {
|
|
3
|
+
idempotencyKey: string;
|
|
4
|
+
};
|
|
5
|
+
export interface QuarantineOperation {
|
|
6
|
+
schemaVersion: 1;
|
|
7
|
+
operationId: string;
|
|
8
|
+
keyDigest: string;
|
|
9
|
+
requestDigest: string;
|
|
10
|
+
expectedFingerprint: string;
|
|
11
|
+
quarantinePath: string;
|
|
12
|
+
status: "prepared" | "completed";
|
|
13
|
+
receipt: ControlJournalQuarantineReceipt | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function readOperation(path: string, quarantineDir: string, partition: string, artifactPrefix: string): QuarantineOperation | null;
|
|
16
|
+
export declare function matchingReceipt(operation: QuarantineOperation, value: unknown, partition: string, artifactPrefix: string): ControlJournalQuarantineReceipt;
|
|
17
|
+
export declare function validateRequest(input: JournalQuarantineRequest): void;
|
|
18
|
+
export declare function quarantineRequestDigest(partition: string, input: JournalQuarantineRequest): string;
|
|
19
|
+
export declare function conflict(code: string): Error & {
|
|
20
|
+
code: string;
|
|
21
|
+
status: number;
|
|
22
|
+
};
|
|
23
|
+
export declare function typedError(code: string, status: number, message: string): Error & {
|
|
24
|
+
code: string;
|
|
25
|
+
status: number;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=journal-recovery-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-recovery-operation.d.ts","sourceRoot":"","sources":["../src/journal-recovery-operation.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACrC,MAAM,mBAAmB,CAAC;AAG3B,MAAM,MAAM,wBAAwB,GAAG,+BAA+B,GAAG;IACvE,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,CAAC,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,UAAU,GAAG,WAAW,CAAC;IACjC,OAAO,EAAE,+BAA+B,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,mBAAmB,GAAG,IAAI,CAyB5B;AAED,wBAAgB,eAAe,CAC7B,SAAS,EAAE,mBAAmB,EAC9B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,GACrB,+BAA+B,CAYjC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAcrE;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,wBAAwB,GAC9B,MAAM,CAUR;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE/E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;EAEvE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { basename, join } from "node:path";
|
|
3
|
+
import { ControlJournalQuarantineReceipt as QuarantineReceiptSchema, } from "@claudexor/schema";
|
|
4
|
+
import { readOwnedFile, sha256 } from "./journal-recovery-files.js";
|
|
5
|
+
export function readOperation(path, quarantineDir, partition, artifactPrefix) {
|
|
6
|
+
if (!existsSync(path))
|
|
7
|
+
return null;
|
|
8
|
+
const value = JSON.parse(readOwnedFile(path).toString("utf8"));
|
|
9
|
+
if (!isRecord(value) ||
|
|
10
|
+
value.schemaVersion !== 1 ||
|
|
11
|
+
typeof value.operationId !== "string" ||
|
|
12
|
+
typeof value.keyDigest !== "string" ||
|
|
13
|
+
basename(path) !== `${value.keyDigest}.json` ||
|
|
14
|
+
typeof value.requestDigest !== "string" ||
|
|
15
|
+
typeof value.expectedFingerprint !== "string" ||
|
|
16
|
+
typeof value.quarantinePath !== "string" ||
|
|
17
|
+
value.quarantinePath !== join(quarantineDir, `${artifactPrefix}-${value.operationId}`) ||
|
|
18
|
+
(value.status !== "prepared" && value.status !== "completed")) {
|
|
19
|
+
throw new Error("recovery operation is malformed");
|
|
20
|
+
}
|
|
21
|
+
const operation = value;
|
|
22
|
+
if (operation.status === "prepared" && operation.receipt !== null) {
|
|
23
|
+
throw new Error("prepared recovery operation contains a receipt");
|
|
24
|
+
}
|
|
25
|
+
if (operation.status === "completed") {
|
|
26
|
+
matchingReceipt(operation, undefined, partition, artifactPrefix);
|
|
27
|
+
}
|
|
28
|
+
return operation;
|
|
29
|
+
}
|
|
30
|
+
export function matchingReceipt(operation, value, partition, artifactPrefix) {
|
|
31
|
+
const receipt = QuarantineReceiptSchema.parse(value ?? operation.receipt);
|
|
32
|
+
if (receipt.operationId !== operation.operationId ||
|
|
33
|
+
receipt.partition !== partition ||
|
|
34
|
+
receipt.previousFingerprint !== operation.expectedFingerprint ||
|
|
35
|
+
receipt.quarantinePath !== operation.quarantinePath ||
|
|
36
|
+
receipt.quarantineArtifactId !== `${artifactPrefix}-${operation.operationId}`) {
|
|
37
|
+
throw typedError("recovery_receipt_mismatch", 503, "quarantine receipt does not match intent");
|
|
38
|
+
}
|
|
39
|
+
return receipt;
|
|
40
|
+
}
|
|
41
|
+
export function validateRequest(input) {
|
|
42
|
+
if (!input.idempotencyKey || input.idempotencyKey.length > 256) {
|
|
43
|
+
throw typedError("invalid_idempotency_key", 400, "Idempotency-Key must contain 1-256 characters");
|
|
44
|
+
}
|
|
45
|
+
if (input.confirmation !== "quarantine_and_start_fresh") {
|
|
46
|
+
throw typedError("quarantine_confirmation_required", 400, "explicit confirmation is required");
|
|
47
|
+
}
|
|
48
|
+
if (!/^[a-f0-9]{64}$/.test(input.expectedFingerprint)) {
|
|
49
|
+
throw typedError("invalid_recovery_fingerprint", 400, "expectedFingerprint must be SHA-256");
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export function quarantineRequestDigest(partition, input) {
|
|
53
|
+
return sha256(Buffer.from(JSON.stringify({
|
|
54
|
+
partition,
|
|
55
|
+
expectedFingerprint: input.expectedFingerprint,
|
|
56
|
+
confirmation: input.confirmation,
|
|
57
|
+
})));
|
|
58
|
+
}
|
|
59
|
+
export function conflict(code) {
|
|
60
|
+
return typedError(code, 409, code.replaceAll("_", " "));
|
|
61
|
+
}
|
|
62
|
+
export function typedError(code, status, message) {
|
|
63
|
+
return Object.assign(new Error(message), { code, status });
|
|
64
|
+
}
|
|
65
|
+
function isRecord(value) {
|
|
66
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=journal-recovery-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-recovery-operation.js","sourceRoot":"","sources":["../src/journal-recovery-operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type CommandStore } from "./command-store.js";
|
|
2
|
+
import { type InteractionStore } from "./interactions.js";
|
|
3
|
+
import { JournalManager, type JournalProjectionSlot } from "./journal-manager.js";
|
|
4
|
+
import { type OperatorDecisionStore } from "./operator-decisions.js";
|
|
5
|
+
import type { ProjectStore } from "./projects.js";
|
|
6
|
+
import { type RunEventStore } from "./run-events.js";
|
|
7
|
+
import { type ThreadHeadPingSink, type ThreadStore } from "./threads.js";
|
|
8
|
+
export interface ProjectPartitionEntry {
|
|
9
|
+
manager: JournalManager;
|
|
10
|
+
commands: JournalProjectionSlot<CommandStore>;
|
|
11
|
+
interactions: JournalProjectionSlot<InteractionStore>;
|
|
12
|
+
decisions: JournalProjectionSlot<OperatorDecisionStore>;
|
|
13
|
+
runEvents: JournalProjectionSlot<RunEventStore>;
|
|
14
|
+
threads: JournalProjectionSlot<ThreadStore>;
|
|
15
|
+
}
|
|
16
|
+
export interface ProjectPartitionPreparationEntry {
|
|
17
|
+
projectId: string;
|
|
18
|
+
partition: string;
|
|
19
|
+
status: "ready" | "recovery_required";
|
|
20
|
+
virtual: boolean;
|
|
21
|
+
fingerprint: string;
|
|
22
|
+
manager: JournalManager;
|
|
23
|
+
}
|
|
24
|
+
export interface ProjectPartitionsPreparation {
|
|
25
|
+
coverage: "complete" | "global_registry_unavailable";
|
|
26
|
+
fingerprint: string | null;
|
|
27
|
+
registeredProjectIds: string[];
|
|
28
|
+
trustedProjectRoots: string[];
|
|
29
|
+
partitions: ProjectPartitionPreparationEntry[];
|
|
30
|
+
readyPartitions: string[];
|
|
31
|
+
recoveryRequiredPartitions: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface PreparedProjectPartitions {
|
|
34
|
+
receipt: ProjectPartitionsPreparation;
|
|
35
|
+
entries: Map<string, ProjectPartitionEntry>;
|
|
36
|
+
}
|
|
37
|
+
export declare class ProjectPartitionCollection extends Map<string, ProjectPartitionEntry> {
|
|
38
|
+
private readonly rootDir;
|
|
39
|
+
private readonly projects;
|
|
40
|
+
private readonly headPing?;
|
|
41
|
+
constructor(rootDir: string, projects: JournalProjectionSlot<ProjectStore>, headPing?: ThreadHeadPingSink | undefined);
|
|
42
|
+
sync(): void;
|
|
43
|
+
ensure(projectId: string): ProjectPartitionEntry;
|
|
44
|
+
healthy(): ProjectPartitionEntry[];
|
|
45
|
+
healthyRoots(): string[];
|
|
46
|
+
}
|
|
47
|
+
export declare function prepareProjectPartitions(input: {
|
|
48
|
+
rootDir: string;
|
|
49
|
+
projects: JournalProjectionSlot<ProjectStore>;
|
|
50
|
+
headPing?: ThreadHeadPingSink;
|
|
51
|
+
}): PreparedProjectPartitions;
|
|
52
|
+
/**
|
|
53
|
+
* Live re-verdict for the in-process reopen (C6): recompute the stage-2
|
|
54
|
+
* receipt from CURRENT partition state. A partition the operator quarantined
|
|
55
|
+
* over the recovery route was reopened by its manager (openGeneration) and
|
|
56
|
+
* now inspects ready; a registry that became readable after a global reopen
|
|
57
|
+
* restores coverage. Read-only for everything still prepared — a registered
|
|
58
|
+
* project without an entry gets a read-only prepare, never a write.
|
|
59
|
+
*/
|
|
60
|
+
export declare function refreshProjectPartitionsPreparation(input: {
|
|
61
|
+
rootDir: string;
|
|
62
|
+
projects: JournalProjectionSlot<ProjectStore>;
|
|
63
|
+
headPing?: ThreadHeadPingSink;
|
|
64
|
+
previous: ProjectPartitionsPreparation;
|
|
65
|
+
entries: ProjectPartitionCollection;
|
|
66
|
+
}): ProjectPartitionsPreparation;
|
|
67
|
+
export declare function activatePreparedProjectPartitions(input: {
|
|
68
|
+
rootDir: string;
|
|
69
|
+
projects: JournalProjectionSlot<ProjectStore>;
|
|
70
|
+
headPing?: ThreadHeadPingSink;
|
|
71
|
+
receipt: ProjectPartitionsPreparation;
|
|
72
|
+
entries: ProjectPartitionCollection;
|
|
73
|
+
resetReceipt(receipt: ProjectPartitionsPreparation): void;
|
|
74
|
+
}): void;
|
|
75
|
+
//# sourceMappingURL=project-partition-preparation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-partition-preparation.d.ts","sourceRoot":"","sources":["../src/project-partition-preparation.ts"],"names":[],"mappings":"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"}
|