@codebolt/agent 1.2.1 → 2.2.2

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 (183) hide show
  1. package/README.md +157 -66
  2. package/dist/builderpattern/agent.d.ts +86 -0
  3. package/dist/builderpattern/agent.js +324 -0
  4. package/dist/builderpattern/followupquestionbuilder.d.ts +75 -0
  5. package/dist/builderpattern/followupquestionbuilder.js +197 -0
  6. package/dist/builderpattern/index.d.ts +14 -0
  7. package/dist/builderpattern/index.js +23 -0
  8. package/dist/builderpattern/llmoutputhandler.d.ts +102 -0
  9. package/dist/builderpattern/llmoutputhandler.js +452 -0
  10. package/dist/builderpattern/promptbuilder.d.ts +382 -0
  11. package/dist/builderpattern/promptbuilder.js +805 -0
  12. package/dist/builderpattern/systemprompt.d.ts +20 -0
  13. package/dist/builderpattern/systemprompt.js +48 -0
  14. package/dist/builderpattern/taskInstruction.d.ts +37 -0
  15. package/dist/builderpattern/taskInstruction.js +57 -0
  16. package/dist/builderpattern/usermessage.d.ts +70 -0
  17. package/dist/builderpattern/usermessage.js +123 -0
  18. package/dist/composablepattern/agent.d.ts +169 -0
  19. package/dist/composablepattern/agent.js +598 -0
  20. package/dist/composablepattern/codebolt-storage.d.ts +67 -0
  21. package/dist/composablepattern/codebolt-storage.js +320 -0
  22. package/dist/composablepattern/document.d.ts +149 -0
  23. package/dist/composablepattern/document.js +405 -0
  24. package/dist/composablepattern/examples/codebolt-integration-example.d.ts +12 -0
  25. package/dist/composablepattern/examples/codebolt-integration-example.js +218 -0
  26. package/dist/composablepattern/examples/codebolt-storage-example.d.ts +40 -0
  27. package/dist/composablepattern/examples/codebolt-storage-example.js +223 -0
  28. package/dist/composablepattern/examples/custom-steps-example.d.ts +20 -0
  29. package/dist/composablepattern/examples/custom-steps-example.js +455 -0
  30. package/dist/composablepattern/examples/document-agent.d.ts +17 -0
  31. package/dist/composablepattern/examples/document-agent.js +107 -0
  32. package/dist/composablepattern/examples/simple-codebolt-integration.d.ts +8 -0
  33. package/dist/composablepattern/examples/simple-codebolt-integration.js +164 -0
  34. package/dist/composablepattern/examples/weather-agent.d.ts +18 -0
  35. package/dist/composablepattern/examples/weather-agent.js +86 -0
  36. package/dist/composablepattern/examples/workflow-example.d.ts +12 -0
  37. package/dist/composablepattern/examples/workflow-example.js +463 -0
  38. package/dist/composablepattern/index.d.ts +63 -0
  39. package/dist/composablepattern/index.js +115 -0
  40. package/dist/composablepattern/memory.d.ts +89 -0
  41. package/dist/composablepattern/memory.js +141 -0
  42. package/dist/composablepattern/tool.d.ts +84 -0
  43. package/dist/composablepattern/tool.js +260 -0
  44. package/dist/composablepattern/types.d.ts +194 -0
  45. package/dist/composablepattern/types.js +6 -0
  46. package/dist/composablepattern/user-context.d.ts +214 -0
  47. package/dist/composablepattern/user-context.js +275 -0
  48. package/dist/composablepattern/workflow.d.ts +388 -0
  49. package/dist/composablepattern/workflow.js +562 -0
  50. package/dist/processor/agent/agentStep.d.ts +49 -0
  51. package/dist/processor/agent/agentStep.js +241 -0
  52. package/dist/processor/agent/toolExecutor.d.ts +19 -0
  53. package/dist/processor/agent/toolExecutor.js +90 -0
  54. package/dist/processor/index.d.ts +7 -0
  55. package/dist/processor/index.js +36 -0
  56. package/dist/processor/messageModifiers/baseMessageModifier.d.ts +20 -0
  57. package/dist/processor/messageModifiers/baseMessageModifier.js +55 -0
  58. package/dist/processor/processors/baseProcessor.d.ts +14 -0
  59. package/dist/processor/processors/baseProcessor.js +29 -0
  60. package/dist/processor/tools/baseTool.d.ts +10 -0
  61. package/dist/processor/tools/baseTool.js +20 -0
  62. package/dist/processor/tools/toolList.d.ts +9 -0
  63. package/dist/processor/tools/toolList.js +22 -0
  64. package/dist/processor/types/interfaces.d.ts +94 -0
  65. package/dist/processor/types/interfaces.js +2 -0
  66. package/dist/processor-pieces/base/baseMessageModifier.d.ts +12 -0
  67. package/dist/processor-pieces/base/baseMessageModifier.js +15 -0
  68. package/dist/processor-pieces/base/basePostInferenceProcessor.d.ts +13 -0
  69. package/dist/processor-pieces/base/basePostInferenceProcessor.js +18 -0
  70. package/dist/processor-pieces/base/basePostToolCallProcessor.d.ts +15 -0
  71. package/dist/processor-pieces/base/basePostToolCallProcessor.js +25 -0
  72. package/dist/processor-pieces/base/basePreInferenceProcessor.d.ts +12 -0
  73. package/dist/processor-pieces/base/basePreInferenceProcessor.js +17 -0
  74. package/dist/processor-pieces/base/basePreToolCallProcessor.d.ts +18 -0
  75. package/dist/processor-pieces/base/basePreToolCallProcessor.js +66 -0
  76. package/dist/processor-pieces/base/index.d.ts +9 -0
  77. package/dist/processor-pieces/base/index.js +18 -0
  78. package/dist/processor-pieces/index.d.ts +1 -0
  79. package/dist/processor-pieces/index.js +59 -0
  80. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.d.ts +22 -0
  81. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.js +144 -0
  82. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.d.ts +13 -0
  83. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.js +68 -0
  84. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.d.ts +25 -0
  85. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.js +453 -0
  86. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.d.ts +15 -0
  87. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.js +75 -0
  88. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.d.ts +11 -0
  89. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.js +46 -0
  90. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.d.ts +18 -0
  91. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.js +104 -0
  92. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.d.ts +23 -0
  93. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.js +173 -0
  94. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.d.ts +14 -0
  95. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.js +130 -0
  96. package/dist/processor-pieces/messageModifiers/directoryContextModifier.d.ts +36 -0
  97. package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +418 -0
  98. package/dist/processor-pieces/messageModifiers/environmentContextModifier.d.ts +26 -0
  99. package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +260 -0
  100. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.d.ts +12 -0
  101. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.js +60 -0
  102. package/dist/processor-pieces/messageModifiers/ideContextModifier.d.ts +34 -0
  103. package/dist/processor-pieces/messageModifiers/ideContextModifier.js +157 -0
  104. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.d.ts +18 -0
  105. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.js +222 -0
  106. package/dist/processor-pieces/messageModifiers/index.d.ts +11 -0
  107. package/dist/processor-pieces/messageModifiers/index.js +26 -0
  108. package/dist/processor-pieces/messageModifiers/memoryImportModifier.d.ts +15 -0
  109. package/dist/processor-pieces/messageModifiers/memoryImportModifier.js +129 -0
  110. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.d.ts +20 -0
  111. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +152 -0
  112. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.d.ts +22 -0
  113. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.js +194 -0
  114. package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.d.ts +29 -0
  115. package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.js +174 -0
  116. package/dist/processor-pieces/postToolCallProcessors/index.d.ts +1 -0
  117. package/dist/processor-pieces/postToolCallProcessors/index.js +2 -0
  118. package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.d.ts +25 -0
  119. package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.js +225 -0
  120. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.d.ts +35 -0
  121. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +255 -0
  122. package/dist/processor-pieces/preInferenceProcessors/index.d.ts +1 -0
  123. package/dist/processor-pieces/preInferenceProcessors/index.js +2 -0
  124. package/dist/processor-pieces/pretoolCallProcessors/index.d.ts +1 -0
  125. package/dist/processor-pieces/pretoolCallProcessors/index.js +2 -0
  126. package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.d.ts +41 -0
  127. package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.js +197 -0
  128. package/dist/processor-pieces/processors/chatCompressionProcessor.d.ts +26 -0
  129. package/dist/processor-pieces/processors/chatCompressionProcessor.js +90 -0
  130. package/dist/processor-pieces/processors/chatRecordingProcessor.d.ts +81 -0
  131. package/dist/processor-pieces/processors/chatRecordingProcessor.js +329 -0
  132. package/dist/processor-pieces/processors/contextManagementProcessor.d.ts +40 -0
  133. package/dist/processor-pieces/processors/contextManagementProcessor.js +305 -0
  134. package/dist/processor-pieces/processors/loopDetectionProcessor.d.ts +30 -0
  135. package/dist/processor-pieces/processors/loopDetectionProcessor.js +137 -0
  136. package/dist/processor-pieces/processors/responseValidationProcessor.d.ts +30 -0
  137. package/dist/processor-pieces/processors/responseValidationProcessor.js +228 -0
  138. package/dist/processor-pieces/processors/telemetryProcessor.d.ts +99 -0
  139. package/dist/processor-pieces/processors/telemetryProcessor.js +311 -0
  140. package/dist/processor-pieces/processors/tokenManagementProcessor.d.ts +37 -0
  141. package/dist/processor-pieces/processors/tokenManagementProcessor.js +178 -0
  142. package/dist/processor-pieces/processors/toolExecutionProcessor.d.ts +43 -0
  143. package/dist/processor-pieces/processors/toolExecutionProcessor.js +207 -0
  144. package/dist/processor-pieces/tools/fileTools.d.ts +26 -0
  145. package/dist/processor-pieces/tools/fileTools.js +162 -0
  146. package/dist/processor-pieces/utils/messageModifierHelper.d.ts +4 -0
  147. package/dist/processor-pieces/utils/messageModifierHelper.js +58 -0
  148. package/dist/types/commonTypes.d.ts +4 -0
  149. package/dist/types/processorTypes.d.ts +67 -0
  150. package/dist/types/processorTypes.js +58 -0
  151. package/dist/unified/agent/agent.d.ts +17 -0
  152. package/dist/unified/agent/agent.js +79 -0
  153. package/dist/unified/agent/team.d.ts +2 -0
  154. package/dist/unified/agent/team.js +6 -0
  155. package/dist/unified/agent/tools.d.ts +44 -0
  156. package/dist/unified/agent/tools.js +487 -0
  157. package/dist/unified/agent/workflow.d.ts +24 -0
  158. package/dist/unified/agent/workflow.js +275 -0
  159. package/dist/unified/agent/workflowControls.d.ts +11 -0
  160. package/dist/unified/agent/workflowControls.js +20 -0
  161. package/dist/unified/agent/workflowSteps.d.ts +63 -0
  162. package/dist/unified/agent/workflowSteps.js +284 -0
  163. package/dist/unified/base/agentStep.d.ts +32 -0
  164. package/dist/unified/base/agentStep.js +96 -0
  165. package/dist/unified/base/create/createInitialPromptGenerators.d.ts +5 -0
  166. package/dist/unified/base/create/createInitialPromptGenerators.js +17 -0
  167. package/dist/unified/base/index.d.ts +5 -0
  168. package/dist/unified/base/index.js +13 -0
  169. package/dist/unified/base/initialPromptGenerator.d.ts +48 -0
  170. package/dist/unified/base/initialPromptGenerator.js +118 -0
  171. package/dist/unified/base/responseExecutor.d.ts +36 -0
  172. package/dist/unified/base/responseExecutor.js +283 -0
  173. package/dist/unified/index.d.ts +18 -0
  174. package/dist/unified/index.js +42 -0
  175. package/dist/unified/team/team.d.ts +1 -0
  176. package/dist/unified/team/team.js +2 -0
  177. package/dist/unified/types/libTypes.d.ts +378 -0
  178. package/dist/unified/types/libTypes.js +6 -0
  179. package/dist/unified/types/types.d.ts +212 -0
  180. package/dist/unified/types/types.js +43 -0
  181. package/dist/unified/utils/utils.d.ts +40 -0
  182. package/dist/unified/utils/utils.js +219 -0
  183. package/package.json +29 -7
