@amalgm/shell 0.1.134 → 0.1.136
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bounded-for-each.d.ts +3 -0
- package/dist/bounded-for-each.js +26 -0
- package/dist/bounded-for-each.js.map +1 -0
- package/dist/content-direct.d.ts +21 -13
- package/dist/content-direct.js +70 -68
- package/dist/content-direct.js.map +1 -1
- package/dist/filesystem.d.ts +3 -0
- package/dist/filesystem.js +11 -0
- package/dist/filesystem.js.map +1 -1
- package/dist/transfer-instrumentation.d.ts +18 -0
- package/dist/transfer-instrumentation.js +70 -0
- package/dist/transfer-instrumentation.js.map +1 -1
- package/dist/user-ground-host.d.ts +12 -7
- package/dist/user-ground-host.js +221 -100
- package/dist/user-ground-host.js.map +1 -1
- package/dist/wire-client.js +1 -1
- package/dist/workspace-add-staging.d.ts +98 -34
- package/dist/workspace-add-staging.js +255 -149
- package/dist/workspace-add-staging.js.map +1 -1
- package/npm-shrinkwrap.json +6 -6
- package/package.json +2 -2
|
@@ -2,23 +2,36 @@
|
|
|
2
2
|
* Direct-to-staging content placement for Cold Add.
|
|
3
3
|
*
|
|
4
4
|
* During Cold Add each ordinary file's bytes are written once, directly into
|
|
5
|
-
* their hidden staged destination
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* their hidden staged destination. The cold Add's mass — single-chunk files —
|
|
6
|
+
* pays one handle lifecycle per file; a multi-chunk file pays one bounded
|
|
7
|
+
* lifecycle per chunk rather than retaining descriptors across a whole wave.
|
|
8
|
+
* The directory skeleton exists before the first byte lands, the open that
|
|
9
|
+
* writes a cold file is the open that creates it, every chunk is verified
|
|
10
|
+
* before its positioned write, the whole-file hash is proven from that same
|
|
11
|
+
* stream, and the chunk that completes the stream makes the proven bytes
|
|
12
|
+
* durable and user-visible through the handle that wrote them before it
|
|
13
|
+
* closes. Nothing waits for a seal pass: seal asserts the proof the stream
|
|
14
|
+
* already produced and places duplicates. A second cache copy is not part of
|
|
15
|
+
* the critical path, and the workspace is revealed later by one atomic rename.
|
|
9
16
|
*
|
|
10
17
|
* SQLite chunk evidence makes an interrupted staging resumable. Retained
|
|
11
18
|
* staged bytes are never trusted: every retained chunk is re-read and
|
|
12
|
-
* re-hashed against its manifest before it may satisfy the download,
|
|
13
|
-
*
|
|
19
|
+
* re-hashed against its manifest before it may satisfy the download, a
|
|
20
|
+
* retained file is cut to its manifest length so no stale tail survives under
|
|
21
|
+
* a proven prefix, and the whole-file digest is proven again from that same
|
|
22
|
+
* stream.
|
|
14
23
|
*/
|
|
15
24
|
import { createHash } from "node:crypto";
|
|
16
|
-
import {
|
|
25
|
+
import { constants, rmSync } from "node:fs";
|
|
17
26
|
import { open } from "node:fs/promises";
|
|
18
27
|
import { dirname, join } from "node:path";
|
|
19
28
|
import Database from "better-sqlite3";
|
|
20
|
-
import { atomicCopy, ensurePrivateDir,
|
|
29
|
+
import { atomicCopy, ensurePrivateDir, ensureUserDirs } from "./filesystem.js";
|
|
30
|
+
import { ConcurrentActivityClock } from "./transfer-instrumentation.js";
|
|
21
31
|
const sha256Hex = (input) => createHash("sha256").update(input).digest("hex");
|
|
32
|
+
/** How wide the directory skeleton is created. Each mkdir is one volume
|
|
33
|
+
* round trip, and none of them belong on a file's store path. */
|
|
34
|
+
const SKELETON_CONCURRENCY = 8;
|
|
22
35
|
/** The device-scoped home of one workspace Add's staging resume evidence.
|
|
23
36
|
* It lives beside the ground database — never inside the staging root, which
|
|
24
37
|
* the reveal renames into user-visible ground. */
|
|
@@ -72,40 +85,29 @@ class AddStagingEvidence {
|
|
|
72
85
|
this.database.close();
|
|
73
86
|
}
|
|
74
87
|
}
|
|
75
|
-
async function
|
|
76
|
-
const handle = await openRegularFile(file, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
88
|
+
async function readAt(handle, offset, bytes) {
|
|
77
89
|
const output = Buffer.allocUnsafe(bytes);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
cursor += result.bytesRead;
|
|
85
|
-
}
|
|
86
|
-
return output;
|
|
87
|
-
}
|
|
88
|
-
finally {
|
|
89
|
-
await handle.close();
|
|
90
|
+
let cursor = 0;
|
|
91
|
+
while (cursor < bytes) {
|
|
92
|
+
const result = await handle.read(output, cursor, bytes - cursor, offset + cursor);
|
|
93
|
+
if (result.bytesRead === 0)
|
|
94
|
+
throw new Error("staged content range is truncated");
|
|
95
|
+
cursor += result.bytesRead;
|
|
90
96
|
}
|
|
97
|
+
return output;
|
|
91
98
|
}
|
|
92
|
-
async function
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
throw new Error("staged content write made no progress");
|
|
100
|
-
cursor += result.bytesWritten;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
finally {
|
|
104
|
-
await handle.close();
|
|
99
|
+
async function writeAt(handle, offset, bytes) {
|
|
100
|
+
let cursor = 0;
|
|
101
|
+
while (cursor < bytes.byteLength) {
|
|
102
|
+
const result = await handle.write(bytes, cursor, bytes.byteLength - cursor, offset + cursor);
|
|
103
|
+
if (result.bytesWritten === 0)
|
|
104
|
+
throw new Error("staged content write made no progress");
|
|
105
|
+
cursor += result.bytesWritten;
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
/** Durability for a file placed by rename rather than streamed. */
|
|
109
|
+
async function fsyncPath(file) {
|
|
110
|
+
const handle = await open(file, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
109
111
|
try {
|
|
110
112
|
await handle.sync();
|
|
111
113
|
}
|
|
@@ -113,34 +115,22 @@ async function fsyncFile(file) {
|
|
|
113
115
|
await handle.close();
|
|
114
116
|
}
|
|
115
117
|
}
|
|
116
|
-
/** Open only the regular file named at this exact path. Retained staging is
|
|
117
|
-
* untrusted until re-proven, so neither a stale symlink nor a special file may
|
|
118
|
-
* redirect Add's reads, writes, truncation, or durability boundary. */
|
|
119
|
-
async function openRegularFile(file, flags, mode) {
|
|
120
|
-
const handle = await open(file, flags, mode);
|
|
121
|
-
try {
|
|
122
|
-
if (!(await handle.stat()).isFile()) {
|
|
123
|
-
throw new Error(`staged content is not a regular file: ${file}`);
|
|
124
|
-
}
|
|
125
|
-
return handle;
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
await handle.close();
|
|
129
|
-
throw error;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
118
|
/** One ordinary file downloading directly into its staged destination.
|
|
133
119
|
*
|
|
134
|
-
* Chunks may arrive in any order; each lands with a positioned write
|
|
135
|
-
* serialized
|
|
136
|
-
* the arriving bytes when the next expected
|
|
137
|
-
* reading an already-written later chunk
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
120
|
+
* Chunks may arrive in any order; each lands with a positioned write through
|
|
121
|
+
* its own handle, and a serialized proof turn feeds the whole-file hasher
|
|
122
|
+
* strictly in chunk order — from the arriving bytes when the next expected
|
|
123
|
+
* chunk is at hand, otherwise by reading an already-written later chunk back
|
|
124
|
+
* through that same handle. The turn that completes the stream proves the
|
|
125
|
+
* digest and finishes the file before the handle closes, so a single-chunk
|
|
126
|
+
* file — the cold Add's mass — is created, written, proven, made durable, and
|
|
127
|
+
* released inside one putChunk, and open handles never outnumber chunks in
|
|
128
|
+
* flight. Resume rereads every retained chunk by necessity so local staging
|
|
129
|
+
* can never stand in for content proof. */
|
|
141
130
|
export class StagedContentFile {
|
|
142
131
|
evidence;
|
|
143
132
|
metrics;
|
|
133
|
+
storeActivity;
|
|
144
134
|
artifact;
|
|
145
135
|
manifest;
|
|
146
136
|
destinations;
|
|
@@ -150,11 +140,14 @@ export class StagedContentFile {
|
|
|
150
140
|
ready = new Set();
|
|
151
141
|
nextChunk = 0;
|
|
152
142
|
hashTurn = Promise.resolve();
|
|
153
|
-
|
|
143
|
+
failure = null;
|
|
144
|
+
placed = false;
|
|
145
|
+
finished = false;
|
|
154
146
|
sealed = false;
|
|
155
|
-
constructor(evidence, metrics, artifact, manifest, destinations) {
|
|
147
|
+
constructor(evidence, metrics, storeActivity, artifact, manifest, destinations) {
|
|
156
148
|
this.evidence = evidence;
|
|
157
149
|
this.metrics = metrics;
|
|
150
|
+
this.storeActivity = storeActivity;
|
|
158
151
|
this.artifact = artifact;
|
|
159
152
|
this.manifest = manifest;
|
|
160
153
|
this.destinations = destinations;
|
|
@@ -168,82 +161,153 @@ export class StagedContentFile {
|
|
|
168
161
|
return result;
|
|
169
162
|
});
|
|
170
163
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
164
|
+
/** Time one leg of placement. An activity names what is physically in
|
|
165
|
+
* flight; a leg without one is a wait. */
|
|
166
|
+
async leg(leg, work, activity) {
|
|
167
|
+
const started = performance.now();
|
|
168
|
+
try {
|
|
169
|
+
return activity ? await this.storeActivity.time(activity, work) : await work();
|
|
170
|
+
}
|
|
171
|
+
finally {
|
|
172
|
+
this.metrics[leg] += performance.now() - started;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
legSync(leg, work, activity) {
|
|
176
|
+
const started = performance.now();
|
|
177
|
+
try {
|
|
178
|
+
return this.storeActivity.timeSync(activity, work);
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
this.metrics[leg] += performance.now() - started;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** One handle on the staged file. A cold Add's first open creates the file
|
|
185
|
+
* outright — never a probing open that is guaranteed to fail. The first
|
|
186
|
+
* open of a retained file proves it is a regular file and cuts it to its
|
|
187
|
+
* manifest length. Every later chunk open still re-proves that its exact,
|
|
188
|
+
* no-follow target is a regular file; retained staging never becomes trust. */
|
|
189
|
+
async openHandle() {
|
|
190
|
+
if (this.placed) {
|
|
191
|
+
const handle = await open(this.primary, constants.O_RDWR | constants.O_NOFOLLOW);
|
|
192
|
+
try {
|
|
193
|
+
if (!(await handle.stat()).isFile()) {
|
|
194
|
+
throw new Error(`staged content is not a regular file: ${this.primary}`);
|
|
186
195
|
}
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
return handle;
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
await handle.close();
|
|
200
|
+
throw error;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
let handle;
|
|
204
|
+
try {
|
|
205
|
+
handle = await open(this.primary, constants.O_RDWR | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o644);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (error.code !== "EEXIST")
|
|
209
|
+
throw error;
|
|
210
|
+
handle = await open(this.primary, constants.O_RDWR | constants.O_NOFOLLOW);
|
|
211
|
+
try {
|
|
212
|
+
if (!(await handle.stat()).isFile()) {
|
|
213
|
+
throw new Error(`staged content is not a regular file: ${this.primary}`);
|
|
189
214
|
}
|
|
190
|
-
|
|
215
|
+
await handle.truncate(this.manifest.bytes);
|
|
216
|
+
}
|
|
217
|
+
catch (guard) {
|
|
218
|
+
await handle.close();
|
|
219
|
+
throw guard;
|
|
220
|
+
}
|
|
191
221
|
}
|
|
192
|
-
|
|
222
|
+
this.placed = true;
|
|
223
|
+
return handle;
|
|
193
224
|
}
|
|
194
|
-
/** Feed the whole-file hasher every chunk
|
|
195
|
-
*
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
this.metrics.preadBytes += chunk.bytes;
|
|
211
|
-
this.hasher.update(bytes);
|
|
212
|
-
this.ready.delete(index);
|
|
213
|
-
this.nextChunk += 1;
|
|
225
|
+
/** Feed the whole-file hasher every chunk now in order — the arriving bytes
|
|
226
|
+
* on the arrival's own turn, otherwise an already-written chunk read back
|
|
227
|
+
* through this handle. True when this turn completed the stream. */
|
|
228
|
+
async drain(handle, arrived, arrivedBytes) {
|
|
229
|
+
const before = this.nextChunk;
|
|
230
|
+
this.ready.add(arrived);
|
|
231
|
+
while (this.ready.has(this.nextChunk)) {
|
|
232
|
+
const index = this.nextChunk;
|
|
233
|
+
const chunk = this.manifest.chunks[index];
|
|
234
|
+
const offset = this.offsets[index];
|
|
235
|
+
if (!chunk || offset === undefined)
|
|
236
|
+
throw new Error(`content manifest has no chunk ${index}`);
|
|
237
|
+
let bytes = arrivedBytes;
|
|
238
|
+
if (index !== arrived) {
|
|
239
|
+
bytes = await this.storeActivity.time("file", () => readAt(handle, offset, chunk.bytes));
|
|
240
|
+
this.metrics.preadBytes += chunk.bytes;
|
|
214
241
|
}
|
|
215
|
-
this.
|
|
242
|
+
this.hasher.update(bytes);
|
|
243
|
+
this.ready.delete(index);
|
|
244
|
+
this.nextChunk += 1;
|
|
245
|
+
}
|
|
246
|
+
return this.nextChunk !== before && this.nextChunk === this.manifest.chunks.length;
|
|
247
|
+
}
|
|
248
|
+
/** The stream is complete in order: prove its digest, then make the proven
|
|
249
|
+
* bytes user-visible and durable through the handle that wrote them. */
|
|
250
|
+
async finish(handle) {
|
|
251
|
+
if (this.hasher.digest("hex") !== this.manifest.contentHash) {
|
|
252
|
+
throw new Error(`cloud content ${this.manifest.contentHash} is corrupt`);
|
|
253
|
+
}
|
|
254
|
+
await handle.chmod(0o644);
|
|
255
|
+
await handle.sync();
|
|
256
|
+
this.finished = true;
|
|
257
|
+
}
|
|
258
|
+
/** Queue one serialized proof turn. A failed turn rejects its own caller
|
|
259
|
+
* and is remembered for seal; the chain stays usable so later chunks fail
|
|
260
|
+
* on their own evidence, not on a poisoned chain. */
|
|
261
|
+
turn(work) {
|
|
262
|
+
const turn = this.hashTurn.then(work);
|
|
263
|
+
this.hashTurn = turn.catch((error) => {
|
|
264
|
+
this.failure ??= error instanceof Error ? error : new Error(String(error));
|
|
216
265
|
});
|
|
217
|
-
// A failed turn already rejected its own caller; keep the chain usable so
|
|
218
|
-
// later chunks fail on their own evidence, not on a poisoned chain.
|
|
219
|
-
this.hashTurn = turn.catch(() => { });
|
|
220
266
|
return turn;
|
|
221
267
|
}
|
|
268
|
+
prove(handle, arrived, arrivedBytes) {
|
|
269
|
+
return this.turn(async () => {
|
|
270
|
+
if (await this.leg("drainMs", () => this.drain(handle, arrived, arrivedBytes), "hash")) {
|
|
271
|
+
await this.leg("finishMs", () => this.finish(handle), "file");
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
222
275
|
/** Re-prove one retained staged chunk before it may satisfy the download.
|
|
223
|
-
* Evidence rows only say what should be there; the bytes decide.
|
|
276
|
+
* Evidence rows only say what should be there; the bytes decide. A retained
|
|
277
|
+
* chunk that verifies joins the ordered proof exactly like an arrival. */
|
|
224
278
|
async hasChunk(index) {
|
|
225
279
|
const expected = this.manifest.chunks[index];
|
|
226
280
|
const offset = this.offsets[index];
|
|
227
281
|
if (!expected || offset === undefined)
|
|
228
282
|
throw new Error(`content manifest has no chunk ${index}`);
|
|
229
283
|
const retained = this.evidence.chunk(this.artifact.contentHash, index);
|
|
230
|
-
if (retained?.sha256
|
|
284
|
+
if (retained?.sha256 !== expected.sha256 || retained.bytes !== expected.bytes)
|
|
285
|
+
return false;
|
|
286
|
+
const handle = await this.leg("openMs", () => this.openHandle(), "file");
|
|
287
|
+
try {
|
|
288
|
+
let bytes = null;
|
|
231
289
|
try {
|
|
232
|
-
|
|
233
|
-
if (sha256Hex(bytes) === expected.sha256) {
|
|
234
|
-
await this.queueHash(index, bytes);
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
290
|
+
bytes = await this.storeActivity.time("file", () => readAt(handle, offset, expected.bytes));
|
|
237
291
|
}
|
|
238
292
|
catch {
|
|
239
293
|
// The staged bytes disappeared or shrank after their evidence row.
|
|
240
294
|
}
|
|
295
|
+
if (bytes !== null && sha256Hex(bytes) === expected.sha256) {
|
|
296
|
+
const proven = bytes;
|
|
297
|
+
await this.leg("hashTurnMs", () => this.prove(handle, index, proven));
|
|
298
|
+
return true;
|
|
299
|
+
}
|
|
241
300
|
this.evidence.forget(this.artifact.contentHash, index);
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
finally {
|
|
304
|
+
await this.leg("closeMs", () => handle.close(), "file");
|
|
242
305
|
}
|
|
243
|
-
return false;
|
|
244
306
|
}
|
|
245
307
|
/** Persist one block already verified by @amalgm/live with a positioned
|
|
246
|
-
* write, then advance the
|
|
308
|
+
* write through this chunk's own handle, then advance the ordered proof.
|
|
309
|
+
* The chunk that completes the proof finishes the file before its handle
|
|
310
|
+
* closes; any other chunk simply releases its handle. */
|
|
247
311
|
async putChunk(index, bytes) {
|
|
248
312
|
const expected = this.manifest.chunks[index];
|
|
249
313
|
const offset = this.offsets[index];
|
|
@@ -251,40 +315,46 @@ export class StagedContentFile {
|
|
|
251
315
|
throw new Error(`content manifest has no chunk ${index}`);
|
|
252
316
|
if (bytes.byteLength !== expected.bytes)
|
|
253
317
|
throw new Error("content block byte count is invalid");
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.
|
|
258
|
-
|
|
259
|
-
|
|
318
|
+
if (this.finished) {
|
|
319
|
+
throw new Error(`cloud content ${this.manifest.contentHash} received chunk ${index} after its proof`);
|
|
320
|
+
}
|
|
321
|
+
const handle = await this.leg("openMs", () => this.openHandle(), "file");
|
|
322
|
+
try {
|
|
323
|
+
await this.leg("writeMs", () => writeAt(handle, offset, bytes), "file");
|
|
324
|
+
this.legSync("evidenceMs", () => this.evidence.record(this.artifact.contentHash, index, expected.sha256, expected.bytes), "evidence");
|
|
325
|
+
await this.leg("hashTurnMs", () => this.prove(handle, index, bytes));
|
|
326
|
+
}
|
|
327
|
+
finally {
|
|
328
|
+
await this.leg("closeMs", () => handle.close(), "file");
|
|
329
|
+
}
|
|
260
330
|
}
|
|
261
|
-
/**
|
|
262
|
-
*
|
|
263
|
-
*
|
|
331
|
+
/** Assert the proof this file's own stream already produced, and place
|
|
332
|
+
* every duplicate destination from the proven primary. An artifact with no
|
|
333
|
+
* chunks has no stream: its proof is the empty digest, made here. */
|
|
264
334
|
async seal() {
|
|
265
335
|
if (this.sealed)
|
|
266
336
|
throw new Error("staged artifact is already sealed");
|
|
267
337
|
this.sealed = true;
|
|
268
|
-
|
|
338
|
+
if (this.manifest.chunks.length === 0) {
|
|
339
|
+
const handle = await this.leg("openMs", () => this.openHandle(), "file");
|
|
340
|
+
try {
|
|
341
|
+
await this.turn(() => this.leg("finishMs", () => this.finish(handle), "file"));
|
|
342
|
+
}
|
|
343
|
+
finally {
|
|
344
|
+
await this.leg("closeMs", () => handle.close(), "file");
|
|
345
|
+
}
|
|
346
|
+
}
|
|
269
347
|
await this.hashTurn;
|
|
270
|
-
if (this.
|
|
348
|
+
if (this.failure)
|
|
349
|
+
throw this.failure;
|
|
350
|
+
if (!this.finished) {
|
|
271
351
|
throw new Error(`cloud content ${this.manifest.contentHash} did not stream every chunk`);
|
|
272
352
|
}
|
|
273
|
-
if (this.hasher.digest("hex") !== this.manifest.contentHash) {
|
|
274
|
-
throw new Error(`cloud content ${this.manifest.contentHash} is corrupt`);
|
|
275
|
-
}
|
|
276
|
-
const fsyncStarted = performance.now();
|
|
277
|
-
await fsyncFile(this.primary);
|
|
278
|
-
this.metrics.fsyncMs += performance.now() - fsyncStarted;
|
|
279
|
-
chmodSync(this.primary, 0o644);
|
|
280
353
|
for (const duplicate of this.destinations.slice(1)) {
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const duplicateFsyncStarted = performance.now();
|
|
286
|
-
await fsyncFile(duplicate);
|
|
287
|
-
this.metrics.fsyncMs += performance.now() - duplicateFsyncStarted;
|
|
354
|
+
await this.leg("copyMs", async () => {
|
|
355
|
+
atomicCopy(this.primary, duplicate, 0o644);
|
|
356
|
+
await fsyncPath(duplicate);
|
|
357
|
+
}, "file");
|
|
288
358
|
}
|
|
289
359
|
return {
|
|
290
360
|
file: this.primary,
|
|
@@ -292,41 +362,77 @@ export class StagedContentFile {
|
|
|
292
362
|
contentHash: this.manifest.contentHash,
|
|
293
363
|
};
|
|
294
364
|
}
|
|
295
|
-
/** Keep staged bytes and evidence for the next attempt.
|
|
365
|
+
/** Keep staged bytes and evidence for the next attempt. Handles live only
|
|
366
|
+
* inside the chunk operations that opened them, so an interrupted file
|
|
367
|
+
* holds nothing here; an in-flight proof turn is merely allowed to settle. */
|
|
296
368
|
async close() {
|
|
297
|
-
|
|
298
|
-
await this.prepared.catch(() => { });
|
|
369
|
+
await this.hashTurn;
|
|
299
370
|
}
|
|
300
371
|
}
|
|
301
|
-
/** One evidence database shared by every staged
|
|
372
|
+
/** One evidence database and one directory skeleton shared by every staged
|
|
373
|
+
* file in a download set. */
|
|
302
374
|
export class StagedContentSet {
|
|
303
375
|
evidence;
|
|
376
|
+
storeActivity = new ConcurrentActivityClock(["file", "evidence", "hash"]);
|
|
304
377
|
metrics = {
|
|
378
|
+
skeletonMs: 0,
|
|
379
|
+
directories: 0,
|
|
380
|
+
openMs: 0,
|
|
305
381
|
writeMs: 0,
|
|
382
|
+
evidenceMs: 0,
|
|
383
|
+
hashTurnMs: 0,
|
|
306
384
|
drainMs: 0,
|
|
307
385
|
preadBytes: 0,
|
|
308
|
-
|
|
386
|
+
finishMs: 0,
|
|
387
|
+
closeMs: 0,
|
|
309
388
|
copyMs: 0,
|
|
310
389
|
};
|
|
311
390
|
closed = false;
|
|
312
391
|
constructor(evidenceDir) {
|
|
313
392
|
this.evidence = new AddStagingEvidence(evidenceDir);
|
|
314
393
|
}
|
|
394
|
+
/** Open the set for these destinations. Every directory that will hold a
|
|
395
|
+
* staged file — primary or duplicate — exists before the first byte lands,
|
|
396
|
+
* so no chunk's store path ever includes a mkdir. */
|
|
397
|
+
static async open(evidenceDir, destinations) {
|
|
398
|
+
const set = new StagedContentSet(evidenceDir);
|
|
399
|
+
try {
|
|
400
|
+
const directories = [...new Set([...destinations.values()].flat().map(dirname))].sort();
|
|
401
|
+
const started = performance.now();
|
|
402
|
+
await set.storeActivity.time("file", () => ensureUserDirs(directories, SKELETON_CONCURRENCY));
|
|
403
|
+
set.metrics.skeletonMs = performance.now() - started;
|
|
404
|
+
set.metrics.directories = directories.length;
|
|
405
|
+
return set;
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
set.close();
|
|
409
|
+
throw error;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
315
412
|
target(artifact, manifest, destinations) {
|
|
316
413
|
if (this.closed)
|
|
317
414
|
throw new Error("staged content set is closed");
|
|
318
|
-
return new StagedContentFile(this.evidence, this.metrics, artifact, manifest, destinations);
|
|
415
|
+
return new StagedContentFile(this.evidence, this.metrics, this.storeActivity, artifact, manifest, destinations);
|
|
319
416
|
}
|
|
320
|
-
/** The staged rail's
|
|
321
|
-
*
|
|
322
|
-
*
|
|
417
|
+
/** The staged rail's placement split, keyed for the download stage ledger:
|
|
418
|
+
* the one-time skeleton, then the per-file legs — open, write, evidence,
|
|
419
|
+
* the ordered proof (turn wait and drain work), finish, close — and
|
|
420
|
+
* duplicate copies. The `stagedStore*` states partition the same wall time
|
|
421
|
+
* by which of file, evidence, and hash work was physically in flight. */
|
|
323
422
|
report() {
|
|
324
423
|
return {
|
|
424
|
+
stagedSkeletonMs: Math.round(this.metrics.skeletonMs),
|
|
425
|
+
stagedDirectories: this.metrics.directories,
|
|
426
|
+
stagedOpenMs: Math.round(this.metrics.openMs),
|
|
325
427
|
stagedWriteMs: Math.round(this.metrics.writeMs),
|
|
428
|
+
stagedEvidenceMs: Math.round(this.metrics.evidenceMs),
|
|
429
|
+
stagedHashTurnMs: Math.round(this.metrics.hashTurnMs),
|
|
326
430
|
stagedDrainMs: Math.round(this.metrics.drainMs),
|
|
327
431
|
stagedPreadBytes: this.metrics.preadBytes,
|
|
328
|
-
|
|
432
|
+
stagedFinishMs: Math.round(this.metrics.finishMs),
|
|
433
|
+
stagedCloseMs: Math.round(this.metrics.closeMs),
|
|
329
434
|
stagedCopyMs: Math.round(this.metrics.copyMs),
|
|
435
|
+
...this.storeActivity.report("stagedStore"),
|
|
330
436
|
};
|
|
331
437
|
}
|
|
332
438
|
close() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace-add-staging.js","sourceRoot":"","sources":["../src/workspace-add-staging.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workspace-add-staging.js","sourceRoot":"","sources":["../src/workspace-add-staging.ts"],"names":[],"mappings":"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"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amalgm/shell",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.135",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@amalgm/shell",
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.135",
|
|
10
10
|
"license": "UNLICENSED",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@amalgm/agents": "0.2.0",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"@amalgm/channels": "0.1.1",
|
|
17
17
|
"@amalgm/chat": "0.2.7",
|
|
18
18
|
"@amalgm/core": "0.4.5",
|
|
19
|
-
"@amalgm/live": "0.2.
|
|
19
|
+
"@amalgm/live": "0.2.61",
|
|
20
20
|
"@amalgm/tools": "0.1.4",
|
|
21
21
|
"@anthropic-ai/claude-agent-sdk": "^0.3.224",
|
|
22
22
|
"@homebridge/node-pty-prebuilt-multiarch": "0.13.1",
|
|
@@ -214,9 +214,9 @@
|
|
|
214
214
|
}
|
|
215
215
|
},
|
|
216
216
|
"node_modules/@amalgm/live": {
|
|
217
|
-
"version": "0.2.
|
|
218
|
-
"resolved": "https://registry.npmjs.org/@amalgm/live/-/live-0.2.
|
|
219
|
-
"integrity": "sha512-
|
|
217
|
+
"version": "0.2.61",
|
|
218
|
+
"resolved": "https://registry.npmjs.org/@amalgm/live/-/live-0.2.61.tgz",
|
|
219
|
+
"integrity": "sha512-HxKpwTDy8Y0Ib/gxFz/TXzpmpsrYg7rD1yptxs/d5SPPensLrRVdYWwRhBYc96mw1VsplfOLazyydqtpIptSAA==",
|
|
220
220
|
"engines": {
|
|
221
221
|
"node": ">=18"
|
|
222
222
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amalgm/shell",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.136",
|
|
4
4
|
"description": "The Amalgm runtime host assembled from the published @amalgm SDK capabilities.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@amalgm/channels": "0.1.1",
|
|
53
53
|
"@amalgm/chat": "0.2.7",
|
|
54
54
|
"@amalgm/core": "0.4.5",
|
|
55
|
-
"@amalgm/live": "0.2.
|
|
55
|
+
"@amalgm/live": "0.2.61",
|
|
56
56
|
"@amalgm/tools": "0.1.4",
|
|
57
57
|
"@anthropic-ai/claude-agent-sdk": "^0.3.224",
|
|
58
58
|
"@homebridge/node-pty-prebuilt-multiarch": "0.13.1",
|