@claudexor/daemon 5.0.1 → 5.1.0

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 (185) hide show
  1. package/dist/client.d.ts +56 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/command-store.d.ts +2 -0
  4. package/dist/command-store.d.ts.map +1 -1
  5. package/dist/command-store.js.map +1 -1
  6. package/dist/deferred-message-owner.d.ts +14 -1
  7. package/dist/deferred-message-owner.d.ts.map +1 -1
  8. package/dist/deferred-messages.d.ts +22 -1
  9. package/dist/deferred-messages.d.ts.map +1 -1
  10. package/dist/deferred-messages.js +60 -18
  11. package/dist/deferred-messages.js.map +1 -1
  12. package/dist/enqueue-command.d.ts +19 -4
  13. package/dist/enqueue-command.d.ts.map +1 -1
  14. package/dist/enqueue-command.js +72 -8
  15. package/dist/enqueue-command.js.map +1 -1
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/interactions.d.ts.map +1 -1
  21. package/dist/interactions.js +29 -7
  22. package/dist/interactions.js.map +1 -1
  23. package/dist/job-record.d.ts.map +1 -1
  24. package/dist/job-record.js +4 -3
  25. package/dist/job-record.js.map +1 -1
  26. package/dist/job-settlement.d.ts +3 -1
  27. package/dist/job-settlement.d.ts.map +1 -1
  28. package/dist/job-settlement.js +13 -0
  29. package/dist/job-settlement.js.map +1 -1
  30. package/dist/model-operation-execution.d.ts +10 -0
  31. package/dist/model-operation-execution.d.ts.map +1 -1
  32. package/dist/model-operation-execution.js +12 -5
  33. package/dist/model-operation-execution.js.map +1 -1
  34. package/dist/model-operations.d.ts +1 -0
  35. package/dist/model-operations.d.ts.map +1 -1
  36. package/dist/model-operations.js +20 -10
  37. package/dist/model-operations.js.map +1 -1
  38. package/dist/quota-registry-support.d.ts.map +1 -1
  39. package/dist/quota-registry-support.js +14 -9
  40. package/dist/quota-registry-support.js.map +1 -1
  41. package/dist/server.d.ts +2 -3
  42. package/dist/server.d.ts.map +1 -1
  43. package/dist/server.js +12 -38
  44. package/dist/server.js.map +1 -1
  45. package/dist/store/blob-files.d.ts +17 -6
  46. package/dist/store/blob-files.d.ts.map +1 -1
  47. package/dist/store/blob-files.js +29 -5
  48. package/dist/store/blob-files.js.map +1 -1
  49. package/dist/store/command-prune.d.ts.map +1 -1
  50. package/dist/store/command-prune.js +4 -0
  51. package/dist/store/command-prune.js.map +1 -1
  52. package/dist/store/commands.d.ts +29 -2
  53. package/dist/store/commands.d.ts.map +1 -1
  54. package/dist/store/commands.js +136 -26
  55. package/dist/store/commands.js.map +1 -1
  56. package/dist/store/deferred-message-rows.d.ts +10 -0
  57. package/dist/store/deferred-message-rows.d.ts.map +1 -1
  58. package/dist/store/deferred-message-rows.js +28 -1
  59. package/dist/store/deferred-message-rows.js.map +1 -1
  60. package/dist/store/deferred-messages.d.ts +19 -5
  61. package/dist/store/deferred-messages.d.ts.map +1 -1
  62. package/dist/store/deferred-messages.js +93 -30
  63. package/dist/store/deferred-messages.js.map +1 -1
  64. package/dist/store/event-store.d.ts +2 -0
  65. package/dist/store/event-store.d.ts.map +1 -1
  66. package/dist/store/event-store.js +3 -1
  67. package/dist/store/event-store.js.map +1 -1
  68. package/dist/store/external-files.d.ts +57 -2
  69. package/dist/store/external-files.d.ts.map +1 -1
  70. package/dist/store/external-files.js +178 -3
  71. package/dist/store/external-files.js.map +1 -1
  72. package/dist/store/idempotency.d.ts +1 -1
  73. package/dist/store/idempotency.d.ts.map +1 -1
  74. package/dist/store/idempotency.js +2 -1
  75. package/dist/store/idempotency.js.map +1 -1
  76. package/dist/store/import-context.js +1 -1
  77. package/dist/store/import-context.js.map +1 -1
  78. package/dist/store/libuv-pool.d.ts +25 -0
  79. package/dist/store/libuv-pool.d.ts.map +1 -0
  80. package/dist/store/libuv-pool.js +96 -0
  81. package/dist/store/libuv-pool.js.map +1 -0
  82. package/dist/store/maintenance-worker.d.ts.map +1 -1
  83. package/dist/store/maintenance-worker.js +45 -0
  84. package/dist/store/maintenance-worker.js.map +1 -1
  85. package/dist/store/maintenance.d.ts +28 -2
  86. package/dist/store/maintenance.d.ts.map +1 -1
  87. package/dist/store/maintenance.js +36 -6
  88. package/dist/store/maintenance.js.map +1 -1
  89. package/dist/store/project-router.d.ts +108 -1
  90. package/dist/store/project-router.d.ts.map +1 -1
  91. package/dist/store/project-router.js +38 -0
  92. package/dist/store/project-router.js.map +1 -1
  93. package/dist/store/publish-blob.d.ts.map +1 -1
  94. package/dist/store/publish-blob.js +36 -14
  95. package/dist/store/publish-blob.js.map +1 -1
  96. package/dist/store/purge-files.d.ts +11 -2
  97. package/dist/store/purge-files.d.ts.map +1 -1
  98. package/dist/store/purge-files.js +34 -7
  99. package/dist/store/purge-files.js.map +1 -1
  100. package/dist/store/resource-release.d.ts +15 -0
  101. package/dist/store/resource-release.d.ts.map +1 -0
  102. package/dist/store/resource-release.js +56 -0
  103. package/dist/store/resource-release.js.map +1 -0
  104. package/dist/store/resource-rows.d.ts +2 -0
  105. package/dist/store/resource-rows.d.ts.map +1 -1
  106. package/dist/store/resource-rows.js.map +1 -1
  107. package/dist/store/resource-uses.d.ts +84 -0
  108. package/dist/store/resource-uses.d.ts.map +1 -0
  109. package/dist/store/resource-uses.js +129 -0
  110. package/dist/store/resource-uses.js.map +1 -0
  111. package/dist/store/resources.d.ts +16 -2
  112. package/dist/store/resources.d.ts.map +1 -1
  113. package/dist/store/resources.js +42 -3
  114. package/dist/store/resources.js.map +1 -1
  115. package/dist/store/retention-changes.d.ts +8 -2
  116. package/dist/store/retention-changes.d.ts.map +1 -1
  117. package/dist/store/retention-changes.js +24 -11
  118. package/dist/store/retention-changes.js.map +1 -1
  119. package/dist/store/retention-generations.d.ts +7 -2
  120. package/dist/store/retention-generations.d.ts.map +1 -1
  121. package/dist/store/retention-generations.js +71 -26
  122. package/dist/store/retention-generations.js.map +1 -1
  123. package/dist/store/retention-reference-reader.d.ts +26 -1
  124. package/dist/store/retention-reference-reader.d.ts.map +1 -1
  125. package/dist/store/retention-reference-reader.js +31 -7
  126. package/dist/store/retention-reference-reader.js.map +1 -1
  127. package/dist/store/retention-references.d.ts +5 -0
  128. package/dist/store/retention-references.d.ts.map +1 -1
  129. package/dist/store/retention-references.js +35 -6
  130. package/dist/store/retention-references.js.map +1 -1
  131. package/dist/store/schema.d.ts +2 -2
  132. package/dist/store/schema.d.ts.map +1 -1
  133. package/dist/store/schema.js +17 -2
  134. package/dist/store/schema.js.map +1 -1
  135. package/dist/store/sql-command-router.d.ts +12 -1
  136. package/dist/store/sql-command-router.d.ts.map +1 -1
  137. package/dist/store/sql-command-router.js +19 -1
  138. package/dist/store/sql-command-router.js.map +1 -1
  139. package/dist/store/sql-daemon-services.d.ts.map +1 -1
  140. package/dist/store/sql-daemon-services.js +9 -8
  141. package/dist/store/sql-daemon-services.js.map +1 -1
  142. package/dist/store/sql-validation.d.ts.map +1 -1
  143. package/dist/store/sql-validation.js +1 -0
  144. package/dist/store/sql-validation.js.map +1 -1
  145. package/dist/store/store.d.ts +9 -0
  146. package/dist/store/store.d.ts.map +1 -1
  147. package/dist/store/store.js +19 -0
  148. package/dist/store/store.js.map +1 -1
  149. package/dist/store/terminal-files.d.ts +24 -2
  150. package/dist/store/terminal-files.d.ts.map +1 -1
  151. package/dist/store/terminal-files.js +153 -31
  152. package/dist/store/terminal-files.js.map +1 -1
  153. package/dist/store/thread-closure.d.ts +62 -0
  154. package/dist/store/thread-closure.d.ts.map +1 -0
  155. package/dist/store/thread-closure.js +290 -0
  156. package/dist/store/thread-closure.js.map +1 -0
  157. package/dist/store/thread-retirement.d.ts +29 -0
  158. package/dist/store/thread-retirement.d.ts.map +1 -0
  159. package/dist/store/thread-retirement.js +123 -0
  160. package/dist/store/thread-retirement.js.map +1 -0
  161. package/dist/store/threads.d.ts +2 -0
  162. package/dist/store/threads.d.ts.map +1 -1
  163. package/dist/store/threads.js +10 -1
  164. package/dist/store/threads.js.map +1 -1
  165. package/dist/store/upload-imports.d.ts.map +1 -1
  166. package/dist/store/upload-imports.js +16 -3
  167. package/dist/store/upload-imports.js.map +1 -1
  168. package/dist/store/uploads.d.ts +13 -2
  169. package/dist/store/uploads.d.ts.map +1 -1
  170. package/dist/store/uploads.js +76 -30
  171. package/dist/store/uploads.js.map +1 -1
  172. package/dist/store-contracts.d.ts +32 -2
  173. package/dist/store-contracts.d.ts.map +1 -1
  174. package/dist/terminal-authority.d.ts +9 -1
  175. package/dist/terminal-authority.d.ts.map +1 -1
  176. package/dist/terminal-authority.js +32 -0
  177. package/dist/terminal-authority.js.map +1 -1
  178. package/dist/thread-lifecycle.d.ts +3 -1
  179. package/dist/thread-lifecycle.d.ts.map +1 -1
  180. package/dist/thread-lifecycle.js +2 -2
  181. package/dist/thread-lifecycle.js.map +1 -1
  182. package/dist/writer-lease.d.ts.map +1 -1
  183. package/dist/writer-lease.js +6 -3
  184. package/dist/writer-lease.js.map +1 -1
  185. package/package.json +5 -5
