@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,8 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.InitialPromptGenerator = void 0;
4
7
  exports.createUnifiedMessageProcessor = createUnifiedMessageProcessor;
5
8
  const types_1 = require("../types/types");
9
+ const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
6
10
  /**
7
11
  * Initial prompt generator that combines message modifiers with unified processing
8
12
  */
@@ -50,10 +54,20 @@ class InitialPromptGenerator {
50
54
  // Continue with other modifiers
51
55
  }
52
56
  }
53
- createdMessage.message.messages.push({
54
- role: 'assistant',
55
- content: "Got it. Thanks for the context!"
56
- });
57
+ const lastMessage = createdMessage.message.messages[createdMessage.message.messages.length - 1];
58
+ if (!lastMessage || lastMessage.role !== 'system') {
59
+ createdMessage.message.messages.push({
60
+ role: 'assistant',
61
+ content: "Got it. Thanks for the context!"
62
+ });
63
+ }
64
+ let { todos } = await codeboltjs_1.default.todo.getAllIncompleteTodos();
65
+ if (todos && todos.length == 0) {
66
+ createdMessage.message.messages.push({
67
+ role: 'user',
68
+ content: "<system-reminder>\nThis is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware. If you are working on tasks that would benefit from a todo list please use the TodoWrite tool to create one. If not, please feel free to ignore. Again do not mention this message to the user.\n</system-reminder>"
69
+ });
70
+ }
57
71
  createdMessage.message.messages.push({
58
72
  role: 'user',
59
73
  content: content.trim()
@@ -1,10 +1,11 @@
1
1
  import { AgentResponseExecutor, PostToolCallProcessor, PreToolCallProcessor, ResponseInput, ResponseOutput } from '@codebolt/types/agent';
2
2
  export declare class ResponseExecutor implements AgentResponseExecutor {
3
- private preToolCalProcessors;
3
+ private preToolCallProcessors;
4
4
  private postToolCallProcessors;
5
5
  private completed;
6
+ private finalMessage;
6
7
  constructor(options: {
7
- preToolCalProcessors: PreToolCallProcessor[];
8
+ preToolCallProcessors: PreToolCallProcessor[];
8
9
  postToolCallProcessors: PostToolCallProcessor[];
9
10
  });
10
11
  executeResponse(input: ResponseInput): Promise<ResponseOutput>;
@@ -7,15 +7,16 @@ exports.ResponseExecutor = void 0;
7
7
  const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
8
8
  class ResponseExecutor {
9
9
  constructor(options) {
10
- this.preToolCalProcessors = [];
10
+ this.preToolCallProcessors = [];
11
11
  this.postToolCallProcessors = [];
12
12
  this.completed = false;
13
- this.preToolCalProcessors = options.preToolCalProcessors;
13
+ this.finalMessage = undefined;
14
+ this.preToolCallProcessors = options.preToolCallProcessors;
14
15
  this.postToolCallProcessors = options.postToolCallProcessors;
15
16
  }
16
17
  async executeResponse(input) {
17
18
  let nextMessage = input.nextMessage;
18
- for (const preToolCallProcessor of this.preToolCalProcessors) {
19
+ for (const preToolCallProcessor of this.preToolCallProcessors) {
19
20
  try {
20
21
  // TODO: Extract required properties from input for PreToolCallProcessorInput
21
22
  let { nextPrompt, shouldExit } = await preToolCallProcessor.modify({ llmMessageSent: input.actualMessageSentToLLM, rawLLMResponseMessage: input.rawLLMOutput, nextPrompt: input.nextMessage });
@@ -81,7 +82,8 @@ class ResponseExecutor {
81
82
  return {
82
83
  completed: this.completed,
83
84
  nextMessage: nextMessage,
84
- toolResults: toolResults
85
+ toolResults: toolResults,
86
+ finalMessage: this.finalMessage
85
87
  };
86
88
  }
87
89
  /**
@@ -107,9 +109,11 @@ class ResponseExecutor {
107
109
  var _a, _b;
108
110
  try {
109
111
  let fallBackMessages = [];
112
+ let lastMessageContent;
110
113
  for (const contentBlock of llmResponse.choices || []) {
111
114
  if (contentBlock.message) {
112
115
  if (contentBlock.message.content != null) {
116
+ lastMessageContent = contentBlock.message.content;
113
117
  await codeboltjs_1.default.chat.sendMessage(contentBlock.message.content, {});
114
118
  }
115
119
  }
@@ -120,77 +124,111 @@ class ResponseExecutor {
120
124
  let userRejectedToolUse = false;
121
125
  const contentBlock = (_a = llmResponse.choices) === null || _a === void 0 ? void 0 : _a[0];
122
126
  if (contentBlock && ((_b = contentBlock.message) === null || _b === void 0 ? void 0 : _b.tool_calls)) {
127
+ const toolsToExecute = [];
128
+ // First pass: Parse all tools and identify "attempt_completion"
123
129
  for (const tool of contentBlock.message.tool_calls) {
130
+ const { toolInput, toolName, toolUseId } = this.getToolDetail(tool);
131
+ if (toolName.includes("attempt_completion")) {
132
+ taskCompletedBlock = tool;
133
+ this.completed = true;
134
+ }
135
+ else {
136
+ toolsToExecute.push({
137
+ tool,
138
+ toolInput,
139
+ toolName,
140
+ toolUseId,
141
+ waitForPrevious: (toolInput === null || toolInput === void 0 ? void 0 : toolInput.waitForPreviousTools) === true
142
+ });
143
+ }
144
+ }
145
+ // Second pass: Execute tools sequentially (one by one)
146
+ for (const item of toolsToExecute) {
124
147
  try {
125
- const { toolInput, toolName, toolUseId } = this.getToolDetail(tool);
126
148
  if (!userRejectedToolUse) {
127
- if (toolName.includes("attempt_completion")) {
128
- taskCompletedBlock = tool;
129
- this.completed = true;
149
+ let [serverName] = item.toolName.replace('--', ':').split(':');
150
+ // codebolt.chat.sendMessage(`tool call ${serverName} ${item.toolName} ${item.toolInput}`, {});
151
+ if (serverName == 'subagent') {
152
+ const agentResponse = await codeboltjs_1.default.agent.startAgent(item.toolName.replace("subagent--", ''), item.toolInput.task);
153
+ const [didUserReject, result] = [false, "tool result is successful"];
154
+ let toolResult = this.parseToolResult(item.toolUseId, result);
155
+ // Handle side effects (fallback messages)
156
+ if (toolResult.userMessage) {
157
+ fallBackMessages.push({
158
+ role: "user",
159
+ content: toolResult.userMessage.toString()
160
+ });
161
+ }
162
+ if (didUserReject) {
163
+ userRejectedToolUse = true;
164
+ }
165
+ toolResults.push({
166
+ role: "tool",
167
+ tool_call_id: toolResult.tool_call_id,
168
+ content: toolResult.content,
169
+ });
170
+ }
171
+ else if (item.toolName == "codebolt--thread_management") {
172
+ codeboltjs_1.default.chat.sendMessage(JSON.stringify({
173
+ title: item.toolInput.title || item.toolInput.task || 'Background Thread',
174
+ description: item.toolInput.description || item.toolInput.task || '',
175
+ userMessage: item.toolInput.task || item.toolInput.userMessage || '',
176
+ selectedAgent: item.toolInput.selectedAgent,
177
+ isGrouped: item.toolInput.isGrouped,
178
+ groupId: item.toolInput.groupId,
179
+ }));
180
+ const response = await codeboltjs_1.default.thread.createThreadInBackground({
181
+ title: item.toolInput.title || item.toolInput.task || 'Background Thread',
182
+ description: item.toolInput.description || item.toolInput.task || '',
183
+ userMessage: item.toolInput.task || item.toolInput.userMessage || '',
184
+ selectedAgent: item.toolInput.selectedAgent,
185
+ isGrouped: item.toolInput.isGrouped,
186
+ groupId: item.toolInput.groupId,
187
+ });
188
+ toolResults.push({
189
+ role: "tool",
190
+ tool_call_id: item.toolUseId,
191
+ content: JSON.stringify(response),
192
+ });
130
193
  }
131
194
  else {
132
- let [serverName] = toolName.replace('--', ':').split(':');
133
- if (serverName == 'subagent') {
134
- const agentResponse = await codeboltjs_1.default.agent.startAgent(toolName.replace("subagent--", ''), toolInput.task);
135
- const [didUserReject, result] = [false, "tool result is successful"];
136
- let toolResult = this.parseToolResult(toolUseId, result);
137
- toolResults.push({
138
- role: "tool",
139
- tool_call_id: toolResult.tool_call_id,
140
- content: toolResult.content,
195
+ const [didUserReject, result] = await this.executeTool(item.toolName, item.toolInput);
196
+ let toolResult = this.parseToolResult(item.toolUseId, result);
197
+ if (toolResult.userMessage) {
198
+ fallBackMessages.push({
199
+ role: "user",
200
+ content: toolResult.userMessage.toString()
141
201
  });
142
- if (toolResult.userMessage) {
143
- fallBackMessages.push({
144
- role: "user",
145
- content: toolResult.userMessage.toString()
146
- });
147
- }
148
- if (didUserReject) {
149
- userRejectedToolUse = true;
150
- }
151
202
  }
152
- else {
153
- // console.log("Executing tool: ", toolName, toolInput);
154
- const [didUserReject, result] = await this.executeTool(toolName, toolInput);
155
- // console.log("Tool result: ", result);
156
- // toolResults.push(this.parseToolResult(toolUseId, result));
157
- let toolResult = this.parseToolResult(toolUseId, result);
158
- toolResults.push({
159
- role: "tool",
160
- tool_call_id: toolResult.tool_call_id,
161
- content: toolResult.content,
162
- });
163
- if (toolResult.userMessage) {
164
- fallBackMessages.push({
165
- role: "user",
166
- content: toolResult.userMessage.toString()
167
- });
168
- }
169
- if (didUserReject) {
170
- userRejectedToolUse = true;
171
- }
203
+ if (didUserReject) {
204
+ userRejectedToolUse = true;
172
205
  }
206
+ toolResults.push({
207
+ role: "tool",
208
+ tool_call_id: toolResult.tool_call_id,
209
+ content: toolResult.content,
210
+ });
173
211
  }
174
212
  }
175
213
  else {
176
- let toolResult = this.parseToolResult(toolUseId, "Skipping tool execution due to previous tool user rejection.");
177
- toolResults.push({
178
- role: "tool",
179
- tool_call_id: toolResult.tool_call_id,
180
- content: toolResult.content,
181
- });
214
+ let toolResult = this.parseToolResult(item.toolUseId, "Skipping tool execution due to previous tool user rejection.");
182
215
  if (toolResult.userMessage) {
183
216
  fallBackMessages.push({
184
217
  role: "user",
185
218
  content: toolResult.userMessage.toString()
186
219
  });
187
220
  }
221
+ toolResults.push({
222
+ role: "tool",
223
+ tool_call_id: toolResult.tool_call_id,
224
+ content: toolResult.content,
225
+ });
188
226
  }
189
227
  }
190
228
  catch (error) {
191
229
  toolResults.push({
192
230
  role: "tool",
193
- tool_call_id: tool.id,
231
+ tool_call_id: item.tool.id,
194
232
  content: String(error),
195
233
  });
196
234
  }
@@ -198,9 +236,18 @@ class ResponseExecutor {
198
236
  }
199
237
  else {
200
238
  this.completed = true;
239
+ // Set final message from agent's last text response when completing without tool calls
240
+ if (lastMessageContent) {
241
+ this.finalMessage = lastMessageContent;
242
+ }
201
243
  }
202
244
  if (taskCompletedBlock) {
203
- let [_, result] = await this.executeTool(taskCompletedBlock.function.name, JSON.parse(taskCompletedBlock.function.arguments || "{}"));
245
+ const completionArgs = JSON.parse(taskCompletedBlock.function.arguments || "{}");
246
+ // Capture the final message from attempt_completion
247
+ if (completionArgs.result) {
248
+ this.finalMessage = completionArgs.result;
249
+ }
250
+ let [_, result] = await this.executeTool(taskCompletedBlock.function.name, completionArgs);
204
251
  if (result === "") {
205
252
  // this.completed = true;
206
253
  result = "The user is satisfied with the result.";
@@ -241,6 +288,12 @@ class ResponseExecutor {
241
288
  // console.log("Toolbox name: ", toolboxName, "Actual tool name: ", actualToolName);
242
289
  const { data } = await codeboltjs_1.default.mcp.executeTool(toolboxName, actualToolName, toolInput);
243
290
  // console.log("Tool result: ", data);
291
+ // Handle the case where data is an array [didUserReject, content]
292
+ if (Array.isArray(data) && data.length >= 2) {
293
+ const [didUserReject, content] = data;
294
+ return [Boolean(didUserReject), content];
295
+ }
296
+ // If data is not in the expected array format, return it as-is
244
297
  return [false, data];
245
298
  }
246
299
  /**
@@ -271,13 +324,13 @@ class ResponseExecutor {
271
324
  };
272
325
  }
273
326
  setPreToolCallProcessors(processors) {
274
- this.preToolCalProcessors = processors;
327
+ this.preToolCallProcessors = processors;
275
328
  }
276
329
  setPostToolCallProcessors(processors) {
277
330
  this.postToolCallProcessors = processors;
278
331
  }
279
332
  getPreToolCallProcessors() {
280
- return this.preToolCalProcessors;
333
+ return this.preToolCallProcessors;
281
334
  }
282
335
  getPostToolCallProcessors() {
283
336
  return this.postToolCallProcessors;
@@ -14,5 +14,9 @@ export { createDefaultMessageProcessor } from './base/create/createInitialPrompt
14
14
  export { InitialPromptGenerator } from './base/initialPromptGenerator';
15
15
  export { AgentStep } from './base/agentStep';
16
16
  export { ResponseExecutor } from './base/responseExecutor';
17
+ export { Agent } from './agent/agent';
18
+ export { CodeboltAgent, createCodeboltAgent, type CodeboltAgentConfig } from './agent/codeboltAgent';
19
+ export { Tool, createTool } from './agent/tools';
20
+ export { Workflow } from './agent/workflow';
17
21
  export { type OpenAIMessage, type OpenAITool, type ToolResult, type CodeboltAPI, type AgentExecutionResult, type StreamChunk, type StreamCallback } from './types/libTypes';
18
22
  export { type LLMConfig } from './types/libTypes';
@@ -10,7 +10,7 @@
10
10
  * The framework is designed to be modular, extensible, and easy to use.
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.ResponseExecutor = exports.AgentStep = exports.InitialPromptGenerator = exports.createDefaultMessageProcessor = exports.UnifiedToolExecutionError = exports.UnifiedResponseExecutionError = exports.UnifiedStepExecutionError = exports.UnifiedMessageProcessingError = exports.UnifiedAgentError = void 0;
13
+ exports.Workflow = exports.createTool = exports.Tool = exports.createCodeboltAgent = exports.CodeboltAgent = exports.Agent = exports.ResponseExecutor = exports.AgentStep = exports.InitialPromptGenerator = exports.createDefaultMessageProcessor = exports.UnifiedToolExecutionError = exports.UnifiedResponseExecutionError = exports.UnifiedStepExecutionError = exports.UnifiedMessageProcessingError = exports.UnifiedAgentError = void 0;
14
14
  // Error types
15
15
  var types_1 = require("./types/types");
16
16
  Object.defineProperty(exports, "UnifiedAgentError", { enumerable: true, get: function () { return types_1.UnifiedAgentError; } });
@@ -27,6 +27,17 @@ var agentStep_1 = require("./base/agentStep");
27
27
  Object.defineProperty(exports, "AgentStep", { enumerable: true, get: function () { return agentStep_1.AgentStep; } });
28
28
  var responseExecutor_1 = require("./base/responseExecutor");
29
29
  Object.defineProperty(exports, "ResponseExecutor", { enumerable: true, get: function () { return responseExecutor_1.ResponseExecutor; } });
30
+ // Agent framework components
31
+ var agent_1 = require("./agent/agent");
32
+ Object.defineProperty(exports, "Agent", { enumerable: true, get: function () { return agent_1.Agent; } });
33
+ var codeboltAgent_1 = require("./agent/codeboltAgent");
34
+ Object.defineProperty(exports, "CodeboltAgent", { enumerable: true, get: function () { return codeboltAgent_1.CodeboltAgent; } });
35
+ Object.defineProperty(exports, "createCodeboltAgent", { enumerable: true, get: function () { return codeboltAgent_1.createCodeboltAgent; } });
36
+ var tools_1 = require("./agent/tools");
37
+ Object.defineProperty(exports, "Tool", { enumerable: true, get: function () { return tools_1.Tool; } });
38
+ Object.defineProperty(exports, "createTool", { enumerable: true, get: function () { return tools_1.createTool; } });
39
+ var workflow_1 = require("./agent/workflow");
40
+ Object.defineProperty(exports, "Workflow", { enumerable: true, get: function () { return workflow_1.Workflow; } });
30
41
  // Workflow step factories
31
42
  // Orchestrator system
32
43
  // export {
@@ -0,0 +1,70 @@
1
+ import type { UserMessageContent } from "./types/libFunctionTypes";
2
+ import type { Agent } from "./types/commonTypes";
3
+ import type { Message } from "./types/InternalTypes";
4
+ /**
5
+ * Class that processes and manages user messages.
6
+ * Handles converting messages to prompts and extracting mentioned entities.
7
+ */
8
+ declare class UserMessage {
9
+ /** The message content and metadata */
10
+ message: Message;
11
+ /** Whether to override the default prompt generation */
12
+ promptOverride: boolean;
13
+ /** Array of content blocks for the user message */
14
+ userMessages: UserMessageContent[];
15
+ /** List of MCP tools mentioned in the message */
16
+ mentionedMCPs: {
17
+ toolbox: string;
18
+ toolName: string;
19
+ }[];
20
+ /**
21
+ * Creates a new UserMessage instance.
22
+ *
23
+ * @param message - The message content and metadata
24
+ * @param promptOverride - Whether to override default prompt generation
25
+ */
26
+ constructor(message: Message, promptOverride?: boolean);
27
+ /**
28
+ * Gets files mentioned in the message.
29
+ * Currently a placeholder for implementation.
30
+ */
31
+ getFiles(): void;
32
+ /**
33
+ * Converts the user message to a prompt format.
34
+ *
35
+ * @param bAttachFiles - Whether to attach file contents
36
+ * @param bAttachImages - Whether to attach images
37
+ * @param bAttachEnvironment - Whether to attach environment details
38
+ * @returns Promise with an array of content blocks for the prompt
39
+ */
40
+ toPrompt(bAttachFiles?: boolean, bAttachImages?: boolean, bAttachEnvironment?: boolean, supportRemix?: boolean): Promise<UserMessageContent[]>;
41
+ /**
42
+ * Gets agents mentioned in the message.
43
+ *
44
+ * @returns Array of agent objects
45
+ */
46
+ getMentionedAgents(): Agent[];
47
+ /**
48
+ * Gets MCP tools mentioned in the message.
49
+ *
50
+ * @returns Array of MCP tool names
51
+ */
52
+ getMentionedMcps(): {
53
+ toolbox: string;
54
+ toolName: string;
55
+ }[];
56
+ /**
57
+ * Gets MCP tools in a format suitable for the LLM.
58
+ *
59
+ * @returns Promise with an array of MCP tools
60
+ */
61
+ getMentionedMcpsTools(): Promise<any[] | undefined>;
62
+ /**
63
+ * Gets environment details for the current working directory.
64
+ *
65
+ * @param cwd - The current working directory path
66
+ * @returns Promise with a string containing environment details
67
+ */
68
+ private getEnvironmentDetail;
69
+ }
70
+ export { UserMessage };
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UserMessage = void 0;
7
+ const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
8
+ const { fs: cbfs, project, mcp } = codeboltjs_1.default;
9
+ // All interfaces moved to appropriate type files
10
+ /**
11
+ * Class that processes and manages user messages.
12
+ * Handles converting messages to prompts and extracting mentioned entities.
13
+ */
14
+ class UserMessage {
15
+ /**
16
+ * Creates a new UserMessage instance.
17
+ *
18
+ * @param message - The message content and metadata
19
+ * @param promptOverride - Whether to override default prompt generation
20
+ */
21
+ constructor(message, promptOverride = false) {
22
+ /**
23
+ * Gets environment details for the current working directory.
24
+ *
25
+ * @param cwd - The current working directory path
26
+ * @returns Promise with a string containing environment details
27
+ */
28
+ this.getEnvironmentDetail = async (cwd) => {
29
+ let details = "";
30
+ const { success, result } = await cbfs.listFile(cwd, true);
31
+ details += `\n\n# Current Working Directory (${cwd}) Files\n${result}
32
+ ? "\n(Note: Only top-level contents shown for Desktop by default. Use list_files to explore further if necessary.)"
33
+ : ""
34
+ }`;
35
+ return `<environment_details>\n${details.trim()}\n</environment_details>`;
36
+ };
37
+ this.message = message;
38
+ this.promptOverride = promptOverride;
39
+ this.userMessages = [];
40
+ this.mentionedMCPs = message.mentionedMCPs || [];
41
+ }
42
+ /**
43
+ * Gets files mentioned in the message.
44
+ * Currently a placeholder for implementation.
45
+ */
46
+ getFiles() {
47
+ // Implementation to be added
48
+ }
49
+ /**
50
+ * Converts the user message to a prompt format.
51
+ *
52
+ * @param bAttachFiles - Whether to attach file contents
53
+ * @param bAttachImages - Whether to attach images
54
+ * @param bAttachEnvironment - Whether to attach environment details
55
+ * @returns Promise with an array of content blocks for the prompt
56
+ */
57
+ async toPrompt(bAttachFiles = true, bAttachImages = true, bAttachEnvironment = true, supportRemix = true) {
58
+ var _a;
59
+ if (bAttachFiles) {
60
+ if (this.promptOverride) {
61
+ // Use a rendering engine
62
+ }
63
+ else {
64
+ let finalPrompt = `
65
+ The user has sent the following query:
66
+ <user_query> ${this.message.userMessage} </user_query>.
67
+ `;
68
+ if ((_a = this.message.mentionedFiles) === null || _a === void 0 ? void 0 : _a.length) {
69
+ finalPrompt += `The Attached files are:`;
70
+ for (const file of this.message.mentionedFiles) {
71
+ let filedata = await cbfs.readFile(file);
72
+ finalPrompt += `File Name: ${file}, File Path: ${file}, Filedata: ${filedata}`;
73
+ }
74
+ }
75
+ this.userMessages.push({ type: "text", text: finalPrompt });
76
+ }
77
+ }
78
+ if (bAttachEnvironment) {
79
+ let { projectPath } = await project.getProjectPath();
80
+ if (projectPath) {
81
+ const environmentDetail = await this.getEnvironmentDetail(projectPath);
82
+ this.userMessages.push({ type: "text", text: environmentDetail });
83
+ }
84
+ }
85
+ if (supportRemix) {
86
+ if (this.message.remixPrompt)
87
+ this.userMessages.push({ type: "text", text: this.message.remixPrompt });
88
+ }
89
+ return this.userMessages;
90
+ }
91
+ /**
92
+ * Gets agents mentioned in the message.
93
+ *
94
+ * @returns Array of agent objects
95
+ */
96
+ getMentionedAgents() {
97
+ //TODO : get config in tool format if neede
98
+ return this.message.mentionedAgents || [];
99
+ }
100
+ /**
101
+ * Gets MCP tools mentioned in the message.
102
+ *
103
+ * @returns Array of MCP tool names
104
+ */
105
+ getMentionedMcps() {
106
+ return this.message.mentionedMCPs || [];
107
+ }
108
+ /**
109
+ * Gets MCP tools in a format suitable for the LLM.
110
+ *
111
+ * @returns Promise with an array of MCP tools
112
+ */
113
+ async getMentionedMcpsTools() {
114
+ if (this.mentionedMCPs.length > 0) {
115
+ const { data } = await mcp.getTools(this.mentionedMCPs);
116
+ return data;
117
+ }
118
+ else {
119
+ return [];
120
+ }
121
+ }
122
+ }
123
+ exports.UserMessage = UserMessage;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codebolt/agent",
3
- "version": "5.0.2",
3
+ "version": "5.0.7",
4
4
  "description": "CodeBolt Agent utilities for building and managing AI agents",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -30,19 +30,21 @@
30
30
  "dependencies": {
31
31
  "js-yaml": "^4.1.0",
32
32
  "zod": "^3.22.4",
33
- "@codebolt/types": "1.0.22"
33
+ "@codebolt/types": "5.0.7"
34
34
  },
35
35
  "peerDependencies": {
36
- "@codebolt/codeboltjs": "5.0.2"
36
+ "@codebolt/codeboltjs": "5.0.7"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/js-yaml": "^4.0.9",
40
40
  "@types/node": "^20.14.2",
41
41
  "@types/uri-templates": "^0.1.34",
42
42
  "@types/ws": "^8.5.10",
43
+ "typedoc": "0.28.16",
44
+ "typedoc-plugin-markdown": "4.9.0",
43
45
  "typescript": "^5.4.5",
44
- "@codebolt/codeboltjs": "5.0.2",
45
- "@codebolt/types": "1.0.22"
46
+ "@codebolt/types": "5.0.7",
47
+ "@codebolt/codeboltjs": "5.0.7"
46
48
  },
47
49
  "exports": {
48
50
  "./builder": {
@@ -71,6 +73,9 @@
71
73
  "clean": "rm -rf dist",
72
74
  "dev": "tsc --watch",
73
75
  "test": "echo \"No tests yet, but build passes\" && exit 0",
74
- "lint:test": "eslint src/**/*.ts && tsc --noEmit"
76
+ "lint:test": "eslint src/**/*.ts && tsc --noEmit",
77
+ "docs": "node script/gen-docusaurus-agent-types.js",
78
+ "docs:clean": "node script/gen-docusaurus-agent-types.js --clean",
79
+ "docs:watch": "node script/gen-docusaurus-agent-types.js --watch"
75
80
  }
76
81
  }
@@ -1,26 +0,0 @@
1
- import { BaseTool } from '../processor';
2
- export declare class FileReadTool extends BaseTool {
3
- constructor();
4
- execute(params: any, abortSignal?: AbortSignal): Promise<string>;
5
- protected validateParameters(params: any): boolean;
6
- }
7
- export declare class FileWriteTool extends BaseTool {
8
- constructor();
9
- execute(params: any, abortSignal?: AbortSignal): Promise<string>;
10
- protected validateParameters(params: any): boolean;
11
- }
12
- export declare class FileDeleteTool extends BaseTool {
13
- constructor();
14
- execute(params: any, abortSignal?: AbortSignal): Promise<string>;
15
- protected validateParameters(params: any): boolean;
16
- }
17
- export declare class FileMoveTool extends BaseTool {
18
- constructor();
19
- execute(params: any, abortSignal?: AbortSignal): Promise<string>;
20
- protected validateParameters(params: any): boolean;
21
- }
22
- export declare class FileCopyTool extends BaseTool {
23
- constructor();
24
- execute(params: any, abortSignal?: AbortSignal): Promise<string>;
25
- protected validateParameters(params: any): boolean;
26
- }