@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.
Files changed (91) hide show
  1. package/dist/command-store.d.ts +3 -0
  2. package/dist/command-store.d.ts.map +1 -1
  3. package/dist/command-store.js +4 -0
  4. package/dist/command-store.js.map +1 -1
  5. package/dist/daemon-listen.d.ts +10 -0
  6. package/dist/daemon-listen.d.ts.map +1 -0
  7. package/dist/daemon-listen.js +36 -0
  8. package/dist/daemon-listen.js.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/interactions.d.ts +3 -0
  14. package/dist/interactions.d.ts.map +1 -1
  15. package/dist/interactions.js +4 -0
  16. package/dist/interactions.js.map +1 -1
  17. package/dist/journal-manager-lifecycle.d.ts +8 -0
  18. package/dist/journal-manager-lifecycle.d.ts.map +1 -0
  19. package/dist/journal-manager-lifecycle.js +2 -0
  20. package/dist/journal-manager-lifecycle.js.map +1 -0
  21. package/dist/journal-manager.d.ts +21 -11
  22. package/dist/journal-manager.d.ts.map +1 -1
  23. package/dist/journal-manager.js +234 -198
  24. package/dist/journal-manager.js.map +1 -1
  25. package/dist/journal-prepared-operation.d.ts +53 -0
  26. package/dist/journal-prepared-operation.d.ts.map +1 -0
  27. package/dist/journal-prepared-operation.js +158 -0
  28. package/dist/journal-prepared-operation.js.map +1 -0
  29. package/dist/journal-projection-slot.d.ts +28 -0
  30. package/dist/journal-projection-slot.d.ts.map +1 -0
  31. package/dist/journal-projection-slot.js +71 -0
  32. package/dist/journal-projection-slot.js.map +1 -0
  33. package/dist/journal-projection.d.ts +2 -0
  34. package/dist/journal-projection.d.ts.map +1 -1
  35. package/dist/journal-recovery-files.d.ts +19 -1
  36. package/dist/journal-recovery-files.d.ts.map +1 -1
  37. package/dist/journal-recovery-files.js +271 -26
  38. package/dist/journal-recovery-files.js.map +1 -1
  39. package/dist/journal-recovery-operation.d.ts +27 -0
  40. package/dist/journal-recovery-operation.d.ts.map +1 -0
  41. package/dist/journal-recovery-operation.js +68 -0
  42. package/dist/journal-recovery-operation.js.map +1 -0
  43. package/dist/project-partition-preparation.d.ts +75 -0
  44. package/dist/project-partition-preparation.d.ts.map +1 -0
  45. package/dist/project-partition-preparation.js +233 -0
  46. package/dist/project-partition-preparation.js.map +1 -0
  47. package/dist/project-partitions.d.ts +18 -16
  48. package/dist/project-partitions.d.ts.map +1 -1
  49. package/dist/project-partitions.js +98 -99
  50. package/dist/project-partitions.js.map +1 -1
  51. package/dist/project-thread-listing.d.ts +14 -0
  52. package/dist/project-thread-listing.d.ts.map +1 -0
  53. package/dist/project-thread-listing.js +37 -0
  54. package/dist/project-thread-listing.js.map +1 -0
  55. package/dist/quota-projection.d.ts +9 -0
  56. package/dist/quota-projection.d.ts.map +1 -0
  57. package/dist/quota-projection.js +10 -0
  58. package/dist/quota-projection.js.map +1 -0
  59. package/dist/quota-registry.d.ts +3 -5
  60. package/dist/quota-registry.d.ts.map +1 -1
  61. package/dist/quota-registry.js +9 -10
  62. package/dist/quota-registry.js.map +1 -1
  63. package/dist/root-authority.d.ts +68 -0
  64. package/dist/root-authority.d.ts.map +1 -0
  65. package/dist/root-authority.js +380 -0
  66. package/dist/root-authority.js.map +1 -0
  67. package/dist/rpc-followers.d.ts +17 -0
  68. package/dist/rpc-followers.d.ts.map +1 -0
  69. package/dist/rpc-followers.js +46 -0
  70. package/dist/rpc-followers.js.map +1 -0
  71. package/dist/server.d.ts +4 -1
  72. package/dist/server.d.ts.map +1 -1
  73. package/dist/server.js +42 -62
  74. package/dist/server.js.map +1 -1
  75. package/dist/serving-admission.d.ts +21 -0
  76. package/dist/serving-admission.d.ts.map +1 -0
  77. package/dist/serving-admission.js +17 -0
  78. package/dist/serving-admission.js.map +1 -0
  79. package/dist/terminate.d.ts +18 -7
  80. package/dist/terminate.d.ts.map +1 -1
  81. package/dist/terminate.js +213 -69
  82. package/dist/terminate.js.map +1 -1
  83. package/dist/token.d.ts +6 -0
  84. package/dist/token.d.ts.map +1 -1
  85. package/dist/token.js +8 -0
  86. package/dist/token.js.map +1 -1
  87. package/dist/writer-lease.d.ts +76 -4
  88. package/dist/writer-lease.d.ts.map +1 -1
  89. package/dist/writer-lease.js +346 -56
  90. package/dist/writer-lease.js.map +1 -1
  91. 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
- export function fingerprintPartition(path) {
26
- const hash = createHash("sha256");
27
- if (!existsSync(path))
28
- return hash.update("missing\0").digest("hex");
29
- const root = lstatSync(path, { bigint: true });
30
- if (root.isSymbolicLink()) {
31
- hash.update(`symlink\0${readlinkSync(path)}\0`);
32
- return hash.digest("hex");
33
- }
34
- if (!root.isDirectory())
35
- return hash.update(`other\0${metadata(root)}\0`).digest("hex");
36
- // Deliberately exclude the root inode/timestamps: this content fingerprint
37
- // must remain stable when the owned partition is atomically quarantined.
38
- hash.update("directory\0");
39
- for (const name of readdirSync(path).sort()) {
40
- const entryPath = join(path, name);
41
- const stat = lstatSync(entryPath, { bigint: true });
42
- hash.update(`entry\0${name}\0${metadata(stat)}\0`);
43
- if (stat.isSymbolicLink())
44
- hash.update(`target\0${readlinkSync(entryPath)}\0`);
45
- else if (stat.isFile() && stat.nlink === 1n)
46
- hash.update(hashOwnedFile(entryPath));
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
- return hash.digest("hex");
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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"}