@cogitator-ai/workflows 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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/builder.d.ts +39 -0
  4. package/dist/builder.d.ts.map +1 -0
  5. package/dist/builder.js +224 -0
  6. package/dist/builder.js.map +1 -0
  7. package/dist/checkpoint.d.ts +33 -0
  8. package/dist/checkpoint.d.ts.map +1 -0
  9. package/dist/checkpoint.js +108 -0
  10. package/dist/checkpoint.js.map +1 -0
  11. package/dist/executor.d.ts +24 -0
  12. package/dist/executor.d.ts.map +1 -0
  13. package/dist/executor.js +207 -0
  14. package/dist/executor.js.map +1 -0
  15. package/dist/human/approval-store.d.ts +95 -0
  16. package/dist/human/approval-store.d.ts.map +1 -0
  17. package/dist/human/approval-store.js +377 -0
  18. package/dist/human/approval-store.js.map +1 -0
  19. package/dist/human/human-node.d.ts +104 -0
  20. package/dist/human/human-node.d.ts.map +1 -0
  21. package/dist/human/human-node.js +342 -0
  22. package/dist/human/human-node.js.map +1 -0
  23. package/dist/human/index.d.ts +17 -0
  24. package/dist/human/index.d.ts.map +1 -0
  25. package/dist/human/index.js +17 -0
  26. package/dist/human/index.js.map +1 -0
  27. package/dist/human/notifiers.d.ts +85 -0
  28. package/dist/human/notifiers.d.ts.map +1 -0
  29. package/dist/human/notifiers.js +289 -0
  30. package/dist/human/notifiers.js.map +1 -0
  31. package/dist/index.d.ts +32 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +19 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/manager/index.d.ts +19 -0
  36. package/dist/manager/index.d.ts.map +1 -0
  37. package/dist/manager/index.js +17 -0
  38. package/dist/manager/index.js.map +1 -0
  39. package/dist/manager/run-store.d.ts +78 -0
  40. package/dist/manager/run-store.d.ts.map +1 -0
  41. package/dist/manager/run-store.js +390 -0
  42. package/dist/manager/run-store.js.map +1 -0
  43. package/dist/manager/scheduler.d.ts +159 -0
  44. package/dist/manager/scheduler.d.ts.map +1 -0
  45. package/dist/manager/scheduler.js +355 -0
  46. package/dist/manager/scheduler.js.map +1 -0
  47. package/dist/manager/workflow-manager.d.ts +114 -0
  48. package/dist/manager/workflow-manager.d.ts.map +1 -0
  49. package/dist/manager/workflow-manager.js +460 -0
  50. package/dist/manager/workflow-manager.js.map +1 -0
  51. package/dist/nodes/agent.d.ts +24 -0
  52. package/dist/nodes/agent.d.ts.map +1 -0
  53. package/dist/nodes/agent.js +37 -0
  54. package/dist/nodes/agent.js.map +1 -0
  55. package/dist/nodes/base.d.ts +12 -0
  56. package/dist/nodes/base.d.ts.map +1 -0
  57. package/dist/nodes/base.js +5 -0
  58. package/dist/nodes/base.js.map +1 -0
  59. package/dist/nodes/function.d.ts +27 -0
  60. package/dist/nodes/function.d.ts.map +1 -0
  61. package/dist/nodes/function.js +29 -0
  62. package/dist/nodes/function.js.map +1 -0
  63. package/dist/nodes/index.d.ts +8 -0
  64. package/dist/nodes/index.d.ts.map +1 -0
  65. package/dist/nodes/index.js +8 -0
  66. package/dist/nodes/index.js.map +1 -0
  67. package/dist/nodes/tool.d.ts +19 -0
  68. package/dist/nodes/tool.d.ts.map +1 -0
  69. package/dist/nodes/tool.js +26 -0
  70. package/dist/nodes/tool.js.map +1 -0
  71. package/dist/observability/exporters.d.ts +93 -0
  72. package/dist/observability/exporters.d.ts.map +1 -0
  73. package/dist/observability/exporters.js +330 -0
  74. package/dist/observability/exporters.js.map +1 -0
  75. package/dist/observability/index.d.ts +17 -0
  76. package/dist/observability/index.d.ts.map +1 -0
  77. package/dist/observability/index.js +17 -0
  78. package/dist/observability/index.js.map +1 -0
  79. package/dist/observability/metrics.d.ts +114 -0
  80. package/dist/observability/metrics.d.ts.map +1 -0
  81. package/dist/observability/metrics.js +435 -0
  82. package/dist/observability/metrics.js.map +1 -0
  83. package/dist/observability/span-attributes.d.ts +95 -0
  84. package/dist/observability/span-attributes.d.ts.map +1 -0
  85. package/dist/observability/span-attributes.js +142 -0
  86. package/dist/observability/span-attributes.js.map +1 -0
  87. package/dist/observability/tracer.d.ts +110 -0
  88. package/dist/observability/tracer.d.ts.map +1 -0
  89. package/dist/observability/tracer.js +409 -0
  90. package/dist/observability/tracer.js.map +1 -0
  91. package/dist/patterns/index.d.ts +15 -0
  92. package/dist/patterns/index.d.ts.map +1 -0
  93. package/dist/patterns/index.js +15 -0
  94. package/dist/patterns/index.js.map +1 -0
  95. package/dist/patterns/map-reduce.d.ts +223 -0
  96. package/dist/patterns/map-reduce.d.ts.map +1 -0
  97. package/dist/patterns/map-reduce.js +378 -0
  98. package/dist/patterns/map-reduce.js.map +1 -0
  99. package/dist/saga/circuit-breaker.d.ts +153 -0
  100. package/dist/saga/circuit-breaker.d.ts.map +1 -0
  101. package/dist/saga/circuit-breaker.js +306 -0
  102. package/dist/saga/circuit-breaker.js.map +1 -0
  103. package/dist/saga/compensation.d.ts +134 -0
  104. package/dist/saga/compensation.d.ts.map +1 -0
  105. package/dist/saga/compensation.js +240 -0
  106. package/dist/saga/compensation.js.map +1 -0
  107. package/dist/saga/dead-letter.d.ts +113 -0
  108. package/dist/saga/dead-letter.d.ts.map +1 -0
  109. package/dist/saga/dead-letter.js +307 -0
  110. package/dist/saga/dead-letter.js.map +1 -0
  111. package/dist/saga/idempotency.d.ts +95 -0
  112. package/dist/saga/idempotency.d.ts.map +1 -0
  113. package/dist/saga/idempotency.js +266 -0
  114. package/dist/saga/idempotency.js.map +1 -0
  115. package/dist/saga/index.d.ts +16 -0
  116. package/dist/saga/index.d.ts.map +1 -0
  117. package/dist/saga/index.js +16 -0
  118. package/dist/saga/index.js.map +1 -0
  119. package/dist/saga/retry.d.ts +59 -0
  120. package/dist/saga/retry.d.ts.map +1 -0
  121. package/dist/saga/retry.js +222 -0
  122. package/dist/saga/retry.js.map +1 -0
  123. package/dist/scheduler.d.ts +37 -0
  124. package/dist/scheduler.d.ts.map +1 -0
  125. package/dist/scheduler.js +151 -0
  126. package/dist/scheduler.js.map +1 -0
  127. package/dist/subworkflows/index.d.ts +16 -0
  128. package/dist/subworkflows/index.d.ts.map +1 -0
  129. package/dist/subworkflows/index.js +16 -0
  130. package/dist/subworkflows/index.js.map +1 -0
  131. package/dist/subworkflows/parallel-subworkflows.d.ts +139 -0
  132. package/dist/subworkflows/parallel-subworkflows.d.ts.map +1 -0
  133. package/dist/subworkflows/parallel-subworkflows.js +270 -0
  134. package/dist/subworkflows/parallel-subworkflows.js.map +1 -0
  135. package/dist/subworkflows/subworkflow-node.d.ts +136 -0
  136. package/dist/subworkflows/subworkflow-node.d.ts.map +1 -0
  137. package/dist/subworkflows/subworkflow-node.js +164 -0
  138. package/dist/subworkflows/subworkflow-node.js.map +1 -0
  139. package/dist/timers/cron-parser.d.ts +110 -0
  140. package/dist/timers/cron-parser.d.ts.map +1 -0
  141. package/dist/timers/cron-parser.js +412 -0
  142. package/dist/timers/cron-parser.js.map +1 -0
  143. package/dist/timers/index.d.ts +18 -0
  144. package/dist/timers/index.d.ts.map +1 -0
  145. package/dist/timers/index.js +18 -0
  146. package/dist/timers/index.js.map +1 -0
  147. package/dist/timers/timer-manager.d.ts +219 -0
  148. package/dist/timers/timer-manager.d.ts.map +1 -0
  149. package/dist/timers/timer-manager.js +351 -0
  150. package/dist/timers/timer-manager.js.map +1 -0
  151. package/dist/timers/timer-node.d.ts +144 -0
  152. package/dist/timers/timer-node.d.ts.map +1 -0
  153. package/dist/timers/timer-node.js +246 -0
  154. package/dist/timers/timer-node.js.map +1 -0
  155. package/dist/timers/timer-store.d.ts +90 -0
  156. package/dist/timers/timer-store.d.ts.map +1 -0
  157. package/dist/timers/timer-store.js +357 -0
  158. package/dist/timers/timer-store.js.map +1 -0
  159. package/dist/triggers/cron-trigger.d.ts +102 -0
  160. package/dist/triggers/cron-trigger.d.ts.map +1 -0
  161. package/dist/triggers/cron-trigger.js +309 -0
  162. package/dist/triggers/cron-trigger.js.map +1 -0
  163. package/dist/triggers/index.d.ts +14 -0
  164. package/dist/triggers/index.d.ts.map +1 -0
  165. package/dist/triggers/index.js +10 -0
  166. package/dist/triggers/index.js.map +1 -0
  167. package/dist/triggers/rate-limiter.d.ts +130 -0
  168. package/dist/triggers/rate-limiter.d.ts.map +1 -0
  169. package/dist/triggers/rate-limiter.js +294 -0
  170. package/dist/triggers/rate-limiter.js.map +1 -0
  171. package/dist/triggers/trigger-manager.d.ts +166 -0
  172. package/dist/triggers/trigger-manager.d.ts.map +1 -0
  173. package/dist/triggers/trigger-manager.js +436 -0
  174. package/dist/triggers/trigger-manager.js.map +1 -0
  175. package/dist/triggers/webhook-trigger.d.ts +150 -0
  176. package/dist/triggers/webhook-trigger.d.ts.map +1 -0
  177. package/dist/triggers/webhook-trigger.js +452 -0
  178. package/dist/triggers/webhook-trigger.js.map +1 -0
  179. package/package.json +44 -0
