@codebolt/agent 6.1.19 → 6.1.21

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 (47) hide show
  1. package/README.md +19 -10
  2. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.js +11 -15
  3. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.d.ts +0 -1
  4. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.js +16 -33
  5. package/dist/processor-pieces/messageModifiers/capabilityContextModifier.js +3 -2
  6. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.d.ts +7 -0
  7. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.js +135 -27
  8. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.js +3 -3
  9. package/dist/processor-pieces/messageModifiers/contextAssemblyModifier.js +18 -12
  10. package/dist/processor-pieces/messageModifiers/directoryContextModifier.d.ts +1 -0
  11. package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +15 -15
  12. package/dist/processor-pieces/messageModifiers/environmentContextModifier.d.ts +1 -0
  13. package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +48 -2
  14. package/dist/processor-pieces/messageModifiers/ideContextModifier.js +3 -2
  15. package/dist/processor-pieces/messageModifiers/memoryImportModifier.js +9 -15
  16. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +17 -20
  17. package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.js +8 -19
  18. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.d.ts +1 -1
  19. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.js +15 -15
  20. package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.js +3 -3
  21. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +2 -2
  22. package/dist/processor-pieces/utils/messageModifierHelper.js +3 -3
  23. package/dist/types/libFunctionTypes.d.ts +5 -0
  24. package/dist/unified/agent/agent.d.ts +69 -2
  25. package/dist/unified/agent/agent.js +370 -48
  26. package/dist/unified/agent/tools.d.ts +17 -3
  27. package/dist/unified/agent/tools.js +82 -51
  28. package/dist/unified/base/agentStep.d.ts +1 -0
  29. package/dist/unified/base/agentStep.js +39 -11
  30. package/dist/unified/base/initialPromptGenerator.d.ts +2 -0
  31. package/dist/unified/base/initialPromptGenerator.js +98 -20
  32. package/dist/unified/base/promptContext.d.ts +3 -0
  33. package/dist/unified/base/promptContext.js +193 -15
  34. package/dist/unified/base/responseExecutor.d.ts +9 -1
  35. package/dist/unified/base/responseExecutor.js +248 -68
  36. package/dist/unified/index.d.ts +1 -2
  37. package/dist/unified/index.js +2 -4
  38. package/dist/unified/services/CompressionCoordinator.js +9 -9
  39. package/dist/unified/services/compaction/autoCompact.js +5 -5
  40. package/dist/unified/services/compaction/contextCollapse.js +2 -2
  41. package/dist/unified/services/compaction/reactiveCompact.js +5 -5
  42. package/dist/unified/types/libTypes.d.ts +6 -0
  43. package/dist/unified/utils/agentToolLoader.d.ts +10 -0
  44. package/dist/unified/utils/agentToolLoader.js +90 -24
  45. package/package.json +5 -1
  46. package/dist/unified/agent/codeboltAgent.d.ts +0 -61
  47. package/dist/unified/agent/codeboltAgent.js +0 -334
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isGeneratedUserContextMessage = isGeneratedUserContextMessage;
3
4
  exports.syncProcessedMessageWithRuntimeContext = syncProcessedMessageWithRuntimeContext;
4
5
  exports.reconcileRuntimePromptContext = reconcileRuntimePromptContext;
5
6
  exports.setSystemPrompt = setSystemPrompt;
@@ -10,6 +11,8 @@ exports.appendTranscriptMessages = appendTranscriptMessages;
10
11
  exports.prependTranscriptMessages = prependTranscriptMessages;
11
12
  exports.replaceTranscriptMessages = replaceTranscriptMessages;
12
13
  exports.getTranscriptMessages = getTranscriptMessages;
14
+ exports.getCurrentUserMessage = getCurrentUserMessage;
15
+ exports.updateCurrentUserMessage = updateCurrentUserMessage;
13
16
  exports.buildInferenceParams = buildInferenceParams;
14
17
  const RUNTIME_CONTEXT_METADATA_KEY = '__codeboltRuntimePromptContext';
