@osolmaz/pi-workflows 0.12.1 → 0.13.1
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 +59 -33
- package/dist/builtins/autodoc.workflow.d.ts +194 -7
- package/dist/builtins/autodoc.workflow.js +156 -30
- package/dist/builtins/autodoc.workflow.js.map +1 -1
- package/dist/builtins/autoimplement-command-batches.d.ts +1 -0
- package/dist/builtins/autoimplement-command-batches.js +29 -31
- package/dist/builtins/autoimplement-command-batches.js.map +1 -1
- package/dist/builtins/autoimplement.workflow.d.ts +1619 -97
- package/dist/builtins/autoimplement.workflow.js +416 -153
- package/dist/builtins/autoimplement.workflow.js.map +1 -1
- package/dist/builtins/autoplan.workflow.d.ts +126 -13
- package/dist/builtins/autoplan.workflow.js +200 -29
- package/dist/builtins/autoplan.workflow.js.map +1 -1
- package/dist/builtins/catalog.js +7 -5
- package/dist/builtins/catalog.js.map +1 -1
- package/dist/builtins/change-verification.workflow.d.ts +110 -0
- package/dist/builtins/change-verification.workflow.js +860 -0
- package/dist/builtins/change-verification.workflow.js.map +1 -0
- package/dist/builtins/index.d.ts +2 -1
- package/dist/builtins/index.js +1 -0
- package/dist/builtins/index.js.map +1 -1
- package/dist/builtins/monitor.workflow.d.ts +56 -21
- package/dist/builtins/monitor.workflow.js +499 -217
- package/dist/builtins/monitor.workflow.js.map +1 -1
- package/dist/builtins/plain-summary.workflow.d.ts +32 -0
- package/dist/builtins/plain-summary.workflow.js +134 -0
- package/dist/builtins/plain-summary.workflow.js.map +1 -0
- package/dist/builtins/plan-change.workflow.d.ts +527 -26
- package/dist/builtins/plan-change.workflow.js +26 -0
- package/dist/builtins/plan-change.workflow.js.map +1 -1
- package/dist/builtins/sanity-check.workflow.d.ts +45 -3
- package/dist/builtins/sanity-check.workflow.js +45 -7
- package/dist/builtins/sanity-check.workflow.js.map +1 -1
- package/dist/builtins/workspace-preparation.workflow.d.ts +75 -0
- package/dist/builtins/workspace-preparation.workflow.js +498 -0
- package/dist/builtins/workspace-preparation.workflow.js.map +1 -0
- package/dist/controllers/effects.d.ts +3 -2
- package/dist/controllers/effects.js +8 -1
- package/dist/controllers/effects.js.map +1 -1
- package/dist/controllers/index.d.ts +1 -1
- package/dist/controllers/index.js +1 -1
- package/dist/controllers/index.js.map +1 -1
- package/dist/controllers/manager.d.ts +1 -0
- package/dist/controllers/manager.js +41 -17
- package/dist/controllers/manager.js.map +1 -1
- package/dist/controllers/sqlite.d.ts +107 -85
- package/dist/controllers/sqlite.js +1611 -1486
- package/dist/controllers/sqlite.js.map +1 -1
- package/dist/controllers/store.d.ts +9 -8
- package/dist/controllers/store.js +1 -31
- package/dist/controllers/store.js.map +1 -1
- package/dist/controllers/types.d.ts +3 -0
- package/dist/controllers/workflow-engine-scheduler.d.ts +1 -1
- package/dist/controllers/workflow-engine-scheduler.js +3 -5
- package/dist/controllers/workflow-engine-scheduler.js.map +1 -1
- package/dist/controllers/workflows.d.ts +2 -2
- package/dist/controllers/workflows.js +11 -10
- package/dist/controllers/workflows.js.map +1 -1
- package/dist/extension/controller-host.js +2 -2
- package/dist/extension/controller-host.js.map +1 -1
- package/dist/extension/decision-channels.d.ts +2 -0
- package/dist/extension/decision-channels.js +311 -118
- package/dist/extension/decision-channels.js.map +1 -1
- package/dist/extension/executor.d.ts +9 -2
- package/dist/extension/executor.js +90 -6
- package/dist/extension/executor.js.map +1 -1
- package/dist/extension/herdr-viewer.d.ts +0 -1
- package/dist/extension/herdr-viewer.js +0 -4
- package/dist/extension/herdr-viewer.js.map +1 -1
- package/dist/extension/index.js +156 -117
- package/dist/extension/index.js.map +1 -1
- package/dist/extension/recorder.d.ts +3 -10
- package/dist/extension/recorder.js +13 -22
- package/dist/extension/recorder.js.map +1 -1
- package/dist/extension/step-message.d.ts +7 -2
- package/dist/extension/step-message.js +94 -2
- package/dist/extension/step-message.js.map +1 -1
- package/dist/extension/widget.js +6 -0
- package/dist/extension/widget.js.map +1 -1
- package/dist/host/rpc-executor.d.ts +3 -0
- package/dist/host/rpc-executor.js +2 -0
- package/dist/host/rpc-executor.js.map +1 -1
- package/dist/host/runner.d.ts +3 -6
- package/dist/host/runner.js +83 -32
- package/dist/host/runner.js.map +1 -1
- package/dist/render/graph-render.js +14 -8
- package/dist/render/graph-render.js.map +1 -1
- package/dist/state/database.d.ts +35 -0
- package/dist/state/database.js +287 -0
- package/dist/state/database.js.map +1 -0
- package/dist/state/index.d.ts +4 -0
- package/dist/state/index.js +5 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/json.d.ts +6 -0
- package/dist/state/json.js +38 -0
- package/dist/state/json.js.map +1 -0
- package/dist/state/mutation.d.ts +57 -0
- package/dist/state/mutation.js +255 -0
- package/dist/state/mutation.js.map +1 -0
- package/dist/state/schema.d.ts +6 -0
- package/dist/state/schema.js +473 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/viewer/cli.d.ts +2 -2
- package/dist/viewer/cli.js +142 -122
- package/dist/viewer/cli.js.map +1 -1
- package/dist/viewer/render.d.ts +4 -4
- package/dist/viewer/render.js +2 -17
- package/dist/viewer/render.js.map +1 -1
- package/dist/viewer/session-reducer.d.ts +1 -1
- package/dist/viewer/session-reducer.js +1 -1
- package/dist/viewer/tui.d.ts +3 -3
- package/dist/viewer/tui.js +15 -13
- package/dist/viewer/tui.js.map +1 -1
- package/dist/viewer/watch.d.ts +2 -5
- package/dist/viewer/watch.js +13 -13
- package/dist/viewer/watch.js.map +1 -1
- package/dist/workflows/composition.js +12 -2
- package/dist/workflows/composition.js.map +1 -1
- package/dist/workflows/definition.d.ts +6 -2
- package/dist/workflows/definition.js +17 -0
- package/dist/workflows/definition.js.map +1 -1
- package/dist/workflows/engine.d.ts +6 -6
- package/dist/workflows/engine.js +183 -103
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/errors.d.ts +3 -3
- package/dist/workflows/errors.js +3 -3
- package/dist/workflows/human-decision.d.ts +29 -4
- package/dist/workflows/human-decision.js +547 -283
- package/dist/workflows/human-decision.js.map +1 -1
- package/dist/workflows/index.d.ts +4 -5
- package/dist/workflows/index.js +3 -4
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/schema.js +17 -1
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/store.d.ts +83 -103
- package/dist/workflows/store.js +902 -951
- package/dist/workflows/store.js.map +1 -1
- package/dist/workflows/types.d.ts +55 -81
- package/docs/CONTROLLERS.md +10 -8
- package/docs/DEFERRED_TURNS.md +2 -2
- package/docs/DESIGN_PHILOSOPHY.md +4 -2
- package/docs/HUMAN_DECISIONS.md +13 -14
- package/docs/MONITOR.md +179 -231
- package/docs/SQLITE_STATE.md +219 -0
- package/docs/WORKFLOW_COMPOSITION.md +27 -19
- package/docs/WORKFLOW_STEP_MESSAGES.md +20 -18
- package/docs/WORKFLOW_UPDATES.md +10 -9
- package/docs/development.md +9 -9
- package/docs/live-replay-protocol.md +28 -37
- package/docs/plans/2026-08-16-workflow-updates-plan.md +1 -1
- package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
- package/docs/plans/2026-08-21-autoimplement-timeout-fallback-plan.md +1 -1
- package/docs/plans/2026-08-21-plan-change-approval-policy-plan.md +1 -1
- package/docs/plans/2026-08-21-sanity-check-plan.md +30 -16
- package/docs/plans/2026-08-22-goal-finishing-monitor-plan.md +200 -0
- package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +701 -0
- package/docs/plans/2026-08-23-sqlite-state-plan.md +970 -0
- package/docs/plans/2026-08-24-change-scoped-verification-plan.md +419 -0
- package/docs/plans/replayable-run-bundles-implementation-plan.md +2 -2
- package/docs/plans/session-event-replay-implementation-plan.md +1 -1
- package/docs/plans/tui-viewer-implementation-plan.md +1 -1
- package/docs/session-event-journal.md +63 -434
- package/docs/tui-viewer.md +13 -15
- package/docs/workflows.md +111 -62
- package/examples/workflows/plain-summary.workflow.ts +1 -0
- package/herdr-plugin.toml +1 -1
- package/package.json +1 -1
- package/plugins/herdr/viewer.mjs +1 -11
- package/skills/autodoc/SKILL.md +7 -0
- package/skills/autoimplement/SKILL.md +4 -0
- package/skills/autoplan/SKILL.md +5 -4
- package/skills/monitor/SKILL.md +91 -163
- package/skills/pi-workflows/SKILL.md +7 -7
- package/skills/sanity-check/SKILL.md +1 -1
- package/src/builtins/autodoc.workflow.ts +184 -33
- package/src/builtins/autoimplement-command-batches.ts +39 -33
- package/src/builtins/autoimplement.workflow.ts +483 -175
- package/src/builtins/autoplan.workflow.ts +290 -40
- package/src/builtins/catalog.ts +7 -5
- package/src/builtins/change-verification.workflow.ts +1143 -0
- package/src/builtins/index.ts +7 -1
- package/src/builtins/monitor.workflow.ts +667 -250
- package/src/builtins/plain-summary.workflow.ts +185 -0
- package/src/builtins/plan-change.workflow.ts +35 -0
- package/src/builtins/sanity-check.workflow.ts +62 -7
- package/src/builtins/workspace-preparation.workflow.ts +668 -0
- package/src/controllers/effects.ts +7 -0
- package/src/controllers/index.ts +0 -6
- package/src/controllers/manager.ts +72 -32
- package/src/controllers/sqlite.ts +2420 -1948
- package/src/controllers/store.ts +17 -38
- package/src/controllers/types.ts +3 -0
- package/src/controllers/workflow-engine-scheduler.ts +4 -8
- package/src/controllers/workflows.ts +45 -21
- package/src/extension/controller-host.ts +1 -2
- package/src/extension/decision-channels.ts +427 -144
- package/src/extension/executor.ts +106 -6
- package/src/extension/herdr-viewer.ts +0 -5
- package/src/extension/index.ts +180 -132
- package/src/extension/recorder.ts +13 -22
- package/src/extension/step-message.ts +106 -4
- package/src/extension/widget.ts +8 -0
- package/src/host/rpc-executor.ts +4 -0
- package/src/host/runner.ts +93 -41
- package/src/render/graph-render.ts +11 -4
- package/src/state/database.ts +375 -0
- package/src/state/index.ts +29 -0
- package/src/state/json.ts +42 -0
- package/src/state/mutation.ts +435 -0
- package/src/state/schema.ts +475 -0
- package/src/viewer/cli.ts +151 -144
- package/src/viewer/render.ts +12 -24
- package/src/viewer/session-reducer.ts +1 -1
- package/src/viewer/tui.ts +18 -17
- package/src/viewer/watch.ts +13 -17
- package/src/workflows/composition.ts +12 -3
- package/src/workflows/definition.ts +36 -3
- package/src/workflows/engine.ts +212 -116
- package/src/workflows/errors.ts +3 -3
- package/src/workflows/human-decision.ts +795 -340
- package/src/workflows/index.ts +15 -19
- package/src/workflows/schema.ts +19 -1
- package/src/workflows/store.ts +1295 -1163
- package/src/workflows/types.ts +61 -81
- package/dist/workflows/artifacts.d.ts +0 -40
- package/dist/workflows/artifacts.js +0 -155
- package/dist/workflows/artifacts.js.map +0 -1
- package/dist/workflows/migrate-sources.d.ts +0 -42
- package/dist/workflows/migrate-sources.js +0 -133
- package/dist/workflows/migrate-sources.js.map +0 -1
- package/docs/run-bundles.md +0 -481
- package/src/workflows/artifacts.ts +0 -188
- package/src/workflows/migrate-sources.ts +0 -178
package/src/viewer/watch.ts
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
|
|
3
4
|
export type Unsubscribe = () => void;
|
|
4
5
|
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*/
|
|
9
|
-
export function watchRunsDir(
|
|
10
|
-
dir: string,
|
|
6
|
+
/** Watch the canonical database and its WAL with a polling fallback. */
|
|
7
|
+
export function watchStateDatabase(
|
|
8
|
+
databasePath: string,
|
|
11
9
|
onChange: () => void,
|
|
12
10
|
options: { pollMs?: number; debounceMs?: number } = {},
|
|
13
11
|
): Unsubscribe {
|
|
14
12
|
const pollMs = options.pollMs ?? 1_000;
|
|
15
13
|
const debounceMs = options.debounceMs ?? 80;
|
|
14
|
+
const directory = path.dirname(databasePath);
|
|
15
|
+
const base = path.basename(databasePath);
|
|
16
|
+
const relevant = new Set([base, `${base}-wal`, `${base}-shm`]);
|
|
16
17
|
let debounceTimer: NodeJS.Timeout | null = null;
|
|
17
18
|
let closed = false;
|
|
18
19
|
|
|
19
20
|
const fire = () => {
|
|
20
|
-
if (closed)
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
if (debounceTimer) {
|
|
24
|
-
clearTimeout(debounceTimer);
|
|
25
|
-
}
|
|
21
|
+
if (closed) return;
|
|
22
|
+
if (debounceTimer !== null) clearTimeout(debounceTimer);
|
|
26
23
|
debounceTimer = setTimeout(() => {
|
|
27
24
|
debounceTimer = null;
|
|
28
25
|
onChange();
|
|
@@ -31,7 +28,9 @@ export function watchRunsDir(
|
|
|
31
28
|
|
|
32
29
|
let watcher: fs.FSWatcher | null = null;
|
|
33
30
|
try {
|
|
34
|
-
watcher = fs.watch(
|
|
31
|
+
watcher = fs.watch(directory, (_event, filename) => {
|
|
32
|
+
if (filename === null || relevant.has(filename.toString())) fire();
|
|
33
|
+
});
|
|
35
34
|
watcher.on("error", () => {
|
|
36
35
|
watcher?.close();
|
|
37
36
|
watcher = null;
|
|
@@ -40,15 +39,12 @@ export function watchRunsDir(
|
|
|
40
39
|
watcher = null;
|
|
41
40
|
}
|
|
42
41
|
|
|
43
|
-
// Polling fallback covers platforms without recursive fs.watch and missed events.
|
|
44
42
|
const poller = setInterval(fire, pollMs);
|
|
45
43
|
poller.unref?.();
|
|
46
44
|
|
|
47
45
|
return () => {
|
|
48
46
|
closed = true;
|
|
49
|
-
if (debounceTimer)
|
|
50
|
-
clearTimeout(debounceTimer);
|
|
51
|
-
}
|
|
47
|
+
if (debounceTimer !== null) clearTimeout(debounceTimer);
|
|
52
48
|
clearInterval(poller);
|
|
53
49
|
watcher?.close();
|
|
54
50
|
};
|
|
@@ -3,7 +3,6 @@ import { readFileSync } from "node:fs";
|
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import type {
|
|
5
5
|
ActionNodeDefinition,
|
|
6
|
-
AgentNodeDefinition,
|
|
7
6
|
CheckpointNodeDefinition,
|
|
8
7
|
ComputeNodeDefinition,
|
|
9
8
|
FunctionActionNodeDefinition,
|
|
@@ -451,11 +450,20 @@ function wrapNode(
|
|
|
451
450
|
...(node.statusDetail !== undefined ? { statusDetail: node.statusDetail } : {}),
|
|
452
451
|
};
|
|
453
452
|
switch (node.nodeType) {
|
|
454
|
-
case "agent":
|
|
453
|
+
case "agent": {
|
|
454
|
+
const prompt = (context: WorkflowNodeContext) => node.prompt(project(context));
|
|
455
|
+
if (typeof node.expectedOutput === "object") {
|
|
456
|
+
return {
|
|
457
|
+
...common,
|
|
458
|
+
nodeType: "agent",
|
|
459
|
+
prompt,
|
|
460
|
+
expectedOutput: node.expectedOutput,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
455
463
|
return {
|
|
456
464
|
...common,
|
|
457
465
|
nodeType: "agent",
|
|
458
|
-
prompt
|
|
466
|
+
prompt,
|
|
459
467
|
...(node.expectedOutput !== undefined ? { expectedOutput: node.expectedOutput } : {}),
|
|
460
468
|
...(node.validate !== undefined
|
|
461
469
|
? {
|
|
@@ -464,6 +472,7 @@ function wrapNode(
|
|
|
464
472
|
}
|
|
465
473
|
: {}),
|
|
466
474
|
};
|
|
475
|
+
}
|
|
467
476
|
case "compute":
|
|
468
477
|
return {
|
|
469
478
|
...common,
|
|
@@ -9,6 +9,9 @@ import {
|
|
|
9
9
|
} from "./schema.js";
|
|
10
10
|
import type {
|
|
11
11
|
AgentNodeDefinition,
|
|
12
|
+
AssistantAgentNodeDefinition,
|
|
13
|
+
AssistantMessageOutput,
|
|
14
|
+
SubmittedAgentNodeDefinition,
|
|
12
15
|
ActionNodeDefinition,
|
|
13
16
|
CheckpointNodeDefinition,
|
|
14
17
|
ComputeNodeDefinition,
|
|
@@ -154,11 +157,41 @@ export function isWorkflowDefinition(value: unknown): value is WorkflowDefinitio
|
|
|
154
157
|
);
|
|
155
158
|
}
|
|
156
159
|
|
|
160
|
+
export function assistantMessage(options: { maxChars?: number } = {}): AssistantMessageOutput {
|
|
161
|
+
if (options === null || typeof options !== "object" || Array.isArray(options)) {
|
|
162
|
+
throw new Error("Invalid workflow definition: assistantMessage options must be an object");
|
|
163
|
+
}
|
|
164
|
+
const unknown = Object.keys(options).filter((key) => key !== "maxChars");
|
|
165
|
+
if (unknown.length > 0) {
|
|
166
|
+
throw new Error(
|
|
167
|
+
`Invalid workflow definition: assistantMessage has unknown option ${JSON.stringify(unknown[0])}`,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
if (
|
|
171
|
+
options.maxChars !== undefined &&
|
|
172
|
+
(!Number.isInteger(options.maxChars) || options.maxChars <= 0)
|
|
173
|
+
) {
|
|
174
|
+
throw new Error(
|
|
175
|
+
"Invalid workflow definition: assistantMessage maxChars must be a positive integer",
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
return Object.freeze({
|
|
179
|
+
kind: "assistant-message" as const,
|
|
180
|
+
...(options.maxChars !== undefined ? { maxChars: options.maxChars } : {}),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function agent(
|
|
185
|
+
definition: Omit<SubmittedAgentNodeDefinition, "nodeType">,
|
|
186
|
+
): SubmittedAgentNodeDefinition;
|
|
187
|
+
export function agent(
|
|
188
|
+
definition: Omit<AssistantAgentNodeDefinition, "nodeType">,
|
|
189
|
+
): AssistantAgentNodeDefinition;
|
|
157
190
|
export function agent(definition: Omit<AgentNodeDefinition, "nodeType">): AgentNodeDefinition {
|
|
158
|
-
const node
|
|
159
|
-
nodeType: "agent",
|
|
191
|
+
const node = {
|
|
192
|
+
nodeType: "agent" as const,
|
|
160
193
|
...definition,
|
|
161
|
-
};
|
|
194
|
+
} as AgentNodeDefinition;
|
|
162
195
|
assertValidAgentNode(node);
|
|
163
196
|
return node;
|
|
164
197
|
}
|