@1mcp/agent 0.39.5 → 0.39.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/build/admin/assets/{admin-OAuthServicesWorkspace-BzrCR7Bi.js → admin-OAuthServicesWorkspace-CkdZwuvX.js} +1 -1
  2. package/build/admin/assets/{admin-console-BpUgmlrR.js → admin-console-CO0t0D1E.js} +3 -3
  3. package/build/admin/index.html +1 -1
  4. package/build/commands/serve/serveStatus.d.ts.map +1 -1
  5. package/build/commands/serve/serveStatus.js +3 -0
  6. package/build/commands/serve/serveStatus.js.map +1 -1
  7. package/build/commands/serve/serveStop.d.ts.map +1 -1
  8. package/build/commands/serve/serveStop.js +38 -6
  9. package/build/commands/serve/serveStop.js.map +1 -1
  10. package/build/commands/shared/inspectApiSchemas.d.ts +4 -4
  11. package/build/constants/mcp.d.ts +1 -1
  12. package/build/constants/mcp.js +1 -1
  13. package/build/core/server/pidFileManager.d.ts +20 -5
  14. package/build/core/server/pidFileManager.d.ts.map +1 -1
  15. package/build/core/server/pidFileManager.js +34 -15
  16. package/build/core/server/pidFileManager.js.map +1 -1
  17. package/build/core/server/processIdentity.d.ts +18 -0
  18. package/build/core/server/processIdentity.d.ts.map +1 -1
  19. package/build/core/server/processIdentity.js +13 -2
  20. package/build/core/server/processIdentity.js.map +1 -1
  21. package/build/core/server/runtimeOwnershipIdentityRepair.d.ts +21 -0
  22. package/build/core/server/runtimeOwnershipIdentityRepair.d.ts.map +1 -0
  23. package/build/core/server/runtimeOwnershipIdentityRepair.js +158 -0
  24. package/build/core/server/runtimeOwnershipIdentityRepair.js.map +1 -0
  25. package/build/core/server/runtimeScopeOwnership.d.ts +21 -2
  26. package/build/core/server/runtimeScopeOwnership.d.ts.map +1 -1
  27. package/build/core/server/runtimeScopeOwnership.js +145 -16
  28. package/build/core/server/runtimeScopeOwnership.js.map +1 -1
  29. package/build/core/tools/internal/schemas/index.d.ts +1 -1
  30. package/build/core/tools/internal/schemas/management.d.ts +1 -1
  31. package/build/observability/events/registry.d.ts +60 -0
  32. package/build/observability/events/registry.d.ts.map +1 -1
  33. package/build/observability/events/registry.js +60 -0
  34. package/build/observability/events/registry.js.map +1 -1
  35. package/build/observability/privacy/fields.d.ts +4 -0
  36. package/build/observability/privacy/fields.d.ts.map +1 -1
  37. package/build/observability/privacy/fields.js +4 -0
  38. package/build/observability/privacy/fields.js.map +1 -1
  39. package/build/sdk/legacy/commands/serve.d.ts.map +1 -1
  40. package/build/sdk/legacy/commands/serve.js +66 -3
  41. package/build/sdk/legacy/commands/serve.js.map +1 -1
  42. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  43. package/build/transport/http/routes/streamableHttpRoutes.js +6 -0
  44. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  45. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"processIdentity.js","sourceRoot":"","sources":["../../../src/core/server/processIdentity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"processIdentity.js","sourceRoot":"","sources":["../../../src/core/server/processIdentity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { readPidFile, writePidFile } from './pidFileManager.js';
2
+ import { acquireProcessIdentity } from './processIdentity.js';
3
+ /** Delayed first attempt, then bounded exponential backoff; success stops the loop. */
4
+ export declare const DEFAULT_IDENTITY_REPAIR_DELAYS_MS: readonly [10000, 20000, 40000, 60000, 60000];
5
+ export interface RuntimeOwnershipIdentityRepairOptions {
6
+ runtimeScope: string;
7
+ pid: number;
8
+ claimId: string;
9
+ delaysMs?: readonly number[];
10
+ acquireIdentity?: typeof acquireProcessIdentity;
11
+ readPidFile?: typeof readPidFile;
12
+ writePidFile?: typeof writePidFile;
13
+ }
14
+ export type PidRepairOutcome = 'repaired' | 'skipped' | 'retry' | 'ownership-changed' | 'unsafe';
15
+ /**
16
+ * Repairs one degraded ownership generation once the claiming process can read
17
+ * its own birth evidence. The record's pid+claimId must still match, so a
18
+ * released, reclaimed, or replaced generation is never overwritten.
19
+ */
20
+ export declare function scheduleRuntimeOwnershipIdentityRepair(options: RuntimeOwnershipIdentityRepairOptions): () => void;
21
+ //# sourceMappingURL=runtimeOwnershipIdentityRepair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeOwnershipIdentityRepair.d.ts","sourceRoot":"","sources":["../../../src/core/server/runtimeOwnershipIdentityRepair.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAwB,MAAM,qCAAqC,CAAC;AAOnG,uFAAuF;AACvF,eAAO,MAAM,iCAAiC,8CAAoD,CAAC;AAEnG,MAAM,WAAW,qCAAqC;IACpD,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,sBAAsB,CAAC;IAChD,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC;IACjC,YAAY,CAAC,EAAE,OAAO,YAAY,CAAC;CACpC;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AASjG;;;;GAIG;AACH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,qCAAqC,GAAG,MAAM,IAAI,CA4EjH"}
@@ -0,0 +1,158 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { getPidFilePath, readPidFile, writePidFile } from './pidFileManager.js';
4
+ import { acquireProcessIdentity } from './processIdentity.js';
5
+ import { readRuntimeScopeOwnership, updateRuntimeScopeOwnershipIdentity, } from './runtimeScopeOwnership.js';
6
+ import logger from '../../logger/logger.js';
7
+ /** Delayed first attempt, then bounded exponential backoff; success stops the loop. */
8
+ export const DEFAULT_IDENTITY_REPAIR_DELAYS_MS = [10_000, 20_000, 40_000, 60_000, 60_000];
9
+ /**
10
+ * Repairs one degraded ownership generation once the claiming process can read
11
+ * its own birth evidence. The record's pid+claimId must still match, so a
12
+ * released, reclaimed, or replaced generation is never overwritten.
13
+ */
14
+ export function scheduleRuntimeOwnershipIdentityRepair(options) {
15
+ const delays = options.delaysMs ?? DEFAULT_IDENTITY_REPAIR_DELAYS_MS;
16
+ const acquireIdentity = options.acquireIdentity ?? acquireProcessIdentity;
17
+ const startedAt = Date.now();
18
+ let attempt = 0;
19
+ let cancelled = false;
20
+ let timer;
21
+ let lastPidOutcome = 'not-attempted';
22
+ const stop = () => {
23
+ cancelled = true;
24
+ if (timer)
25
+ clearTimeout(timer);
26
+ };
27
+ const scheduleNext = () => {
28
+ if (cancelled)
29
+ return;
30
+ if (attempt >= delays.length) {
31
+ logger.warn('runtimeScopeOwnership.identity.repair.exhausted', {
32
+ attempts: attempt,
33
+ elapsedMs: Date.now() - startedAt,
34
+ pid_outcome: lastPidOutcome,
35
+ });
36
+ return;
37
+ }
38
+ timer = setTimeout(run, delays[attempt]);
39
+ timer.unref?.();
40
+ };
41
+ const run = () => {
42
+ if (cancelled)
43
+ return;
44
+ try {
45
+ attempt += 1;
46
+ const acquisition = acquireIdentity(options.pid);
47
+ logger.debug('runtimeScopeOwnership.identity.repair.attempt', {
48
+ attempts: attempt,
49
+ elapsedMs: Date.now() - startedAt,
50
+ });
51
+ if (!acquisition.identity) {
52
+ lastPidOutcome = 'not-attempted';
53
+ scheduleNext();
54
+ return;
55
+ }
56
+ const result = repairOnce(options, acquisition.identity);
57
+ lastPidOutcome = result.pidOutcome;
58
+ if (result.outcome === 'ownership-changed') {
59
+ stop();
60
+ return;
61
+ }
62
+ if (result.outcome === 'retry') {
63
+ scheduleNext();
64
+ return;
65
+ }
66
+ if (result.outcome === 'unsafe') {
67
+ logger.warn('runtimeScopeOwnership.identity.repair.unsafe', {
68
+ attempts: attempt,
69
+ elapsedMs: Date.now() - startedAt,
70
+ pid_outcome: lastPidOutcome,
71
+ });
72
+ stop();
73
+ return;
74
+ }
75
+ logger.info('runtimeScopeOwnership.identity.repaired', {
76
+ attempts: attempt,
77
+ elapsedMs: Date.now() - startedAt,
78
+ pid_outcome: lastPidOutcome,
79
+ });
80
+ stop();
81
+ }
82
+ catch (error) {
83
+ // A timer callback must never become an uncaught exception.
84
+ logger.warn('runtimeScopeOwnership.identity.repair.failed', { error: error });
85
+ stop();
86
+ }
87
+ };
88
+ scheduleNext();
89
+ return stop;
90
+ }
91
+ function repairOnce(options, identity) {
92
+ let owner;
93
+ try {
94
+ owner = readRuntimeScopeOwnership(options.runtimeScope);
95
+ }
96
+ catch (error) {
97
+ // Unreadable/invalid ownership metadata cannot be safely repaired.
98
+ logger.warn('runtimeScopeOwnership.identity.repair.failed', { error: error });
99
+ return { outcome: 'unsafe', pidOutcome: 'not-attempted' };
100
+ }
101
+ if (!owner || owner.pid !== options.pid || owner.claimId !== options.claimId) {
102
+ return { outcome: 'ownership-changed', pidOutcome: 'not-attempted' };
103
+ }
104
+ try {
105
+ const updated = updateRuntimeScopeOwnershipIdentity(options.runtimeScope, { pid: options.pid, claimId: options.claimId }, identity);
106
+ if (!updated)
107
+ return { outcome: 'ownership-changed', pidOutcome: 'not-attempted' };
108
+ }
109
+ catch (error) {
110
+ logger.warn('runtimeScopeOwnership.identity.repair.failed', { error: error });
111
+ return { outcome: 'retry', pidOutcome: 'not-attempted' };
112
+ }
113
+ const pidOutcome = repairPidFile(options, identity);
114
+ if (pidOutcome === 'retry')
115
+ return { outcome: 'retry', pidOutcome };
116
+ if (pidOutcome === 'ownership-changed')
117
+ return { outcome: 'ownership-changed', pidOutcome };
118
+ if (pidOutcome === 'unsafe')
119
+ return { outcome: 'unsafe', pidOutcome };
120
+ return { outcome: 'repaired', pidOutcome };
121
+ }
122
+ /**
123
+ * Repairs the derived PID record. The owner record is authoritative; a
124
+ * transient PID read/write failure is retried, a changed generation stops the
125
+ * loop, and unreadable-but-present metadata is reported as unsafe instead of
126
+ * being overwritten blindly.
127
+ */
128
+ function repairPidFile(options, identity) {
129
+ const readPid = options.readPidFile ?? readPidFile;
130
+ const writePid = options.writePidFile ?? writePidFile;
131
+ let info;
132
+ try {
133
+ info = readPid(options.runtimeScope);
134
+ }
135
+ catch (error) {
136
+ logger.warn('runtimeScopeOwnership.identity.repair.failed', { error: error });
137
+ return 'retry';
138
+ }
139
+ if (!info) {
140
+ // Missing is fine (no discovery cache); present but unparseable must not be
141
+ // overwritten because ownership of that record cannot be verified.
142
+ return fs.existsSync(getPidFilePath(options.runtimeScope)) ? 'unsafe' : 'skipped';
143
+ }
144
+ if (info.pid !== options.pid || path.resolve(info.configDir) !== path.resolve(options.runtimeScope)) {
145
+ return 'ownership-changed';
146
+ }
147
+ if (info.ownerClaimId)
148
+ return 'skipped';
149
+ try {
150
+ writePid(options.runtimeScope, { ...info, processIdentity: identity, identityEvidence: undefined });
151
+ return 'repaired';
152
+ }
153
+ catch (error) {
154
+ logger.warn('runtimeScopeOwnership.identity.repair.failed', { error: error });
155
+ return 'retry';
156
+ }
157
+ }
158
+ //# sourceMappingURL=runtimeOwnershipIdentityRepair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeOwnershipIdentityRepair.js","sourceRoot":"","sources":["../../../src/core/server/runtimeOwnershipIdentityRepair.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type ProcessIdentity } from './processIdentity.js';
1
+ import { acquireProcessIdentity, type ProcessIdentity, type UnavailableIdentityEvidence } from './processIdentity.js';
2
2
  export type RuntimeScopeClaimantKind = 'foreground-http' | 'foreground-stdio' | 'background-supervisor';
3
3
  export interface RuntimeScopeOwnershipRecord {
4
4
  version: 1;
@@ -7,6 +7,8 @@ export interface RuntimeScopeOwnershipRecord {
7
7
  kind: RuntimeScopeClaimantKind;
8
8
  claimedAt: string;
9
9
  processIdentity?: ProcessIdentity;
10
+ /** Explicit degraded evidence; readers keep the record held while its PID lives. */
11
+ identityEvidence?: UnavailableIdentityEvidence;
10
12
  coordination?: 'flock';
11
13
  cooperative?: true;
12
14
  }
@@ -29,12 +31,17 @@ export declare class RuntimeScopeOwnedError extends Error {
29
31
  readonly ownerPath: string;
30
32
  readonly reason: RuntimeScopeOwnershipFailureReason;
31
33
  readonly owner: RuntimeScopeOwnershipRecord | null;
32
- constructor(ownerPath: string, reason: RuntimeScopeOwnershipFailureReason, owner: RuntimeScopeOwnershipRecord | null, detail?: string);
34
+ /** Basenames only; safe to show to the local operator. */
35
+ readonly unknownEntries?: string[] | undefined;
36
+ constructor(ownerPath: string, reason: RuntimeScopeOwnershipFailureReason, owner: RuntimeScopeOwnershipRecord | null, detail?: string,
37
+ /** Basenames only; safe to show to the local operator. */
38
+ unknownEntries?: string[] | undefined);
33
39
  }
34
40
  interface OwnershipDependencies {
35
41
  processAlive?: (pid: number) => boolean;
36
42
  createClaimId?: () => string;
37
43
  now?: () => Date;
44
+ acquireIdentity?: typeof acquireProcessIdentity;
38
45
  }
39
46
  export declare function getRuntimeScopeOwnershipPath(configDir: string): string;
40
47
  export declare function getRuntimeScopeStopLockPath(configDir: string): string;
@@ -60,10 +67,22 @@ export declare function reclaimStaleRuntimeScopeOwnership(configDir: string, exp
60
67
  export declare function verifyRuntimeScopeOwnership(configDir: string, claimId: string, expectedKind: RuntimeScopeClaimantKind, processAlive?: (pid: number) => boolean): RuntimeScopeOwnershipRecord;
61
68
  /** Strictly reads the canonical owner record for lifecycle recovery commands. */
62
69
  export declare function readRuntimeScopeOwnership(configDir: string): RuntimeScopeOwnershipRecord | null;
70
+ /**
71
+ * Atomically upgrades one observed ownership generation from unavailable
72
+ * evidence to kernel evidence. Never creates, replaces, or crosses generations.
73
+ */
74
+ export declare function updateRuntimeScopeOwnershipIdentity(configDir: string, expected: RuntimeScopeOwnershipIdentity, identity: ProcessIdentity): boolean;
63
75
  /**
64
76
  * Releases only the owner observed by a lifecycle recovery command. Both PID
65
77
  * and claim ID must still match so a replacement owner is never removed.
66
78
  */
67
79
  export declare function releaseRuntimeScopeOwnership(configDir: string, expected: RuntimeScopeOwnershipIdentity): boolean;
80
+ export type OwnershipReleaseOutcome = 'released' | 'ownership-changed' | 'failed';
81
+ /**
82
+ * Process-lifetime cleanup contract: never throws, logs a secondary failure,
83
+ * and never masks the primary error of the path that invoked it.
84
+ */
85
+ export declare function releaseRuntimeScopeOwnershipBestEffort(configDir: string, expected: RuntimeScopeOwnershipIdentity, stage?: ReleaseStage): OwnershipReleaseOutcome;
86
+ type ReleaseStage = 'ownership' | 'stop-lock' | 'file-lock';
68
87
  export {};
69
88
  //# sourceMappingURL=runtimeScopeOwnership.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeScopeOwnership.d.ts","sourceRoot":"","sources":["../../../src/core/server/runtimeScopeOwnership.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeScopeOwnership.d.ts","sourceRoot":"","sources":["../../../src/core/server/runtimeScopeOwnership.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import fs from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { readBackgroundSupervisorState } from './backgroundRuntimeSupervisorState.js';
5
5
  import { getPidFilePath, isProcessAlive, readPidFile } from './pidFileManager.js';
6
- import { inspectProcessIdentity, processIdentitySchema, readProcessIdentity, } from './processIdentity.js';
6
+ import { acquireProcessIdentity, inspectProcessIdentity, processIdentitySchema, readProcessIdentity, unavailableIdentityEvidenceSchema, } from './processIdentity.js';
7
7
  import { acquireRuntimeFileLock } from './runtimeFileLock.js';
8
8
  import logger from '../../logger/logger.js';
9
9
  import { z } from 'zod';
@@ -16,12 +16,16 @@ export class RuntimeScopeOwnedError extends Error {
16
16
  ownerPath;
17
17
  reason;
18
18
  owner;
19
- constructor(ownerPath, reason, owner, detail) {
19
+ unknownEntries;
20
+ constructor(ownerPath, reason, owner, detail,
21
+ /** Basenames only; safe to show to the local operator. */
22
+ unknownEntries) {
20
23
  const ownerDescription = owner ? ` by ${owner.kind} (PID: ${owner.pid})` : '';
21
24
  super(`Runtime Scope is already owned${ownerDescription}${detail ? `: ${detail}` : ''}`);
22
25
  this.ownerPath = ownerPath;
23
26
  this.reason = reason;
24
27
  this.owner = owner;
28
+ this.unknownEntries = unknownEntries;
25
29
  this.name = 'RuntimeScopeOwnedError';
26
30
  }
27
31
  }
@@ -32,6 +36,7 @@ const runtimeScopeOwnershipRecordSchema = z.object({
32
36
  kind: z.enum(['foreground-http', 'foreground-stdio', 'background-supervisor']),
33
37
  claimedAt: z.string().datetime(),
34
38
  processIdentity: processIdentitySchema.optional(),
39
+ identityEvidence: unavailableIdentityEvidenceSchema.optional(),
35
40
  coordination: z.literal('flock').optional(),
36
41
  cooperative: z.literal(true).optional(),
37
42
  });
@@ -60,15 +65,29 @@ export function claimRuntimeScope(configDir, claimant, dependencies = {}) {
60
65
  const processAlive = dependencies.processAlive ?? isProcessAlive;
61
66
  const createClaimId = dependencies.createClaimId ?? randomUUID;
62
67
  const now = dependencies.now ?? currentDate;
68
+ const pid = claimant.pid ?? process.pid;
69
+ const claimedAt = now().toISOString();
70
+ const acquisition = claimant.cooperative ? undefined : (dependencies.acquireIdentity ?? acquireProcessIdentity)(pid);
63
71
  const record = {
64
72
  version: 1,
65
- pid: claimant.pid ?? process.pid,
73
+ pid,
66
74
  claimId: createClaimId(),
67
75
  kind: claimant.kind,
68
- claimedAt: now().toISOString(),
76
+ claimedAt,
69
77
  ...(claimant.cooperative
70
78
  ? { cooperative: true }
71
- : { processIdentity: readProcessIdentity(claimant.pid ?? process.pid) }),
79
+ : acquisition?.identity
80
+ ? { processIdentity: acquisition.identity }
81
+ : acquisition?.failure
82
+ ? {
83
+ identityEvidence: {
84
+ status: 'unavailable',
85
+ code: acquisition.failure.code,
86
+ elapsedMs: acquisition.failure.elapsedMs,
87
+ at: claimedAt,
88
+ },
89
+ }
90
+ : {}),
72
91
  };
73
92
  fs.mkdirSync(configDir, { recursive: true });
74
93
  const candidateDir = `${ownerDir}.${record.claimId}.candidate`;
@@ -96,6 +115,9 @@ export function claimRuntimeScope(configDir, claimant, dependencies = {}) {
96
115
  }
97
116
  const existing = inspectRuntimeScopeOwnership(configDir);
98
117
  if (!existing) {
118
+ // An empty canonical directory cannot be a legitimate claim state:
119
+ // claims publish atomically via candidate+rename.
120
+ removeEmptyOwnershipDirectory(configDir);
99
121
  continue;
100
122
  }
101
123
  if (claimant.cooperative || !ownerIsDead(existing.record, processAlive, fileLock !== null)) {
@@ -115,7 +137,7 @@ export function claimRuntimeScope(configDir, claimant, dependencies = {}) {
115
137
  }
116
138
  }
117
139
  catch (error) {
118
- releaseRuntimeScopeOwnership(configDir, record);
140
+ releaseRuntimeScopeOwnershipBestEffort(configDir, record, 'ownership');
119
141
  throw error;
120
142
  }
121
143
  let released = false;
@@ -126,12 +148,18 @@ export function claimRuntimeScope(configDir, claimant, dependencies = {}) {
126
148
  if (released) {
127
149
  return;
128
150
  }
129
- released = true;
130
151
  try {
131
- releaseRuntimeScopeOwnership(configDir, record);
152
+ // Mark only after a completed (or no-longer-ours) cleanup, so a
153
+ // transient failure can be retried by a later call.
154
+ const outcome = releaseRuntimeScopeOwnershipBestEffort(configDir, record, 'ownership');
155
+ if (outcome !== 'failed')
156
+ released = true;
157
+ }
158
+ catch (error) {
159
+ logCleanupFailure('ownership', error);
132
160
  }
133
161
  finally {
134
- fileLock?.release();
162
+ releaseFileLockBestEffort(fileLock);
135
163
  }
136
164
  },
137
165
  };
@@ -141,7 +169,7 @@ export function claimRuntimeScope(configDir, claimant, dependencies = {}) {
141
169
  finally {
142
170
  removeCandidateDirectoryIfPresent(candidateDir);
143
171
  if (!retained)
144
- fileLock?.release();
172
+ releaseFileLockBestEffort(fileLock);
145
173
  }
146
174
  }
147
175
  /** Serializes stop metadata cleanup against ordinary claims and workers. */
@@ -201,7 +229,7 @@ export function acquireRuntimeScopeStopLock(configDir, expectedOwner, dependenci
201
229
  }
202
230
  }
203
231
  finally {
204
- fileLock?.release();
232
+ releaseFileLockBestEffort(fileLock);
205
233
  }
206
234
  },
207
235
  };
