@acpus/runtime 0.8.0 → 0.9.0-alpha.0

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 (289) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/admission/input.d.ts +5 -0
  3. package/dist/admission/input.d.ts.map +1 -0
  4. package/dist/admission/input.js +17 -0
  5. package/dist/admission/input.js.map +1 -0
  6. package/dist/artifacts/rewrite.d.ts +7 -0
  7. package/dist/artifacts/rewrite.d.ts.map +1 -0
  8. package/dist/artifacts/rewrite.js +28 -0
  9. package/dist/artifacts/rewrite.js.map +1 -0
  10. package/dist/control/agent-overrides.d.ts +4 -0
  11. package/dist/control/agent-overrides.d.ts.map +1 -0
  12. package/dist/control/agent-overrides.js +40 -0
  13. package/dist/control/agent-overrides.js.map +1 -0
  14. package/dist/daemon/loop.d.ts +16 -0
  15. package/dist/daemon/loop.d.ts.map +1 -0
  16. package/dist/daemon/loop.js +191 -0
  17. package/dist/daemon/loop.js.map +1 -0
  18. package/dist/daemon/sessions.d.ts +23 -0
  19. package/dist/daemon/sessions.d.ts.map +1 -0
  20. package/dist/daemon/sessions.js +190 -0
  21. package/dist/daemon/sessions.js.map +1 -0
  22. package/dist/daemon/socket.d.ts +82 -0
  23. package/dist/daemon/socket.d.ts.map +1 -0
  24. package/dist/daemon/socket.js +341 -0
  25. package/dist/daemon/socket.js.map +1 -0
  26. package/dist/daemon/tick.d.ts +9 -0
  27. package/dist/daemon/tick.d.ts.map +1 -0
  28. package/dist/daemon/tick.js +18 -0
  29. package/dist/daemon/tick.js.map +1 -0
  30. package/dist/evaluation/admissible.d.ts +2 -0
  31. package/dist/evaluation/admissible.d.ts.map +1 -0
  32. package/dist/evaluation/admissible.js +50 -0
  33. package/dist/evaluation/admissible.js.map +1 -0
  34. package/dist/evaluation/evaluator.d.ts +14 -0
  35. package/dist/evaluation/evaluator.d.ts.map +1 -0
  36. package/dist/evaluation/evaluator.js +34 -0
  37. package/dist/evaluation/evaluator.js.map +1 -0
  38. package/dist/evaluation/loop-limit.d.ts +4 -0
  39. package/dist/evaluation/loop-limit.d.ts.map +1 -0
  40. package/dist/evaluation/loop-limit.js +9 -0
  41. package/dist/evaluation/loop-limit.js.map +1 -0
  42. package/dist/evaluation/schema.d.ts +4 -0
  43. package/dist/evaluation/schema.d.ts.map +1 -0
  44. package/dist/evaluation/schema.js +92 -0
  45. package/dist/evaluation/schema.js.map +1 -0
  46. package/dist/execution/advance.d.ts +18 -0
  47. package/dist/execution/advance.d.ts.map +1 -0
  48. package/dist/execution/advance.js +57 -0
  49. package/dist/execution/advance.js.map +1 -0
  50. package/dist/execution/agent-node.d.ts +23 -0
  51. package/dist/execution/agent-node.d.ts.map +1 -0
  52. package/dist/execution/agent-node.js +512 -0
  53. package/dist/execution/agent-node.js.map +1 -0
  54. package/dist/execution/duration.d.ts +2 -0
  55. package/dist/execution/duration.d.ts.map +1 -0
  56. package/dist/execution/duration.js +15 -0
  57. package/dist/execution/duration.js.map +1 -0
  58. package/dist/execution/ir.d.ts +3 -0
  59. package/dist/execution/ir.d.ts.map +1 -0
  60. package/dist/execution/ir.js +46 -0
  61. package/dist/execution/ir.js.map +1 -0
  62. package/dist/execution/scheduler.d.ts +59 -0
  63. package/dist/execution/scheduler.d.ts.map +1 -0
  64. package/dist/execution/scheduler.js +306 -0
  65. package/dist/execution/scheduler.js.map +1 -0
  66. package/dist/execution/task-executor.d.ts +14 -0
  67. package/dist/execution/task-executor.d.ts.map +1 -0
  68. package/dist/execution/task-executor.js +186 -0
  69. package/dist/execution/task-executor.js.map +1 -0
  70. package/dist/hooks/config.d.ts +32 -0
  71. package/dist/hooks/config.d.ts.map +1 -0
  72. package/dist/hooks/config.js +112 -0
  73. package/dist/hooks/config.js.map +1 -0
  74. package/dist/hooks/context.d.ts +50 -0
  75. package/dist/hooks/context.d.ts.map +1 -0
  76. package/dist/hooks/context.js +116 -0
  77. package/dist/hooks/context.js.map +1 -0
  78. package/dist/hooks/events.d.ts +22 -0
  79. package/dist/hooks/events.d.ts.map +1 -0
  80. package/dist/hooks/events.js +41 -0
  81. package/dist/hooks/events.js.map +1 -0
  82. package/dist/hooks/journal.d.ts +21 -19
  83. package/dist/hooks/journal.d.ts.map +1 -1
  84. package/dist/hooks/journal.js +1 -48
  85. package/dist/hooks/journal.js.map +1 -1
  86. package/dist/hooks/loader.d.ts +33 -39
  87. package/dist/hooks/loader.d.ts.map +1 -1
  88. package/dist/hooks/loader.js +79 -95
  89. package/dist/hooks/loader.js.map +1 -1
  90. package/dist/hooks/runner.d.ts +14 -41
  91. package/dist/hooks/runner.d.ts.map +1 -1
  92. package/dist/hooks/runner.js +177 -145
  93. package/dist/hooks/runner.js.map +1 -1
  94. package/dist/index.d.ts +13 -28
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +13 -33
  97. package/dist/index.js.map +1 -1
  98. package/dist/runs/advance-runtime.d.ts +50 -0
  99. package/dist/runs/advance-runtime.d.ts.map +1 -0
  100. package/dist/runs/advance-runtime.js +82 -0
  101. package/dist/runs/advance-runtime.js.map +1 -0
  102. package/dist/runs/use-cases.d.ts +111 -0
  103. package/dist/runs/use-cases.d.ts.map +1 -0
  104. package/dist/runs/use-cases.js +539 -0
  105. package/dist/runs/use-cases.js.map +1 -0
  106. package/dist/scheduler/advance.d.ts +65 -0
  107. package/dist/scheduler/advance.d.ts.map +1 -0
  108. package/dist/scheduler/advance.js +435 -0
  109. package/dist/scheduler/advance.js.map +1 -0
  110. package/dist/scheduler/control.d.ts +49 -0
  111. package/dist/scheduler/control.d.ts.map +1 -0
  112. package/dist/scheduler/control.js +212 -0
  113. package/dist/scheduler/control.js.map +1 -0
  114. package/dist/scheduler/event-codec.d.ts +4 -0
  115. package/dist/scheduler/event-codec.d.ts.map +1 -0
  116. package/dist/scheduler/event-codec.js +57 -0
  117. package/dist/scheduler/event-codec.js.map +1 -0
  118. package/dist/scheduler/events.d.ts +193 -0
  119. package/dist/scheduler/events.d.ts.map +1 -0
  120. package/dist/scheduler/events.js +13 -0
  121. package/dist/scheduler/events.js.map +1 -0
  122. package/dist/scheduler/fork-seed.d.ts +38 -0
  123. package/dist/scheduler/fork-seed.d.ts.map +1 -0
  124. package/dist/scheduler/fork-seed.js +590 -0
  125. package/dist/scheduler/fork-seed.js.map +1 -0
  126. package/dist/scheduler/identity.d.ts +8 -0
  127. package/dist/scheduler/identity.d.ts.map +1 -0
  128. package/dist/scheduler/identity.js +49 -0
  129. package/dist/scheduler/identity.js.map +1 -0
  130. package/dist/scheduler/ir-walk.d.ts +3 -0
  131. package/dist/scheduler/ir-walk.d.ts.map +1 -0
  132. package/dist/scheduler/ir-walk.js +25 -0
  133. package/dist/scheduler/ir-walk.js.map +1 -0
  134. package/dist/scheduler/limiter.d.ts +7 -0
  135. package/dist/scheduler/limiter.d.ts.map +1 -0
  136. package/dist/scheduler/limiter.js +10 -0
  137. package/dist/scheduler/limiter.js.map +1 -0
  138. package/dist/scheduler/materialize.d.ts +7 -0
  139. package/dist/scheduler/materialize.d.ts.map +1 -0
  140. package/dist/scheduler/materialize.js +756 -0
  141. package/dist/scheduler/materialize.js.map +1 -0
  142. package/dist/scheduler/membership.d.ts +12 -0
  143. package/dist/scheduler/membership.d.ts.map +1 -0
  144. package/dist/scheduler/membership.js +74 -0
  145. package/dist/scheduler/membership.js.map +1 -0
  146. package/dist/scheduler/node-executor.d.ts +15 -0
  147. package/dist/scheduler/node-executor.d.ts.map +1 -0
  148. package/dist/scheduler/node-executor.js +69 -0
  149. package/dist/scheduler/node-executor.js.map +1 -0
  150. package/dist/scheduler/runtime-runner.d.ts +44 -0
  151. package/dist/scheduler/runtime-runner.d.ts.map +1 -0
  152. package/dist/scheduler/runtime-runner.js +155 -0
  153. package/dist/scheduler/runtime-runner.js.map +1 -0
  154. package/dist/scheduler/scope.d.ts +6 -0
  155. package/dist/scheduler/scope.d.ts.map +1 -0
  156. package/dist/scheduler/scope.js +56 -0
  157. package/dist/scheduler/scope.js.map +1 -0
  158. package/dist/scheduler/store-port.d.ts +211 -0
  159. package/dist/scheduler/store-port.d.ts.map +1 -0
  160. package/dist/scheduler/store-port.js +28 -0
  161. package/dist/scheduler/store-port.js.map +1 -0
  162. package/dist/scheduler/transitions.d.ts +89 -0
  163. package/dist/scheduler/transitions.d.ts.map +1 -0
  164. package/dist/scheduler/transitions.js +967 -0
  165. package/dist/scheduler/transitions.js.map +1 -0
  166. package/dist/scheduler/types.d.ts +146 -0
  167. package/dist/scheduler/types.d.ts.map +1 -0
  168. package/dist/{executors → scheduler}/types.js.map +1 -1
  169. package/dist/store/store.d.ts +390 -0
  170. package/dist/store/store.d.ts.map +1 -0
  171. package/dist/store/store.js +3053 -0
  172. package/dist/store/store.js.map +1 -0
  173. package/dist/visualization/overlay.d.ts +86 -0
  174. package/dist/visualization/overlay.d.ts.map +1 -0
  175. package/dist/visualization/overlay.js +161 -0
  176. package/dist/visualization/overlay.js.map +1 -0
  177. package/package.json +19 -37
  178. package/README.md +0 -7
  179. package/dist/agent-telemetry.d.ts +0 -56
  180. package/dist/agent-telemetry.d.ts.map +0 -1
  181. package/dist/agent-telemetry.js +0 -304
  182. package/dist/agent-telemetry.js.map +0 -1
  183. package/dist/artifacts.d.ts +0 -45
  184. package/dist/artifacts.d.ts.map +0 -1
  185. package/dist/artifacts.js +0 -163
  186. package/dist/artifacts.js.map +0 -1
  187. package/dist/attempt-artifacts.d.ts +0 -35
  188. package/dist/attempt-artifacts.d.ts.map +0 -1
  189. package/dist/attempt-artifacts.js +0 -90
  190. package/dist/attempt-artifacts.js.map +0 -1
  191. package/dist/client.d.ts +0 -82
  192. package/dist/client.d.ts.map +0 -1
  193. package/dist/client.js +0 -200
  194. package/dist/client.js.map +0 -1
  195. package/dist/evaluator.d.ts +0 -36
  196. package/dist/evaluator.d.ts.map +0 -1
  197. package/dist/evaluator.js +0 -101
  198. package/dist/evaluator.js.map +0 -1
  199. package/dist/executors/agent.d.ts +0 -103
  200. package/dist/executors/agent.d.ts.map +0 -1
  201. package/dist/executors/agent.js +0 -516
  202. package/dist/executors/agent.js.map +0 -1
  203. package/dist/executors/mock-program.d.ts +0 -26
  204. package/dist/executors/mock-program.d.ts.map +0 -1
  205. package/dist/executors/mock-program.js +0 -100
  206. package/dist/executors/mock-program.js.map +0 -1
  207. package/dist/executors/output-preview.d.ts +0 -2
  208. package/dist/executors/output-preview.d.ts.map +0 -1
  209. package/dist/executors/output-preview.js +0 -20
  210. package/dist/executors/output-preview.js.map +0 -1
  211. package/dist/executors/program.d.ts +0 -30
  212. package/dist/executors/program.d.ts.map +0 -1
  213. package/dist/executors/program.js +0 -230
  214. package/dist/executors/program.js.map +0 -1
  215. package/dist/executors/types.d.ts +0 -32
  216. package/dist/executors/types.d.ts.map +0 -1
  217. package/dist/fork.d.ts +0 -74
  218. package/dist/fork.d.ts.map +0 -1
  219. package/dist/fork.js +0 -278
  220. package/dist/fork.js.map +0 -1
  221. package/dist/hooks/payload.d.ts +0 -17
  222. package/dist/hooks/payload.d.ts.map +0 -1
  223. package/dist/hooks/payload.js +0 -45
  224. package/dist/hooks/payload.js.map +0 -1
  225. package/dist/interpreter.d.ts +0 -168
  226. package/dist/interpreter.d.ts.map +0 -1
  227. package/dist/interpreter.js +0 -1747
  228. package/dist/interpreter.js.map +0 -1
  229. package/dist/keys.d.ts +0 -77
  230. package/dist/keys.d.ts.map +0 -1
  231. package/dist/keys.js +0 -382
  232. package/dist/keys.js.map +0 -1
  233. package/dist/run-control.d.ts +0 -45
  234. package/dist/run-control.d.ts.map +0 -1
  235. package/dist/run-control.js +0 -255
  236. package/dist/run-control.js.map +0 -1
  237. package/dist/run-id.d.ts +0 -3
  238. package/dist/run-id.d.ts.map +0 -1
  239. package/dist/run-id.js +0 -10
  240. package/dist/run-id.js.map +0 -1
  241. package/dist/state-machine.d.ts +0 -31
  242. package/dist/state-machine.d.ts.map +0 -1
  243. package/dist/state-machine.js +0 -102
  244. package/dist/state-machine.js.map +0 -1
  245. package/dist/store.d.ts +0 -92
  246. package/dist/store.d.ts.map +0 -1
  247. package/dist/store.js +0 -420
  248. package/dist/store.js.map +0 -1
  249. package/dist/supervisor-app.d.ts +0 -27
  250. package/dist/supervisor-app.d.ts.map +0 -1
  251. package/dist/supervisor-app.js +0 -694
  252. package/dist/supervisor-app.js.map +0 -1
  253. package/dist/supervisor-discovery.d.ts +0 -18
  254. package/dist/supervisor-discovery.d.ts.map +0 -1
  255. package/dist/supervisor-discovery.js +0 -180
  256. package/dist/supervisor-discovery.js.map +0 -1
  257. package/dist/supervisor-entry.d.ts +0 -11
  258. package/dist/supervisor-entry.d.ts.map +0 -1
  259. package/dist/supervisor-entry.js +0 -50
  260. package/dist/supervisor-entry.js.map +0 -1
  261. package/dist/supervisor-lock.d.ts +0 -26
  262. package/dist/supervisor-lock.d.ts.map +0 -1
  263. package/dist/supervisor-lock.js +0 -49
  264. package/dist/supervisor-lock.js.map +0 -1
  265. package/dist/supervisor-runner.d.ts +0 -11
  266. package/dist/supervisor-runner.d.ts.map +0 -1
  267. package/dist/supervisor-runner.js +0 -128
  268. package/dist/supervisor-runner.js.map +0 -1
  269. package/dist/types.d.ts +0 -375
  270. package/dist/types.d.ts.map +0 -1
  271. package/dist/types.js +0 -7
  272. package/dist/types.js.map +0 -1
  273. package/dist/validate-input.d.ts +0 -27
  274. package/dist/validate-input.d.ts.map +0 -1
  275. package/dist/validate-input.js +0 -56
  276. package/dist/validate-input.js.map +0 -1
  277. package/dist/validate-signal.d.ts +0 -14
  278. package/dist/validate-signal.d.ts.map +0 -1
  279. package/dist/validate-signal.js +0 -31
  280. package/dist/validate-signal.js.map +0 -1
  281. package/dist/workflow-context.d.ts +0 -4
  282. package/dist/workflow-context.d.ts.map +0 -1
  283. package/dist/workflow-context.js +0 -11
  284. package/dist/workflow-context.js.map +0 -1
  285. package/dist/workflow-outputs.d.ts +0 -9
  286. package/dist/workflow-outputs.d.ts.map +0 -1
  287. package/dist/workflow-outputs.js +0 -60
  288. package/dist/workflow-outputs.js.map +0 -1
  289. /package/dist/{executors → scheduler}/types.js +0 -0
