@codebolt/agent 5.0.7 → 5.0.9

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 (160) hide show
  1. package/dist/processor-pieces/base/basePreToolCallProcessor.js +5 -2
  2. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.d.ts +1 -1
  3. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.js +2 -2
  4. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.js +24 -34
  5. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.d.ts +1 -1
  6. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.js +2 -2
  7. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.d.ts +1 -1
  8. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.js +2 -2
  9. package/dist/processor-pieces/messageModifiers/directoryContextModifier.d.ts +1 -1
  10. package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +8 -3
  11. package/dist/processor-pieces/messageModifiers/environmentContextModifier.d.ts +1 -1
  12. package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +1 -1
  13. package/dist/processor-pieces/messageModifiers/ideContextModifier.js +114 -17
  14. package/dist/processor-pieces/messageModifiers/memoryImportModifier.d.ts +1 -1
  15. package/dist/processor-pieces/messageModifiers/memoryImportModifier.js +13 -5
  16. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.d.ts +5 -0
  17. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +4 -0
  18. package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.js +24 -8
  19. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.d.ts +202 -5
  20. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.js +826 -19
  21. package/dist/processor-pieces/postToolCallProcessors/index.d.ts +1 -1
  22. package/dist/processor-pieces/postToolCallProcessors/index.js +2 -1
  23. package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.js +7 -4
  24. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.d.ts +1 -1
  25. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +12 -16
  26. package/dist/processor-pieces/pretoolCallProcessors/toolParameterModifier.d.ts +2 -3
  27. package/dist/processor-pieces/pretoolCallProcessors/toolParameterModifier.js +1 -2
  28. package/dist/processor-pieces/utils/messageModifierHelper.js +5 -2
  29. package/dist/types/InternalTypes.d.ts +8 -6
  30. package/dist/unified/agent/agent.js +1 -2
  31. package/dist/unified/agent/codeboltAgent.d.ts +23 -2
  32. package/dist/unified/agent/codeboltAgent.js +55 -12
  33. package/dist/unified/agent/tools.d.ts +7 -11
  34. package/dist/unified/agent/tools.js +12 -3
  35. package/dist/unified/agent/workflow.js +38 -20
  36. package/dist/unified/agent/workflowSteps.d.ts +1 -1
  37. package/dist/unified/agent/workflowSteps.js +58 -23
  38. package/dist/unified/base/agentStep.js +20 -1
  39. package/dist/unified/base/initialPromptGenerator.js +3 -1
  40. package/dist/unified/base/responseExecutor.d.ts +3 -0
  41. package/dist/unified/base/responseExecutor.js +47 -21
  42. package/dist/unified/index.d.ts +1 -0
  43. package/dist/unified/index.js +4 -1
  44. package/dist/unified/services/LoopDetectionService.d.ts +44 -0
  45. package/dist/unified/services/LoopDetectionService.js +79 -0
  46. package/dist/unified/utils/utils.d.ts +20 -1
  47. package/dist/unified/utils/utils.js +8 -4
  48. package/package.json +5 -5
  49. package/dist/agent.d.ts +0 -86
  50. package/dist/agent.js +0 -324
  51. package/dist/builderpattern/agent.d.ts +0 -86
  52. package/dist/builderpattern/agent.js +0 -324
  53. package/dist/builderpattern/followupquestionbuilder.d.ts +0 -75
  54. package/dist/builderpattern/followupquestionbuilder.js +0 -197
  55. package/dist/builderpattern/index.d.ts +0 -14
  56. package/dist/builderpattern/index.js +0 -23
  57. package/dist/builderpattern/llmoutputhandler.d.ts +0 -102
  58. package/dist/builderpattern/llmoutputhandler.js +0 -452
  59. package/dist/builderpattern/promptbuilder.d.ts +0 -382
  60. package/dist/builderpattern/promptbuilder.js +0 -805
  61. package/dist/builderpattern/systemprompt.d.ts +0 -20
  62. package/dist/builderpattern/systemprompt.js +0 -48
  63. package/dist/builderpattern/taskInstruction.d.ts +0 -37
  64. package/dist/builderpattern/taskInstruction.js +0 -57
  65. package/dist/builderpattern/usermessage.d.ts +0 -70
  66. package/dist/builderpattern/usermessage.js +0 -123
  67. package/dist/composablepattern/agent.d.ts +0 -169
  68. package/dist/composablepattern/agent.js +0 -598
  69. package/dist/composablepattern/codebolt-storage.d.ts +0 -67
  70. package/dist/composablepattern/codebolt-storage.js +0 -320
  71. package/dist/composablepattern/document.d.ts +0 -149
  72. package/dist/composablepattern/document.js +0 -405
  73. package/dist/composablepattern/examples/codebolt-integration-example.d.ts +0 -12
  74. package/dist/composablepattern/examples/codebolt-integration-example.js +0 -218
  75. package/dist/composablepattern/examples/codebolt-storage-example.d.ts +0 -40
  76. package/dist/composablepattern/examples/codebolt-storage-example.js +0 -223
  77. package/dist/composablepattern/examples/custom-steps-example.d.ts +0 -20
  78. package/dist/composablepattern/examples/custom-steps-example.js +0 -455
  79. package/dist/composablepattern/examples/document-agent.d.ts +0 -17
  80. package/dist/composablepattern/examples/document-agent.js +0 -107
  81. package/dist/composablepattern/examples/simple-codebolt-integration.d.ts +0 -8
  82. package/dist/composablepattern/examples/simple-codebolt-integration.js +0 -164
  83. package/dist/composablepattern/examples/weather-agent.d.ts +0 -18
  84. package/dist/composablepattern/examples/weather-agent.js +0 -86
  85. package/dist/composablepattern/examples/workflow-example.d.ts +0 -12
  86. package/dist/composablepattern/examples/workflow-example.js +0 -463
  87. package/dist/composablepattern/index.d.ts +0 -63
  88. package/dist/composablepattern/index.js +0 -115
  89. package/dist/composablepattern/memory.d.ts +0 -89
  90. package/dist/composablepattern/memory.js +0 -141
  91. package/dist/composablepattern/tool.d.ts +0 -84
  92. package/dist/composablepattern/tool.js +0 -260
  93. package/dist/composablepattern/types.d.ts +0 -194
  94. package/dist/composablepattern/types.js +0 -6
  95. package/dist/composablepattern/user-context.d.ts +0 -214
  96. package/dist/composablepattern/user-context.js +0 -275
  97. package/dist/composablepattern/workflow.d.ts +0 -388
  98. package/dist/composablepattern/workflow.js +0 -562
  99. package/dist/followupquestionbuilder.d.ts +0 -75
  100. package/dist/followupquestionbuilder.js +0 -197
  101. package/dist/index.d.ts +0 -14
  102. package/dist/index.js +0 -23
  103. package/dist/llmoutputhandler.d.ts +0 -102
  104. package/dist/llmoutputhandler.js +0 -452
  105. package/dist/processor/agent/agentStep.d.ts +0 -49
  106. package/dist/processor/agent/agentStep.js +0 -241
  107. package/dist/processor/agent/toolExecutor.d.ts +0 -19
  108. package/dist/processor/agent/toolExecutor.js +0 -90
  109. package/dist/processor/index.d.ts +0 -7
  110. package/dist/processor/index.js +0 -36
  111. package/dist/processor/messageModifiers/baseMessageModifier.d.ts +0 -20
  112. package/dist/processor/messageModifiers/baseMessageModifier.js +0 -55
  113. package/dist/processor/processors/baseProcessor.d.ts +0 -14
  114. package/dist/processor/processors/baseProcessor.js +0 -29
  115. package/dist/processor/tools/baseTool.d.ts +0 -10
  116. package/dist/processor/tools/baseTool.js +0 -20
  117. package/dist/processor/tools/toolList.d.ts +0 -9
  118. package/dist/processor/tools/toolList.js +0 -22
  119. package/dist/processor/types/interfaces.d.ts +0 -94
  120. package/dist/processor/types/interfaces.js +0 -2
  121. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.d.ts +0 -22
  122. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.js +0 -144
  123. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.d.ts +0 -15
  124. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.js +0 -75
  125. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.d.ts +0 -11
  126. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.js +0 -46
  127. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.d.ts +0 -12
  128. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.js +0 -60
  129. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.d.ts +0 -18
  130. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.js +0 -222
  131. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.d.ts +0 -22
  132. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.js +0 -194
  133. package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.d.ts +0 -41
  134. package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.js +0 -197
  135. package/dist/processor-pieces/processors/chatCompressionProcessor.d.ts +0 -26
  136. package/dist/processor-pieces/processors/chatCompressionProcessor.js +0 -90
  137. package/dist/processor-pieces/processors/chatRecordingProcessor.d.ts +0 -81
  138. package/dist/processor-pieces/processors/chatRecordingProcessor.js +0 -329
  139. package/dist/processor-pieces/processors/contextManagementProcessor.d.ts +0 -40
  140. package/dist/processor-pieces/processors/contextManagementProcessor.js +0 -305
  141. package/dist/processor-pieces/processors/loopDetectionProcessor.d.ts +0 -30
  142. package/dist/processor-pieces/processors/loopDetectionProcessor.js +0 -137
  143. package/dist/processor-pieces/processors/responseValidationProcessor.d.ts +0 -30
  144. package/dist/processor-pieces/processors/responseValidationProcessor.js +0 -228
  145. package/dist/processor-pieces/processors/telemetryProcessor.d.ts +0 -99
  146. package/dist/processor-pieces/processors/telemetryProcessor.js +0 -311
  147. package/dist/processor-pieces/processors/tokenManagementProcessor.d.ts +0 -37
  148. package/dist/processor-pieces/processors/tokenManagementProcessor.js +0 -178
  149. package/dist/processor-pieces/processors/toolExecutionProcessor.d.ts +0 -43
  150. package/dist/processor-pieces/processors/toolExecutionProcessor.js +0 -207
  151. package/dist/processor-pieces/tools/fileTools.d.ts +0 -26
  152. package/dist/processor-pieces/tools/fileTools.js +0 -162
  153. package/dist/promptbuilder.d.ts +0 -382
  154. package/dist/promptbuilder.js +0 -805
  155. package/dist/systemprompt.d.ts +0 -20
  156. package/dist/systemprompt.js +0 -48
  157. package/dist/taskInstruction.d.ts +0 -37
  158. package/dist/taskInstruction.js +0 -57
  159. package/dist/usermessage.d.ts +0 -70
  160. package/dist/usermessage.js +0 -123
