@osolmaz/pi-workflows 0.13.4 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -160
- package/dist/builtins/autoimplement.workflow.js +3 -1
- package/dist/builtins/autoimplement.workflow.js.map +1 -1
- package/dist/builtins/change-verification.workflow.js +7 -2
- package/dist/builtins/change-verification.workflow.js.map +1 -1
- package/dist/builtins/metadata.d.ts +22 -0
- package/dist/builtins/metadata.js +10 -0
- package/dist/builtins/metadata.js.map +1 -0
- package/dist/builtins/monitor.workflow.js +4 -1
- package/dist/builtins/monitor.workflow.js.map +1 -1
- package/dist/builtins/sanity-check.workflow.js +4 -1
- package/dist/builtins/sanity-check.workflow.js.map +1 -1
- package/dist/builtins/workspace-preparation.workflow.js +3 -1
- package/dist/builtins/workspace-preparation.workflow.js.map +1 -1
- package/dist/controllers/index.d.ts +1 -2
- package/dist/controllers/index.js +0 -1
- package/dist/controllers/index.js.map +1 -1
- package/dist/controllers/sqlite.d.ts +85 -31
- package/dist/controllers/sqlite.js +541 -126
- package/dist/controllers/sqlite.js.map +1 -1
- package/dist/controllers/store.d.ts +1 -0
- package/dist/extension/controller-command.d.ts +22 -0
- package/dist/extension/controller-command.js +32 -0
- package/dist/extension/controller-command.js.map +1 -0
- package/dist/extension/index.d.ts +2 -9
- package/dist/extension/index.js +876 -2928
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/message-card.d.ts +13 -0
- package/dist/extension/message-card.js +46 -0
- package/dist/extension/message-card.js.map +1 -0
- package/dist/extension/step-message.d.ts +5 -6
- package/dist/extension/step-message.js +41 -52
- package/dist/extension/step-message.js.map +1 -1
- package/dist/host/child-worker-supervisor.d.ts +50 -0
- package/dist/host/child-worker-supervisor.js +159 -0
- package/dist/host/child-worker-supervisor.js.map +1 -0
- package/dist/host/client.d.ts +48 -0
- package/dist/host/client.js +216 -0
- package/dist/host/client.js.map +1 -0
- package/dist/host/controller-worker-entry.d.ts +2 -0
- package/dist/host/controller-worker-entry.js +244 -0
- package/dist/host/controller-worker-entry.js.map +1 -0
- package/dist/host/controller-worker-protocol.d.ts +36 -0
- package/dist/host/controller-worker-protocol.js +49 -0
- package/dist/host/controller-worker-protocol.js.map +1 -0
- package/dist/host/controller-worker-supervisor.d.ts +21 -0
- package/dist/host/controller-worker-supervisor.js +54 -0
- package/dist/host/controller-worker-supervisor.js.map +1 -0
- package/dist/host/host-entry.d.ts +2 -0
- package/dist/host/host-entry.js +23 -0
- package/dist/host/host-entry.js.map +1 -0
- package/dist/host/processes.d.ts +17 -12
- package/dist/host/processes.js +154 -50
- package/dist/host/processes.js.map +1 -1
- package/dist/host/protocol.d.ts +38 -0
- package/dist/host/protocol.js +156 -0
- package/dist/host/protocol.js.map +1 -0
- package/dist/host/resolver-entry.d.ts +49 -0
- package/dist/host/resolver-entry.js +149 -0
- package/dist/host/resolver-entry.js.map +1 -0
- package/dist/host/rpc-executor.d.ts +14 -3
- package/dist/host/rpc-executor.js +63 -30
- package/dist/host/rpc-executor.js.map +1 -1
- package/dist/host/runner.d.ts +95 -29
- package/dist/host/runner.js +2311 -348
- package/dist/host/runner.js.map +1 -1
- package/dist/host/state.d.ts +174 -0
- package/dist/host/state.js +689 -0
- package/dist/host/state.js.map +1 -0
- package/dist/host/worker-entry.d.ts +10 -0
- package/dist/host/worker-entry.js +446 -0
- package/dist/host/worker-entry.js.map +1 -0
- package/dist/host/worker-protocol.d.ts +31 -0
- package/dist/host/worker-protocol.js +122 -0
- package/dist/host/worker-protocol.js.map +1 -0
- package/dist/host/worker-store.d.ts +80 -0
- package/dist/host/worker-store.js +91 -0
- package/dist/host/worker-store.js.map +1 -0
- package/dist/host/worker-supervisor.d.ts +22 -0
- package/dist/host/worker-supervisor.js +54 -0
- package/dist/host/worker-supervisor.js.map +1 -0
- package/dist/render/canvas.d.ts +2 -1
- package/dist/render/canvas.js +40 -15
- package/dist/render/canvas.js.map +1 -1
- package/dist/render/graph-render.d.ts +7 -3
- package/dist/render/graph-render.js +125 -74
- package/dist/render/graph-render.js.map +1 -1
- package/dist/state/database.js +3 -1
- package/dist/state/database.js.map +1 -1
- package/dist/state/index.d.ts +1 -0
- package/dist/state/index.js +1 -0
- package/dist/state/index.js.map +1 -1
- package/dist/state/prune.js +36 -10
- package/dist/state/prune.js.map +1 -1
- package/dist/state/schema.d.ts +1 -1
- package/dist/state/schema.js +171 -3
- package/dist/state/schema.js.map +1 -1
- package/dist/state/viewer.d.ts +46 -0
- package/dist/state/viewer.js +249 -0
- package/dist/state/viewer.js.map +1 -0
- package/dist/viewer/cli.d.ts +1 -1
- package/dist/viewer/cli.js +47 -18
- package/dist/viewer/cli.js.map +1 -1
- package/dist/workflows/composition.js +25 -2
- package/dist/workflows/composition.js.map +1 -1
- package/dist/workflows/definition.d.ts +3 -1
- package/dist/workflows/definition.js +25 -0
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/engine.d.ts +1 -0
- package/dist/workflows/engine.js +157 -42
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/errors.d.ts +3 -1
- package/dist/workflows/errors.js +4 -7
- package/dist/workflows/errors.js.map +1 -1
- package/dist/workflows/human-decision.d.ts +3 -0
- package/dist/workflows/human-decision.js +31 -0
- package/dist/workflows/human-decision.js.map +1 -1
- package/dist/workflows/index.d.ts +1 -1
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/schema.js +17 -6
- package/dist/workflows/schema.js.map +1 -1
- package/dist/{viewer → workflows}/session-reducer.d.ts +3 -1
- package/dist/{viewer → workflows}/session-reducer.js +4 -0
- package/dist/workflows/session-reducer.js.map +1 -0
- package/dist/workflows/store.d.ts +87 -1
- package/dist/workflows/store.js +892 -93
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/tool-input.d.ts +0 -22
- package/dist/workflows/tool-input.js +1 -44
- package/dist/workflows/tool-input.js.map +1 -1
- package/dist/workflows/types.d.ts +36 -4
- package/docs/2026-08-25-workflow-follow-ups.md +8 -6
- package/docs/2026-08-30-out-of-process-workflow-host-plan.md +353 -0
- package/docs/CONTROLLERS.md +11 -11
- package/docs/DEFERRED_TURNS.md +61 -27
- package/docs/HUMAN_DECISIONS.md +12 -4
- package/docs/SQLITE_STATE.md +42 -8
- package/docs/WORKFLOW_HOST.md +452 -0
- package/docs/development.md +46 -30
- package/docs/live-replay-protocol.md +129 -100
- package/docs/plans/2026-08-19-human-decision-gates-plan.md +34 -8
- package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +399 -0
- package/docs/plans/2026-08-28-piw-incremental-viewer-plan.md +293 -0
- package/docs/plans/piw-viewer-experience-implementation-plan.md +11 -1
- package/docs/plans/tui-viewer-implementation-plan.md +5 -0
- package/docs/tui-viewer.md +18 -3
- package/docs/workflows.md +164 -156
- package/examples/workflows/command-batch.workflow.ts +2 -0
- package/examples/workflows/shell.workflow.ts +2 -1
- package/herdr-plugin.toml +1 -1
- package/package.json +1 -1
- package/skills/autodoc/SKILL.md +1 -1
- package/skills/autoimplement/SKILL.md +1 -1
- package/skills/autoplan/SKILL.md +1 -1
- package/skills/pi-workflows/SKILL.md +2 -0
- package/src/builtins/autoimplement.workflow.ts +3 -0
- package/src/builtins/change-verification.workflow.ts +7 -2
- package/src/builtins/metadata.ts +9 -0
- package/src/builtins/monitor.workflow.ts +4 -0
- package/src/builtins/sanity-check.workflow.ts +4 -0
- package/src/builtins/workspace-preparation.workflow.ts +3 -1
- package/src/controllers/index.ts +3 -5
- package/src/controllers/sqlite.ts +929 -225
- package/src/controllers/store.ts +1 -0
- package/src/extension/controller-command.ts +45 -0
- package/src/extension/index.ts +948 -3506
- package/src/extension/message-card.ts +61 -0
- package/src/extension/step-message.ts +58 -63
- package/src/host/child-worker-supervisor.ts +183 -0
- package/src/host/client.ts +293 -0
- package/src/host/controller-worker-entry.ts +311 -0
- package/src/host/controller-worker-protocol.ts +104 -0
- package/src/host/controller-worker-supervisor.ts +79 -0
- package/src/host/host-entry.ts +23 -0
- package/src/host/processes.ts +171 -54
- package/src/host/protocol.ts +196 -0
- package/src/host/resolver-entry.ts +241 -0
- package/src/host/rpc-executor.ts +76 -34
- package/src/host/runner.ts +2813 -422
- package/src/host/state.ts +1160 -0
- package/src/host/worker-entry.ts +533 -0
- package/src/host/worker-protocol.ts +165 -0
- package/src/host/worker-store.ts +229 -0
- package/src/host/worker-supervisor.ts +74 -0
- package/src/render/canvas.ts +44 -10
- package/src/render/graph-render.ts +145 -90
- package/src/state/database.ts +2 -1
- package/src/state/index.ts +14 -0
- package/src/state/prune.ts +35 -9
- package/src/state/schema.ts +171 -3
- package/src/state/viewer.ts +356 -0
- package/src/viewer/cli.ts +49 -17
- package/src/workflows/composition.ts +36 -2
- package/src/workflows/definition.ts +32 -0
- package/src/workflows/engine.ts +157 -54
- package/src/workflows/errors.ts +11 -2
- package/src/workflows/human-decision.ts +49 -0
- package/src/workflows/index.ts +2 -0
- package/src/workflows/schema.ts +19 -6
- package/src/{viewer → workflows}/session-reducer.ts +11 -1
- package/src/workflows/store.ts +1316 -108
- package/src/workflows/tool-input.ts +2 -60
- package/src/workflows/types.ts +32 -4
- package/dist/controllers/workflow-engine-scheduler.d.ts +0 -29
- package/dist/controllers/workflow-engine-scheduler.js +0 -175
- package/dist/controllers/workflow-engine-scheduler.js.map +0 -1
- package/dist/extension/controller-host.d.ts +0 -48
- package/dist/extension/controller-host.js +0 -110
- package/dist/extension/controller-host.js.map +0 -1
- package/dist/extension/deferred-turn-coordinator.d.ts +0 -32
- package/dist/extension/deferred-turn-coordinator.js +0 -143
- package/dist/extension/deferred-turn-coordinator.js.map +0 -1
- package/dist/extension/deferred-turn.d.ts +0 -44
- package/dist/extension/deferred-turn.js +0 -110
- package/dist/extension/deferred-turn.js.map +0 -1
- package/dist/extension/executor.d.ts +0 -86
- package/dist/extension/executor.js +0 -311
- package/dist/extension/executor.js.map +0 -1
- package/dist/extension/follow-up-coordinator.d.ts +0 -27
- package/dist/extension/follow-up-coordinator.js +0 -131
- package/dist/extension/follow-up-coordinator.js.map +0 -1
- package/dist/extension/recorder.d.ts +0 -84
- package/dist/extension/recorder.js +0 -528
- package/dist/extension/recorder.js.map +0 -1
- package/dist/extension/session-events.d.ts +0 -133
- package/dist/extension/session-events.js +0 -61
- package/dist/extension/session-events.js.map +0 -1
- package/dist/viewer/session-reducer.js.map +0 -1
- package/src/controllers/workflow-engine-scheduler.ts +0 -246
- package/src/extension/controller-host.ts +0 -167
- package/src/extension/deferred-turn-coordinator.ts +0 -171
- package/src/extension/deferred-turn.ts +0 -166
- package/src/extension/executor.ts +0 -411
- package/src/extension/follow-up-coordinator.ts +0 -151
- package/src/extension/recorder.ts +0 -655
- package/src/extension/session-events.ts +0 -121
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { builtinWorkflowCatalog } from "../builtins/catalog.js";
|
|
6
|
+
import { discoverControllers, loadControllerFile } from "../controllers/loader.js";
|
|
7
|
+
import { canonicalJson, parseJson } from "../state/json.js";
|
|
8
|
+
import { compositionMetadata } from "../workflows/composition.js";
|
|
9
|
+
import { errorMessage } from "../workflows/errors.js";
|
|
10
|
+
import { validateWorkflowDefinition } from "../workflows/graph.js";
|
|
11
|
+
import { resolveWorkflowRef } from "../workflows/loader.js";
|
|
12
|
+
import { applyWorkflowSettingsPatch } from "../workflows/settings.js";
|
|
13
|
+
import { createDefinitionSnapshot } from "../workflows/store.js";
|
|
14
|
+
import { MAX_PROTOCOL_MESSAGE_BYTES } from "./protocol.js";
|
|
15
|
+
export async function resolveWorkflowLaunch(request) {
|
|
16
|
+
if (request.schema !== "pi-workflows.resolve-request.v1") {
|
|
17
|
+
throw new Error("Invalid workflow resolver request schema");
|
|
18
|
+
}
|
|
19
|
+
const resolved = await loadResolvedWorkflow(request.cwd, request.workflowRef);
|
|
20
|
+
return {
|
|
21
|
+
schema: "pi-workflows.resolved-launch.v1",
|
|
22
|
+
workflowName: resolved.definition.name,
|
|
23
|
+
workflowSourceRef: sourceRef(resolved.source),
|
|
24
|
+
workflowSource: {
|
|
25
|
+
root: resolved.source,
|
|
26
|
+
mounted: compositionMetadata(resolved.definition)?.sources ?? [],
|
|
27
|
+
},
|
|
28
|
+
definitionDigest: resolved.definitionDigest,
|
|
29
|
+
definitionSnapshot: resolved.snapshot,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export async function resolveControllerInitialization(request) {
|
|
33
|
+
const discovered = (await discoverControllers({ cwd: request.cwd })).find((candidate) => candidate.name === request.controllerName);
|
|
34
|
+
if (discovered === undefined) {
|
|
35
|
+
throw new Error(`Controller not found: ${request.controllerName}`);
|
|
36
|
+
}
|
|
37
|
+
const definition = await loadControllerFile(discovered.path);
|
|
38
|
+
if (definition.name !== request.controllerName) {
|
|
39
|
+
throw new Error("Controller source name does not match its discovered name");
|
|
40
|
+
}
|
|
41
|
+
const initialStatus = parseJson(canonicalJson(definition.initialStatus(request.spec)));
|
|
42
|
+
const sourceHash = createHash("sha256")
|
|
43
|
+
.update(await fs.readFile(discovered.path))
|
|
44
|
+
.digest("hex");
|
|
45
|
+
return {
|
|
46
|
+
schema: "pi-workflows.resolved-controller-initialization.v1",
|
|
47
|
+
controllerName: definition.name,
|
|
48
|
+
controllerPath: discovered.path,
|
|
49
|
+
sourceHash,
|
|
50
|
+
initialStatus,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export async function resolveSettingsChange(request) {
|
|
54
|
+
if (request.schema !== "pi-workflows.settings-validation-request.v1") {
|
|
55
|
+
throw new Error("Invalid workflow settings validation request schema");
|
|
56
|
+
}
|
|
57
|
+
const resolved = await loadResolvedWorkflow(request.cwd, request.workflowRef);
|
|
58
|
+
if (resolved.definitionDigest !== request.definitionDigest) {
|
|
59
|
+
throw new Error("Workflow source changed before the settings proposal was validated");
|
|
60
|
+
}
|
|
61
|
+
const definition = settingsDefinition(resolved.definition, request.mountPath);
|
|
62
|
+
if (definition === undefined) {
|
|
63
|
+
throw new Error(`Workflow scope ${request.mountPath || "/"} does not declare editable settings`);
|
|
64
|
+
}
|
|
65
|
+
const applied = await applyWorkflowSettingsPatch(definition, request.current, request.patch, { type: "controller", id: request.actorId }, "controller-request");
|
|
66
|
+
return {
|
|
67
|
+
schema: "pi-workflows.resolved-settings-change.v1",
|
|
68
|
+
definitionDigest: resolved.definitionDigest,
|
|
69
|
+
patch: applied.patch,
|
|
70
|
+
settings: applied.json,
|
|
71
|
+
paths: definition.paths,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
async function loadResolvedWorkflow(cwd, workflowRef) {
|
|
75
|
+
const resolved = await resolveWorkflowRef(workflowRef, { cwd }, builtinWorkflowCatalog);
|
|
76
|
+
validateWorkflowDefinition(resolved.definition);
|
|
77
|
+
const snapshot = createDefinitionSnapshot(resolved.definition);
|
|
78
|
+
const definitionDigest = `sha256:${createHash("sha256")
|
|
79
|
+
.update(canonicalJson(snapshot))
|
|
80
|
+
.digest("hex")}`;
|
|
81
|
+
return { definition: resolved.definition, source: resolved.source, snapshot, definitionDigest };
|
|
82
|
+
}
|
|
83
|
+
function settingsDefinition(definition, mountPath) {
|
|
84
|
+
return mountPath === ""
|
|
85
|
+
? definition.settings
|
|
86
|
+
: compositionMetadata(definition)?.scopes[mountPath]?.settings;
|
|
87
|
+
}
|
|
88
|
+
function sourceRef(source) {
|
|
89
|
+
return source.kind === "builtin" ? `builtin:${source.id}` : source.path;
|
|
90
|
+
}
|
|
91
|
+
async function readRequest() {
|
|
92
|
+
const chunks = [];
|
|
93
|
+
let length = 0;
|
|
94
|
+
for await (const chunk of process.stdin) {
|
|
95
|
+
const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
96
|
+
length += buffer.byteLength;
|
|
97
|
+
if (length > MAX_PROTOCOL_MESSAGE_BYTES) {
|
|
98
|
+
throw new Error("Workflow resolver request exceeds 1 MiB");
|
|
99
|
+
}
|
|
100
|
+
chunks.push(buffer);
|
|
101
|
+
}
|
|
102
|
+
const value = parseJson(Buffer.concat(chunks).toString("utf8").trimEnd());
|
|
103
|
+
if (!isRecord(value) || typeof value.cwd !== "string") {
|
|
104
|
+
throw new Error("Invalid source resolver request");
|
|
105
|
+
}
|
|
106
|
+
if (value.schema === "pi-workflows.resolve-request.v1" && typeof value.workflowRef === "string") {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
if (value.schema === "pi-workflows.controller-initialization-request.v1" &&
|
|
110
|
+
typeof value.controllerName === "string" &&
|
|
111
|
+
Object.hasOwn(value, "spec")) {
|
|
112
|
+
return value;
|
|
113
|
+
}
|
|
114
|
+
if (value.schema === "pi-workflows.settings-validation-request.v1" &&
|
|
115
|
+
typeof value.workflowRef === "string" &&
|
|
116
|
+
typeof value.definitionDigest === "string" &&
|
|
117
|
+
typeof value.mountPath === "string" &&
|
|
118
|
+
typeof value.actorId === "string" &&
|
|
119
|
+
Object.hasOwn(value, "current") &&
|
|
120
|
+
Object.hasOwn(value, "patch")) {
|
|
121
|
+
return value;
|
|
122
|
+
}
|
|
123
|
+
throw new Error("Invalid workflow resolver request schema");
|
|
124
|
+
}
|
|
125
|
+
async function main() {
|
|
126
|
+
try {
|
|
127
|
+
const request = await readRequest();
|
|
128
|
+
const result = request.schema === "pi-workflows.resolve-request.v1"
|
|
129
|
+
? await resolveWorkflowLaunch(request)
|
|
130
|
+
: request.schema === "pi-workflows.controller-initialization-request.v1"
|
|
131
|
+
? await resolveControllerInitialization(request)
|
|
132
|
+
: await resolveSettingsChange(request);
|
|
133
|
+
const encoded = `${canonicalJson(result)}\n`;
|
|
134
|
+
if (Buffer.byteLength(encoded) > MAX_PROTOCOL_MESSAGE_BYTES) {
|
|
135
|
+
throw new Error("Workflow resolver result exceeds 1 MiB");
|
|
136
|
+
}
|
|
137
|
+
process.stdout.write(encoded);
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
process.stderr.write(`${errorMessage(error)}\n`);
|
|
141
|
+
process.exitCode = 1;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function isRecord(value) {
|
|
145
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
146
|
+
}
|
|
147
|
+
if (process.argv[1] === fileURLToPath(import.meta.url))
|
|
148
|
+
void main();
|
|
149
|
+
//# sourceMappingURL=resolver-entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver-entry.js","sourceRoot":"","sources":["../../src/host/resolver-entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import type { AgentStepExecutor, AgentStepRequest, AgentStepSubmission } from "../workflows/types.js";
|
|
2
|
-
|
|
2
|
+
export interface SupervisedProcessRegistry {
|
|
3
|
+
register(pid: number): unknown | Promise<unknown>;
|
|
4
|
+
unregister(pid: number): unknown | Promise<unknown>;
|
|
5
|
+
}
|
|
3
6
|
export type RpcStepExecutorOptions = {
|
|
4
7
|
cwd: string;
|
|
5
|
-
registry
|
|
8
|
+
registry?: SupervisedProcessRegistry;
|
|
9
|
+
/** Start a separate process group, or inherit the caller's process group. */
|
|
10
|
+
processGroup?: "own" | "inherit";
|
|
11
|
+
/** Grace period before a process group receives SIGKILL. */
|
|
12
|
+
abortGraceMs?: number;
|
|
6
13
|
/** Absolute path to the pi binary; defaults to the installed `pi`. */
|
|
7
14
|
piBin?: string;
|
|
8
15
|
/** Extra environment for the child; the host's environment is inherited. */
|
|
@@ -28,12 +35,16 @@ export declare class RpcStepExecutor implements AgentStepExecutor {
|
|
|
28
35
|
private actions;
|
|
29
36
|
private submissionWaiters;
|
|
30
37
|
private stdoutBuffer;
|
|
38
|
+
private registeredPid;
|
|
39
|
+
private closePromise;
|
|
31
40
|
constructor(options: RpcStepExecutorOptions);
|
|
32
41
|
runAgentStep(request: AgentStepRequest, signal: AbortSignal): Promise<AgentStepSubmission>;
|
|
33
|
-
/** Stop the child
|
|
42
|
+
/** Stop the child process tree, then unregister its exact group leader. */
|
|
34
43
|
close(): Promise<void>;
|
|
44
|
+
private closeChild;
|
|
35
45
|
private currentExit;
|
|
36
46
|
private ensureStarted;
|
|
47
|
+
private unregisterChild;
|
|
37
48
|
private promptForSubmission;
|
|
38
49
|
private takeMatchingAction;
|
|
39
50
|
private sendAbortQuietly;
|
|
@@ -8,7 +8,7 @@ import { RPC_SUBMISSION_PREFIX } from "./rpc-bridge.js";
|
|
|
8
8
|
const BRIDGE_PATH = ["./rpc-bridge.js", "./rpc-bridge.ts"]
|
|
9
9
|
.map((candidate) => fileURLToPath(new URL(candidate, import.meta.url)))
|
|
10
10
|
.find((candidate) => fs.existsSync(candidate));
|
|
11
|
-
const
|
|
11
|
+
const DEFAULT_ABORT_GRACE_MS = 3_000;
|
|
12
12
|
/**
|
|
13
13
|
* Runs agent steps in a headless `pi --mode rpc` child. One child serves one
|
|
14
14
|
* workflow run. The rpc-bridge extension inside the child registers the
|
|
@@ -25,12 +25,14 @@ export class RpcStepExecutor {
|
|
|
25
25
|
actions = [];
|
|
26
26
|
submissionWaiters = [];
|
|
27
27
|
stdoutBuffer = "";
|
|
28
|
+
registeredPid = null;
|
|
29
|
+
closePromise = null;
|
|
28
30
|
constructor(options) {
|
|
29
31
|
this.options = options;
|
|
30
32
|
this.assistantMessageMode = options.assistantMessageMode ?? "unsupported";
|
|
31
33
|
}
|
|
32
34
|
async runAgentStep(request, signal) {
|
|
33
|
-
this.ensureStarted();
|
|
35
|
+
await this.ensureStarted();
|
|
34
36
|
let prompt = request.prompt;
|
|
35
37
|
for (;;) {
|
|
36
38
|
throwIfAborted(signal);
|
|
@@ -47,47 +49,48 @@ export class RpcStepExecutor {
|
|
|
47
49
|
].join("\n");
|
|
48
50
|
}
|
|
49
51
|
}
|
|
50
|
-
/** Stop the child
|
|
52
|
+
/** Stop the child process tree, then unregister its exact group leader. */
|
|
51
53
|
async close() {
|
|
54
|
+
this.closePromise ??= this.closeChild();
|
|
55
|
+
await this.closePromise;
|
|
56
|
+
}
|
|
57
|
+
async closeChild() {
|
|
52
58
|
const child = this.child;
|
|
53
59
|
this.child = null;
|
|
54
|
-
if (child === null)
|
|
60
|
+
if (child === null)
|
|
55
61
|
return;
|
|
56
|
-
}
|
|
57
62
|
const pid = child.pid;
|
|
58
|
-
|
|
63
|
+
try {
|
|
59
64
|
try {
|
|
60
65
|
child.stdin?.end();
|
|
61
66
|
}
|
|
62
67
|
catch {
|
|
63
68
|
// The pipe may already be closed.
|
|
64
69
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (pid !== undefined) {
|
|
70
|
+
const ownGroup = this.options.processGroup !== "inherit";
|
|
71
|
+
if (pid !== undefined && ownGroup) {
|
|
68
72
|
killGroup(pid, "SIGTERM");
|
|
73
|
+
const exited = await waitForGroupExit(pid, this.options.abortGraceMs ?? DEFAULT_ABORT_GRACE_MS);
|
|
74
|
+
if (!exited)
|
|
75
|
+
killGroup(pid, "SIGKILL");
|
|
69
76
|
}
|
|
70
|
-
else {
|
|
77
|
+
else if (this.childExited === null) {
|
|
71
78
|
child.kill("SIGTERM");
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (!exited) {
|
|
75
|
-
if (pid !== undefined) {
|
|
76
|
-
killGroup(pid, "SIGKILL");
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
+
const exited = await waitForExit(child, this.options.abortGraceMs ?? DEFAULT_ABORT_GRACE_MS);
|
|
80
|
+
if (!exited)
|
|
79
81
|
child.kill("SIGKILL");
|
|
80
|
-
}
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
|
-
|
|
84
|
-
this.
|
|
84
|
+
finally {
|
|
85
|
+
await this.unregisterChild();
|
|
85
86
|
}
|
|
86
87
|
}
|
|
87
88
|
currentExit() {
|
|
88
89
|
return this.childExited;
|
|
89
90
|
}
|
|
90
|
-
ensureStarted() {
|
|
91
|
+
async ensureStarted() {
|
|
92
|
+
if (this.closePromise !== null)
|
|
93
|
+
throw new Error("Headless pi session is closed");
|
|
91
94
|
if (this.child !== null) {
|
|
92
95
|
const exited = this.currentExit();
|
|
93
96
|
if (exited !== null) {
|
|
@@ -114,19 +117,11 @@ export class RpcStepExecutor {
|
|
|
114
117
|
cwd: this.options.cwd,
|
|
115
118
|
env: { ...process.env, ...this.options.env },
|
|
116
119
|
stdio: ["pipe", "pipe", "pipe"],
|
|
117
|
-
|
|
118
|
-
// so a killed host cannot leave an orphaned agent working.
|
|
119
|
-
detached: true,
|
|
120
|
+
detached: this.options.processGroup !== "inherit",
|
|
120
121
|
});
|
|
121
122
|
this.child = child;
|
|
122
|
-
if (child.pid !== undefined) {
|
|
123
|
-
this.options.registry.register(child.pid);
|
|
124
|
-
}
|
|
125
123
|
child.on("exit", (code, signal) => {
|
|
126
124
|
this.childExited = { code, signal };
|
|
127
|
-
if (child.pid !== undefined) {
|
|
128
|
-
this.options.registry.unregister(child.pid);
|
|
129
|
-
}
|
|
130
125
|
this.wakeSubmissionWaiters();
|
|
131
126
|
});
|
|
132
127
|
// A failed spawn (missing binary, EACCES) emits error instead of exit;
|
|
@@ -166,6 +161,24 @@ export class RpcStepExecutor {
|
|
|
166
161
|
child.stdout?.on("data", (chunk) => {
|
|
167
162
|
this.stdoutBuffer = (this.stdoutBuffer + chunk.toString("utf8")).slice(-64 * 1024);
|
|
168
163
|
});
|
|
164
|
+
if (child.pid !== undefined && this.options.registry !== undefined) {
|
|
165
|
+
try {
|
|
166
|
+
await this.options.registry.register(child.pid);
|
|
167
|
+
this.registeredPid = child.pid;
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
killGroup(child.pid, "SIGKILL");
|
|
171
|
+
this.child = null;
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
async unregisterChild() {
|
|
177
|
+
const pid = this.registeredPid;
|
|
178
|
+
if (pid === null)
|
|
179
|
+
return;
|
|
180
|
+
this.registeredPid = null;
|
|
181
|
+
await this.options.registry?.unregister(pid);
|
|
169
182
|
}
|
|
170
183
|
async promptForSubmission(prompt, request, signal) {
|
|
171
184
|
const child = this.child;
|
|
@@ -252,6 +265,26 @@ function throwIfAborted(signal) {
|
|
|
252
265
|
throw signal.reason ?? new Error("Workflow step aborted");
|
|
253
266
|
}
|
|
254
267
|
}
|
|
268
|
+
async function waitForGroupExit(pid, timeoutMs) {
|
|
269
|
+
if (process.platform === "win32")
|
|
270
|
+
return true;
|
|
271
|
+
const deadline = Date.now() + timeoutMs;
|
|
272
|
+
while (processGroupExists(pid)) {
|
|
273
|
+
if (Date.now() >= deadline)
|
|
274
|
+
return false;
|
|
275
|
+
await new Promise((resolve) => setTimeout(resolve, 25));
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
function processGroupExists(pid) {
|
|
280
|
+
try {
|
|
281
|
+
process.kill(-pid, 0);
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
255
288
|
async function waitForExit(child, timeoutMs) {
|
|
256
289
|
if (child.exitCode !== null || child.signalCode !== null) {
|
|
257
290
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-executor.js","sourceRoot":"","sources":["../../src/host/rpc-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-executor.js","sourceRoot":"","sources":["../../src/host/rpc-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/host/runner.d.ts
CHANGED
|
@@ -1,47 +1,113 @@
|
|
|
1
1
|
import { HostProcessRegistry } from "./processes.js";
|
|
2
2
|
export type WorkflowHostOptions = {
|
|
3
|
-
|
|
3
|
+
/** Retained for callers; the host itself is global to the state database. */
|
|
4
|
+
cwd?: string;
|
|
4
5
|
runnerId?: string;
|
|
5
|
-
/** Explicit database path; defaults to the canonical workflow state database. */
|
|
6
6
|
databasePath?: string;
|
|
7
7
|
registry?: HostProcessRegistry;
|
|
8
8
|
piArgs?: string[];
|
|
9
|
-
/** Extra environment for headless children (for example a test provider). */
|
|
10
9
|
env?: Record<string, string>;
|
|
11
|
-
/** Poll interval for the claim loop; tests use a faster cadence. */
|
|
12
10
|
claimPollMs?: number;
|
|
11
|
+
hostLeaseMs?: number;
|
|
12
|
+
hostRenewMs?: number;
|
|
13
|
+
runClaimLeaseMs?: number;
|
|
14
|
+
workerEntryPath?: string;
|
|
15
|
+
workerStartupTimeoutMs?: number;
|
|
16
|
+
controllerWorkerEntryPath?: string;
|
|
13
17
|
onLog?: (message: string) => void;
|
|
14
18
|
};
|
|
15
|
-
/**
|
|
16
|
-
* The always-on runner: claims parked workflow runs and reconciles durable
|
|
17
|
-
* controllers without a Pi session. Conversation nodes execute in headless
|
|
18
|
-
* `pi --mode rpc` children. Everything the host does is recoverable: claims
|
|
19
|
-
* expire, SQLite leases fence stale writers, and child processes are reaped by
|
|
20
|
-
* the next host.
|
|
21
|
-
*/
|
|
19
|
+
/** Global package-owned host. It writes state and supervises code-only workers. */
|
|
22
20
|
export declare class WorkflowHost {
|
|
23
21
|
private readonly options;
|
|
24
|
-
private readonly
|
|
22
|
+
private readonly hostId;
|
|
23
|
+
private readonly databasePath;
|
|
24
|
+
private readonly stateDirectory;
|
|
25
|
+
private readonly socketPath;
|
|
26
|
+
private readonly lockPath;
|
|
27
|
+
private readonly state;
|
|
28
|
+
private readonly hostState;
|
|
29
|
+
private readonly queue;
|
|
30
|
+
private readonly decisions;
|
|
31
|
+
private readonly runStore;
|
|
25
32
|
private readonly registry;
|
|
26
|
-
private readonly store;
|
|
27
|
-
private readonly childRunStore;
|
|
28
|
-
private manager;
|
|
29
|
-
private pollTimer;
|
|
30
33
|
private readonly activeRuns;
|
|
31
|
-
private readonly
|
|
32
|
-
|
|
33
|
-
private readonly
|
|
34
|
+
private readonly workerDescendants;
|
|
35
|
+
private readonly activeControllers;
|
|
36
|
+
private readonly controlClaims;
|
|
37
|
+
private readonly activationTasks;
|
|
38
|
+
private readonly pendingStarts;
|
|
39
|
+
private readonly pendingRunClaims;
|
|
40
|
+
private readonly pendingResumes;
|
|
41
|
+
private readonly blockedRuns;
|
|
42
|
+
private readonly deliveryClaims;
|
|
43
|
+
private readonly sockets;
|
|
44
|
+
private server;
|
|
45
|
+
private claim;
|
|
46
|
+
private heartbeatTimer;
|
|
47
|
+
private pollTimer;
|
|
34
48
|
private stopping;
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
private
|
|
38
|
-
|
|
49
|
+
private started;
|
|
50
|
+
private controllerPollActive;
|
|
51
|
+
private decisionTimeoutActive;
|
|
52
|
+
constructor(options?: WorkflowHostOptions);
|
|
53
|
+
get endpoint(): string;
|
|
54
|
+
private get runClaimLeaseMs();
|
|
39
55
|
start(): Promise<void>;
|
|
40
|
-
/** Drain: stop claiming, park in-flight runs, stop controllers, kill children. */
|
|
41
56
|
stop(): Promise<void>;
|
|
42
|
-
private
|
|
43
|
-
private
|
|
44
|
-
private
|
|
45
|
-
private
|
|
46
|
-
private
|
|
57
|
+
private closeServer;
|
|
58
|
+
private recoverPreviousHost;
|
|
59
|
+
private startTimers;
|
|
60
|
+
private listen;
|
|
61
|
+
private handleConnection;
|
|
62
|
+
private handleRequest;
|
|
63
|
+
private executeOperation;
|
|
64
|
+
private executeControllerOperation;
|
|
65
|
+
private statusReceipt;
|
|
66
|
+
private rememberDeliveryClaim;
|
|
67
|
+
private deliveryClaim;
|
|
68
|
+
private claimNotification;
|
|
69
|
+
private deliverNotification;
|
|
70
|
+
private claimTurn;
|
|
71
|
+
private resolveTurn;
|
|
72
|
+
private answerCheckpoint;
|
|
73
|
+
private answerDecision;
|
|
74
|
+
private prepareDecisionContinuation;
|
|
75
|
+
private prepareContinuation;
|
|
76
|
+
private startRun;
|
|
77
|
+
private publishInteractionUpdate;
|
|
78
|
+
private submitInteraction;
|
|
79
|
+
private claimControllerOne;
|
|
80
|
+
private activateController;
|
|
81
|
+
private handleControllerWorkerMessage;
|
|
82
|
+
private controllerWorkflowScheduler;
|
|
83
|
+
private changeControllerWorkflowSettings;
|
|
84
|
+
private ensureControllerWorkflow;
|
|
85
|
+
private finishControllerSuccess;
|
|
86
|
+
private finishControllerFailure;
|
|
87
|
+
private expireTimedOutDecision;
|
|
88
|
+
private expireTimedOutInteraction;
|
|
89
|
+
private markPendingStart;
|
|
90
|
+
private clearPendingStart;
|
|
91
|
+
private claimOne;
|
|
92
|
+
private activateRun;
|
|
93
|
+
private activateRunNow;
|
|
94
|
+
private resumePendingRun;
|
|
95
|
+
private handleWorkerMessage;
|
|
96
|
+
private handleFreshWorkerMessage;
|
|
97
|
+
private handleWorkerProcessOperation;
|
|
98
|
+
private reapWorkerDescendants;
|
|
99
|
+
private acceptWorkerInteraction;
|
|
100
|
+
private rejectWorkerInteraction;
|
|
101
|
+
private requireWorkerInteraction;
|
|
102
|
+
private settleRejectedInteraction;
|
|
103
|
+
private enqueueWorkerNotification;
|
|
104
|
+
private requestWorkerPresentation;
|
|
105
|
+
private parkForInteraction;
|
|
106
|
+
private prepareInteractionResume;
|
|
107
|
+
private applyLifecycleProjection;
|
|
108
|
+
private completeControllerWorkflow;
|
|
109
|
+
private commitActivePause;
|
|
110
|
+
private recoverWorkerExit;
|
|
111
|
+
private releaseLock;
|
|
112
|
+
private log;
|
|
47
113
|
}
|