@@ -0,0 +1,435 @@
1
+ import { ResultAsync } from "neverthrow";
2
+ import { createConcurrencyLimiter } from "./limiter.js";
3
+ import { ancestorGroupMembersForNode } from "./membership.js";
4
+ import { schedulerStoreError, throwSchedulerStoreResult } from "./store-port.js";
5
+ import { attemptTimeoutEvents, groupCompletionEvents, signalTimeoutEvents } from "./transitions.js";
6
+ import { assertWorkflowData } from "../evaluation/admissible.js";
7
+ const DEFAULT_LEASE_MS = 30_000;
8
+ const DEFAULT_MAX_LEAF_CONCURRENCY = 32;
9
+ export function tryAdvanceRun(input) {
10
+ return ResultAsync.fromPromise(advanceRun(input), error => {
11
+ const storeError = schedulerStoreError(error);
12
+ if (storeError)
13
+ return storeError;
14
+ throw error;
15
+ });
16
+ }
17
+ export async function advanceRun(input) {
18
+ const leaseMs = input.leaseMs ?? DEFAULT_LEASE_MS;
19
+ const claim = input.store.claimRun(input.runId, input.ownerId, leaseMs);
20
+ if (!claim)
21
+ return summary(input.runId, "lease_lost");
22
+ input.onClaim?.(claim);
23
+ try {
24
+ const now = input.now ?? (() => new Date());
25
+ const alreadyTerminal = terminalSummary(unwrapStoreResult(input.store.tryLoadRunSnapshot(input.runId)).projection, claim);
26
+ if (alreadyTerminal)
27
+ return alreadyTerminal;
28
+ appendBootstrapEvents(input, claim);
29
+ const deadlineRecovered = drainDerivedTransitions(input.store, input.runId, claim, now, input.materialize, input.maxAttemptsFor);
30
+ const recovered = unwrapStoreResult(input.store.tryLoadRunSnapshot(deadlineRecovered.runId));
31
+ const expiredOwnerEpochs = [...new Set(Object.values(recovered.projection.attempts)
32
+ .filter(attempt => attempt.status === "started" && attempt.ownerEpoch !== claim.ownerEpoch)
33
+ .map(attempt => attempt.ownerEpoch))];
34
+ for (const ownerEpoch of expiredOwnerEpochs)
35
+ unwrapStoreResult(input.store.tryMarkExpiredOwnerAttemptsSuperseded(input.runId, ownerEpoch));
36
+ const initial = drainDerivedTransitions(input.store, input.runId, claim, now, input.materialize, input.maxAttemptsFor);
37
+ const terminal = terminalSummary(initial.projection, claim);
38
+ if (terminal)
39
+ return terminal;
40
+ const maxLeafConcurrency = input.maxLeafConcurrency ?? DEFAULT_MAX_LEAF_CONCURRENCY;
41
+ const ready = selectReadyInstances(initial.projection, maxLeafConcurrency, input.memberForInstance, input.localConcurrencyLimitFor);
42
+ if (ready.length === 0)
43
+ return idleSummary(initial.projection, claim);
44
+ const waitNow = now();
45
+ const waitEvents = ready.flatMap(instance => input.awaitableEventsFor?.(instance, initial.projection, waitNow) ?? []);
46
+ if (waitEvents.length > 0) {
47
+ unwrapStoreResult(input.store.tryAppendSchedulerEvents({
48
+ runId: input.runId,
49
+ expectedVersion: initial.version,
50
+ ownerEpoch: claim.ownerEpoch,
51
+ idempotencyKey: `scheduler:await:${input.runId}:${initial.version}`,
52
+ events: waitEvents,
53
+ }));
54
+ }
55
+ const executable = waitEvents.length === 0
56
+ ? ready
57
+ : selectReadyInstances(drainDerivedTransitions(input.store, input.runId, claim, now, input.materialize, input.maxAttemptsFor).projection, maxLeafConcurrency, input.memberForInstance, input.localConcurrencyLimitFor);
58
+ if (executable.length === 0) {
59
+ const latest = drainDerivedTransitions(input.store, input.runId, claim, now, input.materialize, input.maxAttemptsFor);
60
+ return terminalSummary(latest.projection, claim) ?? idleSummary(latest.projection, claim);
61
+ }
62
+ const limiter = input.limiter ?? createConcurrencyLimiter(maxLeafConcurrency);
63
+ const counters = { started: 0, completed: 0, failed: 0, cancelled: 0, leaseLost: false };
64
+ const active = new Map();
65
+ const stopHeartbeat = startRunHeartbeat(input.store, claim, leaseMs, counters, active);
66
+ try {
67
+ await Promise.all(executable.map(instance => limiter.add(async () => {
68
+ if (counters.leaseLost)
69
+ return;
70
+ await runInstance(input, claim, now, instance, counters, active);
71
+ if (counters.leaseLost)
72
+ return;
73
+ drainDerivedTransitions(input.store, input.runId, claim, now, input.materialize, input.maxAttemptsFor);
74
+ abortInterruptedActiveAttempts(input.store, input.runId, active);
75
+ })));
76
+ await limiter.onIdle();
77
+ }
78
+ finally {
79
+ stopHeartbeat();
80
+ }
81
+ if (counters.leaseLost) {
82
+ limiter.clear();
83
+ return {
84
+ status: "lease_lost",
85
+ runId: input.runId,
86
+ ownerEpoch: claim.ownerEpoch,
87
+ started: counters.started,
88
+ completed: counters.completed,
89
+ failed: counters.failed,
90
+ cancelled: counters.cancelled,
91
+ active: 0,
92
+ };
93
+ }
94
+ const latest = drainDerivedTransitions(input.store, input.runId, claim, now, input.materialize, input.maxAttemptsFor);
95
+ const terminalAfterWork = terminalSummary(latest.projection, claim);
96
+ if (terminalAfterWork) {
97
+ return { ...terminalAfterWork, started: counters.started, completed: counters.completed, failed: counters.failed, cancelled: counters.cancelled };
98
+ }
99
+ const idle = idleSummary(latest.projection, claim);
100
+ return { ...idle, started: counters.started, completed: counters.completed, failed: counters.failed, cancelled: counters.cancelled };
101
+ }
102
+ finally {
103
+ try {
104
+ input.store.releaseRun(claim);
105
+ }
106
+ finally {
107
+ input.onRelease?.(claim);
108
+ }
109
+ }
110
+ }
111
+ function appendBootstrapEvents(input, claim) {
112
+ if (!input.bootstrap)
113
+ return;
114
+ let snapshot = unwrapStoreResult(input.store.tryLoadRunSnapshot(input.runId));
115
+ for (let attempts = 0; attempts < 2; attempts += 1) {
116
+ const events = input.bootstrap(snapshot);
117
+ if (events.length === 0)
118
+ return;
119
+ const appended = input.store.tryAppendSchedulerEvents({
120
+ runId: input.runId,
121
+ expectedVersion: snapshot.version,
122
+ ownerEpoch: claim.ownerEpoch,
123
+ idempotencyKey: `scheduler:bootstrap:${input.runId}:${snapshot.version}`,
124
+ events,
125
+ });
126
+ if (appended.isOk()) {
127
+ return;
128
+ }
129
+ if (!isVersionMismatchError(appended.error) || attempts === 1)
130
+ unwrapStoreResult(appended);
131
+ snapshot = unwrapStoreResult(input.store.tryLoadRunSnapshot(input.runId));
132
+ }
133
+ }
134
+ export function selectReadyInstances(projection, maxLeafConcurrency, memberForInstance, localConcurrencyLimitFor) {
135
+ const active = Object.values(projection.attempts).filter(attempt => attempt.status === "started").length;
136
+ const available = Math.max(0, maxLeafConcurrency - active);
137
+ if (available === 0)
138
+ return [];
139
+ const localActive = new Map();
140
+ for (const member of Object.values(projection.groupMembers)) {
141
+ if (member.status !== "running")
142
+ continue;
143
+ const limit = localConcurrencyLimitFor?.(member.groupKey, projection);
144
+ if (limit !== undefined)
145
+ localActive.set(member.groupKey, (localActive.get(member.groupKey) ?? 0) + 1);
146
+ }
147
+ const selected = [];
148
+ for (const instance of Object.values(projection.instances).filter(instance => instance.status === "ready").sort(byReadiness)) {
149
+ if (selected.length >= available)
150
+ break;
151
+ const members = membersForReadyInstance(instance, projection, memberForInstance);
152
+ if (members.some(member => member.status !== "ready" && member.status !== "running"))
153
+ continue;
154
+ if (!reserveGroupCapacity(members, projection, localActive, localConcurrencyLimitFor))
155
+ continue;
156
+ selected.push(instance);
157
+ }
158
+ return selected;
159
+ }
160
+ function reserveGroupCapacity(members, projection, localActive, localConcurrencyLimitFor) {
161
+ const reservations = [];
162
+ for (const member of members) {
163
+ if (member.status === "running")
164
+ continue;
165
+ const limit = localConcurrencyLimitFor?.(member.groupKey, projection);
166
+ const used = localActive.get(member.groupKey) ?? 0;
167
+ const pending = reservations.filter(groupKey => groupKey === member.groupKey).length;
168
+ if (limit !== undefined && used + pending >= limit)
169
+ return false;
170
+ reservations.push(member.groupKey);
171
+ }
172
+ for (const groupKey of reservations)
173
+ localActive.set(groupKey, (localActive.get(groupKey) ?? 0) + 1);
174
+ return true;
175
+ }
176
+ export function drainDerivedTransitions(store, runId, claim, now, materialize, maxAttemptsFor) {
177
+ let snapshot = unwrapStoreResult(store.tryLoadRunSnapshot(runId));
178
+ for (;;) {
179
+ const events = retryFailedInstanceEvents(snapshot.projection, maxAttemptsFor);
180
+ if (events.length === 0)
181
+ events.push(...Object.keys(snapshot.projection.groups).flatMap(groupKey => groupCompletionEvents(snapshot.projection, groupKey)));
182
+ if (events.length === 0)
183
+ events.push(...(materialize?.(snapshot) ?? []));
184
+ if (events.length === 0)
185
+ events.push(...attemptTimeoutEvents(snapshot.projection, now()));
186
+ if (events.length === 0)
187
+ events.push(...signalTimeoutEvents(snapshot.projection, now()));
188
+ if (events.length === 0)
189
+ return snapshot;
190
+ snapshot = unwrapStoreResult(store.tryAppendSchedulerEvents({
191
+ runId,
192
+ expectedVersion: snapshot.version,
193
+ ownerEpoch: claim.ownerEpoch,
194
+ idempotencyKey: `scheduler:derived:${runId}:${snapshot.version}`,
195
+ events,
196
+ }));
197
+ }
198
+ }
199
+ function membersForReadyInstance(instance, projection, override) {
200
+ const overridden = override?.(instance, projection);
201
+ return overridden ? [overridden] : ancestorGroupMembersForNode(projection, instance.nodeKey);
202
+ }
203
+ function retryFailedInstanceEvents(projection, maxAttemptsFor) {
204
+ if (!maxAttemptsFor)
205
+ return [];
206
+ for (const instance of Object.values(projection.instances).filter(instance => instance.status === "failed").sort(byReadiness)) {
207
+ const maxAttempts = maxAttemptsFor(instance, projection);
208
+ if (maxAttempts === undefined)
209
+ continue;
210
+ const failedAttempts = Object.values(projection.attempts)
211
+ .filter(attempt => attempt.nodeKey === instance.nodeKey && (attempt.status === "failed" || attempt.status === "timed_out"));
212
+ if (failedAttempts.length >= maxAttempts)
213
+ continue;
214
+ const events = [
215
+ {
216
+ type: "instance.retry_requested",
217
+ payload: {
218
+ nodeKey: instance.nodeKey,
219
+ ...(instance.readinessSequence === undefined ? {} : { readinessSequence: instance.readinessSequence }),
220
+ source: "scheduler",
221
+ },
222
+ },
223
+ ];
224
+ for (const member of ancestorGroupMembersForNode(projection, instance.nodeKey).filter(member => member.status === "failed")) {
225
+ events.push({
226
+ type: "group.member_retry_requested",
227
+ payload: {
228
+ memberKey: member.memberKey,
229
+ readinessSequence: member.readinessSequence,
230
+ source: "scheduler",
231
+ },
232
+ });
233
+ }
234
+ return events;
235
+ }
236
+ return [];
237
+ }
238
+ async function runInstance(input, claim, now, instance, counters, active) {
239
+ let attempt;
240
+ const snapshot = unwrapStoreResult(input.store.tryLoadRunSnapshot(input.runId));
241
+ const deadlineAt = input.deadlineAtFor?.(instance, snapshot.projection, now())?.toISOString();
242
+ const started = input.store.tryStartAttempt({
243
+ runId: input.runId,
244
+ nodeKey: instance.nodeKey,
245
+ nodeId: instance.nodeId,
246
+ ownerEpoch: claim.ownerEpoch,
247
+ ...(deadlineAt === undefined ? {} : { deadlineAt }),
248
+ idempotencyKey: `scheduler:start:${input.runId}:${instance.nodeKey}:${claim.ownerEpoch}`,
249
+ });
250
+ if (started.isOk()) {
251
+ attempt = started.value;
252
+ }
253
+ else {
254
+ if (isPausedError(started.error)) {
255
+ counters.cancelled += 1;
256
+ return;
257
+ }
258
+ attempt = unwrapStoreResult(started);
259
+ }
260
+ counters.started += 1;
261
+ const controller = new AbortController();
262
+ active.set(instance.nodeKey, controller);
263
+ const unregister = input.onActiveAttempt?.({
264
+ runId: input.runId,
265
+ nodeKey: instance.nodeKey,
266
+ nodeId: instance.nodeId,
267
+ attemptId: attempt.attemptId,
268
+ attemptNo: attempt.attemptNo,
269
+ ownerEpoch: claim.ownerEpoch,
270
+ controller,
271
+ });
272
+ const monitor = setInterval(() => abortInterruptedActiveAttempts(input.store, input.runId, active), 10);
273
+ monitor.unref?.();
274
+ let result;
275
+ const startReason = attemptStartReason(instance);
276
+ try {
277
+ result = await input.executor.execute({
278
+ runId: input.runId,
279
+ nodeKey: instance.nodeKey,
280
+ nodeId: instance.nodeId,
281
+ attemptId: attempt.attemptId,
282
+ attemptNo: attempt.attemptNo,
283
+ ownerEpoch: claim.ownerEpoch,
284
+ ...(startReason === undefined ? {} : { attemptStartReason: startReason }),
285
+ signal: controller.signal,
286
+ });
287
+ }
288
+ catch (error) {
289
+ result = { status: "failed", reason: error instanceof Error ? error.message : String(error) };
290
+ }
291
+ finally {
292
+ clearInterval(monitor);
293
+ unregister?.();
294
+ active.delete(instance.nodeKey);
295
+ }
296
+ if (counters.leaseLost)
297
+ return;
298
+ if (result.status === "completed") {
299
+ try {
300
+ assertWorkflowData(result.output, `Node '${instance.nodeId}' output`);
301
+ }
302
+ catch (error) {
303
+ result = { status: "failed", reason: error instanceof Error ? error.message : String(error) };
304
+ }
305
+ }
306
+ const committed = input.store.tryCommitAttemptResult({
307
+ runId: input.runId,
308
+ attemptId: attempt.attemptId,
309
+ ownerEpoch: claim.ownerEpoch,
310
+ result,
311
+ idempotencyKey: `scheduler:commit:${input.runId}:${attempt.attemptId}`,
312
+ });
313
+ if (committed.isErr()) {
314
+ if (isLeaseLostError(committed.error)) {
315
+ counters.leaseLost = true;
316
+ controller.abort();
317
+ return;
318
+ }
319
+ const staleTerminal = staleTerminalStatus(committed.error);
320
+ if (staleTerminal) {
321
+ if (staleTerminal === "failed")
322
+ counters.failed += 1;
323
+ else
324
+ counters.cancelled += 1;
325
+ return;
326
+ }
327
+ unwrapStoreResult(committed);
328
+ }
329
+ if (result.status === "completed")
330
+ counters.completed += 1;
331
+ else if (result.status === "cancelled")
332
+ counters.cancelled += 1;
333
+ else
334
+ counters.failed += 1;
335
+ }
336
+ function startRunHeartbeat(store, claim, leaseMs, counters, active) {
337
+ if (!store.heartbeatRun(claim, leaseMs)) {
338
+ counters.leaseLost = true;
339
+ return () => undefined;
340
+ }
341
+ const heartbeat = setInterval(() => {
342
+ if (store.heartbeatRun(claim, leaseMs))
343
+ return;
344
+ counters.leaseLost = true;
345
+ for (const controller of active.values())
346
+ controller.abort();
347
+ }, heartbeatIntervalMs(leaseMs));
348
+ heartbeat.unref?.();
349
+ return () => clearInterval(heartbeat);
350
+ }
351
+ function heartbeatIntervalMs(leaseMs) {
352
+ return Math.max(1, Math.floor(leaseMs / 3));
353
+ }
354
+ function attemptStartReason(instance) {
355
+ if (instance.statusReason === "retry")
356
+ return "control_retry";
357
+ if (instance.statusReason === "paused")
358
+ return "pause_resume";
359
+ return undefined;
360
+ }
361
+ function abortInterruptedActiveAttempts(store, runId, active) {
362
+ const projection = unwrapStoreResult(store.tryLoadRunSnapshot(runId)).projection;
363
+ for (const [nodeKey, controller] of active) {
364
+ const instance = projection.instances[nodeKey];
365
+ if (projection.run.status === "paused" || instance?.status === "failed" || instance?.status === "cancelled" || (instance?.status === "ready" && instance.statusReason === "paused")) {
366
+ controller.abort();
367
+ }
368
+ }
369
+ }
370
+ function terminalSummary(projection, claim) {
371
+ if (projection.run.status === "completed" || projection.run.status === "failed" || projection.run.status === "canceled" || projection.run.status === "paused") {
372
+ return {
373
+ status: projection.run.status,
374
+ runId: projection.run.runId,
375
+ ownerEpoch: claim.ownerEpoch,
376
+ started: 0,
377
+ completed: 0,
378
+ failed: 0,
379
+ cancelled: 0,
380
+ active: activeAttemptCount(projection),
381
+ };
382
+ }
383
+ return undefined;
384
+ }
385
+ function idleSummary(projection, claim) {
386
+ return {
387
+ status: hasAwaitingWork(projection) ? "awaiting" : "idle",
388
+ runId: projection.run.runId,
389
+ ownerEpoch: claim.ownerEpoch,
390
+ started: 0,
391
+ completed: 0,
392
+ failed: 0,
393
+ cancelled: 0,
394
+ active: activeAttemptCount(projection),
395
+ };
396
+ }
397
+ function summary(runId, status) {
398
+ return { status, runId, started: 0, completed: 0, failed: 0, cancelled: 0, active: 0 };
399
+ }
400
+ function activeAttemptCount(projection) {
401
+ return Object.values(projection.attempts).filter(attempt => attempt.status === "started").length;
402
+ }
403
+ function hasAwaitingWork(projection) {
404
+ return Object.values(projection.instances).some(instance => instance.status === "awaiting")
405
+ || Object.values(projection.signalWaits).some(wait => wait.status === "awaiting");
406
+ }
407
+ function byReadiness(left, right) {
408
+ return (left.readinessSequence ?? Number.MAX_SAFE_INTEGER) - (right.readinessSequence ?? Number.MAX_SAFE_INTEGER)
409
+ || left.nodeKey.localeCompare(right.nodeKey);
410
+ }
411
+ function unwrapStoreResult(result) {
412
+ return throwSchedulerStoreResult(result);
413
+ }
414
+ function isLeaseLostError(error) {
415
+ return error.type === "owner-epoch-inactive" || error.type === "owner-epoch-stale";
416
+ }
417
+ function isPausedError(error) {
418
+ return error.type === "run-paused";
419
+ }
420
+ function isVersionMismatchError(error) {
421
+ return error.type === "version-mismatch";
422
+ }
423
+ function staleTerminalStatus(error) {
424
+ if (error.type !== "terminal-attempt")
425
+ return undefined;
426
+ if (error.status === "cancelled" || error.status === "superseded")
427
+ return "cancelled";
428
+ if (error.status === "timed_out" || error.status === "failed")
429
+ return "failed";
430
+ return undefined;
431
+ }
432
+ export function completed(output) {
433
+ return output === undefined ? { status: "completed" } : { status: "completed", output };
434
+ }
435
+ //# sourceMappingURL=advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.js","sourceRoot":"","sources":["../../src/scheduler/advance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { JsonValue } from "@acpus/expression/ir";
2
+ import type { RuntimeStore } from "../store/store.js";
3
+ import { type SchedulerSnapshot } from "./store-port.js";
4
+ import type { AdvanceRunSummary } from "./advance.js";
5
+ export type RunControlIntent = {
6
+ requestId: string;
7
+ runId: string;
8
+ type: "pause";
9
+ reason?: string;
10
+ } | {
11
+ requestId: string;
12
+ runId: string;
13
+ type: "resume";
14
+ } | {
15
+ requestId: string;
16
+ runId: string;
17
+ type: "retry";
18
+ target?: string;
19
+ } | {
20
+ requestId: string;
21
+ runId: string;
22
+ type: "cancel";
23
+ target?: string;
24
+ } | {
25
+ requestId: string;
26
+ runId: string;
27
+ type: "signal";
28
+ node: string;
29
+ payload: JsonValue;
30
+ commandIdempotencyKey?: string;
31
+ };
32
+ export type AppliedSchedulerControlIntent = {
33
+ intent: RunControlIntent;
34
+ runId: string;
35
+ snapshot: SchedulerSnapshot;
36
+ advanced?: AdvanceRunSummary;
37
+ };
38
+ export type ApplySchedulerControlIntentOptions = {
39
+ ownerId?: string;
40
+ leaseMs?: number;
41
+ advance?: boolean;
42
+ };
43
+ export declare class InvalidSignalPayloadError extends Error {
44
+ readonly nodeId: string;
45
+ constructor(nodeId: string, message: string);
46
+ }
47
+ export declare function applySchedulerControlIntent(cwd: string, store: RuntimeStore, intent: RunControlIntent, options?: ApplySchedulerControlIntentOptions): Promise<AppliedSchedulerControlIntent>;
48
+ export declare function applySchedulerControlIntentWithOwnerEpoch(store: RuntimeStore, intent: RunControlIntent, ownerEpoch: number): AppliedSchedulerControlIntent;
49
+ //# sourceMappingURL=control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/scheduler/control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAA6B,KAAK,iBAAiB,EAA6B,MAAM,iBAAiB,CAAC;AAE/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GACxB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GACpD;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,CAAC;IAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3H,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGrD;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,6BAA6B,CAAC,CA0BxC;AAED,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,MAAM,GACjB,6BAA6B,CAO/B"}