@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
package/src/workflows/engine.ts
CHANGED
|
@@ -332,12 +332,11 @@ export class WorkflowEngine {
|
|
|
332
332
|
validateWorkflowDefinition(workflow);
|
|
333
333
|
this.presentationRequired = workflow.presentationPrompt !== undefined;
|
|
334
334
|
// Reset before any await: a park or cancel landing during preparation
|
|
335
|
-
// must survive, or a
|
|
335
|
+
// must survive, or a server drain would hang while the run executes.
|
|
336
336
|
this.cancelled = false;
|
|
337
337
|
this.paused = false;
|
|
338
338
|
this.parked = false;
|
|
339
|
-
const
|
|
340
|
-
const state = loaded.state;
|
|
339
|
+
const state = await this.store.prepareRunResume(runId);
|
|
341
340
|
const sourceMismatch = workflowIdentityMismatch(state, workflow, options.workflowSource);
|
|
342
341
|
if (sourceMismatch && options.force !== true) {
|
|
343
342
|
throw new WorkflowSourceChangedError(runId);
|
|
@@ -456,21 +455,21 @@ export class WorkflowEngine {
|
|
|
456
455
|
this.cancelled = false;
|
|
457
456
|
this.paused = false;
|
|
458
457
|
this.parked = false;
|
|
459
|
-
const
|
|
460
|
-
if (
|
|
458
|
+
const parentState = await this.store.readRunState(parentRunId);
|
|
459
|
+
if (parentState === null) {
|
|
461
460
|
throw new Error(`Cannot continue from unreadable workflow run: ${parentRunId}`);
|
|
462
461
|
}
|
|
463
|
-
if (
|
|
462
|
+
if (parentState.status !== "waiting" || parentState.waitingOn === undefined) {
|
|
464
463
|
throw new Error(
|
|
465
|
-
`Cannot continue workflow run ${parentRunId} with status ${
|
|
464
|
+
`Cannot continue workflow run ${parentRunId} with status ${parentState.status}`,
|
|
466
465
|
);
|
|
467
466
|
}
|
|
468
|
-
const sourceMismatch = workflowIdentityMismatch(
|
|
467
|
+
const sourceMismatch = workflowIdentityMismatch(parentState, workflow, options.workflowSource);
|
|
469
468
|
if (sourceMismatch && options.force !== true) {
|
|
470
469
|
throw new WorkflowSourceChangedError(parentRunId);
|
|
471
470
|
}
|
|
472
471
|
|
|
473
|
-
const waitingNodeId =
|
|
472
|
+
const waitingNodeId = parentState.waitingOn;
|
|
474
473
|
const waitingNode = workflow.nodes[waitingNodeId];
|
|
475
474
|
const humanContract =
|
|
476
475
|
waitingNode?.nodeType === "checkpoint" ? waitingNode.humanDecision : undefined;
|
|
@@ -481,7 +480,7 @@ export class WorkflowEngine {
|
|
|
481
480
|
if (options.humanDecision === undefined) {
|
|
482
481
|
throw new Error(`Checkpoint ${waitingNodeId} requires an accepted verified human decision`);
|
|
483
482
|
}
|
|
484
|
-
const request =
|
|
483
|
+
const request = parentState.finalOutput as HumanDecisionRequest;
|
|
485
484
|
if (
|
|
486
485
|
request?.schema !== "pi-workflows.human-decision-request.v1" ||
|
|
487
486
|
request.decisionId !== options.humanDecision.decisionId ||
|
|
@@ -495,7 +494,7 @@ export class WorkflowEngine {
|
|
|
495
494
|
}
|
|
496
495
|
acceptedResponse = validateHumanDecisionResponse(request, durableDecision.response);
|
|
497
496
|
acceptedNodeId = request.nodeId;
|
|
498
|
-
normalizedInput = structuredClone(
|
|
497
|
+
normalizedInput = structuredClone(parentState.input);
|
|
499
498
|
} else {
|
|
500
499
|
const suppliedInput = input === undefined ? null : input;
|
|
501
500
|
normalizedInput = workflow.input ? await workflow.input(suppliedInput) : suppliedInput;
|
|
@@ -512,9 +511,9 @@ export class WorkflowEngine {
|
|
|
512
511
|
options.runId,
|
|
513
512
|
);
|
|
514
513
|
state.parentRunId = parentRunId;
|
|
515
|
-
state.outputs = structuredClone(
|
|
516
|
-
state.results = structuredClone(
|
|
517
|
-
state.steps = structuredClone(
|
|
514
|
+
state.outputs = structuredClone(parentState.outputs);
|
|
515
|
+
state.results = structuredClone(parentState.results);
|
|
516
|
+
state.steps = structuredClone(parentState.steps);
|
|
518
517
|
if (humanContract !== undefined && options.humanDecision !== undefined) {
|
|
519
518
|
const receipt = {
|
|
520
519
|
decisionId: options.humanDecision.decisionId,
|
|
@@ -557,7 +556,7 @@ export class WorkflowEngine {
|
|
|
557
556
|
...(state.runTitle ? { runTitle: state.runTitle } : {}),
|
|
558
557
|
input: state.input,
|
|
559
558
|
continuedFrom: parentRunId,
|
|
560
|
-
checkpoint:
|
|
559
|
+
checkpoint: parentState.waitingOn,
|
|
561
560
|
carriedSteps: state.steps.length,
|
|
562
561
|
},
|
|
563
562
|
});
|
|
@@ -1563,17 +1562,15 @@ export class WorkflowEngine {
|
|
|
1563
1562
|
);
|
|
1564
1563
|
}
|
|
1565
1564
|
const effectType = node.effect.type.trim();
|
|
1566
|
-
const
|
|
1567
|
-
|
|
1568
|
-
? await node.effect.idempotencyKey(context)
|
|
1569
|
-
: node.effect.idempotencyKey;
|
|
1565
|
+
const invocation = context.state.steps.filter((step) => step.nodeId === nodeId).length + 1;
|
|
1566
|
+
const idempotencyKey = `${context.state.runId}:${effectType}:${nodeId}:${invocation}`;
|
|
1570
1567
|
const request =
|
|
1571
1568
|
typeof node.effect.request === "function"
|
|
1572
1569
|
? await node.effect.request(context)
|
|
1573
1570
|
: node.effect.request;
|
|
1574
1571
|
/* istanbul ignore if -- definition validation and effect helpers reject empty fields */
|
|
1575
|
-
if (effectType.length === 0
|
|
1576
|
-
throw new Error("Managed effect type
|
|
1572
|
+
if (effectType.length === 0) {
|
|
1573
|
+
throw new Error("Managed effect type must be nonempty text");
|
|
1577
1574
|
}
|
|
1578
1575
|
canonicalJson(request);
|
|
1579
1576
|
const reservation = await this.store.reserveEffect({
|
package/src/workflows/schema.ts
CHANGED
|
@@ -113,12 +113,6 @@ export function assertValidActionNode(node: ActionNodeDefinition, nodeId = "acti
|
|
|
113
113
|
if (node.effect.recovery !== "idempotent" && node.effect.recovery !== "manual") {
|
|
114
114
|
fail(`node ${nodeId} effect recovery must be idempotent or manual`);
|
|
115
115
|
}
|
|
116
|
-
if (
|
|
117
|
-
typeof node.effect.idempotencyKey !== "string" &&
|
|
118
|
-
typeof node.effect.idempotencyKey !== "function"
|
|
119
|
-
) {
|
|
120
|
-
fail(`node ${nodeId} effect idempotencyKey must be text or a function`);
|
|
121
|
-
}
|
|
122
116
|
if (!("request" in node.effect)) {
|
|
123
117
|
fail(`node ${nodeId} effect requires request data or a request function`);
|
|
124
118
|
}
|
package/src/workflows/store.ts
CHANGED
|
@@ -143,9 +143,20 @@ export type WorkflowRunDisplayState = {
|
|
|
143
143
|
error: string | null;
|
|
144
144
|
};
|
|
145
145
|
|
|
146
|
+
export type WorkflowRunTerminalData = {
|
|
147
|
+
runId: string;
|
|
148
|
+
status: "completed" | "failed" | "timed_out" | "cancelled";
|
|
149
|
+
statusDetail: string | null;
|
|
150
|
+
input: JsonValue;
|
|
151
|
+
finalOutput: JsonValue | null;
|
|
152
|
+
error: string | null;
|
|
153
|
+
presentationInstructions: string;
|
|
154
|
+
restartNumber: number;
|
|
155
|
+
};
|
|
156
|
+
|
|
146
157
|
export type WorkflowRunStoreOptions = {
|
|
147
158
|
authorityProvider?: (runId: string) => RunWriteAuthority | undefined;
|
|
148
|
-
/**
|
|
159
|
+
/** Server-owned projection updates that must commit with each run snapshot. */
|
|
149
160
|
snapshotLifecycle?: (context: {
|
|
150
161
|
runId: string;
|
|
151
162
|
state: WorkflowRunState;
|
|
@@ -153,13 +164,13 @@ export type WorkflowRunStoreOptions = {
|
|
|
153
164
|
database: StateDatabase;
|
|
154
165
|
now: number;
|
|
155
166
|
}) => void;
|
|
156
|
-
/** The global
|
|
157
|
-
|
|
167
|
+
/** The global server may record an attested Pi session after the runner lease ends. */
|
|
168
|
+
allowServerSessionRecording?: boolean;
|
|
158
169
|
state?: StateDatabase;
|
|
159
170
|
readOnly?: boolean;
|
|
160
171
|
};
|
|
161
172
|
|
|
162
|
-
/** The state boundary used by workflow code, including out-of-process
|
|
173
|
+
/** The state boundary used by workflow code, including out-of-process runners. */
|
|
163
174
|
export interface WorkflowExecutionStore {
|
|
164
175
|
readonly databasePath: string;
|
|
165
176
|
initializeRun(
|
|
@@ -167,11 +178,8 @@ export interface WorkflowExecutionStore {
|
|
|
167
178
|
state: WorkflowRunState,
|
|
168
179
|
options?: InitializeWorkflowRunOptions,
|
|
169
180
|
): Promise<string>;
|
|
170
|
-
prepareRunResume(runId: string): Promise<
|
|
171
|
-
|
|
172
|
-
runId: string,
|
|
173
|
-
options?: ReadWorkflowRunOptions,
|
|
174
|
-
): LoadedWorkflowRun | null | Promise<LoadedWorkflowRun | null>;
|
|
181
|
+
prepareRunResume(runId: string): Promise<WorkflowRunState>;
|
|
182
|
+
readRunState(runId: string): WorkflowRunState | null | Promise<WorkflowRunState | null>;
|
|
175
183
|
writeSnapshot(
|
|
176
184
|
runId: string,
|
|
177
185
|
state: WorkflowRunState,
|
|
@@ -488,7 +496,7 @@ export class WorkflowRunStore {
|
|
|
488
496
|
| ((runId: string) => RunWriteAuthority | undefined)
|
|
489
497
|
| undefined;
|
|
490
498
|
private readonly snapshotLifecycle: WorkflowRunStoreOptions["snapshotLifecycle"];
|
|
491
|
-
private readonly
|
|
499
|
+
private readonly allowServerSessionRecording: boolean;
|
|
492
500
|
private readonly contexts = new Map<string, RunContext>();
|
|
493
501
|
private readonly ownsState: boolean;
|
|
494
502
|
private readonly mutations: StateMutationStore;
|
|
@@ -497,7 +505,7 @@ export class WorkflowRunStore {
|
|
|
497
505
|
constructor(databasePath: string = workflowStatePath(), options: WorkflowRunStoreOptions = {}) {
|
|
498
506
|
this.authorityProvider = options.authorityProvider;
|
|
499
507
|
this.snapshotLifecycle = options.snapshotLifecycle;
|
|
500
|
-
this.
|
|
508
|
+
this.allowServerSessionRecording = options.allowServerSessionRecording === true;
|
|
501
509
|
this.ownsState = options.state === undefined;
|
|
502
510
|
this.state =
|
|
503
511
|
options.state ??
|
|
@@ -515,7 +523,7 @@ export class WorkflowRunStore {
|
|
|
515
523
|
if (this.ownsState) this.state.close();
|
|
516
524
|
}
|
|
517
525
|
|
|
518
|
-
/**
|
|
526
|
+
/** Server-only synchronization after a queue lifecycle mutation on the run resource. */
|
|
519
527
|
synchronizeRevision(runId: string): number {
|
|
520
528
|
const revision = this.resourceRevision(runId);
|
|
521
529
|
const context = this.contexts.get(runId);
|
|
@@ -1455,11 +1463,11 @@ export class WorkflowRunStore {
|
|
|
1455
1463
|
return { runId, originSessionId, followUps };
|
|
1456
1464
|
}
|
|
1457
1465
|
|
|
1458
|
-
async prepareRunResume(runId: string): Promise<
|
|
1459
|
-
const
|
|
1460
|
-
if (
|
|
1461
|
-
if (
|
|
1462
|
-
throw new Error(`Cannot resume workflow run ${runId} with status ${
|
|
1466
|
+
async prepareRunResume(runId: string): Promise<WorkflowRunState> {
|
|
1467
|
+
const state = this.readRunState(runId);
|
|
1468
|
+
if (state === null) throw new Error(`Cannot resume unreadable workflow run: ${runId}`);
|
|
1469
|
+
if (state.status !== "running") {
|
|
1470
|
+
throw new Error(`Cannot resume workflow run ${runId} with status ${state.status}`);
|
|
1463
1471
|
}
|
|
1464
1472
|
this.verifySettingsProjections(runId);
|
|
1465
1473
|
const revision = this.resourceRevision(runId);
|
|
@@ -1487,20 +1495,20 @@ export class WorkflowRunStore {
|
|
|
1487
1495
|
payload: {},
|
|
1488
1496
|
};
|
|
1489
1497
|
insertRunEvent(this.state, row.resourceId, nextRevision, at, traceEvent);
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
this.persistRunState(row,
|
|
1493
|
-
recordViewerDeltas(this.state, runId, runViewerTargets(
|
|
1498
|
+
state.traceSeq = nextRevision;
|
|
1499
|
+
state.updatedAt = at;
|
|
1500
|
+
this.persistRunState(row, state, nextRevision, now);
|
|
1501
|
+
recordViewerDeltas(this.state, runId, runViewerTargets(state, traceEvent), now);
|
|
1494
1502
|
context.revision = nextRevision;
|
|
1495
1503
|
});
|
|
1496
|
-
const prepared = this.
|
|
1504
|
+
const prepared = this.readRunState(runId);
|
|
1497
1505
|
if (prepared === null) throw new Error(`Workflow run became unreadable: ${runId}`);
|
|
1498
1506
|
return prepared;
|
|
1499
1507
|
}
|
|
1500
1508
|
|
|
1501
1509
|
async markRunInterrupted(
|
|
1502
1510
|
runId: string,
|
|
1503
|
-
reason = "Workflow
|
|
1511
|
+
reason = "Workflow server stopped before the run finished",
|
|
1504
1512
|
): Promise<LoadedWorkflowRun | null> {
|
|
1505
1513
|
const loaded = this.readRun(runId);
|
|
1506
1514
|
if (loaded === null || loaded.state.status !== "running") return loaded;
|
|
@@ -1538,7 +1546,7 @@ export class WorkflowRunStore {
|
|
|
1538
1546
|
);
|
|
1539
1547
|
}
|
|
1540
1548
|
|
|
1541
|
-
/**
|
|
1549
|
+
/** Server-only synchronous form for an already serialized command transaction. */
|
|
1542
1550
|
publishUpdateSynchronous(
|
|
1543
1551
|
runId: string,
|
|
1544
1552
|
state: WorkflowRunState,
|
|
@@ -1754,7 +1762,7 @@ export class WorkflowRunStore {
|
|
|
1754
1762
|
},
|
|
1755
1763
|
};
|
|
1756
1764
|
insertRunEvent(this.state, run.resourceId, revision, at, traceEvent);
|
|
1757
|
-
const current = this.
|
|
1765
|
+
const current = this.materializeRunState(run, this.readDefinition(run.definitionHash));
|
|
1758
1766
|
current.traceSeq = revision;
|
|
1759
1767
|
current.updatedAt = at;
|
|
1760
1768
|
this.persistRunState(run, current, revision, now);
|
|
@@ -2182,11 +2190,70 @@ export class WorkflowRunStore {
|
|
|
2182
2190
|
};
|
|
2183
2191
|
}
|
|
2184
2192
|
|
|
2193
|
+
readRunInput(runId: string): JsonValue | null {
|
|
2194
|
+
const row = this.readRunRow(runId);
|
|
2195
|
+
return row === undefined ? null : this.state.readJson(row.inputHash);
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
readRunFinalOutput(runId: string): JsonValue | null {
|
|
2199
|
+
const row = this.readRunRow(runId);
|
|
2200
|
+
return row?.finalOutputHash == null ? null : this.state.readJson(row.finalOutputHash);
|
|
2201
|
+
}
|
|
2202
|
+
|
|
2203
|
+
readRunError(runId: string): string | null {
|
|
2204
|
+
const row = this.readRunRow(runId);
|
|
2205
|
+
return row?.errorHash == null ? null : this.readText(row.errorHash);
|
|
2206
|
+
}
|
|
2207
|
+
|
|
2208
|
+
readPresentationInstructions(runId: string): string {
|
|
2209
|
+
const row = this.state.connection
|
|
2210
|
+
.prepare("SELECT presentation_prompt_hash AS hash FROM runs WHERE run_id = ?")
|
|
2211
|
+
.get(runId) as { hash?: Buffer | null } | undefined;
|
|
2212
|
+
if (row?.hash == null) {
|
|
2213
|
+
return "Explain the final workflow result to the user in a normal response.";
|
|
2214
|
+
}
|
|
2215
|
+
return this.readText(row.hash);
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
readTerminalData(runId: string): WorkflowRunTerminalData | null {
|
|
2219
|
+
const row = this.state.connection
|
|
2220
|
+
.prepare(
|
|
2221
|
+
`SELECT status, status_detail AS statusDetail, restart_number AS restartNumber
|
|
2222
|
+
FROM runs WHERE run_id = ?`,
|
|
2223
|
+
)
|
|
2224
|
+
.get(runId) as
|
|
2225
|
+
| { status?: unknown; statusDetail?: unknown; restartNumber?: unknown }
|
|
2226
|
+
| undefined;
|
|
2227
|
+
if (
|
|
2228
|
+
row === undefined ||
|
|
2229
|
+
!["completed", "failed", "timed_out", "cancelled"].includes(String(row.status)) ||
|
|
2230
|
+
typeof row.restartNumber !== "number"
|
|
2231
|
+
) {
|
|
2232
|
+
return null;
|
|
2233
|
+
}
|
|
2234
|
+
return {
|
|
2235
|
+
runId,
|
|
2236
|
+
status: row.status as WorkflowRunTerminalData["status"],
|
|
2237
|
+
statusDetail: typeof row.statusDetail === "string" ? row.statusDetail : null,
|
|
2238
|
+
input: this.readRunInput(runId) as JsonValue,
|
|
2239
|
+
finalOutput: this.readRunFinalOutput(runId),
|
|
2240
|
+
error: this.readRunError(runId),
|
|
2241
|
+
presentationInstructions: this.readPresentationInstructions(runId),
|
|
2242
|
+
restartNumber: row.restartNumber,
|
|
2243
|
+
};
|
|
2244
|
+
}
|
|
2245
|
+
|
|
2246
|
+
readRunState(runId: string): WorkflowRunState | null {
|
|
2247
|
+
const row = this.readRunRow(runId);
|
|
2248
|
+
if (row === undefined) return null;
|
|
2249
|
+
return this.materializeRunState(row, this.readDefinition(row.definitionHash));
|
|
2250
|
+
}
|
|
2251
|
+
|
|
2185
2252
|
readRun(runId: string, options: ReadWorkflowRunOptions = {}): LoadedWorkflowRun | null {
|
|
2186
2253
|
const row = this.readRunRow(runId);
|
|
2187
2254
|
if (row === undefined) return null;
|
|
2188
2255
|
const snapshot = this.readDefinition(row.definitionHash);
|
|
2189
|
-
const state = this.
|
|
2256
|
+
const state = this.materializeRunState(row, snapshot);
|
|
2190
2257
|
const segments = this.segmentRows(runId).map((segment) => this.loadSegment(segment, state));
|
|
2191
2258
|
const flat = segments.find((segment) => segment.attemptId === "") ?? emptySegment();
|
|
2192
2259
|
return {
|
|
@@ -2465,7 +2532,7 @@ export class WorkflowRunStore {
|
|
|
2465
2532
|
|
|
2466
2533
|
private assertSessionWriteAuthority(runId: string): void {
|
|
2467
2534
|
const run = this.requireRunRow(runId);
|
|
2468
|
-
if (this.
|
|
2535
|
+
if (this.allowServerSessionRecording) return;
|
|
2469
2536
|
this.assertWriteAuthority(run, this.contextFor(runId).revision);
|
|
2470
2537
|
}
|
|
2471
2538
|
|
|
@@ -3458,7 +3525,7 @@ export class WorkflowRunStore {
|
|
|
3458
3525
|
return row;
|
|
3459
3526
|
}
|
|
3460
3527
|
|
|
3461
|
-
private
|
|
3528
|
+
private materializeRunState(row: RunRow, snapshot: WorkflowDefinitionSnapshot): WorkflowRunState {
|
|
3462
3529
|
const steps = this.readSteps(row.runId);
|
|
3463
3530
|
return this.buildRunState(
|
|
3464
3531
|
row,
|
package/src/workflows/types.ts
CHANGED
|
@@ -53,9 +53,7 @@ export type WorkflowEffectRecovery = "idempotent" | "manual";
|
|
|
53
53
|
export type WorkflowManagedEffect = {
|
|
54
54
|
/** Stable external effect category, for example `github.comment`. */
|
|
55
55
|
type: string;
|
|
56
|
-
/**
|
|
57
|
-
idempotencyKey: string | ((context: WorkflowNodeContext) => MaybePromise<string>);
|
|
58
|
-
/** Canonical request data used to reject key reuse with another operation. */
|
|
56
|
+
/** Canonical request data used to reject engine-owned key reuse with another operation. */
|
|
59
57
|
request: unknown | ((context: WorkflowNodeContext) => MaybePromise<unknown>);
|
|
60
58
|
/** `manual` never retries after an uncertain child exit. */
|
|
61
59
|
recovery: WorkflowEffectRecovery;
|
|
@@ -98,7 +96,7 @@ export type WorkflowProgressData = {
|
|
|
98
96
|
export type WorkflowNodeCommon = {
|
|
99
97
|
/**
|
|
100
98
|
* Per-node active-execution timeout or a callback that derives it from the run context.
|
|
101
|
-
* Waiting, paused, disconnected, and
|
|
99
|
+
* Waiting, paused, disconnected, and server-down origin-session time does not count.
|
|
102
100
|
* Null disables the deadline. Omission falls back to the engine default (15 minutes).
|
|
103
101
|
*/
|
|
104
102
|
timeoutMs?: number | null | ((context: WorkflowNodeContext) => MaybePromise<number | null>);
|
|
@@ -964,7 +962,7 @@ export type WorkflowEngineOptions = {
|
|
|
964
962
|
notificationSink?: WorkflowNotificationSink;
|
|
965
963
|
/** Canonical SQLite database. Defaults to `~/.pi/agent/workflows/state.sqlite`. */
|
|
966
964
|
databasePath?: string;
|
|
967
|
-
/** Durable execution store.
|
|
965
|
+
/** Durable execution store. Runners use a server-backed implementation. */
|
|
968
966
|
store?: import("./store.js").WorkflowExecutionStore;
|
|
969
967
|
/**
|
|
970
968
|
* Awaited after `run_started` is persisted, before any node executes.
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ControllerCondition, ControllerConditionInput, ControllerResourceStatus, ControllerStatusPatch } from "./types.js";
|
|
2
|
-
export declare function conditionTrue(type: string, reason: string, message?: string): ControllerConditionInput;
|
|
3
|
-
export declare function conditionFalse(type: string, reason: string, message?: string): ControllerConditionInput;
|
|
4
|
-
export declare function conditionUnknown(type: string, reason: string, message?: string): ControllerConditionInput;
|
|
5
|
-
export declare function applyStatusPatch<TStatus>(current: ControllerResourceStatus<TStatus>, patch: ControllerStatusPatch<TStatus> | undefined, generation: number, now: string): ControllerResourceStatus<TStatus>;
|
|
6
|
-
export declare function mergeConditions(current: ControllerCondition[], updates: ControllerConditionInput[], generation: number, now: string): ControllerCondition[];
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/controllers/conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { AnyControllerDefinition, ControllerDefinition, ControllerResource } from "./types.js";
|
|
2
|
-
export declare function defineController<TSpec, TStatus>(definition: ControllerDefinition<TSpec, TStatus>): ControllerDefinition<TSpec, TStatus>;
|
|
3
|
-
export declare function isControllerDefinition(value: unknown): value is AnyControllerDefinition;
|
|
4
|
-
export declare function assertValidControllerDefinition<TSpec, TStatus>(definition: ControllerDefinition<TSpec, TStatus>): void;
|
|
5
|
-
export declare function asAnyControllerDefinition<TSpec, TStatus>(definition: ControllerDefinition<TSpec, TStatus>): AnyControllerDefinition;
|
|
6
|
-
export declare function asTypedResource<TSpec, TStatus>(resource: ControllerResource): ControllerResource<TSpec, TStatus>;
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
const CONTROLLER_DEFINITION_BRAND = Symbol.for("pi-workflows.controller-definition");
|
|
2
|
-
const CONTROLLER_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
3
|
-
export function defineController(definition) {
|
|
4
|
-
assertValidControllerDefinition(definition);
|
|
5
|
-
if (isControllerDefinition(definition)) {
|
|
6
|
-
return definition;
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(definition, CONTROLLER_DEFINITION_BRAND, {
|
|
9
|
-
value: true,
|
|
10
|
-
enumerable: false,
|
|
11
|
-
configurable: false,
|
|
12
|
-
writable: false,
|
|
13
|
-
});
|
|
14
|
-
return definition;
|
|
15
|
-
}
|
|
16
|
-
export function isControllerDefinition(value) {
|
|
17
|
-
return (value !== null &&
|
|
18
|
-
typeof value === "object" &&
|
|
19
|
-
value[CONTROLLER_DEFINITION_BRAND] === true);
|
|
20
|
-
}
|
|
21
|
-
export function assertValidControllerDefinition(definition) {
|
|
22
|
-
if (definition === null || typeof definition !== "object") {
|
|
23
|
-
throw new Error("Invalid controller definition: expected an object");
|
|
24
|
-
}
|
|
25
|
-
if (!CONTROLLER_NAME_PATTERN.test(definition.name)) {
|
|
26
|
-
throw new Error(`Invalid controller definition: name ${JSON.stringify(definition.name)} must match ${CONTROLLER_NAME_PATTERN.source}`);
|
|
27
|
-
}
|
|
28
|
-
if (typeof definition.initialStatus !== "function") {
|
|
29
|
-
throw new Error("Invalid controller definition: initialStatus must be a function");
|
|
30
|
-
}
|
|
31
|
-
if (typeof definition.reconcile !== "function") {
|
|
32
|
-
throw new Error("Invalid controller definition: reconcile must be a function");
|
|
33
|
-
}
|
|
34
|
-
if (definition.timeoutMs !== undefined &&
|
|
35
|
-
(!Number.isSafeInteger(definition.timeoutMs) || definition.timeoutMs <= 0)) {
|
|
36
|
-
throw new Error("Invalid controller definition: timeoutMs must be a positive safe integer");
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export function asAnyControllerDefinition(definition) {
|
|
40
|
-
return definition;
|
|
41
|
-
}
|
|
42
|
-
export function asTypedResource(resource) {
|
|
43
|
-
return resource;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=definition.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/controllers/definition.ts"],"names":[],"mappings":"AAEA,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AACrF,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAC9B,UAAgD;IAEhD,+BAA+B,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,2BAA2B,EAAE;QAC7D,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACxB,KAAsC,CAAC,2BAA2B,CAAC,KAAK,IAAI,CAC9E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,UAAgD;IAEhD,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,uCAAuC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,uBAAuB,CAAC,MAAM,EAAE,CACtH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,IACE,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,UAAgD;IAEhD,OAAO,UAA+D,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAA4B;IAE5B,OAAO,QAA8C,CAAC;AACxD,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { ControllerStore } from "./store.js";
|
|
2
|
-
import type { ControllerEffects, ControllerQueueClaim, ControllerResource, EffectDefinition, EffectRecord } from "./types.js";
|
|
3
|
-
export declare class ControllerEffectService implements ControllerEffects {
|
|
4
|
-
private readonly store;
|
|
5
|
-
private readonly resource;
|
|
6
|
-
private readonly claim;
|
|
7
|
-
private readonly signal;
|
|
8
|
-
private used;
|
|
9
|
-
constructor(store: ControllerStore, resource: ControllerResource, claim: ControllerQueueClaim, signal: AbortSignal);
|
|
10
|
-
ensure<TRequest>(definition: EffectDefinition<TRequest>): Promise<EffectRecord>;
|
|
11
|
-
private observe;
|
|
12
|
-
private applyObservation;
|
|
13
|
-
private apply;
|
|
14
|
-
private recordEvent;
|
|
15
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/controllers/effects.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare class ResourceConflictError extends Error {
|
|
2
|
-
constructor(controller: string, key: string);
|
|
3
|
-
}
|
|
4
|
-
export declare class ResourceNotFoundError extends Error {
|
|
5
|
-
constructor(controller: string, key: string);
|
|
6
|
-
}
|
|
7
|
-
export declare class EffectRequestConflictError extends Error {
|
|
8
|
-
constructor(key: string);
|
|
9
|
-
}
|
|
10
|
-
export declare class WorkflowRequestConflictError extends Error {
|
|
11
|
-
constructor(key: string);
|
|
12
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export class ResourceConflictError extends Error {
|
|
2
|
-
constructor(controller, key) {
|
|
3
|
-
super(`Controller resource ${controller}/${key} changed during reconciliation`);
|
|
4
|
-
this.name = "ResourceConflictError";
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
export class ResourceNotFoundError extends Error {
|
|
8
|
-
constructor(controller, key) {
|
|
9
|
-
super(`Controller resource not found: ${controller}/${key}`);
|
|
10
|
-
this.name = "ResourceNotFoundError";
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
export class EffectRequestConflictError extends Error {
|
|
14
|
-
constructor(key) {
|
|
15
|
-
super(`Effect key ${JSON.stringify(key)} was reused with a different request`);
|
|
16
|
-
this.name = "EffectRequestConflictError";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export class WorkflowRequestConflictError extends Error {
|
|
20
|
-
constructor(key) {
|
|
21
|
-
super(`Workflow request key ${JSON.stringify(key)} was reused with different input`);
|
|
22
|
-
this.name = "WorkflowRequestConflictError";
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/controllers/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,UAAkB,EAAE,GAAW;QACzC,KAAK,CAAC,uBAAuB,UAAU,IAAI,GAAG,gCAAgC,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,UAAkB,EAAE,GAAW;QACzC,KAAK,CAAC,kCAAkC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,GAAW;QACrB,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,GAAW;QACrB,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export { assertValidControllerDefinition, defineController, isControllerDefinition, } from "./definition.js";
|
|
2
|
-
export { applyStatusPatch, conditionFalse, conditionTrue, conditionUnknown, mergeConditions, } from "./conditions.js";
|
|
3
|
-
export { EffectRequestConflictError, ResourceConflictError, ResourceNotFoundError, WorkflowRequestConflictError, } from "./errors.js";
|
|
4
|
-
export { ControllerEffectService } from "./effects.js";
|
|
5
|
-
export { canonicalJson, jsonFingerprint } from "./json.js";
|
|
6
|
-
export { ControllerManager, type ControllerManagerOptions } from "./manager.js";
|
|
7
|
-
export { createResultHelpers, requeue, requeueAfter, settled } from "./results.js";
|
|
8
|
-
export { SqliteControllerStore, type RunEventRecord, type WorkflowRunClaimOptions, type WorkflowRunPreparationResult, type WorkflowRunQueueRecord, type WorkflowRunReservationOptions, } from "./sqlite.js";
|
|
9
|
-
export { type ControllerStore, type EffectReservation, type QueueItem, type QueueRequeueOptions, type WorkflowRecordUpdate, type WorkflowReservation, } from "./store.js";
|
|
10
|
-
export { controllerFileStem, controllerSearchDirs, discoverControllers, loadControllerFile, loadDiscoveredControllers, type DiscoveredController, } from "./loader.js";
|
|
11
|
-
export { ControllerWorkflowCoordinator, type ControllerWorkflowControlRequest, type ControllerWorkflowScheduler, type WorkflowSchedulerRequest, type WorkflowSchedulerResult, } from "./workflows.js";
|
|
12
|
-
export type { AnyControllerDefinition, ChildWorkflowRecord, ChildWorkflowReference, ChildWorkflowRequest, ChildWorkflowState, ControllerCondition, ControllerConditionInput, ControllerConditionStatus, ControllerDefinition, ControllerEffects, ControllerFollowUpResult, ControllerQueueFollowUpRequest, ControllerRemoveFollowUpRequest, ControllerSettingsChangeRequest, ControllerSettingsChangeResult, ControllerEvent, ControllerQueueClaim, ControllerResource, ControllerResourceRef, ControllerResourceStatus, ControllerStatusPatch, ControllerWorkflows, EffectApplication, EffectDefinition, EffectObservation, EffectRecord, EffectState, JsonObject, JsonPrimitive, JsonValue, MaybePromise, ReconcileContext, ReconcileResult, } from "./types.js";
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export { assertValidControllerDefinition, defineController, isControllerDefinition, } from "./definition.js";
|
|
2
|
-
export { applyStatusPatch, conditionFalse, conditionTrue, conditionUnknown, mergeConditions, } from "./conditions.js";
|
|
3
|
-
export { EffectRequestConflictError, ResourceConflictError, ResourceNotFoundError, WorkflowRequestConflictError, } from "./errors.js";
|
|
4
|
-
export { ControllerEffectService } from "./effects.js";
|
|
5
|
-
export { canonicalJson, jsonFingerprint } from "./json.js";
|
|
6
|
-
export { ControllerManager } from "./manager.js";
|
|
7
|
-
export { createResultHelpers, requeue, requeueAfter, settled } from "./results.js";
|
|
8
|
-
export { SqliteControllerStore, } from "./sqlite.js";
|
|
9
|
-
export {} from "./store.js";
|
|
10
|
-
export { controllerFileStem, controllerSearchDirs, discoverControllers, loadControllerFile, loadDiscoveredControllers, } from "./loader.js";
|
|
11
|
-
export { ControllerWorkflowCoordinator, } from "./workflows.js";
|
|
12
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,qBAAqB,GAMtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAON,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,6BAA6B,GAK9B,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/controllers/json.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { AnyControllerDefinition } from "./types.js";
|
|
2
|
-
export type DiscoveredController = {
|
|
3
|
-
name: string;
|
|
4
|
-
path: string;
|
|
5
|
-
source: "project" | "global";
|
|
6
|
-
};
|
|
7
|
-
export declare function controllerSearchDirs(options: {
|
|
8
|
-
cwd: string;
|
|
9
|
-
homeDir?: string;
|
|
10
|
-
}): {
|
|
11
|
-
dir: string;
|
|
12
|
-
source: DiscoveredController["source"];
|
|
13
|
-
}[];
|
|
14
|
-
export declare function controllerFileStem(filePath: string): string;
|
|
15
|
-
export declare function loadControllerFile(filePath: string): Promise<AnyControllerDefinition>;
|
|
16
|
-
export declare function discoverControllers(options: {
|
|
17
|
-
cwd: string;
|
|
18
|
-
homeDir?: string;
|
|
19
|
-
}): Promise<DiscoveredController[]>;
|
|
20
|
-
export declare function loadDiscoveredControllers(options: {
|
|
21
|
-
cwd: string;
|
|
22
|
-
homeDir?: string;
|
|
23
|
-
}): Promise<AnyControllerDefinition[]>;
|