@1mcp/agent 0.39.4 → 0.39.6
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/build/admin/assets/{admin-OAuthServicesWorkspace-LdFOfohZ.js → admin-OAuthServicesWorkspace-BKqTW6r0.js} +1 -1
- package/build/admin/assets/{admin-console-DElBBfbM.js → admin-console-BwfDrlgF.js} +3 -3
- package/build/admin/index.html +1 -1
- package/build/commands/serve/cooperativeRuntime.js +2 -2
- package/build/commands/serve/cooperativeRuntime.js.map +1 -1
- package/build/commands/serve/serveStatus.d.ts.map +1 -1
- package/build/commands/serve/serveStatus.js +3 -0
- package/build/commands/serve/serveStatus.js.map +1 -1
- package/build/commands/serve/serveStop.d.ts.map +1 -1
- package/build/commands/serve/serveStop.js +38 -6
- package/build/commands/serve/serveStop.js.map +1 -1
- package/build/commands/shared/inspectApiSchemas.d.ts +4 -4
- package/build/constants/mcp.d.ts +1 -1
- package/build/constants/mcp.js +1 -1
- package/build/core/server/pidFileManager.d.ts +20 -5
- package/build/core/server/pidFileManager.d.ts.map +1 -1
- package/build/core/server/pidFileManager.js +34 -15
- package/build/core/server/pidFileManager.js.map +1 -1
- package/build/core/server/processIdentity.d.ts +18 -0
- package/build/core/server/processIdentity.d.ts.map +1 -1
- package/build/core/server/processIdentity.js +13 -2
- package/build/core/server/processIdentity.js.map +1 -1
- package/build/core/server/runtimeOwnershipIdentityRepair.d.ts +21 -0
- package/build/core/server/runtimeOwnershipIdentityRepair.d.ts.map +1 -0
- package/build/core/server/runtimeOwnershipIdentityRepair.js +158 -0
- package/build/core/server/runtimeOwnershipIdentityRepair.js.map +1 -0
- package/build/core/server/runtimeScopeOwnership.d.ts +21 -2
- package/build/core/server/runtimeScopeOwnership.d.ts.map +1 -1
- package/build/core/server/runtimeScopeOwnership.js +145 -16
- package/build/core/server/runtimeScopeOwnership.js.map +1 -1
- package/build/core/tools/internal/schemas/index.d.ts +1 -1
- package/build/core/tools/internal/schemas/management.d.ts +1 -1
- package/build/observability/events/registry.d.ts +60 -0
- package/build/observability/events/registry.d.ts.map +1 -1
- package/build/observability/events/registry.js +60 -0
- package/build/observability/events/registry.js.map +1 -1
- package/build/observability/privacy/fields.d.ts +4 -0
- package/build/observability/privacy/fields.d.ts.map +1 -1
- package/build/observability/privacy/fields.js +4 -0
- package/build/observability/privacy/fields.js.map +1 -1
- package/build/sdk/legacy/commands/serve.d.ts.map +1 -1
- package/build/sdk/legacy/commands/serve.js +66 -3
- package/build/sdk/legacy/commands/serve.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,7 +2,7 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import logger from '../../logger/logger.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { processIdentitySchema, readProcessIdentity } from './processIdentity.js';
|
|
5
|
+
import { processIdentitySchema, readProcessIdentity, unavailableIdentityEvidenceSchema, } from './processIdentity.js';
|
|
6
6
|
/**
|
|
7
7
|
* Schema validating a PID file at the (untrusted, cross-version) file boundary.
|
|
8
8
|
* `pid` must be a positive integer — this is load-bearing: a negative PID would
|
|
@@ -13,6 +13,7 @@ import { processIdentitySchema, readProcessIdentity } from './processIdentity.js
|
|
|
13
13
|
export const serverPidInfoSchema = z.object({
|
|
14
14
|
pid: z.number().int().positive(),
|
|
15
15
|
processIdentity: processIdentitySchema.optional(),
|
|
16
|
+
identityEvidence: unavailableIdentityEvidenceSchema.optional(),
|
|
16
17
|
url: z.string().min(1),
|
|
17
18
|
port: z.number().int().min(1).max(65535),
|
|
18
19
|
host: z.string().min(1),
|
|
@@ -70,11 +71,16 @@ export function writePidFile(configDir, serverInfo) {
|
|
|
70
71
|
// Write PID file atomically: write to a sibling temp file then rename into
|
|
71
72
|
// place (rename is atomic on POSIX). Concurrent readers — racing `serve
|
|
72
73
|
// --status` / discovery — never observe a half-written, unparseable file.
|
|
74
|
+
// `serve` passes the claim's single evidence read (available or explicitly
|
|
75
|
+
// unavailable) so startup never pays for a second OS probe.
|
|
76
|
+
const inheritedEvidence = serverInfo.identityEvidence;
|
|
77
|
+
const processIdentity = serverInfo.ownerClaimId
|
|
78
|
+
? undefined
|
|
79
|
+
: (serverInfo.processIdentity ?? (inheritedEvidence ? undefined : readProcessIdentity(serverInfo.pid)));
|
|
73
80
|
const content = JSON.stringify({
|
|
74
81
|
...serverInfo,
|
|
75
|
-
processIdentity
|
|
76
|
-
|
|
77
|
-
: (serverInfo.processIdentity ?? readProcessIdentity(serverInfo.pid)),
|
|
82
|
+
processIdentity,
|
|
83
|
+
identityEvidence: processIdentity ? undefined : inheritedEvidence,
|
|
78
84
|
}, null, 2);
|
|
79
85
|
const tempFilePath = `${pidFilePath}.${process.pid}.tmp`;
|
|
80
86
|
fs.writeFileSync(tempFilePath, content, { encoding: 'utf-8' });
|
|
@@ -156,19 +162,37 @@ export function cleanupPidFile(configDir) {
|
|
|
156
162
|
}
|
|
157
163
|
}
|
|
158
164
|
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
165
|
+
* Whether `current` still describes the runtime generation captured by
|
|
166
|
+
* `expected`. A generation is pinned by PID, claim ID, and start time; identity
|
|
167
|
+
* is late-binding evidence, so it is compared only when the captured record
|
|
168
|
+
* already carries it and repair may have filled it in since.
|
|
169
|
+
*/
|
|
170
|
+
export function pidRecordMatchesGeneration(current, expected) {
|
|
171
|
+
if (!current)
|
|
172
|
+
return false;
|
|
173
|
+
if (current.pid !== expected.pid)
|
|
174
|
+
return false;
|
|
175
|
+
if (current.ownerClaimId !== expected.ownerClaimId)
|
|
176
|
+
return false;
|
|
177
|
+
if (current.startedAt !== expected.startedAt)
|
|
178
|
+
return false;
|
|
179
|
+
if (expected.processIdentity === undefined)
|
|
180
|
+
return true;
|
|
181
|
+
return JSON.stringify(current.processIdentity) === JSON.stringify(expected.processIdentity);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Delete the PID file only if it still describes the expected runtime record.
|
|
161
185
|
* Guards against a
|
|
162
186
|
* time-of-check/time-of-use race: between reading a stale/dead PID and deleting
|
|
163
187
|
* the file, a new runtime may have written a fresh PID file in the same scope.
|
|
164
188
|
* Deleting unconditionally would strand that live runtime (undiscoverable to
|
|
165
|
-
* later `--status`/`--stop`). Re-reading and matching the
|
|
189
|
+
* later `--status`/`--stop`). Re-reading and matching the generation prevents
|
|
190
|
+
* that; a numeric-PID match alone never authorizes removal.
|
|
166
191
|
*
|
|
167
192
|
* @returns true if the file was removed or is already gone/replaced; false if a
|
|
168
193
|
* matching file existed but could not be deleted.
|
|
169
194
|
*/
|
|
170
195
|
export function cleanupPidFileIfMatches(configDir, expected) {
|
|
171
|
-
const expectedPid = typeof expected === 'number' ? expected : expected.pid;
|
|
172
196
|
let current;
|
|
173
197
|
try {
|
|
174
198
|
current = readPidFile(configDir);
|
|
@@ -179,13 +203,8 @@ export function cleanupPidFileIfMatches(configDir, expected) {
|
|
|
179
203
|
}
|
|
180
204
|
throw error;
|
|
181
205
|
}
|
|
182
|
-
if (!current
|
|
183
|
-
|
|
184
|
-
(typeof expected !== 'number' &&
|
|
185
|
-
(current.ownerClaimId !== expected.ownerClaimId ||
|
|
186
|
-
current.startedAt !== expected.startedAt ||
|
|
187
|
-
JSON.stringify(current.processIdentity) !== JSON.stringify(expected.processIdentity)))) {
|
|
188
|
-
// Already gone, or replaced by a newer runtime — leave it untouched.
|
|
206
|
+
if (!pidRecordMatchesGeneration(current, expected)) {
|
|
207
|
+
// Already gone, or a different generation — leave it untouched.
|
|
189
208
|
return true;
|
|
190
209
|
}
|
|
191
210
|
return cleanupPidFile(configDir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pidFileManager.js","sourceRoot":"","sources":["../../../src/core/server/pidFileManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"pidFileManager.js","sourceRoot":"","sources":["../../../src/core/server/pidFileManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,8 +16,26 @@ export declare const processIdentitySchema: z.ZodDiscriminatedUnion<[z.ZodObject
|
|
|
16
16
|
}, z.core.$strip>], "platform">;
|
|
17
17
|
export type ProcessIdentity = z.infer<typeof processIdentitySchema>;
|
|
18
18
|
export type ProcessIdentityStatus = 'alive' | 'dead' | 'unknown';
|
|
19
|
+
export declare const unavailableIdentityEvidenceSchema: z.ZodObject<{
|
|
20
|
+
status: z.ZodLiteral<"unavailable">;
|
|
21
|
+
code: z.ZodString;
|
|
22
|
+
elapsedMs: z.ZodNumber;
|
|
23
|
+
at: z.ZodString;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
export type UnavailableIdentityEvidence = z.infer<typeof unavailableIdentityEvidenceSchema>;
|
|
26
|
+
export interface IdentityAcquisitionFailure {
|
|
27
|
+
platform: typeof process.platform;
|
|
28
|
+
pid: number;
|
|
29
|
+
elapsedMs: number;
|
|
30
|
+
code: string;
|
|
31
|
+
}
|
|
32
|
+
export interface IdentityAcquisition {
|
|
33
|
+
identity?: ProcessIdentity;
|
|
34
|
+
failure?: IdentityAcquisitionFailure;
|
|
35
|
+
}
|
|
19
36
|
/** Capture kernel process birth evidence; unavailable evidence is never a PID-only match. */
|
|
20
37
|
export declare function readProcessIdentity(pid: number): ProcessIdentity | undefined;
|
|
38
|
+
export declare function acquireProcessIdentity(pid: number): IdentityAcquisition;
|
|
21
39
|
interface IdentityDependencies {
|
|
22
40
|
readIdentity?: typeof readProcessIdentity;
|
|
23
41
|
processAlive?: (pid: number) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processIdentity.d.ts","sourceRoot":"","sources":["../../../src/core/server/processIdentity.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;+BAchC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"processIdentity.d.ts","sourceRoot":"","sources":["../../../src/core/server/processIdentity.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;+BAchC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEjE,eAAO,MAAM,iCAAiC;;;;;iBAK5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,OAAO,CAAC,EAAE,0BAA0B,CAAC;CACtC;AAwBD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE5E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAwEvE;AAED,UAAU,oBAAoB;IAC5B,YAAY,CAAC,EAAE,OAAO,mBAAmB,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;CACzC;AAyED,8EAA8E;AAC9E,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,eAAe,EAC1B,YAAY,GAAE,oBAAyB,GACtC,qBAAqB,CAEvB;AAED,qFAAqF;AACrF,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,eAAe,EAC1B,YAAY,GAAE,oBAAyB,GACtC,MAAM,CAaR"}
|
|
@@ -18,6 +18,12 @@ export const processIdentitySchema = z.discriminatedUnion('platform', [
|
|
|
18
18
|
}),
|
|
19
19
|
z.object({ platform: z.literal('win32'), hostname: z.string().min(1), startTime: z.string().regex(/^\d+$/) }),
|
|
20
20
|
]);
|
|
21
|
+
export const unavailableIdentityEvidenceSchema = z.object({
|
|
22
|
+
status: z.literal('unavailable'),
|
|
23
|
+
code: z.string().min(1),
|
|
24
|
+
elapsedMs: z.number().int().nonnegative(),
|
|
25
|
+
at: z.string().datetime(),
|
|
26
|
+
});
|
|
21
27
|
function acquisitionFailureCode(error) {
|
|
22
28
|
if (error instanceof z.ZodError)
|
|
23
29
|
return 'MALFORMED_PROCESS_EVIDENCE';
|
|
@@ -46,7 +52,7 @@ function acquisitionFailureReason(failure) {
|
|
|
46
52
|
export function readProcessIdentity(pid) {
|
|
47
53
|
return acquireProcessIdentity(pid).identity;
|
|
48
54
|
}
|
|
49
|
-
function acquireProcessIdentity(pid) {
|
|
55
|
+
export function acquireProcessIdentity(pid) {
|
|
50
56
|
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
51
57
|
return {};
|
|
52
58
|
const startedAt = performance.now();
|
|
@@ -153,8 +159,13 @@ function contextMismatch(recorded, observed) {
|
|
|
153
159
|
}
|
|
154
160
|
/** All lifecycle paths use the same evidence and fail-closed decisions. */
|
|
155
161
|
function inspectIdentity(pid, identity, dependencies) {
|
|
156
|
-
if (!identity)
|
|
162
|
+
if (!identity) {
|
|
163
|
+
// Missing birth evidence is not a death certificate; only a provably absent
|
|
164
|
+
// PID lets the record lose its protected object. A live PID stays held.
|
|
165
|
+
if (!(dependencies.processAlive ?? processExists)(pid))
|
|
166
|
+
return { status: 'dead' };
|
|
157
167
|
return { status: 'unknown', reason: 'the record has no process birth evidence (legacy format)' };
|
|
168
|
+
}
|
|
158
169
|
const readIdentity = (pid) => dependencies.readIdentity ? { identity: dependencies.readIdentity(pid) } : acquireProcessIdentity(pid);
|
|
159
170
|
const contextResult = readIdentity(process.pid);
|
|
160
171
|
const context = contextResult.identity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processIdentity.js","sourceRoot":"","sources":["../../../src/core/server/processIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,kBAAkB,CAAC,UAAU,EAAE;IACpE,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;KACrC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B,CAAC;IACF,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9G,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"processIdentity.js","sourceRoot":"","sources":["../../../src/core/server/processIdentity.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,kBAAkB,CAAC,UAAU,EAAE;IACpE,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;KACrC,CAAC;IACF,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;KAC7B,CAAC;IACF,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;CAC9G,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,CAAC,MAAM,CAAC;IACxD,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC1B,CAAC,CAAC;AAeH,SAAS,sBAAsB,CAAC,KAAc;IAC5C,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ;QAAE,OAAO,4BAA4B,CAAC;IACrE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAC7G,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IACzF,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACtE,CAAC,CAAC,KAAK,CAAC,IAAI;QACZ,CAAC,CAAC,8BAA8B,CAAC;AACrC,CAAC;AAED,SAAS,wBAAwB,CAAC,OAAoC;IACpE,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,YAAY,OAAO,CAAC,QAAQ,gBAAgB,OAAO,CAAC,GAAG,eAAe,OAAO,CAAC,SAAS,UAAU,OAAO,CAAC,IAAI,EAAE,CAAC;IAChI,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,OAAO,qCAAqC,CAAC;IAC3F,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC3D,OAAO,KAAK,OAAO,4DAA4D,CAAC;IAClF,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QACvD,OAAO,KAAK,OAAO,yCAAyC,CAAC;IAC/D,IAAI,OAAO,CAAC,IAAI,KAAK,4BAA4B;QAC/C,OAAO,KAAK,OAAO,gDAAgD,CAAC;IACtE,OAAO,KAAK,OAAO,GAAG,CAAC;AACzB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,OAAO,sBAAsB,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACtD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;YAC1D,8EAA8E;YAC9E,MAAM,MAAM,GAAG,IAAI;iBAChB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAChC,IAAI,EAAE;iBACN,KAAK,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;gBAAE,OAAO,EAAE,CAAC;YACtD,OAAO;gBACL,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC;oBACpC,QAAQ,EAAE,OAAO;oBACjB,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE;oBACzE,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,GAAG,SAAS,CAAC;oBACpD,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;iBACtB,CAAC;aACH,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,wFAAwF;YACxF,MAAM,SAAS,GAAG,YAAY;iBAC3B,YAAY,CAAC,cAAc,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE;gBACnG,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC;iBACD,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,YAAY;iBACxB,YAAY,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,sBAAsB,CAAC,EAAE;gBAChE,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CAAC;iBACD,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aAC1G,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,YAAY;iBAC3B,YAAY,CACX,gBAAgB,EAChB;gBACE,YAAY;gBACZ,iBAAiB;gBACjB,UAAU;gBACV,oBAAoB,GAAG,uDAAuD;aAC/E,EACD;gBACE,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;aACpC,CACF;iBACA,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,QAAQ,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC9G,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,GAAG;YACH,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACpD,IAAI,EAAE,sBAAsB,CAAC,KAAK,CAAC;SACpC,CAAC;QACF,iFAAiF;QACjF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;QAC7F,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAOD,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,CAAC,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAyB,EAAE,QAAyB;IAC3E,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;QAAE,OAAO,0DAA0D,CAAC;IAC/G,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACnE,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO,sDAAsD,CAAC;QACvG,IAAI,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY;YAAE,OAAO,uDAAuD,CAAC;QACpH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACxF,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,qDAAqD,CAAC;QACnF,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;YAAE,OAAO,sDAAsD,CAAC;QACvG,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,qFAAqF;IACrF,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAChG,OAAO,6DAA6D,CAAC;IACvE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAID,2EAA2E;AAC3E,SAAS,eAAe,CACtB,GAAW,EACX,QAAqC,EACrC,YAAkC;IAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,4EAA4E;QAC5E,wEAAwE;QACxE,IAAI,CAAC,CAAC,YAAY,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAClF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,0DAA0D,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,YAAY,GAAG,CAAC,GAAW,EAAuB,EAAE,CACxD,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IACzG,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC;IACvC,IAAI,CAAC,OAAO;QACV,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,MAAM,EACJ,gFAAgF;gBAChF,wBAAwB,CAAC,aAAa,CAAC,OAAO,CAAC;SAClD,CAAC;IACJ,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC7D,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,CAAC,YAAY,CAAC,YAAY,IAAI,aAAa,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClF,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,MAAM,EACJ,uEAAuE;YACvE,wBAAwB,CAAC,cAAc,CAAC,OAAO,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,sBAAsB,CACpC,GAAW,EACX,QAA0B,EAC1B,eAAqC,EAAE;IAEvC,OAAO,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,8BAA8B,CAC5C,GAAW,EACX,QAA0B,EAC1B,eAAqC,EAAE;IAEvC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAChE,MAAM,MAAM,GACV,UAAU,CAAC,MAAM,KAAK,SAAS;QAC7B,CAAC,CAAC,UAAU,CAAC,MAAM;QACnB,CAAC,CAAC,iEAAiE,CAAC;IACxE,OAAO,CACL,0CAA0C,GAAG,KAAK,MAAM,qCAAqC;QAC7F,yGAAyG;QACzG,iHAAiH;QACjH,wHAAwH;QACxH,8EAA8E,CAC/E,CAAC;AACJ,CAAC"}
|
|
@@ -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":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAwB,MAAM,qCAAqC,CAAC;AACnG,OAAO,EACL,yBAAyB,EACzB,mCAAmC,GACpC,MAAM,2CAA2C,CAAC;AACnD,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAE3C,uFAAuF;AACvF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAqBnG;;;;GAIG;AACH,MAAM,UAAU,sCAAsC,CAAC,OAA8C;IACnG,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,iCAAiC,CAAC;IACrE,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,sBAAsB,CAAC;IAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAgD,CAAC;IACrD,IAAI,cAAc,GAA6B,eAAe,CAAC;IAE/D,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,SAAS,GAAG,IAAI,CAAC;QACjB,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,IAAI,SAAS;YAAE,OAAO;QACtB,IAAI,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;gBAC7D,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACjC,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAS,EAAE;QACrB,IAAI,SAAS;YAAE,OAAO;QACtB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,CAAC;YACb,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE;gBAC5D,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC1B,cAAc,GAAG,eAAe,CAAC;gBACjC,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzD,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;YACnC,IAAI,MAAM,CAAC,OAAO,KAAK,mBAAmB,EAAE,CAAC;gBAC3C,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAC/B,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;oBAC1D,QAAQ,EAAE,OAAO;oBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACjC,WAAW,EAAE,cAAc;iBAC5B,CAAC,CAAC;gBACH,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE;gBACrD,QAAQ,EAAE,OAAO;gBACjB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;gBACjC,WAAW,EAAE,cAAc;aAC5B,CAAC,CAAC;YACH,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,4DAA4D;YAC5D,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9E,IAAI,EAAE,CAAC;QACT,CAAC;IACH,CAAC,CAAC;IAEF,YAAY,EAAE,CAAC;IACf,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,OAA8C,EAAE,QAAyB;IAC3F,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,mCAAmC,CACjD,OAAO,CAAC,YAAY,EACpB,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAC9C,QAAQ,CACT,CAAC;QACF,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACrF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACpE,IAAI,UAAU,KAAK,mBAAmB;QAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;IAC5F,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACtE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,OAA8C,EAAE,QAAyB;IAC9F,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC;IACtD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,4EAA4E;QAC5E,mEAAmE;QACnE,OAAO,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACpF,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACpG,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IACD,IAAI,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;QACpG,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9E,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -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
|
-
|
|
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":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"runtimeScopeOwnership.d.ts","sourceRoot":"","sources":["../../../src/core/server/runtimeScopeOwnership.ts"],"names":[],"mappings":"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"}
|