@ricsam/r5d-worker 0.0.136 → 0.0.138

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 (240) hide show
  1. package/README.md +4 -94
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/mjs/main.mjs +46 -7537
  4. package/dist/mjs/package.json +1 -1
  5. package/dist/mjs/personal/action-scheduler.mjs +31 -0
  6. package/dist/mjs/personal/client.mjs +215 -0
  7. package/dist/mjs/personal/runtime.mjs +328 -0
  8. package/dist/mjs/personal/tcp.mjs +217 -0
  9. package/dist/mjs/runtime/adapter.mjs +42 -0
  10. package/dist/mjs/runtime/client.mjs +95 -0
  11. package/dist/mjs/runtime/daemon.mjs +131 -0
  12. package/dist/mjs/runtime/executor.mjs +436 -0
  13. package/dist/mjs/runtime/index.mjs +15 -0
  14. package/dist/mjs/runtime/protocol.mjs +139 -0
  15. package/dist/mjs/runtime/pty-host.mjs +156 -0
  16. package/dist/mjs/runtime/pty.mjs +127 -0
  17. package/dist/mjs/runtime/releases/artifacts.mjs +201 -0
  18. package/dist/mjs/runtime/releases/grants.mjs +93 -0
  19. package/dist/mjs/runtime/releases/main.mjs +101 -0
  20. package/dist/mjs/runtime/releases/manager.mjs +541 -0
  21. package/dist/mjs/runtime/releases/process.mjs +88 -0
  22. package/dist/mjs/runtime/releases/retirement.mjs +18 -0
  23. package/dist/mjs/runtime/releases/rpc-client.mjs +184 -0
  24. package/dist/mjs/runtime/releases/rpc-main.mjs +213 -0
  25. package/dist/mjs/runtime/releases/rpc-protocol.mjs +103 -0
  26. package/dist/mjs/runtime/storage.mjs +156 -0
  27. package/dist/mjs/runtime/workspace/artifacts.mjs +121 -0
  28. package/dist/mjs/runtime/workspace/authority.mjs +1355 -0
  29. package/dist/mjs/runtime/workspace/contracts.mjs +60 -0
  30. package/dist/mjs/runtime/workspace/file-write.mjs +23 -0
  31. package/dist/mjs/runtime/workspace/files.mjs +308 -0
  32. package/dist/mjs/runtime/workspace/http-body.mjs +45 -0
  33. package/dist/mjs/runtime/workspace/storage-client.mjs +59 -0
  34. package/dist/mjs/runtime/workspace/storage-wire.mjs +53 -0
  35. package/dist/types/main.d.ts +0 -1167
  36. package/dist/types/personal/action-scheduler.d.ts +23 -0
  37. package/dist/types/personal/client.d.ts +14 -0
  38. package/dist/types/personal/runtime.d.ts +121 -0
  39. package/dist/types/personal/tcp.d.ts +14 -0
  40. package/dist/types/runtime/client.d.ts +17 -0
  41. package/dist/types/runtime/daemon.d.ts +8 -0
  42. package/dist/types/runtime/executor.d.ts +35 -0
  43. package/dist/types/runtime/index.d.ts +5 -0
  44. package/dist/types/runtime/protocol.d.ts +544 -0
  45. package/dist/types/runtime/pty.d.ts +30 -0
  46. package/dist/types/runtime/releases/artifacts.d.ts +51 -0
  47. package/dist/types/runtime/releases/grants.d.ts +16 -0
  48. package/dist/types/runtime/releases/manager.d.ts +145 -0
  49. package/dist/types/runtime/releases/process.d.ts +14 -0
  50. package/dist/types/runtime/releases/retirement.d.ts +15 -0
  51. package/dist/types/runtime/releases/rpc-client.d.ts +52 -0
  52. package/dist/types/runtime/releases/rpc-main.d.ts +10 -0
  53. package/dist/types/runtime/releases/rpc-protocol.d.ts +1139 -0
  54. package/dist/types/runtime/storage.d.ts +21 -0
  55. package/dist/types/runtime/test-harness.d.ts +53 -0
  56. package/dist/types/runtime/workspace/artifacts.d.ts +30 -0
  57. package/dist/types/runtime/workspace/authority.d.ts +338 -0
  58. package/dist/types/runtime/workspace/contracts.d.ts +86 -0
  59. package/dist/types/runtime/workspace/file-write.d.ts +14 -0
  60. package/dist/types/runtime/workspace/files.d.ts +21 -0
  61. package/dist/types/runtime/workspace/http-body.d.ts +9 -0
  62. package/dist/types/runtime/workspace/storage-client.d.ts +23 -0
  63. package/dist/types/runtime/workspace/storage-wire.d.ts +138 -0
  64. package/package.json +8 -6
  65. package/dist/cjs/atomic-rename.cjs +0 -303
  66. package/dist/cjs/browser-upload.cjs +0 -73
  67. package/dist/cjs/cli-update.cjs +0 -108
  68. package/dist/cjs/command-launcher.cjs +0 -423
  69. package/dist/cjs/control-command-policy.cjs +0 -177
  70. package/dist/cjs/git-blob-hash.cjs +0 -41
  71. package/dist/cjs/git-identity.cjs +0 -39
  72. package/dist/cjs/git-process-environment.cjs +0 -133
  73. package/dist/cjs/inline-output.cjs +0 -62
  74. package/dist/cjs/main.cjs +0 -7511
  75. package/dist/cjs/managed-paths.cjs +0 -215
  76. package/dist/cjs/plan-lint.cjs +0 -165
  77. package/dist/cjs/plan-parser.cjs +0 -127
  78. package/dist/cjs/plan-paths.cjs +0 -53
  79. package/dist/cjs/port-forward-client.cjs +0 -206
  80. package/dist/cjs/process-tree.cjs +0 -117
  81. package/dist/cjs/project-checkout-garbage.cjs +0 -219
  82. package/dist/cjs/project-mirror-fetch-policy.cjs +0 -82
  83. package/dist/cjs/project-mirror-refs-token.cjs +0 -85
  84. package/dist/cjs/project-workspace-state.cjs +0 -972
  85. package/dist/cjs/project-worktrees.cjs +0 -1713
  86. package/dist/cjs/pty-output-coalescer.cjs +0 -87
  87. package/dist/cjs/recovery-journal-protocol.cjs +0 -56
  88. package/dist/cjs/recovery-journal-runtime.cjs +0 -133
  89. package/dist/cjs/recovery-journal-thread.cjs +0 -9
  90. package/dist/cjs/recovery-journal.cjs +0 -742
  91. package/dist/cjs/recovery-output-window.cjs +0 -77
  92. package/dist/cjs/recovery-protocol.cjs +0 -31
  93. package/dist/cjs/recovery-store.cjs +0 -252
  94. package/dist/cjs/registry-auth.cjs +0 -310
  95. package/dist/cjs/repository-transition-policy.cjs +0 -49
  96. package/dist/cjs/runtime-version.cjs +0 -88
  97. package/dist/cjs/session-file-mutations.cjs +0 -61
  98. package/dist/cjs/supervisor.cjs +0 -147
  99. package/dist/cjs/three-way-merge.cjs +0 -346
  100. package/dist/cjs/working-tree-mirror.cjs +0 -1872
  101. package/dist/cjs/workspace-automatic-sync-policy.cjs +0 -79
  102. package/dist/cjs/workspace-branch-incarnation-policy.cjs +0 -37
  103. package/dist/cjs/workspace-command-sync-policy.cjs +0 -112
  104. package/dist/cjs/workspace-command-targets.cjs +0 -63
  105. package/dist/cjs/workspace-filesystem-executor-thread.cjs +0 -36
  106. package/dist/cjs/workspace-filesystem-executor.cjs +0 -327
  107. package/dist/cjs/workspace-filesystem-job-types.cjs +0 -144
  108. package/dist/cjs/workspace-filesystem-jobs.cjs +0 -59
  109. package/dist/cjs/workspace-git-sync.cjs +0 -3450
  110. package/dist/cjs/workspace-hydration-ledger.cjs +0 -66
  111. package/dist/cjs/workspace-hydration-merge.cjs +0 -433
  112. package/dist/cjs/workspace-hydration-recovery-state.cjs +0 -53
  113. package/dist/cjs/workspace-incident-state.cjs +0 -37
  114. package/dist/cjs/workspace-merge-projection.cjs +0 -467
  115. package/dist/cjs/workspace-mount-boundary.cjs +0 -71
  116. package/dist/cjs/workspace-mount-hold-fence.cjs +0 -120
  117. package/dist/cjs/workspace-mutation-gate.cjs +0 -127
  118. package/dist/cjs/workspace-path-move.cjs +0 -195
  119. package/dist/cjs/workspace-preserve-only-policy.cjs +0 -36
  120. package/dist/cjs/workspace-project-config-policy.cjs +0 -53
  121. package/dist/cjs/workspace-projection-ledger.cjs +0 -81
  122. package/dist/cjs/workspace-publication-evidence.cjs +0 -46
  123. package/dist/cjs/workspace-sync-coalescer.cjs +0 -58
  124. package/dist/mjs/atomic-rename.mjs +0 -261
  125. package/dist/mjs/browser-upload.mjs +0 -42
  126. package/dist/mjs/command-launcher.mjs +0 -393
  127. package/dist/mjs/control-command-policy.mjs +0 -146
  128. package/dist/mjs/git-blob-hash.mjs +0 -16
  129. package/dist/mjs/git-identity.mjs +0 -15
  130. package/dist/mjs/git-process-environment.mjs +0 -105
  131. package/dist/mjs/inline-output.mjs +0 -37
  132. package/dist/mjs/managed-paths.mjs +0 -174
  133. package/dist/mjs/plan-lint.mjs +0 -129
  134. package/dist/mjs/plan-parser.mjs +0 -94
  135. package/dist/mjs/plan-paths.mjs +0 -25
  136. package/dist/mjs/port-forward-client.mjs +0 -172
  137. package/dist/mjs/project-checkout-garbage.mjs +0 -178
  138. package/dist/mjs/project-mirror-fetch-policy.mjs +0 -56
  139. package/dist/mjs/project-mirror-refs-token.mjs +0 -53
  140. package/dist/mjs/project-workspace-state.mjs +0 -937
  141. package/dist/mjs/project-worktrees.mjs +0 -1657
  142. package/dist/mjs/pty-output-coalescer.mjs +0 -61
  143. package/dist/mjs/recovery-journal-protocol.mjs +0 -30
  144. package/dist/mjs/recovery-journal-runtime.mjs +0 -112
  145. package/dist/mjs/recovery-journal-thread.mjs +0 -8
  146. package/dist/mjs/recovery-journal.mjs +0 -694
  147. package/dist/mjs/recovery-output-window.mjs +0 -53
  148. package/dist/mjs/recovery-protocol.mjs +0 -6
  149. package/dist/mjs/recovery-store.mjs +0 -217
  150. package/dist/mjs/registry-auth.mjs +0 -269
  151. package/dist/mjs/repository-transition-policy.mjs +0 -22
  152. package/dist/mjs/runtime-version.mjs +0 -54
  153. package/dist/mjs/session-file-mutations.mjs +0 -37
  154. package/dist/mjs/supervisor.mjs +0 -114
  155. package/dist/mjs/three-way-merge.mjs +0 -318
  156. package/dist/mjs/working-tree-mirror.mjs +0 -1817
  157. package/dist/mjs/workspace-automatic-sync-policy.mjs +0 -48
  158. package/dist/mjs/workspace-branch-incarnation-policy.mjs +0 -13
  159. package/dist/mjs/workspace-command-sync-policy.mjs +0 -84
  160. package/dist/mjs/workspace-command-targets.mjs +0 -37
  161. package/dist/mjs/workspace-filesystem-executor-thread.mjs +0 -38
  162. package/dist/mjs/workspace-filesystem-executor.mjs +0 -287
  163. package/dist/mjs/workspace-filesystem-job-types.mjs +0 -116
  164. package/dist/mjs/workspace-filesystem-jobs.mjs +0 -55
  165. package/dist/mjs/workspace-git-sync.mjs +0 -3407
  166. package/dist/mjs/workspace-hydration-ledger.mjs +0 -42
  167. package/dist/mjs/workspace-hydration-merge.mjs +0 -399
  168. package/dist/mjs/workspace-hydration-recovery-state.mjs +0 -29
  169. package/dist/mjs/workspace-incident-state.mjs +0 -12
  170. package/dist/mjs/workspace-merge-projection.mjs +0 -433
  171. package/dist/mjs/workspace-mount-boundary.mjs +0 -37
  172. package/dist/mjs/workspace-mount-hold-fence.mjs +0 -95
  173. package/dist/mjs/workspace-mutation-gate.mjs +0 -103
  174. package/dist/mjs/workspace-path-move.mjs +0 -160
  175. package/dist/mjs/workspace-preserve-only-policy.mjs +0 -11
  176. package/dist/mjs/workspace-project-config-policy.mjs +0 -27
  177. package/dist/mjs/workspace-projection-ledger.mjs +0 -57
  178. package/dist/mjs/workspace-publication-evidence.mjs +0 -21
  179. package/dist/mjs/workspace-sync-coalescer.mjs +0 -34
  180. package/dist/types/atomic-rename.d.ts +0 -78
  181. package/dist/types/browser-upload.d.ts +0 -7
  182. package/dist/types/command-launcher.d.ts +0 -104
  183. package/dist/types/control-command-policy.d.ts +0 -53
  184. package/dist/types/git-blob-hash.d.ts +0 -10
  185. package/dist/types/git-identity.d.ts +0 -9
  186. package/dist/types/git-process-environment.d.ts +0 -9
  187. package/dist/types/inline-output.d.ts +0 -3
  188. package/dist/types/managed-paths.d.ts +0 -19
  189. package/dist/types/plan-lint.d.ts +0 -16
  190. package/dist/types/plan-parser.d.ts +0 -38
  191. package/dist/types/plan-paths.d.ts +0 -36
  192. package/dist/types/port-forward-client.d.ts +0 -8
  193. package/dist/types/project-checkout-garbage.d.ts +0 -86
  194. package/dist/types/project-mirror-fetch-policy.d.ts +0 -84
  195. package/dist/types/project-mirror-refs-token.d.ts +0 -53
  196. package/dist/types/project-workspace-state.d.ts +0 -188
  197. package/dist/types/project-worktrees.d.ts +0 -397
  198. package/dist/types/pty-output-coalescer.d.ts +0 -20
  199. package/dist/types/recovery-journal-protocol.d.ts +0 -35
  200. package/dist/types/recovery-journal-runtime.d.ts +0 -12
  201. package/dist/types/recovery-journal-thread.d.ts +0 -1
  202. package/dist/types/recovery-journal.d.ts +0 -248
  203. package/dist/types/recovery-output-window.d.ts +0 -19
  204. package/dist/types/recovery-protocol.d.ts +0 -59
  205. package/dist/types/recovery-store.d.ts +0 -52
  206. package/dist/types/registry-auth.d.ts +0 -47
  207. package/dist/types/repository-transition-policy.d.ts +0 -26
  208. package/dist/types/runtime-version.d.ts +0 -1
  209. package/dist/types/session-file-mutations.d.ts +0 -22
  210. package/dist/types/supervisor-daemonized-fixture.d.ts +0 -1
  211. package/dist/types/supervisor-launcher-cleanup-fixture.d.ts +0 -1
  212. package/dist/types/supervisor-signal-fixture.d.ts +0 -1
  213. package/dist/types/supervisor.d.ts +0 -23
  214. package/dist/types/three-way-merge.d.ts +0 -77
  215. package/dist/types/working-tree-mirror.d.ts +0 -424
  216. package/dist/types/workspace-automatic-sync-policy.d.ts +0 -57
  217. package/dist/types/workspace-branch-incarnation-policy.d.ts +0 -14
  218. package/dist/types/workspace-command-sync-policy.d.ts +0 -57
  219. package/dist/types/workspace-command-targets.d.ts +0 -37
  220. package/dist/types/workspace-filesystem-executor-thread.d.ts +0 -1
  221. package/dist/types/workspace-filesystem-executor.d.ts +0 -123
  222. package/dist/types/workspace-filesystem-job-types.d.ts +0 -288
  223. package/dist/types/workspace-filesystem-jobs.d.ts +0 -7
  224. package/dist/types/workspace-git-sync.d.ts +0 -495
  225. package/dist/types/workspace-hydration-ledger.d.ts +0 -43
  226. package/dist/types/workspace-hydration-merge.d.ts +0 -95
  227. package/dist/types/workspace-hydration-recovery-state.d.ts +0 -10
  228. package/dist/types/workspace-incident-state.d.ts +0 -19
  229. package/dist/types/workspace-merge-projection.d.ts +0 -60
  230. package/dist/types/workspace-mount-boundary.d.ts +0 -10
  231. package/dist/types/workspace-mount-hold-fence.d.ts +0 -42
  232. package/dist/types/workspace-mutation-gate.d.ts +0 -42
  233. package/dist/types/workspace-path-move.d.ts +0 -21
  234. package/dist/types/workspace-preserve-only-policy.d.ts +0 -15
  235. package/dist/types/workspace-project-config-policy.d.ts +0 -48
  236. package/dist/types/workspace-projection-ledger.d.ts +0 -59
  237. package/dist/types/workspace-publication-evidence.d.ts +0 -17
  238. package/dist/types/workspace-sync-coalescer.d.ts +0 -28
  239. /package/dist/types/{credential-authority-lock-fixture.d.ts → runtime/adapter.d.ts} +0 -0
  240. /package/dist/types/{recovery-journal-stall-fixture.d.ts → runtime/releases/main.d.ts} +0 -0
