@alpacakit/agents 0.1.0-beta.24 → 0.1.0-beta.26
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 +2 -0
- package/dist/core/controlled-process.d.ts +1 -0
- package/dist/core/controlled-process.d.ts.map +1 -1
- package/dist/internal/controlled-process/model.d.ts +3 -2
- package/dist/internal/controlled-process/model.d.ts.map +1 -1
- package/dist/internal/controlled-process/record.d.ts.map +1 -1
- package/dist/internal/controlled-process/record.js +2 -1
- package/dist/internal/controlled-process/schema.d.ts +11 -3
- package/dist/internal/controlled-process/schema.d.ts.map +1 -1
- package/dist/internal/controlled-process/schema.js +17 -0
- package/dist/internal/controlled-process/supervisor-coordinator.d.ts +3 -2
- package/dist/internal/controlled-process/supervisor-coordinator.d.ts.map +1 -1
- package/dist/internal/controlled-process/supervisor-coordinator.js +8 -2
- package/dist/internal/controlled-process/supervisor-model.d.ts +3 -1
- package/dist/internal/controlled-process/supervisor-model.d.ts.map +1 -1
- package/dist/internal/controlled-process/supervisor-runtime.d.ts.map +1 -1
- package/dist/internal/controlled-process/supervisor-runtime.js +92 -33
- package/dist/internal/controlled-process/supervisor-schema.d.ts +1 -0
- package/dist/internal/controlled-process/supervisor-schema.d.ts.map +1 -1
- package/dist/internal/controlled-process/supervisor-schema.js +10 -1
- package/dist/internal/controlled-process/supervisor-values.d.ts +4 -0
- package/dist/internal/controlled-process/supervisor-values.d.ts.map +1 -1
- package/dist/internal/controlled-process/supervisor-values.js +4 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlled-process.d.ts","sourceRoot":"","sources":["../../src/core/controlled-process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExE,eAAO,MAAM,8BAA8B;;;;CAIjC,CAAC;AAEX,eAAO,MAAM,uCAAuC;;;CAG1C,CAAC;AAEX,eAAO,MAAM,2BAA2B;;;;CAI9B,CAAC;AAEX,eAAO,MAAM,+BAA+B;;;CAGlC,CAAC;AAEX,eAAO,MAAM,+BAA+B;;;;;;;;;;CAUlC,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAC5C,OAAO,2BAA2B,CACnC,CAAC;AACF,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAChD,OAAO,+BAA+B,CACvC,CAAC;AACF,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAChD,OAAO,+BAA+B,CACvC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,GACvC;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,uCAAuC,CAAC,cAAc,CAAC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,uCAAuC,CAAC,cAAc,CAAC;IAC7E,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CAC1C,CAAC;AAEN,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,gBAAgB,CAAC,QAAQ,EAAE,+BAA+B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5E;AAED,MAAM,MAAM,6BAA6B,GACrC;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,MAAM,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;CAC1C,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,OAAO,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,UAAU,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;CAC/C,CAAC;AAEN,MAAM,MAAM,sBAAsB,GAC9B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,MAAM,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,8BAA8B,CAAC,UAAU,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,4BAA4B,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtC,CAAC;AAEN,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE;QACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;QACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"controlled-process.d.ts","sourceRoot":"","sources":["../../src/core/controlled-process.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Brand, ValueOf } from "@alpacakit/core";
|
|
2
|
-
import type { ChildProcessAbsenceProof } from "../../core/controlled-process.js";
|
|
3
|
-
import type {
|
|
2
|
+
import type { CHILD_PROCESS_ABSENCE_PROOF, ChildProcessAbsenceProof } from "../../core/controlled-process.js";
|
|
3
|
+
import type { SupervisorConvergenceReason } from "./supervisor-model.js";
|
|
4
4
|
import type { CONTROLLED_PROCESS_PLATFORM, CONTROLLED_PROCESS_PROTOCOL_VERSION, CONTROLLED_PROCESS_STATE, SUPERVISOR_AUTHENTICATION_FRAME_KIND, SUPERVISOR_AUTHENTICATION_REJECTION_REASON, SUPERVISOR_AUTHENTICATION_RESULT_KIND, SUPERVISOR_CHALLENGE_STATE_KIND } from "./values.js";
|
|
5
5
|
export type ControlledProcessPlatform = ValueOf<typeof CONTROLLED_PROCESS_PLATFORM>;
|
|
6
6
|
export type ControlledProcessState = ValueOf<typeof CONTROLLED_PROCESS_STATE>;
|
|
@@ -44,6 +44,7 @@ export type ControlledProcessRecord = {
|
|
|
44
44
|
readonly pid: ShimProcessId;
|
|
45
45
|
readonly state: ControlledProcessState;
|
|
46
46
|
readonly absenceProof: PersistedChildProcessAbsenceProof | null;
|
|
47
|
+
readonly convergenceReason: SupervisorConvergenceReason | null;
|
|
47
48
|
};
|
|
48
49
|
export type SignedControlledProcessRecord = {
|
|
49
50
|
readonly record: ControlledProcessRecord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/record.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,KAAK,EACV,uBAAuB,EAEvB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AASpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMpD,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,uBAAuB,GAC9B,MAAM,
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/record.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,KAAK,EACV,uBAAuB,EAEvB,uBAAuB,EACvB,6BAA6B,EAC7B,oBAAoB,EACrB,MAAM,YAAY,CAAC;AASpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMpD,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,uBAAuB,GAC9B,MAAM,CAaR;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,uBAAuB,EAC/B,UAAU,EAAE,oBAAoB,GAC/B,6BAA6B,CAM/B;AAED,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,6BAA6B,GAC1C,MAAM,CAMR;AAED,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,MAAM,GACZ,6BAA6B,CAQ/B;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,uBAAuB,EAC/B,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAST;AAED,wBAAgB,mCAAmC,CACjD,iBAAiB,EAAE,OAAO,EAC1B,aAAa,EAAE,OAAO,GACrB,iBAAiB,IAAI,6BAA6B,CA0BpD;AA0BD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,OAAO,CAAC,OAAO,qBAAqB,CAAC,EAC7C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CAMR;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAQzE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
2
2
|
import { readJsonRecord } from "../../core/json.js";
|
|
3
|
-
import { controlledProcessIdentitySchema,
|
|
3
|
+
import { controlledProcessIdentitySchema, controlledProcessRecordMacSchema, controlledProcessRecordSchema, lowerHex32ByteSchema, signedControlledProcessRecordSchema, } from "./schema.js";
|
|
4
4
|
import { decodeProcessStartToken } from "./token.js";
|
|
5
5
|
import { SUPERVISOR_MAC_DOMAIN } from "./values.js";
|
|
6
6
|
const MAC_ENCODING = "hex";
|
|
@@ -17,6 +17,7 @@ export function encodeCanonicalControlledProcessRecord(record) {
|
|
|
17
17
|
pid: record.pid,
|
|
18
18
|
state: record.state,
|
|
19
19
|
absenceProof: record.absenceProof,
|
|
20
|
+
convergenceReason: record.convergenceReason,
|
|
20
21
|
});
|
|
21
22
|
}
|
|
22
23
|
export function signControlledProcessRecord(record, capability) {
|
|
@@ -7,12 +7,12 @@ export declare const controlledProcessPlatformSchema: z.ZodEnum<{
|
|
|
7
7
|
}>;
|
|
8
8
|
export declare const controlledProcessStateSchema: z.ZodEnum<{
|
|
9
9
|
absent: "absent";
|
|
10
|
+
released: "released";
|
|
10
11
|
reserved: "reserved";
|
|
11
12
|
acked: "acked";
|
|
12
13
|
running: "running";
|
|
13
14
|
term: "term";
|
|
14
15
|
kill_sent: "kill_sent";
|
|
15
|
-
released: "released";
|
|
16
16
|
}>;
|
|
17
17
|
export declare const supervisorBootIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<SupervisorBootId, string>>;
|
|
18
18
|
export declare const supervisorInstanceIdSchema: z.ZodPipe<z.ZodString, z.ZodTransform<SupervisorInstanceId, string>>;
|
|
@@ -42,17 +42,21 @@ export declare const controlledProcessRecordSchema: z.ZodReadonly<z.ZodObject<{
|
|
|
42
42
|
pid: z.ZodPipe<z.ZodNumber, z.ZodTransform<ShimProcessId, number>>;
|
|
43
43
|
state: z.ZodEnum<{
|
|
44
44
|
absent: "absent";
|
|
45
|
+
released: "released";
|
|
45
46
|
reserved: "reserved";
|
|
46
47
|
acked: "acked";
|
|
47
48
|
running: "running";
|
|
48
49
|
term: "term";
|
|
49
50
|
kill_sent: "kill_sent";
|
|
50
|
-
released: "released";
|
|
51
51
|
}>;
|
|
52
52
|
absenceProof: z.ZodNullable<z.ZodEnum<{
|
|
53
53
|
supervisor_probe: "supervisor_probe";
|
|
54
54
|
boot_changed: "boot_changed";
|
|
55
55
|
}>>;
|
|
56
|
+
convergenceReason: z.ZodNullable<z.ZodEnum<{
|
|
57
|
+
socket_ownership_lost: "socket_ownership_lost";
|
|
58
|
+
host_idle_timeout: "host_idle_timeout";
|
|
59
|
+
}>>;
|
|
56
60
|
}, z.core.$strip>>;
|
|
57
61
|
export declare const signedControlledProcessRecordSchema: z.ZodReadonly<z.ZodObject<{
|
|
58
62
|
record: z.ZodReadonly<z.ZodObject<{
|
|
@@ -68,17 +72,21 @@ export declare const signedControlledProcessRecordSchema: z.ZodReadonly<z.ZodObj
|
|
|
68
72
|
pid: z.ZodPipe<z.ZodNumber, z.ZodTransform<ShimProcessId, number>>;
|
|
69
73
|
state: z.ZodEnum<{
|
|
70
74
|
absent: "absent";
|
|
75
|
+
released: "released";
|
|
71
76
|
reserved: "reserved";
|
|
72
77
|
acked: "acked";
|
|
73
78
|
running: "running";
|
|
74
79
|
term: "term";
|
|
75
80
|
kill_sent: "kill_sent";
|
|
76
|
-
released: "released";
|
|
77
81
|
}>;
|
|
78
82
|
absenceProof: z.ZodNullable<z.ZodEnum<{
|
|
79
83
|
supervisor_probe: "supervisor_probe";
|
|
80
84
|
boot_changed: "boot_changed";
|
|
81
85
|
}>>;
|
|
86
|
+
convergenceReason: z.ZodNullable<z.ZodEnum<{
|
|
87
|
+
socket_ownership_lost: "socket_ownership_lost";
|
|
88
|
+
host_idle_timeout: "host_idle_timeout";
|
|
89
|
+
}>>;
|
|
82
90
|
}, z.core.$strip>>;
|
|
83
91
|
recordMac: z.ZodPipe<z.ZodString, z.ZodTransform<ControlledProcessRecordMac, string>>;
|
|
84
92
|
}, z.core.$strip>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EAEV,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,aAAa,EAEb,2BAA2B,EAC3B,gBAAgB,EAChB,oBAAoB,EAGpB,qBAAqB,EAErB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EAEV,yBAAyB,EACzB,0BAA0B,EAC1B,iBAAiB,EACjB,aAAa,EAEb,2BAA2B,EAC3B,gBAAgB,EAChB,oBAAoB,EAGpB,qBAAqB,EAErB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAepB,eAAO,MAAM,oBAAoB,aAA8C,CAAC;AAEhF,eAAO,MAAM,+BAA+B;;;EAE3C,CAAC;AACF,eAAO,MAAM,4BAA4B;;;;;;;;EAExC,CAAC;AAEF,eAAO,MAAM,sBAAsB,kEAElC,CAAC;AACF,eAAO,MAAM,0BAA0B,sEAEtC,CAAC;AACF,eAAO,MAAM,+BAA+B,2EAE3C,CAAC;AACF,eAAO,MAAM,6BAA6B,yEAEzC,CAAC;AACF,eAAO,MAAM,0BAA0B,sEAEtC,CAAC;AACF,eAAO,MAAM,gCAAgC,4EAE5C,CAAC;AACF,eAAO,MAAM,iCAAiC,6EAE7C,CAAC;AACF,eAAO,MAAM,2BAA2B,uEAEvC,CAAC;AACF,eAAO,MAAM,2BAA2B,uEAEvC,CAAC;AACF,eAAO,MAAM,mBAAmB,+DAKe,CAAC;AAEhD,eAAO,MAAM,uBAAuB,mEAGe,CAAC;AAEpD,eAAO,MAAM,+BAA+B;;;kBAGA,CAAC;AAwB7C,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAwBO,CAAC;AAElD,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAGK,CAAC;AAEtD,eAAO,MAAM,+BAA+B;;;;kBAIK,CAAC;AAElD,eAAO,MAAM,yBAAyB;;;;;;kBAMK,CAAC;AAE5C,eAAO,MAAM,2BAA2B;;;;;;;kBAOK,CAAC;AAE9C,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAiBI,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { strictReadonlyObject, stringValueMapSchema } from "@alpacakit/core";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { CHILD_PROCESS_ABSENCE_PROOF, CHILD_PROCESS_TERMINATION_KIND, CHILD_PROCESS_TERMINATION_PHASE, CHILD_PROCESS_UNKILLABLE_REASON, } from "../../core/controlled-process.js";
|
|
4
|
+
import { SUPERVISOR_CONVERGENCE_REASON } from "./supervisor-values.js";
|
|
4
5
|
import { CONTROLLED_PROCESS_PLATFORM, CONTROLLED_PROCESS_PROTOCOL_VERSION, CONTROLLED_PROCESS_STATE, SUPERVISOR_AUTHENTICATION_FRAME_KIND, } from "./values.js";
|
|
5
6
|
const LOWER_HEX_16_BYTE_PATTERN = /^[0-9a-f]{32}$/u;
|
|
6
7
|
const LOWER_HEX_32_BYTE_PATTERN = /^[0-9a-f]{64}$/u;
|
|
@@ -47,6 +48,12 @@ const controlledProcessRecordShape = strictReadonlyObject({
|
|
|
47
48
|
CHILD_PROCESS_ABSENCE_PROOF.bootChanged,
|
|
48
49
|
])
|
|
49
50
|
.nullable(),
|
|
51
|
+
convergenceReason: z
|
|
52
|
+
.enum([
|
|
53
|
+
SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost,
|
|
54
|
+
SUPERVISOR_CONVERGENCE_REASON.hostIdleTimeout,
|
|
55
|
+
])
|
|
56
|
+
.nullable(),
|
|
50
57
|
});
|
|
51
58
|
export const controlledProcessRecordSchema = controlledProcessRecordShape.superRefine((record, context) => {
|
|
52
59
|
const terminal = record.state === CONTROLLED_PROCESS_STATE.absent ||
|
|
@@ -57,6 +64,16 @@ export const controlledProcessRecordSchema = controlledProcessRecordShape.superR
|
|
|
57
64
|
message: "Controlled process absence proof does not match state.",
|
|
58
65
|
});
|
|
59
66
|
}
|
|
67
|
+
if (record.convergenceReason !== null &&
|
|
68
|
+
record.state !== CONTROLLED_PROCESS_STATE.term &&
|
|
69
|
+
record.state !== CONTROLLED_PROCESS_STATE.killSent &&
|
|
70
|
+
record.state !== CONTROLLED_PROCESS_STATE.absent &&
|
|
71
|
+
record.state !== CONTROLLED_PROCESS_STATE.released) {
|
|
72
|
+
context.addIssue({
|
|
73
|
+
code: "custom",
|
|
74
|
+
message: "Controlled process convergence reason requires a termination state.",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
60
77
|
});
|
|
61
78
|
export const signedControlledProcessRecordSchema = strictReadonlyObject({
|
|
62
79
|
record: controlledProcessRecordSchema,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ChildProcessTerminationResult } from "../../core/controlled-process.js";
|
|
2
2
|
import type { ExecExit } from "../../core/ports.js";
|
|
3
3
|
import type { ControlledProcessRecord, SignedControlledProcessRecord, SupervisorCapability } from "./model.js";
|
|
4
|
+
import type { SupervisorConvergenceReason, SupervisorTimingOptions } from "./supervisor-model.js";
|
|
4
5
|
import type { SupervisorPlatformAdapter } from "./supervisor-platform.js";
|
|
5
|
-
import type { SupervisorTimingOptions } from "./supervisor-model.js";
|
|
6
6
|
export interface SupervisorRecordWriter {
|
|
7
7
|
write(record: SignedControlledProcessRecord): Promise<void>;
|
|
8
8
|
}
|
|
@@ -20,6 +20,7 @@ export declare class SupervisorCoordinator {
|
|
|
20
20
|
private groupAbsentObserved;
|
|
21
21
|
private absencePersistenceFailed;
|
|
22
22
|
private terminationRequested;
|
|
23
|
+
private terminationConvergenceReason;
|
|
23
24
|
private sigkillSentHere;
|
|
24
25
|
private termDeadline;
|
|
25
26
|
private killDeadline;
|
|
@@ -49,7 +50,7 @@ export declare class SupervisorCoordinator {
|
|
|
49
50
|
abortBeforeAck(): Promise<void>;
|
|
50
51
|
recordProtocolFailure(): Promise<void>;
|
|
51
52
|
tick(): Promise<void>;
|
|
52
|
-
terminate(): Promise<ChildProcessTerminationResult>;
|
|
53
|
+
terminate(convergenceReason: SupervisorConvergenceReason | null): Promise<ChildProcessTerminationResult>;
|
|
53
54
|
probe(): Promise<ChildProcessTerminationResult>;
|
|
54
55
|
workerExitEvidence(): ExecExit | null;
|
|
55
56
|
release(): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor-coordinator.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAE9B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor-coordinator.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CHILD_PROCESS_ABSENCE_PROOF, CHILD_PROCESS_TERMINATION_KIND, CHILD_PROCESS_TERMINATION_PHASE, CHILD_PROCESS_UNKILLABLE_REASON, } from "../../core/controlled-process.js";
|
|
2
|
+
import { transitionControlledProcess } from "./lifecycle.js";
|
|
2
3
|
import { signControlledProcessRecord } from "./record.js";
|
|
3
4
|
import { PROCESS_PROBE_KIND, PROCESS_SIGNAL_RESULT_KIND, } from "./supervisor-values.js";
|
|
4
|
-
import { transitionControlledProcess } from "./lifecycle.js";
|
|
5
5
|
import { CONTROLLED_PROCESS_PLATFORM, CONTROLLED_PROCESS_STATE, } from "./values.js";
|
|
6
6
|
export class SupervisorCoordinator {
|
|
7
7
|
record;
|
|
@@ -17,6 +17,7 @@ export class SupervisorCoordinator {
|
|
|
17
17
|
groupAbsentObserved = false;
|
|
18
18
|
absencePersistenceFailed = false;
|
|
19
19
|
terminationRequested = false;
|
|
20
|
+
terminationConvergenceReason = null;
|
|
20
21
|
sigkillSentHere = false;
|
|
21
22
|
termDeadline = 0;
|
|
22
23
|
killDeadline = 0;
|
|
@@ -103,9 +104,10 @@ export class SupervisorCoordinator {
|
|
|
103
104
|
tick() {
|
|
104
105
|
return this.enqueue(async () => this.converge());
|
|
105
106
|
}
|
|
106
|
-
terminate() {
|
|
107
|
+
terminate(convergenceReason) {
|
|
107
108
|
return this.enqueueResult(async () => {
|
|
108
109
|
this.terminationRequested = true;
|
|
110
|
+
this.terminationConvergenceReason ??= convergenceReason;
|
|
109
111
|
if (this.record.state === CONTROLLED_PROCESS_STATE.running &&
|
|
110
112
|
!this.groupAbsentObserved &&
|
|
111
113
|
this.unkillableReason === null) {
|
|
@@ -299,6 +301,10 @@ export class SupervisorCoordinator {
|
|
|
299
301
|
: next === CONTROLLED_PROCESS_STATE.released
|
|
300
302
|
? this.record.absenceProof
|
|
301
303
|
: null,
|
|
304
|
+
convergenceReason: next === CONTROLLED_PROCESS_STATE.term &&
|
|
305
|
+
this.terminationConvergenceReason !== null
|
|
306
|
+
? this.terminationConvergenceReason
|
|
307
|
+
: this.record.convergenceReason,
|
|
302
308
|
};
|
|
303
309
|
try {
|
|
304
310
|
await this.store.write(signControlledProcessRecord(transitioned, this.capability));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ValueOf } from "@alpacakit/core";
|
|
2
2
|
import type { ChildProcessIdentity, ChildProcessTerminationResult } from "../../core/controlled-process.js";
|
|
3
3
|
import type { ExecExit } from "../../core/ports.js";
|
|
4
|
-
import type { OUTPUT_CHANNEL_KIND, PROCESS_PROBE_KIND, PROCESS_SIGNAL_RESULT_KIND, SHIM_FRAME_KIND, SUPERVISOR_BOOTSTRAP_FRAME_KIND, SUPERVISOR_REQUEST_KIND, SUPERVISOR_RESPONSE_KIND } from "./supervisor-values.js";
|
|
4
|
+
import type { OUTPUT_CHANNEL_KIND, PROCESS_PROBE_KIND, PROCESS_SIGNAL_RESULT_KIND, SHIM_FRAME_KIND, SUPERVISOR_BOOTSTRAP_FRAME_KIND, SUPERVISOR_CONVERGENCE_REASON, SUPERVISOR_REQUEST_KIND, SUPERVISOR_RESPONSE_KIND } from "./supervisor-values.js";
|
|
5
5
|
export type SupervisorWorkerOptions = {
|
|
6
6
|
readonly command: string;
|
|
7
7
|
readonly args: readonly string[];
|
|
@@ -15,7 +15,9 @@ export type SupervisorTimingOptions = {
|
|
|
15
15
|
readonly termGraceMs: number;
|
|
16
16
|
readonly killProbeTimeoutMs: number;
|
|
17
17
|
readonly probeIntervalMs: number;
|
|
18
|
+
readonly hostIdleTimeoutMs: number;
|
|
18
19
|
};
|
|
20
|
+
export type SupervisorConvergenceReason = ValueOf<typeof SUPERVISOR_CONVERGENCE_REASON>;
|
|
19
21
|
export type SupervisorBootstrap = {
|
|
20
22
|
readonly kind: typeof SUPERVISOR_BOOTSTRAP_FRAME_KIND.bootstrap;
|
|
21
23
|
readonly runtimeDirectory: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor-model.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,+BAA+B,EAC/B,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor-model.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EACV,oBAAoB,EACpB,6BAA6B,EAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,eAAe,EACf,+BAA+B,EAC/B,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,OAAO,6BAA6B,CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,+BAA+B,CAAC,SAAS,CAAC;IAChE,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,+BAA+B,CAAC,OAAO,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,IAAI,EAAE,OAAO,+BAA+B,CAAC,QAAQ,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,+BAA+B,CAAC,YAAY,CAAC;IACnE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,SAAS,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,GAAG,CAAA;CAAE,CAAC;AAEpE,MAAM,MAAM,WAAW,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,OAAO,CAAA;CAAE,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,OAAO,eAAe,CAAC,UAAU,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,uBAAuB,CAAC,KAAK,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,uBAAuB,CAAC,SAAS,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,uBAAuB,CAAC,OAAO,CAAA;CAAE,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,wBAAwB,CAAC,WAAW,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;CACtC,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,wBAAwB,CAAC,QAAQ,CAAA;CAAE,GAC3D;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,wBAAwB,CAAC,mBAAmB,CAAC;CACpE,CAAC;AAEN,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,kBAAkB,CAAC,KAAK,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,kBAAkB,CAAC,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,kBAAkB,CAAC,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,0BAA0B,CAAC,IAAI,CAAA;CAAE,GACzD;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAA;CAAE,GAC3D;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,0BAA0B,CAAC,MAAM,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAEN,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,mBAAmB,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor-runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4BtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor-runtime.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4BtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAepE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AA0CnE,KAAK,6BAA6B,GAAG;IACnC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,oBAAoB,CAAC,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,wBAAwB,CAAC,CACvB,MAAM,EAAE,sBAAsB,GAC7B,UAAU,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAAC;CACnD,CAAC;AAaF,wBAAsB,8BAA8B,CAClD,YAAY,GAAE,6BAA+D,GAC5E,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
|
@@ -11,7 +11,7 @@ import { SupervisorCoordinator } from "./supervisor-coordinator.js";
|
|
|
11
11
|
import { createSupervisorPlatformAdapter } from "./supervisor-platform.js";
|
|
12
12
|
import { shimRunningSchema, supervisorBootstrapSchema, supervisorHostAckSchema, workerExitSchema, } from "./supervisor-schema.js";
|
|
13
13
|
import { SupervisorSocketServer } from "./supervisor-transport.js";
|
|
14
|
-
import { PROCESS_PROBE_KIND, SHIM_FRAME_KIND, SUPERVISOR_BOOTSTRAP_FRAME_KIND, SUPERVISOR_REQUEST_KIND, SUPERVISOR_RESPONSE_KIND, } from "./supervisor-values.js";
|
|
14
|
+
import { PROCESS_PROBE_KIND, SHIM_FRAME_KIND, SUPERVISOR_BOOTSTRAP_FRAME_KIND, SUPERVISOR_CONVERGENCE_REASON, SUPERVISOR_REQUEST_KIND, SUPERVISOR_RESPONSE_KIND, } from "./supervisor-values.js";
|
|
15
15
|
import { encodeProcessStartToken } from "./token.js";
|
|
16
16
|
import { CONTROLLED_PROCESS_PROTOCOL_VERSION, CONTROLLED_PROCESS_STATE, } from "./values.js";
|
|
17
17
|
const HOST_BOOTSTRAP_FD = 3;
|
|
@@ -84,6 +84,7 @@ async function runSupervisorSession(input) {
|
|
|
84
84
|
let rollbackAttempted = false;
|
|
85
85
|
let ownershipLossObserved = false;
|
|
86
86
|
let ownershipLossPromise = null;
|
|
87
|
+
let hostIdleDeadline = null;
|
|
87
88
|
const localCoordinatorOperations = [];
|
|
88
89
|
let releaseSupervisor = () => { };
|
|
89
90
|
const released = new Promise((resolve) => {
|
|
@@ -112,16 +113,27 @@ async function runSupervisorSession(input) {
|
|
|
112
113
|
await lifecycleMonitorInFlight;
|
|
113
114
|
}
|
|
114
115
|
};
|
|
115
|
-
const
|
|
116
|
+
const recordHostActivity = (activity) => {
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
if (!isHostActivityEvidence({
|
|
119
|
+
activity,
|
|
120
|
+
now,
|
|
121
|
+
hostIdleDeadline,
|
|
122
|
+
convergenceStarted: ownershipLossObserved,
|
|
123
|
+
})) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
hostIdleDeadline = boundedDeadline(now, input.bootstrap.timing.hostIdleTimeoutMs);
|
|
127
|
+
return true;
|
|
128
|
+
};
|
|
129
|
+
const startOwnershipLossConvergence = (reason) => {
|
|
116
130
|
ownershipLossObserved = true;
|
|
117
131
|
ownershipLossPromise ??= containOwnershipLossFailure((async () => {
|
|
118
132
|
const deadline = Date.now() + supervisorTerminationBudget(input.bootstrap.timing);
|
|
119
133
|
stopLifecycleMonitor();
|
|
120
134
|
input.hostInput.destroy();
|
|
121
135
|
await beforeOwnershipLossDeadline(Promise.all([
|
|
122
|
-
settleOwnershipLossHostOutput(input.hostOutput, identityDelivered
|
|
123
|
-
? "Supervisor socket ownership was lost."
|
|
124
|
-
: "Supervisor socket ownership was lost before process launch."),
|
|
136
|
+
settleOwnershipLossHostOutput(input.hostOutput, convergenceDescription(reason, identityDelivered)),
|
|
125
137
|
server.settleAcceptedSessions(),
|
|
126
138
|
]).then(() => undefined), deadline, "Supervisor ownership-loss host output or session drain timed out.");
|
|
127
139
|
const persistReceipt = initialPersistReceipt;
|
|
@@ -155,6 +167,7 @@ async function runSupervisorSession(input) {
|
|
|
155
167
|
hostInput: input.hostInput,
|
|
156
168
|
hostOutput: input.hostOutput,
|
|
157
169
|
timing: input.bootstrap.timing,
|
|
170
|
+
reason,
|
|
158
171
|
deadline,
|
|
159
172
|
stopLifecycleMonitor,
|
|
160
173
|
settleLifecycleMonitor,
|
|
@@ -168,7 +181,7 @@ async function runSupervisorSession(input) {
|
|
|
168
181
|
if (ownership.kind !== "ownership_lost") {
|
|
169
182
|
return;
|
|
170
183
|
}
|
|
171
|
-
void startOwnershipLossConvergence();
|
|
184
|
+
void startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost);
|
|
172
185
|
if (rejectOperationOnLoss) {
|
|
173
186
|
throw new Error("Supervisor socket ownership was lost.");
|
|
174
187
|
}
|
|
@@ -180,7 +193,13 @@ async function runSupervisorSession(input) {
|
|
|
180
193
|
const operation = (async () => {
|
|
181
194
|
const ownership = await server.observeOwnership();
|
|
182
195
|
if (ownership.kind === "ownership_lost") {
|
|
183
|
-
void startOwnershipLossConvergence();
|
|
196
|
+
void startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (ready &&
|
|
200
|
+
hostIdleDeadline !== null &&
|
|
201
|
+
Date.now() >= hostIdleDeadline) {
|
|
202
|
+
void startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.hostIdleTimeout);
|
|
184
203
|
return;
|
|
185
204
|
}
|
|
186
205
|
if (coordinatorTickEnabled && coordinator !== null) {
|
|
@@ -201,7 +220,7 @@ async function runSupervisorSession(input) {
|
|
|
201
220
|
await server.listen();
|
|
202
221
|
const initialOwnership = await server.observeOwnership();
|
|
203
222
|
if (initialOwnership.kind === "ownership_lost") {
|
|
204
|
-
await startOwnershipLossConvergence();
|
|
223
|
+
await startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost);
|
|
205
224
|
}
|
|
206
225
|
lifecycleMonitor = setInterval(runLifecycleMonitor, input.bootstrap.timing.probeIntervalMs);
|
|
207
226
|
try {
|
|
@@ -221,6 +240,7 @@ async function runSupervisorSession(input) {
|
|
|
221
240
|
pid,
|
|
222
241
|
state: CONTROLLED_PROCESS_STATE.reserved,
|
|
223
242
|
absenceProof: null,
|
|
243
|
+
convergenceReason: null,
|
|
224
244
|
};
|
|
225
245
|
coordinator = new SupervisorCoordinator({
|
|
226
246
|
record,
|
|
@@ -252,6 +272,10 @@ async function runSupervisorSession(input) {
|
|
|
252
272
|
};
|
|
253
273
|
requestHandler = async (request) => {
|
|
254
274
|
await observeOwnership(true);
|
|
275
|
+
if (!recordHostActivity({ kind: "socket_request", request })) {
|
|
276
|
+
void startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.hostIdleTimeout);
|
|
277
|
+
throw new Error("Supervisor host idle deadline elapsed.");
|
|
278
|
+
}
|
|
255
279
|
const response = await handleRequest(activeCoordinator, request.kind);
|
|
256
280
|
await observeOwnership(false);
|
|
257
281
|
return response;
|
|
@@ -299,7 +323,7 @@ async function runSupervisorSession(input) {
|
|
|
299
323
|
shimClosed,
|
|
300
324
|
probeIntervalMs: input.bootstrap.timing.probeIntervalMs,
|
|
301
325
|
timeoutMs: supervisorTerminationBudget(input.bootstrap.timing),
|
|
302
|
-
onOwnershipLoss: startOwnershipLossConvergence,
|
|
326
|
+
onOwnershipLoss: () => startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost),
|
|
303
327
|
stopLifecycleMonitor,
|
|
304
328
|
settleLifecycleMonitor,
|
|
305
329
|
});
|
|
@@ -315,6 +339,7 @@ async function runSupervisorSession(input) {
|
|
|
315
339
|
await observeOwnership(false);
|
|
316
340
|
coordinatorTickEnabled = true;
|
|
317
341
|
ready = true;
|
|
342
|
+
recordHostActivity({ kind: "ready" });
|
|
318
343
|
await closeHostOutput(input.hostOutput);
|
|
319
344
|
input.hostInput.destroy();
|
|
320
345
|
await released;
|
|
@@ -325,7 +350,7 @@ async function runSupervisorSession(input) {
|
|
|
325
350
|
const finalization = await (input.dependencies.finalizeSupervisorSocket ??
|
|
326
351
|
SUPERVISOR_RUNTIME_DEPENDENCIES.finalizeSupervisorSocket)(server);
|
|
327
352
|
if (finalization.kind === "ownership_lost") {
|
|
328
|
-
await startOwnershipLossConvergence();
|
|
353
|
+
await startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost);
|
|
329
354
|
}
|
|
330
355
|
shimControl.destroy();
|
|
331
356
|
shimStatus.destroy();
|
|
@@ -362,7 +387,7 @@ async function runSupervisorSession(input) {
|
|
|
362
387
|
shimClosed,
|
|
363
388
|
probeIntervalMs: input.bootstrap.timing.probeIntervalMs,
|
|
364
389
|
timeoutMs: supervisorTerminationBudget(input.bootstrap.timing),
|
|
365
|
-
onOwnershipLoss: startOwnershipLossConvergence,
|
|
390
|
+
onOwnershipLoss: () => startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost),
|
|
366
391
|
stopLifecycleMonitor,
|
|
367
392
|
settleLifecycleMonitor,
|
|
368
393
|
});
|
|
@@ -374,7 +399,7 @@ async function runSupervisorSession(input) {
|
|
|
374
399
|
const finalization = await (input.dependencies.finalizeSupervisorSocket ??
|
|
375
400
|
SUPERVISOR_RUNTIME_DEPENDENCIES.finalizeSupervisorSocket)(server);
|
|
376
401
|
if (finalization.kind === "ownership_lost") {
|
|
377
|
-
await startOwnershipLossConvergence();
|
|
402
|
+
await startOwnershipLossConvergence(SUPERVISOR_CONVERGENCE_REASON.socketOwnershipLost);
|
|
378
403
|
}
|
|
379
404
|
}
|
|
380
405
|
stopLifecycleMonitor();
|
|
@@ -441,7 +466,7 @@ async function rollbackPreReadySupervisor(input) {
|
|
|
441
466
|
}
|
|
442
467
|
let result;
|
|
443
468
|
if (input.coordinatorAckMayHaveCommitted) {
|
|
444
|
-
result = await input.coordinator.terminate();
|
|
469
|
+
result = await input.coordinator.terminate(null);
|
|
445
470
|
}
|
|
446
471
|
else {
|
|
447
472
|
await input.coordinator.abortBeforeAck();
|
|
@@ -470,7 +495,7 @@ async function convergeAfterOwnershipLoss(input) {
|
|
|
470
495
|
}
|
|
471
496
|
let result;
|
|
472
497
|
if (input.coordinatorAckMayHaveCommitted()) {
|
|
473
|
-
result = await beforeOwnershipLossDeadline(input.coordinator.terminate(), input.deadline, "Supervisor ownership-loss termination did not settle.");
|
|
498
|
+
result = await beforeOwnershipLossDeadline(input.coordinator.terminate(input.reason), input.deadline, "Supervisor ownership-loss termination did not settle.");
|
|
474
499
|
}
|
|
475
500
|
else {
|
|
476
501
|
await beforeOwnershipLossDeadline(input.coordinator.abortBeforeAck(), input.deadline, "Supervisor ownership-loss rollback did not settle.");
|
|
@@ -485,10 +510,11 @@ async function convergeAfterOwnershipLoss(input) {
|
|
|
485
510
|
}
|
|
486
511
|
await beforeOwnershipLossDeadline(input.shimClosed, input.deadline, "Supervisor ownership-loss shim close did not settle.");
|
|
487
512
|
await beforeOwnershipLossDeadline(input.settleLocalCoordinatorOperations(), input.deadline, "Supervisor ownership-loss local operations did not settle.");
|
|
488
|
-
|
|
513
|
+
const abandonHostOutput = input.reason === SUPERVISOR_CONVERGENCE_REASON.hostIdleTimeout;
|
|
514
|
+
endAttachedOutput(abandonHostOutput);
|
|
489
515
|
input.shimControl.destroy();
|
|
490
516
|
input.shimStatus.destroy();
|
|
491
|
-
await beforeOwnershipLossDeadline(settleAttachedOutput(), input.deadline, "Supervisor ownership-loss attached output did not settle.");
|
|
517
|
+
await beforeOwnershipLossDeadline(settleAttachedOutput(abandonHostOutput), input.deadline, "Supervisor ownership-loss attached output did not settle.");
|
|
492
518
|
await beforeOwnershipLossDeadline(input.settleLifecycleMonitor(), input.deadline, "Supervisor ownership-loss lifecycle monitor did not settle.");
|
|
493
519
|
return selfSigkill();
|
|
494
520
|
}
|
|
@@ -497,6 +523,32 @@ function settleOwnershipLossHostOutput(hostOutput, reason) {
|
|
|
497
523
|
? writeLaunchFailure(hostOutput, reason)
|
|
498
524
|
: hostOutput.closePromise;
|
|
499
525
|
}
|
|
526
|
+
function isHostActivityEvidence(input) {
|
|
527
|
+
if (input.convergenceStarted) {
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
530
|
+
if (input.activity.kind === "ready") {
|
|
531
|
+
return true;
|
|
532
|
+
}
|
|
533
|
+
const beforeDeadline = input.hostIdleDeadline === null || input.now < input.hostIdleDeadline;
|
|
534
|
+
switch (input.activity.request.kind) {
|
|
535
|
+
case SUPERVISOR_REQUEST_KIND.probe:
|
|
536
|
+
case SUPERVISOR_REQUEST_KIND.terminate:
|
|
537
|
+
case SUPERVISOR_REQUEST_KIND.release:
|
|
538
|
+
return beforeDeadline;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
function boundedDeadline(now, durationMs) {
|
|
542
|
+
return Math.min(Number.MAX_SAFE_INTEGER, now + durationMs);
|
|
543
|
+
}
|
|
544
|
+
function convergenceDescription(reason, identityDelivered) {
|
|
545
|
+
if (reason === SUPERVISOR_CONVERGENCE_REASON.hostIdleTimeout) {
|
|
546
|
+
return "Supervisor host idle deadline elapsed.";
|
|
547
|
+
}
|
|
548
|
+
return identityDelivered
|
|
549
|
+
? "Supervisor socket ownership was lost."
|
|
550
|
+
: "Supervisor socket ownership was lost before process launch.";
|
|
551
|
+
}
|
|
500
552
|
async function waitForRuntimeGroupAbsence(input) {
|
|
501
553
|
for (;;) {
|
|
502
554
|
const probe = input.platform.probeGroup(input.pid);
|
|
@@ -630,7 +682,7 @@ async function handleRequest(coordinator, kind) {
|
|
|
630
682
|
};
|
|
631
683
|
}
|
|
632
684
|
if (kind === SUPERVISOR_REQUEST_KIND.terminate) {
|
|
633
|
-
const result = await coordinator.terminate();
|
|
685
|
+
const result = await coordinator.terminate(null);
|
|
634
686
|
return {
|
|
635
687
|
kind: SUPERVISOR_RESPONSE_KIND.termination,
|
|
636
688
|
result,
|
|
@@ -699,7 +751,7 @@ function isWritableSinkLive(writable) {
|
|
|
699
751
|
function makeAttachedOutputNonFatal(writable) {
|
|
700
752
|
writable.on("error", () => { });
|
|
701
753
|
}
|
|
702
|
-
function endAttachedOutput() {
|
|
754
|
+
function endAttachedOutput(abandon = false) {
|
|
703
755
|
if (attachedOutputSettlement !== null) {
|
|
704
756
|
return;
|
|
705
757
|
}
|
|
@@ -707,32 +759,39 @@ function endAttachedOutput() {
|
|
|
707
759
|
waitForWritableFinish(ATTACHED_STDOUT),
|
|
708
760
|
waitForWritableFinish(ATTACHED_STDERR),
|
|
709
761
|
]).then(() => undefined);
|
|
710
|
-
|
|
711
|
-
|
|
762
|
+
if (abandon) {
|
|
763
|
+
ATTACHED_STDOUT.destroy();
|
|
764
|
+
ATTACHED_STDERR.destroy();
|
|
765
|
+
}
|
|
766
|
+
else {
|
|
767
|
+
ATTACHED_STDOUT.end();
|
|
768
|
+
ATTACHED_STDERR.end();
|
|
769
|
+
}
|
|
712
770
|
}
|
|
713
|
-
async function settleAttachedOutput() {
|
|
714
|
-
endAttachedOutput();
|
|
771
|
+
async function settleAttachedOutput(abandon = false) {
|
|
772
|
+
endAttachedOutput(abandon);
|
|
773
|
+
if (abandon) {
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
715
776
|
await attachedOutputSettlement;
|
|
716
777
|
}
|
|
717
778
|
function waitForWritableFinish(writable) {
|
|
718
|
-
if (writable.writableFinished) {
|
|
779
|
+
if (writable.writableFinished || writable.destroyed || writable.closed) {
|
|
719
780
|
return Promise.resolve();
|
|
720
781
|
}
|
|
721
|
-
return new Promise((resolve
|
|
782
|
+
return new Promise((resolve) => {
|
|
722
783
|
const cleanup = () => {
|
|
723
|
-
writable.off("finish",
|
|
724
|
-
writable.off("error",
|
|
784
|
+
writable.off("finish", resolveSettlement);
|
|
785
|
+
writable.off("error", resolveSettlement);
|
|
786
|
+
writable.off("close", resolveSettlement);
|
|
725
787
|
};
|
|
726
|
-
const
|
|
788
|
+
const resolveSettlement = () => {
|
|
727
789
|
cleanup();
|
|
728
790
|
resolve();
|
|
729
791
|
};
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
};
|
|
734
|
-
writable.once("finish", resolveFinish);
|
|
735
|
-
writable.once("error", rejectError);
|
|
792
|
+
writable.once("finish", resolveSettlement);
|
|
793
|
+
writable.once("error", resolveSettlement);
|
|
794
|
+
writable.once("close", resolveSettlement);
|
|
736
795
|
});
|
|
737
796
|
}
|
|
738
797
|
function requireCapturedStream(stream, name) {
|
|
@@ -14,6 +14,7 @@ export declare const supervisorBootstrapSchema: z.ZodReadonly<z.ZodObject<{
|
|
|
14
14
|
termGraceMs: z.ZodNumber;
|
|
15
15
|
killProbeTimeoutMs: z.ZodNumber;
|
|
16
16
|
probeIntervalMs: z.ZodNumber;
|
|
17
|
+
hostIdleTimeoutMs: z.ZodNumber;
|
|
17
18
|
}, z.core.$strip>>;
|
|
18
19
|
}, z.core.$strip>>;
|
|
19
20
|
export declare const supervisorHostAckSchema: z.ZodReadonly<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor-schema.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"supervisor-schema.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAoDxB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;kBAMK,CAAC;AAE5C,eAAO,MAAM,uBAAuB;;kBAEK,CAAC;AAE1C,eAAO,MAAM,6BAA6B;;;;;;kBAGK,CAAC;AAEhD,eAAO,MAAM,iCAAiC;;;kBAGK,CAAC;AAEpD,eAAO,MAAM,mBAAmB;;;;;;;;;kBAGK,CAAC;AAEtC,eAAO,MAAM,aAAa;;kBAEK,CAAC;AAEhC,eAAO,MAAM,iBAAiB;;kBAEK,CAAC;AAEpC,eAAO,MAAM,gBAAgB;;;;kBAIK,CAAC;AAEnC,eAAO,MAAM,uBAAuB;;;;;;4BAIK,CAAC;AAE1C,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAaK,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { strictReadonlyObject } from "@alpacakit/core";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { SHIM_FRAME_KIND, SUPERVISOR_BOOTSTRAP_FRAME_KIND, SUPERVISOR_REQUEST_KIND, SUPERVISOR_RESPONSE_KIND, } from "./supervisor-values.js";
|
|
4
3
|
import { childProcessTerminationResultSchema, controlledProcessIdentitySchema, } from "./schema.js";
|
|
4
|
+
import { SHIM_FRAME_KIND, SUPERVISOR_BOOTSTRAP_FRAME_KIND, SUPERVISOR_REQUEST_KIND, SUPERVISOR_RESPONSE_KIND, } from "./supervisor-values.js";
|
|
5
5
|
const nonBlankStringSchema = z
|
|
6
6
|
.string()
|
|
7
7
|
.min(1)
|
|
@@ -14,10 +14,19 @@ const workerOptionsSchema = strictReadonlyObject({
|
|
|
14
14
|
env: z.record(z.string(), z.string()).readonly(),
|
|
15
15
|
stdin: z.string().nullable(),
|
|
16
16
|
});
|
|
17
|
+
// A worker that is still running is re-probed every `probeIntervalMs`, and an
|
|
18
|
+
// accepted request is the only thing that resets the idle deadline. An idle
|
|
19
|
+
// timeout at or below that cadence expires between two correct probes, so it
|
|
20
|
+
// converges a live worker instead of an abandoned one. Refusing the pair here
|
|
21
|
+
// keeps that ordering a checked rule rather than a note beside the field.
|
|
17
22
|
const timingOptionsSchema = strictReadonlyObject({
|
|
18
23
|
termGraceMs: durationSchema,
|
|
19
24
|
killProbeTimeoutMs: durationSchema,
|
|
20
25
|
probeIntervalMs: durationSchema,
|
|
26
|
+
hostIdleTimeoutMs: durationSchema,
|
|
27
|
+
}).refine((timing) => timing.hostIdleTimeoutMs > timing.probeIntervalMs, {
|
|
28
|
+
message: "hostIdleTimeoutMs must exceed probeIntervalMs, which is how often a live host re-probes",
|
|
29
|
+
path: ["hostIdleTimeoutMs"],
|
|
21
30
|
});
|
|
22
31
|
export const supervisorBootstrapSchema = strictReadonlyObject({
|
|
23
32
|
kind: z.literal(SUPERVISOR_BOOTSTRAP_FRAME_KIND.bootstrap),
|
|
@@ -32,6 +32,10 @@ export declare const PROCESS_SIGNAL_RESULT_KIND: {
|
|
|
32
32
|
readonly denied: "denied";
|
|
33
33
|
readonly failed: "failed";
|
|
34
34
|
};
|
|
35
|
+
export declare const SUPERVISOR_CONVERGENCE_REASON: {
|
|
36
|
+
readonly socketOwnershipLost: "socket_ownership_lost";
|
|
37
|
+
readonly hostIdleTimeout: "host_idle_timeout";
|
|
38
|
+
};
|
|
35
39
|
export declare const OUTPUT_CHANNEL_KIND: {
|
|
36
40
|
readonly stdout: "stdout";
|
|
37
41
|
readonly stderr: "stderr";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor-values.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-values.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B;;;;;CAKlC,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAEX,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"supervisor-values.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-values.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,+BAA+B;;;;;CAKlC,CAAC;AAEX,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;CAI3B,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC;AAEX,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAEX,eAAO,MAAM,6BAA6B;;;CAGhC,CAAC;AAEX,eAAO,MAAM,mBAAmB;;;CAGtB,CAAC"}
|
|
@@ -32,6 +32,10 @@ export const PROCESS_SIGNAL_RESULT_KIND = {
|
|
|
32
32
|
denied: "denied",
|
|
33
33
|
failed: "failed",
|
|
34
34
|
};
|
|
35
|
+
export const SUPERVISOR_CONVERGENCE_REASON = {
|
|
36
|
+
socketOwnershipLost: "socket_ownership_lost",
|
|
37
|
+
hostIdleTimeout: "host_idle_timeout",
|
|
38
|
+
};
|
|
35
39
|
export const OUTPUT_CHANNEL_KIND = {
|
|
36
40
|
stdout: "stdout",
|
|
37
41
|
stderr: "stderr",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpacakit/agents",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.26",
|
|
4
4
|
"description": "Run AI coding agents programmatically: execute, stream, classify failures, fail over.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"zod": "^4.3.6",
|
|
52
|
-
"@alpacakit/core": "0.1.0-beta.
|
|
52
|
+
"@alpacakit/core": "0.1.0-beta.26"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"typescript": "^5.9.3",
|