@@ -211,7 +239,7 @@ export function acquireRuntimeScopeStopLock(configDir, expectedOwner, dependenci
211
239
  finally {
212
240
  removeCandidateDirectoryIfPresent(candidateDir);
213
241
  if (!retained)
214
- fileLock?.release();
242
+ releaseFileLockBestEffort(fileLock);
215
243
  }
216
244
  }
217
245
  /**
@@ -230,7 +258,7 @@ export function reclaimStaleRuntimeScopeOwnership(configDir, expected, processAl
230
258
  return reclaimObservedOwnership(configDir, observed, processAlive, fileLock !== null);
231
259
  }
232
260
  finally {
233
- fileLock?.release();
261
+ releaseFileLockBestEffort(fileLock);
234
262
  }
235
263
  }
236
264
  function ownerIsDead(record, processAlive, heldFileLock) {
@@ -253,7 +281,7 @@ function reclaimObservedOwnership(configDir, observed, processAlive, heldFileLoc
253
281
  return removeObservedOwnership(configDir, current);
254
282
  }
255
283
  finally {
256
- stopLock.release();
284
+ releaseStopLockBestEffort(stopLock);
257
285
  }
258
286
  }
259
287
  function assertDeadSupervisorIsReclaimable(configDir, ownerPath, owner, processAlive) {
@@ -346,7 +374,7 @@ function assertNoActiveStopLock(configDir, processAlive, heldFileLock = false) {
346
374
  }
347
375
  }
348
376
  finally {
349
- fileLock?.release();
377
+ releaseFileLockBestEffort(fileLock);
350
378
  }
351
379
  }
352
380
  function inspectRuntimeScopeStopLock(configDir) {
@@ -464,6 +492,48 @@ function stopLockTombstoneName(operationId) {
464
492
  export function readRuntimeScopeOwnership(configDir) {
465
493
  return inspectRuntimeScopeOwnership(configDir)?.record ?? null;
466
494
  }
495
+ /**
496
+ * Atomically upgrades one observed ownership generation from unavailable
497
+ * evidence to kernel evidence. Never creates, replaces, or crosses generations.
498
+ */
499
+ export function updateRuntimeScopeOwnershipIdentity(configDir, expected, identity) {
500
+ const observed = inspectRuntimeScopeOwnership(configDir);
501
+ if (!observed || observed.interruptedReclaim || !ownershipMatches(observed.record, expected)) {
502
+ return false;
503
+ }
504
+ const next = {
505
+ ...observed.record,
506
+ processIdentity: identity,
507
+ identityEvidence: undefined,
508
+ };
509
+ // Keep the temp file outside the canonical ownership directory so a leftover
510
+ // is never an unknown ownership entry; configDir keeps it on the same
511
+ // filesystem, which is required for an atomic rename.
512
+ const tempPath = path.join(configDir, `${OWNERSHIP_DIR_NAME}.${expected.claimId}.identity.tmp`);
513
+ try {
514
+ fs.writeFileSync(tempPath, `${JSON.stringify(next)}\n`, { encoding: 'utf8', mode: 0o600 });
515
+ // Re-observe immediately before publication. The claim's owner lock is held
516
+ // for the runtime lifetime, so this is the strongest available generation
517
+ // guard on platforms without flock; a forced replacement of a live owner
518
+ // remains the only residual window.
519
+ const current = inspectRuntimeScopeOwnership(configDir);
520
+ if (!current || current.interruptedReclaim || !ownershipMatches(current.record, expected)) {
521
+ fs.unlinkSync(tempPath);
522
+ return false;
523
+ }
524
+ fs.renameSync(tempPath, current.recordPath);
525
+ }
526
+ catch (error) {
527
+ try {
528
+ fs.unlinkSync(tempPath);
529
+ }
530
+ catch {
531
+ // Best-effort cleanup; the original error is more useful.
532
+ }
533
+ throw error;
534
+ }
535
+ return true;
536
+ }
467
537
  /**
468
538
  * Releases only the owner observed by a lifecycle recovery command. Both PID
469
539
  * and claim ID must still match so a replacement owner is never removed.
@@ -475,6 +545,45 @@ export function releaseRuntimeScopeOwnership(configDir, expected) {
475
545
  }
476
546
  return removeObservedOwnership(configDir, observed);
477
547
  }
548
+ /**
549
+ * Process-lifetime cleanup contract: never throws, logs a secondary failure,
550
+ * and never masks the primary error of the path that invoked it.
551
+ */
552
+ export function releaseRuntimeScopeOwnershipBestEffort(configDir, expected, stage = 'ownership') {
553
+ try {
554
+ return releaseRuntimeScopeOwnership(configDir, expected) ? 'released' : 'ownership-changed';
555
+ }
556
+ catch (error) {
557
+ logCleanupFailure(stage, error);
558
+ return 'failed';
559
+ }
560
+ }
561
+ function logCleanupFailure(stage, error) {
562
+ try {
563
+ logger.warn('runtimeScopeOwnership.release.failed', { error: error, stage });
564
+ }
565
+ catch {
566
+ // Diagnostics must never replace the primary cleanup control flow.
567
+ }
568
+ }
569
+ function releaseFileLockBestEffort(fileLock) {
570
+ if (!fileLock)
571
+ return;
572
+ try {
573
+ fileLock.release();
574
+ }
575
+ catch (error) {
576
+ logCleanupFailure('file-lock', error);
577
+ }
578
+ }
579
+ function releaseStopLockBestEffort(stopLock) {
580
+ try {
581
+ stopLock.release();
582
+ }
583
+ catch (error) {
584
+ logCleanupFailure('stop-lock', error);
585
+ }
586
+ }
478
587
  function inspectRuntimeScopeOwnership(configDir) {
479
588
  const ownerDir = getRuntimeScopeOwnershipPath(configDir);
480
589
  const ownerRecordPath = path.join(ownerDir, OWNER_RECORD_NAME);
@@ -500,9 +609,14 @@ function inspectRuntimeScopeOwnership(configDir) {
500
609
  }
501
610
  throw new RuntimeScopeOwnedError(ownerDir, 'ambiguous', null, `ownership directory is unreadable: ${errorMessage(error)}`);
502
611
  }
