@tiangong-ai/cli 0.0.46 → 0.0.47

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.
@@ -1,5 +1,28 @@
1
1
  import type { WorkspacePaths } from "./types.js";
2
2
  export declare const REGULAR_TREE_HASH_ALGORITHM = "sha256-nfc-path-size-content-v2";
3
+ export interface FileLockRecovery {
4
+ reason: "dead-owner" | "expired-lease" | "legacy-dead-owner";
5
+ previousOperation: string;
6
+ previousAcquiredAt: string | null;
7
+ previousLockIdSha256: string;
8
+ previousOwnerState: "dead" | "expired";
9
+ }
10
+ export interface FileLockOwnerRecord {
11
+ schemaVersion: 2;
12
+ kind: "tiangong-file-lock-owner";
13
+ lockId: string;
14
+ pid: number;
15
+ hostname: string;
16
+ operation: string;
17
+ acquiredAt: string;
18
+ staleAfterMs: number;
19
+ planSha256: string | null;
20
+ recordSha256: string;
21
+ }
22
+ export type FileLockRelease = (() => Promise<void>) & {
23
+ owner: FileLockOwnerRecord;
24
+ recovery: FileLockRecovery | null;
25
+ };
3
26
  export declare function workspacePaths(root: string): WorkspacePaths;
4
27
  export declare function ensureDirectory(path: string, mode?: number): Promise<void>;
5
28
  export declare function readJsonFile<T>(path: string, label: string): Promise<T>;
@@ -19,7 +42,7 @@ export declare function fileRecord(path: string, logicalPath: string): Promise<{
19
42
  }>;
20
43
  export declare function safeRelativePath(value: string, label: string): string;
21
44
  export declare function resolveContained(root: string, logicalPath: string): string;
22
- export declare function acquireFileLock(path: string, payload: unknown): Promise<() => Promise<void>>;
45
+ export declare function acquireFileLock(path: string, payload: unknown): Promise<FileLockRelease>;
23
46
  export declare function pathExists(path: string): Promise<boolean>;
24
47
  export declare function fileSize(path: string): Promise<number>;
25
48
  export declare function isObject(value: unknown): value is Record<string, unknown>;
@@ -1,7 +1,9 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
2
  import { createReadStream, existsSync } from "node:fs";
3
- import { chmod, lstat, mkdir, open, readFile, readdir, rename, rm, stat, writeFile, } from "node:fs/promises";
3
+ import { chmod, lstat, mkdir, readFile, readdir, rename, rm, rmdir, stat, writeFile, } from "node:fs/promises";
4
+ import { hostname } from "node:os";
4
5
  import { basename, dirname, join, relative, resolve, sep } from "node:path";
6
+ import lockfile from "proper-lockfile";
5
7
  import { CliError } from "../../errors.js";
6
8
  import { RESEARCH_CONTROL_DIRECTORY } from "./constants.js";