@@ -0,0 +1,207 @@
1
+ /**
2
+ * WorkflowExecutor - Main execution engine for workflows
3
+ */
4
+ import { nanoid } from 'nanoid';
5
+ import { WorkflowScheduler } from './scheduler';
6
+ import { InMemoryCheckpointStore, createCheckpointId } from './checkpoint';
7
+ const DEFAULT_MAX_CONCURRENCY = 4;
8
+ const DEFAULT_MAX_ITERATIONS = 100;
9
+ export class WorkflowExecutor {
10
+ cogitator;
11
+ checkpointStore;
12
+ scheduler;
13
+ constructor(cogitator, checkpointStore) {
14
+ this.cogitator = cogitator;
15
+ this.checkpointStore = checkpointStore ?? new InMemoryCheckpointStore();
16
+ this.scheduler = new WorkflowScheduler();
17
+ }
18
+ /**
19
+ * Execute a workflow
20
+ */
21
+ async execute(workflow, input, options) {
22
+ const workflowId = `wf_${nanoid(12)}`;
23
+ const startTime = Date.now();
24
+ const maxConcurrency = options?.maxConcurrency ?? DEFAULT_MAX_CONCURRENCY;
25
+ const maxIterations = options?.maxIterations ?? DEFAULT_MAX_ITERATIONS;
26
+ const shouldCheckpoint = options?.checkpoint ?? false;
27
+ let state = { ...workflow.initialState, ...input };
28
+ const nodeResults = new Map();
29
+ const completedNodes = new Set();
30
+ let iterations = 0;
31
+ let checkpointId;
32
+ let error;
33
+ const graph = this.scheduler.buildDependencyGraph(workflow);
34
+ let currentNodes = [workflow.entryPoint];
35
+ try {
36
+ while (currentNodes.length > 0 && iterations < maxIterations) {
37
+ iterations++;
38
+ const nodesToRun = currentNodes.filter((n) => {
39
+ return workflow.nodes.has(n);
40
+ });
41
+ if (nodesToRun.length === 0)
42
+ break;
43
+ const tasks = nodesToRun.map((nodeName) => async () => {
44
+ const node = workflow.nodes.get(nodeName);
45
+ if (!node) {
46
+ throw new Error(`Node '${nodeName}' not found`);
47
+ }
48
+ options?.onNodeStart?.(nodeName);
49
+ const nodeStart = Date.now();
50
+ const ctx = {
51
+ state: { ...state },
52
+ nodeId: nodeName,
53
+ workflowId,
54
+ step: iterations,
55
+ };
56
+ const deps = graph.dependencies.get(nodeName);
57
+ if (deps && deps.size > 0) {
58
+ const inputs = [];
59
+ for (const dep of deps) {
60
+ const depResult = nodeResults.get(dep);
61
+ if (depResult) {
62
+ inputs.push(depResult.output);
63
+ }
64
+ }
65
+ ctx.input = inputs.length === 1 ? inputs[0] : inputs;
66
+ }
67
+ ctx.cogitator =
68
+ this.cogitator;
69
+ const result = await node.fn(ctx);
70
+ const duration = Date.now() - nodeStart;
71
+ options?.onNodeComplete?.(nodeName, result.output, duration);
72
+ return { nodeName, result, duration };
73
+ });
74
+ const results = await this.scheduler.runParallel(tasks, maxConcurrency);
75
+ const nextNodes = [];
76
+ for (const { nodeName, result, duration } of results) {
77
+ if (result.state) {
78
+ state = { ...state, ...result.state };
79
+ }
80
+ nodeResults.set(nodeName, {
81
+ output: result.output,
82
+ duration,
83
+ });
84
+ completedNodes.add(nodeName);
85
+ if (result.next) {
86
+ const next = Array.isArray(result.next)
87
+ ? result.next
88
+ : [result.next];
89
+ nextNodes.push(...next);
90
+ }
91
+ else {
92
+ const edgeNext = this.scheduler.getNextNodes(workflow, nodeName, state);
93
+ nextNodes.push(...edgeNext);
94
+ }
95
+ }
96
+ if (shouldCheckpoint) {
97
+ checkpointId = createCheckpointId();
98
+ await this.checkpointStore.save({
99
+ id: checkpointId,
100
+ workflowId,
101
+ workflowName: workflow.name,
102
+ state,
103
+ completedNodes: Array.from(completedNodes),
104
+ nodeResults: Object.fromEntries(Array.from(nodeResults.entries()).map(([k, v]) => [k, v.output])),
105
+ timestamp: Date.now(),
106
+ });
107
+ }
108
+ currentNodes = [...new Set(nextNodes)];
109
+ }
110
+ if (iterations >= maxIterations) {
111
+ error = new Error(`Workflow exceeded max iterations (${maxIterations.toString()})`);
112
+ }
113
+ }
114
+ catch (e) {
115
+ error = e instanceof Error ? e : new Error(String(e));
116
+ options?.onNodeError?.(currentNodes[0] ?? 'unknown', error);
117
+ }
118
+ return {
119
+ workflowId,
120
+ workflowName: workflow.name,
121
+ state,
122
+ nodeResults,
123
+ duration: Date.now() - startTime,
124
+ checkpointId,
125
+ error,
126
+ };
127
+ }
128
+ /**
129
+ * Resume a workflow from a checkpoint
130
+ */
131
+ async resume(workflow, checkpointId, options) {
132
+ const checkpoint = await this.checkpointStore.load(checkpointId);
133
+ if (!checkpoint) {
134
+ throw new Error(`Checkpoint '${checkpointId}' not found`);
135
+ }
136
+ if (checkpoint.workflowName !== workflow.name) {
137
+ throw new Error(`Checkpoint workflow '${checkpoint.workflowName}' does not match '${workflow.name}'`);
138
+ }
139
+ const allNodes = new Set(workflow.nodes.keys());
140
+ const completed = new Set(checkpoint.completedNodes);
141
+ const pending = [...allNodes].filter((n) => !completed.has(n));
142
+ if (pending.length === 0) {
143
+ return {
144
+ workflowId: checkpoint.workflowId,
145
+ workflowName: workflow.name,
146
+ state: checkpoint.state,
147
+ nodeResults: new Map(Object.entries(checkpoint.nodeResults).map(([k, v]) => [
148
+ k,
149
+ { output: v, duration: 0 },
150
+ ])),
151
+ duration: 0,
152
+ checkpointId,
153
+ };
154
+ }
155
+ return this.execute(workflow, checkpoint.state, {
156
+ ...options,
157
+ });
158
+ }
159
+ /**
160
+ * Stream workflow execution events
161
+ */
162
+ async *stream(workflow, input, options) {
163
+ const events = [];
164
+ let resolveNext = null;
165
+ const pushEvent = (event) => {
166
+ events.push(event);
167
+ resolveNext?.();
168
+ };
169
+ const resultPromise = this.execute(workflow, input, {
170
+ ...options,
171
+ onNodeStart: (node) => {
172
+ pushEvent({ type: 'node:start', node, timestamp: Date.now() });
173
+ },
174
+ onNodeComplete: (node, output, duration) => {
175
+ pushEvent({ type: 'node:complete', node, output, duration });
176
+ },
177
+ onNodeError: (node, error) => {
178
+ pushEvent({ type: 'node:error', node, error });
179
+ },
180
+ });
181
+ while (true) {
182
+ if (events.length > 0) {
183
+ yield events.shift();
184
+ }
185
+ else {
186
+ const raceResult = await Promise.race([
187
+ resultPromise.then((r) => ({ type: 'done', result: r })),
188
+ new Promise((resolve) => {
189
+ resolveNext = () => resolve({ type: 'event' });
190
+ }),
191
+ ]);
192
+ if (raceResult.type === 'done') {
193
+ while (events.length > 0) {
194
+ yield events.shift();
195
+ }
196
+ yield {
197
+ type: 'workflow:complete',
198
+ state: raceResult.result.state,
199
+ duration: raceResult.result.duration,
200
+ };
201
+ break;
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Approval Store implementations
3
+ *
4
+ * Features:
5
+ * - In-memory store for development/testing
6
+ * - File-based store for persistence
7
+ * - Response callbacks for async notifications
8
+ * - TTL-based cleanup
9
+ */
10
+ import type { ApprovalStore, ApprovalRequest, ApprovalResponse } from '@cogitator-ai/types';
11
+ /**
12
+ * In-memory approval store for development and testing
13
+ */
14
+ export declare class InMemoryApprovalStore implements ApprovalStore {
15
+ private requests;
16
+ private responses;
17
+ private callbacks;
18
+ private ttl;
19
+ private cleanupInterval?;
20
+ constructor(options?: {
21
+ ttl?: number;
22
+ cleanupInterval?: number;
23
+ });
24
+ createRequest(request: ApprovalRequest): Promise<void>;
25
+ getRequest(id: string): Promise<ApprovalRequest | null>;
26
+ getPendingRequests(workflowId?: string): Promise<ApprovalRequest[]>;
27
+ getPendingForAssignee(assignee: string): Promise<ApprovalRequest[]>;
28
+ submitResponse(response: ApprovalResponse): Promise<void>;
29
+ getResponse(requestId: string): Promise<ApprovalResponse | null>;
30
+ deleteRequest(id: string): Promise<void>;
31
+ onResponse(requestId: string, callback: (response: ApprovalResponse) => void): () => void;
32
+ /**
33
+ * Clean up expired requests
34
+ */
35
+ private cleanup;
36
+ /**
37
+ * Stop cleanup interval
38
+ */
39
+ dispose(): void;
40
+ /**
41
+ * Get all requests (for debugging)
42
+ */
43
+ getAllRequests(): ApprovalRequest[];
44
+ /**
45
+ * Get all responses (for debugging)
46
+ */
47
+ getAllResponses(): ApprovalResponse[];
48
+ /**
49
+ * Clear all data
50
+ */
51
+ clear(): void;
52
+ }
53
+ /**
54
+ * File-based approval store for persistence across restarts
55
+ */
56
+ export declare class FileApprovalStore implements ApprovalStore {
57
+ private readonly directory;
58
+ private callbacks;
59
+ private watchInterval?;
60
+ private lastResponseCheck;
61
+ constructor(options: {
62
+ directory: string;
63
+ pollInterval?: number;
64
+ });
65
+ private getRequestPath;
66
+ private getResponsePath;
67
+ createRequest(request: ApprovalRequest): Promise<void>;
68
+ getRequest(id: string): Promise<ApprovalRequest | null>;
69
+ getPendingRequests(workflowId?: string): Promise<ApprovalRequest[]>;
70
+ getPendingForAssignee(assignee: string): Promise<ApprovalRequest[]>;
71
+ submitResponse(response: ApprovalResponse): Promise<void>;
72
+ getResponse(requestId: string): Promise<ApprovalResponse | null>;
73
+ deleteRequest(id: string): Promise<void>;
74
+ onResponse(requestId: string, callback: (response: ApprovalResponse) => void): () => void;
75
+ /**
76
+ * Check for new responses (called by poll interval)
77
+ */
78
+ private checkForResponses;
79
+ /**
80
+ * Stop polling
81
+ */
82
+ dispose(): void;
83
+ /**
84
+ * Clean up expired requests
85
+ */
86
+ cleanup(maxAge: number): Promise<number>;
87
+ }
88
+ /**
89
+ * Create an approval store that delegates responses
90
+ * to another store (e.g., for delegation handling)
91
+ */
92
+ export declare function withDelegation(store: ApprovalStore, options?: {
93
+ onDelegation?: (request: ApprovalRequest, from: string, to: string) => Promise<void>;
94
+ }): ApprovalStore;
95
+ //# sourceMappingURL=approval-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approval-store.d.ts","sourceRoot":"","sources":["../../src/human/approval-store.ts"],"names":[],"mappings":"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"}