612
+ if (entries.length === 0) {
613
+ // Structurally impossible during a live claim; treat as absent so the
614
+ // caller can remove the leftover directory and retry.
615
+ return null;
616
+ }
503
617
  const tombstones = entries.filter((entry) => /^owner\.[a-f0-9]{64}\.reclaiming\.json$/.test(entry));
504
618
  if (entries.length !== 1 || tombstones.length !== 1) {
505
- throw new RuntimeScopeOwnedError(ownerDir, 'ambiguous', null, 'ownership directory is incomplete or contains unknown files');
619
+ throw new RuntimeScopeOwnedError(ownerDir, 'ambiguous', null, 'ownership directory is incomplete or contains unknown files', entries.slice(0, 8));
506
620
  }
507
621
  const tombstonePath = path.join(ownerDir, tombstones[0]);
508
622
  const record = readOwnershipRecord(tombstonePath, ownerDir);
@@ -604,6 +718,21 @@ function ownershipMatches(record, expected) {
604
718
  function currentDate() {
605
719
  return new Date();
606
720
  }
721
+ function removeEmptyOwnershipDirectory(configDir) {
722
+ const ownerDir = getRuntimeScopeOwnershipPath(configDir);
723
+ try {
724
+ if (fs.readdirSync(ownerDir).length !== 0)
725
+ return false;
726
+ fs.rmdirSync(ownerDir);
727
+ return true;
728
+ }
729
+ catch (error) {
730
+ if (isCode(error, 'ENOENT'))
731
+ return true;
732
+ logger.warn('runtimeScopeOwnership.empty.ownership.directory.reclaim.failed', { error: error });
733
+ return false;
734
+ }
735
+ }
607
736
  function removeCandidateDirectoryIfPresent(candidateDir) {
608
737
  try {
609
738
  fs.rmSync(candidateDir, { recursive: true });