@alpacakit/agents 0.1.0-beta.25 → 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.
Files changed (24) hide show
  1. package/README.md +2 -0
  2. package/dist/core/controlled-process.d.ts +1 -0
  3. package/dist/core/controlled-process.d.ts.map +1 -1
  4. package/dist/internal/controlled-process/model.d.ts +3 -2
  5. package/dist/internal/controlled-process/model.d.ts.map +1 -1
  6. package/dist/internal/controlled-process/record.d.ts.map +1 -1
  7. package/dist/internal/controlled-process/record.js +2 -1
  8. package/dist/internal/controlled-process/schema.d.ts +11 -3
  9. package/dist/internal/controlled-process/schema.d.ts.map +1 -1
  10. package/dist/internal/controlled-process/schema.js +17 -0
  11. package/dist/internal/controlled-process/supervisor-coordinator.d.ts +3 -2
  12. package/dist/internal/controlled-process/supervisor-coordinator.d.ts.map +1 -1
  13. package/dist/internal/controlled-process/supervisor-coordinator.js +8 -2
  14. package/dist/internal/controlled-process/supervisor-model.d.ts +3 -1
  15. package/dist/internal/controlled-process/supervisor-model.d.ts.map +1 -1
  16. package/dist/internal/controlled-process/supervisor-runtime.d.ts.map +1 -1
  17. package/dist/internal/controlled-process/supervisor-runtime.js +92 -33
  18. package/dist/internal/controlled-process/supervisor-schema.d.ts +1 -0
  19. package/dist/internal/controlled-process/supervisor-schema.d.ts.map +1 -1
  20. package/dist/internal/controlled-process/supervisor-schema.js +10 -1
  21. package/dist/internal/controlled-process/supervisor-values.d.ts +4 -0
  22. package/dist/internal/controlled-process/supervisor-values.d.ts.map +1 -1
  23. package/dist/internal/controlled-process/supervisor-values.js +4 -0
  24. package/package.json +2 -2
package/README.md CHANGED
@@ -83,6 +83,8 @@ const controlledExec = createControlledExec({
83
83
  termGraceMs: 5_000,
84
84
  killProbeTimeoutMs: 5_000,
85
85
  probeIntervalMs: 50,
86
+ // The host owns this: exceed its measured restart and reconnect budget.
87
+ hostIdleTimeoutMs: 60_000,
86
88
  },
87
89
  });
88
90
 
@@ -81,6 +81,7 @@ export type ControlledExecOptions = {
81
81
  readonly termGraceMs: number;
82
82
  readonly killProbeTimeoutMs: number;
83
83
  readonly probeIntervalMs: number;
84
+ readonly hostIdleTimeoutMs: number;
84
85
  };
85
86
  };
86
87
  export interface ControlledExecProcess {
@@ -1 +1 @@
1
- {"version":3,"file":"controlled-process.d.ts","sourceRoot":"","sources":["../../src/core/controlled-process.ts"],"names":[],"mappings":"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"}
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 { CHILD_PROCESS_ABSENCE_PROOF } from "../../core/controlled-process.js";
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":"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"}
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,CAYR;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
+ {"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, controlledProcessRecordSchema, controlledProcessRecordMacSchema, lowerHex32ByteSchema, signedControlledProcessRecordSchema, } from "./schema.js";
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;AAcpB,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;AAkB7C,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;kBAWO,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
+ {"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":"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"}
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":"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"}
1
+ {"version":3,"file":"supervisor-model.d.ts","sourceRoot":"","sources":["../../../src/internal/controlled-process/supervisor-model.ts"],"names":[],"mappings":"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"}
@@ -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;AAcpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAqCnE,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"}
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 startOwnershipLossConvergence = () => {
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
- endAttachedOutput();
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
- ATTACHED_STDOUT.end();
711
- ATTACHED_STDERR.end();
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, reject) => {
782
+ return new Promise((resolve) => {
722
783
  const cleanup = () => {
723
- writable.off("finish", resolveFinish);
724
- writable.off("error", rejectError);
784
+ writable.off("finish", resolveSettlement);
785
+ writable.off("error", resolveSettlement);
786
+ writable.off("close", resolveSettlement);
725
787
  };
726
- const resolveFinish = () => {
788
+ const resolveSettlement = () => {
727
789
  cleanup();
728
790
  resolve();
729
791
  };
730
- const rejectError = (error) => {
731
- cleanup();
732
- reject(error);
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;AA0CxB,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
+ {"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.25",
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.25"
52
+ "@alpacakit/core": "0.1.0-beta.26"
53
53
  },
54
54
  "devDependencies": {
55
55
  "typescript": "^5.9.3",