@ricsam/r5d-worker 0.0.123 → 0.0.125

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 (64) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/command-launcher.cjs +6 -2
  3. package/dist/cjs/main.cjs +496 -238
  4. package/dist/cjs/package.json +1 -1
  5. package/dist/cjs/project-checkout-garbage.cjs +32 -3
  6. package/dist/cjs/project-workspace-state.cjs +51 -35
  7. package/dist/cjs/project-worktrees.cjs +79 -34
  8. package/dist/cjs/recovery-journal-protocol.cjs +56 -0
  9. package/dist/cjs/recovery-journal-runtime.cjs +133 -0
  10. package/dist/cjs/recovery-journal-thread.cjs +9 -0
  11. package/dist/cjs/recovery-journal.cjs +735 -0
  12. package/dist/cjs/recovery-store.cjs +8 -0
  13. package/dist/cjs/session-file-mutations.cjs +61 -0
  14. package/dist/cjs/working-tree-mirror.cjs +1 -0
  15. package/dist/cjs/workspace-command-sync-policy.cjs +37 -8
  16. package/dist/cjs/workspace-filesystem-executor-thread.cjs +36 -0
  17. package/dist/cjs/workspace-filesystem-executor.cjs +327 -0
  18. package/dist/cjs/workspace-filesystem-job-types.cjs +134 -0
  19. package/dist/cjs/workspace-filesystem-jobs.cjs +57 -0
  20. package/dist/cjs/workspace-git-sync.cjs +275 -201
  21. package/dist/cjs/workspace-mount-hold-fence.cjs +120 -0
  22. package/dist/mjs/command-launcher.mjs +6 -2
  23. package/dist/mjs/main.mjs +499 -244
  24. package/dist/mjs/package.json +1 -1
  25. package/dist/mjs/project-checkout-garbage.mjs +30 -2
  26. package/dist/mjs/project-workspace-state.mjs +51 -35
  27. package/dist/mjs/project-worktrees.mjs +74 -34
  28. package/dist/mjs/recovery-journal-protocol.mjs +30 -0
  29. package/dist/mjs/recovery-journal-runtime.mjs +112 -0
  30. package/dist/mjs/recovery-journal-thread.mjs +8 -0
  31. package/dist/mjs/recovery-journal.mjs +687 -0
  32. package/dist/mjs/recovery-store.mjs +8 -0
  33. package/dist/mjs/session-file-mutations.mjs +37 -0
  34. package/dist/mjs/working-tree-mirror.mjs +1 -0
  35. package/dist/mjs/workspace-command-sync-policy.mjs +37 -8
  36. package/dist/mjs/workspace-filesystem-executor-thread.mjs +38 -0
  37. package/dist/mjs/workspace-filesystem-executor.mjs +287 -0
  38. package/dist/mjs/workspace-filesystem-job-types.mjs +106 -0
  39. package/dist/mjs/workspace-filesystem-jobs.mjs +51 -0
  40. package/dist/mjs/workspace-git-sync.mjs +264 -202
  41. package/dist/mjs/workspace-mount-hold-fence.mjs +95 -0
  42. package/dist/types/command-launcher.d.ts +2 -1
  43. package/dist/types/main.d.ts +30 -19
  44. package/dist/types/project-checkout-garbage.d.ts +19 -2
  45. package/dist/types/project-workspace-state.d.ts +9 -9
  46. package/dist/types/project-worktrees.d.ts +49 -5
  47. package/dist/types/recovery-journal-protocol.d.ts +35 -0
  48. package/dist/types/recovery-journal-runtime.d.ts +12 -0
  49. package/dist/types/recovery-journal-stall-fixture.d.ts +1 -0
  50. package/dist/types/recovery-journal-thread.d.ts +1 -0
  51. package/dist/types/recovery-journal.d.ts +246 -0
  52. package/dist/types/recovery-store.d.ts +6 -0
  53. package/dist/types/session-file-mutations.d.ts +22 -0
  54. package/dist/types/workspace-command-sync-policy.d.ts +22 -7
  55. package/dist/types/workspace-filesystem-executor-thread.d.ts +1 -0
  56. package/dist/types/workspace-filesystem-executor.d.ts +123 -0
  57. package/dist/types/workspace-filesystem-job-types.d.ts +246 -0
  58. package/dist/types/workspace-filesystem-jobs.d.ts +7 -0
  59. package/dist/types/workspace-git-sync.d.ts +113 -7
  60. package/dist/types/workspace-mount-hold-fence.d.ts +42 -0
  61. package/package.json +1 -1
  62. package/dist/cjs/project-snapshot-recovery-runner.cjs +0 -171
  63. package/dist/mjs/project-snapshot-recovery-runner.mjs +0 -135
  64. package/dist/types/project-snapshot-recovery-runner.d.ts +0 -10
