@amalgm/shell 0.1.135 → 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.
@@ -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: every chunk is verified before its
6
- * positioned write, the whole-file hash is proven from that same stream, the
7
- * complete file is fsynced, and the workspace is revealed later by one atomic
8
- * rename. A second cache copy is not part of the critical path.
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, and the
13
- * whole-file digest is proven again from that same stream.
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 { chmodSync, constants, rmSync } from "node:fs";
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, ensureUserDir } from "./filesystem.js";
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 readFileRange(file, offset, bytes) {
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
- try {
79
- let cursor = 0;
80
- while (cursor < bytes) {
81
- const result = await handle.read(output, cursor, bytes - cursor, offset + cursor);
82
- if (result.bytesRead === 0)
83
- throw new Error("staged content range is truncated");
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 writeFileRange(file, offset, bytes) {
93
- const handle = await openRegularFile(file, constants.O_RDWR | constants.O_NOFOLLOW);
94
- try {
95
- let cursor = 0;
96
- while (cursor < bytes.byteLength) {
97
- const result = await handle.write(bytes, cursor, bytes.byteLength - cursor, offset + cursor);
98
- if (result.bytesWritten === 0)
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
- async function fsyncFile(file) {
108
- const handle = await openRegularFile(file, constants.O_RDWR | constants.O_NOFOLLOW);
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, and a
135
- * serialized drain feeds the whole-file hasher strictly in chunk order — from
136
- * the arriving bytes when the next expected chunk is at hand, otherwise by
137
- * reading an already-written later chunk when its turn arrives. This keeps no
138
- * unaccounted buffers and cannot deadlock failure settlement. Resume rereads
139
- * every retained chunk by necessity so local staging can never stand in for
140
- * content proof. */
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
- prepared = null;
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
- prepare() {
172
- if (!this.prepared) {
173
- this.prepared = (async () => {
174
- ensureUserDir(dirname(this.primary));
175
- let handle;
176
- try {
177
- handle = await openRegularFile(this.primary, constants.O_RDWR | constants.O_NOFOLLOW);
178
- }
179
- catch (error) {
180
- if (error.code !== "ENOENT")
181
- throw error;
182
- handle = await openRegularFile(this.primary, constants.O_RDWR | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o644);
183
- }
184
- try {
185
- await handle.truncate(this.manifest.bytes);
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
- finally {
188
- await handle.close();
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
- return this.prepared;
222
+ this.placed = true;
223
+ return handle;
193
224
  }
194
- /** Feed the whole-file hasher every chunk that is now in order. Turns are
195
- * serialized: parallel chunk arrivals only mark readiness. */
196
- queueHash(arrived, arrivedBytes) {
197
- const turn = this.hashTurn.then(async () => {
198
- const startedAt = performance.now();
199
- this.ready.add(arrived);
200
- while (this.ready.has(this.nextChunk)) {
201
- const index = this.nextChunk;
202
- const chunk = this.manifest.chunks[index];
203
- const offset = this.offsets[index];
204
- if (!chunk || offset === undefined)
205
- throw new Error(`content manifest has no chunk ${index}`);
206
- const bytes = index === arrived
207
- ? arrivedBytes
208
- : await readFileRange(this.primary, offset, chunk.bytes);
209
- if (index !== arrived)
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.metrics.drainMs += performance.now() - startedAt;
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 === expected.sha256 && retained.bytes === expected.bytes) {
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
- const bytes = await readFileRange(this.primary, offset, expected.bytes);
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 streaming whole-file proof. */
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
- await this.prepare();
255
- const writeStarted = performance.now();
256
- await writeFileRange(this.primary, offset, bytes);
257
- this.metrics.writeMs += performance.now() - writeStarted;
258
- this.evidence.record(this.artifact.contentHash, index, expected.sha256, expected.bytes);
259
- await this.queueHash(index, bytes);
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
- /** Prove the streamed whole-file digest, fsync, and place every duplicate
262
- * destination. The staged file needs no rename of its own: the whole
263
- * staging root is revealed by one atomic rename after rows commit. */
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
- await this.prepare();
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.nextChunk !== this.manifest.chunks.length) {
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
- const copyStarted = performance.now();
282
- ensureUserDir(dirname(duplicate));
283
- atomicCopy(this.primary, duplicate, 0o644);
284
- this.metrics.copyMs += performance.now() - copyStarted;
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
- if (this.prepared)
298
- await this.prepared.catch(() => { });
369
+ await this.hashTurn;
299
370
  }
300
371
  }
301
- /** One evidence database shared by every staged file in a download set. */
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
- fsyncMs: 0,
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 internal placement split, keyed for the download
321
- * stage ledger. `stagedWriteMs` and `stagedDrainMs` decompose the outer
322
- * write leg; `stagedFsyncMs` and `stagedCopyMs` decompose the seal leg. */
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
- stagedFsyncMs: Math.round(this.metrics.fsyncMs),
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":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,IAAI,EAAmB,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAoB9E,MAAM,SAAS,GAAG,CAAC,KAAiB,EAAU,EAAE,CAC9C,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAcnD;;kDAEkD;AAClD,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,WAAmB;IAC7E,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,YAAoB,EAAE,WAAmB;IAC/E,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7F,CAAC;AAED;6EAC6E;AAC7E,MAAM,kBAAkB;IACL,QAAQ,CAAoB;IAE7C,YAAY,WAAmB;QAC7B,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;;;;;;KAQlB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAmB,EAAE,KAAa;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;;KAEjC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAkD,CAAC;QAC5E,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,WAAmB,EAAE,KAAa,EAAE,MAAc,EAAE,KAAa;QACtE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;;;;;;KAMrB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,WAAmB,EAAE,KAAa;QACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;;KAErB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF;AAED,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,MAAc,EAAE,KAAa;IACtE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,KAAK,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;YAClF,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACjF,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,MAAc,EAAE,KAAiB;IAC3E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACpF,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,OAAO,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;YAC7F,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACxF,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC;QAChC,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACpF,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;uEAEuE;AACvE,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa,EAAE,IAAa;IACvE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;oBAQoB;AACpB,MAAM,OAAO,iBAAiB;IAWT;IACA;IACR;IACA;IACQ;IAdF,OAAO,CAAS;IAChB,OAAO,CAAoB;IAC3B,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,QAAQ,GAAyB,IAAI,CAAC;IACtC,MAAM,GAAG,KAAK,CAAC;IAEvB,YACmB,QAA4B,EAC5B,OAA+B,EACvC,QAA0B,EAC1B,QAAyB,EACjB,YAA+B;QAJ/B,aAAQ,GAAR,QAAQ,CAAoB;QAC5B,YAAO,GAAP,OAAO,CAAwB;QACvC,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,aAAQ,GAAR,QAAQ,CAAiB;QACjB,iBAAY,GAAZ,YAAY,CAAmB;QAEhD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACpF,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,CAAW,CAAC;QACzC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,OAAO;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC1B,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrC,IAAI,MAAkB,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,eAAe,CAC5B,IAAI,CAAC,OAAO,EACZ,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CACxC,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,KAAK,CAAC;oBACpE,MAAM,GAAG,MAAM,eAAe,CAC5B,IAAI,CAAC,OAAO,EACZ,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,EAC9E,KAAK,CACN,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7C,CAAC;wBAAS,CAAC;oBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;kEAC8D;IACtD,SAAS,CAAC,OAAe,EAAE,YAAwB;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;gBAC9F,MAAM,KAAK,GAAG,KAAK,KAAK,OAAO;oBAC7B,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,KAAK,KAAK,OAAO;oBAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACzB,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxD,CAAC,CAAC,CAAC;QACH,0EAA0E;QAC1E,oEAAoE;QACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;wEACoE;IACpE,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QACjG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,QAAQ,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC9E,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACxE,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACzC,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACnC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;YACrE,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;6DACyD;IACzD,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,KAAiB;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QACjG,IAAI,KAAK,CAAC,UAAU,KAAK,QAAQ,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAChG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxF,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,CAAC;IAED;;0EAEsE;IACtE,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACtE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,QAAQ,CAAC;QACpB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,WAAW,6BAA6B,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,WAAW,aAAa,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACvC,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC;QACzD,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YACtC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;YACvD,MAAM,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChD,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,qBAAqB,CAAC;QACpE,CAAC;QACD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,OAAO;YAClB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;YAC1B,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW;SACvC,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AAED,2EAA2E;AAC3E,MAAM,OAAO,gBAAgB;IACV,QAAQ,CAAqB;IAC7B,OAAO,GAA2B;QACjD,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;KACV,CAAC;IACM,MAAM,GAAG,KAAK,CAAC;IAEvB,YAAY,WAAmB;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CACJ,QAA0B,EAC1B,QAAyB,EACzB,YAA+B;QAE/B,IAAI,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACjE,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9F,CAAC;IAED;;+EAE2E;IAC3E,MAAM;QACJ,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/C,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/C,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;YACzC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/C,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;SAC9C,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
1
+ {"version":3,"file":"workspace-add-staging.js","sourceRoot":"","sources":["../src/workspace-add-staging.ts"],"names":[],"mappings":"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"}
@@ -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.60",
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.60",
218
- "resolved": "https://registry.npmjs.org/@amalgm/live/-/live-0.2.60.tgz",
219
- "integrity": "sha512-V3EqFo/UWteeqr1h0c0IQkhIWtIq+2U3bJLd9T8K5yoDdpogoXUHtolbdzDbBZFxqPBrhQ22RsULgUcD8aqCfw==",
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.135",
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.60",
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",