taskflow-core 0.3.0-beta.1.1 → 1.0.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.
- package/README.md +34 -25
- package/dist/build-info.json +2 -2
- package/dist/control-execution.d.ts +6 -0
- package/dist/control-execution.d.ts.map +1 -0
- package/dist/control-execution.js +5 -0
- package/dist/control-execution.js.map +1 -0
- package/dist/exec/step-kinds.d.ts.map +1 -1
- package/dist/exec/step-kinds.js +1 -0
- package/dist/exec/step-kinds.js.map +1 -1
- package/dist/exec/step.d.ts.map +1 -1
- package/dist/exec/step.js +1 -0
- package/dist/exec/step.js.map +1 -1
- package/dist/host/runner-types.d.ts +3 -0
- package/dist/host/runner-types.d.ts.map +1 -1
- package/dist/legacy-writer-lifecycle.d.ts +22 -0
- package/dist/legacy-writer-lifecycle.d.ts.map +1 -0
- package/dist/legacy-writer-lifecycle.js +205 -0
- package/dist/legacy-writer-lifecycle.js.map +1 -0
- package/dist/persistent-mutex.d.ts +9 -0
- package/dist/persistent-mutex.d.ts.map +1 -0
- package/dist/persistent-mutex.js +27 -0
- package/dist/persistent-mutex.js.map +1 -0
- package/dist/resources/mutex-bootstrap.d.ts +12 -0
- package/dist/resources/mutex-bootstrap.d.ts.map +1 -0
- package/dist/resources/mutex-bootstrap.js +176 -0
- package/dist/resources/mutex-bootstrap.js.map +1 -0
- package/dist/resources/persistence.d.ts.map +1 -1
- package/dist/resources/persistence.js +145 -77
- package/dist/resources/persistence.js.map +1 -1
- package/dist/resume.d.ts +21 -1
- package/dist/resume.d.ts.map +1 -1
- package/dist/resume.js +75 -1
- package/dist/resume.js.map +1 -1
- package/dist/runner-core.d.ts +5 -0
- package/dist/runner-core.d.ts.map +1 -1
- package/dist/runner-core.js +40 -3
- package/dist/runner-core.js.map +1 -1
- package/dist/runtime.d.ts +6 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +28 -0
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts +14 -4
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +61 -13
- package/dist/schema.js.map +1 -1
- package/dist/store.d.ts +24 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +114 -6
- package/dist/store.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,6 +2,7 @@ import * as crypto from "node:crypto";
|
|
|
2
2
|
import * as fs from "node:fs";
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import { execFileSync } from "node:child_process";
|
|
5
|
+
import { bindMutexQueue } from "./mutex-bootstrap.js";
|
|
5
6
|
/** Exact, platform-native process-birth identity when the platform exposes one.
|
|
6
7
|
* Never return an uptime estimate or a lower-precision timestamp: incomparable
|
|
7
8
|
* identities could falsely reclaim a live owner's lock. */
|
|
@@ -76,7 +77,7 @@ export function defaultProcessInspector(pid) {
|
|
|
76
77
|
}
|
|
77
78
|
catch (error) {
|
|
78
79
|
const code = error.code;
|
|
79
|
-
if (code
|
|
80
|
+
if (code === "ESRCH")
|
|
80
81
|
return { alive: false };
|
|
81
82
|
const birthToken = readProcessBirthToken(pid);
|
|
82
83
|
return birthToken === undefined
|
|
@@ -219,12 +220,21 @@ function ownerIsStale(record, identity, inspect) {
|
|
|
219
220
|
return record.birthTokenKind === "native" && observed.birthTokenKind === "native" &&
|
|
220
221
|
observed.birthToken !== undefined && observed.birthToken !== record.birthToken;
|
|
221
222
|
}
|
|
223
|
+
function sameIdentity(a, b) {
|
|
224
|
+
return a.dev === b.dev && a.ino === b.ino;
|
|
225
|
+
}
|
|
226
|
+
function sameOwner(a, b) {
|
|
227
|
+
return a.kind === b.kind && a.token === b.token && a.pid === b.pid &&
|
|
228
|
+
a.birthToken === b.birthToken && a.birthTokenKind === b.birthTokenKind &&
|
|
229
|
+
a.createdAt === b.createdAt &&
|
|
230
|
+
(a.kind !== "ticket" || (b.kind === "ticket" && a.ticket === b.ticket));
|
|
231
|
+
}
|
|
222
232
|
// A mutex instance can disappear after returning a completed critical-section
|
|
223
233
|
// result. Keep deferred exact-ticket cleanup shared by duplicate module instances
|
|
224
234
|
// in this JS realm, keyed by the immutable ticket path. The fsynced `done` state
|
|
225
235
|
// on the ticket itself carries the same fact across worker isolates/processes.
|
|
226
236
|
const persistenceGlobal = globalThis;
|
|
227
|
-
const PROCESS_PENDING_TICKET_RELEASES = persistenceGlobal.
|
|
237
|
+
const PROCESS_PENDING_TICKET_RELEASES = persistenceGlobal.__taskflowPendingMutexTicketReleasesV2 ??= new Map();
|
|
228
238
|
function delay(ms, signal) {
|
|
229
239
|
if (signal?.aborted)
|
|
230
240
|
return Promise.reject(new CoordinatorAbortError());
|
|
@@ -260,34 +270,60 @@ export class PersistentFileMutex {
|
|
|
260
270
|
#queueDirectory() {
|
|
261
271
|
return `${this.lockPath}.queue`;
|
|
262
272
|
}
|
|
263
|
-
#
|
|
273
|
+
#assertQueue(queueDirectory, expected) {
|
|
274
|
+
const current = fs.lstatSync(queueDirectory);
|
|
275
|
+
if (!current.isDirectory() || !sameIdentity(current, expected)) {
|
|
276
|
+
throw new Error("TFWS_MUTEX_IDENTITY: mutex queue was replaced");
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
#bindQueue(queueDirectory) {
|
|
280
|
+
return bindMutexQueue(queueDirectory, this.identity, (owner) => ownerIsStale(owner, this.identity, this.inspectProcess), fsyncDirectory);
|
|
281
|
+
}
|
|
282
|
+
#removeTicketBestEffort(ticketPath, pending, terminalOnly = true) {
|
|
264
283
|
for (let attempt = 0; attempt < 3; attempt++) {
|
|
265
284
|
try {
|
|
285
|
+
this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
|
|
286
|
+
const stat = fs.lstatSync(ticketPath);
|
|
287
|
+
if (!stat.isFile() || !sameIdentity(stat, pending.fileIdentity))
|
|
288
|
+
return false;
|
|
289
|
+
const current = JSON.parse(fs.readFileSync(ticketPath, "utf8"));
|
|
290
|
+
if (!sameOwner(current, pending.record) || current.state !== (terminalOnly ? "done" : pending.record.state))
|
|
291
|
+
return false;
|
|
292
|
+
if (!sameIdentity(fs.lstatSync(ticketPath), stat))
|
|
293
|
+
return false;
|
|
266
294
|
fs.unlinkSync(ticketPath);
|
|
267
|
-
fsyncDirectory(queueDirectory);
|
|
295
|
+
fsyncDirectory(pending.queueDirectory);
|
|
268
296
|
return true;
|
|
269
297
|
}
|
|
270
298
|
catch (error) {
|
|
271
|
-
|
|
299
|
+
// A missing ticket is already released, but a missing queue is not.
|
|
300
|
+
if (error.code === "ENOENT") {
|
|
301
|
+
try {
|
|
302
|
+
this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
return false;
|
|
306
|
+
}
|
|
272
307
|
return true;
|
|
308
|
+
}
|
|
273
309
|
}
|
|
274
310
|
}
|
|
275
311
|
return false;
|
|
276
312
|
}
|
|
277
|
-
#markQueueRecordDone(recordPath,
|
|
278
|
-
const noFollow = typeof fs.constants.O_NOFOLLOW === "number" ? fs.constants.O_NOFOLLOW : 0;
|
|
313
|
+
#markQueueRecordDone(recordPath, pending) {
|
|
279
314
|
for (let attempt = 0; attempt < 3; attempt++) {
|
|
280
315
|
let fd;
|
|
281
316
|
try {
|
|
282
|
-
|
|
317
|
+
this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
|
|
318
|
+
fd = fs.openSync(recordPath, fs.constants.O_RDWR | fs.constants.O_NOFOLLOW);
|
|
319
|
+
const stat = fs.fstatSync(fd);
|
|
320
|
+
if (!stat.isFile() || !sameIdentity(stat, pending.fileIdentity) ||
|
|
321
|
+
!sameIdentity(stat, fs.lstatSync(recordPath)))
|
|
322
|
+
return false;
|
|
283
323
|
const raw = fs.readFileSync(fd, "utf8");
|
|
284
324
|
const current = JSON.parse(raw);
|
|
285
|
-
if (current
|
|
286
|
-
(current.kind === "ticket" && expected.kind === "ticket" && current.ticket !== expected.ticket) ||
|
|
287
|
-
current.pid !== expected.pid ||
|
|
288
|
-
current.birthToken !== expected.birthToken || current.birthTokenKind !== expected.birthTokenKind) {
|
|
325
|
+
if (!sameOwner(current, pending.record))
|
|
289
326
|
return false;
|
|
290
|
-
}
|
|
291
327
|
if (current.state === "done")
|
|
292
328
|
return true;
|
|
293
329
|
if (current.state !== "held")
|
|
@@ -296,15 +332,21 @@ export class PersistentFileMutex {
|
|
|
296
332
|
if (terminal.byteLength !== Buffer.byteLength(raw))
|
|
297
333
|
return false;
|
|
298
334
|
let offset = 0;
|
|
299
|
-
while (offset < terminal.byteLength)
|
|
335
|
+
while (offset < terminal.byteLength)
|
|
300
336
|
offset += fs.writeSync(fd, terminal, offset, terminal.byteLength - offset, offset);
|
|
301
|
-
}
|
|
302
337
|
fs.fsyncSync(fd);
|
|
303
338
|
return true;
|
|
304
339
|
}
|
|
305
340
|
catch (error) {
|
|
306
|
-
if (error.code === "ENOENT")
|
|
341
|
+
if (error.code === "ENOENT") {
|
|
342
|
+
try {
|
|
343
|
+
this.#assertQueue(pending.queueDirectory, pending.queueIdentity);
|
|
344
|
+
}
|
|
345
|
+
catch {
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
307
348
|
return true;
|
|
349
|
+
}
|
|
308
350
|
}
|
|
309
351
|
finally {
|
|
310
352
|
if (fd !== undefined)
|
|
@@ -315,20 +357,30 @@ export class PersistentFileMutex {
|
|
|
315
357
|
}
|
|
316
358
|
#drainPendingTicketReleases() {
|
|
317
359
|
const ownQueueDirectory = this.#queueDirectory();
|
|
318
|
-
for (const [ticketPath,
|
|
319
|
-
if (queueDirectory !== ownQueueDirectory)
|
|
360
|
+
for (const [ticketPath, pending] of PROCESS_PENDING_TICKET_RELEASES) {
|
|
361
|
+
if (pending.queueDirectory !== ownQueueDirectory)
|
|
320
362
|
continue;
|
|
321
|
-
if (this.#removeTicketBestEffort(ticketPath,
|
|
363
|
+
if (this.#markQueueRecordDone(ticketPath, pending) && this.#removeTicketBestEffort(ticketPath, pending)) {
|
|
322
364
|
PROCESS_PENDING_TICKET_RELEASES.delete(ticketPath);
|
|
323
365
|
}
|
|
324
366
|
}
|
|
325
|
-
if ([...PROCESS_PENDING_TICKET_RELEASES.values()].some((
|
|
367
|
+
if ([...PROCESS_PENDING_TICKET_RELEASES.values()].some((pending) => pending.queueDirectory === ownQueueDirectory)) {
|
|
326
368
|
throw new Error("TFWS_CONTROL_PLANE_CLEANUP: a prior mutex ticket could not be released");
|
|
327
369
|
}
|
|
328
370
|
}
|
|
329
|
-
#readQueueRecord(filePath) {
|
|
371
|
+
#readQueueRecord(filePath, queueIdentity, allowCorruptCleanup = true) {
|
|
372
|
+
let fd;
|
|
373
|
+
let stat;
|
|
374
|
+
let raw;
|
|
375
|
+
const queueDirectory = path.dirname(filePath);
|
|
330
376
|
try {
|
|
331
|
-
|
|
377
|
+
this.#assertQueue(queueDirectory, queueIdentity);
|
|
378
|
+
fd = fs.openSync(filePath, fs.constants.O_RDONLY | fs.constants.O_NOFOLLOW);
|
|
379
|
+
stat = fs.fstatSync(fd);
|
|
380
|
+
if (!stat.isFile())
|
|
381
|
+
throw new Error("invalid mutex queue file");
|
|
382
|
+
raw = fs.readFileSync(fd, "utf8");
|
|
383
|
+
const record = JSON.parse(raw);
|
|
332
384
|
if (!record || (record.kind !== "choosing" && record.kind !== "ticket") ||
|
|
333
385
|
typeof record.token !== "string" || !Number.isSafeInteger(record.pid) ||
|
|
334
386
|
typeof record.birthToken !== "string" || record.birthToken.length === 0 ||
|
|
@@ -336,33 +388,35 @@ export class PersistentFileMutex {
|
|
|
336
388
|
(record.state !== "held" && record.state !== "done")) {
|
|
337
389
|
throw new Error("invalid mutex queue record");
|
|
338
390
|
}
|
|
339
|
-
if (record.kind === "ticket" &&
|
|
340
|
-
(!Number.isSafeInteger(record.ticket) || record.ticket < 1)) {
|
|
391
|
+
if (record.kind === "ticket" && (!Number.isSafeInteger(record.ticket) || record.ticket < 1)) {
|
|
341
392
|
throw new Error("invalid mutex ticket");
|
|
342
393
|
}
|
|
343
|
-
|
|
394
|
+
if (!sameIdentity(stat, fs.lstatSync(filePath)))
|
|
395
|
+
throw new Error("mutex queue record was replaced");
|
|
396
|
+
return { record, fileIdentity: stat };
|
|
344
397
|
}
|
|
345
398
|
catch (error) {
|
|
346
399
|
if (error.code === "ENOENT")
|
|
347
400
|
return undefined;
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
401
|
+
// A corrupt record is reclaimable only if its exact inode and bytes
|
|
402
|
+
// still match our observation. Never follow or remove symlink records.
|
|
403
|
+
if (allowCorruptCleanup && stat?.isFile() && raw !== undefined && this.now() - stat.mtimeMs >= this.corruptLockStaleMs) {
|
|
404
|
+
this.#assertQueue(queueDirectory, queueIdentity);
|
|
405
|
+
const current = fs.lstatSync(filePath);
|
|
406
|
+
if (current.isFile() && sameIdentity(current, stat) && fs.readFileSync(filePath, "utf8") === raw &&
|
|
407
|
+
sameIdentity(fs.lstatSync(filePath), stat)) {
|
|
354
408
|
fs.unlinkSync(filePath);
|
|
355
409
|
return undefined;
|
|
356
410
|
}
|
|
357
411
|
}
|
|
358
|
-
catch (statError) {
|
|
359
|
-
if (statError.code === "ENOENT")
|
|
360
|
-
return undefined;
|
|
361
|
-
}
|
|
362
412
|
throw error;
|
|
363
413
|
}
|
|
414
|
+
finally {
|
|
415
|
+
if (fd !== undefined)
|
|
416
|
+
fs.closeSync(fd);
|
|
417
|
+
}
|
|
364
418
|
}
|
|
365
|
-
#queueSnapshot(queueDirectory) {
|
|
419
|
+
#queueSnapshot(queueDirectory, queueIdentity, own) {
|
|
366
420
|
const choosing = [];
|
|
367
421
|
const tickets = [];
|
|
368
422
|
let names;
|
|
@@ -370,8 +424,7 @@ export class PersistentFileMutex {
|
|
|
370
424
|
names = fs.readdirSync(queueDirectory);
|
|
371
425
|
}
|
|
372
426
|
catch (error) {
|
|
373
|
-
|
|
374
|
-
return { choosing, tickets };
|
|
427
|
+
// Missing queue evidence cannot be interpreted as an empty mutex.
|
|
375
428
|
throw error;
|
|
376
429
|
}
|
|
377
430
|
for (const name of names) {
|
|
@@ -380,34 +433,22 @@ export class PersistentFileMutex {
|
|
|
380
433
|
if (!choosingName && !ticketName)
|
|
381
434
|
continue;
|
|
382
435
|
const filePath = path.join(queueDirectory, name);
|
|
383
|
-
const
|
|
384
|
-
|
|
436
|
+
const isOwn = own !== undefined && (choosingName?.[1] ?? ticketName?.[1]) === own.record.token;
|
|
437
|
+
const observed = this.#readQueueRecord(filePath, queueIdentity, !isOwn);
|
|
438
|
+
if (!observed)
|
|
385
439
|
continue;
|
|
440
|
+
const { record, fileIdentity } = observed;
|
|
441
|
+
const pending = { queueDirectory, queueIdentity, record, fileIdentity };
|
|
442
|
+
if (isOwn && (!sameOwner(record, own.record) || record.state !== "held" ||
|
|
443
|
+
!sameIdentity(fileIdentity, own.fileIdentity))) {
|
|
444
|
+
throw new Error("TFWS_MUTEX_IDENTITY: own waiting record was replaced");
|
|
445
|
+
}
|
|
386
446
|
if (record.token !== (choosingName?.[1] ?? ticketName?.[1])) {
|
|
387
447
|
throw new Error("mutex queue token does not match its immutable filename");
|
|
388
448
|
}
|
|
389
|
-
if (record.state === "done") {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
// no birth-token inference is involved.
|
|
393
|
-
try {
|
|
394
|
-
fs.unlinkSync(filePath);
|
|
395
|
-
}
|
|
396
|
-
catch (error) {
|
|
397
|
-
if (error.code !== "ENOENT")
|
|
398
|
-
throw error;
|
|
399
|
-
}
|
|
400
|
-
continue;
|
|
401
|
-
}
|
|
402
|
-
if (ownerIsStale(record, this.identity, this.inspectProcess)) {
|
|
403
|
-
// Every contender owns a unique immutable file, so stale recovery is
|
|
404
|
-
// exact-path deletion with no shared-name ABA window.
|
|
405
|
-
try {
|
|
406
|
-
fs.unlinkSync(filePath);
|
|
407
|
-
}
|
|
408
|
-
catch (error) {
|
|
409
|
-
if (error.code !== "ENOENT")
|
|
410
|
-
throw error;
|
|
449
|
+
if (record.state === "done" || ownerIsStale(record, this.identity, this.inspectProcess)) {
|
|
450
|
+
if (!this.#removeTicketBestEffort(filePath, pending, false)) {
|
|
451
|
+
throw new Error("TFWS_MUTEX_IDENTITY: observed queue record changed during cleanup");
|
|
411
452
|
}
|
|
412
453
|
continue;
|
|
413
454
|
}
|
|
@@ -426,7 +467,21 @@ export class PersistentFileMutex {
|
|
|
426
467
|
const timeoutMs = options.timeoutMs ?? 10_000;
|
|
427
468
|
const deadline = this.now() + timeoutMs;
|
|
428
469
|
const queueDirectory = this.#queueDirectory();
|
|
429
|
-
|
|
470
|
+
let queueIdentity;
|
|
471
|
+
while (true) {
|
|
472
|
+
try {
|
|
473
|
+
queueIdentity = this.#bindQueue(queueDirectory);
|
|
474
|
+
break;
|
|
475
|
+
}
|
|
476
|
+
catch (error) {
|
|
477
|
+
// A concurrent first creator may still be publishing its anchor.
|
|
478
|
+
// Existing queues never authorize us to synthesize that anchor.
|
|
479
|
+
if (error.code !== "ENOENT" || this.now() >= deadline) {
|
|
480
|
+
throw new Error("TFWS_MUTEX_IDENTITY: queue anchor is missing or invalid", { cause: error });
|
|
481
|
+
}
|
|
482
|
+
await delay(Math.min(this.pollMs, Math.max(1, deadline - this.now())), options.signal);
|
|
483
|
+
}
|
|
484
|
+
}
|
|
430
485
|
const token = crypto.randomUUID();
|
|
431
486
|
const choosingPath = path.join(queueDirectory, `choosing-${token}.json`);
|
|
432
487
|
const ticketPath = path.join(queueDirectory, `ticket-${token}.json`);
|
|
@@ -437,13 +492,15 @@ export class PersistentFileMutex {
|
|
|
437
492
|
createdAt: this.now(),
|
|
438
493
|
state: "held",
|
|
439
494
|
};
|
|
440
|
-
let
|
|
441
|
-
let
|
|
495
|
+
let choosingPending;
|
|
496
|
+
let ticketPending;
|
|
442
497
|
try {
|
|
498
|
+
this.#assertQueue(queueDirectory, queueIdentity);
|
|
443
499
|
writeJsonAtomicDurable(choosingPath, choosing);
|
|
500
|
+
choosingPending = { queueDirectory, queueIdentity, record: choosing, fileIdentity: fs.lstatSync(choosingPath) };
|
|
444
501
|
if (options.signal?.aborted)
|
|
445
502
|
throw new CoordinatorAbortError();
|
|
446
|
-
const initial = this.#queueSnapshot(queueDirectory);
|
|
503
|
+
const initial = this.#queueSnapshot(queueDirectory, queueIdentity, choosingPending);
|
|
447
504
|
const maxTicket = initial.tickets.reduce((max, item) => Math.max(max, item.record.ticket), 0);
|
|
448
505
|
if (maxTicket >= Number.MAX_SAFE_INTEGER)
|
|
449
506
|
throw new Error("mutex ticket space exhausted");
|
|
@@ -455,31 +512,42 @@ export class PersistentFileMutex {
|
|
|
455
512
|
createdAt: this.now(),
|
|
456
513
|
state: "held",
|
|
457
514
|
};
|
|
458
|
-
|
|
515
|
+
this.#assertQueue(queueDirectory, queueIdentity);
|
|
459
516
|
writeJsonAtomicDurable(ticketPath, ticketRecord);
|
|
460
|
-
|
|
461
|
-
|
|
517
|
+
ticketPending = { queueDirectory, queueIdentity, record: ticketRecord, fileIdentity: fs.lstatSync(ticketPath) };
|
|
518
|
+
if (!this.#markQueueRecordDone(choosingPath, choosingPending) ||
|
|
519
|
+
!this.#removeTicketBestEffort(choosingPath, choosingPending)) {
|
|
520
|
+
throw new Error("TFWS_MUTEX_IDENTITY: choosing record could not be retired");
|
|
521
|
+
}
|
|
462
522
|
fsyncDirectory(queueDirectory);
|
|
463
523
|
while (true) {
|
|
464
524
|
if (options.signal?.aborted)
|
|
465
525
|
throw new CoordinatorAbortError();
|
|
466
|
-
|
|
526
|
+
this.#assertQueue(queueDirectory, queueIdentity);
|
|
527
|
+
const snapshot = this.#queueSnapshot(queueDirectory, queueIdentity, ticketPending);
|
|
528
|
+
const ownTicket = snapshot.tickets.find((item) => item.path === ticketPath)?.record;
|
|
529
|
+
if (!ownTicket || !sameOwner(ownTicket, ticketRecord) ||
|
|
530
|
+
!sameIdentity(fs.lstatSync(ticketPath), ticketPending.fileIdentity)) {
|
|
531
|
+
throw new Error("TFWS_MUTEX_IDENTITY: own waiting ticket was lost or replaced");
|
|
532
|
+
}
|
|
467
533
|
const otherChoosing = snapshot.choosing.some((item) => item.record.token !== token);
|
|
468
534
|
const earlier = snapshot.tickets.some((item) => item.record.token !== token &&
|
|
469
535
|
(item.record.ticket < ticketRecord.ticket ||
|
|
470
536
|
(item.record.ticket === ticketRecord.ticket && item.record.token < token)));
|
|
471
537
|
if (!otherChoosing && !earlier) {
|
|
538
|
+
this.#assertQueue(queueDirectory, queueIdentity);
|
|
539
|
+
const pending = ticketPending;
|
|
472
540
|
let released = false;
|
|
473
541
|
return () => {
|
|
474
542
|
if (released)
|
|
475
543
|
return;
|
|
476
|
-
const terminal = this.#markQueueRecordDone(ticketPath,
|
|
477
|
-
if (this.#removeTicketBestEffort(ticketPath,
|
|
544
|
+
const terminal = this.#markQueueRecordDone(ticketPath, pending);
|
|
545
|
+
if (terminal && this.#removeTicketBestEffort(ticketPath, pending)) {
|
|
478
546
|
released = true;
|
|
479
547
|
PROCESS_PENDING_TICKET_RELEASES.delete(ticketPath);
|
|
480
548
|
return;
|
|
481
549
|
}
|
|
482
|
-
PROCESS_PENDING_TICKET_RELEASES.set(ticketPath,
|
|
550
|
+
PROCESS_PENDING_TICKET_RELEASES.set(ticketPath, pending);
|
|
483
551
|
console.warn(`[taskflow] mutex ticket cleanup deferred for ${path.basename(ticketPath)}` +
|
|
484
552
|
(terminal ? " (critical section durably released)" : " (release marker unavailable; fail-closed)"));
|
|
485
553
|
};
|
|
@@ -492,15 +560,15 @@ export class PersistentFileMutex {
|
|
|
492
560
|
}
|
|
493
561
|
catch (error) {
|
|
494
562
|
const candidates = [
|
|
495
|
-
[choosingPath,
|
|
496
|
-
...(
|
|
563
|
+
...(choosingPending ? [[choosingPath, choosingPending]] : []),
|
|
564
|
+
...(ticketPending ? [[ticketPath, ticketPending]] : []),
|
|
497
565
|
];
|
|
498
566
|
for (const [candidate, record] of candidates) {
|
|
499
567
|
// A cancelled/timed-out contender is no longer live. Persist that fact in
|
|
500
568
|
// the immutable queue record before unlink so permission failures cannot
|
|
501
569
|
// leave a same-process ticket that blocks the queue forever.
|
|
502
|
-
this.#markQueueRecordDone(candidate, record)
|
|
503
|
-
|
|
570
|
+
if (this.#markQueueRecordDone(candidate, record))
|
|
571
|
+
this.#removeTicketBestEffort(candidate, record);
|
|
504
572
|
}
|
|
505
573
|
fsyncDirectory(queueDirectory);
|
|
506
574
|
throw error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/resources/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;2DAE2D;AAC3D,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5D,IAAI,CAAC;QACJ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACjF,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC;gBAAE,OAAO,SAAS,CAAC;YAChD,4EAA4E;YAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;YACtE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;gBAAE,OAAO,SAAS,CAAC;YACtD,OAAO,SAAS,MAAM,IAAI,UAAU,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,YAAY,CAAC,gBAAgB,EAAE;gBAC7C,SAAS;gBACT,YAAY;gBACZ,iBAAiB;gBACjB,UAAU;gBACV,oBAAoB,GAAG,iEAAiE;aACxF,EAAE;gBACF,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACnC,CAAC,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,CAAC;QACD,4EAA4E;QAC5E,wEAAwE;QACxE,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAID,MAAM,0BAA0B,GAAG,qBAAqB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACtE,MAAM,mBAAmB,GAAG,0BAA0B,IAAI,UAAU,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;AAC1F,MAAM,wBAAwB,GAA0B,0BAA0B,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AA8CvH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACxC,IAAI,GAAG,oBAAoB,CAAC;IACrC,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACvC,CAAC;CACD;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,IAAI,GAAG,WAAW,CAAC;IAC5B,YAAY,OAAO,GAAG,+BAA+B;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,CAAC;CACD;AAED,MAAM,UAAU,sBAAsB;IACrC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC;AACxG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IAClD,IAAI,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,wBAAwB,EAAE,CAAC;IACnG,CAAC;IACD,IAAI,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,UAAU,KAAK,SAAS;YAC9B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACjB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC9C,OAAO,UAAU,KAAK,SAAS;YAC9B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;YACjB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC;IAC1D,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB;IAChD,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC/C,IAAI,CAAC;QACJ,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACR,4EAA4E;QAC5E,yEAAyE;IAC1E,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,KAAc;IACtE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IACvF,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC;QACJ,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5C,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC;QACJ,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9B,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACxD,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,QAAgB,EAAE,QAAW;IAC5D,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAM,CAAC;IAC3D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACxE,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,OAA2B;IACnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxC,+EAA+E;IAC/E,iFAAiF;IACjF,gDAAgD;IAChD,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACpD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC;gBACJ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;gBAC5C,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;oBAAS,CAAC;gBACV,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;QACF,CAAC;IACF,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,IAAI,CAAC;QACJ,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,MAAM,GAAG,CAAC,CAAC;YACf,OAAO,MAAM,GAAG,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QAC7F,CAAC;QACD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;YAAS,CAAC;QACV,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,QAAgB;IAChD,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACJ,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAClE,MAAM,KAAK,CAAC;IACb,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,qBAAqB,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,qBAAqB,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM;YAChE,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,GAAG,CAAC,OAAO,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxI,CAAC;IACF,CAAC;IACD,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB,EAAE,QAAyB,EAAE,OAAyB;IAClG,IAAI,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;QACjC,0EAA0E;QAC1E,2EAA2E;QAC3E,+EAA+E;QAC/E,uEAAuE;QACvE,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ;YAChF,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,CAAC;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,QAAQ,CAAC,cAAc,KAAK,QAAQ;QAChF,QAAQ,CAAC,UAAU,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC;AACjF,CAAC;AAMD,8EAA8E;AAC9E,kFAAkF;AAClF,iFAAiF;AACjF,+EAA+E;AAC/E,MAAM,iBAAiB,GAAG,UAA2D,CAAC;AACtF,MAAM,+BAA+B,GACpC,iBAAiB,CAAC,sCAAsC,KAAK,IAAI,GAAG,EAAkB,CAAC;AAExF,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC9C,IAAI,MAAM,EAAE,OAAO;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;IACxE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,CAAC;QACX,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAG,EAAE;YACpB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,CAAC;YACT,MAAM,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC;QACrC,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACJ,CAAC;AAOD,MAAM,OAAO,mBAAmB;IACtB,QAAQ,CAAS;IACjB,QAAQ,CAAkB;IAC1B,cAAc,CAAmB;IACjC,MAAM,CAAS;IACf,kBAAkB,CAAS;IAC3B,GAAG,CAAe;IAE3B,YAAY,QAAgB,EAAE,OAAO,GAAoD,EAAE;QAC1F,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,eAAe,IAAI,sBAAsB,EAAE,CAAC;QACpE,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC;QACxE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,MAAM,CAAC;QAC/D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,CAAC;IAED,eAAe;QACd,OAAO,GAAG,IAAI,CAAC,QAAQ,QAAQ,CAAC;IACjC,CAAC;IAED,uBAAuB,CAAC,UAAkB,EAAE,cAAsB;QACjE,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACJ,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;gBAC1B,cAAc,CAAC,cAAc,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC;YACrE,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,oBAAoB,CACnB,UAAkB,EAClB,QAAiD;QAEjD,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,IAAI,EAAsB,CAAC;YAC3B,IAAI,CAAC;gBACJ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;gBAC7D,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4C,CAAC;gBAC3E,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK;oBACrE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;oBAC/F,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG;oBAC5B,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;oBACnG,OAAO,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;oBAAE,OAAO,IAAI,CAAC;gBAC1C,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM;oBAAE,OAAO,KAAK,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC5E,IAAI,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACjE,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO,MAAM,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;oBACrC,MAAM,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,UAAU,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpF,CAAC;gBACD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;YACb,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,IAAI,CAAC;YACrE,CAAC;oBAAS,CAAC;gBACV,IAAI,EAAE,KAAK,SAAS;oBAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,2BAA2B;QAC1B,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,UAAU,EAAE,cAAc,CAAC,IAAI,+BAA+B,EAAE,CAAC;YAC5E,IAAI,cAAc,KAAK,iBAAiB;gBAAE,SAAS;YACnD,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;gBAC9D,+BAA+B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpD,CAAC;QACF,CAAC;QACD,IAAI,CAAC,GAAG,+BAA+B,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,KAAK,iBAAiB,CAAC,EAAE,CAAC;YAClH,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC3F,CAAC;IACF,CAAC;IAED,gBAAgB,CAAC,QAAgB;QAChC,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,YAAY,CAAsD,QAAQ,EAAE,SAAS,CAAC,CAAC;YACtG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACtE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;gBACrE,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;gBACvE,CAAC,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,cAAc,KAAK,QAAQ,CAAC;gBAC1E,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;gBAC3B,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC9D,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACzE,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC1D,mEAAmE;oBACnE,qEAAqE;oBACrE,2CAA2C;oBAC3C,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACxB,OAAO,SAAS,CAAC;gBAClB,CAAC;YACF,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACpB,IAAK,SAAmC,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,SAAS,CAAC;YAC9E,CAAC;YACD,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED,cAAc,CAAC,cAAsB;QAIpC,MAAM,QAAQ,GAAyD,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAuD,EAAE,CAAC;QACvE,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACJ,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;YACrF,MAAM,KAAK,CAAC;QACb,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU;gBAAE,SAAS;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC7B,sEAAsE;gBACtE,sEAAsE;gBACtE,wCAAwC;gBACxC,IAAI,CAAC;oBAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAC/C,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,KAAK,CAAC;gBACrE,CAAC;gBACD,SAAS;YACV,CAAC;YACD,IAAI,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC9D,qEAAqE;gBACrE,sDAAsD;gBACtD,IAAI,CAAC;oBAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAAC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAC/C,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,KAAK,CAAC;gBACrE,CAAC;gBACD,SAAS;YACV,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,YAAY;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1F,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAO,GAAwB,EAAE;QAC9C,6EAA6E;QAC7E,4EAA4E;QAC5E,wDAAwD;QACxD,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9C,eAAe,CAAC,cAAc,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,KAAK,OAAO,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC;QACrE,MAAM,QAAQ,GAAwB;YACrC,IAAI,EAAE,UAAU;YAChB,GAAG,IAAI,CAAC,QAAQ;YAChB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,MAAM;SACb,CAAC;QACF,IAAI,eAAe,GAAG,KAAK,CAAC;QAC5B,IAAI,GAAkC,CAAC;QACvC,IAAI,CAAC;YACJ,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,IAAI,SAAS,IAAI,MAAM,CAAC,gBAAgB;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC1F,MAAM,YAAY,GAAsB;gBACvC,IAAI,EAAE,QAAQ;gBACd,GAAG,IAAI,CAAC,QAAQ;gBAChB,KAAK;gBACL,MAAM,EAAE,SAAS,GAAG,CAAC;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,KAAK,EAAE,MAAM;aACb,CAAC;YACF,GAAG,GAAG,YAAY,CAAC;YACnB,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YACjD,eAAe,GAAG,IAAI,CAAC;YACvB,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5B,cAAc,CAAC,cAAc,CAAC,CAAC;YAE/B,OAAO,IAAI,EAAE,CAAC;gBACb,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;oBAAE,MAAM,IAAI,qBAAqB,EAAE,CAAC;gBAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;gBACpF,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK;oBAC3B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM;wBACxC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9E,IAAI,CAAC,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC;oBAChC,IAAI,QAAQ,GAAG,KAAK,CAAC;oBACrB,OAAO,GAAG,EAAE;wBACX,IAAI,QAAQ;4BAAE,OAAO;wBACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;wBACrE,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;4BAC9D,QAAQ,GAAG,IAAI,CAAC;4BAChB,+BAA+B,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;4BACnD,OAAO;wBACR,CAAC;wBACD,+BAA+B,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;wBAChE,OAAO,CAAC,IAAI,CACX,gDAAgD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;4BAC3E,CAAC,QAAQ,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAClG,CAAC;oBACH,CAAC,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC5B,MAAM,IAAI,uBAAuB,CAAC,kCAAkC,SAAS,IAAI,CAAC,CAAC;gBACpF,CAAC;gBACD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACxF,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,UAAU,GAA6D;gBAC5E,CAAC,YAAY,EAAE,QAAQ,CAAC;gBACxB,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,CAAgC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACrF,CAAC;YACF,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC9C,0EAA0E;gBAC1E,yEAAyE;gBACzE,6DAA6D;gBAC7D,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAC7C,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;YACzD,CAAC;YACD,cAAc,CAAC,cAAc,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED,KAAK,CAAC,YAAY,CAAI,EAAwB,EAAE,OAAO,GAAwB,EAAE;QAChF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC;YACJ,OAAO,MAAM,EAAE,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACV,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;CACD;AAED,MAAM,UAAU,qBAAqB,CACpC,MAAuB,EACvB,QAAyB,EACzB,OAAyB;IAEzB,OAAO,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/resources/persistence.ts"],"names":[],"mappings":"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"}
|
package/dist/resume.d.ts
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* (pi / MCP) call it and hand the child RunState to `executeTaskflow`.
|
|
19
19
|
*/
|
|
20
20
|
import { type Phase, type Taskflow } from "./schema.ts";
|
|
21
|
-
import { type RunState } from "./store.ts";
|
|
21
|
+
import { type ProcessLiveness, type RunState } from "./store.ts";
|
|
22
22
|
/** Overrides for re-running exactly one phase on resume. `phaseId` is required;
|
|
23
23
|
* at least one of the other fields must be supplied. All values are applied to
|
|
24
24
|
* the CHILD's def only (the parent def + persisted file are never touched). */
|
|
@@ -29,6 +29,26 @@ export interface ResumeOverrides {
|
|
|
29
29
|
timeout?: number;
|
|
30
30
|
idleTimeout?: number;
|
|
31
31
|
}
|
|
32
|
+
/** A durable approval marker is safe only when the graph itself prevents all
|
|
33
|
+
* other unfinished phases from dispatching before one of these waits settles.
|
|
34
|
+
* Best-effort progress persistence cannot prove that a concurrent child stopped.
|
|
35
|
+
* Timed approvals may settle independently of the UI callback, so a stale marker
|
|
36
|
+
* cannot prove that their downstream children remain blocked. */
|
|
37
|
+
export declare function isQuiescentApprovalCheckpoint(prev: RunState, waitingIds: readonly string[]): boolean;
|
|
38
|
+
/** Prepare an orphaned foreground checkpoint for an immutable resume fork.
|
|
39
|
+
* Only a valid recorded PID whose OS probe proves ESRCH may be recovered.
|
|
40
|
+
* PID reuse, EPERM, unavailable birth tokens and missing metadata stay closed.
|
|
41
|
+
* The parent object/file is never changed and no signal other than 0 is sent. */
|
|
42
|
+
export declare function resumeSourceAfterOwnerExit(prev: RunState, options: {
|
|
43
|
+
cwd: string;
|
|
44
|
+
inspectProcess?: (pid: number) => ProcessLiveness;
|
|
45
|
+
}): {
|
|
46
|
+
ok: true;
|
|
47
|
+
value: RunState;
|
|
48
|
+
} | {
|
|
49
|
+
ok: false;
|
|
50
|
+
errors: string[];
|
|
51
|
+
};
|
|
32
52
|
/** Runs are resumable only when execution stopped non-terminally. Completed and
|
|
33
53
|
* blocked runs are immutable terminal history; use a fresh run or recompute. */
|
|
34
54
|
export declare function validateResumeRun(prev: RunState): {
|
package/dist/resume.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAoC,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,
|
|
1
|
+
{"version":3,"file":"resume.d.ts","sourceRoot":"","sources":["../src/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAoC,KAAK,KAAK,EAAE,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAA0B,KAAK,eAAe,EAAmB,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAI1G;;gFAEgF;AAChF,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;iEAIiE;AACjE,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAmBpG;AAED;;;iFAGiF;AACjF,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,eAAe,CAAA;CAAE,GACzE;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAgCjE;AAQD;gFACgF;AAChF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAOnF;AAED;;8EAE8E;AAC9E,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoC9G;AAED;;+CAE+C;AAC/C,wBAAgB,qBAAqB,CACpC,IAAI,EAAE,QAAQ,EACd,SAAS,CAAC,EAAE,eAAe,GACzB;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAEnC;AAED;6CAC6C;AAC7C,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CASjF;AAED;;sDAEsD;AACtD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAkB9E;AAED;;;;;;;;;;;0BAW0B;AAC1B,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,QAAQ,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,eAAe,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,QAAQ,CAiDV"}
|
package/dist/resume.js
CHANGED
|
@@ -18,8 +18,81 @@
|
|
|
18
18
|
* (pi / MCP) call it and hand the child RunState to `executeTaskflow`.
|
|
19
19
|
*/
|
|
20
20
|
import { validateTaskflow, dependenciesOf } from "./schema.js";
|
|
21
|
-
import { newRunId } from "./store.js";
|
|
21
|
+
import { newRunId, probeProcess } from "./store.js";
|
|
22
22
|
import { getBuildInfo } from "./build-info.js";
|
|
23
|
+
import { directoryIdentity } from "./cwd-bridge.js";
|
|
24
|
+
/** A durable approval marker is safe only when the graph itself prevents all
|
|
25
|
+
* other unfinished phases from dispatching before one of these waits settles.
|
|
26
|
+
* Best-effort progress persistence cannot prove that a concurrent child stopped.
|
|
27
|
+
* Timed approvals may settle independently of the UI callback, so a stale marker
|
|
28
|
+
* cannot prove that their downstream children remain blocked. */
|
|
29
|
+
export function isQuiescentApprovalCheckpoint(prev, waitingIds) {
|
|
30
|
+
if (!waitingIds.length || new Set(waitingIds).size !== waitingIds.length)
|
|
31
|
+
return false;
|
|
32
|
+
const waiting = new Set(waitingIds);
|
|
33
|
+
const phases = new Map(prev.def.phases.map((phase) => [phase.id, phase]));
|
|
34
|
+
const isStopped = (id) => ["done", "failed", "skipped"].includes(prev.phases[id]?.status ?? "");
|
|
35
|
+
for (const id of waiting) {
|
|
36
|
+
const phase = phases.get(id);
|
|
37
|
+
if (phase?.type !== "approval" || phase.timeoutMs !== undefined || prev.phases[id]?.status !== "running")
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (Object.values(prev.phases).some((phase) => phase.status === "running" && !waiting.has(phase.id)))
|
|
41
|
+
return false;
|
|
42
|
+
const blockedByApproval = (id, visiting = new Set()) => {
|
|
43
|
+
if (waiting.has(id))
|
|
44
|
+
return true;
|
|
45
|
+
if (isStopped(id) || visiting.has(id))
|
|
46
|
+
return false;
|
|
47
|
+
const phase = phases.get(id);
|
|
48
|
+
if (!phase || phase.join === "any")
|
|
49
|
+
return false;
|
|
50
|
+
const next = new Set(visiting).add(id);
|
|
51
|
+
return dependenciesOf(phase).some((dependency) => blockedByApproval(dependency, next));
|
|
52
|
+
};
|
|
53
|
+
return prev.def.phases.every((phase) => isStopped(phase.id) || blockedByApproval(phase.id));
|
|
54
|
+
}
|
|
55
|
+
/** Prepare an orphaned foreground checkpoint for an immutable resume fork.
|
|
56
|
+
* Only a valid recorded PID whose OS probe proves ESRCH may be recovered.
|
|
57
|
+
* PID reuse, EPERM, unavailable birth tokens and missing metadata stay closed.
|
|
58
|
+
* The parent object/file is never changed and no signal other than 0 is sent. */
|
|
59
|
+
export function resumeSourceAfterOwnerExit(prev, options) {
|
|
60
|
+
if (prev.status !== "running")
|
|
61
|
+
return { ok: true, value: prev };
|
|
62
|
+
const owner = prev.foregroundOwner;
|
|
63
|
+
if (!owner || owner.version !== 1 || !Number.isSafeInteger(owner.pid) || owner.pid <= 0 || owner.pid > 0x7fffffff
|
|
64
|
+
|| typeof owner.instanceId !== "string" || !owner.instanceId.trim()
|
|
65
|
+
|| !Number.isFinite(owner.startedAt) || owner.startedAt < 0) {
|
|
66
|
+
return { ok: false, errors: [`Run '${prev.runId}' is running without a verifiable foreground owner; refusing orphan recovery`] };
|
|
67
|
+
}
|
|
68
|
+
const savedRoot = prev.invocationRootSnapshot;
|
|
69
|
+
const currentRoot = directoryIdentity(options.cwd);
|
|
70
|
+
if (!savedRoot || !currentRoot || savedRoot.canonicalPath !== currentRoot.canonicalPath
|
|
71
|
+
|| savedRoot.device !== currentRoot.device || savedRoot.inode !== currentRoot.inode) {
|
|
72
|
+
return { ok: false, errors: [`Run '${prev.runId}' interrupted checkpoint belongs to a missing, replaced or different invocation root`] };
|
|
73
|
+
}
|
|
74
|
+
const running = Object.values(prev.phases).filter((phase) => phase.status === "running").map((phase) => phase.id).sort();
|
|
75
|
+
const waiting = owner.approvalWait;
|
|
76
|
+
if (!Array.isArray(waiting) || !waiting.every((id) => typeof id === "string") || !running.length || waiting.length !== running.length
|
|
77
|
+
|| running.some((id, index) => [...waiting].sort()[index] !== id) || !isQuiescentApprovalCheckpoint(prev, waiting)) {
|
|
78
|
+
return { ok: false, errors: [`Run '${prev.runId}' has no proven quiescent approval checkpoint; in-flight children may still be executing`] };
|
|
79
|
+
}
|
|
80
|
+
let liveness = "unknown";
|
|
81
|
+
if (owner.pid !== process.pid) {
|
|
82
|
+
try {
|
|
83
|
+
liveness = (options.inspectProcess ?? probeProcess)(owner.pid);
|
|
84
|
+
}
|
|
85
|
+
catch { /* unknown is not dead */ }
|
|
86
|
+
}
|
|
87
|
+
if (liveness !== "dead") {
|
|
88
|
+
return { ok: false, errors: [`Run '${prev.runId}' foreground owner ${owner.pid} is alive or unobservable; refusing concurrent resume`] };
|
|
89
|
+
}
|
|
90
|
+
// This stopped-state view exists only in memory for the existing validation
|
|
91
|
+
// and fork helpers. Historical 'running' and its owner remain on disk.
|
|
92
|
+
return { ok: true, value: { ...prev, status: "failed", foregroundInterruption: {
|
|
93
|
+
kind: "approval-owner-exit", ownerPid: owner.pid, ownerInstanceId: owner.instanceId, detectedAt: Date.now(),
|
|
94
|
+
} } };
|
|
95
|
+
}
|
|
23
96
|
function resumeStatusErrors(prev) {
|
|
24
97
|
return prev.status === "failed" || prev.status === "paused"
|
|
25
98
|
? []
|
|
@@ -177,6 +250,7 @@ export function forkRunForResume(prev, opts = {}) {
|
|
|
177
250
|
...(prev.flowSourceFile !== undefined ? { flowSourceFile: prev.flowSourceFile } : {}),
|
|
178
251
|
...(prev.flowSourceDirIdentity !== undefined ? { flowSourceDirIdentity: structuredClone(prev.flowSourceDirIdentity) } : {}),
|
|
179
252
|
parentRunId: prev.runId,
|
|
253
|
+
...(prev.foregroundInterruption ? { foregroundInterruption: structuredClone(prev.foregroundInterruption) } : {}),
|
|
180
254
|
// Preserve workspace provenance/authority so a resume cannot silently
|
|
181
255
|
// escape or downgrade the parent's cwd boundary.
|
|
182
256
|
...(prev.invocationRootSnapshot !== undefined ? { invocationRootSnapshot: structuredClone(prev.invocationRootSnapshot) } : {}),
|