@@ -1,135 +0,0 @@
1
- import path from "node:path";
2
- import { spawn } from "node:child_process";
3
- import { recoverStaleProjectWorktreeSnapshots } from "./project-worktrees.mjs";
4
- const PROJECT_SNAPSHOT_RECOVERY_HELPER_COMMAND = "__recover-project-snapshots";
5
- function requireAbsolutePath(value, label) {
6
- if (!value) throw new Error(`Missing ${label}`);
7
- const resolved = path.resolve(value);
8
- if (resolved !== value) throw new Error(`${label} must be an absolute path`);
9
- return resolved;
10
- }
11
- function parseHelperArguments(args) {
12
- let projectsRoot;
13
- let snapshotRoot;
14
- for (let index = 0; index < args.length; index += 1) {
15
- const argument = args[index];
16
- if (argument === "--projects-root") {
17
- projectsRoot = args[index + 1];
18
- index += 1;
19
- continue;
20
- }
21
- if (argument === "--snapshot-root") {
22
- snapshotRoot = args[index + 1];
23
- index += 1;
24
- continue;
25
- }
26
- throw new Error(`Unknown project snapshot recovery helper argument: ${argument ?? "(missing)"}`);
27
- }
28
- return {
29
- projectsRoot: requireAbsolutePath(projectsRoot, "projects root"),
30
- snapshotRoot: requireAbsolutePath(snapshotRoot, "snapshot root")
31
- };
32
- }
33
- function writeHelperMessage(message) {
34
- process.stdout.write(`${JSON.stringify(message)}
35
- `);
36
- }
37
- function runProjectSnapshotRecoveryHelper(args) {
38
- const { projectsRoot, snapshotRoot } = parseHelperArguments(args);
39
- const result = recoverStaleProjectWorktreeSnapshots({
40
- projectsRoot,
41
- temporaryRoot: snapshotRoot,
42
- onProgress: (progress) => writeHelperMessage({ type: "progress", progress })
43
- });
44
- writeHelperMessage({ type: "result", result });
45
- return result.failed.length === 0 ? 0 : 1;
46
- }
47
- function isRecoveryProgress(value) {
48
- if (!value || typeof value !== "object") return false;
49
- const progress = value;
50
- return progress.operation === "restore" && (progress.phase === "scanning" || progress.phase === "copying" || progress.phase === "moving" || progress.phase === "syncing" || progress.phase === "cleaning") && typeof progress.projectRoot === "string" && Number.isSafeInteger(progress.completedBranches) && Number.isSafeInteger(progress.totalBranches) && typeof progress.completedBytes === "number" && Number.isFinite(progress.completedBytes) && (progress.totalBytes === void 0 || typeof progress.totalBytes === "number" && Number.isFinite(progress.totalBytes));
51
- }
52
- function isRecoveryResult(value) {
53
- if (!value || typeof value !== "object") return false;
54
- const result = value;
55
- return Array.isArray(result.restored) && Array.isArray(result.removed) && Array.isArray(result.failed);
56
- }
57
- function recoveryChildEnvironment() {
58
- const environment = {};
59
- for (const name of ["PATH", "TMPDIR", "TMP", "TEMP", "SystemRoot", "WINDIR"]) {
60
- const value = process.env[name];
61
- if (value !== void 0) environment[name] = value;
62
- }
63
- return environment;
64
- }
65
- async function recoverProjectSnapshotsInChild(input) {
66
- const entrypoint = process.argv[1];
67
- if (!entrypoint) throw new Error("Cannot locate the r5d-worker runtime entrypoint for snapshot recovery");
68
- const child = spawn(
69
- process.execPath,
70
- [
71
- entrypoint,
72
- PROJECT_SNAPSHOT_RECOVERY_HELPER_COMMAND,
73
- "--projects-root",
74
- path.resolve(input.projectsRoot),
75
- "--snapshot-root",
76
- path.resolve(input.snapshotRoot)
77
- ],
78
- {
79
- env: recoveryChildEnvironment(),
80
- stdio: ["ignore", "pipe", "pipe"]
81
- }
82
- );
83
- const terminateOnParentExit = () => {
84
- if (child.exitCode === null && child.signalCode === null) child.kill("SIGTERM");
85
- };
86
- const parentProcessEvents = process;
87
- parentProcessEvents.once("exit", terminateOnParentExit);
88
- let stdout = "";
89
- let stderr = "";
90
- let result;
91
- child.stdout.setEncoding("utf8");
92
- child.stdout.on("data", (chunk) => {
93
- stdout += chunk;
94
- while (true) {
95
- const newline = stdout.indexOf("\n");
96
- if (newline < 0) break;
97
- const line = stdout.slice(0, newline);
98
- stdout = stdout.slice(newline + 1);
99
- if (!line.trim()) continue;
100
- let message;
101
- try {
102
- message = JSON.parse(line);
103
- } catch {
104
- stderr += `Invalid recovery helper output: ${line}
105
- `;
106
- continue;
107
- }
108
- if (!message || typeof message !== "object") continue;
109
- const record = message;
110
- if (record.type === "progress" && isRecoveryProgress(record.progress)) input.onProgress?.(record.progress);
111
- if (record.type === "result" && isRecoveryResult(record.result)) result = record.result;
112
- }
113
- });
114
- child.stderr.setEncoding("utf8");
115
- child.stderr.on("data", (chunk) => {
116
- stderr = `${stderr}${chunk}`.slice(-32768);
117
- });
118
- const exitCode = await new Promise((resolve, reject) => {
119
- child.once("error", reject);
120
- child.once("close", (code, signal) => {
121
- if (signal) reject(new Error(`Project snapshot recovery helper exited on signal ${signal}`));
122
- else resolve(code ?? 1);
123
- });
124
- }).finally(() => parentProcessEvents.off("exit", terminateOnParentExit));
125
- if (exitCode !== 0 || !result) {
126
- const detail = stderr.trim();
127
- throw new Error(detail || `Project snapshot recovery helper exited with status ${exitCode}`);
128
- }
129
- return result;
130
- }
131
- export {
132
- PROJECT_SNAPSHOT_RECOVERY_HELPER_COMMAND,
133
- recoverProjectSnapshotsInChild,
134
- runProjectSnapshotRecoveryHelper
135
- };
@@ -1,10 +0,0 @@
1
- import { recoverStaleProjectWorktreeSnapshots, type ProjectWorktreeSnapshotProgress } from "./project-worktrees";
2
- export declare const PROJECT_SNAPSHOT_RECOVERY_HELPER_COMMAND = "__recover-project-snapshots";
3
- type ProjectSnapshotRecoveryResult = ReturnType<typeof recoverStaleProjectWorktreeSnapshots>;
4
- export declare function runProjectSnapshotRecoveryHelper(args: readonly string[]): number;
5
- export declare function recoverProjectSnapshotsInChild(input: {
6
- projectsRoot: string;
7
- snapshotRoot: string;
8
- onProgress?: (progress: ProjectWorktreeSnapshotProgress) => void;
9
- }): Promise<ProjectSnapshotRecoveryResult>;
10
- export {};