@codebolt/agent 5.0.2 → 5.0.7

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 (164) hide show
  1. package/dist/agent.d.ts +86 -0
  2. package/dist/agent.js +324 -0
  3. package/dist/builderpattern/agent.js +2 -2
  4. package/dist/builderpattern/followupquestionbuilder.js +1 -1
  5. package/dist/builderpattern/llmoutputhandler.js +7 -7
  6. package/dist/builderpattern/usermessage.d.ts +1 -6
  7. package/dist/composablepattern/document.js +35 -2
  8. package/dist/followupquestionbuilder.d.ts +75 -0
  9. package/dist/followupquestionbuilder.js +197 -0
  10. package/dist/index.d.ts +14 -0
  11. package/dist/index.js +23 -0
  12. package/dist/llmoutputhandler.d.ts +102 -0
  13. package/dist/llmoutputhandler.js +452 -0
  14. package/dist/processor/types/interfaces.d.ts +21 -44
  15. package/dist/processor-pieces/index.d.ts +3 -0
  16. package/dist/processor-pieces/index.js +3 -0
  17. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.d.ts +5 -14
  18. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.js +40 -41
  19. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.d.ts +13 -5
  20. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.js +58 -50
  21. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.d.ts +8 -6
  22. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.js +22 -66
  23. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.d.ts +2 -3
  24. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.js +2 -1
  25. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.d.ts +2 -3
  26. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.js +2 -1
  27. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +4 -1
  28. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.d.ts +2 -18
  29. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.js +93 -291
  30. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.d.ts +18 -0
  31. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.js +41 -0
  32. package/dist/processor-pieces/postToolCallProcessors/index.d.ts +2 -1
  33. package/dist/processor-pieces/postToolCallProcessors/index.js +5 -0
  34. package/dist/processor-pieces/preInferenceProcessors/index.d.ts +1 -1
  35. package/dist/processor-pieces/preInferenceProcessors/index.js +3 -0
  36. package/dist/processor-pieces/pretoolCallProcessors/index.d.ts +2 -1
  37. package/dist/processor-pieces/pretoolCallProcessors/index.js +5 -0
  38. package/dist/processor-pieces/pretoolCallProcessors/toolParameterModifier.d.ts +21 -0
  39. package/dist/processor-pieces/pretoolCallProcessors/toolParameterModifier.js +32 -0
  40. package/dist/processor-pieces/pretoolCallProcessors/toolValidationModifier.d.ts +16 -0
  41. package/dist/processor-pieces/pretoolCallProcessors/toolValidationModifier.js +37 -0
  42. package/dist/promptbuilder.d.ts +382 -0
  43. package/dist/promptbuilder.js +805 -0
  44. package/dist/systemprompt.d.ts +20 -0
  45. package/dist/systemprompt.js +48 -0
  46. package/dist/taskInstruction.d.ts +37 -0
  47. package/dist/taskInstruction.js +57 -0
  48. package/dist/types/libFunctionTypes.d.ts +13 -19
  49. package/dist/types/libFunctionTypes.js +3 -0
  50. package/dist/types/processorTypes.d.ts +8 -8
  51. package/dist/types/processorTypes.js +6 -23
  52. package/dist/unified/agent/agent.js +2 -2
  53. package/dist/unified/agent/codeboltAgent.d.ts +122 -0
  54. package/dist/unified/agent/codeboltAgent.js +210 -0
  55. package/dist/unified/base/initialPromptGenerator.js +18 -4
  56. package/dist/unified/base/responseExecutor.d.ts +3 -2
  57. package/dist/unified/base/responseExecutor.js +109 -56
  58. package/dist/unified/index.d.ts +4 -0
  59. package/dist/unified/index.js +12 -1
  60. package/dist/usermessage.d.ts +70 -0
  61. package/dist/usermessage.js +123 -0
  62. package/package.json +11 -6
  63. package/dist/local-tools/fileTools.d.ts +0 -26
  64. package/dist/local-tools/fileTools.js +0 -162
  65. package/dist/processor-pieces/additionalModifiers/argumentProcessorModifier.d.ts +0 -13
  66. package/dist/processor-pieces/additionalModifiers/argumentProcessorModifier.js +0 -68
  67. package/dist/processor-pieces/additionalModifiers/atFileProcessorModifier.d.ts +0 -15
  68. package/dist/processor-pieces/additionalModifiers/atFileProcessorModifier.js +0 -212
  69. package/dist/processor-pieces/additionalModifiers/chatCompressionModifier.d.ts +0 -19
  70. package/dist/processor-pieces/additionalModifiers/chatCompressionModifier.js +0 -110
  71. package/dist/processor-pieces/additionalModifiers/chatRecordingModifier.d.ts +0 -23
  72. package/dist/processor-pieces/additionalModifiers/chatRecordingModifier.js +0 -173
  73. package/dist/processor-pieces/additionalModifiers/coreSystemPromptModifier.d.ts +0 -14
  74. package/dist/processor-pieces/additionalModifiers/coreSystemPromptModifier.js +0 -93
  75. package/dist/processor-pieces/additionalModifiers/directoryContextModifier.d.ts +0 -30
  76. package/dist/processor-pieces/additionalModifiers/directoryContextModifier.js +0 -330
  77. package/dist/processor-pieces/additionalModifiers/environmentContextModifier.d.ts +0 -26
  78. package/dist/processor-pieces/additionalModifiers/environmentContextModifier.js +0 -269
  79. package/dist/processor-pieces/additionalModifiers/fallbackHandlerModifier.d.ts +0 -38
  80. package/dist/processor-pieces/additionalModifiers/fallbackHandlerModifier.js +0 -217
  81. package/dist/processor-pieces/additionalModifiers/ideContextModifier.d.ts +0 -34
  82. package/dist/processor-pieces/additionalModifiers/ideContextModifier.js +0 -147
  83. package/dist/processor-pieces/additionalModifiers/index.d.ts +0 -12
  84. package/dist/processor-pieces/additionalModifiers/index.js +0 -28
  85. package/dist/processor-pieces/additionalModifiers/loopDetectionModifier.d.ts +0 -29
  86. package/dist/processor-pieces/additionalModifiers/loopDetectionModifier.js +0 -155
  87. package/dist/processor-pieces/additionalModifiers/memoryImportModifier.d.ts +0 -15
  88. package/dist/processor-pieces/additionalModifiers/memoryImportModifier.js +0 -129
  89. package/dist/processor-pieces/additionalModifiers/shellProcessorModifier.d.ts +0 -25
  90. package/dist/processor-pieces/additionalModifiers/shellProcessorModifier.js +0 -169
  91. package/dist/processor-pieces/additionalModifiers/toolInjectionModifier.d.ts +0 -20
  92. package/dist/processor-pieces/additionalModifiers/toolInjectionModifier.js +0 -152
  93. package/dist/processor-pieces/messageModifiers/addCurrentDirectoryRootFilesModifier.d.ts +0 -7
  94. package/dist/processor-pieces/messageModifiers/addCurrentDirectoryRootFilesModifier.js +0 -93
  95. package/dist/processor-pieces/messageModifiers/advancedSystemInstructionMessageModifier.d.ts +0 -9
  96. package/dist/processor-pieces/messageModifiers/advancedSystemInstructionMessageModifier.js +0 -77
  97. package/dist/processor-pieces/messageModifiers/chatCompressionModifier.d.ts +0 -19
  98. package/dist/processor-pieces/messageModifiers/chatCompressionModifier.js +0 -110
  99. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.example.d.ts +0 -20
  100. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.example.js +0 -124
  101. package/dist/processor-pieces/messageModifiers/environmentContext.d.ts +0 -41
  102. package/dist/processor-pieces/messageModifiers/environmentContext.js +0 -355
  103. package/dist/processor-pieces/messageModifiers/mentionedFilesModifier.d.ts +0 -23
  104. package/dist/processor-pieces/messageModifiers/mentionedFilesModifier.js +0 -207
  105. package/dist/processor-pieces/messageModifiers/simpleMessageModifier.d.ts +0 -7
  106. package/dist/processor-pieces/messageModifiers/simpleMessageModifier.js +0 -26
  107. package/dist/processor-pieces/postInference/llmOutputValidityProcessor.d.ts +0 -1
  108. package/dist/processor-pieces/postInference/llmOutputValidityProcessor.js +0 -2
  109. package/dist/processor-pieces/postInferenceProcessors/checkForNoToolCall.d.ts +0 -7
  110. package/dist/processor-pieces/postInferenceProcessors/checkForNoToolCall.js +0 -24
  111. package/dist/processor-pieces/postToolCall/advancedLoopDetectionProcessor.d.ts +0 -41
  112. package/dist/processor-pieces/postToolCall/advancedLoopDetectionProcessor.js +0 -197
  113. package/dist/processor-pieces/postToolCall/chatCompressionProcessor.d.ts +0 -26
  114. package/dist/processor-pieces/postToolCall/chatCompressionProcessor.js +0 -90
  115. package/dist/processor-pieces/postToolCall/chatRecordingProcessor.d.ts +0 -81
  116. package/dist/processor-pieces/postToolCall/chatRecordingProcessor.js +0 -329
  117. package/dist/processor-pieces/postToolCall/contextManagementProcessor.d.ts +0 -40
  118. package/dist/processor-pieces/postToolCall/contextManagementProcessor.js +0 -272
  119. package/dist/processor-pieces/postToolCall/conversationCompactorProcessor.d.ts +0 -49
  120. package/dist/processor-pieces/postToolCall/conversationCompactorProcessor.js +0 -291
  121. package/dist/processor-pieces/postToolCall/conversationContinuityProcessor.d.ts +0 -49
  122. package/dist/processor-pieces/postToolCall/conversationContinuityProcessor.js +0 -293
  123. package/dist/processor-pieces/postToolCall/followUpConversationProcessor.d.ts +0 -47
  124. package/dist/processor-pieces/postToolCall/followUpConversationProcessor.js +0 -249
  125. package/dist/processor-pieces/postToolCall/loopDetectionProcessor.d.ts +0 -30
  126. package/dist/processor-pieces/postToolCall/loopDetectionProcessor.js +0 -137
  127. package/dist/processor-pieces/postToolCall/responseValidationProcessor.d.ts +0 -30
  128. package/dist/processor-pieces/postToolCall/responseValidationProcessor.js +0 -228
  129. package/dist/processor-pieces/postToolCall/telemetryProcessor.d.ts +0 -99
  130. package/dist/processor-pieces/postToolCall/telemetryProcessor.js +0 -278
  131. package/dist/processor-pieces/postToolCall/tokenManagementProcessor.d.ts +0 -37
  132. package/dist/processor-pieces/postToolCall/tokenManagementProcessor.js +0 -178
  133. package/dist/processor-pieces/postToolCall/toolExecutionProcessor.d.ts +0 -43
  134. package/dist/processor-pieces/postToolCall/toolExecutionProcessor.js +0 -207
  135. package/dist/processor-pieces/preInference/conversationCompactorProcessor.d.ts +0 -52
  136. package/dist/processor-pieces/preInference/conversationCompactorProcessor.js +0 -264
  137. package/dist/processor-pieces/preInference/conversationContinuityProcessor.d.ts +0 -49
  138. package/dist/processor-pieces/preInference/conversationContinuityProcessor.js +0 -293
  139. package/dist/processor-pieces/preInferenceProcessors/conversationCompaction.d.ts +0 -7
  140. package/dist/processor-pieces/preInferenceProcessors/conversationCompaction.js +0 -31
  141. package/dist/processor-pieces/preToolCall/index.d.ts +0 -9
  142. package/dist/processor-pieces/preToolCall/index.js +0 -18
  143. package/dist/processor-pieces/preToolCall/localToolInterceptorProcessor.d.ts +0 -58
  144. package/dist/processor-pieces/preToolCall/localToolInterceptorProcessor.js +0 -444
  145. package/dist/processor-pieces/preToolCall/toolParameterModifierProcessor.d.ts +0 -44
  146. package/dist/processor-pieces/preToolCall/toolParameterModifierProcessor.js +0 -367
  147. package/dist/processor-pieces/preToolCall/toolValidationProcessor.d.ts +0 -58
  148. package/dist/processor-pieces/preToolCall/toolValidationProcessor.js +0 -391
  149. package/dist/unified/agent/tool.d.ts +0 -99
  150. package/dist/unified/agent/tool.js +0 -440
  151. package/dist/unified/examples/agentExample.d.ts +0 -46
  152. package/dist/unified/examples/agentExample.js +0 -464
  153. package/dist/unified/examples/documentationPatternExample.d.ts +0 -10
  154. package/dist/unified/examples/documentationPatternExample.js +0 -385
  155. package/dist/unified/examples/followUpProcessorsExample.d.ts +0 -45
  156. package/dist/unified/examples/followUpProcessorsExample.js +0 -311
  157. package/dist/unified/examples/orchestratorExample.d.ts +0 -16
  158. package/dist/unified/examples/orchestratorExample.js +0 -415
  159. package/dist/unified/examples/preToolCallProcessorsExample.d.ts +0 -36
  160. package/dist/unified/examples/preToolCallProcessorsExample.js +0 -458
  161. package/dist/unified/examples/workflowExample.d.ts +0 -12
  162. package/dist/unified/examples/workflowExample.js +0 -497
  163. package/dist/unified/orchestrator/orchestrator.d.ts +0 -260
  164. package/dist/unified/orchestrator/orchestrator.js +0 -519