15
18
  function cloneContent(content) {
@@ -31,6 +34,90 @@ function cloneMessage(message) {
31
34
  function cloneMessages(messages) {
32
35
  return messages.map((message) => cloneMessage(message));
33
36
  }
37
+ function textFromContent(content) {
38
+ if (typeof content === 'string') {
39
+ return content;
40
+ }
41
+ try {
42
+ return JSON.stringify(content);
43
+ }
44
+ catch {
45
+ return String(content);
46
+ }
47
+ }
48
+ function normalizeTextPart(content) {
49
+ return {
50
+ type: 'text',
51
+ text: textFromContent(content),
52
+ };
53
+ }
54
+ function appendContent(existingContent, additionalContent) {
55
+ if (typeof existingContent === 'string' && typeof additionalContent === 'string') {
56
+ return `${existingContent}\n\n${additionalContent}`;
57
+ }
58
+ const existingParts = Array.isArray(existingContent)
59
+ ? [...existingContent]
60
+ : [normalizeTextPart(existingContent)];
61
+ const additionalParts = Array.isArray(additionalContent)
62
+ ? [...additionalContent]
63
+ : [normalizeTextPart(additionalContent)];
64
+ return [...existingParts, ...additionalParts];
65
+ }
66
+ function messagesHaveSameContent(firstMessage, secondMessage) {
67
+ return firstMessage.role === secondMessage.role &&
68
+ textFromContent(firstMessage.content) === textFromContent(secondMessage.content);
69
+ }
70
+ function getTextContent(message) {
71
+ if (typeof message.content === 'string') {
72
+ return message.content.trim();
73
+ }
74
+ if (!Array.isArray(message.content)) {
75
+ return '';
76
+ }
77
+ return message.content
78
+ .map((contentPart) => {
79
+ if (contentPart &&
80
+ typeof contentPart === 'object' &&
81
+ !Array.isArray(contentPart) &&
82
+ contentPart.type === 'text' &&
83
+ typeof contentPart.text === 'string') {
84
+ return contentPart.text;
85
+ }
86
+ return '';
87
+ })
88
+ .join('\n')
89
+ .trim();
90
+ }
91
+ function isGeneratedUserContextMessage(message) {
92
+ if (message.role !== 'user') {
93
+ return false;
94
+ }
95
+ const content = getTextContent(message);
96
+ if (!content) {
97
+ return false;
98
+ }
99
+ return content.startsWith('<flags>') ||
100
+ content.startsWith('<system-reminder>') ||
101
+ content.startsWith('This is the CodeBolt AI Agent. Setting up context for our chat.') ||
102
+ content.startsWith("I'm currently working in the effective project directory:") ||
103
+ content.startsWith('The user selected the following capabilities for this turn:') ||
104
+ content.startsWith('## Assembled Context') ||
105
+ content.startsWith('## Rule-Based Context');
106
+ }
107
+ function resolveCurrentUserMessageIndex(runtimeContext) {
108
+ var _a, _b;
109
+ const currentIndex = runtimeContext.currentUserMessageIndex;
110
+ if (currentIndex !== undefined &&
111
+ ((_a = runtimeContext.transcriptMessages[currentIndex]) === null || _a === void 0 ? void 0 : _a.role) === 'user') {
112
+ return currentIndex;
113
+ }
114
+ for (let i = runtimeContext.transcriptMessages.length - 1; i >= 0; i--) {
115
+ if (((_b = runtimeContext.transcriptMessages[i]) === null || _b === void 0 ? void 0 : _b.role) === 'user') {
116
+ return i;
117
+ }
118
+ }
119
+ return -1;
120
+ }
34
121
  function buildSystemMessages(runtimeContext) {
35
122
  const stringSections = [];
36
123
  const nonStringSystemMessages = [];
@@ -55,17 +142,22 @@ function buildSystemMessages(runtimeContext) {
55
142
  return flattenedSystemMessages;
56
143
  }
57
144
  function flattenRuntimeMessages(runtimeContext) {
145
+ const transcriptMessages = cloneMessages(runtimeContext.transcriptMessages);
146
+ const currentUserMessageIndex = resolveCurrentUserMessageIndex(runtimeContext);
147
+ if (runtimeContext.currentUserContextMessage && currentUserMessageIndex !== -1) {
148
+ transcriptMessages.splice(currentUserMessageIndex, 0, cloneMessage(runtimeContext.currentUserContextMessage));
149
+ }
58
150
  return [
59
151
  ...buildSystemMessages(runtimeContext),
60
152
  ...cloneMessages(runtimeContext.userContextMessages),
61
- ...cloneMessages(runtimeContext.transcriptMessages),
153
+ ...transcriptMessages,
62
154
  ];
63
155
  }
64
156
  function inferRuntimeContext(prompt) {
65
157
  var _a;
66
- const messages = (_a = prompt.message.messages) !== null && _a !== void 0 ? _a : [];
158
+ const messages = (_a = prompt.message.input) !== null && _a !== void 0 ? _a : [];
67
159
  const systemMessages = messages.filter((message) => message.role === 'system');
68
- const transcriptMessages = messages.filter((message) => message.role !== 'system');
160
+ const transcriptMessages = messages.filter((message) => message.role !== 'system' && !isGeneratedUserContextMessage(message));
69
161
  let systemPrompt;
70
162
  const systemContextMessages = [];
71
163
  if (systemMessages.length > 0) {
@@ -83,6 +175,8 @@ function inferRuntimeContext(prompt) {
83
175
  systemContextMessages,
84
176
  userContextMessages: [],
85
177
  transcriptMessages: cloneMessages(transcriptMessages),
178
+ currentUserContextMessage: undefined,
179
+ currentUserMessageIndex: undefined,
86
180
  };
87
181
  }
88
182
  function getRuntimePromptContext(prompt) {
@@ -97,6 +191,12 @@ function getRuntimePromptContext(prompt) {
97
191
  systemContextMessages: cloneMessages(runtimeContext.systemContextMessages),
98
192
  userContextMessages: cloneMessages(runtimeContext.userContextMessages),
99
193
  transcriptMessages: cloneMessages(runtimeContext.transcriptMessages),
194
+ currentUserContextMessage: runtimeContext.currentUserContextMessage
195
+ ? cloneMessage(runtimeContext.currentUserContextMessage)
196
+ : undefined,
197
+ currentUserMessageIndex: typeof runtimeContext.currentUserMessageIndex === 'number'
198
+ ? runtimeContext.currentUserMessageIndex
199
+ : undefined,
100
200
  };
101
201
  }
102
202
  function ensureRuntimePromptContext(prompt) {
@@ -108,7 +208,8 @@ function withRuntimePromptContext(prompt, runtimeContext) {
108
208
  ...prompt,
109
209
  message: {
110
210
  ...prompt.message,
111
- messages: flattenRuntimeMessages(runtimeContext),
211
+ formatVersion: 'codebolt.llm.v2',
212
+ input: flattenRuntimeMessages(runtimeContext),
112
213
  },
113
214
  metadata: {
114
215
  ...prompt.metadata,
@@ -117,6 +218,10 @@ function withRuntimePromptContext(prompt, runtimeContext) {
117
218
  systemContextMessages: cloneMessages(runtimeContext.systemContextMessages),
118
219
  userContextMessages: cloneMessages(runtimeContext.userContextMessages),
119
220
  transcriptMessages: cloneMessages(runtimeContext.transcriptMessages),
221
+ currentUserContextMessage: runtimeContext.currentUserContextMessage
222
+ ? cloneMessage(runtimeContext.currentUserContextMessage)
223
+ : undefined,
224
+ currentUserMessageIndex: runtimeContext.currentUserMessageIndex,
120
225
  },
121
226
  },
122
227
  };
@@ -130,14 +235,26 @@ function reconcileRuntimePromptContext(prompt) {
130
235
  if (!runtimeContext) {
131
236
  return syncProcessedMessageWithRuntimeContext(prompt);
132
237
  }
133
- const flattenedMessages = (_a = prompt.message.messages) !== null && _a !== void 0 ? _a : [];
134
- const transcriptStartIndex = (runtimeContext.systemPrompt ? 1 : 0) +
135
- runtimeContext.systemContextMessages.length +
238
+ const flattenedMessages = (_a = prompt.message.input) !== null && _a !== void 0 ? _a : [];
239
+ const transcriptStartIndex = buildSystemMessages(runtimeContext).length +
136
240
  runtimeContext.userContextMessages.length;
137
241
  const normalizedTranscriptStartIndex = Math.min(transcriptStartIndex, flattenedMessages.length);
242
+ const candidateTranscriptMessages = cloneMessages(flattenedMessages.slice(normalizedTranscriptStartIndex));
243
+ const possibleCurrentUserContextMessageIndex = runtimeContext.currentUserMessageIndex;
244
+ const possibleCurrentUserContextMessage = possibleCurrentUserContextMessageIndex === undefined
245
+ ? undefined
246
+ : candidateTranscriptMessages[possibleCurrentUserContextMessageIndex];
247
+ if (runtimeContext.currentUserContextMessage &&
248
+ possibleCurrentUserContextMessageIndex !== undefined &&
249
+ possibleCurrentUserContextMessage &&
250
+ messagesHaveSameContent(possibleCurrentUserContextMessage, runtimeContext.currentUserContextMessage)) {
251
+ candidateTranscriptMessages.splice(possibleCurrentUserContextMessageIndex, 1);
252
+ }
138
253
  return withRuntimePromptContext(prompt, {
139
254
  ...runtimeContext,
140
- transcriptMessages: cloneMessages(flattenedMessages.slice(normalizedTranscriptStartIndex)),
255
+ transcriptMessages: candidateTranscriptMessages,
256
+ currentUserContextMessage: runtimeContext.currentUserContextMessage,
257
+ currentUserMessageIndex: runtimeContext.currentUserMessageIndex,
141
258
  });
142
259
  }
143
260
  function setSystemPrompt(prompt, systemPrompt) {
@@ -159,19 +276,44 @@ function appendSystemContextMessage(prompt, message) {
159
276
  }
160
277
  function appendUserContextMessage(prompt, message) {
161
278
  const runtimeContext = ensureRuntimePromptContext(prompt);
279
+ const currentUserMessageIndex = resolveCurrentUserMessageIndex(runtimeContext);
280
+ if (currentUserMessageIndex === -1) {
281
+ return withRuntimePromptContext(prompt, {
282
+ ...runtimeContext,
283
+ userContextMessages: [
284
+ ...runtimeContext.userContextMessages,
285
+ cloneMessage(message),
286
+ ],
287
+ });
288
+ }
289
+ if (runtimeContext.currentUserContextMessage) {
290
+ return withRuntimePromptContext(prompt, {
291
+ ...runtimeContext,
292
+ currentUserContextMessage: {
293
+ ...runtimeContext.currentUserContextMessage,
294
+ content: appendContent(runtimeContext.currentUserContextMessage.content, message.content),
295
+ },
296
+ currentUserMessageIndex,
297
+ });
298
+ }
162
299
  return withRuntimePromptContext(prompt, {
163
300
  ...runtimeContext,
164
- userContextMessages: [
165
- ...runtimeContext.userContextMessages,
166
- cloneMessage(message),
167
- ],
301
+ currentUserContextMessage: cloneMessage(message),
302
+ currentUserMessageIndex,
168
303
  });
169
304
  }
170
305
  function appendTranscriptMessage(prompt, message) {
171
306
  const runtimeContext = ensureRuntimePromptContext(prompt);
307
+ const transcriptMessages = [...runtimeContext.transcriptMessages, cloneMessage(message)];
172
308
  return withRuntimePromptContext(prompt, {
173
309
  ...runtimeContext,
174
- transcriptMessages: [...runtimeContext.transcriptMessages, cloneMessage(message)],
310
+ transcriptMessages,
311
+ currentUserMessageIndex: message.role === 'user'
312
+ ? transcriptMessages.length - 1
313
+ : runtimeContext.currentUserMessageIndex,
314
+ currentUserContextMessage: message.role === 'user'
315
+ ? undefined
316
+ : runtimeContext.currentUserContextMessage,
175
317
  });
176
318
  }
177
319
  function appendTranscriptMessages(prompt, messages) {
@@ -186,12 +328,17 @@ function appendTranscriptMessages(prompt, messages) {
186
328
  }
187
329
  function prependTranscriptMessages(prompt, messages) {
188
330
  const runtimeContext = ensureRuntimePromptContext(prompt);
331
+ const prependedMessages = cloneMessages(messages);
189
332
  return withRuntimePromptContext(prompt, {
190
333
  ...runtimeContext,
191
334
  transcriptMessages: [
192
- ...cloneMessages(messages),
335
+ ...prependedMessages,
193
336
  ...runtimeContext.transcriptMessages,
194
337
  ],
338
+ currentUserContextMessage: runtimeContext.currentUserContextMessage,
339
+ currentUserMessageIndex: runtimeContext.currentUserMessageIndex === undefined
340
+ ? undefined
341
+ : runtimeContext.currentUserMessageIndex + prependedMessages.length,
195
342
  });
196
343
  }
197
344
  function replaceTranscriptMessages(prompt, messages) {
@@ -199,15 +346,46 @@ function replaceTranscriptMessages(prompt, messages) {
199
346
  return withRuntimePromptContext(prompt, {
200
347
  ...runtimeContext,
201
348
  transcriptMessages: cloneMessages(messages),
349
+ currentUserContextMessage: undefined,
350
+ currentUserMessageIndex: undefined,
202
351
  });
203
352
  }
204
353
  function getTranscriptMessages(prompt) {
205
354
  return cloneMessages(ensureRuntimePromptContext(prompt).transcriptMessages);
206
355
  }
356
+ function getCurrentUserMessage(prompt) {
357
+ const runtimeContext = ensureRuntimePromptContext(prompt);
358
+ const currentUserMessageIndex = resolveCurrentUserMessageIndex(runtimeContext);
359
+ if (currentUserMessageIndex === -1) {
360
+ return undefined;
361
+ }
362
+ const message = runtimeContext.transcriptMessages[currentUserMessageIndex];
363
+ return message ? cloneMessage(message) : undefined;
364
+ }
365
+ function updateCurrentUserMessage(prompt, update) {
366
+ const runtimeContext = ensureRuntimePromptContext(prompt);
367
+ const currentUserMessageIndex = resolveCurrentUserMessageIndex(runtimeContext);
368
+ if (currentUserMessageIndex === -1) {
369
+ return prompt;
370
+ }
371
+ const currentUserMessage = runtimeContext.transcriptMessages[currentUserMessageIndex];
372
+ if (!currentUserMessage) {
373
+ return prompt;
374
+ }
375
+ const transcriptMessages = cloneMessages(runtimeContext.transcriptMessages);
376
+ transcriptMessages[currentUserMessageIndex] = update(cloneMessage(currentUserMessage));
377
+ return withRuntimePromptContext(prompt, {
378
+ ...runtimeContext,
379
+ transcriptMessages,
380
+ currentUserContextMessage: runtimeContext.currentUserContextMessage,
381
+ currentUserMessageIndex,
382
+ });
383
+ }
207
384
  function buildInferenceParams(prompt) {
208
385
  const runtimeContext = ensureRuntimePromptContext(prompt);
209
386
  return {
210
387
  ...prompt.message,
211
- messages: flattenRuntimeMessages(runtimeContext),
388
+ formatVersion: 'codebolt.llm.v2',
389
+ input: flattenRuntimeMessages(runtimeContext),
212
390
  };
213
391
  }
@@ -1,4 +1,4 @@
1
- import { AgentResponseExecutor, PostToolCallProcessor, PreToolCallProcessor, ResponseInput, ResponseOutput } from '@codebolt/types/agent';
1
+ import { AgentResponseExecutor, AgentLocalTool, PostToolCallProcessor, PreToolCallProcessor, ResponseInput, ResponseOutput } from '@codebolt/types/agent';
2
2
  import { LoopDetectionService } from '../services/LoopDetectionService';
3
3
  export declare class ResponseExecutor implements AgentResponseExecutor {
4
4
  private preToolCallProcessors;
@@ -6,10 +6,12 @@ export declare class ResponseExecutor implements AgentResponseExecutor {
6
6
  private completed;
7
7
  private finalMessage;
8
8
  private loopDetectionService;
9
+ private localToolsByExecutionName;
9
10
  constructor(options: {
10
11
  preToolCallProcessors: PreToolCallProcessor[];
11
12
  postToolCallProcessors: PostToolCallProcessor[];
12
13
  loopDetectionService?: LoopDetectionService;
14
+ localToolsByExecutionName?: Map<string, AgentLocalTool>;
13
15
  });
14
16
  executeResponse(input: ResponseInput): Promise<ResponseOutput>;
15
17
  private parseToolCall;
@@ -17,8 +19,14 @@ export declare class ResponseExecutor implements AgentResponseExecutor {
17
19
  private getToolCalls;
18
20
  private hasExecutableToolCalls;
19
21
  private runRequiredCompaction;
22
+ private buildToolResultMessages;
23
+ private refreshNextMessageFromCompactedContext;
24
+ private extractCompactedContextMessages;
25
+ private isMessageObject;
26
+ private getMessagesAddedAfterInference;
20
27
  private executeTools;
21
28
  private sendFinalMessageToChat;
29
+ private getPendingAsyncTasks;
22
30
  private extractCompletionMessage;
23
31
  private formatCompletionValue;
24
32
  private executeSingleToolCall;