@devflow-tools/workflow-engine 0.1.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/dist/dag.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ import type { WorkflowStepDef } from "@devflow-tools/sdk";
2
+ /**
3
+ * Topological sort of steps by their depends array.
4
+ * Steps with no dependencies come first. Steps that depend on others come after.
5
+ */
6
+ export declare function topologicalSort(steps: WorkflowStepDef[]): WorkflowStepDef[][];
7
+ /**
8
+ * Execute levels sequentially, but steps within a level in parallel.
9
+ */
10
+ export declare function executeLevels(levels: WorkflowStepDef[][], runStep: (step: WorkflowStepDef) => Promise<void>, onLevelStart?: (level: number) => void): Promise<void>;
11
+ //# sourceMappingURL=dag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../src/dag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,EAAE,CA0C7E;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EAAE,EAAE,EAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,EACjD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GACrC,OAAO,CAAC,IAAI,CAAC,CAMf"}
package/dist/dag.js ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Topological sort of steps by their depends array.
3
+ * Steps with no dependencies come first. Steps that depend on others come after.
4
+ */
5
+ export function topologicalSort(steps) {
6
+ const stepMap = new Map(steps.map((s) => [s.id, s]));
7
+ const inDegree = new Map();
8
+ const adj = new Map();
9
+ for (const step of steps) {
10
+ inDegree.set(step.id, step.depends?.length ?? 0);
11
+ for (const dep of step.depends ?? []) {
12
+ if (!adj.has(dep))
13
+ adj.set(dep, []);
14
+ adj.get(dep).push(step.id);
15
+ }
16
+ }
17
+ // Group by levels (BFS layers)
18
+ const levels = [];
19
+ const queue = [];
20
+ for (const [id, deg] of inDegree) {
21
+ if (deg === 0)
22
+ queue.push(id);
23
+ }
24
+ while (queue.length > 0) {
25
+ const level = [];
26
+ const next = [];
27
+ for (const id of queue) {
28
+ const step = stepMap.get(id);
29
+ if (step)
30
+ level.push(step);
31
+ for (const neighbor of adj.get(id) ?? []) {
32
+ const newDeg = (inDegree.get(neighbor) ?? 1) - 1;
33
+ inDegree.set(neighbor, newDeg);
34
+ if (newDeg === 0)
35
+ next.push(neighbor);
36
+ }
37
+ }
38
+ if (level.length > 0)
39
+ levels.push(level);
40
+ queue.length = 0;
41
+ queue.push(...next);
42
+ }
43
+ return levels;
44
+ }
45
+ /**
46
+ * Execute levels sequentially, but steps within a level in parallel.
47
+ */
48
+ export async function executeLevels(levels, runStep, onLevelStart) {
49
+ for (let i = 0; i < levels.length; i++) {
50
+ onLevelStart?.(i);
51
+ const level = levels[i];
52
+ await Promise.all(level.map((step) => runStep(step)));
53
+ }
54
+ }
55
+ //# sourceMappingURL=dag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dag.js","sourceRoot":"","sources":["../src/dag.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;QACjD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACpC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,+BAA+B;IAC/B,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAsB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3B,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;gBACzC,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC/B,IAAI,MAAM,KAAK,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAA2B,EAC3B,OAAiD,EACjD,YAAsC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QACzB,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { topologicalSort, executeLevels } from "./dag.js";
2
+ export { StepResolver } from "./step-resolver.js";
3
+ export { WorkflowEngine } from "./workflow-engine.js";
4
+ export type { StepHandler, StepContext, ResolvedStep, StepState, RunState } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { topologicalSort, executeLevels } from "./dag.js";
2
+ export { StepResolver } from "./step-resolver.js";
3
+ export { WorkflowEngine } from "./workflow-engine.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { StepHandler } from "./types.js";
2
+ export declare class StepResolver {
3
+ private registry;
4
+ register(id: string, handler: StepHandler): void;
5
+ resolve(runRef: string): StepHandler | undefined;
6
+ has(runRef: string): boolean;
7
+ list(): string[];
8
+ }
9
+ //# sourceMappingURL=step-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-resolver.d.ts","sourceRoot":"","sources":["../src/step-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAkC;IAElD,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAIhD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI5B,IAAI,IAAI,MAAM,EAAE;CAGjB"}
@@ -0,0 +1,16 @@
1
+ export class StepResolver {
2
+ registry = new Map();
3
+ register(id, handler) {
4
+ this.registry.set(id, handler);
5
+ }
6
+ resolve(runRef) {
7
+ return this.registry.get(runRef);
8
+ }
9
+ has(runRef) {
10
+ return this.registry.has(runRef);
11
+ }
12
+ list() {
13
+ return Array.from(this.registry.keys());
14
+ }
15
+ }
16
+ //# sourceMappingURL=step-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-resolver.js","sourceRoot":"","sources":["../src/step-resolver.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IACf,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAElD,QAAQ,CAAC,EAAU,EAAE,OAAoB;QACvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { StepHandler } from "../types.js";
2
+ export declare const analyzeHandler: StepHandler;
3
+ export declare const retrieveHandler: StepHandler;
4
+ export declare const planHandler: StepHandler;
5
+ export declare const executeHandler: StepHandler;
6
+ export declare const verifyHandler: StepHandler;
7
+ export declare const commitHandler: StepHandler;
8
+ export declare const BUILTIN_STEPS: Record<string, StepHandler>;
9
+ //# sourceMappingURL=builtin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.d.ts","sourceRoot":"","sources":["../../src/steps/builtin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C,eAAO,MAAM,cAAc,EAAE,WAY5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,WAU7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,WAezB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,WAU5B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAW3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAS3B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAOrD,CAAC"}
@@ -0,0 +1,85 @@
1
+ function sleep(ms) {
2
+ return new Promise((resolve) => setTimeout(resolve, ms));
3
+ }
4
+ export const analyzeHandler = {
5
+ async run(input, _ctx) {
6
+ const query = input.query ?? input.description ?? "";
7
+ const keywords = query.split(/\s+/).filter(Boolean);
8
+ await sleep(50);
9
+ return {
10
+ intent: keywords.length > 0 ? "feature" : "unknown",
11
+ domain: "general",
12
+ keywords,
13
+ summary: query,
14
+ };
15
+ },
16
+ };
17
+ export const retrieveHandler = {
18
+ async run(input, ctx) {
19
+ const keywords = input.keywords ?? [];
20
+ const results = [];
21
+ for (const kw of keywords.slice(0, 5)) {
22
+ results.push(`retrieved context for: ${kw}`);
23
+ }
24
+ await sleep(50);
25
+ return { files: results, count: results.length };
26
+ },
27
+ };
28
+ export const planHandler = {
29
+ async run(input, _ctx) {
30
+ const intent = input.intent ?? "feature";
31
+ const summary = input.summary ?? "";
32
+ await sleep(50);
33
+ return {
34
+ plan: [
35
+ `1. Analyze current state for: ${summary}`,
36
+ `2. Implement changes for: ${intent}`,
37
+ "3. Verify correctness",
38
+ "4. Commit changes",
39
+ ],
40
+ intent,
41
+ };
42
+ },
43
+ };
44
+ export const executeHandler = {
45
+ async run(input, _ctx) {
46
+ const plan = input.plan ?? [];
47
+ await sleep(100);
48
+ return {
49
+ changes: plan.map((step, i) => ({ step: i + 1, description: step, status: "done" })),
50
+ totalChanges: plan.length,
51
+ valid: true,
52
+ };
53
+ },
54
+ };
55
+ export const verifyHandler = {
56
+ async run(input, _ctx) {
57
+ const changes = input.changes ?? [];
58
+ await sleep(50);
59
+ return {
60
+ verified: changes.length,
61
+ passed: changes.length,
62
+ failed: 0,
63
+ valid: true,
64
+ };
65
+ },
66
+ };
67
+ export const commitHandler = {
68
+ async run(input, _ctx) {
69
+ const summary = input.summary ?? "Apply changes";
70
+ const verified = input.verified ?? 0;
71
+ return {
72
+ message: `feat: ${summary}\n\nVerified ${verified} changes.`,
73
+ ready: true,
74
+ };
75
+ },
76
+ };
77
+ export const BUILTIN_STEPS = {
78
+ "builtin:analyze": analyzeHandler,
79
+ "builtin:retrieve": retrieveHandler,
80
+ "builtin:plan": planHandler,
81
+ "builtin:execute": executeHandler,
82
+ "builtin:verify": verifyHandler,
83
+ "builtin:commit": commitHandler,
84
+ };
85
+ //# sourceMappingURL=builtin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin.js","sourceRoot":"","sources":["../../src/steps/builtin.ts"],"names":[],"mappings":"AAEA,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI;QACnB,MAAM,KAAK,GAAI,KAAK,CAAC,KAAgB,IAAK,KAAK,CAAC,WAAsB,IAAI,EAAE,CAAC;QAC7E,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YACnD,MAAM,EAAE,SAAS;YACjB,QAAQ;YACR,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG;QAClB,MAAM,QAAQ,GAAI,KAAK,CAAC,QAAqB,IAAI,EAAE,CAAC;QACpD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACnD,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAgB;IACtC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI;QACnB,MAAM,MAAM,GAAI,KAAK,CAAC,MAAiB,IAAI,SAAS,CAAC;QACrD,MAAM,OAAO,GAAI,KAAK,CAAC,OAAkB,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;YACL,IAAI,EAAE;gBACJ,iCAAiC,OAAO,EAAE;gBAC1C,6BAA6B,MAAM,EAAE;gBACrC,uBAAuB;gBACvB,mBAAmB;aACpB;YACD,MAAM;SACP,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAgB;IACzC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI;QACnB,MAAM,IAAI,GAAI,KAAK,CAAC,IAAiB,IAAI,EAAE,CAAC;QAC5C,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QACjB,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACpF,YAAY,EAAE,IAAI,CAAC,MAAM;YACzB,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI;QACnB,MAAM,OAAO,GAAI,KAAK,CAAC,OAAwD,IAAI,EAAE,CAAC;QACtF,MAAM,KAAK,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;YACL,QAAQ,EAAE,OAAO,CAAC,MAAM;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,CAAC;YACT,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAgB;IACxC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI;QACnB,MAAM,OAAO,GAAI,KAAK,CAAC,OAAkB,IAAI,eAAe,CAAC;QAC7D,MAAM,QAAQ,GAAI,KAAK,CAAC,QAAmB,IAAI,CAAC,CAAC;QACjD,OAAO;YACL,OAAO,EAAE,SAAS,OAAO,gBAAgB,QAAQ,WAAW;YAC5D,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAgC;IACxD,iBAAiB,EAAE,cAAc;IACjC,kBAAkB,EAAE,eAAe;IACnC,cAAc,EAAE,WAAW;IAC3B,iBAAiB,EAAE,cAAc;IACjC,gBAAgB,EAAE,aAAa;IAC/B,gBAAgB,EAAE,aAAa;CAChC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { WorkflowStepDef } from "@devflow-tools/sdk";
2
+ export interface StepHandler {
3
+ run(input: Record<string, unknown>, ctx: StepContext): Promise<Record<string, unknown>>;
4
+ inputSchema?: Record<string, unknown>;
5
+ outputSchema?: Record<string, unknown>;
6
+ }
7
+ export interface StepContext {
8
+ sessionId: string;
9
+ projectRoot: string;
10
+ context?: unknown;
11
+ memory?: unknown;
12
+ graph?: unknown;
13
+ }
14
+ export interface ResolvedStep {
15
+ def: WorkflowStepDef;
16
+ handler?: StepHandler;
17
+ }
18
+ export interface StepState {
19
+ stepId: string;
20
+ status: "pending" | "running" | "success" | "failed" | "skipped" | "awaiting_approval";
21
+ input?: Record<string, unknown>;
22
+ output?: Record<string, unknown>;
23
+ error?: string;
24
+ startedAt?: number;
25
+ finishedAt?: number;
26
+ }
27
+ export interface RunState {
28
+ runId: string;
29
+ workflowName: string;
30
+ status: "running" | "completed" | "failed" | "canceled";
31
+ steps: StepState[];
32
+ startedAt: number;
33
+ finishedAt?: number;
34
+ }
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,eAAe,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,mBAAmB,CAAC;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACxD,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import type { WorkflowDefinition, WorkflowMeta, WorkflowRun, WorkflowRunResult, StepEvent, IDataProvider } from "@devflow-tools/sdk";
2
+ import type { StepHandler } from "./types.js";
3
+ export declare class WorkflowEngine {
4
+ private definitions;
5
+ private runs;
6
+ private resolver;
7
+ private eventListeners;
8
+ private data?;
9
+ constructor(data?: IDataProvider);
10
+ register(definition: WorkflowDefinition): void;
11
+ registerStepHandler(id: string, handler: StepHandler): void;
12
+ list(): Promise<WorkflowMeta[]>;
13
+ run(name: string, input: Record<string, unknown>): Promise<WorkflowRunResult>;
14
+ private executeSimple;
15
+ private executeStateful;
16
+ approve(runId: string, stepId: string): Promise<void>;
17
+ reject(runId: string, stepId: string, reason: string): Promise<void>;
18
+ private maybeCompleteRun;
19
+ getRun(runId: string): WorkflowRun | undefined;
20
+ listRuns(): Promise<WorkflowRun[]>;
21
+ onEvent(runId: string, listener: (event: StepEvent) => void): void;
22
+ private emit;
23
+ private registerDefaults;
24
+ }
25
+ //# sourceMappingURL=workflow-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-engine.d.ts","sourceRoot":"","sources":["../src/workflow-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAElB,YAAY,EACZ,WAAW,EACX,iBAAiB,EAEjB,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAI5B,OAAO,KAAK,EAAE,WAAW,EAAoC,MAAM,YAAY,CAAC;AAEhF,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,IAAI,CAA+B;IAC3C,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,cAAc,CAAwD;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAgB;gBAEjB,IAAI,CAAC,EAAE,aAAa;IAUhC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAI9C,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI;IAIrD,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAW/B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAgIrE,aAAa;YAeb,eAAe;IAqCvB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB1E,OAAO,CAAC,gBAAgB;IAaxB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAqBxC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAiBxC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI;IAKlE,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,gBAAgB;CA4CzB"}
@@ -0,0 +1,329 @@
1
+ import { topologicalSort, executeLevels } from "./dag.js";
2
+ import { StepResolver } from "./step-resolver.js";
3
+ import { BUILTIN_STEPS } from "./steps/builtin.js";
4
+ export class WorkflowEngine {
5
+ definitions = new Map();
6
+ runs = new Map();
7
+ resolver = new StepResolver();
8
+ eventListeners = new Map();
9
+ data;
10
+ constructor(data) {
11
+ this.data = data;
12
+ for (const [id, handler] of Object.entries(BUILTIN_STEPS)) {
13
+ this.resolver.register(id, handler);
14
+ }
15
+ this.registerDefaults();
16
+ }
17
+ // --- Registration ---
18
+ register(definition) {
19
+ this.definitions.set(definition.name, definition);
20
+ }
21
+ registerStepHandler(id, handler) {
22
+ this.resolver.register(id, handler);
23
+ }
24
+ async list() {
25
+ return Array.from(this.definitions.values()).map((d) => ({
26
+ name: d.name,
27
+ description: d.description,
28
+ version: d.version,
29
+ stepCount: d.steps.length,
30
+ }));
31
+ }
32
+ // --- Running ---
33
+ async run(name, input) {
34
+ const def = this.definitions.get(name);
35
+ if (!def)
36
+ throw new Error(`Workflow "${name}" not registered`);
37
+ const runId = `run:${Date.now()}:${Math.random().toString(36).slice(2, 7)}`;
38
+ const startedAt = Date.now();
39
+ // Create initial step states
40
+ const stepStates = new Map();
41
+ for (const step of def.steps) {
42
+ stepStates.set(step.id, {
43
+ stepId: step.id,
44
+ status: "pending",
45
+ });
46
+ }
47
+ const runState = {
48
+ runId,
49
+ workflowName: name,
50
+ status: "running",
51
+ steps: Array.from(stepStates.values()),
52
+ startedAt,
53
+ };
54
+ this.runs.set(runId, runState);
55
+ // Build a map of step outputs for variable substitution
56
+ const outputs = new Map();
57
+ const levels = topologicalSort(def.steps);
58
+ try {
59
+ await executeLevels(levels, async (stepDef) => {
60
+ const state = stepStates.get(stepDef.id);
61
+ state.status = "running";
62
+ state.startedAt = Date.now();
63
+ state.input = resolveInputs(stepDef.inputs ?? {}, outputs, input);
64
+ this.emit(runId, { type: "step-start", stepId: stepDef.id, time: new Date().toISOString() });
65
+ try {
66
+ let output;
67
+ switch (stepDef.type) {
68
+ case "manual":
69
+ // Manual steps wait for approve()
70
+ state.status = "awaiting_approval";
71
+ // Will be resolved by approve() method
72
+ break;
73
+ case "stateful":
74
+ output = await this.executeStateful(stepDef, state, outputs, input);
75
+ break;
76
+ case "simple":
77
+ case "llm":
78
+ default:
79
+ output = await this.executeSimple(stepDef, state);
80
+ break;
81
+ }
82
+ if (output) {
83
+ outputs.set(stepDef.id, output);
84
+ state.output = output;
85
+ state.status = "success";
86
+ state.finishedAt = Date.now();
87
+ }
88
+ this.emit(runId, {
89
+ type: "step-done",
90
+ stepId: stepDef.id,
91
+ duration: (state.finishedAt ?? Date.now()) - (state.startedAt ?? Date.now()),
92
+ output,
93
+ });
94
+ }
95
+ catch (err) {
96
+ state.status = "failed";
97
+ state.error = err.message;
98
+ state.finishedAt = Date.now();
99
+ this.emit(runId, { type: "step-error", stepId: stepDef.id, error: state.error });
100
+ }
101
+ });
102
+ }
103
+ catch {
104
+ runState.status = "failed";
105
+ runState.finishedAt = Date.now();
106
+ return { runId, status: "failed", duration: runState.finishedAt - startedAt };
107
+ }
108
+ // Check if any manual steps are awaiting approval
109
+ const hasAwaitingApproval = stepStates.has(Array.from(stepStates.values()).find((s) => s.status === "awaiting_approval")?.stepId ?? "_none");
110
+ // Wait — re-check correctly
111
+ const awaiting = Array.from(stepStates.values()).some((s) => s.status === "awaiting_approval");
112
+ if (!awaiting) {
113
+ const allSuccess = Array.from(stepStates.values()).every((s) => s.status === "success" || s.status === "skipped");
114
+ runState.status = allSuccess ? "completed" : "failed";
115
+ }
116
+ else {
117
+ runState.status = "running"; // Stay running until manual steps are approved
118
+ }
119
+ runState.finishedAt = runState.status !== "running" ? Date.now() : undefined;
120
+ runState.steps = Array.from(stepStates.values());
121
+ // Persist to data provider if available
122
+ if (this.data) {
123
+ try {
124
+ await this.data.sqlExecute(`INSERT OR REPLACE INTO devflow_workflow_runs (run_id, type, status, input, steps, started_at, finished_at)
125
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [
126
+ runId, name, runState.status,
127
+ JSON.stringify(input),
128
+ JSON.stringify(runState.steps),
129
+ startedAt,
130
+ runState.finishedAt ?? null,
131
+ ]);
132
+ }
133
+ catch {
134
+ // Persistence is best-effort
135
+ }
136
+ }
137
+ return {
138
+ runId,
139
+ status: runState.status,
140
+ duration: (runState.finishedAt ?? Date.now()) - startedAt,
141
+ };
142
+ }
143
+ async executeSimple(step, state) {
144
+ const handler = step.run ? this.resolver.resolve(step.run) : undefined;
145
+ if (handler) {
146
+ return await handler.run(state.input ?? {}, {
147
+ sessionId: "default",
148
+ projectRoot: ".",
149
+ });
150
+ }
151
+ // No handler — return empty success
152
+ return { ok: true };
153
+ }
154
+ async executeStateful(step, state, _outputs, _input) {
155
+ // Stateful steps go through generate → validate → (retry | confirm) → done
156
+ const maxRetries = step.retry ?? 3;
157
+ let attempts = 0;
158
+ let lastOutput = {};
159
+ while (attempts < maxRetries) {
160
+ // Generate
161
+ const handler = step.run ? this.resolver.resolve(step.run) : undefined;
162
+ if (handler) {
163
+ lastOutput = await handler.run(state.input ?? {}, {
164
+ sessionId: "default",
165
+ projectRoot: ".",
166
+ });
167
+ }
168
+ // Validate — default to pass if no output validator
169
+ const isValid = lastOutput?.valid !== false;
170
+ if (isValid) {
171
+ return lastOutput;
172
+ }
173
+ attempts++;
174
+ }
175
+ // All retries exhausted — return best effort
176
+ return { ...lastOutput, validated: false, attempts };
177
+ }
178
+ // --- Manual Step Control ---
179
+ async approve(runId, stepId) {
180
+ const run = this.runs.get(runId);
181
+ if (!run)
182
+ throw new Error(`Run "${runId}" not found`);
183
+ const step = run.steps.find((s) => s.stepId === stepId);
184
+ if (!step)
185
+ throw new Error(`Step "${stepId}" not found in run "${runId}"`);
186
+ if (step.status !== "awaiting_approval") {
187
+ throw new Error(`Step "${stepId}" is not awaiting approval (status: ${step.status})`);
188
+ }
189
+ step.status = "success";
190
+ step.finishedAt = Date.now();
191
+ // Check if all steps complete
192
+ this.maybeCompleteRun(run);
193
+ }
194
+ async reject(runId, stepId, reason) {
195
+ const run = this.runs.get(runId);
196
+ if (!run)
197
+ throw new Error(`Run "${runId}" not found`);
198
+ const step = run.steps.find((s) => s.stepId === stepId);
199
+ if (!step)
200
+ throw new Error(`Step "${stepId}" not found in run "${runId}"`);
201
+ if (step.status !== "awaiting_approval") {
202
+ throw new Error(`Step "${stepId}" is not awaiting approval (status: ${step.status})`);
203
+ }
204
+ step.status = "failed";
205
+ step.error = reason;
206
+ step.finishedAt = Date.now();
207
+ run.status = "failed";
208
+ run.finishedAt = Date.now();
209
+ }
210
+ maybeCompleteRun(run) {
211
+ const allDone = run.steps.every((s) => s.status === "success" || s.status === "failed" || s.status === "skipped");
212
+ if (allDone) {
213
+ const allSuccess = run.steps.every((s) => s.status === "success" || s.status === "skipped");
214
+ run.status = allSuccess ? "completed" : "failed";
215
+ run.finishedAt = Date.now();
216
+ }
217
+ }
218
+ // --- Queries ---
219
+ getRun(runId) {
220
+ const run = this.runs.get(runId);
221
+ if (!run)
222
+ return undefined;
223
+ return {
224
+ runId: run.runId,
225
+ type: run.workflowName,
226
+ status: run.status,
227
+ startedAt: run.startedAt,
228
+ finishedAt: run.finishedAt,
229
+ steps: run.steps.map((s) => ({
230
+ stepId: s.stepId,
231
+ status: s.status,
232
+ input: s.input,
233
+ output: s.output,
234
+ duration: s.finishedAt && s.startedAt ? s.finishedAt - s.startedAt : undefined,
235
+ error: s.error,
236
+ })),
237
+ };
238
+ }
239
+ async listRuns() {
240
+ return Array.from(this.runs.values()).map((r) => ({
241
+ runId: r.runId,
242
+ type: r.workflowName,
243
+ status: r.status,
244
+ startedAt: r.startedAt,
245
+ finishedAt: r.finishedAt,
246
+ steps: r.steps.map((s) => ({
247
+ stepId: s.stepId,
248
+ status: s.status,
249
+ error: s.error,
250
+ })),
251
+ }));
252
+ }
253
+ // --- Events (SSE support) ---
254
+ onEvent(runId, listener) {
255
+ if (!this.eventListeners.has(runId))
256
+ this.eventListeners.set(runId, []);
257
+ this.eventListeners.get(runId).push(listener);
258
+ }
259
+ emit(runId, event) {
260
+ const listeners = this.eventListeners.get(runId) ?? [];
261
+ for (const fn of listeners)
262
+ fn(event);
263
+ }
264
+ registerDefaults() {
265
+ this.register({
266
+ name: "bugfix",
267
+ description: "Standard bug fix workflow: analyze → plan → execute → verify → commit",
268
+ version: "1.0.0",
269
+ steps: [
270
+ { id: "analyze", description: "Analyze bug description", type: "simple", run: "builtin:analyze", timeout: 30000 },
271
+ { id: "retrieve", description: "Retrieve relevant context", type: "simple", run: "builtin:retrieve", depends: ["analyze"], timeout: 30000 },
272
+ { id: "plan", description: "Generate fix plan", type: "simple", run: "builtin:plan", depends: ["retrieve"], timeout: 30000 },
273
+ { id: "execute", description: "Execute fix", type: "stateful", run: "builtin:execute", depends: ["plan"], retry: 3, timeout: 120000 },
274
+ { id: "verify", description: "Verify fix", type: "simple", run: "builtin:verify", depends: ["execute"], timeout: 60000 },
275
+ { id: "commit", description: "Generate commit message", type: "manual", run: "builtin:commit", depends: ["verify"], timeout: 30000 },
276
+ ],
277
+ triggers: [{ type: "mcp", tool: "run_workflow" }, { type: "cli", command: "bugfix" }],
278
+ });
279
+ this.register({
280
+ name: "feature",
281
+ description: "Feature development workflow",
282
+ version: "1.0.0",
283
+ steps: [
284
+ { id: "analyze", description: "Analyze feature requirements", type: "simple", run: "builtin:analyze", timeout: 30000 },
285
+ { id: "retrieve", description: "Retrieve context", type: "simple", run: "builtin:retrieve", depends: ["analyze"], timeout: 30000 },
286
+ { id: "plan", description: "Generate implementation plan", type: "simple", run: "builtin:plan", depends: ["retrieve"], timeout: 30000 },
287
+ { id: "execute", description: "Implement feature", type: "stateful", run: "builtin:execute", depends: ["plan"], retry: 3, timeout: 300000 },
288
+ { id: "verify", description: "Verify implementation", type: "simple", run: "builtin:verify", depends: ["execute"], timeout: 60000 },
289
+ { id: "commit", description: "Generate commit message", type: "manual", run: "builtin:commit", depends: ["verify"], timeout: 30000 },
290
+ ],
291
+ triggers: [{ type: "mcp", tool: "run_workflow" }, { type: "cli", command: "feature" }],
292
+ });
293
+ this.register({
294
+ name: "review",
295
+ description: "Code review workflow",
296
+ version: "1.0.0",
297
+ steps: [
298
+ { id: "analyze", description: "Analyze review scope", type: "simple", run: "builtin:analyze", timeout: 30000 },
299
+ { id: "plan", description: "Generate review checklist", type: "simple", run: "builtin:plan", depends: ["analyze"], timeout: 30000 },
300
+ { id: "verify", description: "Run review checks", type: "simple", run: "builtin:verify", depends: ["plan"], timeout: 60000 },
301
+ { id: "commit", description: "Post review summary", type: "manual", run: "builtin:commit", depends: ["verify"], timeout: 30000 },
302
+ ],
303
+ triggers: [{ type: "mcp", tool: "run_workflow" }, { type: "cli", command: "review" }],
304
+ });
305
+ }
306
+ }
307
+ /**
308
+ * Resolve ${variable} references in input values.
309
+ * ${trigger.X} comes from the top-level input.
310
+ * ${stepId.field} comes from previous step outputs.
311
+ */
312
+ function resolveInputs(inputs, outputs, triggerInput) {
313
+ const resolved = {};
314
+ for (const [key, value] of Object.entries(inputs)) {
315
+ resolved[key] = value.replace(/\$\{([^}]+)\}/g, (_match, path) => {
316
+ const parts = path.split(".");
317
+ if (parts[0] === "trigger") {
318
+ return String(triggerInput[parts.slice(1).join(".")] ?? "");
319
+ }
320
+ const stepOutput = outputs.get(parts[0]);
321
+ if (stepOutput && parts.length > 1) {
322
+ return String(stepOutput[parts.slice(1).join(".")] ?? "");
323
+ }
324
+ return String(stepOutput ?? "");
325
+ });
326
+ }
327
+ return resolved;
328
+ }
329
+ //# sourceMappingURL=workflow-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-engine.js","sourceRoot":"","sources":["../src/workflow-engine.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@devflow-tools/workflow-engine",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/index.js",
10
+ "types": "./dist/index.d.ts"
11
+ }
12
+ },
13
+ "scripts": {
14
+ "build": "tsc -b",
15
+ "test": "cgnode ../../node_modules/.bin/vitest run",
16
+ "typecheck": "tsc --noEmit",
17
+ "clean": "rm -rf dist"
18
+ },
19
+ "dependencies": {
20
+ "@devflow-tools/sdk": "*"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0",
24
+ "vitest": "^2.0.0"
25
+ },
26
+ "files": [
27
+ "dist"
28
+ ],
29
+ "gitHead": "4cede97fc7fc673f929427fac169acab100ca8ed"
30
+ }