@@ -1,329 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ChatRecordingProcessor = void 0;
37
- const processor_1 = require("../../processor");
38
- const fs = __importStar(require("fs/promises"));
39
- const path = __importStar(require("path"));
40
- class ChatRecordingProcessor extends processor_1.BaseProcessor {
41
- constructor(options = {}) {
42
- super();
43
- // Session tracking
44
- this.currentSession = null;
45
- this.messageCount = 0;
46
- this.sessions = [];
47
- this.enableTokenTracking = options.enableTokenTracking !== false;
48
- this.exportFormat = options.exportFormat || 'json';
49
- this.outputDirectory = options.outputDirectory || './chat-recordings';
50
- this.maxFileSize = options.maxFileSize || 10 * 1024 * 1024; // 10MB
51
- this.enableCompression = options.enableCompression || false;
52
- this.includeMetadata = options.includeMetadata !== false;
53
- this.autoExport = options.autoExport || false;
54
- this.exportInterval = options.exportInterval || 50;
55
- }
56
- async processInput(input) {
57
- const { message, context } = input;
58
- try {
59
- // Initialize session if not exists
60
- if (!this.currentSession) {
61
- this.initializeSession(context);
62
- }
63
- // Record the message
64
- const messageRecord = this.createMessageRecord(message, context);
65
- this.currentSession.messages.push(messageRecord);
66
- this.messageCount++;
67
- // Update session totals
68
- this.updateSessionTotals(messageRecord);
69
- const results = [
70
- this.createEvent('MessageRecorded', {
71
- messageId: messageRecord.id,
72
- sessionId: this.currentSession.sessionId,
73
- messageCount: this.messageCount
74
- })
75
- ];
76
- // Auto-export if enabled and interval reached
77
- if (this.autoExport && this.messageCount % this.exportInterval === 0) {
78
- try {
79
- const exportPath = await this.exportSession(this.currentSession);
80
- results.push(this.createEvent('SessionExported', {
81
- sessionId: this.currentSession.sessionId,
82
- exportPath,
83
- messageCount: this.currentSession.messages.length
84
- }));
85
- }
86
- catch (exportError) {
87
- results.push(this.createEvent('ExportError', {
88
- error: exportError instanceof Error ? exportError.message : String(exportError),
89
- sessionId: this.currentSession.sessionId
90
- }));
91
- }
92
- }
93
- return results;
94
- }
95
- catch (error) {
96
- console.error('[ChatRecording] Error recording message:', error);
97
- const messageStr = String(message);
98
- return [this.createEvent('RecordingError', {
99
- error: error instanceof Error ? error.message : String(error),
100
- messageContent: messageStr.slice(0, 100)
101
- })];
102
- }
103
- }
104
- initializeSession(context) {
105
- const sessionId = this.generateSessionId();
106
- this.currentSession = {
107
- sessionId,
108
- startTime: new Date().toISOString(),
109
- messages: [],
110
- totalTokens: {
111
- input: 0,
112
- output: 0,
113
- cached: 0,
114
- total: 0
115
- },
116
- toolCallCount: 0,
117
- metadata: {
118
- llmConfig: (context === null || context === void 0 ? void 0 : context.llmconfig) || {},
119
- userAgent: 'codebolt-agent',
120
- version: '1.0.0',
121
- ...context === null || context === void 0 ? void 0 : context.sessionMetadata
122
- }
123
- };
124
- }
125
- createMessageRecord(message, context) {
126
- const id = this.generateMessageId();
127
- const timestamp = new Date().toISOString();
128
- // Extract basic message info
129
- let role = 'unknown';
130
- let content = '';
131
- let toolCalls = [];
132
- if (message.messages && Array.isArray(message.messages) && message.messages.length > 0) {
133
- const lastMessage = message.messages[message.messages.length - 1];
134
- role = lastMessage.role || 'unknown';
135
- content = this.extractContent(lastMessage.content);
136
- if (lastMessage.tool_calls) {
137
- toolCalls = this.extractToolCalls(lastMessage.tool_calls);
138
- }
139
- }
140
- else if (typeof message === 'string') {
141
- role = 'user';
142
- content = message;
143
- }
144
- else {
145
- content = JSON.stringify(message);
146
- }
147
- // Calculate tokens if enabled
148
- let tokens;
149
- if (this.enableTokenTracking) {
150
- tokens = this.estimateTokens(content);
151
- }
152
- return {
153
- id,
154
- timestamp,
155
- role,
156
- content: content.slice(0, 10000), // Limit content length for storage
157
- metadata: this.includeMetadata ? {
158
- originalMessageLength: content.length,
159
- hasToolCalls: toolCalls.length > 0,
160
- contextKeys: context ? Object.keys(context) : [],
161
- ...message.metadata
162
- } : undefined,
163
- tokens,
164
- toolCalls: toolCalls.length > 0 ? toolCalls : undefined
165
- };
166
- }
167
- extractContent(content) {
168
- if (typeof content === 'string') {
169
- return content;
170
- }
171
- if (Array.isArray(content)) {
172
- return content
173
- .map(part => {
174
- if (typeof part === 'string')
175
- return part;
176
- if (part === null || part === void 0 ? void 0 : part.text)
177
- return part.text;
178
- if ((part === null || part === void 0 ? void 0 : part.type) === 'text')
179
- return part.text || '';
180
- return JSON.stringify(part);
181
- })
182
- .join(' ');
183
- }
184
- return JSON.stringify(content);
185
- }
186
- extractToolCalls(toolCalls) {
187
- return toolCalls.map(tc => {
188
- var _a, _b, _c;
189
- return ({
190
- id: tc.id || this.generateToolCallId(),
191
- name: ((_a = tc.function) === null || _a === void 0 ? void 0 : _a.name) || 'unknown',
192
- args: typeof ((_b = tc.function) === null || _b === void 0 ? void 0 : _b.arguments) === 'string'
193
- ? JSON.parse(tc.function.arguments)
194
- : ((_c = tc.function) === null || _c === void 0 ? void 0 : _c.arguments) || {},
195
- status: 'pending',
196
- timestamp: new Date().toISOString()
197
- });
198
- });
199
- }
200
- estimateTokens(content) {
201
- // Simple token estimation
202
- const charCount = content.length;
203
- const estimated = Math.ceil(charCount / 4);
204
- return {
205
- input: estimated,
206
- output: 0,
207
- cached: 0,
208
- total: estimated
209
- };
210
- }
211
- updateSessionTotals(messageRecord) {
212
- if (!this.currentSession || !messageRecord.tokens)
213
- return;
214
- this.currentSession.totalTokens.input += messageRecord.tokens.input;
215
- this.currentSession.totalTokens.output += messageRecord.tokens.output;
216
- this.currentSession.totalTokens.cached += messageRecord.tokens.cached;
217
- this.currentSession.totalTokens.total += messageRecord.tokens.total;
218
- if (messageRecord.toolCalls) {
219
- this.currentSession.toolCallCount += messageRecord.toolCalls.length;
220
- }
221
- }
222
- generateSessionId() {
223
- return `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
224
- }
225
- generateMessageId() {
226
- return `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
227
- }
228
- generateToolCallId() {
229
- return `tool-${Date.now()}-${Math.random().toString(36).substr(2, 6)}`;
230
- }
231
- async exportSession(session) {
232
- // Ensure output directory exists
233
- await this.ensureDirectoryExists();
234
- const filename = `chat-session-${session.sessionId}-${Date.now()}.${this.exportFormat}`;
235
- const filepath = path.join(this.outputDirectory, filename);
236
- // Update end time
237
- session.endTime = new Date().toISOString();
238
- let content;
239
- switch (this.exportFormat) {
240
- case 'json':
241
- content = JSON.stringify(session, null, 2);
242
- break;
243
- case 'txt':
244
- content = this.formatAsText(session);
245
- break;
246
- case 'csv':
247
- content = this.formatAsCSV(session);
248
- break;
249
- default:
250
- content = JSON.stringify(session, null, 2);
251
- }
252
- await fs.writeFile(filepath, content, 'utf-8');
253
- return filepath;
254
- }
255
- async ensureDirectoryExists() {
256
- try {
257
- await fs.access(this.outputDirectory);
258
- }
259
- catch {
260
- await fs.mkdir(this.outputDirectory, { recursive: true });
261
- }
262
- }
263
- formatAsText(session) {
264
- const lines = [];
265
- lines.push(`Chat Session: ${session.sessionId}`);
266
- lines.push(`Start Time: ${session.startTime}`);
267
- lines.push(`End Time: ${session.endTime || 'Ongoing'}`);
268
- lines.push(`Total Messages: ${session.messages.length}`);
269
- lines.push(`Total Tokens: ${session.totalTokens.total}`);
270
- lines.push(`Tool Calls: ${session.toolCallCount}`);
271
- lines.push('---');
272
- for (const message of session.messages) {
273
- lines.push(`[${message.timestamp}] ${message.role.toUpperCase()}: ${message.content}`);
274
- if (message.toolCalls) {
275
- for (const tool of message.toolCalls) {
276
- lines.push(` 🔧 ${tool.name}(${JSON.stringify(tool.args)})`);
277
- }
278
- }
279
- lines.push('');
280
- }
281
- return lines.join('\n');
282
- }
283
- formatAsCSV(session) {
284
- var _a, _b;
285
- const headers = ['timestamp', 'role', 'content', 'tokens', 'tool_calls'];
286
- const rows = [headers.join(',')];
287
- for (const message of session.messages) {
288
- const row = [
289
- message.timestamp,
290
- message.role,
291
- `"${message.content.replace(/"/g, '""')}"`, // Escape quotes
292
- ((_a = message.tokens) === null || _a === void 0 ? void 0 : _a.total) || 0,
293
- ((_b = message.toolCalls) === null || _b === void 0 ? void 0 : _b.length) || 0
294
- ];
295
- rows.push(row.join(','));
296
- }
297
- return rows.join('\n');
298
- }
299
- // Public methods for session management
300
- async finalizeSession() {
301
- if (!this.currentSession)
302
- return null;
303
- try {
304
- const exportPath = await this.exportSession(this.currentSession);
305
- this.sessions.push(this.currentSession);
306
- this.currentSession = null;
307
- this.messageCount = 0;
308
- return exportPath;
309
- }
310
- catch (error) {
311
- console.error('[ChatRecording] Error finalizing session:', error);
312
- return null;
313
- }
314
- }
315
- getCurrentSession() {
316
- return this.currentSession;
317
- }
318
- getSessionStats() {
319
- var _a, _b;
320
- const totalMessages = this.sessions.reduce((sum, session) => sum + session.messages.length, 0) +
321
- (((_a = this.currentSession) === null || _a === void 0 ? void 0 : _a.messages.length) || 0);
322
- return {
323
- currentSessionMessages: ((_b = this.currentSession) === null || _b === void 0 ? void 0 : _b.messages.length) || 0,
324
- totalSessions: this.sessions.length + (this.currentSession ? 1 : 0),
325
- totalMessages
326
- };
327
- }
328
- }
329
- exports.ChatRecordingProcessor = ChatRecordingProcessor;
@@ -1,40 +0,0 @@
1
- import { BaseProcessor, ProcessorInput, ProcessorOutput } from '../../processor';
2
- export interface ContextInfo {
3
- projectContext?: string;
4
- ideContext?: any;
5
- directoryContext?: string;
6
- contextAdded: boolean;
7
- }
8
- export interface ContextManagementProcessorOptions {
9
- enableProjectContext?: boolean;
10
- enableIdeContext?: boolean;
11
- enableDirectoryContext?: boolean;
12
- forceFullContext?: boolean;
13
- contextThreshold?: number;
14
- }
15
- export declare class ContextManagementProcessor extends BaseProcessor {
16
- private readonly enableProjectContext;
17
- private readonly enableIdeContext;
18
- private readonly enableDirectoryContext;
19
- private readonly forceFullContext;
20
- private readonly contextThreshold;
21
- private lastSentIdeContext;
22
- private contextAddedToHistory;
23
- constructor(options?: ContextManagementProcessorOptions);
24
- processInput(input: ProcessorInput): Promise<ProcessorOutput[]>;
25
- private collectContext;
26
- private getProjectContext;
27
- private getIdeContext;
28
- private getDirectoryContext;
29
- private detectIdeType;
30
- private getOpenFiles;
31
- private getActiveFile;
32
- private addContextToMessage;
33
- resetContext(): void;
34
- forceContextRefresh(): void;
35
- setContextThreshold(threshold: number): void;
36
- enableProjectContextForSession(): void;
37
- disableProjectContextForSession(): void;
38
- enableIdeContextForSession(): void;
39
- disableIdeContextForSession(): void;
40
- }
@@ -1,305 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.ContextManagementProcessor = void 0;
40
- const processor_1 = require("../../processor");
41
- const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
42
- class ContextManagementProcessor extends processor_1.BaseProcessor {
43
- constructor(options = {}) {
44
- super(options);
45
- this.lastSentIdeContext = undefined;
46
- this.contextAddedToHistory = false;
47
- this.enableProjectContext = options.enableProjectContext !== false;
48
- this.enableIdeContext = options.enableIdeContext !== false;
49
- this.enableDirectoryContext = options.enableDirectoryContext !== false;
50
- this.forceFullContext = options.forceFullContext || false;
51
- this.contextThreshold = options.contextThreshold || 100;
52
- }
53
- async processInput(input) {
54
- try {
55
- const { message, context } = input;
56
- // Check if context should be added
57
- if (this.contextAddedToHistory && !this.forceFullContext) {
58
- return [this.createEvent('ContextAlreadyAdded', {
59
- reason: 'Context has already been added to this session'
60
- })];
61
- }
62
- // Collect context information using CodeBolt
63
- const contextInfo = await this.collectContext();
64
- if (!contextInfo.contextAdded) {
65
- return [this.createEvent('NoContextAvailable', {
66
- reason: 'No relevant context found for this session'
67
- })];
68
- }
69
- // Add context to the message
70
- const messageWithContext = await this.addContextToMessage(message, contextInfo);
71
- // Mark context as added
72
- this.contextAddedToHistory = true;
73
- return [
74
- this.createEvent('ContextAdded', contextInfo),
75
- this.createEvent('MessageWithContext', messageWithContext)
76
- ];
77
- }
78
- catch (error) {
79
- console.error('Error in ContextManagementProcessor:', error);
80
- return [this.createEvent('ContextError', {
81
- error: error instanceof Error ? error.message : String(error)
82
- })];
83
- }
84
- }
85
- async collectContext() {
86
- const contextInfo = {
87
- contextAdded: false
88
- };
89
- try {
90
- // Collect project context if enabled
91
- if (this.enableProjectContext) {
92
- contextInfo.projectContext = await this.getProjectContext();
93
- }
94
- // Collect IDE context if enabled
95
- if (this.enableIdeContext) {
96
- contextInfo.ideContext = await this.getIdeContext();
97
- }
98
- // Collect directory context if enabled
99
- if (this.enableDirectoryContext) {
100
- contextInfo.directoryContext = await this.getDirectoryContext();
101
- }
102
- // Check if we have any meaningful context
103
- contextInfo.contextAdded = !!(contextInfo.projectContext || contextInfo.ideContext || contextInfo.directoryContext);
104
- }
105
- catch (error) {
106
- console.warn('Failed to collect context:', error);
107
- }
108
- return contextInfo;
109
- }
110
- async getProjectContext() {
111
- try {
112
- // Get current working directory and project info
113
- const cwd = process.cwd();
114
- const projectName = cwd.split(/[\\/]/).pop() || 'unknown-project';
115
- // Try to get additional project info from CodeBolt if available
116
- let additionalInfo = '';
117
- try {
118
- const projectPath = await codeboltjs_1.default.project.getProjectPath();
119
- if (projectPath.success && projectPath.data) {
120
- additionalInfo = `\nProject Path: ${projectPath.data}`;
121
- }
122
- }
123
- catch (error) {
124
- // Project info is optional
125
- }
126
- return `Project: ${projectName}\nWorking Directory: ${cwd}${additionalInfo}`;
127
- }
128
- catch (error) {
129
- console.warn('Failed to get project context:', error);
130
- return undefined;
131
- }
132
- }
133
- async getIdeContext() {
134
- try {
135
- // This would normally integrate with CodeBolt's IDE context detection
136
- // For now, simulate basic IDE context
137
- const ideContext = {
138
- ideType: this.detectIdeType(),
139
- openFiles: await this.getOpenFiles(),
140
- activeFile: await this.getActiveFile()
141
- };
142
- // Update last sent IDE context
143
- this.lastSentIdeContext = ideContext;
144
- return ideContext;
145
- }
146
- catch (error) {
147
- console.warn('Failed to get IDE context:', error);
148
- return undefined;
149
- }
150
- }
151
- async getDirectoryContext() {
152
- try {
153
- // Get directory structure using CodeBolt's file system capabilities
154
- const cwd = process.cwd();
155
- // Try to get directory listing from CodeBolt
156
- let directoryContents = '';
157
- try {
158
- const listResult = await codeboltjs_1.default.fs.listFile(cwd);
159
- if (listResult.success && listResult.data) {
160
- const items = listResult.data.filter((item) => !item.name.startsWith('.'));
161
- directoryContents = items.slice(0, 10).map((item) => item.name).join(', ');
162
- if (items.length > 10) {
163
- directoryContents += '...';
164
- }
165
- }
166
- }
167
- catch (error) {
168
- // Fallback to basic directory listing
169
- const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
170
- const items = await fs.readdir(cwd);
171
- const files = items.filter(item => !item.startsWith('.'));
172
- directoryContents = files.slice(0, 10).join(', ') + (files.length > 10 ? '...' : '');
173
- }
174
- return `Directory: ${cwd}\nContents: ${directoryContents}`;
175
- }
176
- catch (error) {
177
- console.warn('Failed to get directory context:', error);
178
- return undefined;
179
- }
180
- }
181
- detectIdeType() {
182
- // Detect IDE type from environment variables
183
- if (process.env.VSCODE_PID || process.env.VSCODE_IPC_HOOK) {
184
- return 'vscode';
185
- }
186
- if (process.env.CURSOR_PID || process.env.CURSOR_SESSION_ID) {
187
- return 'cursor';
188
- }
189
- return 'unknown';
190
- }
191
- async getOpenFiles() {
192
- try {
193
- // This would normally get actual open files from IDE
194
- // For now, simulate with recent files in current directory
195
- const cwd = process.cwd();
196
- // Try to get recent files from CodeBolt
197
- let files = [];
198
- try {
199
- // CodeBolt doesn't have findRecentFiles, so we'll use listFile as fallback
200
- const listResult = await codeboltjs_1.default.fs.listFile(cwd);
201
- if (listResult.success && listResult.data) {
202
- const fileItems = listResult.data.filter((item) => !item.name.startsWith('.') && item.includes('.'));
203
- files = fileItems.slice(0, 5).map((file, index) => ({
204
- path: file.name,
205
- isActive: index === 0,
206
- timestamp: Date.now()
207
- }));
208
- }
209
- }
210
- catch (error) {
211
- // Fallback to basic file listing
212
- const fs = await Promise.resolve().then(() => __importStar(require('fs/promises')));
213
- const items = await fs.readdir(cwd);
214
- const fileItems = items.filter(item => !item.startsWith('.') && item.includes('.'));
215
- files = fileItems.slice(0, 5).map((file, index) => ({
216
- path: file,
217
- isActive: index === 0,
218
- timestamp: Date.now()
219
- }));
220
- }
221
- return files;
222
- }
223
- catch (error) {
224
- return [];
225
- }
226
- }
227
- async getActiveFile() {
228
- try {
229
- const openFiles = await this.getOpenFiles();
230
- return openFiles.find(f => f.isActive);
231
- }
232
- catch (error) {
233
- return undefined;
234
- }
235
- }
236
- async addContextToMessage(message, contextInfo) {
237
- const contextMessages = [];
238
- // Add project context
239
- if (contextInfo.projectContext) {
240
- contextMessages.push({
241
- role: 'system',
242
- content: `Project Context:\n${contextInfo.projectContext}`,
243
- name: 'project-context'
244
- });
245
- }
246
- // Add IDE context
247
- if (contextInfo.ideContext) {
248
- contextMessages.push({
249
- role: 'system',
250
- content: `IDE Context:\n\`\`\`json\n${JSON.stringify(contextInfo.ideContext, null, 2)}\n\`\`\``,
251
- name: 'ide-context'
252
- });
253
- }
254
- // Add directory context
255
- if (contextInfo.directoryContext) {
256
- contextMessages.push({
257
- role: 'system',
258
- content: `Directory Context:\n${contextInfo.directoryContext}`,
259
- name: 'directory-context'
260
- });
261
- }
262
- // Add acknowledgment message
263
- if (contextMessages.length > 0) {
264
- contextMessages.push({
265
- role: 'assistant',
266
- content: 'Got it. Thanks for the context!',
267
- name: 'context-acknowledgment'
268
- });
269
- }
270
- return {
271
- messages: [...contextMessages, ...message.messages],
272
- metadata: {
273
- ...message.metadata,
274
- contextAdded: true,
275
- contextInfo
276
- }
277
- };
278
- }
279
- // Public methods for external control
280
- resetContext() {
281
- this.contextAddedToHistory = false;
282
- this.lastSentIdeContext = undefined;
283
- this.clearContext();
284
- }
285
- forceContextRefresh() {
286
- this.forceFullContext = true;
287
- this.contextAddedToHistory = false;
288
- }
289
- setContextThreshold(threshold) {
290
- this.contextThreshold = Math.max(1, threshold);
291
- }
292
- enableProjectContextForSession() {
293
- this.enableProjectContext = true;
294
- }
295
- disableProjectContextForSession() {
296
- this.enableProjectContext = false;
297
- }
298
- enableIdeContextForSession() {
299
- this.enableIdeContext = true;
300
- }
301
- disableIdeContextForSession() {
302
- this.enableIdeContext = false;
303
- }
304
- }
305
- exports.ContextManagementProcessor = ContextManagementProcessor;