@@ -0,0 +1,562 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Workflow system for Composable Agent Pattern
4
+ * @description Provides workflow orchestration for multi-step agent processes
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Workflow = void 0;
8
+ exports.createAgentStep = createAgentStep;
9
+ exports.createTransformStep = createTransformStep;
10
+ exports.createConditionalStep = createConditionalStep;
11
+ exports.createDelayStep = createDelayStep;
12
+ exports.createStep = createStep;
13
+ exports.createSimpleStep = createSimpleStep;
14
+ exports.createAsyncStep = createAsyncStep;
15
+ exports.createValidationStep = createValidationStep;
16
+ exports.createLoggingStep = createLoggingStep;
17
+ exports.createWorkflow = createWorkflow;
18
+ const zod_1 = require("zod");
19
+ // ================================
20
+ // Workflow Engine
21
+ // ================================
22
+ class Workflow {
23
+ constructor(config) {
24
+ this.config = config;
25
+ this.context = {
26
+ data: { ...config.initialData || {} },
27
+ history: [],
28
+ currentStep: 0,
29
+ metadata: {
30
+ workflowName: config.name,
31
+ startTime: new Date().toISOString(),
32
+ steps: config.steps.map(s => ({ id: s.id, name: s.name }))
33
+ }
34
+ };
35
+ }
36
+ /**
37
+ * Execute the workflow
38
+ */
39
+ async execute() {
40
+ const startTime = Date.now();
41
+ try {
42
+ await this.executeSteps(this.config.steps);
43
+ const executionTime = Date.now() - startTime;
44
+ return {
45
+ success: true,
46
+ data: this.context.data,
47
+ stepResults: this.context.history,
48
+ executionTime,
49
+ metadata: {
50
+ ...this.context.metadata,
51
+ endTime: new Date().toISOString(),
52
+ totalSteps: this.context.history.length
53
+ }
54
+ };
55
+ }
56
+ catch (error) {
57
+ const executionTime = Date.now() - startTime;
58
+ return {
59
+ success: false,
60
+ data: this.context.data,
61
+ stepResults: this.context.history,
62
+ executionTime,
63
+ error: error instanceof Error ? error.message : String(error),
64
+ metadata: {
65
+ ...this.context.metadata,
66
+ endTime: new Date().toISOString(),
67
+ failedAt: this.context.currentStep
68
+ }
69
+ };
70
+ }
71
+ }
72
+ /**
73
+ * Execute a list of steps
74
+ */
75
+ async executeSteps(steps) {
76
+ const parallelSteps = [];
77
+ for (const step of steps) {
78
+ // Check dependencies
79
+ if (step.dependencies) {
80
+ const unmetDeps = step.dependencies.filter(depId => !this.context.history.some(h => h.stepId === depId && h.success));
81
+ if (unmetDeps.length > 0) {
82
+ throw new Error(`Step ${step.id} has unmet dependencies: ${unmetDeps.join(', ')}`);
83
+ }
84
+ }
85
+ // Check condition
86
+ if (step.condition && !(await step.condition(this.context))) {
87
+ continue;
88
+ }
89
+ if (step.parallel) {
90
+ parallelSteps.push(step);
91
+ }
92
+ else {
93
+ // Execute any pending parallel steps first
94
+ if (parallelSteps.length > 0) {
95
+ await this.executeParallelSteps(parallelSteps);
96
+ parallelSteps.length = 0;
97
+ }
98
+ // Execute this step
99
+ await this.executeStep(step);
100
+ }
101
+ }
102
+ // Execute any remaining parallel steps
103
+ if (parallelSteps.length > 0) {
104
+ await this.executeParallelSteps(parallelSteps);
105
+ }
106
+ }
107
+ /**
108
+ * Execute parallel steps
109
+ */
110
+ async executeParallelSteps(steps) {
111
+ const maxConcurrency = this.config.maxParallelSteps || steps.length;
112
+ const batches = this.chunkArray(steps, maxConcurrency);
113
+ for (const batch of batches) {
114
+ await Promise.all(batch.map(step => this.executeStep(step)));
115
+ }
116
+ }
117
+ /**
118
+ * Execute a single step with retry logic
119
+ */
120
+ async executeStep(step) {
121
+ var _a;
122
+ const maxAttempts = ((_a = step.retry) === null || _a === void 0 ? void 0 : _a.maxAttempts) || 1;
123
+ let lastError = null;
124
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
125
+ try {
126
+ const startTime = Date.now();
127
+ // Validate input if schema provided
128
+ if (step.inputSchema) {
129
+ step.inputSchema.parse(this.context.data);
130
+ }
131
+ const result = await step.execute(this.context);
132
+ // Validate output if schema provided
133
+ if (step.outputSchema && result.output !== undefined) {
134
+ step.outputSchema.parse(result.output);
135
+ }
136
+ result.executionTime = Date.now() - startTime;
137
+ this.context.history.push(result);
138
+ // Merge step output into context
139
+ if (result.output && typeof result.output === 'object') {
140
+ this.context.data = { ...this.context.data, ...result.output };
141
+ }
142
+ return; // Success, exit retry loop
143
+ }
144
+ catch (error) {
145
+ lastError = error instanceof Error ? error : new Error(String(error));
146
+ if (attempt < maxAttempts && step.retry) {
147
+ const delay = this.calculateRetryDelay(step.retry, attempt);
148
+ await new Promise(resolve => setTimeout(resolve, delay));
149
+ }
150
+ }
151
+ }
152
+ // All attempts failed
153
+ const result = {
154
+ stepId: step.id,
155
+ success: false,
156
+ error: (lastError === null || lastError === void 0 ? void 0 : lastError.message) || 'Unknown error',
157
+ executionTime: 0
158
+ };
159
+ this.context.history.push(result);
160
+ if (!this.config.continueOnError) {
161
+ throw lastError || new Error(`Step ${step.id} failed`);
162
+ }
163
+ }
164
+ /**
165
+ * Calculate retry delay with backoff
166
+ */
167
+ calculateRetryDelay(retryConfig, attempt) {
168
+ const baseDelay = retryConfig.delay;
169
+ switch (retryConfig.backoff) {
170
+ case 'exponential':
171
+ return baseDelay * Math.pow(2, attempt - 1);
172
+ case 'linear':
173
+ default:
174
+ return baseDelay * attempt;
175
+ }
176
+ }
177
+ /**
178
+ * Split array into chunks
179
+ */
180
+ chunkArray(array, chunkSize) {
181
+ const chunks = [];
182
+ for (let i = 0; i < array.length; i += chunkSize) {
183
+ chunks.push(array.slice(i, i + chunkSize));
184
+ }
185
+ return chunks;
186
+ }
187
+ /**
188
+ * Get current workflow context
189
+ */
190
+ getContext() {
191
+ return { ...this.context };
192
+ }
193
+ /**
194
+ * Update workflow context data
195
+ */
196
+ updateContext(data) {
197
+ this.context.data = { ...this.context.data, ...data };
198
+ }
199
+ }
200
+ exports.Workflow = Workflow;
201
+ // ================================
202
+ // Step Factory Functions
203
+ // ================================
204
+ /**
205
+ * Create an agent execution step
206
+ */
207
+ function createAgentStep(config) {
208
+ return {
209
+ id: config.id,
210
+ name: config.name,
211
+ description: `Execute agent: ${config.agent.config.name}`,
212
+ execute: async (context) => {
213
+ try {
214
+ // Apply input mapping
215
+ let stepData = { ...context.data };
216
+ if (config.inputMapping) {
217
+ for (const [stepKey, contextKey] of Object.entries(config.inputMapping)) {
218
+ if (context.data[contextKey] !== undefined) {
219
+ stepData[stepKey] = context.data[contextKey];
220
+ }
221
+ }
222
+ }
223
+ // Replace template variables in message
224
+ const message = config.messageTemplate.replace(/\{\{(\w+)\}\}/g, (match, key) => {
225
+ return stepData[key] !== undefined ? String(stepData[key]) : match;
226
+ });
227
+ const result = await config.agent.execute(message);
228
+ // Apply output mapping
229
+ let output = { agentResult: result };
230
+ if (config.outputMapping) {
231
+ output = {};
232
+ for (const [contextKey, resultKey] of Object.entries(config.outputMapping)) {
233
+ const value = resultKey.split('.').reduce((obj, key) => obj === null || obj === void 0 ? void 0 : obj[key], { agentResult: result });
234
+ if (value !== undefined) {
235
+ output[contextKey] = value;
236
+ }
237
+ }
238
+ }
239
+ return {
240
+ stepId: config.id,
241
+ success: result.success,
242
+ output,
243
+ error: result.error,
244
+ executionTime: 0 // Will be set by executeStep
245
+ };
246
+ }
247
+ catch (error) {
248
+ return {
249
+ stepId: config.id,
250
+ success: false,
251
+ error: error instanceof Error ? error.message : String(error),
252
+ executionTime: 0
253
+ };
254
+ }
255
+ }
256
+ };
257
+ }
258
+ /**
259
+ * Create a data transformation step
260
+ */
261
+ function createTransformStep(config) {
262
+ return {
263
+ id: config.id,
264
+ name: config.name,
265
+ description: 'Transform data',
266
+ inputSchema: config.inputSchema,
267
+ outputSchema: config.outputSchema,
268
+ execute: async (context) => {
269
+ try {
270
+ const output = await config.transform(context.data);
271
+ return {
272
+ stepId: config.id,
273
+ success: true,
274
+ output,
275
+ executionTime: 0
276
+ };
277
+ }
278
+ catch (error) {
279
+ return {
280
+ stepId: config.id,
281
+ success: false,
282
+ error: error instanceof Error ? error.message : String(error),
283
+ executionTime: 0
284
+ };
285
+ }
286
+ }
287
+ };
288
+ }
289
+ /**
290
+ * Create a conditional branch step
291
+ */
292
+ function createConditionalStep(config) {
293
+ return {
294
+ id: config.id,
295
+ name: config.name,
296
+ description: 'Conditional execution',
297
+ execute: async (context) => {
298
+ try {
299
+ const conditionResult = await config.condition(context);
300
+ const stepsToExecute = conditionResult ? config.trueBranch : (config.falseBranch || []);
301
+ // Execute conditional steps
302
+ const subWorkflow = new Workflow({
303
+ name: `${config.id}-branch`,
304
+ steps: stepsToExecute,
305
+ initialData: context.data
306
+ });
307
+ const result = await subWorkflow.execute();
308
+ return {
309
+ stepId: config.id,
310
+ success: result.success,
311
+ output: result.data,
312
+ error: result.error,
313
+ executionTime: result.executionTime,
314
+ metadata: {
315
+ conditionResult,
316
+ branchExecuted: conditionResult ? 'true' : 'false',
317
+ subSteps: result.stepResults.length
318
+ }
319
+ };
320
+ }
321
+ catch (error) {
322
+ return {
323
+ stepId: config.id,
324
+ success: false,
325
+ error: error instanceof Error ? error.message : String(error),
326
+ executionTime: 0
327
+ };
328
+ }
329
+ }
330
+ };
331
+ }
332
+ /**
333
+ * Create a delay step
334
+ */
335
+ function createDelayStep(config) {
336
+ return {
337
+ id: config.id,
338
+ name: config.name,
339
+ description: `Delay for ${config.delay}ms`,
340
+ execute: async () => {
341
+ await new Promise(resolve => setTimeout(resolve, config.delay));
342
+ return {
343
+ stepId: config.id,
344
+ success: true,
345
+ executionTime: config.delay
346
+ };
347
+ }
348
+ };
349
+ }
350
+ /**
351
+ * Create a simple custom step with your own logic
352
+ *
353
+ * @param config - Step configuration with custom execute function
354
+ * @returns WorkflowStep
355
+ *
356
+ * @example
357
+ * ```typescript
358
+ * const customStep = createStep({
359
+ * id: 'my-step',
360
+ * name: 'My Custom Step',
361
+ * description: 'Does something custom',
362
+ * execute: async (context) => {
363
+ * // Your custom logic here
364
+ * const result = await doSomething(context.data);
365
+ * return {
366
+ * stepId: 'my-step',
367
+ * success: true,
368
+ * output: { customResult: result },
369
+ * executionTime: 0
370
+ * };
371
+ * }
372
+ * });
373
+ * ```
374
+ */
375
+ function createStep(config) {
376
+ return {
377
+ id: config.id,
378
+ name: config.name,
379
+ description: config.description,
380
+ inputSchema: config.inputSchema,
381
+ outputSchema: config.outputSchema,
382
+ execute: config.execute,
383
+ condition: config.condition,
384
+ dependencies: config.dependencies,
385
+ parallel: config.parallel,
386
+ retry: config.retry
387
+ };
388
+ }
389
+ /**
390
+ * Create a simple step that executes a function with the context data
391
+ *
392
+ * @param config - Step configuration with transform function
393
+ * @returns WorkflowStep
394
+ *
395
+ * @example
396
+ * ```typescript
397
+ * const mathStep = createSimpleStep({
398
+ * id: 'calculate',
399
+ * name: 'Calculate Total',
400
+ * execute: (data) => {
401
+ * const total = data.items.reduce((sum, item) => sum + item.price, 0);
402
+ * return { total, itemCount: data.items.length };
403
+ * }
404
+ * });
405
+ * ```
406
+ */
407
+ function createSimpleStep(config) {
408
+ return createStep({
409
+ ...config,
410
+ execute: async (context) => {
411
+ try {
412
+ const output = await config.execute(context.data);
413
+ return {
414
+ stepId: config.id,
415
+ success: true,
416
+ output,
417
+ executionTime: 0 // Will be set by executeStep
418
+ };
419
+ }
420
+ catch (error) {
421
+ return {
422
+ stepId: config.id,
423
+ success: false,
424
+ error: error instanceof Error ? error.message : String(error),
425
+ executionTime: 0
426
+ };
427
+ }
428
+ }
429
+ });
430
+ }
431
+ /**
432
+ * Create an async step that can perform asynchronous operations
433
+ *
434
+ * @param config - Step configuration with async function
435
+ * @returns WorkflowStep
436
+ *
437
+ * @example
438
+ * ```typescript
439
+ * const apiStep = createAsyncStep({
440
+ * id: 'fetch-data',
441
+ * name: 'Fetch External Data',
442
+ * execute: async (data) => {
443
+ * const response = await fetch(`/api/data/${data.id}`);
444
+ * const result = await response.json();
445
+ * return { fetchedData: result };
446
+ * },
447
+ * retry: {
448
+ * maxAttempts: 3,
449
+ * delay: 1000,
450
+ * backoff: 'exponential'
451
+ * }
452
+ * });
453
+ * ```
454
+ */
455
+ function createAsyncStep(config) {
456
+ return createStep({
457
+ ...config,
458
+ execute: async (context) => {
459
+ try {
460
+ const output = await config.execute(context.data, context);
461
+ return {
462
+ stepId: config.id,
463
+ success: true,
464
+ output,
465
+ executionTime: 0 // Will be set by executeStep
466
+ };
467
+ }
468
+ catch (error) {
469
+ return {
470
+ stepId: config.id,
471
+ success: false,
472
+ error: error instanceof Error ? error.message : String(error),
473
+ executionTime: 0
474
+ };
475
+ }
476
+ }
477
+ });
478
+ }
479
+ /**
480
+ * Create a validation step that validates data against a schema
481
+ *
482
+ * @param config - Validation configuration
483
+ * @returns WorkflowStep
484
+ */
485
+ function createValidationStep(config) {
486
+ return createStep({
487
+ id: config.id,
488
+ name: config.name,
489
+ description: `Validate ${config.field || 'data'} against schema`,
490
+ execute: async (context) => {
491
+ try {
492
+ const dataToValidate = config.field
493
+ ? context.data[config.field]
494
+ : context.data;
495
+ const validatedData = config.schema.parse(dataToValidate);
496
+ return {
497
+ stepId: config.id,
498
+ success: true,
499
+ output: config.field
500
+ ? { [config.field]: validatedData }
501
+ : validatedData,
502
+ executionTime: 0
503
+ };
504
+ }
505
+ catch (error) {
506
+ const errorMessage = error instanceof zod_1.z.ZodError
507
+ ? `Validation failed: ${error.issues.map(i => `${i.path.join('.')}: ${i.message}`).join(', ')}`
508
+ : error instanceof Error ? error.message : String(error);
509
+ return {
510
+ stepId: config.id,
511
+ success: !config.stopOnFailure,
512
+ error: errorMessage,
513
+ executionTime: 0,
514
+ metadata: { validationError: true }
515
+ };
516
+ }
517
+ }
518
+ });
519
+ }
520
+ /**
521
+ * Create a logging step for debugging workflows
522
+ *
523
+ * @param config - Logging configuration
524
+ * @returns WorkflowStep
525
+ */
526
+ function createLoggingStep(config) {
527
+ return createStep({
528
+ id: config.id,
529
+ name: config.name,
530
+ description: `Log workflow state`,
531
+ execute: async (context) => {
532
+ const level = config.level || 'info';
533
+ const message = config.message || `Step ${config.id} executed`;
534
+ // Extract specific fields if specified
535
+ const logData = config.fields
536
+ ? config.fields.reduce((acc, field) => {
537
+ acc[field] = context.data[field];
538
+ return acc;
539
+ }, {})
540
+ : context.data;
541
+ // Log to console (in production, you might use a proper logger)
542
+ console[level](`[Workflow] ${message}`, {
543
+ stepId: config.id,
544
+ data: logData,
545
+ executionStep: context.currentStep,
546
+ timestamp: new Date().toISOString()
547
+ });
548
+ return {
549
+ stepId: config.id,
550
+ success: true,
551
+ output: { logged: true, logLevel: level },
552
+ executionTime: 0
553
+ };
554
+ }
555
+ });
556
+ }
557
+ /**
558
+ * Create a workflow from configuration
559
+ */
560
+ function createWorkflow(config) {
561
+ return new Workflow(config);
562
+ }
@@ -0,0 +1,49 @@
1
+ import { IAgentStep, AgentStepInput, AgentStepOutput, ProcessedMessage, ToolList, ToolExecutor, Processor } from '../types/interfaces';
2
+ export interface AgentStepOptions {
3
+ inputProcessors?: Processor[];
4
+ outputProcessors?: Processor[];
5
+ toolList?: ToolList;
6
+ toolExecutor?: ToolExecutor;
7
+ maxIterations?: number;
8
+ }
9
+ export declare abstract class AgentStep implements IAgentStep {
10
+ protected readonly inputProcessors: Processor[];
11
+ protected readonly outputProcessors: Processor[];
12
+ protected readonly toolList?: ToolList;
13
+ protected readonly toolExecutor?: ToolExecutor;
14
+ protected readonly maxIterations: number;
15
+ constructor(options?: AgentStepOptions);
16
+ /**
17
+ * Single step processing with input/output processors
18
+ */
19
+ step(message: ProcessedMessage, context?: Record<string, any>): Promise<ProcessedMessage>;
20
+ generateOneStep(input: AgentStepInput): Promise<AgentStepOutput>;
21
+ generateWithToolExecution(input: AgentStepInput): Promise<AgentStepOutput>;
22
+ loop(input: AgentStepInput, maxIterations?: number): Promise<AgentStepOutput>;
23
+ protected abstract analyzeForToolCalls(message: ProcessedMessage, tools: any[], context?: Record<string, any>): Promise<Array<{
24
+ tool: string;
25
+ parameters: any;
26
+ }> | null>;
27
+ protected abstract generateFinalResponse(message: ProcessedMessage, toolResults: any, context?: Record<string, any>): Promise<AgentStepOutput>;
28
+ }
29
+ export interface LLMConfig {
30
+ llmname?: string;
31
+ model?: string;
32
+ temperature?: number;
33
+ maxTokens?: number;
34
+ apiKey?: string;
35
+ baseUrl?: string;
36
+ }
37
+ export interface LLMAgentStepOptions extends AgentStepOptions {
38
+ llmconfig?: LLMConfig;
39
+ }
40
+ export declare class LLMAgentStep extends AgentStep {
41
+ protected readonly llmConfig: LLMConfig;
42
+ constructor(options?: LLMAgentStepOptions);
43
+ protected analyzeForToolCalls(message: ProcessedMessage, tools: any[], context?: Record<string, any>): Promise<Array<{
44
+ tool: string;
45
+ parameters: any;
46
+ }> | null>;
47
+ protected generateFinalResponse(message: ProcessedMessage, toolResults: any, context?: Record<string, any>): Promise<AgentStepOutput>;
48
+ private extractFilePath;
49
+ }