@boringos/workflow 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/LICENSE +21 -0
- package/dist/dag.d.ts +3 -0
- package/dist/dag.d.ts.map +1 -0
- package/dist/dag.js +31 -0
- package/dist/dag.js.map +1 -0
- package/dist/engine.d.ts +9 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +129 -0
- package/dist/engine.js.map +1 -0
- package/dist/handler-registry.d.ts +9 -0
- package/dist/handler-registry.d.ts.map +1 -0
- package/dist/handler-registry.js +20 -0
- package/dist/handler-registry.js.map +1 -0
- package/dist/handlers/condition.d.ts +3 -0
- package/dist/handlers/condition.d.ts.map +1 -0
- package/dist/handlers/condition.js +36 -0
- package/dist/handlers/condition.js.map +1 -0
- package/dist/handlers/delay.d.ts +3 -0
- package/dist/handlers/delay.d.ts.map +1 -0
- package/dist/handlers/delay.js +13 -0
- package/dist/handlers/delay.js.map +1 -0
- package/dist/handlers/index.d.ts +5 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +5 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/transform.d.ts +3 -0
- package/dist/handlers/transform.d.ts.map +1 -0
- package/dist/handlers/transform.js +12 -0
- package/dist/handlers/transform.js.map +1 -0
- package/dist/handlers/trigger.d.ts +3 -0
- package/dist/handlers/trigger.d.ts.map +1 -0
- package/dist/handlers/trigger.js +10 -0
- package/dist/handlers/trigger.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/state.d.ts +8 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +31 -0
- package/dist/state.js.map +1 -0
- package/dist/store.d.ts +4 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +64 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +125 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +43 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 BoringOS Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/dag.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.d.ts","sourceRoot":"","sources":["../src/dag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAoB,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,GAAG,CAmChF"}
|
package/dist/dag.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function buildDAG(blocks, edges) {
|
|
2
|
+
const nodes = new Map();
|
|
3
|
+
let startNodeId = null;
|
|
4
|
+
for (const block of blocks) {
|
|
5
|
+
nodes.set(block.id, {
|
|
6
|
+
id: block.id,
|
|
7
|
+
name: block.name,
|
|
8
|
+
type: block.type,
|
|
9
|
+
config: block.config,
|
|
10
|
+
incomingBlockIds: new Set(),
|
|
11
|
+
outgoingEdges: [],
|
|
12
|
+
});
|
|
13
|
+
if (block.type === "trigger") {
|
|
14
|
+
startNodeId = block.id;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const sortedEdges = [...edges].sort((a, b) => a.sortOrder - b.sortOrder);
|
|
18
|
+
for (const edge of sortedEdges) {
|
|
19
|
+
const source = nodes.get(edge.sourceBlockId);
|
|
20
|
+
const target = nodes.get(edge.targetBlockId);
|
|
21
|
+
if (!source || !target)
|
|
22
|
+
continue;
|
|
23
|
+
source.outgoingEdges.push({
|
|
24
|
+
targetBlockId: edge.targetBlockId,
|
|
25
|
+
sourceHandle: edge.sourceHandle,
|
|
26
|
+
});
|
|
27
|
+
target.incomingBlockIds.add(edge.sourceBlockId);
|
|
28
|
+
}
|
|
29
|
+
return { nodes, startNodeId };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=dag.js.map
|
package/dist/dag.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag.js","sourceRoot":"","sources":["../src/dag.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAC,MAAyB,EAAE,KAAuB;IACzE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,IAAI,WAAW,GAAkB,IAAI,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE;YAClB,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,gBAAgB,EAAE,IAAI,GAAG,EAAE;YAC3B,aAAa,EAAE,EAAE;SAClB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IAEzE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;YAAE,SAAS;QAEjC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;YACxB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAChC,CAAC"}
|
package/dist/engine.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WorkflowEngine, WorkflowStore, ServiceAccessor } from "./types.js";
|
|
2
|
+
import type { HandlerRegistry } from "./handler-registry.js";
|
|
3
|
+
export interface WorkflowEngineConfig {
|
|
4
|
+
store: WorkflowStore;
|
|
5
|
+
handlers: HandlerRegistry;
|
|
6
|
+
services: ServiceAccessor;
|
|
7
|
+
}
|
|
8
|
+
export declare function createWorkflowEngine(config: WorkflowEngineConfig): WorkflowEngine;
|
|
9
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAMb,eAAe,EAEhB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CA6HjF"}
|
package/dist/engine.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { buildDAG } from "./dag.js";
|
|
2
|
+
import { createExecutionState, resolveTemplate } from "./state.js";
|
|
3
|
+
import { generateId } from "@boringos/shared";
|
|
4
|
+
export function createWorkflowEngine(config) {
|
|
5
|
+
const { store, handlers, services } = config;
|
|
6
|
+
return {
|
|
7
|
+
async execute(workflowId, trigger) {
|
|
8
|
+
const workflow = await store.get(workflowId);
|
|
9
|
+
if (!workflow)
|
|
10
|
+
throw new Error(`Workflow not found: ${workflowId}`);
|
|
11
|
+
const dag = buildDAG(workflow.blocks, workflow.edges);
|
|
12
|
+
if (!dag.startNodeId)
|
|
13
|
+
throw new Error(`Workflow has no trigger block: ${workflowId}`);
|
|
14
|
+
const state = createExecutionState();
|
|
15
|
+
const blockResults = new Map();
|
|
16
|
+
// Build name→id map for template resolution
|
|
17
|
+
const nameToId = new Map();
|
|
18
|
+
for (const [id, node] of dag.nodes) {
|
|
19
|
+
nameToId.set(node.name, id);
|
|
20
|
+
}
|
|
21
|
+
// Track completed block IDs for dependency checking
|
|
22
|
+
const completed = new Set();
|
|
23
|
+
const failed = new Set();
|
|
24
|
+
// Execute start node
|
|
25
|
+
const startNode = dag.nodes.get(dag.startNodeId);
|
|
26
|
+
const triggerResult = {
|
|
27
|
+
output: trigger?.data ?? {},
|
|
28
|
+
};
|
|
29
|
+
state.set(dag.startNodeId, { status: "completed", output: triggerResult.output, completedAt: new Date() });
|
|
30
|
+
blockResults.set(dag.startNodeId, triggerResult);
|
|
31
|
+
completed.add(dag.startNodeId);
|
|
32
|
+
// BFS walk through the graph
|
|
33
|
+
let frontier = getActivatedBlocks(dag.startNodeId, null, dag);
|
|
34
|
+
while (frontier.length > 0) {
|
|
35
|
+
const nextFrontier = [];
|
|
36
|
+
for (const blockId of frontier) {
|
|
37
|
+
const node = dag.nodes.get(blockId);
|
|
38
|
+
if (!node)
|
|
39
|
+
continue;
|
|
40
|
+
// Check all incoming dependencies are satisfied
|
|
41
|
+
const allDependenciesMet = Array.from(node.incomingBlockIds).every((depId) => completed.has(depId) || failed.has(depId));
|
|
42
|
+
if (!allDependenciesMet) {
|
|
43
|
+
nextFrontier.push(blockId);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
// Skip if any dependency failed
|
|
47
|
+
const anyDepFailed = Array.from(node.incomingBlockIds).some((depId) => failed.has(depId));
|
|
48
|
+
if (anyDepFailed) {
|
|
49
|
+
state.set(blockId, { status: "skipped" });
|
|
50
|
+
completed.add(blockId);
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
// Find handler
|
|
54
|
+
const handler = handlers.get(node.type);
|
|
55
|
+
if (!handler) {
|
|
56
|
+
state.set(blockId, { status: "failed", error: `No handler for block type: ${node.type}` });
|
|
57
|
+
failed.add(blockId);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// Resolve config templates
|
|
61
|
+
const resolvedConfig = {};
|
|
62
|
+
for (const [key, value] of Object.entries(node.config)) {
|
|
63
|
+
resolvedConfig[key] = typeof value === "string"
|
|
64
|
+
? resolveTemplate(value, state, nameToId)
|
|
65
|
+
: value;
|
|
66
|
+
}
|
|
67
|
+
// Execute block
|
|
68
|
+
state.set(blockId, { status: "running", startedAt: new Date() });
|
|
69
|
+
try {
|
|
70
|
+
const ctx = {
|
|
71
|
+
blockId,
|
|
72
|
+
blockName: node.name,
|
|
73
|
+
blockType: node.type,
|
|
74
|
+
config: resolvedConfig,
|
|
75
|
+
workflowRunId: generateId(),
|
|
76
|
+
workflowId,
|
|
77
|
+
tenantId: workflow.tenantId,
|
|
78
|
+
governingAgentId: workflow.governingAgentId,
|
|
79
|
+
workflowType: workflow.type,
|
|
80
|
+
state,
|
|
81
|
+
services,
|
|
82
|
+
};
|
|
83
|
+
const result = await handler.execute(ctx);
|
|
84
|
+
state.set(blockId, { status: "completed", output: result.output, completedAt: new Date() });
|
|
85
|
+
blockResults.set(blockId, result);
|
|
86
|
+
completed.add(blockId);
|
|
87
|
+
// Get next blocks — respecting selectedHandle for branching
|
|
88
|
+
const activated = getActivatedBlocks(blockId, result.selectedHandle ?? null, dag);
|
|
89
|
+
nextFrontier.push(...activated);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
93
|
+
state.set(blockId, { status: "failed", error });
|
|
94
|
+
failed.add(blockId);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
frontier = nextFrontier;
|
|
98
|
+
}
|
|
99
|
+
const hasFailure = failed.size > 0;
|
|
100
|
+
return {
|
|
101
|
+
runId: generateId(),
|
|
102
|
+
status: hasFailure ? "failed" : "completed",
|
|
103
|
+
blockResults,
|
|
104
|
+
error: hasFailure ? `${failed.size} block(s) failed` : undefined,
|
|
105
|
+
};
|
|
106
|
+
},
|
|
107
|
+
async cancel(_runId) {
|
|
108
|
+
// In-process engine doesn't support cancellation of running workflows yet
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function getActivatedBlocks(blockId, selectedHandle, dag) {
|
|
113
|
+
const node = dag.nodes.get(blockId);
|
|
114
|
+
if (!node)
|
|
115
|
+
return [];
|
|
116
|
+
return node.outgoingEdges
|
|
117
|
+
.filter((edge) => {
|
|
118
|
+
// If no handle selection, activate all edges
|
|
119
|
+
if (selectedHandle === null)
|
|
120
|
+
return true;
|
|
121
|
+
// If edge has no handle constraint, activate it
|
|
122
|
+
if (edge.sourceHandle === null)
|
|
123
|
+
return true;
|
|
124
|
+
// Only activate edges matching the selected handle
|
|
125
|
+
return edge.sourceHandle === selectedHandle;
|
|
126
|
+
})
|
|
127
|
+
.map((edge) => edge.targetBlockId);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BlockHandler } from "./types.js";
|
|
2
|
+
export declare function createHandlerRegistry(): HandlerRegistry;
|
|
3
|
+
export interface HandlerRegistry {
|
|
4
|
+
register(handler: BlockHandler): void;
|
|
5
|
+
get(type: string): BlockHandler | undefined;
|
|
6
|
+
has(type: string): boolean;
|
|
7
|
+
list(): BlockHandler[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=handler-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-registry.d.ts","sourceRoot":"","sources":["../src/handler-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAgB,qBAAqB,IAAI,eAAe,CAsBvD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IAC5C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,IAAI,IAAI,YAAY,EAAE,CAAC;CACxB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function createHandlerRegistry() {
|
|
2
|
+
const handlers = new Map();
|
|
3
|
+
return {
|
|
4
|
+
register(handler) {
|
|
5
|
+
for (const type of handler.types) {
|
|
6
|
+
handlers.set(type, handler);
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
get(type) {
|
|
10
|
+
return handlers.get(type);
|
|
11
|
+
},
|
|
12
|
+
has(type) {
|
|
13
|
+
return handlers.has(type);
|
|
14
|
+
},
|
|
15
|
+
list() {
|
|
16
|
+
return Array.from(new Set(handlers.values()));
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=handler-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler-registry.js","sourceRoot":"","sources":["../src/handler-registry.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEjD,OAAO;QACL,QAAQ,CAAC,OAAqB;YAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBACjC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,GAAG,CAAC,IAAY;YACd,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,GAAG,CAAC,IAAY;YACd,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI;YACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../src/handlers/condition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEzF,eAAO,MAAM,gBAAgB,EAAE,YA2C9B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const conditionHandler = {
|
|
2
|
+
types: ["condition"],
|
|
3
|
+
async execute(ctx) {
|
|
4
|
+
// Evaluate a simple condition from config
|
|
5
|
+
// config.field — the field to check from a prior block's output
|
|
6
|
+
// config.operator — "equals", "not_equals", "contains", "truthy"
|
|
7
|
+
// config.value — the value to compare against
|
|
8
|
+
const { field, operator, value } = ctx.config;
|
|
9
|
+
let fieldValue = field;
|
|
10
|
+
// If field looks like a resolved template value, use it directly
|
|
11
|
+
// Otherwise treat it as a literal
|
|
12
|
+
const op = operator ?? "truthy";
|
|
13
|
+
let result = false;
|
|
14
|
+
switch (op) {
|
|
15
|
+
case "equals":
|
|
16
|
+
result = String(fieldValue) === String(value);
|
|
17
|
+
break;
|
|
18
|
+
case "not_equals":
|
|
19
|
+
result = String(fieldValue) !== String(value);
|
|
20
|
+
break;
|
|
21
|
+
case "contains":
|
|
22
|
+
result = String(fieldValue).includes(String(value));
|
|
23
|
+
break;
|
|
24
|
+
case "truthy":
|
|
25
|
+
result = Boolean(fieldValue);
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
result = Boolean(fieldValue);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
output: { result, field: fieldValue, operator: op },
|
|
32
|
+
selectedHandle: result ? "condition-true" : "condition-false",
|
|
33
|
+
};
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=condition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../src/handlers/condition.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,KAAK,EAAE,CAAC,WAAW,CAAC;IAEpB,KAAK,CAAC,OAAO,CAAC,GAAwB;QACpC,0CAA0C;QAC1C,gEAAgE;QAChE,iEAAiE;QACjE,8CAA8C;QAC9C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAItC,CAAC;QAEF,IAAI,UAAU,GAAY,KAAK,CAAC;QAEhC,iEAAiE;QACjE,kCAAkC;QAClC,MAAM,EAAE,GAAG,QAAQ,IAAI,QAAQ,CAAC;QAChC,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,QAAQ;gBACX,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC9C,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC7B,MAAM;YACR;gBACE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;YACnD,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB;SAC9D,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delay.d.ts","sourceRoot":"","sources":["../../src/handlers/delay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEzF,eAAO,MAAM,YAAY,EAAE,YAc1B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const delayHandler = {
|
|
2
|
+
types: ["delay"],
|
|
3
|
+
async execute(ctx) {
|
|
4
|
+
const ms = ctx.config.durationMs ?? (ctx.config.seconds ?? 0) * 1000;
|
|
5
|
+
if (ms > 0) {
|
|
6
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
7
|
+
}
|
|
8
|
+
return {
|
|
9
|
+
output: { delayed: true, durationMs: ms },
|
|
10
|
+
};
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=delay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delay.js","sourceRoot":"","sources":["../../src/handlers/delay.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,KAAK,EAAE,CAAC,OAAO,CAAC;IAEhB,KAAK,CAAC,OAAO,CAAC,GAAwB;QACpC,MAAM,EAAE,GAAI,GAAG,CAAC,MAAM,CAAC,UAAqB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAiB,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAE3F,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO;YACL,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;SAC1C,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/handlers/transform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEzF,eAAO,MAAM,gBAAgB,EAAE,YAW9B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const transformHandler = {
|
|
2
|
+
types: ["transform"],
|
|
3
|
+
async execute(ctx) {
|
|
4
|
+
// config.mappings — key-value pairs where values may contain template references
|
|
5
|
+
// Templates are already resolved by the engine before reaching here
|
|
6
|
+
const mappings = ctx.config.mappings ?? {};
|
|
7
|
+
return {
|
|
8
|
+
output: { ...mappings },
|
|
9
|
+
};
|
|
10
|
+
},
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/handlers/transform.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,KAAK,EAAE,CAAC,WAAW,CAAC;IAEpB,KAAK,CAAC,OAAO,CAAC,GAAwB;QACpC,iFAAiF;QACjF,oEAAoE;QACpE,MAAM,QAAQ,GAAI,GAAG,CAAC,MAAM,CAAC,QAAoC,IAAI,EAAE,CAAC;QACxE,OAAO;YACL,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE;SACxB,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.d.ts","sourceRoot":"","sources":["../../src/handlers/trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAA2C,MAAM,aAAa,CAAC;AAEzF,eAAO,MAAM,cAAc,EAAE,YAS5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../src/handlers/trigger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,KAAK,EAAE,CAAC,SAAS,CAAC;IAElB,KAAK,CAAC,OAAO,CAAC,GAAwB;QACpC,+DAA+D;QAC/D,OAAO;YACL,MAAM,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE;SAC1B,CAAC;IACJ,CAAC;CACF,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type { DAGNode, DAGEdge, DAG, BlockHandler, BlockHandlerContext, BlockHandlerResult, ExecutionState, BlockState, ServiceAccessor, WorkflowDefinition, BlockDefinition, EdgeDefinition, WorkflowStatus, WorkflowStore, CreateWorkflowInput, UpdateWorkflowInput, WorkflowEngine, TriggerPayload, WorkflowRunResult, TriggerType, WorkflowTrigger, } from "./types.js";
|
|
2
|
+
export { WORKFLOW_STATUSES, TRIGGER_TYPES } from "./types.js";
|
|
3
|
+
export { buildDAG } from "./dag.js";
|
|
4
|
+
export { createExecutionState, resolveTemplate } from "./state.js";
|
|
5
|
+
export { createHandlerRegistry } from "./handler-registry.js";
|
|
6
|
+
export type { HandlerRegistry } from "./handler-registry.js";
|
|
7
|
+
export { createWorkflowEngine } from "./engine.js";
|
|
8
|
+
export type { WorkflowEngineConfig } from "./engine.js";
|
|
9
|
+
export { createWorkflowStore } from "./store.js";
|
|
10
|
+
export { triggerHandler, conditionHandler, delayHandler, transformHandler } from "./handlers/index.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,OAAO,EACP,GAAG,EACH,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { WORKFLOW_STATUSES, TRIGGER_TYPES } from "./types.js";
|
|
2
|
+
export { buildDAG } from "./dag.js";
|
|
3
|
+
export { createExecutionState, resolveTemplate } from "./state.js";
|
|
4
|
+
export { createHandlerRegistry } from "./handler-registry.js";
|
|
5
|
+
export { createWorkflowEngine } from "./engine.js";
|
|
6
|
+
export { createWorkflowStore } from "./store.js";
|
|
7
|
+
export { triggerHandler, conditionHandler, delayHandler, transformHandler } from "./handlers/index.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/state.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExecutionState } from "./types.js";
|
|
2
|
+
export declare function createExecutionState(): ExecutionState;
|
|
3
|
+
/**
|
|
4
|
+
* Resolve template references like {{blockName.field}} against execution state.
|
|
5
|
+
* Uses block names (not IDs) for readability in workflow definitions.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveTemplate(template: string, state: ExecutionState, nameToId: Map<string, string>): string;
|
|
8
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,YAAY,CAAC;AAE7D,wBAAgB,oBAAoB,IAAI,cAAc,CAgBrD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC5B,MAAM,CAWR"}
|
package/dist/state.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export function createExecutionState() {
|
|
2
|
+
const blocks = new Map();
|
|
3
|
+
return {
|
|
4
|
+
get(blockId) {
|
|
5
|
+
return blocks.get(blockId);
|
|
6
|
+
},
|
|
7
|
+
set(blockId, state) {
|
|
8
|
+
blocks.set(blockId, state);
|
|
9
|
+
},
|
|
10
|
+
all() {
|
|
11
|
+
return new Map(blocks);
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve template references like {{blockName.field}} against execution state.
|
|
17
|
+
* Uses block names (not IDs) for readability in workflow definitions.
|
|
18
|
+
*/
|
|
19
|
+
export function resolveTemplate(template, state, nameToId) {
|
|
20
|
+
return template.replace(/\{\{(\w+)\.(\w+)\}\}/g, (_match, blockName, field) => {
|
|
21
|
+
const blockId = nameToId.get(blockName);
|
|
22
|
+
if (!blockId)
|
|
23
|
+
return `{{${blockName}.${field}}}`;
|
|
24
|
+
const blockState = state.get(blockId);
|
|
25
|
+
if (!blockState?.output)
|
|
26
|
+
return `{{${blockName}.${field}}}`;
|
|
27
|
+
const value = blockState.output[field];
|
|
28
|
+
return value !== undefined ? String(value) : `{{${blockName}.${field}}}`;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,oBAAoB;IAClC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAE7C,OAAO;QACL,GAAG,CAAC,OAAe;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAED,GAAG,CAAC,OAAe,EAAE,KAAiB;YACpC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,GAAG;YACD,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,KAAqB,EACrB,QAA6B;IAE7B,OAAO,QAAQ,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,MAAM,EAAE,SAAiB,EAAE,KAAa,EAAE,EAAE;QAC5F,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC;QAEjD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,MAAM;YAAE,OAAO,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC;QAE5D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,KAAK,EACV,aAAa,EAMd,MAAM,YAAY,CAAC;AAGpB,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,GAAG,aAAa,CA4DzD"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { eq } from "drizzle-orm";
|
|
2
|
+
import { workflows } from "@boringos/db";
|
|
3
|
+
import { generateId } from "@boringos/shared";
|
|
4
|
+
export function createWorkflowStore(db) {
|
|
5
|
+
function toDefinition(row) {
|
|
6
|
+
return {
|
|
7
|
+
id: row.id,
|
|
8
|
+
tenantId: row.tenantId,
|
|
9
|
+
name: row.name,
|
|
10
|
+
type: row.type,
|
|
11
|
+
status: row.status,
|
|
12
|
+
governingAgentId: row.governingAgentId,
|
|
13
|
+
blocks: (row.blocks ?? []),
|
|
14
|
+
edges: (row.edges ?? []),
|
|
15
|
+
createdAt: row.createdAt,
|
|
16
|
+
updatedAt: row.updatedAt,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
async get(id) {
|
|
21
|
+
const rows = await db.select().from(workflows).where(eq(workflows.id, id)).limit(1);
|
|
22
|
+
return rows[0] ? toDefinition(rows[0]) : null;
|
|
23
|
+
},
|
|
24
|
+
async list(tenantId) {
|
|
25
|
+
const rows = await db.select().from(workflows).where(eq(workflows.tenantId, tenantId));
|
|
26
|
+
return rows.map(toDefinition);
|
|
27
|
+
},
|
|
28
|
+
async create(input) {
|
|
29
|
+
const id = generateId();
|
|
30
|
+
const now = new Date();
|
|
31
|
+
await db.insert(workflows).values({
|
|
32
|
+
id,
|
|
33
|
+
tenantId: input.tenantId,
|
|
34
|
+
name: input.name,
|
|
35
|
+
type: input.type ?? "user",
|
|
36
|
+
governingAgentId: input.governingAgentId,
|
|
37
|
+
blocks: (input.blocks ?? []),
|
|
38
|
+
edges: (input.edges ?? []),
|
|
39
|
+
});
|
|
40
|
+
const rows = await db.select().from(workflows).where(eq(workflows.id, id)).limit(1);
|
|
41
|
+
return toDefinition(rows[0]);
|
|
42
|
+
},
|
|
43
|
+
async update(id, input) {
|
|
44
|
+
const values = { updatedAt: new Date() };
|
|
45
|
+
if (input.name !== undefined)
|
|
46
|
+
values.name = input.name;
|
|
47
|
+
if (input.status !== undefined)
|
|
48
|
+
values.status = input.status;
|
|
49
|
+
if (input.governingAgentId !== undefined)
|
|
50
|
+
values.governingAgentId = input.governingAgentId;
|
|
51
|
+
if (input.blocks !== undefined)
|
|
52
|
+
values.blocks = input.blocks;
|
|
53
|
+
if (input.edges !== undefined)
|
|
54
|
+
values.edges = input.edges;
|
|
55
|
+
await db.update(workflows).set(values).where(eq(workflows.id, id));
|
|
56
|
+
const rows = await db.select().from(workflows).where(eq(workflows.id, id)).limit(1);
|
|
57
|
+
return toDefinition(rows[0]);
|
|
58
|
+
},
|
|
59
|
+
async delete(id) {
|
|
60
|
+
await db.delete(workflows).where(eq(workflows.id, id));
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { Identifiable, TenantScoped, Timestamped } from "@boringos/shared";
|
|
2
|
+
export interface DAGNode {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
type: string;
|
|
6
|
+
config: Record<string, unknown>;
|
|
7
|
+
incomingBlockIds: Set<string>;
|
|
8
|
+
outgoingEdges: DAGEdge[];
|
|
9
|
+
}
|
|
10
|
+
export interface DAGEdge {
|
|
11
|
+
targetBlockId: string;
|
|
12
|
+
sourceHandle: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface DAG {
|
|
15
|
+
nodes: Map<string, DAGNode>;
|
|
16
|
+
startNodeId: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface BlockHandler {
|
|
19
|
+
types: string[];
|
|
20
|
+
execute(ctx: BlockHandlerContext): Promise<BlockHandlerResult>;
|
|
21
|
+
}
|
|
22
|
+
export interface BlockHandlerContext {
|
|
23
|
+
blockId: string;
|
|
24
|
+
blockName: string;
|
|
25
|
+
blockType: string;
|
|
26
|
+
config: Record<string, unknown>;
|
|
27
|
+
workflowRunId: string;
|
|
28
|
+
workflowId: string;
|
|
29
|
+
tenantId: string;
|
|
30
|
+
governingAgentId: string | null;
|
|
31
|
+
workflowType: string;
|
|
32
|
+
state: ExecutionState;
|
|
33
|
+
services: ServiceAccessor;
|
|
34
|
+
}
|
|
35
|
+
export interface BlockHandlerResult {
|
|
36
|
+
output: Record<string, unknown>;
|
|
37
|
+
selectedHandle?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ExecutionState {
|
|
40
|
+
get(blockId: string): BlockState | undefined;
|
|
41
|
+
set(blockId: string, state: BlockState): void;
|
|
42
|
+
all(): Map<string, BlockState>;
|
|
43
|
+
}
|
|
44
|
+
export interface BlockState {
|
|
45
|
+
status: "pending" | "running" | "completed" | "failed" | "skipped";
|
|
46
|
+
output?: Record<string, unknown>;
|
|
47
|
+
error?: string;
|
|
48
|
+
startedAt?: Date;
|
|
49
|
+
completedAt?: Date;
|
|
50
|
+
}
|
|
51
|
+
export interface ServiceAccessor {
|
|
52
|
+
get<T>(key: string): T | undefined;
|
|
53
|
+
has(key: string): boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface WorkflowDefinition extends Identifiable, TenantScoped, Timestamped {
|
|
56
|
+
name: string;
|
|
57
|
+
type: "user" | "system";
|
|
58
|
+
governingAgentId: string | null;
|
|
59
|
+
blocks: BlockDefinition[];
|
|
60
|
+
edges: EdgeDefinition[];
|
|
61
|
+
status: WorkflowStatus;
|
|
62
|
+
}
|
|
63
|
+
export interface BlockDefinition {
|
|
64
|
+
id: string;
|
|
65
|
+
name: string;
|
|
66
|
+
type: string;
|
|
67
|
+
config: Record<string, unknown>;
|
|
68
|
+
position?: {
|
|
69
|
+
x: number;
|
|
70
|
+
y: number;
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export interface EdgeDefinition {
|
|
74
|
+
id: string;
|
|
75
|
+
sourceBlockId: string;
|
|
76
|
+
targetBlockId: string;
|
|
77
|
+
sourceHandle: string | null;
|
|
78
|
+
sortOrder: number;
|
|
79
|
+
}
|
|
80
|
+
export declare const WORKFLOW_STATUSES: readonly ["draft", "active", "paused", "archived"];
|
|
81
|
+
export type WorkflowStatus = (typeof WORKFLOW_STATUSES)[number];
|
|
82
|
+
export interface WorkflowStore {
|
|
83
|
+
get(id: string): Promise<WorkflowDefinition | null>;
|
|
84
|
+
list(tenantId: string): Promise<WorkflowDefinition[]>;
|
|
85
|
+
create(input: CreateWorkflowInput): Promise<WorkflowDefinition>;
|
|
86
|
+
update(id: string, input: UpdateWorkflowInput): Promise<WorkflowDefinition>;
|
|
87
|
+
delete(id: string): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
export interface CreateWorkflowInput {
|
|
90
|
+
tenantId: string;
|
|
91
|
+
name: string;
|
|
92
|
+
type?: "user" | "system";
|
|
93
|
+
governingAgentId?: string;
|
|
94
|
+
blocks?: BlockDefinition[];
|
|
95
|
+
edges?: EdgeDefinition[];
|
|
96
|
+
}
|
|
97
|
+
export interface UpdateWorkflowInput {
|
|
98
|
+
name?: string;
|
|
99
|
+
status?: WorkflowStatus;
|
|
100
|
+
governingAgentId?: string | null;
|
|
101
|
+
blocks?: BlockDefinition[];
|
|
102
|
+
edges?: EdgeDefinition[];
|
|
103
|
+
}
|
|
104
|
+
export interface WorkflowEngine {
|
|
105
|
+
execute(workflowId: string, trigger?: TriggerPayload): Promise<WorkflowRunResult>;
|
|
106
|
+
cancel(runId: string): Promise<void>;
|
|
107
|
+
}
|
|
108
|
+
export interface TriggerPayload {
|
|
109
|
+
type: string;
|
|
110
|
+
data: Record<string, unknown>;
|
|
111
|
+
}
|
|
112
|
+
export interface WorkflowRunResult {
|
|
113
|
+
runId: string;
|
|
114
|
+
status: "completed" | "failed" | "cancelled";
|
|
115
|
+
blockResults: Map<string, BlockHandlerResult>;
|
|
116
|
+
error?: string;
|
|
117
|
+
}
|
|
118
|
+
export declare const TRIGGER_TYPES: readonly ["cron", "webhook", "event"];
|
|
119
|
+
export type TriggerType = (typeof TRIGGER_TYPES)[number];
|
|
120
|
+
export interface WorkflowTrigger {
|
|
121
|
+
type: TriggerType;
|
|
122
|
+
workflowId: string;
|
|
123
|
+
config: Record<string, unknown>;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmGA,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;AAiDpF,gFAAgF;AAEhF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@boringos/workflow",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@boringos/shared": "0.1.0",
|
|
16
|
+
"@boringos/db": "0.1.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^22.0.0",
|
|
20
|
+
"typescript": "^5.7.3"
|
|
21
|
+
},
|
|
22
|
+
"description": "DAG-based workflow engine with typed block handlers",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/BoringOS-dev/boringos.git"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://boringos.dev",
|
|
28
|
+
"author": "BoringOS Contributors",
|
|
29
|
+
"files": [
|
|
30
|
+
"dist",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"keywords": [
|
|
34
|
+
"boringos",
|
|
35
|
+
"agentic",
|
|
36
|
+
"ai-agents",
|
|
37
|
+
"framework"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc",
|
|
41
|
+
"typecheck": "tsc --noEmit"
|
|
42
|
+
}
|
|
43
|
+
}
|