@osolmaz/pi-workflows 0.16.2 → 0.16.4
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 +1 -1
- package/dist/extension/index.d.ts +1 -1
- package/dist/extension/index.js +32 -32
- 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 +1 -1
- package/dist/extension/workflow-message-coordinator.js +6 -6
- 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 +44 -44
- package/dist/{controllers → resource-managers}/sqlite.js +139 -130
- 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} +39 -38
- package/dist/{host/runner.js → server/server.js} +408 -374
- 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 +13 -13
- 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/{host/worker-entry.d.ts → server/workflow-runner-entry.d.ts} +3 -3
- package/dist/{host/worker-entry.js → server/workflow-runner-entry.js} +68 -35
- 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 +1 -1
- package/dist/state/workflow-messages.js +1 -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/engine.js +14 -15
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/store.d.ts +12 -11
- package/dist/workflows/store.js +24 -18
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/types.d.ts +2 -2
- 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 +6 -6
- 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 +35 -33
- package/docs/WORKFLOW_COMPOSITION.md +1 -1
- package/docs/{WORKFLOW_HOST.md → WORKFLOW_SERVER.md} +125 -119
- 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 +72 -66
- 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 +12 -11
- 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 +1 -1
- package/src/extension/index.ts +44 -34
- 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 +6 -6
- 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 +198 -186
- 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} +526 -461
- package/src/{host → server}/state.ts +78 -67
- package/src/{host → server}/view.ts +15 -15
- package/src/server/workflow-runner-content.ts +119 -0
- package/src/{host/worker-entry.ts → server/workflow-runner-entry.ts} +98 -57
- 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 +1 -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/engine.ts +14 -15
- package/src/workflows/store.ts +31 -28
- package/src/workflows/types.ts +2 -2
- 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.js.map +0 -1
- package/dist/host/worker-protocol.d.ts +0 -46
- 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 -176
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/resource-managers/results.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB;IAIjC,OAAO;QACL,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;QACF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACpB,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5C,CAAC;QACF,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,SAAS;gBACf,OAAO;gBACP,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACT,CAAC;QACvC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAA4C;IAE5C,OAAO,mBAAmB,EAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,OAAO,CACrB,MAA4C;IAE5C,OAAO,mBAAmB,EAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,MAA4C;IAE5C,OAAO,mBAAmB,EAAW,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ResourceManagerStore } from "./store.js";
|
|
2
|
+
import type { AnyResourceManagerDefinition, ResourceManagerDefinition, ManagedResource, ManagedResourceRef } from "./types.js";
|
|
3
|
+
import { ResourceManagerWorkflowCoordinator, type ResourceManagerWorkflowScheduler } from "./workflows.js";
|
|
4
|
+
export type ResourceManagerRuntimeOptions = {
|
|
5
|
+
store: ResourceManagerStore;
|
|
6
|
+
resourceManagers: AnyResourceManagerDefinition[];
|
|
7
|
+
workflowScheduler?: ResourceManagerWorkflowScheduler;
|
|
8
|
+
maxConcurrent?: number;
|
|
9
|
+
resourceManagerConcurrency?: Record<string, number>;
|
|
10
|
+
defaultTimeoutMs?: number;
|
|
11
|
+
leaseMs?: number;
|
|
12
|
+
pollIntervalMs?: number;
|
|
13
|
+
baseBackoffMs?: number;
|
|
14
|
+
maxBackoffMs?: number;
|
|
15
|
+
jitterRatio?: number;
|
|
16
|
+
now?: () => Date;
|
|
17
|
+
random?: () => number;
|
|
18
|
+
};
|
|
19
|
+
export declare class ResourceManagerRuntime {
|
|
20
|
+
readonly store: ResourceManagerStore;
|
|
21
|
+
private readonly ownerId;
|
|
22
|
+
private readonly definitions;
|
|
23
|
+
private readonly workflowCoordinator;
|
|
24
|
+
private readonly maxConcurrent;
|
|
25
|
+
private readonly resourceManagerConcurrency;
|
|
26
|
+
private readonly defaultTimeoutMs;
|
|
27
|
+
private readonly leaseMs;
|
|
28
|
+
private readonly pollIntervalMs;
|
|
29
|
+
private readonly baseBackoffMs;
|
|
30
|
+
private readonly maxBackoffMs;
|
|
31
|
+
private readonly jitterRatio;
|
|
32
|
+
private readonly now;
|
|
33
|
+
private readonly random;
|
|
34
|
+
private readonly activeByResourceManager;
|
|
35
|
+
private readonly activeReconciles;
|
|
36
|
+
private runAbort;
|
|
37
|
+
private runnerTasks;
|
|
38
|
+
constructor(options: ResourceManagerRuntimeOptions);
|
|
39
|
+
putResource<TSpec, TStatus>(definition: ResourceManagerDefinition<TSpec, TStatus>, key: string, spec: TSpec): ManagedResource<TSpec, TStatus>;
|
|
40
|
+
putResourceByName(resourceManager: string, key: string, spec: unknown): ManagedResource;
|
|
41
|
+
requestDeletion(ref: ManagedResourceRef): ManagedResource;
|
|
42
|
+
enqueue(ref: ManagedResourceRef, afterMs?: number): void;
|
|
43
|
+
start(): void;
|
|
44
|
+
stop(): Promise<void>;
|
|
45
|
+
runOne(): Promise<boolean>;
|
|
46
|
+
runUntilIdle(maxReconciles?: number): Promise<number>;
|
|
47
|
+
get workflowRequests(): ResourceManagerWorkflowCoordinator;
|
|
48
|
+
private runnerLoop;
|
|
49
|
+
private claimNext;
|
|
50
|
+
private eligibleResourceManagers;
|
|
51
|
+
private processClaim;
|
|
52
|
+
private reconcileClaim;
|
|
53
|
+
private callReconciler;
|
|
54
|
+
private finishSuccessfulClaim;
|
|
55
|
+
private finishFailedClaim;
|
|
56
|
+
private backoffMs;
|
|
57
|
+
private readyQueueExists;
|
|
58
|
+
private recordEvent;
|
|
59
|
+
}
|
|
@@ -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,7 +95,7 @@ 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
101
|
private readonly workflowMessages;
|
|
@@ -106,54 +106,54 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
106
106
|
readOnly?: boolean;
|
|
107
107
|
projectPath?: string;
|
|
108
108
|
state?: StateDatabase;
|
|
109
|
-
/**
|
|
109
|
+
/** Server-only global view. Project-scoped mutations still require projectPath. */
|
|
110
110
|
global?: boolean;
|
|
111
111
|
});
|
|
112
112
|
close(): void;
|
|
113
113
|
putResource<TSpec, TStatus>(options: {
|
|
114
|
-
|
|
114
|
+
resourceManager: string;
|
|
115
115
|
key: string;
|
|
116
116
|
spec: TSpec;
|
|
117
117
|
initialStatus: TStatus;
|
|
118
118
|
now?: string;
|
|
119
|
-
}):
|
|
120
|
-
getResource<TSpec = unknown, TStatus = unknown>(ref:
|
|
121
|
-
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;
|
|
122
122
|
listResources<TSpec = unknown, TStatus = unknown>(options?: {
|
|
123
|
-
|
|
124
|
-
}):
|
|
123
|
+
resourceManager?: string;
|
|
124
|
+
}): ManagedResource<TSpec, TStatus>[];
|
|
125
125
|
updateStatus<TStatus>(options: {
|
|
126
|
-
ref:
|
|
126
|
+
ref: ManagedResourceRef;
|
|
127
127
|
expectedResourceVersion: number;
|
|
128
|
-
claim:
|
|
129
|
-
status:
|
|
128
|
+
claim: ResourceManagerQueueClaim;
|
|
129
|
+
status: ManagedResourceStatus<TStatus>;
|
|
130
130
|
finalizers?: string[];
|
|
131
131
|
now?: string;
|
|
132
|
-
}):
|
|
133
|
-
requestDeletion(ref:
|
|
132
|
+
}): ManagedResource<unknown, TStatus>;
|
|
133
|
+
requestDeletion(ref: ManagedResourceRef, nowValue?: string): ManagedResource;
|
|
134
134
|
updateFinalizers(options: {
|
|
135
|
-
ref:
|
|
135
|
+
ref: ManagedResourceRef;
|
|
136
136
|
expectedResourceVersion: number;
|
|
137
137
|
finalizers: string[];
|
|
138
138
|
now?: string;
|
|
139
|
-
}):
|
|
140
|
-
deleteResource(ref:
|
|
141
|
-
enqueue(ref:
|
|
139
|
+
}): ManagedResource;
|
|
140
|
+
deleteResource(ref: ManagedResourceRef, expectedResourceVersion: number, claim: ResourceManagerQueueClaim): boolean;
|
|
141
|
+
enqueue(ref: ManagedResourceRef, availableAt?: string): void;
|
|
142
142
|
claimNext(options: {
|
|
143
|
-
|
|
143
|
+
resourceManagers: string[];
|
|
144
144
|
ownerId: string;
|
|
145
145
|
leaseMs: number;
|
|
146
146
|
now?: string;
|
|
147
|
-
exclude?:
|
|
148
|
-
}):
|
|
149
|
-
renewClaim(claim:
|
|
150
|
-
settleClaim(claim:
|
|
151
|
-
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;
|
|
152
152
|
listQueue(): QueueItem[];
|
|
153
153
|
reserveEffect(options: {
|
|
154
154
|
key: string;
|
|
155
155
|
resourceUid: string;
|
|
156
|
-
claim:
|
|
156
|
+
claim: ResourceManagerQueueClaim;
|
|
157
157
|
generation: number;
|
|
158
158
|
kind: string;
|
|
159
159
|
requestFingerprint: string;
|
|
@@ -163,7 +163,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
163
163
|
updateEffect(options: {
|
|
164
164
|
resourceUid: string;
|
|
165
165
|
key: string;
|
|
166
|
-
claim:
|
|
166
|
+
claim: ResourceManagerQueueClaim;
|
|
167
167
|
state: EffectRecord["state"];
|
|
168
168
|
externalRef?: string;
|
|
169
169
|
error?: string;
|
|
@@ -172,29 +172,29 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
172
172
|
listEffects(resourceUid: string): EffectRecord[];
|
|
173
173
|
reserveWorkflow(options: {
|
|
174
174
|
resourceUid: string;
|
|
175
|
-
claim:
|
|
175
|
+
claim: ResourceManagerQueueClaim;
|
|
176
176
|
requestKey: string;
|
|
177
177
|
workflow: string;
|
|
178
178
|
inputFingerprint: string;
|
|
179
179
|
}): WorkflowReservation;
|
|
180
180
|
getWorkflow(resourceUid: string, requestKey: string): ChildWorkflowRecord | undefined;
|
|
181
181
|
getWorkflowByRequestId(requestId: string): ChildWorkflowRecord | undefined;
|
|
182
|
-
updateWorkflow(requestId: string, update: WorkflowRecordUpdate, claim:
|
|
182
|
+
updateWorkflow(requestId: string, update: WorkflowRecordUpdate, claim: ResourceManagerQueueClaim): ChildWorkflowRecord;
|
|
183
183
|
completeWorkflow(requestId: string, update: WorkflowRecordUpdate): ChildWorkflowRecord;
|
|
184
184
|
listWorkflows(resourceUid: string): ChildWorkflowRecord[];
|
|
185
185
|
recordEvent(options: {
|
|
186
|
-
|
|
186
|
+
resourceManager: string;
|
|
187
187
|
key: string;
|
|
188
|
-
claim?:
|
|
188
|
+
claim?: ResourceManagerQueueClaim;
|
|
189
189
|
type: string;
|
|
190
190
|
payload?: JsonObject;
|
|
191
191
|
now?: string;
|
|
192
|
-
}):
|
|
192
|
+
}): ResourceManagerEvent;
|
|
193
193
|
listEvents(options?: {
|
|
194
|
-
|
|
194
|
+
resourceManager?: string;
|
|
195
195
|
key?: string;
|
|
196
196
|
limit?: number;
|
|
197
|
-
}):
|
|
197
|
+
}): ResourceManagerEvent[];
|
|
198
198
|
reserveWorkflowRun(options: WorkflowRunReservationOptions): WorkflowRunQueueRecord;
|
|
199
199
|
private reserveWorkflowRunInTransaction;
|
|
200
200
|
prepareOrAdoptWorkflowRun(options: WorkflowRunClaimOptions): WorkflowRunPreparationResult;
|
|
@@ -228,7 +228,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
228
228
|
leaseMs: number;
|
|
229
229
|
now?: string;
|
|
230
230
|
}): WorkflowRunQueueRecord | undefined;
|
|
231
|
-
/** Schedule a
|
|
231
|
+
/** Schedule a runner that validates one pending interactive submission. */
|
|
232
232
|
claimWorkflowRunForInteractionValidation(options: {
|
|
233
233
|
runId: string;
|
|
234
234
|
runnerId: string;
|
|
@@ -236,7 +236,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
236
236
|
leaseMs: number;
|
|
237
237
|
now?: string;
|
|
238
238
|
}): WorkflowRunQueueRecord | undefined;
|
|
239
|
-
/** Take a short
|
|
239
|
+
/** Take a short server claim without scheduling a parked interactive run. */
|
|
240
240
|
claimWorkflowRunForControl(options: {
|
|
241
241
|
runId: string;
|
|
242
242
|
runnerId: string;
|
|
@@ -290,7 +290,7 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
290
290
|
claimToken: string;
|
|
291
291
|
now?: string;
|
|
292
292
|
}): boolean;
|
|
293
|
-
|
|
293
|
+
parkWorkflowRunForRunnerNoProgress(options: {
|
|
294
294
|
runId: string;
|
|
295
295
|
claimToken: string;
|
|
296
296
|
detail: string;
|
|
@@ -362,18 +362,18 @@ export declare class SqliteControllerStore implements ControllerStore {
|
|
|
362
362
|
private ensureProject;
|
|
363
363
|
private findProject;
|
|
364
364
|
private requireProjectId;
|
|
365
|
-
private
|
|
366
|
-
private
|
|
367
|
-
private
|
|
365
|
+
private resourceManagerRow;
|
|
366
|
+
private requireResourceManagerRow;
|
|
367
|
+
private requireResourceManagerRowByUid;
|
|
368
368
|
private requireResource;
|
|
369
|
-
private
|
|
369
|
+
private mapManagedResource;
|
|
370
370
|
private finalizers;
|
|
371
371
|
private replaceFinalizers;
|
|
372
|
-
private
|
|
372
|
+
private enqueueResourceManagerRow;
|
|
373
373
|
private queueErrors;
|
|
374
374
|
private queueVersion;
|
|
375
|
-
private
|
|
376
|
-
private
|
|
375
|
+
private settleResourceManagerClaim;
|
|
376
|
+
private assertResourceManagerClaim;
|
|
377
377
|
private requireLease;
|
|
378
378
|
private releaseLease;
|
|
379
379
|
private resourceRevision;
|