@@ -1,8 +1,10 @@
1
- import { measureSync } from "@claudexor/util";
1
+ import { processTiming } from "@claudexor/util";
2
2
  import { randomUUID } from "node:crypto";
3
3
  import { closeSync, constants, existsSync, linkSync, mkdirSync, openSync, renameSync, unlinkSync, writeSync, } from "node:fs";
4
+ import { link, open, stat, unlink } from "node:fs/promises";
4
5
  import { dirname, join } from "node:path";
5
6
  import { mapStoreError } from "./errors.js";
7
+ import { withUploadWriteSlot } from "./libuv-pool.js";
6
8
  /** Node does not expose the POSIX O_DSYNC name on Windows, but passes numeric
7
9
  * open flags to libuv. UV_FS_O_DSYNC maps to FILE_FLAG_WRITE_THROUGH there
8
10
  * (deps/uv/include/uv/win.h in the supported Node runtime). */
@@ -16,10 +18,16 @@ export function externalWriteFlags(access) {
16
18
  * 4 KiB–2 MiB), then `rename` into place, then a `{g, dir}` registration so
17
19
  * the flusher's pass fsyncs the directory entry. No Node sync primitive runs
18
20
  * on this thread. `keepExisting` is the content-addressed mode: an existing
19
- * target is never rewritten.
21
+ * target is never rewritten. The whole call is one `store.external_write`
22
+ * section; one that enters the worst sections is logged with its purpose,
23
+ * size and the split between metadata calls and the data write.
20
24
  */
