@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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/dist/dag.d.ts +3 -0
  3. package/dist/dag.d.ts.map +1 -0
  4. package/dist/dag.js +31 -0
  5. package/dist/dag.js.map +1 -0
  6. package/dist/engine.d.ts +9 -0
  7. package/dist/engine.d.ts.map +1 -0
  8. package/dist/engine.js +129 -0
  9. package/dist/engine.js.map +1 -0
  10. package/dist/handler-registry.d.ts +9 -0
  11. package/dist/handler-registry.d.ts.map +1 -0
  12. package/dist/handler-registry.js +20 -0
  13. package/dist/handler-registry.js.map +1 -0
  14. package/dist/handlers/condition.d.ts +3 -0
  15. package/dist/handlers/condition.d.ts.map +1 -0
  16. package/dist/handlers/condition.js +36 -0
  17. package/dist/handlers/condition.js.map +1 -0
  18. package/dist/handlers/delay.d.ts +3 -0
  19. package/dist/handlers/delay.d.ts.map +1 -0
  20. package/dist/handlers/delay.js +13 -0
  21. package/dist/handlers/delay.js.map +1 -0
  22. package/dist/handlers/index.d.ts +5 -0
  23. package/dist/handlers/index.d.ts.map +1 -0
  24. package/dist/handlers/index.js +5 -0
  25. package/dist/handlers/index.js.map +1 -0
  26. package/dist/handlers/transform.d.ts +3 -0
  27. package/dist/handlers/transform.d.ts.map +1 -0
  28. package/dist/handlers/transform.js +12 -0
  29. package/dist/handlers/transform.js.map +1 -0
  30. package/dist/handlers/trigger.d.ts +3 -0
  31. package/dist/handlers/trigger.d.ts.map +1 -0
  32. package/dist/handlers/trigger.js +10 -0
  33. package/dist/handlers/trigger.js.map +1 -0
  34. package/dist/index.d.ts +11 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +8 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/state.d.ts +8 -0
  39. package/dist/state.d.ts.map +1 -0
  40. package/dist/state.js +31 -0
  41. package/dist/state.js.map +1 -0
  42. package/dist/store.d.ts +4 -0
  43. package/dist/store.d.ts.map +1 -0
  44. package/dist/store.js +64 -0
  45. package/dist/store.js.map +1 -0
  46. package/dist/types.d.ts +125 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/dist/types.js +4 -0
  49. package/dist/types.js.map +1 -0
  50. 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,3 @@
1
+ import type { DAG, BlockDefinition, EdgeDefinition } from "./types.js";
2
+ export declare function buildDAG(blocks: BlockDefinition[], edges: EdgeDefinition[]): DAG;
3
+ //# 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,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
@@ -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"}
@@ -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,3 @@
1
+ import type { BlockHandler } from "../types.js";
2
+ export declare const conditionHandler: BlockHandler;
3
+ //# sourceMappingURL=condition.d.ts.map
@@ -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,3 @@
1
+ import type { BlockHandler } from "../types.js";
2
+ export declare const delayHandler: BlockHandler;
3
+ //# sourceMappingURL=delay.d.ts.map
@@ -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,5 @@
1
+ export { triggerHandler } from "./trigger.js";
2
+ export { conditionHandler } from "./condition.js";
3
+ export { delayHandler } from "./delay.js";
4
+ export { transformHandler } from "./transform.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ export { triggerHandler } from "./trigger.js";
2
+ export { conditionHandler } from "./condition.js";
3
+ export { delayHandler } from "./delay.js";
4
+ export { transformHandler } from "./transform.js";
5
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ import type { BlockHandler } from "../types.js";
2
+ export declare const transformHandler: BlockHandler;
3
+ //# sourceMappingURL=transform.d.ts.map
@@ -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,3 @@
1
+ import type { BlockHandler } from "../types.js";
2
+ export declare const triggerHandler: BlockHandler;
3
+ //# sourceMappingURL=trigger.d.ts.map
@@ -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,10 @@
1
+ export const triggerHandler = {
2
+ types: ["trigger"],
3
+ async execute(ctx) {
4
+ // Trigger is the entry point — passes through config as output
5
+ return {
6
+ output: { ...ctx.config },
7
+ };
8
+ },
9
+ };
10
+ //# sourceMappingURL=trigger.js.map
@@ -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"}
@@ -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"}
@@ -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"}
@@ -0,0 +1,4 @@
1
+ import type { Db } from "@boringos/db";
2
+ import type { WorkflowStore } from "./types.js";
3
+ export declare function createWorkflowStore(db: Db): WorkflowStore;
4
+ //# sourceMappingURL=store.d.ts.map
@@ -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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"}
@@ -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,4 @@
1
+ export const WORKFLOW_STATUSES = ["draft", "active", "paused", "archived"];
2
+ // ── Workflow triggers ────────────────────────────────────────────────────────
3
+ export const TRIGGER_TYPES = ["cron", "webhook", "event"];
4
+ //# sourceMappingURL=types.js.map
@@ -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
+ }