@osolmaz/pi-workflows 0.16.1 → 0.16.3
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 +41 -41
- package/dist/builtins/monitor.workflow.d.ts +1 -1
- package/dist/builtins/monitor.workflow.js +8 -8
- package/dist/builtins/pi-agent-group.js +3 -3
- package/dist/builtins/pi-agent-group.js.map +1 -1
- package/dist/channels/adapter-entry.js +14 -14
- package/dist/channels/adapter-entry.js.map +1 -1
- package/dist/client/client.d.ts +6 -6
- package/dist/client/client.js +27 -27
- package/dist/client/client.js.map +1 -1
- package/dist/client/protocol.d.ts +4 -1
- package/dist/client/protocol.js +17 -11
- package/dist/client/protocol.js.map +1 -1
- package/dist/client/resolver.d.ts +4 -4
- package/dist/client/view.d.ts +7 -1
- package/dist/client/view.js +1 -0
- package/dist/client/view.js.map +1 -1
- package/dist/extension/index.d.ts +1 -1
- package/dist/extension/index.js +66 -47
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/recorder.d.ts +1 -1
- package/dist/extension/recorder.js +1 -1
- package/dist/extension/recorder.js.map +1 -1
- package/dist/extension/remote-recorder-store.d.ts +1 -1
- package/dist/extension/remote-recorder-store.js +2 -2
- package/dist/extension/remote-recorder-store.js.map +1 -1
- package/dist/extension/{controller-command.d.ts → resource-manager-command.d.ts} +6 -6
- package/dist/extension/{controller-command.js → resource-manager-command.js} +7 -7
- package/dist/extension/resource-manager-command.js.map +1 -0
- package/dist/extension/session-delivery.d.ts +1 -1
- package/dist/extension/session-delivery.js +2 -2
- package/dist/extension/session-delivery.js.map +1 -1
- package/dist/extension/session-view.d.ts +1 -1
- package/dist/extension/session-view.js +1 -1
- package/dist/extension/session-view.js.map +1 -1
- package/dist/extension/workflow-message-coordinator.d.ts +4 -3
- package/dist/extension/workflow-message-coordinator.js +81 -29
- package/dist/extension/workflow-message-coordinator.js.map +1 -1
- package/dist/resource-managers/conditions.d.ts +6 -0
- package/dist/{controllers → resource-managers}/conditions.js +3 -3
- package/dist/resource-managers/conditions.js.map +1 -0
- package/dist/resource-managers/definition.d.ts +6 -0
- package/dist/resource-managers/definition.js +45 -0
- package/dist/resource-managers/definition.js.map +1 -0
- package/dist/resource-managers/effects.d.ts +15 -0
- package/dist/{controllers → resource-managers}/effects.js +2 -2
- package/dist/resource-managers/effects.js.map +1 -0
- package/dist/resource-managers/errors.d.ts +12 -0
- package/dist/resource-managers/errors.js +25 -0
- package/dist/resource-managers/errors.js.map +1 -0
- package/dist/resource-managers/index.d.ts +12 -0
- package/dist/resource-managers/index.js +12 -0
- package/dist/resource-managers/index.js.map +1 -0
- package/dist/resource-managers/json.js.map +1 -0
- package/dist/resource-managers/loader.d.ts +23 -0
- package/dist/resource-managers/loader.js +75 -0
- package/dist/resource-managers/loader.js.map +1 -0
- package/dist/resource-managers/results.d.ts +5 -0
- package/dist/resource-managers/results.js.map +1 -0
- package/dist/resource-managers/runtime.d.ts +59 -0
- package/dist/{controllers/manager.js → resource-managers/runtime.js} +57 -57
- package/dist/resource-managers/runtime.js.map +1 -0
- package/dist/{controllers → resource-managers}/sqlite.d.ts +51 -43
- package/dist/{controllers → resource-managers}/sqlite.js +187 -125
- package/dist/resource-managers/sqlite.js.map +1 -0
- package/dist/{controllers → resource-managers}/store.d.ts +33 -33
- package/dist/{controllers → resource-managers}/store.js.map +1 -1
- package/dist/{controllers → resource-managers}/types.d.ts +41 -41
- package/dist/{controllers → resource-managers}/types.js.map +1 -1
- package/dist/resource-managers/workflows.d.ts +34 -0
- package/dist/{controllers → resource-managers}/workflows.js +15 -15
- package/dist/resource-managers/workflows.js.map +1 -0
- package/dist/server/channel-effects.js.map +1 -0
- package/dist/{host → server}/channel-supervisor.d.ts +6 -6
- package/dist/{host → server}/channel-supervisor.js +3 -3
- package/dist/server/channel-supervisor.js.map +1 -0
- package/dist/{host/child-worker-supervisor.d.ts → server/child-runner-supervisor.d.ts} +15 -13
- package/dist/{host/child-worker-supervisor.js → server/child-runner-supervisor.js} +6 -5
- package/dist/server/child-runner-supervisor.js.map +1 -0
- package/dist/{host → server}/processes.d.ts +3 -3
- package/dist/{host → server}/processes.js +3 -3
- package/dist/server/processes.js.map +1 -0
- package/dist/{host → server}/resolver-entry.d.ts +6 -6
- package/dist/{host → server}/resolver-entry.js +14 -14
- package/dist/server/resolver-entry.js.map +1 -0
- package/dist/server/resource-runner-entry.d.ts +2 -0
- package/dist/{host/controller-worker-entry.js → server/resource-runner-entry.js} +33 -33
- package/dist/server/resource-runner-entry.js.map +1 -0
- package/dist/server/resource-runner-protocol.d.ts +36 -0
- package/dist/server/resource-runner-protocol.js +49 -0
- package/dist/server/resource-runner-protocol.js.map +1 -0
- package/dist/server/resource-runner-supervisor.d.ts +21 -0
- package/dist/{host/worker-supervisor.js → server/resource-runner-supervisor.js} +17 -17
- package/dist/server/resource-runner-supervisor.js.map +1 -0
- package/dist/{host → server}/rpc-bridge.d.ts +3 -3
- package/dist/{host → server}/rpc-bridge.js +3 -3
- package/dist/server/rpc-bridge.js.map +1 -0
- package/dist/{host → server}/rpc-executor.d.ts +1 -1
- package/dist/{host → server}/rpc-executor.js +3 -3
- package/dist/server/rpc-executor.js.map +1 -0
- package/dist/{host/host-entry.js → server/server-entry.js} +6 -6
- package/dist/server/server-entry.js.map +1 -0
- package/dist/{host/runner.d.ts → server/server.d.ts} +47 -39
- package/dist/{host/runner.js → server/server.js} +624 -535
- package/dist/server/server.js.map +1 -0
- package/dist/{host → server}/state.d.ts +25 -25
- package/dist/{host → server}/state.js +49 -49
- package/dist/server/state.js.map +1 -0
- package/dist/{host → server}/view.d.ts +7 -7
- package/dist/{host → server}/view.js +19 -15
- package/dist/server/view.js.map +1 -0
- package/dist/server/workflow-runner-content.d.ts +6 -0
- package/dist/server/workflow-runner-content.js +96 -0
- package/dist/server/workflow-runner-content.js.map +1 -0
- package/dist/server/workflow-runner-entry.d.ts +13 -0
- package/dist/{host/worker-entry.js → server/workflow-runner-entry.js} +89 -57
- package/dist/server/workflow-runner-entry.js.map +1 -0
- package/dist/server/workflow-runner-protocol.d.ts +69 -0
- package/dist/server/workflow-runner-protocol.js +176 -0
- package/dist/server/workflow-runner-protocol.js.map +1 -0
- package/dist/{host/worker-store.d.ts → server/workflow-runner-store.d.ts} +11 -11
- package/dist/{host/worker-store.js → server/workflow-runner-store.js} +8 -8
- package/dist/server/workflow-runner-store.js.map +1 -0
- package/dist/server/workflow-runner-supervisor.d.ts +22 -0
- package/dist/server/workflow-runner-supervisor.js +56 -0
- package/dist/server/workflow-runner-supervisor.js.map +1 -0
- package/dist/state/prune.d.ts +1 -1
- package/dist/state/prune.js +17 -10
- package/dist/state/prune.js.map +1 -1
- package/dist/state/schema.js +2 -2
- package/dist/state/workflow-messages.d.ts +3 -1
- package/dist/state/workflow-messages.js +32 -1
- package/dist/state/workflow-messages.js.map +1 -1
- package/dist/viewer/backup.js +1 -1
- package/dist/viewer/backup.js.map +1 -1
- package/dist/viewer/cli.d.ts +2 -2
- package/dist/viewer/cli.js +46 -32
- package/dist/viewer/cli.js.map +1 -1
- package/dist/viewer/tui.d.ts +1 -1
- package/dist/viewer/tui.js +1 -1
- package/dist/viewer/tui.js.map +1 -1
- package/dist/workflows/command-batch.js +2 -2
- package/dist/workflows/composition.js +0 -4
- package/dist/workflows/composition.js.map +1 -1
- package/dist/workflows/definition.js +0 -8
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/engine.js +18 -20
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/schema.js +0 -4
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/store.d.ts +27 -11
- package/dist/workflows/store.js +66 -18
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/types.d.ts +3 -5
- package/docs/2026-08-20-durable-workflow-launch-plan.md +12 -12
- package/docs/2026-08-25-workflow-follow-ups.md +7 -7
- package/docs/2026-08-25-workflow-settings.md +3 -3
- package/docs/2026-08-30-out-of-process-workflow-host-plan.md +3 -3
- package/docs/2026-09-01-restore-session-delivery-controls-plan.md +5 -5
- package/docs/2026-09-01-unified-workflow-client-plan.md +6 -6
- package/docs/2026-09-02-installed-live-e2e-plan.md +3 -3
- package/docs/2026-09-02-unify-workflow-messages-plan.md +8 -8
- package/docs/2026-09-04-workflow-run-state-plan.md +363 -0
- package/docs/DEFERRED_TURNS.md +7 -7
- package/docs/DESIGN_PHILOSOPHY.md +1 -1
- package/docs/HUMAN_DECISIONS.md +11 -11
- package/docs/HUMAN_DECISION_PRESENTATIONS.md +4 -4
- package/docs/MONITOR.md +1 -1
- package/docs/RESOURCE_MANAGERS.md +221 -0
- package/docs/SQLITE_STATE.md +40 -34
- package/docs/WORKFLOW_COMPOSITION.md +1 -1
- package/docs/{WORKFLOW_HOST.md → WORKFLOW_SERVER.md} +131 -116
- package/docs/WORKFLOW_STEP_MESSAGES.md +18 -18
- package/docs/WORKFLOW_UPDATES.md +16 -16
- package/docs/development.md +15 -14
- package/docs/live-replay-protocol.md +20 -20
- package/docs/plans/2026-08-04-controller-runtime-plan.md +25 -25
- package/docs/plans/2026-08-05-always-on-workflows-plan.md +8 -8
- package/docs/plans/2026-08-10-agent-managed-monitor-workflows-plan.md +2 -2
- package/docs/plans/2026-08-13-session-addressed-workflow-notifications-plan.md +1 -1
- package/docs/plans/2026-08-16-workflow-updates-plan.md +5 -5
- package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
- package/docs/plans/2026-08-20-bounded-command-batches-plan.md +1 -1
- package/docs/plans/2026-08-21-deferred-turn-intents-plan.md +3 -3
- package/docs/plans/2026-08-21-sanity-check-plan.md +2 -2
- package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +5 -5
- package/docs/plans/2026-08-23-sqlite-state-plan.md +25 -25
- package/docs/plans/2026-08-25-live-workflow-settings-plan.md +4 -4
- package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +3 -3
- package/docs/plans/2026-09-04-workflow-runner-resume-state-plan.md +318 -0
- package/docs/plans/piw-viewer-experience-implementation-plan.md +1 -1
- package/docs/tui-viewer.md +9 -9
- package/docs/workflows.md +78 -63
- package/examples/{controllers/pull-request.controller.ts → resource-managers/pull-request.resource-manager.ts} +12 -12
- package/herdr-plugin.toml +1 -1
- package/package.json +5 -5
- package/protocol/client.v1.schema.json +7 -7
- package/protocol/fixtures/client-v1.json +1 -1
- package/src/builtins/monitor.workflow.ts +9 -9
- package/src/builtins/pi-agent-group.ts +3 -3
- package/src/channels/adapter-entry.ts +14 -14
- package/src/client/client.ts +33 -32
- package/src/client/protocol.ts +16 -11
- package/src/client/resolver.ts +4 -4
- package/src/client/view.ts +9 -1
- package/src/extension/index.ts +81 -53
- package/src/extension/recorder.ts +1 -1
- package/src/extension/remote-recorder-store.ts +2 -2
- package/src/extension/resource-manager-command.ts +45 -0
- package/src/extension/session-delivery.ts +2 -2
- package/src/extension/session-view.ts +1 -1
- package/src/extension/workflow-message-coordinator.ts +94 -30
- package/src/{controllers → resource-managers}/conditions.ts +23 -23
- package/src/resource-managers/definition.ts +71 -0
- package/src/{controllers → resource-managers}/effects.ts +9 -9
- package/src/resource-managers/errors.ts +27 -0
- package/src/resource-managers/index.ts +88 -0
- package/src/resource-managers/loader.ts +111 -0
- package/src/{controllers → resource-managers}/results.ts +4 -4
- package/src/{controllers/manager.ts → resource-managers/runtime.ts} +95 -92
- package/src/{controllers → resource-managers}/sqlite.ts +275 -181
- package/src/{controllers → resource-managers}/store.ts +46 -38
- package/src/{controllers → resource-managers}/types.ts +50 -41
- package/src/{controllers → resource-managers}/workflows.ts +43 -41
- package/src/{host → server}/channel-supervisor.ts +8 -8
- package/src/{host/child-worker-supervisor.ts → server/child-runner-supervisor.ts} +22 -18
- package/src/{host → server}/processes.ts +3 -3
- package/src/{host → server}/resolver-entry.ts +28 -25
- package/src/{host/controller-worker-entry.ts → server/resource-runner-entry.ts} +67 -65
- package/src/server/resource-runner-protocol.ts +103 -0
- package/src/server/resource-runner-supervisor.ts +76 -0
- package/src/{host → server}/rpc-bridge.ts +3 -3
- package/src/{host → server}/rpc-executor.ts +4 -4
- package/src/{host/host-entry.ts → server/server-entry.ts} +5 -5
- package/src/{host/runner.ts → server/server.ts} +786 -672
- package/src/{host → server}/state.ts +78 -67
- package/src/{host → server}/view.ts +21 -17
- package/src/server/workflow-runner-content.ts +119 -0
- package/src/{host/worker-entry.ts → server/workflow-runner-entry.ts} +131 -82
- package/src/server/workflow-runner-protocol.ts +241 -0
- package/src/{host/worker-store.ts → server/workflow-runner-store.ts} +18 -20
- package/src/server/workflow-runner-supervisor.ts +79 -0
- package/src/state/prune.ts +27 -9
- package/src/state/schema.ts +2 -2
- package/src/state/workflow-messages.ts +52 -1
- package/src/viewer/backup.ts +1 -1
- package/src/viewer/cli.ts +50 -36
- package/src/viewer/tui.ts +1 -1
- package/src/workflows/command-batch.ts +2 -2
- package/src/workflows/composition.ts +0 -5
- package/src/workflows/definition.ts +0 -8
- package/src/workflows/engine.ts +18 -21
- package/src/workflows/schema.ts +0 -6
- package/src/workflows/store.ts +95 -28
- package/src/workflows/types.ts +3 -5
- package/dist/controllers/conditions.d.ts +0 -6
- package/dist/controllers/conditions.js.map +0 -1
- package/dist/controllers/definition.d.ts +0 -6
- package/dist/controllers/definition.js +0 -45
- package/dist/controllers/definition.js.map +0 -1
- package/dist/controllers/effects.d.ts +0 -15
- package/dist/controllers/effects.js.map +0 -1
- package/dist/controllers/errors.d.ts +0 -12
- package/dist/controllers/errors.js +0 -25
- package/dist/controllers/errors.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -12
- package/dist/controllers/index.js +0 -12
- package/dist/controllers/index.js.map +0 -1
- package/dist/controllers/json.js.map +0 -1
- package/dist/controllers/loader.d.ts +0 -23
- package/dist/controllers/loader.js +0 -74
- package/dist/controllers/loader.js.map +0 -1
- package/dist/controllers/manager.d.ts +0 -59
- package/dist/controllers/manager.js.map +0 -1
- package/dist/controllers/results.d.ts +0 -5
- package/dist/controllers/results.js.map +0 -1
- package/dist/controllers/sqlite.js.map +0 -1
- package/dist/controllers/workflows.d.ts +0 -34
- package/dist/controllers/workflows.js.map +0 -1
- package/dist/extension/controller-command.js.map +0 -1
- package/dist/host/channel-effects.js.map +0 -1
- package/dist/host/channel-supervisor.js.map +0 -1
- package/dist/host/child-worker-supervisor.js.map +0 -1
- package/dist/host/controller-worker-entry.d.ts +0 -2
- package/dist/host/controller-worker-entry.js.map +0 -1
- package/dist/host/controller-worker-protocol.d.ts +0 -36
- package/dist/host/controller-worker-protocol.js +0 -49
- package/dist/host/controller-worker-protocol.js.map +0 -1
- package/dist/host/controller-worker-supervisor.d.ts +0 -21
- package/dist/host/controller-worker-supervisor.js +0 -54
- package/dist/host/controller-worker-supervisor.js.map +0 -1
- package/dist/host/host-entry.js.map +0 -1
- package/dist/host/processes.js.map +0 -1
- package/dist/host/resolver-entry.js.map +0 -1
- package/dist/host/rpc-bridge.js.map +0 -1
- package/dist/host/rpc-executor.js.map +0 -1
- package/dist/host/runner.js.map +0 -1
- package/dist/host/state.js.map +0 -1
- package/dist/host/view.js.map +0 -1
- package/dist/host/worker-entry.d.ts +0 -10
- package/dist/host/worker-entry.js.map +0 -1
- package/dist/host/worker-protocol.d.ts +0 -31
- package/dist/host/worker-protocol.js +0 -122
- package/dist/host/worker-protocol.js.map +0 -1
- package/dist/host/worker-store.js.map +0 -1
- package/dist/host/worker-supervisor.d.ts +0 -22
- package/dist/host/worker-supervisor.js.map +0 -1
- package/docs/CONTROLLERS.md +0 -217
- package/src/controllers/definition.ts +0 -65
- package/src/controllers/errors.ts +0 -27
- package/src/controllers/index.ts +0 -88
- package/src/controllers/loader.ts +0 -104
- package/src/extension/controller-command.ts +0 -45
- package/src/host/controller-worker-protocol.ts +0 -104
- package/src/host/controller-worker-supervisor.ts +0 -79
- package/src/host/worker-protocol.ts +0 -165
- package/src/host/worker-supervisor.ts +0 -74
- /package/dist/{controllers → resource-managers}/json.d.ts +0 -0
- /package/dist/{controllers → resource-managers}/json.js +0 -0
- /package/dist/{controllers → resource-managers}/results.js +0 -0
- /package/dist/{controllers → resource-managers}/store.js +0 -0
- /package/dist/{controllers → resource-managers}/types.js +0 -0
- /package/dist/{host → server}/channel-effects.d.ts +0 -0
- /package/dist/{host → server}/channel-effects.js +0 -0
- /package/dist/{host/host-entry.d.ts → server/server-entry.d.ts} +0 -0
- /package/src/{controllers → resource-managers}/json.ts +0 -0
- /package/src/{host → server}/channel-effects.ts +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { applyStatusPatch } from "./conditions.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { asAnyResourceManagerDefinition, asTypedResource } from "./definition.js";
|
|
4
|
+
import { ResourceManagerEffectService } from "./effects.js";
|
|
5
|
+
import { ManagedResourceConflictError } from "./errors.js";
|
|
6
6
|
import { createResultHelpers } from "./results.js";
|
|
7
|
-
import {
|
|
7
|
+
import { ResourceManagerWorkflowCoordinator, } from "./workflows.js";
|
|
8
8
|
const DEFAULT_MAX_CONCURRENT = 4;
|
|
9
9
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
10
10
|
const DEFAULT_LEASE_MS = 120_000;
|
|
@@ -13,13 +13,13 @@ const DEFAULT_BASE_BACKOFF_MS = 1_000;
|
|
|
13
13
|
const DEFAULT_MAX_BACKOFF_MS = 60_000;
|
|
14
14
|
const DEFAULT_JITTER_RATIO = 0.2;
|
|
15
15
|
const MIN_LEASE_MS = 300;
|
|
16
|
-
export class
|
|
16
|
+
export class ResourceManagerRuntime {
|
|
17
17
|
store;
|
|
18
|
-
ownerId = `
|
|
18
|
+
ownerId = `resource-manager-runtime-${randomUUID()}`;
|
|
19
19
|
definitions = new Map();
|
|
20
20
|
workflowCoordinator;
|
|
21
21
|
maxConcurrent;
|
|
22
|
-
|
|
22
|
+
resourceManagerConcurrency;
|
|
23
23
|
defaultTimeoutMs;
|
|
24
24
|
leaseMs;
|
|
25
25
|
pollIntervalMs;
|
|
@@ -28,26 +28,26 @@ export class ControllerManager {
|
|
|
28
28
|
jitterRatio;
|
|
29
29
|
now;
|
|
30
30
|
random;
|
|
31
|
-
|
|
31
|
+
activeByResourceManager = new Map();
|
|
32
32
|
activeReconciles = new Map();
|
|
33
33
|
runAbort = null;
|
|
34
|
-
|
|
34
|
+
runnerTasks = [];
|
|
35
35
|
constructor(options) {
|
|
36
36
|
this.store = options.store;
|
|
37
|
-
for (const definition of options.
|
|
37
|
+
for (const definition of options.resourceManagers) {
|
|
38
38
|
if (this.definitions.has(definition.name)) {
|
|
39
|
-
throw new Error(`Duplicate
|
|
39
|
+
throw new Error(`Duplicate resource manager definition: ${definition.name}`);
|
|
40
40
|
}
|
|
41
41
|
this.definitions.set(definition.name, definition);
|
|
42
42
|
}
|
|
43
|
-
this.workflowCoordinator = new
|
|
43
|
+
this.workflowCoordinator = new ResourceManagerWorkflowCoordinator(options.store, options.workflowScheduler);
|
|
44
44
|
this.maxConcurrent = positiveInteger(options.maxConcurrent ?? DEFAULT_MAX_CONCURRENT, "maxConcurrent");
|
|
45
|
-
this.
|
|
46
|
-
for (const [name, value] of Object.entries(this.
|
|
45
|
+
this.resourceManagerConcurrency = options.resourceManagerConcurrency ?? {};
|
|
46
|
+
for (const [name, value] of Object.entries(this.resourceManagerConcurrency)) {
|
|
47
47
|
if (!this.definitions.has(name)) {
|
|
48
|
-
throw new Error(`Concurrency limit names an unknown
|
|
48
|
+
throw new Error(`Concurrency limit names an unknown resource manager: ${name}`);
|
|
49
49
|
}
|
|
50
|
-
positiveInteger(value, `
|
|
50
|
+
positiveInteger(value, `resourceManagerConcurrency.${name}`);
|
|
51
51
|
}
|
|
52
52
|
this.defaultTimeoutMs = positiveInteger(options.defaultTimeoutMs ?? DEFAULT_TIMEOUT_MS, "defaultTimeoutMs");
|
|
53
53
|
this.leaseMs = positiveInteger(options.leaseMs ?? DEFAULT_LEASE_MS, "leaseMs");
|
|
@@ -69,43 +69,43 @@ export class ControllerManager {
|
|
|
69
69
|
}
|
|
70
70
|
putResource(definition, key, spec) {
|
|
71
71
|
const registered = this.definitions.get(definition.name);
|
|
72
|
-
if (registered !==
|
|
73
|
-
throw new Error(`
|
|
72
|
+
if (registered !== asAnyResourceManagerDefinition(definition)) {
|
|
73
|
+
throw new Error(`ResourceManager definition is not registered: ${definition.name}`);
|
|
74
74
|
}
|
|
75
75
|
const initialStatus = definition.initialStatus(spec);
|
|
76
76
|
const resource = this.store.putResource({
|
|
77
|
-
|
|
77
|
+
resourceManager: definition.name,
|
|
78
78
|
key,
|
|
79
79
|
spec,
|
|
80
80
|
initialStatus,
|
|
81
81
|
now: this.now().toISOString(),
|
|
82
82
|
});
|
|
83
|
-
this.recordEvent({
|
|
83
|
+
this.recordEvent({ resourceManager: definition.name, key }, resource.metadata.generation === 1 ? "resource_applied" : "resource_updated", { generation: resource.metadata.generation });
|
|
84
84
|
const current = this.store.getResource({
|
|
85
|
-
|
|
85
|
+
resourceManager: definition.name,
|
|
86
86
|
key,
|
|
87
87
|
});
|
|
88
88
|
if (current === undefined)
|
|
89
|
-
throw new Error("
|
|
89
|
+
throw new Error("Managed resource disappeared after its event");
|
|
90
90
|
return current;
|
|
91
91
|
}
|
|
92
|
-
putResourceByName(
|
|
93
|
-
const definition = this.definitions.get(
|
|
92
|
+
putResourceByName(resourceManager, key, spec) {
|
|
93
|
+
const definition = this.definitions.get(resourceManager);
|
|
94
94
|
if (definition === undefined) {
|
|
95
|
-
throw new Error(`Unknown
|
|
95
|
+
throw new Error(`Unknown resource manager: ${resourceManager}`);
|
|
96
96
|
}
|
|
97
97
|
const initialStatus = definition.initialStatus(spec);
|
|
98
98
|
const resource = this.store.putResource({
|
|
99
|
-
|
|
99
|
+
resourceManager,
|
|
100
100
|
key,
|
|
101
101
|
spec,
|
|
102
102
|
initialStatus,
|
|
103
103
|
now: this.now().toISOString(),
|
|
104
104
|
});
|
|
105
|
-
this.recordEvent({
|
|
106
|
-
const current = this.store.getResource({
|
|
105
|
+
this.recordEvent({ resourceManager, key }, resource.metadata.generation === 1 ? "resource_applied" : "resource_updated", { generation: resource.metadata.generation });
|
|
106
|
+
const current = this.store.getResource({ resourceManager, key });
|
|
107
107
|
if (current === undefined)
|
|
108
|
-
throw new Error("
|
|
108
|
+
throw new Error("Managed resource disappeared after its event");
|
|
109
109
|
return current;
|
|
110
110
|
}
|
|
111
111
|
requestDeletion(ref) {
|
|
@@ -113,7 +113,7 @@ export class ControllerManager {
|
|
|
113
113
|
this.recordEvent(ref, "deletion_requested");
|
|
114
114
|
const current = this.store.getResource(ref);
|
|
115
115
|
if (current === undefined)
|
|
116
|
-
throw new Error("
|
|
116
|
+
throw new Error("Managed resource disappeared after its event");
|
|
117
117
|
return current;
|
|
118
118
|
}
|
|
119
119
|
enqueue(ref, afterMs = 0) {
|
|
@@ -127,7 +127,7 @@ export class ControllerManager {
|
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
129
|
this.runAbort = new AbortController();
|
|
130
|
-
this.
|
|
130
|
+
this.runnerTasks = Array.from({ length: this.maxConcurrent }, () => this.runnerLoop(this.runAbort?.signal));
|
|
131
131
|
}
|
|
132
132
|
async stop() {
|
|
133
133
|
const abort = this.runAbort;
|
|
@@ -135,12 +135,12 @@ export class ControllerManager {
|
|
|
135
135
|
return;
|
|
136
136
|
}
|
|
137
137
|
this.runAbort = null;
|
|
138
|
-
abort.abort(new Error("
|
|
139
|
-
for (const
|
|
140
|
-
|
|
138
|
+
abort.abort(new Error("Resource manager stopped"));
|
|
139
|
+
for (const abortController of this.activeReconciles.values()) {
|
|
140
|
+
abortController.abort(new Error("Resource manager stopped"));
|
|
141
141
|
}
|
|
142
|
-
await Promise.allSettled(this.
|
|
143
|
-
this.
|
|
142
|
+
await Promise.allSettled(this.runnerTasks);
|
|
143
|
+
this.runnerTasks = [];
|
|
144
144
|
}
|
|
145
145
|
async runOne() {
|
|
146
146
|
const claim = this.claimNext();
|
|
@@ -157,14 +157,14 @@ export class ControllerManager {
|
|
|
157
157
|
count += 1;
|
|
158
158
|
}
|
|
159
159
|
if (count === maxReconciles && this.readyQueueExists()) {
|
|
160
|
-
throw new Error(`
|
|
160
|
+
throw new Error(`Resource manager exceeded ${maxReconciles} reconciliations`);
|
|
161
161
|
}
|
|
162
162
|
return count;
|
|
163
163
|
}
|
|
164
164
|
get workflowRequests() {
|
|
165
165
|
return this.workflowCoordinator;
|
|
166
166
|
}
|
|
167
|
-
async
|
|
167
|
+
async runnerLoop(signal) {
|
|
168
168
|
while (!signal.aborted) {
|
|
169
169
|
const claim = this.claimNext();
|
|
170
170
|
if (claim === undefined) {
|
|
@@ -178,46 +178,46 @@ export class ControllerManager {
|
|
|
178
178
|
if (signal.aborted)
|
|
179
179
|
return;
|
|
180
180
|
// A stale claim means another owner now controls that resource. Keep
|
|
181
|
-
// this
|
|
181
|
+
// this runner alive so it can reconcile other queued resources.
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
claimNext() {
|
|
186
186
|
return this.store.claimNext({
|
|
187
|
-
|
|
187
|
+
resourceManagers: this.eligibleResourceManagers(),
|
|
188
188
|
ownerId: this.ownerId,
|
|
189
189
|
leaseMs: this.leaseMs,
|
|
190
190
|
now: this.now().toISOString(),
|
|
191
191
|
});
|
|
192
192
|
}
|
|
193
|
-
|
|
193
|
+
eligibleResourceManagers() {
|
|
194
194
|
return [...this.definitions.keys()].filter((name) => {
|
|
195
|
-
const active = this.
|
|
196
|
-
const limit = this.
|
|
195
|
+
const active = this.activeByResourceManager.get(name) ?? 0;
|
|
196
|
+
const limit = this.resourceManagerConcurrency[name] ?? this.maxConcurrent;
|
|
197
197
|
return active < limit;
|
|
198
198
|
});
|
|
199
199
|
}
|
|
200
200
|
async processClaim(claim) {
|
|
201
|
-
const definition = this.definitions.get(claim.
|
|
201
|
+
const definition = this.definitions.get(claim.resourceManager);
|
|
202
202
|
if (definition === undefined) {
|
|
203
203
|
return;
|
|
204
204
|
}
|
|
205
|
-
this.
|
|
205
|
+
this.activeByResourceManager.set(claim.resourceManager, (this.activeByResourceManager.get(claim.resourceManager) ?? 0) + 1);
|
|
206
206
|
try {
|
|
207
207
|
await this.reconcileClaim(definition, claim);
|
|
208
208
|
}
|
|
209
209
|
finally {
|
|
210
|
-
const active = (this.
|
|
210
|
+
const active = (this.activeByResourceManager.get(claim.resourceManager) ?? 1) - 1;
|
|
211
211
|
if (active === 0) {
|
|
212
|
-
this.
|
|
212
|
+
this.activeByResourceManager.delete(claim.resourceManager);
|
|
213
213
|
}
|
|
214
214
|
else {
|
|
215
|
-
this.
|
|
215
|
+
this.activeByResourceManager.set(claim.resourceManager, active);
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
async reconcileClaim(definition, claim) {
|
|
220
|
-
const ref = {
|
|
220
|
+
const ref = { resourceManager: claim.resourceManager, key: claim.key };
|
|
221
221
|
const resource = this.store.getResource(ref);
|
|
222
222
|
if (resource === undefined) {
|
|
223
223
|
this.store.settleClaim(claim, this.now().toISOString());
|
|
@@ -235,7 +235,7 @@ export class ControllerManager {
|
|
|
235
235
|
const renew = setInterval(() => {
|
|
236
236
|
const renewed = this.store.renewClaim(claim, this.leaseMs, this.now().toISOString());
|
|
237
237
|
if (!renewed) {
|
|
238
|
-
abort.abort(new Error("
|
|
238
|
+
abort.abort(new Error("ResourceManager queue claim was lost"));
|
|
239
239
|
}
|
|
240
240
|
}, Math.max(100, Math.floor(this.leaseMs / 3)));
|
|
241
241
|
renew.unref?.();
|
|
@@ -263,7 +263,7 @@ export class ControllerManager {
|
|
|
263
263
|
async callReconciler(definition, resource, claim, signal) {
|
|
264
264
|
const context = {
|
|
265
265
|
signal,
|
|
266
|
-
effects: new
|
|
266
|
+
effects: new ResourceManagerEffectService(this.store, resource, claim, signal),
|
|
267
267
|
workflows: this.workflowCoordinator.forResource(resource, claim, signal),
|
|
268
268
|
...createResultHelpers(),
|
|
269
269
|
};
|
|
@@ -272,7 +272,7 @@ export class ControllerManager {
|
|
|
272
272
|
return result;
|
|
273
273
|
}
|
|
274
274
|
async finishSuccessfulClaim(claim, resource, result, reconcileId, startedAtMs) {
|
|
275
|
-
const ref = {
|
|
275
|
+
const ref = { resourceManager: claim.resourceManager, key: claim.key };
|
|
276
276
|
const now = this.now();
|
|
277
277
|
const status = applyStatusPatch(resource.status, result.status, resource.metadata.generation, now.toISOString());
|
|
278
278
|
try {
|
|
@@ -304,7 +304,7 @@ export class ControllerManager {
|
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
catch (error) {
|
|
307
|
-
if (error instanceof
|
|
307
|
+
if (error instanceof ManagedResourceConflictError) {
|
|
308
308
|
this.recordEvent(ref, "reconcile_conflict", { reconcileId }, claim);
|
|
309
309
|
this.store.requeueClaim(claim, { availableAt: now.toISOString() }, now.toISOString());
|
|
310
310
|
return;
|
|
@@ -345,7 +345,7 @@ export class ControllerManager {
|
|
|
345
345
|
}
|
|
346
346
|
recordEvent(ref, type, payload = {}, claim) {
|
|
347
347
|
this.store.recordEvent({
|
|
348
|
-
|
|
348
|
+
resourceManager: ref.resourceManager,
|
|
349
349
|
key: ref.key,
|
|
350
350
|
...(claim === undefined ? {} : { claim }),
|
|
351
351
|
type,
|
|
@@ -375,10 +375,10 @@ function raceWithAbort(operation, signal) {
|
|
|
375
375
|
}
|
|
376
376
|
function validateResult(result) {
|
|
377
377
|
if (result === null || typeof result !== "object") {
|
|
378
|
-
throw new Error("
|
|
378
|
+
throw new Error("ResourceManager reconcile must return a result object");
|
|
379
379
|
}
|
|
380
380
|
if (result.kind !== "settled" && result.kind !== "requeue") {
|
|
381
|
-
throw new Error("
|
|
381
|
+
throw new Error("ResourceManager reconcile returned an unknown result kind");
|
|
382
382
|
}
|
|
383
383
|
if (result.kind === "settled" && "afterMs" in result) {
|
|
384
384
|
throw new Error("A settled reconcile result cannot specify afterMs");
|
|
@@ -420,4 +420,4 @@ async function sleep(ms, signal) {
|
|
|
420
420
|
}
|
|
421
421
|
});
|
|
422
422
|
}
|
|
423
|
-
//# sourceMappingURL=
|
|
423
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/resource-managers/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StateDatabase } from "../state/database.js";
|
|
2
|
-
import type {
|
|
3
|
-
import type { ChildWorkflowRecord,
|
|
2
|
+
import type { ResourceManagerStore, EffectReservation, QueueItem, QueueRequeueOptions, WorkflowRecordUpdate, WorkflowReservation } from "./store.js";
|
|
3
|
+
import type { ChildWorkflowRecord, ResourceManagerEvent, ResourceManagerQueueClaim, ManagedResource, ManagedResourceRef, ManagedResourceStatus, EffectRecord, JsonObject } from "./types.js";
|
|
4
4
|
export type WorkflowRunLaunchStatus = "queued" | "starting" | "running" | "parked" | "done" | "failed" | "cancelled";
|
|
5
5
|
export type WorkflowRunReservationOptions = {
|
|
6
6
|
runId: string;
|
|
@@ -95,9 +95,10 @@ export type RunEventRecord = {
|
|
|
95
95
|
runnerId: string | null;
|
|
96
96
|
payload: JsonObject;
|
|
97
97
|
};
|
|
98
|
-
export declare class
|
|
98
|
+
export declare class SqliteResourceManagerStore implements ResourceManagerStore {
|
|
99
99
|
readonly filePath: string;
|
|
100
100
|
readonly state: StateDatabase;
|
|
101
|
+
private readonly workflowMessages;
|
|
101
102
|
private readonly ownsState;
|
|
102
103
|
private readonly projectId;
|
|
103
104
|
private closed;
|
|
@@ -105,54 +106,54 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
105
106
|
readOnly?: boolean;
|
|
106
107
|
projectPath?: string;
|
|
107
108
|
state?: StateDatabase;
|
|
108
|
-
/**
|
|
109
|
+
/** Server-only global view. Project-scoped mutations still require projectPath. */
|
|
109
110
|
global?: boolean;
|
|
110
111
|
});
|
|
111
112
|
close(): void;
|
|
112
113
|
putResource<TSpec, TStatus>(options: {
|
|
113
|
-
|
|
114
|
+
resourceManager: string;
|
|
114
115
|
key: string;
|
|
115
116
|
spec: TSpec;
|
|
116
117
|
initialStatus: TStatus;
|
|
117
118
|
now?: string;
|
|
118
|
-
}):
|
|
119
|
-
getResource<TSpec = unknown, TStatus = unknown>(ref:
|
|
120
|
-
getResourceByUid(uid: string):
|
|
119
|
+
}): ManagedResource<TSpec, TStatus>;
|
|
120
|
+
getResource<TSpec = unknown, TStatus = unknown>(ref: ManagedResourceRef): ManagedResource<TSpec, TStatus> | undefined;
|
|
121
|
+
getResourceByUid(uid: string): ManagedResource | undefined;
|
|
121
122
|
listResources<TSpec = unknown, TStatus = unknown>(options?: {
|
|
122
|
-
|
|
123
|
-
}):
|
|
123
|
+
resourceManager?: string;
|
|
124
|
+
}): ManagedResource<TSpec, TStatus>[];
|
|
124
125
|
updateStatus<TStatus>(options: {
|
|
125
|
-
ref:
|
|
126
|
+
ref: ManagedResourceRef;
|
|
126
127
|
expectedResourceVersion: number;
|
|
127
|
-
claim:
|
|
128
|
-
status:
|
|
128
|
+
claim: ResourceManagerQueueClaim;
|
|
129
|
+
status: ManagedResourceStatus<TStatus>;
|
|
129
130
|
finalizers?: string[];
|
|
130
131
|
now?: string;
|
|
131
|
-
}):
|
|
132
|
-
requestDeletion(ref:
|
|
132
|
+
}): ManagedResource<unknown, TStatus>;
|
|
133
|
+
requestDeletion(ref: ManagedResourceRef, nowValue?: string): ManagedResource;
|
|
133
134
|
updateFinalizers(options: {
|
|
134
|
-
ref:
|
|
135
|
+
ref: ManagedResourceRef;
|
|
135
136
|
expectedResourceVersion: number;
|
|
136
137
|
finalizers: string[];
|
|
137
138
|
now?: string;
|
|
138
|
-
}):
|
|
139
|
-
deleteResource(ref:
|
|
140
|
-
enqueue(ref:
|
|
139
|
+
}): ManagedResource;
|
|
140
|
+
deleteResource(ref: ManagedResourceRef, expectedResourceVersion: number, claim: ResourceManagerQueueClaim): boolean;
|
|
141
|
+
enqueue(ref: ManagedResourceRef, availableAt?: string): void;
|
|
141
142
|
claimNext(options: {
|
|
142
|
-
|
|
143
|
+
resourceManagers: string[];
|
|
143
144
|
ownerId: string;
|
|
144
145
|
leaseMs: number;
|
|
145
146
|
now?: string;
|
|
146
|
-
exclude?:
|
|
147
|
-
}):
|
|
148
|
-
renewClaim(claim:
|
|
149
|
-
settleClaim(claim:
|
|
150
|
-
requeueClaim(claim:
|
|
147
|
+
exclude?: ManagedResourceRef[];
|
|
148
|
+
}): ResourceManagerQueueClaim | undefined;
|
|
149
|
+
renewClaim(claim: ResourceManagerQueueClaim, leaseMs: number, nowValue?: string): boolean;
|
|
150
|
+
settleClaim(claim: ResourceManagerQueueClaim, nowValue?: string): boolean;
|
|
151
|
+
requeueClaim(claim: ResourceManagerQueueClaim, options: QueueRequeueOptions, nowValue?: string): boolean;
|
|
151
152
|
listQueue(): QueueItem[];
|
|
152
153
|
reserveEffect(options: {
|
|
153
154
|
key: string;
|
|
154
155
|
resourceUid: string;
|
|
155
|
-
claim:
|
|
156
|
+
claim: ResourceManagerQueueClaim;
|
|
156
157
|
generation: number;
|
|
157
158
|
kind: string;
|
|
158
159
|
requestFingerprint: string;
|
|
@@ -162,7 +163,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
162
163
|
updateEffect(options: {
|
|
163
164
|
resourceUid: string;
|
|
164
165
|
key: string;
|
|
165
|
-
claim:
|
|
166
|
+
claim: ResourceManagerQueueClaim;
|
|
166
167
|
state: EffectRecord["state"];
|
|
167
168
|
externalRef?: string;
|
|
168
169
|
error?: string;
|
|
@@ -171,29 +172,29 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
171
172
|
listEffects(resourceUid: string): EffectRecord[];
|
|
172
173
|
reserveWorkflow(options: {
|
|
173
174
|
resourceUid: string;
|
|
174
|
-
claim:
|
|
175
|
+
claim: ResourceManagerQueueClaim;
|
|
175
176
|
requestKey: string;
|
|
176
177
|
workflow: string;
|
|
177
178
|
inputFingerprint: string;
|
|
178
179
|
}): WorkflowReservation;
|
|
179
180
|
getWorkflow(resourceUid: string, requestKey: string): ChildWorkflowRecord | undefined;
|
|
180
181
|
getWorkflowByRequestId(requestId: string): ChildWorkflowRecord | undefined;
|
|
181
|
-
updateWorkflow(requestId: string, update: WorkflowRecordUpdate, claim:
|
|
182
|
+
updateWorkflow(requestId: string, update: WorkflowRecordUpdate, claim: ResourceManagerQueueClaim): ChildWorkflowRecord;
|
|
182
183
|
completeWorkflow(requestId: string, update: WorkflowRecordUpdate): ChildWorkflowRecord;
|
|
183
184
|
listWorkflows(resourceUid: string): ChildWorkflowRecord[];
|
|
184
185
|
recordEvent(options: {
|
|
185
|
-
|
|
186
|
+
resourceManager: string;
|
|
186
187
|
key: string;
|
|
187
|
-
claim?:
|
|
188
|
+
claim?: ResourceManagerQueueClaim;
|
|
188
189
|
type: string;
|
|
189
190
|
payload?: JsonObject;
|
|
190
191
|
now?: string;
|
|
191
|
-
}):
|
|
192
|
+
}): ResourceManagerEvent;
|
|
192
193
|
listEvents(options?: {
|
|
193
|
-
|
|
194
|
+
resourceManager?: string;
|
|
194
195
|
key?: string;
|
|
195
196
|
limit?: number;
|
|
196
|
-
}):
|
|
197
|
+
}): ResourceManagerEvent[];
|
|
197
198
|
reserveWorkflowRun(options: WorkflowRunReservationOptions): WorkflowRunQueueRecord;
|
|
198
199
|
private reserveWorkflowRunInTransaction;
|
|
199
200
|
prepareOrAdoptWorkflowRun(options: WorkflowRunClaimOptions): WorkflowRunPreparationResult;
|
|
@@ -227,7 +228,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
227
228
|
leaseMs: number;
|
|
228
229
|
now?: string;
|
|
229
230
|
}): WorkflowRunQueueRecord | undefined;
|
|
230
|
-
/** Schedule a
|
|
231
|
+
/** Schedule a runner that validates one pending interactive submission. */
|
|
231
232
|
claimWorkflowRunForInteractionValidation(options: {
|
|
232
233
|
runId: string;
|
|
233
234
|
runnerId: string;
|
|
@@ -235,7 +236,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
235
236
|
leaseMs: number;
|
|
236
237
|
now?: string;
|
|
237
238
|
}): WorkflowRunQueueRecord | undefined;
|
|
238
|
-
/** Take a short
|
|
239
|
+
/** Take a short server claim without scheduling a parked interactive run. */
|
|
239
240
|
claimWorkflowRunForControl(options: {
|
|
240
241
|
runId: string;
|
|
241
242
|
runnerId: string;
|
|
@@ -289,6 +290,12 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
289
290
|
claimToken: string;
|
|
290
291
|
now?: string;
|
|
291
292
|
}): boolean;
|
|
293
|
+
parkWorkflowRunForRunnerNoProgress(options: {
|
|
294
|
+
runId: string;
|
|
295
|
+
claimToken: string;
|
|
296
|
+
detail: string;
|
|
297
|
+
now?: string;
|
|
298
|
+
}): boolean;
|
|
292
299
|
pauseParkedWorkflowRun(options: {
|
|
293
300
|
runId: string;
|
|
294
301
|
now?: string;
|
|
@@ -355,18 +362,18 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
355
362
|
private ensureProject;
|
|
356
363
|
private findProject;
|
|
357
364
|
private requireProjectId;
|
|
358
|
-
private
|
|
359
|
-
private
|
|
360
|
-
private
|
|
365
|
+
private resourceManagerRow;
|
|
366
|
+
private requireResourceManagerRow;
|
|
367
|
+
private requireResourceManagerRowByUid;
|
|
361
368
|
private requireResource;
|
|
362
|
-
private
|
|
369
|
+
private mapManagedResource;
|
|
363
370
|
private finalizers;
|
|
364
371
|
private replaceFinalizers;
|
|
365
|
-
private
|
|
372
|
+
private enqueueResourceManagerRow;
|
|
366
373
|
private queueErrors;
|
|
367
374
|
private queueVersion;
|
|
368
|
-
private
|
|
369
|
-
private
|
|
375
|
+
private settleResourceManagerClaim;
|
|
376
|
+
private assertResourceManagerClaim;
|
|
370
377
|
private requireLease;
|
|
371
378
|
private releaseLease;
|
|
372
379
|
private resourceRevision;
|
|
@@ -391,6 +398,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
391
398
|
private updateClaimedRunStatus;
|
|
392
399
|
private releaseRunClaim;
|
|
393
400
|
private terminalRun;
|
|
401
|
+
private settleWorkflowRunMessages;
|
|
394
402
|
private cancelWorkflowRunDependents;
|
|
395
403
|
private assertWritable;
|
|
396
404
|
}
|