21
25
  export function writeExternalFile(registry, input) {
22
- return measureSync("store.external_write", () => {
26
+ const started = performance.now();
27
+ let opened = null;
28
+ let closed = null;
29
+ let written = false;
30
+ try {
23
31
  const target = join(input.dir, input.name);
24
32
  if (input.keepExisting && existsSync(target)) {
25
33
  return { path: target, generation: registry.registerExternal(input.dir), written: false };
@@ -28,6 +36,7 @@ export function writeExternalFile(registry, input) {
28
36
  const temp = join(input.dir, `.${input.name}.${randomUUID()}.tmp`);
29
37
  let fd = null;
30
38
  try {
39
+ opened = performance.now();
31
40
  fd = openSync(temp, externalWriteFlags(constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL), 0o600);
32
41
  let offset = 0;
33
42
  while (offset < input.bytes.byteLength) {
@@ -35,11 +44,13 @@ export function writeExternalFile(registry, input) {
35
44
  }
36
45
  closeSync(fd);
37
46
  fd = null;
47
+ closed = performance.now();
38
48
  if (input.keepExisting && existsSync(target)) {
39
49
  unlinkSync(temp);
40
50
  return { path: target, generation: registry.registerExternal(input.dir), written: false };
41
51
  }
42
52
  renameSync(temp, target);
53
+ written = true;
43
54
  }
44
55
  catch (error) {
45
56
  if (fd !== null)
@@ -53,7 +64,171 @@ export function writeExternalFile(registry, input) {
53
64
  throw mapStoreError(error, `writing ${target}`);
54
65
  }
55
66
  return { path: target, generation: registry.registerExternal(input.dir), written: true };
67
+ }
68
+ finally {
69
+ const ended = performance.now();
70
+ recordExternalWrite(registry, {
71
+ purpose: input.purpose,
72
+ bytes: input.bytes.byteLength,
73
+ written,
74
+ metadata_before_ms: (opened ?? ended) - started,
75
+ data_write_ms: opened === null ? 0 : (closed ?? ended) - opened,
76
+ metadata_publish_ms: closed === null ? 0 : ended - closed,
77
+ total_ms: ended - started,
78
+ });
79
+ }
80
+ }
81
+ /** One `store.external_write` section; one entering the worst sections is logged. */
82
+ function recordExternalWrite(registry, sample) {
83
+ if (!processTiming.recordSync("store.external_write", sample.total_ms))
84
+ return;
85
+ const rounded = Object.fromEntries(Object.entries(sample).map(([key, value]) => [
86
+ key,
87
+ key.endsWith("_ms") ? Math.round(Number(value) * 1_000) / 1_000 : value,
88
+ ]));
89
+ registry.logSlowWrite?.(`store.external_write ${JSON.stringify(rounded)}`);
90
+ }
91
+ /**
92
+ * Publish a staged temp under its final name in the commit's synchronous
93
+ * step: rename it into place and register the directory, exactly what
94
+ * `writeExternalFile` does after its own write (and the same section for
95
+ * attribution). Null when the rename cannot happen there (another filesystem,
96
+ * or the temp is gone): the caller then writes the bytes itself.
97
+ */
98
+ export function publishStagedFile(registry, input) {
99
+ const started = performance.now();
100
+ const target = join(input.dir, input.name);
101
+ let written = false;
102
+ try {
103
+ renameSync(input.temp, target);
104
+ written = true;
105
+ }
106
+ catch (error) {
107
+ const code = error.code;
108
+ if (code !== "EXDEV" && code !== "ENOENT")
109
+ throw mapStoreError(error, `publishing ${target}`);
110
+ try {
111
+ unlinkSync(input.temp);
112
+ }
113
+ catch {
114
+ /* best effort; the orphan sweep removes stale .tmp files */
115
+ }
116
+ return null;
117
+ }
118
+ finally {
119
+ const ended = performance.now();
120
+ recordExternalWrite(registry, {
121
+ purpose: input.purpose,
122
+ bytes: input.bytes,
123
+ written,
124
+ staged: true,
125
+ metadata_publish_ms: ended - started,
126
+ total_ms: ended - started,
127
+ });
128
+ }
129
+ return { path: target, generation: registry.registerExternal(input.dir), written: true };
130
+ }
131
+ /** An `O_DSYNC` temp file in `dir` holding `bytes`, written on the libuv pool
132
+ * rather than the request thread. The caller publishes or removes it. */
133
+ export async function writeStagedTemp(dir, name, bytes) {
134
+ const temp = join(dir, `.${name}.${randomUUID()}.tmp`);
135
+ const handle = await open(temp, externalWriteFlags(constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL), 0o600);
136
+ let closed = false;
137
+ try {
138
+ let offset = 0;
139
+ while (offset < bytes.byteLength) {
140
+ const { bytesWritten } = await handle.write(bytes, offset, bytes.byteLength - offset, offset);
141
+ offset += bytesWritten;
142
+ }
143
+ closed = true;
144
+ await handle.close();
145
+ return temp;
146
+ }
147
+ catch (error) {
148
+ if (!closed)
149
+ await handle.close().catch(() => undefined);
150
+ await unlink(temp).catch(() => undefined);
151
+ throw error;
152
+ }
153
+ }
154
+ /**
155
+ * Incremental `O_DSYNC` write of an existing file on the libuv pool, using the
156
+ * same flags as `writeStagedTemp`. The caller owns the path (an upload part).
157
+ * `accept` runs on the request thread before each chunk is submitted and may
158
+ * throw to stop the transfer; `committed` runs after that chunk's write returns.
159
+ * A write already sitting in the pool finishes before the next `accept`.
160
+ * Each pool operation (the open with its truncate, every write, the close)
161
+ * holds one slot of the upload gate until it returns, so a transfer waiting for
162
+ * its next chunk from the network holds none. `cancelled` runs while the open
163
+ * or a write waits for a slot and may throw. The close waits for its slot even
164
+ * after a cancel, so the descriptor is closed on every exit.
165
+ */
166
+ export async function writeExternalIncremental(path, chunks, hooks) {
167
+ const handle = await withUploadWriteSlot(hooks?.cancelled, async () => {
168
+ const opened = await open(path, externalWriteFlags(constants.O_RDWR));
169
+ try {
170
+ await opened.truncate(0);
171
+ return opened;
172
+ }
173
+ catch (error) {
174
+ await opened.close().catch(() => undefined);
175
+ throw error;
176
+ }
56
177
  });
178
+ let received = 0;
179
+ let closed = false;
180
+ const close = async () => {
181
+ if (closed)
182
+ return;
183
+ closed = true;
184
+ await withUploadWriteSlot(undefined, () => handle.close());
185
+ };
186
+ try {
187
+ for await (const chunk of chunks) {
188
+ hooks?.accept?.(chunk, received);
189
+ let offset = 0;
190
+ while (offset < chunk.byteLength) {
191
+ const { bytesWritten } = await withUploadWriteSlot(hooks?.cancelled, () => handle.write(chunk, offset, chunk.byteLength - offset, received + offset));
192
+ if (bytesWritten <= 0)
193
+ throw new Error(`short write of ${path}`);
194
+ offset += bytesWritten;
195
+ }
196
+ received += chunk.byteLength;
197
+ hooks?.committed?.(chunk, received);
198
+ }
199
+ await close();
200
+ return received;
201
+ }
202
+ catch (error) {
203
+ await close().catch(() => undefined);
204
+ throw error;
205
+ }
206
+ }
207
+ /**
208
+ * The off-loop twin of `writeExternalFile` for a content-addressed body: the
209
+ * same `O_DSYNC` temp, published under its final name only while that name is
210
+ * absent (a hard link refuses an existing target, so a concurrent twin never
211
+ * rewrites it). It creates and registers nothing: the synchronous owner finds
212
+ * the file in the tick that commits its row and registers the directory then,
213
+ * under that commit's flusher barrier. Resolves whether this call published.
214
+ */
215
+ export async function stageExternalFile(input) {
216
+ const target = join(input.dir, input.name);
217
+ if (await stat(target).then(() => true, () => false))
218
+ return false;
219
+ const temp = await writeStagedTemp(input.dir, input.name, input.bytes);
220
+ try {
221
+ await link(temp, target);
222
+ return true;
223
+ }
224
+ catch (error) {
225
+ if (error.code === "EEXIST")
226
+ return false;
227
+ throw error;
228
+ }
229
+ finally {
230
+ await unlink(temp).catch(() => undefined);
231
+ }
57
232
  }
58
233
  /** Publish by hard link (finalize, SYNTHESIS_R5 §6.4): an existing target wins. */
59
234
  export function linkExternalFile(registry, input) {
@@ -1 +1 @@
1
- {"version":3,"file":"external-files.js","sourceRoot":"","sources":["../../src/store/external-files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external-files.js","sourceRoot":"","sources":["../../src/store/external-files.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type SqlWriteContext } from "./mutation.js";
2
- export type IdempotencyOwner = "command" | "thread" | "turn" | "decision" | "project" | "setup" | "upload" | "quarantine" | "deferred_message";
2
+ export type IdempotencyOwner = "command" | "thread" | "turn" | "decision" | "project" | "setup" | "upload" | "quarantine" | "deferred_message" | "thread_retire";
3
3
  export interface IdempotencyKey {
4
4
  owner: IdempotencyOwner;
5
5
  pid: number;
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,kBAAkB,CAAC;AAEvB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,MAAM,GACpB,kBAAkB,GAAG,SAAS,CAoBhC;AAED;+EAC+E;AAC/E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,kBAAkB,GAC1B,kBAAkB,CA0BpB;AAED;mFACmF;AACnF,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR"}
1
+ {"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,UAAU,GACV,SAAS,GACT,OAAO,GACP,QAAQ,GACR,YAAY,GACZ,kBAAkB,GAClB,eAAe,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAiBD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,aAAa,EAAE,MAAM,GACpB,kBAAkB,GAAG,SAAS,CAoBhC;AAED;+EAC+E;AAC/E,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,kBAAkB,GAC1B,kBAAkB,CA6BpB;AAED;mFACmF;AACnF,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAOR"}
@@ -36,8 +36,9 @@ export function bindIdempotencyInTx(sql, binding) {
36
36
  return existing;
37
37
  if (binding.owner !== "upload" &&
38
38
  binding.owner !== "deferred_message" &&
39
+ binding.owner !== "thread_retire" &&
39
40
  binding.result !== undefined) {
40
- throw new Error("only upload and deferred-message idempotency bindings carry a result");
41
+ throw new Error("only upload, deferred-message and thread-retire idempotency bindings carry a result");
41
42
  }
42
43
  sql
43
44
  .prepare("INSERT INTO idempotency(owner, pid, key_digest, operation, request_digest, target_id, result, created_at) VALUES(?, ?, ?, ?, ?, ?, ?, ?)")
@@ -1 +1 @@
1
- {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,eAAe,CAAC;AAqCzE,SAAS,QAAQ;IACf,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,EAAE;QAC1F,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAC/B,GAAqC,EACrC,GAAmB,EACnB,aAAqB;IAErB,MAAM,GAAG,GAAG,GAAG;SACZ,OAAO,CACN,iIAAiI,CAClI;SACA,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAA2B,CAAC;IACpE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,cAAc,KAAK,aAAa;QAAE,QAAQ,EAAE,CAAC;IACrD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,EAAE,CAAC;KACjF,CAAC;AACJ,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,mBAAmB,CACjC,GAAoB,EACpB,OAA2B;IAE3B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IACE,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC1B,OAAO,CAAC,KAAK,KAAK,kBAAkB;QACpC,OAAO,CAAC,MAAM,KAAK,SAAS,EAC5B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,GAAG;SACA,OAAO,CACN,0IAA0I,CAC3I;SACA,GAAG,CACF,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EACjF,OAAO,CAAC,SAAS,CAClB,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,2BAA2B,CACzC,GAAoB,EACpB,KAAuB,EACvB,GAAW,EACX,QAAgB;IAEhB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,MAAM,CACX,GAAG;SACA,OAAO,CAAC,uEAAuE,CAAC;SAChF,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CACrC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/store/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAwB,MAAM,eAAe,CAAC;AAsCzE,SAAS,QAAQ;IACf,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,CAAC,EAAE;QAC1F,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,GAAG;KACZ,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB,CAC/B,GAAqC,EACrC,GAAmB,EACnB,aAAqB;IAErB,MAAM,GAAG,GAAG,GAAG;SACZ,OAAO,CACN,iIAAiI,CAClI;SACA,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAA2B,CAAC;IACpE,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,GAAG,CAAC,cAAc,KAAK,aAAa;QAAE,QAAQ,EAAE,CAAC;IACrD,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,aAAa,EAAE,GAAG,CAAC,cAAc;QACjC,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAY,EAAE,CAAC;KACjF,CAAC;AACJ,CAAC;AAED;+EAC+E;AAC/E,MAAM,UAAU,mBAAmB,CACjC,GAAoB,EACpB,OAA2B;IAE3B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxE,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IACE,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC1B,OAAO,CAAC,KAAK,KAAK,kBAAkB;QACpC,OAAO,CAAC,KAAK,KAAK,eAAe;QACjC,OAAO,CAAC,MAAM,KAAK,SAAS,EAC5B,CAAC;QACD,MAAM,IAAI,KAAK,CACb,qFAAqF,CACtF,CAAC;IACJ,CAAC;IACD,GAAG;SACA,OAAO,CACN,0IAA0I,CAC3I;SACA,GAAG,CACF,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,GAAG,EACX,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EACjF,OAAO,CAAC,SAAS,CAClB,CAAC;IACJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;mFACmF;AACnF,MAAM,UAAU,2BAA2B,CACzC,GAAoB,EACpB,KAAuB,EACvB,GAAW,EACX,QAAgB;IAEhB,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxB,OAAO,MAAM,CACX,GAAG;SACA,OAAO,CAAC,uEAAuE,CAAC;SAChF,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CACrC,CAAC;AACJ,CAAC"}
@@ -62,7 +62,7 @@ export class ImportContext {
62
62
  this.externalDirectories.add(dir);
63
63
  return 0;
64
64
  },
65
- }, { dir: this.blobsDir, name: sha256, bytes, keepExisting: true });
65
+ }, { dir: this.blobsDir, name: sha256, bytes, keepExisting: true, purpose: "import" });
66
66
  // Existing immutable bytes are never rewritten, including a resource collision.
67
67
  if (!receipt.written) {
68
68
  const prior = readFileSync(receipt.path);
@@ -1 +1 @@
1
- {"version":3,"file":"import-context.js","sourceRoot":"","sources":["../../src/store/import-context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"import-context.js","sourceRoot":"","sources":["../../src/store/import-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAgB,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,oFAAoF;AACpF,MAAM,OAAO,aAAa;IAMb,EAAE;IACF,QAAQ;IANF,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;IACvD,MAAM,GAAG,KAAK,CAAC;IACd,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjD,YACW,EAAgB,EAChB,QAAgB;kBADhB,EAAE;wBACF,QAAQ;IAChB,CAAC;IAEJ,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAI,IAAa;QAC1B,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC9D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,EAAE,CAAC;YACrB,IAAI,KAAK,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU;gBACnE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzB,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED;qFACiF;IACjF,IAAI,CAAC,KAAiB;QACpB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,UAAU,IAAI,qBAAqB;YAC3C,OAAO;gBACL,MAAM;gBACN,IAAI,EAAE,KAAK,CAAC,UAAU;gBACtB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1B,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,MAAM,OAAO,GAAG,iBAAiB,CAC/B;YACE,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClC,OAAO,CAAC,CAAC;YACX,CAAC;SACF,EACD,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CACnF,CAAC;QACF,gFAAgF;QAChF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,MAAM;gBAClE,MAAM,WAAW,CAAC,4BAA4B,EAAE,iBAAiB,MAAM,UAAU,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAChG,CAAC;IAED,IAAI,CAAC,GAAW;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,CAAC,GAAG,CACtB,CAAC;QAC1D,IAAI,CAAC,GAAG;YAAE,MAAM,WAAW,CAAC,2BAA2B,EAAE,gBAAgB,GAAG,EAAE,CAAC,CAAC;QAChF,MAAM,KAAK,GACT,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzF,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG;YACvD,MAAM,WAAW,CAAC,4BAA4B,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc,EAAE,KAAe;IACvE,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The pool an operator-set (or unset) `UV_THREADPOOL_SIZE` gives. Unset means
3
+ * libuv's default of 4; assigning the variable after the pool exists does not
4
+ * resize it. A non-positive value is libuv's 1, and anything above 1024 is
5
+ * libuv's maximum.
6
+ */
7
+ export declare function libuvPoolSizeFrom(raw: string | undefined): number;
8
+ export declare function libuvPoolSize(): number;
9
+ /** Upload writes leave two threads for DNS and other filesystem work.
10
+ * A pool of one cannot spare them; that is the size the operator set. */
11
+ export declare function uploadWriteSlots(): number;
12
+ export interface UploadWriteGate {
13
+ acquire(cancelled?: () => void): Promise<() => void>;
14
+ wake(): void;
15
+ }
16
+ /** One queue. `acquire` resolves with a release function. A caller who finds
17
+ * the gate full waits on that promise (the event loop), not a spin. `wake`
18
+ * rechecks every waiter, so a cancellation rejects without waiting for a slot.
19
+ * Release is idempotent and hands the slot to the oldest waiter. */
20
+ export declare function createUploadWriteGate(slots: () => number): UploadWriteGate;
21
+ /** One pool operation under one upload slot, released when the operation settles.
22
+ * Callers do not hold a slot while they wait for network bytes. */
23
+ export declare function withUploadWriteSlot<T>(cancelled: (() => void) | undefined, operation: () => Promise<T>): Promise<T>;
24
+ export declare function wakeUploadWriteSlots(): void;
25
+ //# sourceMappingURL=libuv-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libuv-pool.d.ts","sourceRoot":"","sources":["../../src/store/libuv-pool.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAKjE;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;yEACyE;AACzE,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACrD,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;oEAGoE;AACpE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,eAAe,CA6C1E;AAID;mEACmE;AACnE,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EACnC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAOZ;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * The size the daemon entry applied when the operator had not set
3
+ * `UV_THREADPOOL_SIZE`. The entry created the pool at that size and then removed
4
+ * the variable, so harness children do not inherit it. Same key as
5
+ * `packages/cli/src/host-libuv-pool.ts` and `packages/claudexor/bin/libuv-pool.js`.
6
+ */
7
+ const APPLIED_POOL = Symbol.for("claudexor.libuvPoolSize");
8
+ /**
9
+ * The pool an operator-set (or unset) `UV_THREADPOOL_SIZE` gives. Unset means
10
+ * libuv's default of 4; assigning the variable after the pool exists does not
11
+ * resize it. A non-positive value is libuv's 1, and anything above 1024 is
12
+ * libuv's maximum.
13
+ */
14
+ export function libuvPoolSizeFrom(raw) {
15
+ if (raw == null || raw === "")
16
+ return 4;
17
+ const parsed = Number.parseInt(raw, 10);
18
+ if (!Number.isFinite(parsed) || parsed <= 0)
19
+ return 1;
20
+ return Math.min(parsed, 1024);
21
+ }
22
+ export function libuvPoolSize() {
23
+ const applied = globalThis[APPLIED_POOL];
24
+ if (typeof applied === "number")
25
+ return applied;
26
+ return libuvPoolSizeFrom(process.env.UV_THREADPOOL_SIZE);
27
+ }
28
+ /** Upload writes leave two threads for DNS and other filesystem work.
29
+ * A pool of one cannot spare them; that is the size the operator set. */
30
+ export function uploadWriteSlots() {
31
+ return Math.max(1, libuvPoolSize() - 2);
32
+ }
33
+ /** One queue. `acquire` resolves with a release function. A caller who finds
34
+ * the gate full waits on that promise (the event loop), not a spin. `wake`
35
+ * rechecks every waiter, so a cancellation rejects without waiting for a slot.
36
+ * Release is idempotent and hands the slot to the oldest waiter. */
37
+ export function createUploadWriteGate(slots) {
38
+ let active = 0;
39
+ const queue = [];
40
+ const attemptOf = (cancelled, settle) => {
41
+ const attempt = () => {
42
+ const index = queue.indexOf(attempt);
43
+ if (index >= 0)
44
+ queue.splice(index, 1);
45
+ try {
46
+ cancelled?.();
47
+ }
48
+ catch (error) {
49
+ settle.reject(error);
50
+ return;
51
+ }
52
+ if (active >= slots()) {
53
+ queue.push(attempt);
54
+ return;
55
+ }
56
+ active += 1;
57
+ let released = false;
58
+ settle.resolve(() => {
59
+ if (released)
60
+ return;
61
+ released = true;
62
+ active -= 1;
63
+ queue.shift()?.();
64
+ });
65
+ };
66
+ return attempt;
67
+ };
68
+ return {
69
+ acquire(cancelled) {
70
+ return new Promise((resolve, reject) => {
71
+ attemptOf(cancelled, { resolve, reject })();
72
+ });
73
+ },
74
+ wake() {
75
+ const pending = queue.splice(0, queue.length);
76
+ for (const attempt of pending)
77
+ attempt();
78
+ },
79
+ };
80
+ }
81
+ const uploadWrites = createUploadWriteGate(uploadWriteSlots);
82
+ /** One pool operation under one upload slot, released when the operation settles.
83
+ * Callers do not hold a slot while they wait for network bytes. */
84
+ export async function withUploadWriteSlot(cancelled, operation) {
85
+ const release = await uploadWrites.acquire(cancelled);
86
+ try {
87
+ return await operation();
88
+ }
89
+ finally {
90
+ release();
91
+ }
92
+ }
93
+ export function wakeUploadWriteSlots() {
94
+ uploadWrites.wake();
95
+ }
96
+ //# sourceMappingURL=libuv-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libuv-pool.js","sourceRoot":"","sources":["../../src/store/libuv-pool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance-worker.d.ts","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQ7F,OAAO,KAAK,EAKV,qBAAqB,EAGtB,MAAM,kBAAkB,CAAC;AAqG1B,2FAA2F;AAC3F,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
1
+ {"version":3,"file":"maintenance-worker.d.ts","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwC,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAS7F,OAAO,KAAK,EAKV,qBAAqB,EAGtB,MAAM,kBAAkB,CAAC;AAuI1B,2FAA2F;AAC3F,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Cf"}
@@ -7,6 +7,7 @@ import { STORE_WORKER_DATA_KEY } from "./flusher-protocol.js";
7
7
  import { loadEngineRuntime } from "./runtime.js";
8
8
  import { runLegacyImport } from "./importer.js";
9
9
  import { discoverLegacyPartitions } from "./import-discovery.js";
10
+ import { readThreadClosure } from "./thread-closure.js";
10
11
  const BLOB_NAME = /^[0-9a-f]{64}$/;
11
12
  const PART_NAME = /^(.+)\.part$/;
12
13
  const SQLITE_CORRUPT = 11;
@@ -107,10 +108,47 @@ function sweepCandidates(db, request) {
107
108
  result.durationMs = performance.now() - started;
108
109
  return result;
109
110
  }
111
+ /**
112
+ * One thread's closure in one read-only snapshot. Its first read fixes the snapshot
113
+ * and proves which store it is; every closure row then comes from that snapshot, so
114
+ * no commit in between can tear it. It writes nothing and always ends here, so the
115
+ * WAL is never held past this request.
116
+ */
117
+ function threadClosure(db, prepare, request, barrier) {
118
+ db.exec("BEGIN");
119
+ try {
120
+ const identity = prepare("SELECT value FROM meta WHERE key='store_id'").get();
121
+ if ((identity?.value ?? null) !== request.storeId)
122
+ throw new Error("the maintenance snapshot does not read this engine store");
123
+ if (barrier)
124
+ parkAtBarrier(barrier);
125
+ return readThreadClosure({ prepare, storeId: request.storeId ?? undefined }, request.threadId);
126
+ }
127
+ finally {
128
+ if (db.isTransaction)
129
+ db.exec("ROLLBACK");
130
+ }
131
+ }
132
+ /** Test seam (`MaintenanceWorkerHooks.closureBarrier`): wait for this arrival's release. */
133
+ function parkAtBarrier(buffer) {
134
+ const slots = new Int32Array(buffer);
135
+ const arrival = Atomics.add(slots, 0, 1) + 1;
136
+ Atomics.notify(slots, 0);
137
+ for (let released = Atomics.load(slots, 1); released < arrival; released = Atomics.load(slots, 1))
138
+ Atomics.wait(slots, 1, released);
139
+ }
110
140
  /** `node:sqlite` is imported lazily: the daemon package must load on a Node without it. */
111
141
  export async function runMaintenanceWorker(port, data) {
112
142
  const { sqlite } = await loadEngineRuntime();
113
143
  const db = new sqlite.DatabaseSync(data.dbPath, { readOnly: true, timeout: 0 });
144
+ // Cached per SQL text for the connection's life, as the writer caches its own.
145
+ const statements = new Map();
146
+ const prepare = (sql) => {
147
+ let statement = statements.get(sql);
148
+ if (!statement)
149
+ statements.set(sql, (statement = db.prepare(sql)));
150
+ return statement;
151
+ };
114
152
  port.on("message", (request) => {
115
153
  let response;
116
154
  try {
@@ -124,6 +162,13 @@ export async function runMaintenanceWorker(port, data) {
124
162
  case "sweep_candidates":
125
163
  response = { id: request.id, ok: true, result: sweepCandidates(db, request) };
126
164
  break;
165
+ case "thread_closure":
166
+ response = {
167
+ id: request.id,
168
+ ok: true,
169
+ result: threadClosure(db, prepare, request, data.hooks?.closureBarrier),
170
+ };
171
+ break;
127
172
  }
128
173
  }
129
174
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance-worker.js","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"maintenance-worker.js","sourceRoot":"","sources":["../../src/store/maintenance-worker.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,19 @@
1
1
  import { BlobFiles } from "./blob-files.js";
2
2
  import { STORE_WORKER_DATA_KEY } from "./flusher-protocol.js";
3
3
  import type { EngineStore } from "./store.js";
4
+ import type { ThreadClosure } from "./thread-closure.js";
4
5
  import "./maintenance-worker.js";
5
6
  export interface MaintenanceWorkerData {
6
7
  [STORE_WORKER_DATA_KEY]: "maintenance";
7
8
  dbPath: string;
9
+ hooks?: MaintenanceWorkerHooks;
10
+ }
11
+ /** Test seams, inert unless set (the flusher's `FlusherHooks` precedent). */
12
+ export interface MaintenanceWorkerHooks {
13
+ /** A closure read parks here inside its snapshot, once the snapshot is fixed and
14
+ * before any closure row is read: slot 0 counts arrivals, and a read goes on once
15
+ * slot 1 reaches its own arrival number. */
16
+ closureBarrier?: SharedArrayBuffer;
8
17
  }
9
18
  /** Requests are a discriminated union: the importer (PR-D) adds its kind here
10
19
  * and a handler in the worker; nothing else changes. */
@@ -22,6 +31,12 @@ export type MaintenanceRequest = {
22
31
  uploadsDir: string;
23
32
  /** Files whose mtime is at or after this epoch-ms instant are left alone. */
24
33
  olderThanMs: number;
34
+ } | {
35
+ id: number;
36
+ kind: "thread_closure";
37
+ threadId: string;
38
+ /** The store the snapshot must prove it reads. */
39
+ storeId: string | null;
25
40
  };
26
41
  export interface IntegrityReport {
27
42
  ok: boolean;
@@ -64,7 +79,7 @@ export interface SweepReport extends Omit<SweepCandidates, "candidates"> {
64
79
  export type MaintenanceResponse = {
65
80
  id: number;
66
81
  ok: true;
67
- result: IntegrityReport | ExportReport | SweepCandidates;
82
+ result: IntegrityReport | ExportReport | SweepCandidates | ThreadClosure | null;
68
83
  } | {
69
84
  id: number;
70
85
  ok: false;
@@ -78,6 +93,7 @@ export interface MaintenanceControllerOptions {
78
93
  processStartedAt?: number;
79
94
  /** The store's blob owner (one per store: it holds the unref generations). */
80
95
  blobs?: BlobFiles;
96
+ hooks?: MaintenanceWorkerHooks;
81
97
  }
82
98
  /**
83
99
  * Maintenance (SYNTHESIS_R5 §2, §6.5, §7 p.6; R5_AMENDMENTS A4, C2, C9):
@@ -86,7 +102,9 @@ export interface MaintenanceControllerOptions {
86
102
  * The worker owns a separate read-only connection, never shares a thread or
87
103
  * connection with the flusher, never writes a row, and only ENUMERATES sweep
88
104
  * candidates older than the process start; every removal is decided on the
89
- * main thread through the one owner-generation unlink rule (C10).
105
+ * main thread through the one owner-generation unlink rule (C10). Its snapshot
106
+ * also answers a thread's closure for an export's observation; every decision
107
+ * reads the closure again on the writer, inside the deciding transaction.
90
108
  */
91
109
  export declare class MaintenanceController {
92
110
  private readonly store;
@@ -104,6 +122,14 @@ export declare class MaintenanceController {
104
122
  integrityCheck(): Promise<IntegrityReport>;
105
123
  /** `VACUUM INTO target`: a consistent snapshot copy, written by the worker. */
106
124
  exportTo(target: string): Promise<ExportReport>;
125
+ /**
126
+ * The thread's closure as one read-only snapshot holds it, read on the worker so
127
+ * the writer's thread stays free. An observation only: retirement reads it again
128
+ * inside its own transaction. `signal` ends the caller's wait alone. A read the
129
+ * worker has not taken leaves the queue; one it has taken keeps the worker until
130
+ * it ends, and its answer is dropped.
131
+ */
132
+ threadClosure(threadId: string, signal?: AbortSignal): Promise<ThreadClosure | null>;
107
133
  /** The worker's candidate list for files older than the process start (test seam). */
108
134
  sweepCandidates(): Promise<SweepCandidates>;
109
135
  /**