@osolmaz/pi-workflows 0.16.4 → 0.16.6
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 +5 -5
- package/dist/builtins/autoimplement.workflow.d.ts +5 -1
- package/dist/builtins/autoimplement.workflow.js +29 -10
- package/dist/builtins/autoimplement.workflow.js.map +1 -1
- package/dist/client/client.js +3 -1
- package/dist/client/client.js.map +1 -1
- package/dist/client/protocol.d.ts +1 -1
- package/dist/client/protocol.js +18 -1
- package/dist/client/protocol.js.map +1 -1
- package/dist/client/view.d.ts +7 -5
- package/dist/extension/index.d.ts +2 -1
- package/dist/extension/index.js +115 -165
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/recorder.d.ts +1 -1
- package/dist/extension/recorder.js +2 -2
- package/dist/extension/recorder.js.map +1 -1
- package/dist/extension/step-message.d.ts +1 -1
- package/dist/extension/step-message.js +4 -4
- package/dist/extension/step-message.js.map +1 -1
- package/dist/extension/workflow-message-coordinator.d.ts +12 -1
- package/dist/extension/workflow-message-coordinator.js +65 -54
- package/dist/extension/workflow-message-coordinator.js.map +1 -1
- package/dist/resource-managers/index.d.ts +1 -2
- package/dist/resource-managers/index.js +1 -2
- package/dist/resource-managers/index.js.map +1 -1
- package/dist/resource-managers/sqlite.d.ts +2 -295
- package/dist/resource-managers/sqlite.js +71 -1528
- package/dist/resource-managers/sqlite.js.map +1 -1
- package/dist/resource-managers/types.d.ts +2 -7
- package/dist/server/resource-runner-entry.js +2 -6
- package/dist/server/resource-runner-entry.js.map +1 -1
- package/dist/server/rpc-bridge.js +1 -1
- package/dist/server/rpc-bridge.js.map +1 -1
- package/dist/server/rpc-executor.js +2 -4
- package/dist/server/rpc-executor.js.map +1 -1
- package/dist/server/server-entry.js +3 -0
- package/dist/server/server-entry.js.map +1 -1
- package/dist/server/server.d.ts +22 -8
- package/dist/server/server.js +498 -543
- package/dist/server/server.js.map +1 -1
- package/dist/server/state.d.ts +16 -29
- package/dist/server/state.js +105 -319
- package/dist/server/state.js.map +1 -1
- package/dist/server/view.d.ts +4 -5
- package/dist/server/view.js +51 -51
- package/dist/server/view.js.map +1 -1
- package/dist/server/workflow-runner-entry.d.ts +1 -1
- package/dist/server/workflow-runner-entry.js +1 -49
- package/dist/server/workflow-runner-entry.js.map +1 -1
- package/dist/server/workflow-runner-protocol.d.ts +2 -7
- package/dist/server/workflow-runner-protocol.js +5 -10
- package/dist/server/workflow-runner-protocol.js.map +1 -1
- package/dist/server/workflow-runner-store.d.ts +5 -6
- package/dist/server/workflow-runner-store.js +7 -14
- package/dist/server/workflow-runner-store.js.map +1 -1
- package/dist/state/attempt-time.d.ts +21 -0
- package/dist/state/attempt-time.js +95 -0
- package/dist/state/attempt-time.js.map +1 -0
- package/dist/state/json.d.ts +2 -1
- package/dist/state/json.js.map +1 -1
- package/dist/state/project-store.d.ts +39 -0
- package/dist/state/project-store.js +154 -0
- package/dist/state/project-store.js.map +1 -0
- package/dist/state/prune.d.ts +28 -0
- package/dist/state/prune.js +278 -83
- package/dist/state/prune.js.map +1 -1
- package/dist/state/schema.js +23 -23
- package/dist/state/workflow-messages.d.ts +1 -1
- package/dist/state/workflow-messages.js +3 -1
- package/dist/state/workflow-messages.js.map +1 -1
- package/dist/viewer/backup.js +5 -0
- package/dist/viewer/backup.js.map +1 -1
- package/dist/workflows/diagnostics.d.ts +8 -0
- package/dist/workflows/diagnostics.js +61 -0
- package/dist/workflows/diagnostics.js.map +1 -0
- package/dist/workflows/engine.d.ts +2 -15
- package/dist/workflows/engine.js +125 -245
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/human-decision.d.ts +3 -7
- package/dist/workflows/human-decision.js +2 -56
- package/dist/workflows/human-decision.js.map +1 -1
- package/dist/workflows/index.d.ts +2 -1
- package/dist/workflows/index.js +1 -0
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/queue.d.ts +267 -0
- package/dist/workflows/queue.js +1248 -0
- package/dist/workflows/queue.js.map +1 -0
- package/dist/workflows/requests.d.ts +47 -0
- package/dist/workflows/requests.js +158 -0
- package/dist/workflows/requests.js.map +1 -0
- package/dist/workflows/schema.js +2 -4
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/store.d.ts +11 -16
- package/dist/workflows/store.js +174 -169
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/tool-input.d.ts +6 -9
- package/dist/workflows/tool-input.js +15 -12
- package/dist/workflows/tool-input.js.map +1 -1
- package/dist/workflows/transitions.d.ts +38 -0
- package/dist/workflows/transitions.js +276 -0
- package/dist/workflows/transitions.js.map +1 -0
- package/dist/workflows/types.d.ts +9 -42
- package/dist/workflows/workflow-message-content.d.ts +7 -1
- package/dist/workflows/workflow-message-content.js +22 -4
- package/dist/workflows/workflow-message-content.js.map +1 -1
- package/docs/2026-08-25-workflow-follow-ups.md +5 -5
- package/docs/2026-09-02-unify-workflow-messages-plan.md +2 -0
- package/docs/2026-09-04-workflow-run-state-plan.md +2 -0
- package/docs/2026-09-06-durable-execution-plan.md +176 -0
- package/docs/DEFERRED_TURNS.md +84 -105
- package/docs/HUMAN_DECISIONS.md +17 -19
- package/docs/HUMAN_DECISION_PRESENTATIONS.md +1 -1
- package/docs/SQLITE_STATE.md +87 -30
- package/docs/WORKFLOW_SERVER.md +50 -11
- package/docs/WORKFLOW_STEP_MESSAGES.md +72 -54
- package/docs/plans/2026-08-04-controller-runtime-plan.md +2 -0
- package/docs/plans/2026-08-21-deferred-turn-intents-plan.md +2 -0
- package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +2 -0
- package/docs/plans/2026-09-04-automatic-state-retention-plan.md +283 -0
- package/docs/workflows.md +109 -44
- package/examples/workflows/autoresearch.workflow.ts +0 -2
- package/examples/workflows/branch.workflow.ts +0 -4
- package/examples/workflows/echo.workflow.ts +0 -2
- package/examples/workflows/live-settings.workflow.ts +0 -2
- package/examples/workflows/two-turn.workflow.ts +0 -2
- package/herdr-plugin.toml +1 -1
- package/package.json +1 -1
- package/protocol/fixtures/client-v1.json +1 -1
- package/skills/pi-workflows/SKILL.md +8 -7
- package/src/builtins/autoimplement.workflow.ts +31 -10
- package/src/client/client.ts +3 -1
- package/src/client/protocol.ts +21 -1
- package/src/client/view.ts +9 -5
- package/src/extension/index.ts +117 -189
- package/src/extension/recorder.ts +2 -2
- package/src/extension/step-message.ts +4 -4
- package/src/extension/workflow-message-coordinator.ts +78 -50
- package/src/resource-managers/index.ts +1 -9
- package/src/resource-managers/sqlite.ts +330 -2655
- package/src/resource-managers/types.ts +2 -3
- package/src/server/resource-runner-entry.ts +2 -7
- package/src/server/rpc-bridge.ts +1 -1
- package/src/server/rpc-executor.ts +4 -9
- package/src/server/server-entry.ts +3 -0
- package/src/server/server.ts +568 -644
- package/src/server/state.ts +122 -466
- package/src/server/view.ts +56 -60
- package/src/server/workflow-runner-entry.ts +2 -55
- package/src/server/workflow-runner-protocol.ts +5 -15
- package/src/server/workflow-runner-store.ts +12 -27
- package/src/state/attempt-time.ts +122 -0
- package/src/state/json.ts +2 -1
- package/src/state/project-store.ts +218 -0
- package/src/state/prune.ts +408 -95
- package/src/state/schema.ts +23 -23
- package/src/state/workflow-messages.ts +4 -2
- package/src/viewer/backup.ts +7 -0
- package/src/workflows/diagnostics.ts +78 -0
- package/src/workflows/engine.ts +133 -291
- package/src/workflows/human-decision.ts +3 -81
- package/src/workflows/index.ts +8 -2
- package/src/workflows/queue.ts +2091 -0
- package/src/workflows/requests.ts +283 -0
- package/src/workflows/schema.ts +2 -6
- package/src/workflows/store.ts +223 -231
- package/src/workflows/tool-input.ts +20 -12
- package/src/workflows/transitions.ts +330 -0
- package/src/workflows/types.ts +9 -46
- package/src/workflows/workflow-message-content.ts +28 -4
- package/dist/resource-managers/runtime.d.ts +0 -59
- package/dist/resource-managers/runtime.js +0 -423
- package/dist/resource-managers/runtime.js.map +0 -1
- package/src/resource-managers/runtime.ts +0 -576
|
@@ -12,6 +12,7 @@ export declare const WorkflowActionSchemas: {
|
|
|
12
12
|
readonly restart: TObject<{
|
|
13
13
|
action: Type.TLiteral<"restart">;
|
|
14
14
|
runId: Type.TString;
|
|
15
|
+
expectedRevision: Type.TInteger;
|
|
15
16
|
}>;
|
|
16
17
|
readonly "change-settings": TObject<{
|
|
17
18
|
action: Type.TLiteral<"change-settings">;
|
|
@@ -46,13 +47,12 @@ export declare const WorkflowActionSchemas: {
|
|
|
46
47
|
}>;
|
|
47
48
|
readonly answer: TObject<{
|
|
48
49
|
action: Type.TLiteral<"answer">;
|
|
50
|
+
requestId: Type.TString;
|
|
49
51
|
input: Type.TUnknown;
|
|
50
|
-
runId: Type.TOptional<Type.TString>;
|
|
51
52
|
}>;
|
|
52
53
|
readonly update: TObject<{
|
|
53
54
|
action: Type.TLiteral<"update">;
|
|
54
|
-
|
|
55
|
-
attempt: Type.TString;
|
|
55
|
+
requestId: Type.TString;
|
|
56
56
|
update: TObject<{
|
|
57
57
|
type: Type.TString;
|
|
58
58
|
key: Type.TString;
|
|
@@ -61,16 +61,14 @@ export declare const WorkflowActionSchemas: {
|
|
|
61
61
|
}>;
|
|
62
62
|
readonly submit: TObject<{
|
|
63
63
|
action: Type.TLiteral<"submit">;
|
|
64
|
-
|
|
65
|
-
attempt: Type.TString;
|
|
64
|
+
requestId: Type.TString;
|
|
66
65
|
output: Type.TUnknown;
|
|
67
66
|
}>;
|
|
68
67
|
};
|
|
69
68
|
declare const WorkflowSubmissionActionSchemas: {
|
|
70
69
|
readonly update: TObject<{
|
|
71
70
|
action: Type.TLiteral<"update">;
|
|
72
|
-
|
|
73
|
-
attempt: Type.TString;
|
|
71
|
+
requestId: Type.TString;
|
|
74
72
|
update: TObject<{
|
|
75
73
|
type: Type.TString;
|
|
76
74
|
key: Type.TString;
|
|
@@ -79,8 +77,7 @@ declare const WorkflowSubmissionActionSchemas: {
|
|
|
79
77
|
}>;
|
|
80
78
|
readonly submit: TObject<{
|
|
81
79
|
action: Type.TLiteral<"submit">;
|
|
82
|
-
|
|
83
|
-
attempt: Type.TString;
|
|
80
|
+
requestId: Type.TString;
|
|
84
81
|
output: Type.TUnknown;
|
|
85
82
|
}>;
|
|
86
83
|
};
|
|
@@ -9,13 +9,11 @@ const inputSchema = Type.Unknown({
|
|
|
9
9
|
description: "Ordinary checkpoint answer for answer; protected human decisions require a human channel; optional structured workflow input for start",
|
|
10
10
|
});
|
|
11
11
|
const runIdSchema = Type.String({
|
|
12
|
-
description: "Run id; required for restart and optional for status, cancel,
|
|
12
|
+
description: "Run id; required for restart and optional for status, cancel, settings, and follow-ups",
|
|
13
13
|
});
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const attemptSchema = Type.String({
|
|
18
|
-
description: "Workflow attempt id; required when action is update or submit",
|
|
14
|
+
const requestIdSchema = Type.String({
|
|
15
|
+
minLength: 1,
|
|
16
|
+
description: "Exact durable request id from the step contract or checkpoint; required for answer, update, and submit",
|
|
19
17
|
});
|
|
20
18
|
const updateSchema = Type.Object({
|
|
21
19
|
type: Type.String(),
|
|
@@ -32,7 +30,14 @@ export const WorkflowActionSchemas = {
|
|
|
32
30
|
workflow: workflowSchema,
|
|
33
31
|
input: Type.Optional(inputSchema),
|
|
34
32
|
}, noExtraProperties),
|
|
35
|
-
restart: Type.Object({
|
|
33
|
+
restart: Type.Object({
|
|
34
|
+
action: Type.Literal("restart"),
|
|
35
|
+
runId: runIdSchema,
|
|
36
|
+
expectedRevision: Type.Integer({
|
|
37
|
+
minimum: 0,
|
|
38
|
+
description: "Use runRevision from the terminal run view, not its presentation revision. Restart only when the user explicitly requests a fresh run.",
|
|
39
|
+
}),
|
|
40
|
+
}, noExtraProperties),
|
|
36
41
|
"change-settings": Type.Object({
|
|
37
42
|
action: Type.Literal("change-settings"),
|
|
38
43
|
runId: Type.Optional(runIdSchema),
|
|
@@ -56,19 +61,17 @@ export const WorkflowActionSchemas = {
|
|
|
56
61
|
cancel: Type.Object({ action: Type.Literal("cancel"), runId: Type.Optional(runIdSchema) }, noExtraProperties),
|
|
57
62
|
answer: Type.Object({
|
|
58
63
|
action: Type.Literal("answer"),
|
|
64
|
+
requestId: requestIdSchema,
|
|
59
65
|
input: inputSchema,
|
|
60
|
-
runId: Type.Optional(runIdSchema),
|
|
61
66
|
}, noExtraProperties),
|
|
62
67
|
update: Type.Object({
|
|
63
68
|
action: Type.Literal("update"),
|
|
64
|
-
|
|
65
|
-
attempt: attemptSchema,
|
|
69
|
+
requestId: requestIdSchema,
|
|
66
70
|
update: updateSchema,
|
|
67
71
|
}, noExtraProperties),
|
|
68
72
|
submit: Type.Object({
|
|
69
73
|
action: Type.Literal("submit"),
|
|
70
|
-
|
|
71
|
-
attempt: attemptSchema,
|
|
74
|
+
requestId: requestIdSchema,
|
|
72
75
|
output: outputSchema,
|
|
73
76
|
}, noExtraProperties),
|
|
74
77
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-input.js","sourceRoot":"","sources":["../../src/workflows/tool-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA6D,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAElD,MAAM,iBAAiB,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAW,CAAC;AAEnE,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,CAAC;AACvF,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,WAAW,EAAE,+EAA+E;CAC7F,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/B,WAAW,EACT,wIAAwI;CAC3I,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"tool-input.js","sourceRoot":"","sources":["../../src/workflows/tool-input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { JsonValue } from "../state/json.js";
|
|
2
|
+
import type { WorkflowDefinitionSnapshot, WorkflowRunState, WorkflowStepRecord, WorkflowTraceEventDraft } from "./types.js";
|
|
3
|
+
/** Worker proposals carry one change, never a replacement run projection. */
|
|
4
|
+
export type WorkflowTransition = {
|
|
5
|
+
event: WorkflowTraceEventDraft;
|
|
6
|
+
} & ({
|
|
7
|
+
kind: "startAttempt";
|
|
8
|
+
startedAt: string;
|
|
9
|
+
} | {
|
|
10
|
+
kind: "finishAttempt";
|
|
11
|
+
step: WorkflowStepRecord;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "setTimeout";
|
|
14
|
+
timeoutMs: number | null;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "resume";
|
|
17
|
+
attemptId?: string;
|
|
18
|
+
} | {
|
|
19
|
+
kind: "pause";
|
|
20
|
+
} | {
|
|
21
|
+
kind: "resumeInteraction";
|
|
22
|
+
} | {
|
|
23
|
+
kind: "waitForInput";
|
|
24
|
+
requestId: string;
|
|
25
|
+
requestKind: "checkpoint" | "decision";
|
|
26
|
+
contract: JsonValue;
|
|
27
|
+
} | {
|
|
28
|
+
kind: "finish";
|
|
29
|
+
status: "completed" | "failed" | "timed_out" | "cancelled";
|
|
30
|
+
error?: string;
|
|
31
|
+
finalOutput?: unknown;
|
|
32
|
+
} | {
|
|
33
|
+
kind: "record";
|
|
34
|
+
});
|
|
35
|
+
/** Translate engine-local state into the narrow proposal for this event. */
|
|
36
|
+
export declare function executionTransition(state: WorkflowRunState, event: WorkflowTraceEventDraft): WorkflowTransition;
|
|
37
|
+
/** Apply a validated transition to a projection read by the durable owner. */
|
|
38
|
+
export declare function applyExecutionTransition(current: WorkflowRunState, definition: WorkflowDefinitionSnapshot, transition: WorkflowTransition, now: string): WorkflowRunState;
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from "node:util";
|
|
2
|
+
import { resolveNext, resolveNextForOutcome } from "./graph.js";
|
|
3
|
+
/** Translate engine-local state into the narrow proposal for this event. */
|
|
4
|
+
export function executionTransition(state, event) {
|
|
5
|
+
switch (event.type) {
|
|
6
|
+
case "node_started":
|
|
7
|
+
if (state.currentNodeStartedAt === undefined)
|
|
8
|
+
throw new Error("Attempt start time is missing");
|
|
9
|
+
return { kind: "startAttempt", startedAt: state.currentNodeStartedAt, event };
|
|
10
|
+
case "node_finished":
|
|
11
|
+
case "node_failed": {
|
|
12
|
+
const step = state.steps.at(-1);
|
|
13
|
+
if (step === undefined || step.attemptId !== event.attemptId) {
|
|
14
|
+
throw new Error("Finished attempt is missing from engine state");
|
|
15
|
+
}
|
|
16
|
+
return { kind: "finishAttempt", step, event };
|
|
17
|
+
}
|
|
18
|
+
case "node_timeout_set":
|
|
19
|
+
return { kind: "setTimeout", timeoutMs: state.currentNodeTimeoutMs ?? null, event };
|
|
20
|
+
case "run_resumed":
|
|
21
|
+
return {
|
|
22
|
+
kind: "resume",
|
|
23
|
+
...(state.currentAttemptId === undefined ? {} : { attemptId: state.currentAttemptId }),
|
|
24
|
+
event,
|
|
25
|
+
};
|
|
26
|
+
case "run_paused":
|
|
27
|
+
return { kind: "pause", event };
|
|
28
|
+
case "interaction_validation_started":
|
|
29
|
+
case "interaction_accepted":
|
|
30
|
+
return { kind: "resumeInteraction", event };
|
|
31
|
+
case "run_completed":
|
|
32
|
+
case "run_failed":
|
|
33
|
+
case "run_interrupted":
|
|
34
|
+
case "run_timed_out":
|
|
35
|
+
case "run_cancelled":
|
|
36
|
+
if (state.status === "running" || state.status === "waiting")
|
|
37
|
+
throw new Error("Terminal transition has unfinished execution");
|
|
38
|
+
return {
|
|
39
|
+
kind: "finish",
|
|
40
|
+
status: state.status,
|
|
41
|
+
...(state.error === undefined ? {} : { error: state.error }),
|
|
42
|
+
...(state.finalOutput === undefined ? {} : { finalOutput: state.finalOutput }),
|
|
43
|
+
event,
|
|
44
|
+
};
|
|
45
|
+
default:
|
|
46
|
+
return { kind: "record", event };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const recordEvents = new Set([
|
|
50
|
+
"run_started",
|
|
51
|
+
"include_entered",
|
|
52
|
+
"include_exited",
|
|
53
|
+
"settings_route_retried",
|
|
54
|
+
"agent_session_required",
|
|
55
|
+
"agent_prompt_sent",
|
|
56
|
+
"interaction_resume_prepared",
|
|
57
|
+
]);
|
|
58
|
+
/** Apply a validated transition to a projection read by the durable owner. */
|
|
59
|
+
export function applyExecutionTransition(current, definition, transition, now) {
|
|
60
|
+
if (current.status !== "running" &&
|
|
61
|
+
!(current.status === "waiting" && transition.kind === "resumeInteraction")) {
|
|
62
|
+
throw new Error(`Run ${current.runId} cannot execute with status ${current.status}`);
|
|
63
|
+
}
|
|
64
|
+
const state = structuredClone(current);
|
|
65
|
+
const event = transition.event;
|
|
66
|
+
if (typeof event !== "object" || event === null || typeof event.type !== "string") {
|
|
67
|
+
throw new Error("Execution transition event is invalid");
|
|
68
|
+
}
|
|
69
|
+
switch (transition.kind) {
|
|
70
|
+
case "startAttempt": {
|
|
71
|
+
requireEvent(event, "node_started");
|
|
72
|
+
const nodeId = requireIdentity(event.nodeId, "node");
|
|
73
|
+
const attemptId = requireIdentity(event.attemptId, "attempt");
|
|
74
|
+
const node = definition.nodes[nodeId];
|
|
75
|
+
if (node === undefined || node.nodeType !== event.payload.nodeType) {
|
|
76
|
+
throw new Error("Attempt node does not match the workflow definition");
|
|
77
|
+
}
|
|
78
|
+
if (state.steps.some((step) => step.attemptId === attemptId)) {
|
|
79
|
+
throw new Error("A completed attempt cannot start again");
|
|
80
|
+
}
|
|
81
|
+
if (state.currentAttemptId !== undefined) {
|
|
82
|
+
throw new Error("Another attempt is already active");
|
|
83
|
+
}
|
|
84
|
+
if (nextNode(definition, state) !== nodeId) {
|
|
85
|
+
throw new Error("Attempt does not follow the accepted graph route");
|
|
86
|
+
}
|
|
87
|
+
if (!Number.isFinite(Date.parse(transition.startedAt)))
|
|
88
|
+
throw new Error("Invalid attempt time");
|
|
89
|
+
state.currentNode = nodeId;
|
|
90
|
+
state.currentAttemptId = attemptId;
|
|
91
|
+
state.currentNodeStartedAt = transition.startedAt;
|
|
92
|
+
setSettings(state, event.payload);
|
|
93
|
+
if (node.statusDetail !== undefined)
|
|
94
|
+
state.statusDetail = node.statusDetail;
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
case "finishAttempt": {
|
|
98
|
+
const step = transition.step;
|
|
99
|
+
requireEvent(event, step.outcome === "ok" ? "node_finished" : "node_failed");
|
|
100
|
+
requireAttempt(state, event);
|
|
101
|
+
if (step.attemptId !== event.attemptId ||
|
|
102
|
+
step.nodeId !== event.nodeId ||
|
|
103
|
+
step.nodeType !== definition.nodes[step.nodeId]?.nodeType ||
|
|
104
|
+
step.startedAt !== state.currentNodeStartedAt ||
|
|
105
|
+
step.outcome !== event.payload.outcome ||
|
|
106
|
+
!isDeepStrictEqual(step.output, event.payload.output ?? null)) {
|
|
107
|
+
throw new Error("Attempt result does not match the active request");
|
|
108
|
+
}
|
|
109
|
+
if (state.steps.some((prior) => prior.attemptId === step.attemptId)) {
|
|
110
|
+
throw new Error("Attempt result was already committed");
|
|
111
|
+
}
|
|
112
|
+
state.steps.push(structuredClone(step));
|
|
113
|
+
state.results[step.nodeId] = {
|
|
114
|
+
...step,
|
|
115
|
+
durationMs: Date.parse(step.finishedAt) - Date.parse(step.startedAt),
|
|
116
|
+
};
|
|
117
|
+
if (step.outcome === "ok")
|
|
118
|
+
state.outputs[step.nodeId] = step.output;
|
|
119
|
+
clearAttempt(state);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "setTimeout":
|
|
123
|
+
requireEvent(event, "node_timeout_set");
|
|
124
|
+
requireAttempt(state, event);
|
|
125
|
+
if (transition.timeoutMs !== null &&
|
|
126
|
+
(!Number.isFinite(transition.timeoutMs) || transition.timeoutMs <= 0)) {
|
|
127
|
+
throw new Error("Invalid attempt timeout");
|
|
128
|
+
}
|
|
129
|
+
if (state.currentNodeElapsedMs !== undefined)
|
|
130
|
+
throw new Error("Attempt timeout was already configured");
|
|
131
|
+
state.currentNodeTimeoutMs = transition.timeoutMs;
|
|
132
|
+
state.currentNodeElapsedMs = 0;
|
|
133
|
+
break;
|
|
134
|
+
case "resume":
|
|
135
|
+
requireEvent(event, "run_resumed");
|
|
136
|
+
if (transition.attemptId !== undefined && transition.attemptId !== state.currentAttemptId) {
|
|
137
|
+
throw new Error("Resume does not name the active attempt");
|
|
138
|
+
}
|
|
139
|
+
if (transition.attemptId === undefined)
|
|
140
|
+
clearAttempt(state);
|
|
141
|
+
delete state.paused;
|
|
142
|
+
break;
|
|
143
|
+
case "waitForInput":
|
|
144
|
+
requireEvent(event, "checkpoint_requested");
|
|
145
|
+
requireAttempt(state, event);
|
|
146
|
+
if (definition.nodes[state.currentNode ?? ""]?.nodeType !== "checkpoint") {
|
|
147
|
+
throw new Error("Only a checkpoint can request checkpoint input");
|
|
148
|
+
}
|
|
149
|
+
state.status = "waiting";
|
|
150
|
+
state.waitingOn = requireIdentity(event.nodeId, "node");
|
|
151
|
+
state.statusDetail =
|
|
152
|
+
transition.requestKind === "decision"
|
|
153
|
+
? "waiting for a human decision"
|
|
154
|
+
: "waiting for checkpoint input";
|
|
155
|
+
delete state.finishedAt;
|
|
156
|
+
break;
|
|
157
|
+
case "resumeInteraction":
|
|
158
|
+
if (event.type !== "interaction_validation_started" &&
|
|
159
|
+
event.type !== "interaction_accepted") {
|
|
160
|
+
throw new Error("Invalid interaction resume event");
|
|
161
|
+
}
|
|
162
|
+
if (state.waitingOn !== event.nodeId || state.currentAttemptId !== event.attemptId) {
|
|
163
|
+
throw new Error("Interaction does not match the waiting attempt");
|
|
164
|
+
}
|
|
165
|
+
state.status = "running";
|
|
166
|
+
state.currentNode = requireIdentity(event.nodeId, "node");
|
|
167
|
+
delete state.waitingOn;
|
|
168
|
+
delete state.finishedAt;
|
|
169
|
+
delete state.statusDetail;
|
|
170
|
+
break;
|
|
171
|
+
case "pause":
|
|
172
|
+
requireEvent(event, "run_paused");
|
|
173
|
+
state.paused = true;
|
|
174
|
+
break;
|
|
175
|
+
case "finish":
|
|
176
|
+
if (!["completed", "failed", "timed_out", "cancelled"].includes(transition.status) ||
|
|
177
|
+
(event.type !== `run_${transition.status}` &&
|
|
178
|
+
!(event.type === "run_interrupted" && transition.status === "failed"))) {
|
|
179
|
+
throw new Error("Run outcome does not match the transition");
|
|
180
|
+
}
|
|
181
|
+
if (transition.status === "completed" && state.currentAttemptId !== undefined) {
|
|
182
|
+
throw new Error("A run with an unfinished attempt cannot complete");
|
|
183
|
+
}
|
|
184
|
+
if (transition.status === "completed") {
|
|
185
|
+
const last = state.steps.at(-1);
|
|
186
|
+
if (last?.outcome !== "ok" ||
|
|
187
|
+
nextNode(definition, state) !== null ||
|
|
188
|
+
!isDeepStrictEqual(transition.finalOutput, last.output)) {
|
|
189
|
+
throw new Error("Completion does not match the accepted graph result");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
state.status = transition.status;
|
|
193
|
+
state.finishedAt = now;
|
|
194
|
+
if (transition.error !== undefined)
|
|
195
|
+
state.error = transition.error;
|
|
196
|
+
if (transition.finalOutput !== undefined)
|
|
197
|
+
state.finalOutput = transition.finalOutput;
|
|
198
|
+
clearAttempt(state);
|
|
199
|
+
break;
|
|
200
|
+
case "record":
|
|
201
|
+
if (!recordEvents.has(event.type))
|
|
202
|
+
throw new Error(`Unknown execution event: ${event.type}`);
|
|
203
|
+
if (event.type === "agent_prompt_sent" || event.type === "agent_session_required") {
|
|
204
|
+
requireAttempt(state, event);
|
|
205
|
+
}
|
|
206
|
+
if (event.type === "agent_session_required")
|
|
207
|
+
state.statusDetail = "waiting for origin Pi session";
|
|
208
|
+
if (event.type === "settings_route_retried") {
|
|
209
|
+
const payload = event.payload;
|
|
210
|
+
if (typeof payload.scopeId !== "string" || typeof payload.changeNumber !== "number") {
|
|
211
|
+
throw new Error("Settings retry binding is invalid");
|
|
212
|
+
}
|
|
213
|
+
state.currentSettingsScopeId = payload.scopeId;
|
|
214
|
+
state.currentSettingsChangeNumber = payload.changeNumber;
|
|
215
|
+
if (typeof payload.settingsHash !== "string")
|
|
216
|
+
throw new Error("Settings retry hash is missing");
|
|
217
|
+
state.currentSettingsHash = payload.settingsHash;
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
220
|
+
default:
|
|
221
|
+
throw new Error("Unknown execution transition");
|
|
222
|
+
}
|
|
223
|
+
return state;
|
|
224
|
+
}
|
|
225
|
+
function nextNode(definition, state) {
|
|
226
|
+
const last = state.steps.at(-1);
|
|
227
|
+
if (last === undefined)
|
|
228
|
+
return definition.startAt;
|
|
229
|
+
const result = state.results[last.nodeId];
|
|
230
|
+
if (result === undefined)
|
|
231
|
+
throw new Error("Accepted graph result is missing");
|
|
232
|
+
return result.outcome === "ok"
|
|
233
|
+
? resolveNext(definition.edges, last.nodeId, result.output, result)
|
|
234
|
+
: resolveNextForOutcome(definition.edges, last.nodeId, result);
|
|
235
|
+
}
|
|
236
|
+
function requireEvent(event, type) {
|
|
237
|
+
if (event.type !== type)
|
|
238
|
+
throw new Error(`Transition requires ${type}`);
|
|
239
|
+
}
|
|
240
|
+
function requireIdentity(value, name) {
|
|
241
|
+
if (typeof value !== "string" || value.length === 0)
|
|
242
|
+
throw new Error(`Missing ${name} identity`);
|
|
243
|
+
return value;
|
|
244
|
+
}
|
|
245
|
+
function requireAttempt(state, event) {
|
|
246
|
+
if (state.currentNode !== requireIdentity(event.nodeId, "node") ||
|
|
247
|
+
state.currentAttemptId !== requireIdentity(event.attemptId, "attempt")) {
|
|
248
|
+
throw new Error("Execution transition does not match the active attempt");
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function clearAttempt(state) {
|
|
252
|
+
delete state.currentNode;
|
|
253
|
+
delete state.currentAttemptId;
|
|
254
|
+
delete state.currentNodeStartedAt;
|
|
255
|
+
delete state.currentNodeTimeoutMs;
|
|
256
|
+
delete state.currentNodeElapsedMs;
|
|
257
|
+
delete state.currentSettingsScopeId;
|
|
258
|
+
delete state.currentSettingsChangeNumber;
|
|
259
|
+
delete state.currentSettingsHash;
|
|
260
|
+
delete state.statusDetail;
|
|
261
|
+
}
|
|
262
|
+
function setSettings(state, payload) {
|
|
263
|
+
delete state.currentSettingsScopeId;
|
|
264
|
+
delete state.currentSettingsChangeNumber;
|
|
265
|
+
delete state.currentSettingsHash;
|
|
266
|
+
if (typeof payload.settingsScopeId === "string") {
|
|
267
|
+
if (typeof payload.settingsChangeNumber !== "number" ||
|
|
268
|
+
typeof payload.settingsHash !== "string") {
|
|
269
|
+
throw new Error("Attempt settings binding is invalid");
|
|
270
|
+
}
|
|
271
|
+
state.currentSettingsScopeId = payload.settingsScopeId;
|
|
272
|
+
state.currentSettingsChangeNumber = payload.settingsChangeNumber;
|
|
273
|
+
state.currentSettingsHash = payload.settingsHash;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=transitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transitions.js","sourceRoot":"","sources":["../../src/workflows/transitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -371,19 +371,9 @@ export type HumanDecisionCancellationRecord = {
|
|
|
371
371
|
cancelledAt: string;
|
|
372
372
|
reason: "cancelled" | "expired";
|
|
373
373
|
};
|
|
374
|
-
export type HumanDecisionContinuationRecord = {
|
|
375
|
-
schema: "pi-workflows.human-decision-continuation.v1";
|
|
376
|
-
decisionId: string;
|
|
377
|
-
requestDigest: string;
|
|
378
|
-
provenance: "human" | "timeout";
|
|
379
|
-
parentRunId: string;
|
|
380
|
-
runId: string;
|
|
381
|
-
createdAt: string;
|
|
382
|
-
};
|
|
383
374
|
/**
|
|
384
|
-
* A
|
|
385
|
-
*
|
|
386
|
-
* produces the checkpoint's output before the run pauses.
|
|
375
|
+
* A same-run input request. The optional `run` callback produces its prompt.
|
|
376
|
+
* The accepted answer becomes the node output; requesting input does not finish the node.
|
|
387
377
|
*/
|
|
388
378
|
export type CheckpointNodeDefinition = WorkflowNodeCommon & {
|
|
389
379
|
nodeType: "checkpoint";
|
|
@@ -393,14 +383,6 @@ export type CheckpointNodeDefinition = WorkflowNodeCommon & {
|
|
|
393
383
|
humanDecision?: HumanDecisionNodeContract;
|
|
394
384
|
};
|
|
395
385
|
export type WorkflowNodeDefinition = AgentNodeDefinition | ComputeNodeDefinition | NotifyNodeDefinition | ActionNodeDefinition | CheckpointNodeDefinition;
|
|
396
|
-
export type WorkflowPresentationContext = {
|
|
397
|
-
/** Final persisted state of the workflow run. */
|
|
398
|
-
state: WorkflowRunState;
|
|
399
|
-
/** Convenience alias for `state.finalOutput`. */
|
|
400
|
-
finalOutput: unknown;
|
|
401
|
-
/** Aborted if a new run starts, the session closes, or prompt generation times out. */
|
|
402
|
-
signal: AbortSignal;
|
|
403
|
-
};
|
|
404
386
|
/** Runtime parser that also carries its normalized TypeScript result type. */
|
|
405
387
|
export type WorkflowValueParser<T> = (value: unknown) => MaybePromise<T>;
|
|
406
388
|
export type WorkflowExitDefinition<TOutput = unknown> = {
|
|
@@ -460,12 +442,6 @@ export type WorkflowDefinition<TInput = any, TExits extends WorkflowExitMap = Wo
|
|
|
460
442
|
input: TInput;
|
|
461
443
|
workflowName: string;
|
|
462
444
|
}) => MaybePromise<string | undefined>);
|
|
463
|
-
/**
|
|
464
|
-
* Optional instructions for a normal assistant response after the run ends.
|
|
465
|
-
* The Pi extension resolves this only after the final state is persisted;
|
|
466
|
-
* the engine and durable store remain presentation-agnostic.
|
|
467
|
-
*/
|
|
468
|
-
presentationPrompt?: string | ((context: WorkflowPresentationContext) => MaybePromise<string | undefined>);
|
|
469
445
|
startAt: string;
|
|
470
446
|
nodes: Record<string, WorkflowNodeDefinition>;
|
|
471
447
|
includes?: TIncludes;
|
|
@@ -556,14 +532,8 @@ export type WorkflowRunState = {
|
|
|
556
532
|
traceSeq: number;
|
|
557
533
|
runId: string;
|
|
558
534
|
workflowName: string;
|
|
559
|
-
/** Set on
|
|
535
|
+
/** Set on explicit fresh restarts. Checkpoint answers keep the same run. */
|
|
560
536
|
parentRunId?: string;
|
|
561
|
-
/**
|
|
562
|
-
* Steps carried from the parent at continuation start. Steps beyond this
|
|
563
|
-
* count were recorded by this run itself; resume uses it to tell a
|
|
564
|
-
* carried checkpoint from this run's own.
|
|
565
|
-
*/
|
|
566
|
-
carriedStepCount?: number;
|
|
567
537
|
runTitle?: string;
|
|
568
538
|
/** Stable built-in identity or immutable file source used by this run. */
|
|
569
539
|
workflowSource?: WorkflowSource;
|
|
@@ -588,12 +558,13 @@ export type WorkflowRunState = {
|
|
|
588
558
|
currentAttemptId?: string;
|
|
589
559
|
currentNodeStartedAt?: string;
|
|
590
560
|
/** Durable active-execution deadline for the current attempt. Null disables the deadline. */
|
|
591
|
-
|
|
561
|
+
currentNodeTimeoutMs?: number | null;
|
|
562
|
+
currentNodeElapsedMs?: number;
|
|
592
563
|
currentSettingsScopeId?: string;
|
|
593
564
|
currentSettingsChangeNumber?: number;
|
|
594
565
|
currentSettingsHash?: string;
|
|
595
566
|
statusDetail?: string;
|
|
596
|
-
/** Redacted
|
|
567
|
+
/** Redacted receipt for the latest accepted human decision in this run. */
|
|
597
568
|
humanDecision?: HumanDecisionReceipt;
|
|
598
569
|
/** True while the run is held at a step boundary by a pause request. */
|
|
599
570
|
paused?: boolean;
|
|
@@ -729,6 +700,7 @@ export type AssistantMessageReceipt = {
|
|
|
729
700
|
};
|
|
730
701
|
/** The step contract handed to the executor alongside the prompt. */
|
|
731
702
|
export type AgentStepContract = {
|
|
703
|
+
requestId: string;
|
|
732
704
|
runId: string;
|
|
733
705
|
workflowName: string;
|
|
734
706
|
nodeId: string;
|
|
@@ -781,8 +753,8 @@ export interface AgentStepExecutor {
|
|
|
781
753
|
* leave the run claimable for an origin session. Omission is unsupported.
|
|
782
754
|
*/
|
|
783
755
|
readonly assistantMessageMode?: "visible" | "park" | "unsupported";
|
|
784
|
-
/** True when the
|
|
785
|
-
readonly
|
|
756
|
+
/** True when the host records active time while this executor parks and resumes an attempt. */
|
|
757
|
+
readonly preservesActiveTimeBudget?: boolean;
|
|
786
758
|
runAgentStep(request: AgentStepRequest, signal: AbortSignal): Promise<AgentStepSubmission>;
|
|
787
759
|
}
|
|
788
760
|
export type WorkflowNotificationRequest = {
|
|
@@ -814,11 +786,6 @@ export type WorkflowEngineOptions = {
|
|
|
814
786
|
* Awaited after `run_started` is persisted, before any node executes.
|
|
815
787
|
*/
|
|
816
788
|
onRunStarted?: (runId: string, state: WorkflowRunState) => MaybePromise<void>;
|
|
817
|
-
/**
|
|
818
|
-
* Awaited before the terminal snapshot is persisted. This is where a
|
|
819
|
-
* session recorder stops and drains. Errors are swallowed: finishing the run wins.
|
|
820
|
-
*/
|
|
821
|
-
onRunFinishing?: (runId: string, state: WorkflowRunState) => MaybePromise<void>;
|
|
822
789
|
/** Default per-node timeout. Defaults to 15 minutes. */
|
|
823
790
|
defaultNodeTimeoutMs?: number;
|
|
824
791
|
/** Guard against unbounded graph loops. Defaults to 100 executed steps. */
|
|
@@ -3,7 +3,7 @@ import { type WorkflowMessageContent, type WorkflowStepReason } from "../state/w
|
|
|
3
3
|
export declare const WORKFLOW_STEP_MESSAGE_TYPE = "pi-workflows-step";
|
|
4
4
|
export declare const WORKFLOW_DECISION_MESSAGE_TYPE = "pi-workflows-interaction";
|
|
5
5
|
export declare const WORKFLOW_NOTIFICATION_MESSAGE_TYPE = "pi-workflows-notification";
|
|
6
|
-
export declare const WORKFLOW_TERMINAL_MESSAGE_TYPE = "pi-workflows-
|
|
6
|
+
export declare const WORKFLOW_TERMINAL_MESSAGE_TYPE = "pi-workflows-terminal";
|
|
7
7
|
export declare const WORKFLOW_FOLLOW_UP_MESSAGE_TYPE = "pi-workflows-follow-up";
|
|
8
8
|
export declare function stepWorkflowMessageContent(options: {
|
|
9
9
|
workflowMessageId: string;
|
|
@@ -17,6 +17,12 @@ export declare function decisionWorkflowMessageContent(options: {
|
|
|
17
17
|
runId: string;
|
|
18
18
|
contract: JsonValue;
|
|
19
19
|
}): WorkflowMessageContent;
|
|
20
|
+
export declare function checkpointWorkflowMessageContent(options: {
|
|
21
|
+
workflowMessageId: string;
|
|
22
|
+
requestId: string;
|
|
23
|
+
runId: string;
|
|
24
|
+
contract: JsonValue;
|
|
25
|
+
}): WorkflowMessageContent;
|
|
20
26
|
export declare function notificationWorkflowMessageContent(options: {
|
|
21
27
|
workflowMessageId: string;
|
|
22
28
|
notificationId: string;
|