7
9
  const IGNORED_TREE_NAMES = new Set([
@@ -13,6 +15,11 @@ const IGNORED_TREE_NAMES = new Set([
13
15
  "node_modules",
14
16
  ]);
15
17
  export const REGULAR_TREE_HASH_ALGORITHM = "sha256-nfc-path-size-content-v2";
18
+ const FILE_LOCK_STALE_MS = 120_000;
19
+ const FILE_LOCK_UPDATE_MS = 10_000;
20
+ const FILE_LOCK_TRANSITION_STALE_MS = 10_000;
21
+ const FILE_LOCK_OWNER_MAX_BYTES = 16 * 1024;
22
+ const LOCK_OPERATION = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
16
23
  export function workspacePaths(root) {
17
24
  const canonicalRoot = resolve(root);
18
25
  const control = join(canonicalRoot, RESEARCH_CONTROL_DIRECTORY);
@@ -253,19 +260,405 @@ export function resolveContained(root, logicalPath) {
253
260
  }
254
261
  export async function acquireFileLock(path, payload) {
255
262
  await ensureDirectory(dirname(path));
263
+ const releaseTransition = await acquireLockTransition(path);
264
+ let releaseLease = null;
256
265
  try {
257
- const handle = await open(path, "wx", 0o600);
258
- await handle.writeFile(`${JSON.stringify(payload)}\n`, "utf8");
259
- await handle.close();
266
+ const recovery = await recoverExistingLock(path);
267
+ try {
268
+ releaseLease = await lockfile.lock(path, {
269
+ realpath: false,
270
+ lockfilePath: path,
271
+ stale: FILE_LOCK_STALE_MS,
272
+ update: FILE_LOCK_UPDATE_MS,
273
+ retries: 0,
274
+ onCompromised: () => {
275
+ throw lockCompromisedError();
276
+ },
277
+ });
278
+ }
279
+ catch (error) {
280
+ throw await classifyLockAcquireError(path, error);
281
+ }
282
+ const owner = createFileLockOwner(payload);
283
+ try {
284
+ await writeJsonAtomic(fileLockOwnerPath(path), owner, 0o600);
285
+ }
286
+ catch {
287
+ await releaseLease().catch(() => undefined);
288
+ releaseLease = null;
289
+ throw new CliError("Research operation lock metadata could not be persisted.", {
290
+ code: "RESEARCH_WORKSPACE_LOCK_INVALID",
291
+ exitCode: 3,
292
+ details: {
293
+ ownerState: "unknown",
294
+ operation: owner.operation,
295
+ minimumAction: "Inspect workspace filesystem health and retry; do not delete lock state manually.",
296
+ },
297
+ });
298
+ }
299
+ let released = false;
300
+ const release = async () => {
301
+ if (released)
302
+ return;
303
+ const releaseTransitionLease = await acquireLockTransition(path);
304
+ try {
305
+ const current = await readFileLockOwner(path);
306
+ if (!current || current.lockId !== owner.lockId) {
307
+ throw lockCompromisedError();
308
+ }
309
+ await releaseLease();
310
+ released = true;
311
+ await rm(fileLockOwnerPath(path), { force: true });
312
+ }
313
+ catch (error) {
314
+ if (error instanceof CliError)
315
+ throw error;
316
+ throw lockCompromisedError();
317
+ }
318
+ finally {
319
+ await releaseTransitionLease();
320
+ }
321
+ };
322
+ return Object.assign(release, { owner, recovery });
260
323
  }
261
324
  catch (error) {
262
- throw new CliError(`Research workspace is locked: ${path}`, {
325
+ if (releaseLease)
326
+ await releaseLease().catch(() => undefined);
327
+ throw error;
328
+ }
329
+ finally {
330
+ await releaseTransition();
331
+ }
332
+ }
333
+ async function acquireLockTransition(path) {
334
+ try {
335
+ const release = await lockfile.lock(`${path}.transition-target`, {
336
+ realpath: false,
337
+ lockfilePath: `${path}.transition`,
338
+ stale: FILE_LOCK_TRANSITION_STALE_MS,
339
+ update: 2_000,
340
+ retries: {
341
+ retries: 50,
342
+ factor: 1,
343
+ minTimeout: 100,
344
+ maxTimeout: 100,
345
+ randomize: false,
346
+ },
347
+ onCompromised: () => {
348
+ throw lockCompromisedError();
349
+ },
350
+ });
351
+ return async () => {
352
+ try {
353
+ await release();
354
+ }
355
+ catch {
356
+ throw lockCompromisedError();
357
+ }
358
+ };
359
+ }
360
+ catch (error) {
361
+ if (!isLockContentionError(error))
362
+ throw lockStateInvalidError();
363
+ throw new CliError("Research lock transition is busy or unavailable.", {
263
364
  code: "RESEARCH_WORKSPACE_LOCKED",
264
365
  exitCode: 3,
265
- details: { error: String(error) },
366
+ details: {
367
+ ownerState: "unknown",
368
+ operation: null,
369
+ acquiredAt: null,
370
+ ageSeconds: null,
371
+ retryAfterSeconds: 1,
372
+ minimumAction: "Retry once after the current lock transition completes; do not delete lock state manually.",
373
+ },
374
+ });
375
+ }
376
+ }
377
+ async function recoverExistingLock(path) {
378
+ const info = await lstat(path).catch(() => undefined);
379
+ if (!info) {
380
+ try {
381
+ await rm(fileLockOwnerPath(path), { force: true });
382
+ }
383
+ catch {
384
+ throw lockStateInvalidError();
385
+ }
386
+ return null;
387
+ }
388
+ if (info.isSymbolicLink() || (!info.isFile() && !info.isDirectory())) {
389
+ throw lockUnknownError(null, null, null);
390
+ }
391
+ if (info.isFile()) {
392
+ const legacy = await readLegacyLock(path);
393
+ if (!legacy)
394
+ throw lockUnknownError(null, null, ageSeconds(info.mtimeMs));
395
+ const ownerState = probeProcess(legacy.pid, legacy.hostname);
396
+ if (ownerState !== "dead") {
397
+ throw lockBusyObservationError({
398
+ ownerState,
399
+ operation: legacy.operation,
400
+ acquiredAt: legacy.acquiredAt,
401
+ ageSeconds: ageSeconds(Date.parse(legacy.acquiredAt)),
402
+ });
403
+ }
404
+ const quarantine = `${path}.stale-${randomUUID()}`;
405
+ try {
406
+ await rename(path, quarantine);
407
+ await rm(quarantine, { force: true });
408
+ }
409
+ catch {
410
+ throw lockStateInvalidError();
411
+ }
412
+ return {
413
+ reason: "legacy-dead-owner",
414
+ previousOperation: legacy.operation,
415
+ previousAcquiredAt: legacy.acquiredAt,
416
+ previousLockIdSha256: sha256Text(canonicalJson(legacy)),
417
+ previousOwnerState: "dead",
418
+ };
419
+ }
420
+ const owner = await readFileLockOwner(path);
421
+ const ownerState = owner ? probeProcess(owner.pid, owner.hostname) : "unknown";
422
+ const leaseAgeSeconds = ageSeconds(info.mtimeMs);
423
+ if (ownerState === "alive") {
424
+ throw lockBusyObservationError({
425
+ ownerState,
426
+ operation: owner?.operation ?? null,
427
+ acquiredAt: owner?.acquiredAt ?? null,
428
+ ageSeconds: owner ? ageSeconds(Date.parse(owner.acquiredAt)) : leaseAgeSeconds,
429
+ });
430
+ }
431
+ if (ownerState !== "dead" && leaseAgeSeconds < Math.ceil(FILE_LOCK_STALE_MS / 1_000)) {
432
+ throw lockBusyObservationError({
433
+ ownerState,
434
+ operation: owner?.operation ?? null,
435
+ acquiredAt: owner?.acquiredAt ?? null,
436
+ ageSeconds: leaseAgeSeconds,
437
+ });
438
+ }
439
+ try {
440
+ await rmdir(path);
441
+ await rm(fileLockOwnerPath(path), { force: true });
442
+ }
443
+ catch {
444
+ throw lockStateInvalidError();
445
+ }
446
+ return {
447
+ reason: ownerState === "dead" ? "dead-owner" : "expired-lease",
448
+ previousOperation: owner?.operation ?? "unknown",
449
+ previousAcquiredAt: owner?.acquiredAt ?? null,
450
+ previousLockIdSha256: owner ? sha256Text(owner.lockId) : sha256Text("unknown-lock-owner"),
451
+ previousOwnerState: ownerState === "dead" ? "dead" : "expired",
452
+ };
453
+ }
454
+ async function classifyLockAcquireError(path, error) {
455
+ if (!isLockContentionError(error))
456
+ return lockStateInvalidError();
457
+ const info = await lstat(path).catch(() => undefined);
458
+ if (!info)
459
+ return lockUnknownError(null, null, null);
460
+ if (info.isFile()) {
461
+ const legacy = await readLegacyLock(path);
462
+ if (!legacy)
463
+ return lockUnknownError(null, null, ageSeconds(info.mtimeMs));
464
+ return lockBusyObservationError({
465
+ ownerState: probeProcess(legacy.pid, legacy.hostname),
466
+ operation: legacy.operation,
467
+ acquiredAt: legacy.acquiredAt,
468
+ ageSeconds: ageSeconds(Date.parse(legacy.acquiredAt)),
266
469
  });
267
470
  }
268
- return async () => rm(path, { force: true });
471
+ const owner = await readFileLockOwner(path);
472
+ const ownerState = owner ? probeProcess(owner.pid, owner.hostname) : "unknown";
473
+ return lockBusyObservationError({
474
+ ownerState,
475
+ operation: owner?.operation ?? null,
476
+ acquiredAt: owner?.acquiredAt ?? null,
477
+ ageSeconds: owner ? ageSeconds(Date.parse(owner.acquiredAt)) : ageSeconds(info.mtimeMs),
478
+ });
479
+ }
480
+ function isLockContentionError(error) {
481
+ const code = error?.code;
482
+ return code === "ELOCKED" || code === "EEXIST";
483
+ }
484
+ function createFileLockOwner(payload) {
485
+ const source = isObject(payload) ? payload : {};
486
+ const operation = safeLockOperation(source.operation);
487
+ const planSha256 = typeof source.planSha256 === "string" && /^[a-f0-9]{64}$/u.test(source.planSha256)
488
+ ? source.planSha256
489
+ : null;
490
+ const core = {
491
+ schemaVersion: 2,
492
+ kind: "tiangong-file-lock-owner",
493
+ lockId: randomUUID(),
494
+ pid: process.pid,
495
+ hostname: hostname(),
496
+ operation,
497
+ acquiredAt: new Date().toISOString(),
498
+ staleAfterMs: FILE_LOCK_STALE_MS,
499
+ planSha256,
500
+ };
501
+ return { ...core, recordSha256: sha256Text(canonicalJson(core)) };
502
+ }
503
+ async function readFileLockOwner(path) {
504
+ const ownerPath = fileLockOwnerPath(path);
505
+ const info = await lstat(ownerPath).catch(() => undefined);
506
+ if (!info?.isFile() ||
507
+ info.isSymbolicLink() ||
508
+ info.size < 2 ||
509
+ info.size > FILE_LOCK_OWNER_MAX_BYTES) {
510
+ return null;
511
+ }
512
+ let value;
513
+ try {
514
+ value = JSON.parse(await readFile(ownerPath, "utf8"));
515
+ }
516
+ catch {
517
+ return null;
518
+ }
519
+ if (!isFileLockOwnerRecord(value))
520
+ return null;
521
+ const { recordSha256, ...core } = value;
522
+ return recordSha256 === sha256Text(canonicalJson(core)) ? value : null;
523
+ }
524
+ function isFileLockOwnerRecord(value) {
525
+ if (!isObject(value))
526
+ return false;
527
+ const allowed = new Set([
528
+ "schemaVersion",
529
+ "kind",
530
+ "lockId",
531
+ "pid",
532
+ "hostname",
533
+ "operation",
534
+ "acquiredAt",
535
+ "staleAfterMs",
536
+ "planSha256",
537
+ "recordSha256",
538
+ ]);
539
+ return (Object.keys(value).every((key) => allowed.has(key)) &&
540
+ value.schemaVersion === 2 &&
541
+ value.kind === "tiangong-file-lock-owner" &&
542
+ typeof value.lockId === "string" &&
543
+ /^[a-f0-9-]{36}$/u.test(value.lockId) &&
544
+ Number.isSafeInteger(value.pid) &&
545
+ Number(value.pid) > 0 &&
546
+ typeof value.hostname === "string" &&
547
+ value.hostname.length >= 1 &&
548
+ value.hostname.length <= 255 &&
549
+ typeof value.operation === "string" &&
550
+ LOCK_OPERATION.test(value.operation) &&
551
+ typeof value.acquiredAt === "string" &&
552
+ Number.isFinite(Date.parse(value.acquiredAt)) &&
553
+ value.staleAfterMs === FILE_LOCK_STALE_MS &&
554
+ (value.planSha256 === null ||
555
+ (typeof value.planSha256 === "string" && /^[a-f0-9]{64}$/u.test(value.planSha256))) &&
556
+ typeof value.recordSha256 === "string" &&
557
+ /^[a-f0-9]{64}$/u.test(value.recordSha256));
558
+ }
559
+ async function readLegacyLock(path) {
560
+ const info = await lstat(path).catch(() => undefined);
561
+ if (!info?.isFile() || info.isSymbolicLink() || info.size < 2 || info.size > 16 * 1024) {
562
+ return null;
563
+ }
564
+ let value;
565
+ try {
566
+ value = JSON.parse(await readFile(path, "utf8"));
567
+ }
568
+ catch {
569
+ return null;
570
+ }
571
+ if (!isObject(value) ||
572
+ !Number.isSafeInteger(value.pid) ||
573
+ Number(value.pid) <= 0 ||
574
+ typeof value.operation !== "string" ||
575
+ !LOCK_OPERATION.test(value.operation) ||
576
+ typeof value.acquiredAt !== "string" ||
577
+ !Number.isFinite(Date.parse(value.acquiredAt)) ||
578
+ (value.hostname !== undefined &&
579
+ (typeof value.hostname !== "string" || value.hostname.length > 255))) {
580
+ return null;
581
+ }
582
+ return {
583
+ pid: Number(value.pid),
584
+ hostname: typeof value.hostname === "string" ? value.hostname : null,
585
+ operation: value.operation,
586
+ acquiredAt: value.acquiredAt,
587
+ };
588
+ }
589
+ function probeProcess(pid, ownerHostname) {
590
+ if (ownerHostname && ownerHostname !== hostname())
591
+ return "unknown";
592
+ try {
593
+ process.kill(pid, 0);
594
+ return "alive";
595
+ }
596
+ catch (error) {
597
+ const code = error.code;
598
+ if (code === "ESRCH")
599
+ return "dead";
600
+ return "unknown";
601
+ }
602
+ }
603
+ function safeLockOperation(value) {
604
+ return typeof value === "string" && LOCK_OPERATION.test(value) ? value : "research.operation";
605
+ }
606
+ function fileLockOwnerPath(path) {
607
+ return `${path}.owner.json`;
608
+ }
609
+ function ageSeconds(timestampMs) {
610
+ if (!Number.isFinite(timestampMs))
611
+ return 0;
612
+ return Math.max(0, Math.floor((Date.now() - timestampMs) / 1_000));
613
+ }
614
+ function lockBusyObservationError(input) {
615
+ return new CliError("Research workspace has another active or unverifiable writer.", {
616
+ code: "RESEARCH_WORKSPACE_LOCKED",
617
+ exitCode: 3,
618
+ details: {
619
+ ownerState: input.ownerState,
620
+ operation: input.operation,
621
+ acquiredAt: input.acquiredAt,
622
+ ageSeconds: input.ageSeconds,
623
+ leaseStaleAfterSeconds: Math.ceil(FILE_LOCK_STALE_MS / 1_000),
624
+ retryAfterSeconds: input.ownerState === "alive"
625
+ ? 1
626
+ : input.ageSeconds === null
627
+ ? Math.ceil(FILE_LOCK_STALE_MS / 1_000)
628
+ : Math.max(1, Math.ceil(FILE_LOCK_STALE_MS / 1_000) - input.ageSeconds),
629
+ minimumAction: input.ownerState === "alive"
630
+ ? "Wait for the named operation to finish, then retry; do not delete lock state manually."
631
+ : "Inspect the owning host or wait for the heartbeat lease to expire; do not delete lock state manually.",
632
+ },
633
+ });
634
+ }
635
+ function lockStateInvalidError() {
636
+ return new CliError("Research workspace lock state is unreadable or unsafe.", {
637
+ code: "RESEARCH_WORKSPACE_LOCK_INVALID",
638
+ exitCode: 3,
639
+ details: {
640
+ ownerState: "unknown",
641
+ minimumAction: "Inspect workspace filesystem permissions and lock-state integrity; do not delete lock state manually.",
642
+ },
643
+ });
644
+ }
645
+ function lockUnknownError(operation, acquiredAt, lockAgeSeconds) {
646
+ return lockBusyObservationError({
647
+ ownerState: "unknown",
648
+ operation,
649
+ acquiredAt,
650
+ ageSeconds: lockAgeSeconds,
651
+ });
652
+ }
653
+ function lockCompromisedError() {
654
+ return new CliError("Research workspace lock ownership changed unexpectedly.", {
655
+ code: "RESEARCH_WORKSPACE_LOCK_COMPROMISED",
656
+ exitCode: 3,
657
+ details: {
658
+ ownerState: "compromised",
659
+ minimumAction: "Stop mutation, inspect workspace status from a separate read-only command, and do not delete lock state manually.",
660
+ },
661
+ });
269
662
  }
270
663
  export async function pathExists(path) {
271
664
  return existsSync(path);
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/research/workspace/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/research/workspace/storage.ts"],"names":[],"mappings":"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"}
@@ -192,11 +192,18 @@ async function requireSetupOnlyControlDirectory(control) {
192
192
  "setup-state.json",
193
193
  "setup-report.json",
194
194
  "setup.lock",
195
+ "setup.lock.owner.json",
195
196
  ]);
196
197
  const entries = await readdir(control, { withFileTypes: true });
198
+ const entryByName = new Map(entries.map((entry) => [entry.name, entry]));
197
199
  if (entries.length === 0 ||
198
- entries.some((entry) => !(allowedFiles.has(entry.name) && entry.isFile()) &&
199
- !(entry.name === "setup-history" && entry.isDirectory() && !entry.isSymbolicLink()))) {
200
+ entries.some((entry) => !(allowedFiles.has(entry.name) &&
201
+ (entry.isFile() ||
202
+ (entry.name === "setup.lock" && entry.isDirectory() && !entry.isSymbolicLink()))) && !(entry.name === "setup-history" && entry.isDirectory() && !entry.isSymbolicLink())) ||
203
+ (entryByName.get("setup.lock")?.isDirectory() === true &&
204
+ entryByName.get("setup.lock.owner.json")?.isFile() !== true) ||
205
+ (entryByName.has("setup.lock.owner.json") &&
206
+ entryByName.get("setup.lock")?.isDirectory() !== true)) {
200
207
  throw new CliError(`Research workspace state already exists: ${control}`, {
201
208
  code: "RESEARCH_WORKSPACE_EXISTS",
202
209
  exitCode: 2,
@@ -207,6 +214,8 @@ async function requireSetupOnlyControlDirectory(control) {
207
214
  await validateSetupHistoryDirectory(join(control, entry.name));
208
215
  continue;
209
216
  }
217
+ if (entry.name === "setup.lock" && entry.isDirectory())
218
+ continue;
210
219
  const info = await lstat(join(control, entry.name));
211
220
  if (!info.isFile() || info.isSymbolicLink()) {
212
221
  throw new CliError(`Research setup state must use regular non-symlink files: ${entry.name}`, {
@@ -843,6 +852,12 @@ export async function withWorkspaceLock(root, operation, callback) {
843
852
  acquiredAt: new Date().toISOString(),
844
853
  });
845
854
  try {
855
+ if (release.recovery) {
856
+ await appendJournalEvent(paths.journal, "workspace.lock.recovered", "workspace", {
857
+ ...release.recovery,
858
+ recoveryOperation: operation,
859
+ });
860
+ }
846
861
  return await callback();
847
862
  }
848
863
  finally {