@@ -1,123 +0,0 @@
1
- import { type WorkspaceFilesystemJobInput, type WorkspaceFilesystemJobKind, type WorkspaceFilesystemJobProgress, type WorkspaceFilesystemJobResult } from "./workspace-filesystem-job-types";
2
- /**
3
- * Bounded executor for the worker's workspace filesystem transactions.
4
- *
5
- * One thread runs one job at a time; the control thread only ever awaits.
6
- * The point is the incident this was written for: a single `pread64` or
7
- * `pwrite64` blocked in the kernel on a stalled network disk used to freeze
8
- * the worker's only event loop for minutes, so no heartbeat, cancel or Stop
9
- * could run. On the executor thread that same blocked syscall stalls exactly
10
- * one job while the control thread keeps serving the socket.
11
- *
12
- * A thread rather than a helper process because a thread cannot outlive the
13
- * process: when the worker dies, its in-flight syscall completes and nothing
14
- * else is written afterwards, which is the crash model every recovery path
15
- * already handles. Nothing is ever abandoned: a running job's promise settles
16
- * only with the thread's reply or the thread's exit, so the gate its caller
17
- * holds is held for the job's true duration. Only jobs that have not started
18
- * can fail on the queue-wait bound.
19
- *
20
- * A thread that exits while a job is running leaves an unknown partial
21
- * mutation behind. The executor then fails closed: the job and everything
22
- * queued fail, no further job is accepted, and `onFailure` lets the worker
23
- * take its established restart path, whose startup recovery (manifests,
24
- * receipts, snapshot recovery) runs before any ordinary mutation. No
25
- * replacement thread is started over that state in this process.
26
- */
27
- export declare const WORKSPACE_FILESYSTEM_EXECUTOR_MAX_QUEUED = 32;
28
- export declare const WORKSPACE_FILESYSTEM_EXECUTOR_QUEUE_TIMEOUT_MS: number;
29
- export declare const WORKSPACE_FILESYSTEM_EXECUTOR_STALL_LOG_INTERVAL_MS = 30000;
30
- export declare class WorkspaceFilesystemExecutorError extends Error {
31
- readonly name = "WorkspaceFilesystemExecutorError";
32
- }
33
- /** The executor thread exited (crashed or was terminated) while a job was running. */
34
- export declare class WorkspaceFilesystemExecutorThreadExitedError extends WorkspaceFilesystemExecutorError {
35
- readonly exitCode: number | null;
36
- readonly description: string;
37
- constructor(exitCode: number | null, description: string, cause?: unknown);
38
- }
39
- export type WorkspaceFilesystemExecutorStatus = {
40
- running: {
41
- kind: WorkspaceFilesystemJobKind;
42
- description: string;
43
- startedAtMs: number;
44
- ageMs: number;
45
- } | null;
46
- queued: number;
47
- /** Set once the thread exited under a running job; every job is then rejected until the worker restarts. */
48
- failed: string | null;
49
- };
50
- export type WorkspaceFilesystemExecutorOptions = {
51
- /** Module the thread executes; must resolve next to the packaged executor module. */
52
- threadModulePath: string;
53
- log?: (line: string) => void;
54
- now?: () => number;
55
- maxQueued?: number;
56
- queueTimeoutMs?: number;
57
- stallLogIntervalMs?: number;
58
- };
59
- export declare class WorkspaceFilesystemExecutor {
60
- private readonly threadModulePath;
61
- private readonly log;
62
- private readonly now;
63
- private readonly maxQueued;
64
- private readonly queueTimeoutMs;
65
- private readonly stallLogIntervalMs;
66
- private worker;
67
- private readonly queue;
68
- private running;
69
- private nextJobId;
70
- private failed;
71
- private closed;
72
- /** Invoked once when the executor fails closed (thread exit under a running job). */
73
- onFailure: ((error: WorkspaceFilesystemExecutorThreadExitedError) => void) | undefined;
74
- constructor(options: WorkspaceFilesystemExecutorOptions);
75
- /**
76
- * Run one job to completion on the executor thread. Resolves with the
77
- * job's result; rejects with the job's own error (properties preserved),
78
- * with a queue-wait or capacity error when the job never started, or with
79
- * WorkspaceFilesystemExecutorThreadExitedError when the thread died under it.
80
- */
81
- run<K extends WorkspaceFilesystemJobKind>(kind: K, input: WorkspaceFilesystemJobInput<K>, options?: {
82
- onProgress?: (progress: WorkspaceFilesystemJobProgress) => void;
83
- }): Promise<WorkspaceFilesystemJobResult<K>>;
84
- status(): WorkspaceFilesystemExecutorStatus;
85
- /**
86
- * Stop accepting jobs, fail everything still queued and ask the thread to
87
- * stop. A running job settles when the thread actually exits; a thread
88
- * blocked in the kernel only exits with the process, which is the point.
89
- */
90
- close(): void;
91
- private describeRunning;
92
- private expireQueued;
93
- private dispatch;
94
- private settleRunning;
95
- private ensureWorker;
96
- private lastThreadError;
97
- private onReply;
98
- private onExit;
99
- }
100
- /** The packaged thread module lives next to this module with the same extension (.ts in source, .cjs/.mjs in the package). */
101
- export declare function workspaceFilesystemExecutorThreadModulePath(): string;
102
- /** What the engine modules dispatch through; the thread executor in production. */
103
- export type WorkspaceFilesystemJobRunner = Pick<WorkspaceFilesystemExecutor, "run">;
104
- /**
105
- * The worker process's executor. Like the workspace mutation gate it is
106
- * process-global: in-process reconnects share it, so a job started by a
107
- * previous connection generation is still the one running when the next
108
- * generation's configuration queues behind it.
109
- */
110
- export declare function workspaceFilesystemExecutor(): WorkspaceFilesystemJobRunner;
111
- /** The worker runtime's fail-closed hook: installed once on the process executor (created if needed). */
112
- export declare function installWorkspaceFilesystemExecutorFailureHandler(handler: (error: WorkspaceFilesystemExecutorThreadExitedError) => void): void;
113
- /**
114
- * Test seam. Engine tests that inject faults or count syscalls by replacing
115
- * `node:fs` functions in their own thread cannot observe a body running on
116
- * the executor thread; inside `runJobsInline` the same operation table runs
117
- * on the calling thread instead. The boundary itself is tested with the real
118
- * thread in workspace-filesystem-executor.test.ts. Never used in production.
119
- */
120
- export declare const workspaceFilesystemExecutorTestHarness: {
121
- runJobsInline<T>(body: () => Promise<T>): Promise<T>;
122
- processExecutor(): WorkspaceFilesystemExecutor | null;
123
- };
@@ -1,288 +0,0 @@
1
- import type { ProjectWorktreeBranch, ProjectWorktreeSnapshot, ProjectWorktreeSnapshotProgress, ProjectWorktreeSnapshotScope, ProjectWorktreeWorkingTreeMode } from "./project-worktrees";
2
- import type { ProjectedWorkingTreeEntry, WorkingTreeGitlink } from "./working-tree-mirror";
3
- import type { WorkspaceGitMountData, WorkspaceHydrationReceipt, WorkspaceHydrationRecoveryRequired, WorkspaceHydrationPreservationResult, WorkspaceHydrationMountSkip } from "./workspace-git-sync";
4
- import type { WorkspaceHydrationMergeBasis } from "./workspace-hydration-merge";
5
- import type { WorkspaceMergeProjectionMount, WorkspaceMergeProjectionResult } from "./workspace-merge-projection";
6
- import type { ProjectCheckoutPathMoveBranch } from "./workspace-path-move";
7
- /**
8
- * The closed set of filesystem transactions the worker runs on its executor
9
- * thread. Every input is plain data (paths, mount descriptors, receipts); the
10
- * busy predicates, mutation tokens, hooks and gates that decide *whether* a
11
- * job may run stay on the control thread. Every body is the synchronous code
12
- * that used to run on the control thread, unchanged in its write and fsync
13
- * ordering. A job kind outside this table is rejected by both threads.
14
- */
15
- export type WorkspaceFilesystemJobTable = {
16
- /** `recoverWorkspaceCheckoutDurability`: rebuild an interrupted outer checkout boundary. */
17
- checkout_durability_recovery: {
18
- input: {
19
- workspacePath: string;
20
- preserveResolutionInProgress: boolean;
21
- };
22
- result: null;
23
- };
24
- /** Checkout durability recovery, pending hydration transaction restore/completion, basis-ref repair. */
25
- hydration_recovery: {
26
- input: {
27
- workspacePath: string;
28
- preserveResolutionInProgress: boolean;
29
- };
30
- result: null;
31
- };
32
- /** Read-only pending guarded transaction evidence for configuration admission. */
33
- hydration_recovery_inspect: {
34
- input: {
35
- workspacePath: string;
36
- };
37
- result: WorkspaceHydrationRecoveryRequired | null;
38
- };
39
- /** Explicit exact-identity recovery: preserve visible data and archive all interrupted guarded transaction evidence. */
40
- hydration_preserve_interrupted: {
41
- input: {
42
- workspacePath: string;
43
- expectedTransactionId: string;
44
- };
45
- result: WorkspaceHydrationPreservationResult;
46
- };
47
- /**
48
- * The complete hydration transaction: snapshot, hydrate, fsync, commit
49
- * marker, receipt; restore on failure. A mount listed in `mergeBases` is
50
- * merge-hydrated (docs/merge-hydration-design.md): files changed in the
51
- * checkout since the projection read are three-way merged instead of
52
- * overwritten, and a conflict or a write racing the hydration pins the
53
- * mount at its previous receipt entry (`skippedMounts`) instead of
54
- * failing the transaction.
55
- */
56
- hydration_transaction: {
57
- input: {
58
- workspacePath: string;
59
- hydrationMounts: WorkspaceGitMountData[];
60
- advancedDurabilityMounts: WorkspaceGitMountData[];
61
- targetReceipt: WorkspaceHydrationReceipt | null;
62
- mergeBases?: Record<string, WorkspaceHydrationMergeBasis>;
63
- };
64
- result: {
65
- hydratedMountIds: string[];
66
- skippedMounts: WorkspaceHydrationMountSkip[];
67
- /** Per merge-hydrated mount, the blob each replaced path held before hydration (the stale-rewrite detector's input). */
68
- hydratedPreBlobs: Record<string, Record<string, string>>;
69
- };
70
- };
71
- /** Pre-clone hydration of visible mounts without a transaction (no outer Git directory yet). */
72
- hydration_raw: {
73
- input: {
74
- workspacePath: string;
75
- mounts: WorkspaceGitMountData[];
76
- };
77
- result: {
78
- hydratedMountIds: string[];
79
- };
80
- };
81
- /** Recover the durable checkout boundary and record the transition that follows. */
82
- checkout_transition_begin: {
83
- input: {
84
- workspacePath: string;
85
- };
86
- result: null;
87
- };
88
- /** Make the outer checkout durable and record its head as the durable boundary. */
89
- checkout_transition_complete: {
90
- input: {
91
- workspacePath: string;
92
- };
93
- result: null;
94
- };
95
- /** Durability barrier over the outer checkout tree without changing the record. */
96
- outer_checkout_fsync: {
97
- input: {
98
- workspacePath: string;
99
- };
100
- result: null;
101
- };
102
- /** Three-way merge projection of one stale mount (ours snapshot + merge-tree). */
103
- projection_merge: {
104
- input: {
105
- workspacePath: string;
106
- mount: WorkspaceMergeProjectionMount;
107
- basisHead: string;
108
- currentHead: string;
109
- attemptId: string;
110
- /** Blob ids the last merge hydration replaced, by mount-relative path; a changed file hashing to one is a stale rewrite. */
111
- staleRewriteBlobs?: Record<string, string>;
112
- };
113
- result: WorkspaceMergeProjectionResult;
114
- };
115
- /**
116
- * Byte mirror of one visible mount into the outer checkout. Returns what it
117
- * read for every file (merge hydration's stat basis), or the paths that
118
- * hold a stale rewrite, in which case nothing was mirrored.
119
- */
120
- projection_mirror: {
121
- input: {
122
- workspacePath: string;
123
- mount: WorkspaceGitMountData;
124
- staleRewriteBlobs?: Record<string, string>;
125
- };
126
- result: {
127
- gitlinks: WorkingTreeGitlink[];
128
- projectedFiles: Record<string, ProjectedWorkingTreeEntry>;
129
- /** Wall-clock time the mirror finished reading; projected stats younger than this minus a window are not trusted. */
130
- readAtMs: number;
131
- staleRewritePaths: string[];
132
- /** Ledger paths whose checkout content moved on from both the replaced and the hydrated bytes. */
133
- staleRewriteCleared: string[];
134
- };
135
- };
136
- /** Outer-tree edits after the mirrors: tombstone removal, merged subtree materialization, deferred restores. */
137
- projection_outer_apply: {
138
- input: {
139
- workspacePath: string;
140
- removeMounts: WorkspaceGitMountData[];
141
- materialize: Array<{
142
- workspaceRelativePath: string;
143
- resultTree: string;
144
- }>;
145
- restoreFromHead: WorkspaceGitMountData[];
146
- };
147
- result: null;
148
- };
149
- /** Persist projected visible mounts and publish the projection receipt. */
150
- projection_receipt: {
151
- input: {
152
- workspacePath: string;
153
- fsyncMounts: WorkspaceGitMountData[];
154
- receipt: WorkspaceHydrationReceipt;
155
- };
156
- result: null;
157
- };
158
- /** `snapshotBranchTrees`: copy every checkout a reconciliation may rewrite. */
159
- project_snapshot_create: {
160
- input: {
161
- projectRoot: string;
162
- branches: ProjectWorktreeBranch[];
163
- temporaryRoot: string;
164
- scope: ProjectWorktreeSnapshotScope;
165
- ownerSessionId: string;
166
- };
167
- result: ProjectWorktreeSnapshot;
168
- };
169
- /** Mirror captured checkouts back over the reconciled worktrees. */
170
- project_snapshot_apply: {
171
- input: {
172
- mirrors: Array<{
173
- snapshotPath: string;
174
- targetPath: string;
175
- }>;
176
- };
177
- result: null;
178
- };
179
- /** `persistReconciledProjectAndConsumeSnapshot`. */
180
- project_snapshot_persist: {
181
- input: {
182
- snapshot: ProjectWorktreeSnapshot;
183
- durabilityPaths: string[] | null;
184
- };
185
- result: null;
186
- };
187
- /** `rollbackProjectWorktreeSnapshot`. */
188
- project_snapshot_rollback: {
189
- input: {
190
- snapshot: ProjectWorktreeSnapshot;
191
- };
192
- result: null;
193
- };
194
- /** `recoverStaleProjectWorktreeSnapshots` at startup. */
195
- project_snapshots_recover: {
196
- input: {
197
- projectsRoot: string;
198
- temporaryRoot: string;
199
- currentProcessId: number;
200
- currentOwnerSessionId: string;
201
- };
202
- result: {
203
- restored: string[];
204
- removed: string[];
205
- failed: Array<{
206
- path: string;
207
- error: string;
208
- }>;
209
- };
210
- };
211
- /** `createLinkedProjectBranch`: branch ref, linked worktree, index seed and working-tree copy. */
212
- project_branch_create: {
213
- input: {
214
- projectRoot: string;
215
- sourceBranchName: string;
216
- branchName: string;
217
- workingTree: ProjectWorktreeWorkingTreeMode;
218
- };
219
- result: {
220
- branchPath: string;
221
- baseCommitHash: string;
222
- };
223
- };
224
- /** `preserveProjectCheckoutPathMove`. */
225
- project_checkout_path_move: {
226
- input: {
227
- oldProjectRoot: string;
228
- newProjectRoot: string;
229
- projectsDurabilityRoot: string;
230
- outerWorkspaceRoot: string;
231
- branches: ProjectCheckoutPathMoveBranch[];
232
- };
233
- result: {
234
- preservedBranchNames: string[];
235
- };
236
- };
237
- };
238
- export type WorkspaceFilesystemJobKind = keyof WorkspaceFilesystemJobTable;
239
- export type WorkspaceFilesystemJobInput<K extends WorkspaceFilesystemJobKind> = WorkspaceFilesystemJobTable[K]["input"];
240
- export type WorkspaceFilesystemJobResult<K extends WorkspaceFilesystemJobKind> = WorkspaceFilesystemJobTable[K]["result"];
241
- export type WorkspaceFilesystemJobProgress = ProjectWorktreeSnapshotProgress;
242
- export type WorkspaceFilesystemJobContext = {
243
- progress: (progress: WorkspaceFilesystemJobProgress) => void;
244
- };
245
- export type WorkspaceFilesystemJobOperations = {
246
- [K in WorkspaceFilesystemJobKind]: (input: WorkspaceFilesystemJobInput<K>, context: WorkspaceFilesystemJobContext) => WorkspaceFilesystemJobResult<K>;
247
- };
248
- export declare const WORKSPACE_FILESYSTEM_JOB_KINDS: readonly WorkspaceFilesystemJobKind[];
249
- export declare function isWorkspaceFilesystemJobKind(value: unknown): value is WorkspaceFilesystemJobKind;
250
- /** Short, path-bearing description used in stall diagnostics and errors. */
251
- export declare function describeWorkspaceFilesystemJob<K extends WorkspaceFilesystemJobKind>(kind: K, input: WorkspaceFilesystemJobInput<K>): string;
252
- /** Errors cross the thread boundary as data; the properties callers inspect are preserved. */
253
- export type WorkspaceFilesystemSerializedError = {
254
- name: string;
255
- message: string;
256
- stack?: string;
257
- code?: string;
258
- branchMayExist?: true;
259
- cleanupFailures?: string[];
260
- hydrationRecovery?: WorkspaceHydrationRecoveryRequired;
261
- errors?: WorkspaceFilesystemSerializedError[];
262
- cause?: WorkspaceFilesystemSerializedError;
263
- };
264
- export declare function serializeWorkspaceFilesystemError(error: unknown, depth?: number): WorkspaceFilesystemSerializedError;
265
- export declare function restoreWorkspaceFilesystemError(serialized: WorkspaceFilesystemSerializedError): Error;
266
- /** Control thread → executor thread. */
267
- export type WorkspaceFilesystemThreadRequest = {
268
- type: "run";
269
- id: number;
270
- kind: WorkspaceFilesystemJobKind;
271
- input: unknown;
272
- /** The control thread's environment at dispatch; the thread runs the job under exactly this. */
273
- environment: Record<string, string>;
274
- };
275
- /** Executor thread → control thread. */
276
- export type WorkspaceFilesystemThreadReply = {
277
- type: "progress";
278
- id: number;
279
- progress: WorkspaceFilesystemJobProgress;
280
- } | {
281
- type: "result";
282
- id: number;
283
- result: unknown;
284
- } | {
285
- type: "failure";
286
- id: number;
287
- error: WorkspaceFilesystemSerializedError;
288
- };
@@ -1,7 +0,0 @@
1
- import type { WorkspaceFilesystemJobOperations } from "./workspace-filesystem-job-types";
2
- /**
3
- * The operation table of the workspace filesystem executor thread. It is the
4
- * only thing the thread can run; every entry is an existing synchronous
5
- * transaction body. Imported by the thread entry module only.
6
- */
7
- export declare const workspaceFilesystemJobOperations: WorkspaceFilesystemJobOperations;