@@ -1,444 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LocalToolInterceptorProcessor = void 0;
4
- const processor_1 = require("../../processor");
5
- /**
6
- * Processor that intercepts specific tool calls and handles them locally
7
- * instead of sending them to external tool execution services.
8
- */
9
- class LocalToolInterceptorProcessor extends processor_1.BaseProcessor {
10
- constructor(options = {}) {
11
- super(options);
12
- this.localTools = options.localTools || new Map();
13
- this.enableCustomToolHandling = options.enableCustomToolHandling !== false;
14
- this.enableToolDelegation = options.enableToolDelegation !== false;
15
- this.defaultExecutionTimeout = options.defaultExecutionTimeout || 30000; // 30 seconds
16
- this.enableLogging = options.enableLogging !== false;
17
- }
18
- async processInput(input) {
19
- var _a;
20
- try {
21
- const { message, context } = input;
22
- // Check if this is a pre-tool call processing
23
- if (!(context === null || context === void 0 ? void 0 : context.preToolCallProcessing)) {
24
- return [this.createEvent('LocalToolInterceptionSkipped', {
25
- reason: 'Not a pre-tool call processing context'
26
- })];
27
- }
28
- const toolName = context.toolName;
29
- const toolInput = context.toolInput;
30
- const toolUseId = context.toolUseId;
31
- // Check if we should intercept this tool
32
- const shouldIntercept = this.shouldInterceptTool(toolName, toolInput, context);
33
- if (!shouldIntercept) {
34
- return [this.createEvent('LocalToolInterceptionSkipped', {
35
- toolName,
36
- reason: 'Tool not configured for local interception'
37
- })];
38
- }
39
- // Execute the tool locally
40
- const startTime = Date.now();
41
- const result = await this.executeLocalTool(toolName, toolInput, context);
42
- const executionTime = Date.now() - startTime;
43
- const interceptorInfo = {
44
- toolName,
45
- intercepted: true,
46
- executionMethod: this.getExecutionMethod(toolName),
47
- executionTime,
48
- result
49
- };
50
- return [
51
- this.createEvent('LocalToolIntercepted', interceptorInfo),
52
- this.createEvent('ToolIntercepted', {
53
- result,
54
- toolName,
55
- executionTime,
56
- userRejected: false
57
- })
58
- ];
59
- }
60
- catch (error) {
61
- console.error('Error in LocalToolInterceptorProcessor:', error);
62
- return [this.createEvent('LocalToolInterceptionError', {
63
- error: error instanceof Error ? error.message : String(error),
64
- toolName: (_a = input.context) === null || _a === void 0 ? void 0 : _a.toolName
65
- })];
66
- }
67
- }
68
- shouldInterceptTool(toolName, toolInput, context) {
69
- // Check if tool is in local tools registry
70
- if (this.localTools.has(toolName)) {
71
- return true;
72
- }
73
- // Check for custom tool patterns
74
- if (this.enableCustomToolHandling) {
75
- // Intercept tools with specific prefixes
76
- const customPrefixes = ['local--', 'custom--', 'internal--'];
77
- if (customPrefixes.some(prefix => toolName.startsWith(prefix))) {
78
- return true;
79
- }
80
- // Intercept specific tool types
81
- const localToolTypes = [
82
- 'file_read_local',
83
- 'file_write_local',
84
- 'execute_script_local',
85
- 'validate_data',
86
- 'transform_data',
87
- 'calculate',
88
- 'format_output'
89
- ];
90
- if (localToolTypes.includes(toolName)) {
91
- return true;
92
- }
93
- }
94
- return false;
95
- }
96
- async executeLocalTool(toolName, toolInput, context) {
97
- // Check if tool is in local registry
98
- if (this.localTools.has(toolName)) {
99
- const handler = this.localTools.get(toolName);
100
- return await this.executeToolHandler(handler, toolInput, context);
101
- }
102
- // Handle custom tool patterns
103
- if (toolName.startsWith('local--')) {
104
- return await this.handleLocalPrefixTool(toolName, toolInput, context);
105
- }
106
- if (toolName.startsWith('custom--')) {
107
- return await this.handleCustomPrefixTool(toolName, toolInput, context);
108
- }
109
- if (toolName.startsWith('internal--')) {
110
- return await this.handleInternalPrefixTool(toolName, toolInput, context);
111
- }
112
- // Handle specific local tool types
113
- switch (toolName) {
114
- case 'file_read_local':
115
- return await this.handleLocalFileRead(toolInput, context);
116
- case 'file_write_local':
117
- return await this.handleLocalFileWrite(toolInput, context);
118
- case 'execute_script_local':
119
- return await this.handleLocalScriptExecution(toolInput, context);
120
- case 'validate_data':
121
- return await this.handleDataValidation(toolInput, context);
122
- case 'transform_data':
123
- return await this.handleDataTransformation(toolInput, context);
124
- case 'calculate':
125
- return await this.handleCalculation(toolInput, context);
126
- case 'format_output':
127
- return await this.handleOutputFormatting(toolInput, context);
128
- default:
129
- throw new Error(`Unknown local tool: ${toolName}`);
130
- }
131
- }
132
- async executeToolHandler(handler, toolInput, context) {
133
- // Validate input if validator is provided
134
- if (handler.validate && !handler.validate(toolInput)) {
135
- throw new Error(`Invalid input for tool ${handler.name}`);
136
- }
137
- // Execute with timeout
138
- const timeout = handler.timeout || this.defaultExecutionTimeout;
139
- const timeoutPromise = new Promise((_, reject) => {
140
- setTimeout(() => reject(new Error(`Tool execution timeout: ${handler.name}`)), timeout);
141
- });
142
- const executionPromise = Promise.resolve(handler.execute(toolInput, context));
143
- try {
144
- const result = await Promise.race([executionPromise, timeoutPromise]);
145
- return typeof result === 'string' ? result : JSON.stringify(result);
146
- }
147
- catch (error) {
148
- throw new Error(`Tool execution failed: ${error instanceof Error ? error.message : String(error)}`);
149
- }
150
- }
151
- async handleLocalPrefixTool(toolName, toolInput, context) {
152
- const actualToolName = toolName.replace('local--', '');
153
- if (this.enableLogging) {
154
- console.log(`[LocalToolInterceptor] Handling local tool: ${actualToolName}`);
155
- }
156
- // Simple local tool implementations
157
- switch (actualToolName) {
158
- case 'echo':
159
- return `Local echo: ${JSON.stringify(toolInput)}`;
160
- case 'timestamp':
161
- return `Current timestamp: ${new Date().toISOString()}`;
162
- case 'uuid':
163
- return `Generated UUID: ${this.generateUUID()}`;
164
- case 'hash':
165
- return `Hash of input: ${this.simpleHash(JSON.stringify(toolInput))}`;
166
- default:
167
- return `Local tool executed: ${actualToolName} with input: ${JSON.stringify(toolInput)}`;
168
- }
169
- }
170
- async handleCustomPrefixTool(toolName, toolInput, context) {
171
- const actualToolName = toolName.replace('custom--', '');
172
- if (this.enableLogging) {
173
- console.log(`[LocalToolInterceptor] Handling custom tool: ${actualToolName}`);
174
- }
175
- // Custom tool implementations can be added here
176
- return `Custom tool ${actualToolName} executed with result: ${JSON.stringify(toolInput)}`;
177
- }
178
- async handleInternalPrefixTool(toolName, toolInput, context) {
179
- const actualToolName = toolName.replace('internal--', '');
180
- if (this.enableLogging) {
181
- console.log(`[LocalToolInterceptor] Handling internal tool: ${actualToolName}`);
182
- }
183
- // Internal tool implementations
184
- switch (actualToolName) {
185
- case 'context_info':
186
- return `Context information: ${JSON.stringify(context, null, 2)}`;
187
- case 'memory_usage':
188
- return `Memory usage: ${JSON.stringify(process.memoryUsage(), null, 2)}`;
189
- case 'environment':
190
- return `Environment: ${process.env.NODE_ENV || 'development'}`;
191
- default:
192
- return `Internal tool ${actualToolName} executed`;
193
- }
194
- }
195
- async handleLocalFileRead(toolInput, context) {
196
- const filePath = toolInput.filePath || toolInput.path;
197
- if (!filePath) {
198
- throw new Error('File path is required for local file read');
199
- }
200
- try {
201
- const fs = await import('fs/promises');
202
- const content = await fs.readFile(filePath, 'utf-8');
203
- return `File read successfully: ${filePath}\nContent length: ${content.length} characters`;
204
- }
205
- catch (error) {
206
- throw new Error(`Failed to read file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
207
- }
208
- }
209
- async handleLocalFileWrite(toolInput, context) {
210
- const filePath = toolInput.filePath || toolInput.path;
211
- const content = toolInput.content;
212
- if (!filePath || content === undefined) {
213
- throw new Error('File path and content are required for local file write');
214
- }
215
- try {
216
- const fs = await import('fs/promises');
217
- await fs.writeFile(filePath, content, 'utf-8');
218
- return `File written successfully: ${filePath}\nContent length: ${content.length} characters`;
219
- }
220
- catch (error) {
221
- throw new Error(`Failed to write file ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
222
- }
223
- }
224
- async handleLocalScriptExecution(toolInput, context) {
225
- const script = toolInput.script;
226
- const args = toolInput.args || [];
227
- if (!script) {
228
- throw new Error('Script is required for local script execution');
229
- }
230
- // For security, only allow specific safe scripts
231
- const allowedScripts = ['echo', 'date', 'pwd', 'ls'];
232
- if (!allowedScripts.includes(script)) {
233
- throw new Error(`Script not allowed for local execution: ${script}`);
234
- }
235
- try {
236
- const { exec } = await import('child_process');
237
- const { promisify } = await import('util');
238
- const execAsync = promisify(exec);
239
- const command = `${script} ${args.join(' ')}`;
240
- const { stdout, stderr } = await execAsync(command);
241
- return `Script executed: ${command}\nOutput: ${stdout}${stderr ? `\nError: ${stderr}` : ''}`;
242
- }
243
- catch (error) {
244
- throw new Error(`Script execution failed: ${error instanceof Error ? error.message : String(error)}`);
245
- }
246
- }
247
- async handleDataValidation(toolInput, context) {
248
- const data = toolInput.data;
249
- const schema = toolInput.schema;
250
- if (!data) {
251
- throw new Error('Data is required for validation');
252
- }
253
- // Simple validation logic
254
- const validationResults = {
255
- isValid: true,
256
- errors: [],
257
- warnings: []
258
- };
259
- if (schema) {
260
- // Basic schema validation
261
- if (schema.required && Array.isArray(schema.required)) {
262
- schema.required.forEach((field) => {
263
- if (!(field in data)) {
264
- validationResults.isValid = false;
265
- validationResults.errors.push(`Required field missing: ${field}`);
266
- }
267
- });
268
- }
269
- }
270
- return `Data validation completed: ${validationResults.isValid ? 'VALID' : 'INVALID'}\n${JSON.stringify(validationResults, null, 2)}`;
271
- }
272
- async handleDataTransformation(toolInput, context) {
273
- const data = toolInput.data;
274
- const transformation = toolInput.transformation;
275
- if (!data || !transformation) {
276
- throw new Error('Data and transformation are required');
277
- }
278
- let result = data;
279
- // Apply transformations
280
- switch (transformation.type) {
281
- case 'uppercase':
282
- result = typeof data === 'string' ? data.toUpperCase() : JSON.stringify(data).toUpperCase();
283
- break;
284
- case 'lowercase':
285
- result = typeof data === 'string' ? data.toLowerCase() : JSON.stringify(data).toLowerCase();
286
- break;
287
- case 'reverse':
288
- result = typeof data === 'string' ? data.split('').reverse().join('') : JSON.stringify(data);
289
- break;
290
- case 'sort':
291
- if (Array.isArray(data)) {
292
- result = [...data].sort();
293
- }
294
- break;
295
- default:
296
- result = data;
297
- }
298
- return `Data transformation completed: ${transformation.type}\nResult: ${JSON.stringify(result)}`;
299
- }
300
- async handleCalculation(toolInput, context) {
301
- const expression = toolInput.expression;
302
- const values = toolInput.values || {};
303
- if (!expression) {
304
- throw new Error('Expression is required for calculation');
305
- }
306
- try {
307
- // Simple calculator for basic operations
308
- let result;
309
- if (expression.includes('+')) {
310
- const [a, b] = expression.split('+').map(x => parseFloat(x.trim()));
311
- result = a + b;
312
- }
313
- else if (expression.includes('-')) {
314
- const [a, b] = expression.split('-').map(x => parseFloat(x.trim()));
315
- result = a - b;
316
- }
317
- else if (expression.includes('*')) {
318
- const [a, b] = expression.split('*').map(x => parseFloat(x.trim()));
319
- result = a * b;
320
- }
321
- else if (expression.includes('/')) {
322
- const [a, b] = expression.split('/').map(x => parseFloat(x.trim()));
323
- result = a / b;
324
- }
325
- else {
326
- result = parseFloat(expression);
327
- }
328
- return `Calculation result: ${expression} = ${result}`;
329
- }
330
- catch (error) {
331
- throw new Error(`Calculation failed: ${error instanceof Error ? error.message : String(error)}`);
332
- }
333
- }
334
- async handleOutputFormatting(toolInput, context) {
335
- const data = toolInput.data;
336
- const format = toolInput.format || 'json';
337
- if (!data) {
338
- throw new Error('Data is required for output formatting');
339
- }
340
- try {
341
- let formattedOutput;
342
- switch (format.toLowerCase()) {
343
- case 'json':
344
- formattedOutput = JSON.stringify(data, null, 2);
345
- break;
346
- case 'yaml':
347
- // Simple YAML-like formatting
348
- formattedOutput = this.toYamlLike(data);
349
- break;
350
- case 'csv':
351
- formattedOutput = this.toCsv(data);
352
- break;
353
- case 'table':
354
- formattedOutput = this.toTable(data);
355
- break;
356
- default:
357
- formattedOutput = String(data);
358
- }
359
- return `Output formatted as ${format}:\n${formattedOutput}`;
360
- }
361
- catch (error) {
362
- throw new Error(`Output formatting failed: ${error instanceof Error ? error.message : String(error)}`);
363
- }
364
- }
365
- getExecutionMethod(toolName) {
366
- if (this.localTools.has(toolName)) {
367
- return 'local';
368
- }
369
- if (toolName.startsWith('custom--')) {
370
- return 'custom';
371
- }
372
- return 'delegated';
373
- }
374
- generateUUID() {
375
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
376
- const r = Math.random() * 16 | 0;
377
- const v = c === 'x' ? r : (r & 0x3 | 0x8);
378
- return v.toString(16);
379
- });
380
- }
381
- simpleHash(str) {
382
- let hash = 0;
383
- for (let i = 0; i < str.length; i++) {
384
- const char = str.charCodeAt(i);
385
- hash = ((hash << 5) - hash) + char;
386
- hash = hash & hash; // Convert to 32-bit integer
387
- }
388
- return hash.toString(16);
389
- }
390
- toYamlLike(data, indent = 0) {
391
- const spaces = ' '.repeat(indent);
392
- if (typeof data === 'object' && data !== null) {
393
- if (Array.isArray(data)) {
394
- return data.map(item => `${spaces}- ${this.toYamlLike(item, indent + 1)}`).join('\n');
395
- }
396
- else {
397
- return Object.entries(data)
398
- .map(([key, value]) => `${spaces}${key}: ${this.toYamlLike(value, indent + 1)}`)
399
- .join('\n');
400
- }
401
- }
402
- return String(data);
403
- }
404
- toCsv(data) {
405
- if (Array.isArray(data) && data.length > 0) {
406
- const headers = Object.keys(data[0]);
407
- const csvHeaders = headers.join(',');
408
- const csvRows = data.map(row => headers.map(header => JSON.stringify(row[header] || '')).join(','));
409
- return [csvHeaders, ...csvRows].join('\n');
410
- }
411
- return JSON.stringify(data);
412
- }
413
- toTable(data) {
414
- if (Array.isArray(data) && data.length > 0) {
415
- const headers = Object.keys(data[0]);
416
- const headerRow = '| ' + headers.join(' | ') + ' |';
417
- const separatorRow = '|' + headers.map(() => '---').join('|') + '|';
418
- const dataRows = data.map(row => '| ' + headers.map(header => String(row[header] || '')).join(' | ') + ' |');
419
- return [headerRow, separatorRow, ...dataRows].join('\n');
420
- }
421
- return JSON.stringify(data, null, 2);
422
- }
423
- // Public methods for tool management
424
- addLocalTool(handler) {
425
- this.localTools.set(handler.name, handler);
426
- if (this.enableLogging) {
427
- console.log(`[LocalToolInterceptor] Added local tool: ${handler.name}`);
428
- }
429
- }
430
- removeLocalTool(toolName) {
431
- const removed = this.localTools.delete(toolName);
432
- if (removed && this.enableLogging) {
433
- console.log(`[LocalToolInterceptor] Removed local tool: ${toolName}`);
434
- }
435
- return removed;
436
- }
437
- getLocalTools() {
438
- return Array.from(this.localTools.keys());
439
- }
440
- hasLocalTool(toolName) {
441
- return this.localTools.has(toolName);
442
- }
443
- }
444
- exports.LocalToolInterceptorProcessor = LocalToolInterceptorProcessor;
@@ -1,44 +0,0 @@
1
- import { BaseProcessor, ProcessorInput, ProcessorOutput } from '../../processor';
2
- export interface ToolParameterModificationInfo {
3
- toolName: string;
4
- originalParameters: any;
5
- modifiedParameters: any;
6
- modificationsApplied: string[];
7
- transformationsApplied: string[];
8
- }
9
- export interface ParameterTransformation {
10
- name: string;
11
- condition?: (toolName: string, params: any) => boolean;
12
- transform: (params: any, context?: Record<string, any>) => any;
13
- description?: string;
14
- }
15
- export interface ToolParameterModifierProcessorOptions {
16
- enableParameterTransformation?: boolean;
17
- enableParameterEnrichment?: boolean;
18
- enableParameterSanitization?: boolean;
19
- transformations?: ParameterTransformation[];
20
- defaultTransformations?: boolean;
21
- enableLogging?: boolean;
22
- }
23
- /**
24
- * Processor that modifies tool parameters before execution, applying transformations,
25
- * enrichments, and sanitization to improve tool execution.
26
- */
27
- export declare class ToolParameterModifierProcessor extends BaseProcessor {
28
- private readonly enableParameterTransformation;
29
- private readonly enableParameterEnrichment;
30
- private readonly enableParameterSanitization;
31
- private readonly transformations;
32
- private readonly enableLogging;
33
- constructor(options?: ToolParameterModifierProcessorOptions);
34
- processInput(input: ProcessorInput): Promise<ProcessorOutput[]>;
35
- private modifyParameters;
36
- private sanitizeParameters;
37
- private enrichParameters;
38
- private getDefaultTransformations;
39
- private deepClone;
40
- addTransformation(transformation: ParameterTransformation): void;
41
- removeTransformation(name: string): boolean;
42
- getTransformations(): string[];
43
- hasTransformation(name: string): boolean;
44
- }