@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.
- package/dist/agent.d.ts +86 -0
- package/dist/agent.js +324 -0
- package/dist/builderpattern/agent.js +2 -2
- package/dist/builderpattern/followupquestionbuilder.js +1 -1
- package/dist/builderpattern/llmoutputhandler.js +7 -7
- package/dist/builderpattern/usermessage.d.ts +1 -6
- package/dist/composablepattern/document.js +35 -2
- package/dist/followupquestionbuilder.d.ts +75 -0
- package/dist/followupquestionbuilder.js +197 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +23 -0
- package/dist/llmoutputhandler.d.ts +102 -0
- package/dist/llmoutputhandler.js +452 -0
- package/dist/processor/types/interfaces.d.ts +21 -44
- package/dist/processor-pieces/index.d.ts +3 -0
- package/dist/processor-pieces/index.js +3 -0
- package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.d.ts +5 -14
- package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.js +40 -41
- package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.d.ts +13 -5
- package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.js +58 -50
- package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.d.ts +8 -6
- package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.js +22 -66
- package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.d.ts +2 -3
- package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.js +2 -1
- package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.d.ts +2 -3
- package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.js +2 -1
- package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +4 -1
- package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.d.ts +2 -18
- package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.js +93 -291
- package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.d.ts +18 -0
- package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.js +41 -0
- package/dist/processor-pieces/postToolCallProcessors/index.d.ts +2 -1
- package/dist/processor-pieces/postToolCallProcessors/index.js +5 -0
- package/dist/processor-pieces/preInferenceProcessors/index.d.ts +1 -1
- package/dist/processor-pieces/preInferenceProcessors/index.js +3 -0
- package/dist/processor-pieces/pretoolCallProcessors/index.d.ts +2 -1
- package/dist/processor-pieces/pretoolCallProcessors/index.js +5 -0
- package/dist/processor-pieces/pretoolCallProcessors/toolParameterModifier.d.ts +21 -0
- package/dist/processor-pieces/pretoolCallProcessors/toolParameterModifier.js +32 -0
- package/dist/processor-pieces/pretoolCallProcessors/toolValidationModifier.d.ts +16 -0
- package/dist/processor-pieces/pretoolCallProcessors/toolValidationModifier.js +37 -0
- package/dist/promptbuilder.d.ts +382 -0
- package/dist/promptbuilder.js +805 -0
- package/dist/systemprompt.d.ts +20 -0
- package/dist/systemprompt.js +48 -0
- package/dist/taskInstruction.d.ts +37 -0
- package/dist/taskInstruction.js +57 -0
- package/dist/types/libFunctionTypes.d.ts +13 -19
- package/dist/types/libFunctionTypes.js +3 -0
- package/dist/types/processorTypes.d.ts +8 -8
- package/dist/types/processorTypes.js +6 -23
- package/dist/unified/agent/agent.js +2 -2
- package/dist/unified/agent/codeboltAgent.d.ts +122 -0
- package/dist/unified/agent/codeboltAgent.js +210 -0
- package/dist/unified/base/initialPromptGenerator.js +18 -4
- package/dist/unified/base/responseExecutor.d.ts +3 -2
- package/dist/unified/base/responseExecutor.js +109 -56
- package/dist/unified/index.d.ts +4 -0
- package/dist/unified/index.js +12 -1
- package/dist/usermessage.d.ts +70 -0
- package/dist/usermessage.js +123 -0
- package/package.json +11 -6
- package/dist/local-tools/fileTools.d.ts +0 -26
- package/dist/local-tools/fileTools.js +0 -162
- package/dist/processor-pieces/additionalModifiers/argumentProcessorModifier.d.ts +0 -13
- package/dist/processor-pieces/additionalModifiers/argumentProcessorModifier.js +0 -68
- package/dist/processor-pieces/additionalModifiers/atFileProcessorModifier.d.ts +0 -15
- package/dist/processor-pieces/additionalModifiers/atFileProcessorModifier.js +0 -212
- package/dist/processor-pieces/additionalModifiers/chatCompressionModifier.d.ts +0 -19
- package/dist/processor-pieces/additionalModifiers/chatCompressionModifier.js +0 -110
- package/dist/processor-pieces/additionalModifiers/chatRecordingModifier.d.ts +0 -23
- package/dist/processor-pieces/additionalModifiers/chatRecordingModifier.js +0 -173
- package/dist/processor-pieces/additionalModifiers/coreSystemPromptModifier.d.ts +0 -14
- package/dist/processor-pieces/additionalModifiers/coreSystemPromptModifier.js +0 -93
- package/dist/processor-pieces/additionalModifiers/directoryContextModifier.d.ts +0 -30
- package/dist/processor-pieces/additionalModifiers/directoryContextModifier.js +0 -330
- package/dist/processor-pieces/additionalModifiers/environmentContextModifier.d.ts +0 -26
- package/dist/processor-pieces/additionalModifiers/environmentContextModifier.js +0 -269
- package/dist/processor-pieces/additionalModifiers/fallbackHandlerModifier.d.ts +0 -38
- package/dist/processor-pieces/additionalModifiers/fallbackHandlerModifier.js +0 -217
- package/dist/processor-pieces/additionalModifiers/ideContextModifier.d.ts +0 -34
- package/dist/processor-pieces/additionalModifiers/ideContextModifier.js +0 -147
- package/dist/processor-pieces/additionalModifiers/index.d.ts +0 -12
- package/dist/processor-pieces/additionalModifiers/index.js +0 -28
- package/dist/processor-pieces/additionalModifiers/loopDetectionModifier.d.ts +0 -29
- package/dist/processor-pieces/additionalModifiers/loopDetectionModifier.js +0 -155
- package/dist/processor-pieces/additionalModifiers/memoryImportModifier.d.ts +0 -15
- package/dist/processor-pieces/additionalModifiers/memoryImportModifier.js +0 -129
- package/dist/processor-pieces/additionalModifiers/shellProcessorModifier.d.ts +0 -25
- package/dist/processor-pieces/additionalModifiers/shellProcessorModifier.js +0 -169
- package/dist/processor-pieces/additionalModifiers/toolInjectionModifier.d.ts +0 -20
- package/dist/processor-pieces/additionalModifiers/toolInjectionModifier.js +0 -152
- package/dist/processor-pieces/messageModifiers/addCurrentDirectoryRootFilesModifier.d.ts +0 -7
- package/dist/processor-pieces/messageModifiers/addCurrentDirectoryRootFilesModifier.js +0 -93
- package/dist/processor-pieces/messageModifiers/advancedSystemInstructionMessageModifier.d.ts +0 -9
- package/dist/processor-pieces/messageModifiers/advancedSystemInstructionMessageModifier.js +0 -77
- package/dist/processor-pieces/messageModifiers/chatCompressionModifier.d.ts +0 -19
- package/dist/processor-pieces/messageModifiers/chatCompressionModifier.js +0 -110
- package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.example.d.ts +0 -20
- package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.example.js +0 -124
- package/dist/processor-pieces/messageModifiers/environmentContext.d.ts +0 -41
- package/dist/processor-pieces/messageModifiers/environmentContext.js +0 -355
- package/dist/processor-pieces/messageModifiers/mentionedFilesModifier.d.ts +0 -23
- package/dist/processor-pieces/messageModifiers/mentionedFilesModifier.js +0 -207
- package/dist/processor-pieces/messageModifiers/simpleMessageModifier.d.ts +0 -7
- package/dist/processor-pieces/messageModifiers/simpleMessageModifier.js +0 -26
- package/dist/processor-pieces/postInference/llmOutputValidityProcessor.d.ts +0 -1
- package/dist/processor-pieces/postInference/llmOutputValidityProcessor.js +0 -2
- package/dist/processor-pieces/postInferenceProcessors/checkForNoToolCall.d.ts +0 -7
- package/dist/processor-pieces/postInferenceProcessors/checkForNoToolCall.js +0 -24
- package/dist/processor-pieces/postToolCall/advancedLoopDetectionProcessor.d.ts +0 -41
- package/dist/processor-pieces/postToolCall/advancedLoopDetectionProcessor.js +0 -197
- package/dist/processor-pieces/postToolCall/chatCompressionProcessor.d.ts +0 -26
- package/dist/processor-pieces/postToolCall/chatCompressionProcessor.js +0 -90
- package/dist/processor-pieces/postToolCall/chatRecordingProcessor.d.ts +0 -81
- package/dist/processor-pieces/postToolCall/chatRecordingProcessor.js +0 -329
- package/dist/processor-pieces/postToolCall/contextManagementProcessor.d.ts +0 -40
- package/dist/processor-pieces/postToolCall/contextManagementProcessor.js +0 -272
- package/dist/processor-pieces/postToolCall/conversationCompactorProcessor.d.ts +0 -49
- package/dist/processor-pieces/postToolCall/conversationCompactorProcessor.js +0 -291
- package/dist/processor-pieces/postToolCall/conversationContinuityProcessor.d.ts +0 -49
- package/dist/processor-pieces/postToolCall/conversationContinuityProcessor.js +0 -293
- package/dist/processor-pieces/postToolCall/followUpConversationProcessor.d.ts +0 -47
- package/dist/processor-pieces/postToolCall/followUpConversationProcessor.js +0 -249
- package/dist/processor-pieces/postToolCall/loopDetectionProcessor.d.ts +0 -30
- package/dist/processor-pieces/postToolCall/loopDetectionProcessor.js +0 -137
- package/dist/processor-pieces/postToolCall/responseValidationProcessor.d.ts +0 -30
- package/dist/processor-pieces/postToolCall/responseValidationProcessor.js +0 -228
- package/dist/processor-pieces/postToolCall/telemetryProcessor.d.ts +0 -99
- package/dist/processor-pieces/postToolCall/telemetryProcessor.js +0 -278
- package/dist/processor-pieces/postToolCall/tokenManagementProcessor.d.ts +0 -37
- package/dist/processor-pieces/postToolCall/tokenManagementProcessor.js +0 -178
- package/dist/processor-pieces/postToolCall/toolExecutionProcessor.d.ts +0 -43
- package/dist/processor-pieces/postToolCall/toolExecutionProcessor.js +0 -207
- package/dist/processor-pieces/preInference/conversationCompactorProcessor.d.ts +0 -52
- package/dist/processor-pieces/preInference/conversationCompactorProcessor.js +0 -264
- package/dist/processor-pieces/preInference/conversationContinuityProcessor.d.ts +0 -49
- package/dist/processor-pieces/preInference/conversationContinuityProcessor.js +0 -293
- package/dist/processor-pieces/preInferenceProcessors/conversationCompaction.d.ts +0 -7
- package/dist/processor-pieces/preInferenceProcessors/conversationCompaction.js +0 -31
- package/dist/processor-pieces/preToolCall/index.d.ts +0 -9
- package/dist/processor-pieces/preToolCall/index.js +0 -18
- package/dist/processor-pieces/preToolCall/localToolInterceptorProcessor.d.ts +0 -58
- package/dist/processor-pieces/preToolCall/localToolInterceptorProcessor.js +0 -444
- package/dist/processor-pieces/preToolCall/toolParameterModifierProcessor.d.ts +0 -44
- package/dist/processor-pieces/preToolCall/toolParameterModifierProcessor.js +0 -367
- package/dist/processor-pieces/preToolCall/toolValidationProcessor.d.ts +0 -58
- package/dist/processor-pieces/preToolCall/toolValidationProcessor.js +0 -391
- package/dist/unified/agent/tool.d.ts +0 -99
- package/dist/unified/agent/tool.js +0 -440
- package/dist/unified/examples/agentExample.d.ts +0 -46
- package/dist/unified/examples/agentExample.js +0 -464
- package/dist/unified/examples/documentationPatternExample.d.ts +0 -10
- package/dist/unified/examples/documentationPatternExample.js +0 -385
- package/dist/unified/examples/followUpProcessorsExample.d.ts +0 -45
- package/dist/unified/examples/followUpProcessorsExample.js +0 -311
- package/dist/unified/examples/orchestratorExample.d.ts +0 -16
- package/dist/unified/examples/orchestratorExample.js +0 -415
- package/dist/unified/examples/preToolCallProcessorsExample.d.ts +0 -36
- package/dist/unified/examples/preToolCallProcessorsExample.js +0 -458
- package/dist/unified/examples/workflowExample.d.ts +0 -12
- package/dist/unified/examples/workflowExample.js +0 -497
- package/dist/unified/orchestrator/orchestrator.d.ts +0 -260
- package/dist/unified/orchestrator/orchestrator.js +0 -519
|
@@ -1,269 +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.EnvironmentContextModifier = void 0;
|
|
40
|
-
const base_1 = require("../base");
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
|
-
const fs = __importStar(require("fs"));
|
|
43
|
-
const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
|
|
44
|
-
class EnvironmentContextModifier extends base_1.BaseMessageModifier {
|
|
45
|
-
constructor(options = {}) {
|
|
46
|
-
super();
|
|
47
|
-
this.defaultExcludePatterns = [
|
|
48
|
-
'node_modules/**',
|
|
49
|
-
'.git/**',
|
|
50
|
-
'dist/**',
|
|
51
|
-
'build/**',
|
|
52
|
-
'*.log',
|
|
53
|
-
'*.tmp',
|
|
54
|
-
'.DS_Store',
|
|
55
|
-
'coverage/**',
|
|
56
|
-
'.next/**',
|
|
57
|
-
'.nuxt/**'
|
|
58
|
-
];
|
|
59
|
-
this.options = {
|
|
60
|
-
enableFullContext: options.enableFullContext || false,
|
|
61
|
-
maxFiles: options.maxFiles || 100,
|
|
62
|
-
maxFileSize: options.maxFileSize || 100 * 1024, // 100KB per file
|
|
63
|
-
includePatterns: options.includePatterns || ['**/*.ts', '**/*.js', '**/*.json', '**/*.md', '**/*.txt', '**/*.yml', '**/*.yaml'],
|
|
64
|
-
excludePatterns: [...this.defaultExcludePatterns, ...(options.excludePatterns || [])]
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
async modify(originalRequest, createdMessage) {
|
|
68
|
-
try {
|
|
69
|
-
// Get current date formatted to user's locale
|
|
70
|
-
const today = new Date().toLocaleDateString(undefined, {
|
|
71
|
-
weekday: 'long',
|
|
72
|
-
year: 'numeric',
|
|
73
|
-
month: 'long',
|
|
74
|
-
day: 'numeric',
|
|
75
|
-
});
|
|
76
|
-
const platform = process.platform;
|
|
77
|
-
const { projectPath } = await codeboltjs_1.default.project.getProjectPath();
|
|
78
|
-
if (!projectPath) {
|
|
79
|
-
return createdMessage;
|
|
80
|
-
}
|
|
81
|
-
const currentDir = projectPath;
|
|
82
|
-
// Get basic directory listing
|
|
83
|
-
let directoryListing = '';
|
|
84
|
-
try {
|
|
85
|
-
const files = await fs.promises.readdir(currentDir);
|
|
86
|
-
const fileList = files.slice(0, 20).join(', '); // Limit to first 20 files
|
|
87
|
-
const moreFiles = files.length > 20 ? ` ... and ${files.length - 20} more files` : '';
|
|
88
|
-
directoryListing = `Files in current directory: ${fileList}${moreFiles}`;
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
directoryListing = 'Unable to read current directory';
|
|
92
|
-
}
|
|
93
|
-
const environmentContext = `
|
|
94
|
-
This is the CodeBolt AI Agent. Setting up context for our chat.
|
|
95
|
-
Today's date is ${today} (formatted according to the user's locale).
|
|
96
|
-
Operating system: ${platform}
|
|
97
|
-
Current working directory: ${currentDir}
|
|
98
|
-
${directoryListing}
|
|
99
|
-
`.trim();
|
|
100
|
-
// Prepare context parts (same as gemini-cli)
|
|
101
|
-
const contextParts = [environmentContext];
|
|
102
|
-
// Add full file context if enabled (just like gemini-cli does)
|
|
103
|
-
if (this.options.enableFullContext) {
|
|
104
|
-
try {
|
|
105
|
-
const fullContextContent = await this.generateFullContext(currentDir);
|
|
106
|
-
if (fullContextContent) {
|
|
107
|
-
contextParts.push(`\n--- Full File Context ---\n${fullContextContent}`);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
console.error('Error reading full file context:', error);
|
|
112
|
-
contextParts.push('\n--- Error reading full file context ---');
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
const finalContent = contextParts.join('\n\n');
|
|
116
|
-
const contextMessage = {
|
|
117
|
-
role: 'system',
|
|
118
|
-
content: finalContent
|
|
119
|
-
};
|
|
120
|
-
// Find existing system message or add new one
|
|
121
|
-
const messages = [...createdMessage.message.messages];
|
|
122
|
-
const systemMessageIndex = messages.findIndex(msg => msg.role === 'system');
|
|
123
|
-
if (systemMessageIndex !== -1) {
|
|
124
|
-
// Append to existing system message
|
|
125
|
-
messages[systemMessageIndex] = {
|
|
126
|
-
...messages[systemMessageIndex],
|
|
127
|
-
content: `${messages[systemMessageIndex].content}\n\n${finalContent}`
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
// Add new system message at the beginning
|
|
132
|
-
messages.unshift(contextMessage);
|
|
133
|
-
}
|
|
134
|
-
return Promise.resolve({
|
|
135
|
-
message: {
|
|
136
|
-
...createdMessage.message,
|
|
137
|
-
messages
|
|
138
|
-
},
|
|
139
|
-
metadata: {
|
|
140
|
-
...createdMessage.metadata,
|
|
141
|
-
environmentContextAdded: true,
|
|
142
|
-
fullContextAdded: this.options.enableFullContext,
|
|
143
|
-
contextFilesCount: this.options.enableFullContext ? await this.countContextFiles(currentDir) : 0,
|
|
144
|
-
environmentInfo: {
|
|
145
|
-
date: today,
|
|
146
|
-
platform,
|
|
147
|
-
currentDir
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
}
|
|
152
|
-
catch (error) {
|
|
153
|
-
console.error('Error in EnvironmentContextModifier:', error);
|
|
154
|
-
return createdMessage;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
// Full context methods (integrated like gemini-cli)
|
|
158
|
-
async generateFullContext(basePath) {
|
|
159
|
-
try {
|
|
160
|
-
const files = await this.findRelevantFiles(basePath);
|
|
161
|
-
const contextParts = [];
|
|
162
|
-
let processedFiles = 0;
|
|
163
|
-
for (const filePath of files) {
|
|
164
|
-
if (processedFiles >= this.options.maxFiles) {
|
|
165
|
-
contextParts.push(`\n... (${files.length - processedFiles} more files not shown due to limit)\n`);
|
|
166
|
-
break;
|
|
167
|
-
}
|
|
168
|
-
try {
|
|
169
|
-
const relativePath = path.relative(basePath, filePath);
|
|
170
|
-
const stats = await fs.promises.stat(filePath);
|
|
171
|
-
// Skip files that are too large
|
|
172
|
-
if (stats.size > this.options.maxFileSize) {
|
|
173
|
-
contextParts.push(`--- ${relativePath} ---\n[File too large: ${stats.size} bytes]\n`);
|
|
174
|
-
processedFiles++;
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
const content = await fs.promises.readFile(filePath, 'utf-8');
|
|
178
|
-
contextParts.push(`--- ${relativePath} ---\n${content}\n`);
|
|
179
|
-
processedFiles++;
|
|
180
|
-
}
|
|
181
|
-
catch (error) {
|
|
182
|
-
const relativePath = path.relative(basePath, filePath);
|
|
183
|
-
contextParts.push(`--- ${relativePath} ---\n[Error reading file: ${error instanceof Error ? error.message : 'Unknown error'}]\n`);
|
|
184
|
-
processedFiles++;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
return contextParts.join('\n');
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
console.error('Error generating full context:', error);
|
|
191
|
-
return '';
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
async findRelevantFiles(basePath) {
|
|
195
|
-
const files = [];
|
|
196
|
-
try {
|
|
197
|
-
await this.walkDirectory(basePath, files, basePath);
|
|
198
|
-
return files.sort();
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
console.error('Error finding relevant files:', error);
|
|
202
|
-
return [];
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
async walkDirectory(dir, files, basePath) {
|
|
206
|
-
try {
|
|
207
|
-
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
208
|
-
for (const entry of entries) {
|
|
209
|
-
const fullPath = path.join(dir, entry.name);
|
|
210
|
-
const relativePath = path.relative(basePath, fullPath);
|
|
211
|
-
// Check exclusion patterns
|
|
212
|
-
if (this.isExcluded(relativePath)) {
|
|
213
|
-
continue;
|
|
214
|
-
}
|
|
215
|
-
if (entry.isDirectory()) {
|
|
216
|
-
await this.walkDirectory(fullPath, files, basePath);
|
|
217
|
-
}
|
|
218
|
-
else if (entry.isFile()) {
|
|
219
|
-
// Check inclusion patterns
|
|
220
|
-
if (this.isIncluded(relativePath)) {
|
|
221
|
-
files.push(fullPath);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
catch (error) {
|
|
227
|
-
// Skip directories we can't read
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
isExcluded(relativePath) {
|
|
231
|
-
return this.options.excludePatterns.some(pattern => {
|
|
232
|
-
return this.matchesPattern(relativePath, pattern);
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
isIncluded(relativePath) {
|
|
236
|
-
return this.options.includePatterns.some(pattern => {
|
|
237
|
-
return this.matchesPattern(relativePath, pattern);
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
matchesPattern(filePath, pattern) {
|
|
241
|
-
// Simple glob pattern matching - in production, use a proper glob library
|
|
242
|
-
const regexPattern = pattern
|
|
243
|
-
.replace(/\*\*/g, '.*')
|
|
244
|
-
.replace(/\*/g, '[^/]*')
|
|
245
|
-
.replace(/\?/g, '.');
|
|
246
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
247
|
-
return regex.test(filePath);
|
|
248
|
-
}
|
|
249
|
-
async countContextFiles(basePath) {
|
|
250
|
-
try {
|
|
251
|
-
const files = await this.findRelevantFiles(basePath);
|
|
252
|
-
return Math.min(files.length, this.options.maxFiles);
|
|
253
|
-
}
|
|
254
|
-
catch (error) {
|
|
255
|
-
return 0;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
// Public methods to control full context
|
|
259
|
-
enableFullContext() {
|
|
260
|
-
this.options.enableFullContext = true;
|
|
261
|
-
}
|
|
262
|
-
disableFullContext() {
|
|
263
|
-
this.options.enableFullContext = false;
|
|
264
|
-
}
|
|
265
|
-
isFullContextEnabled() {
|
|
266
|
-
return this.options.enableFullContext || false;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
exports.EnvironmentContextModifier = EnvironmentContextModifier;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { ProcessedMessage } from "@codebolt/types/agent";
|
|
2
|
-
import { BaseMessageModifier } from "../base";
|
|
3
|
-
import { FlatUserMessage } from "@codebolt/types/sdk";
|
|
4
|
-
export interface FallbackHandlerOptions {
|
|
5
|
-
enableFallback?: boolean;
|
|
6
|
-
maxRetries?: number;
|
|
7
|
-
fallbackStrategies?: FallbackStrategy[];
|
|
8
|
-
timeoutMs?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare enum FallbackStrategy {
|
|
11
|
-
RETRY_WITH_SIMPLIFIED_CONTEXT = "retry_simplified",
|
|
12
|
-
RETRY_WITHOUT_TOOLS = "retry_no_tools",
|
|
13
|
-
RETRY_WITH_SHORTER_HISTORY = "retry_short_history",
|
|
14
|
-
USE_FALLBACK_MODEL = "fallback_model",
|
|
15
|
-
PROVIDE_ERROR_CONTEXT = "error_context"
|
|
16
|
-
}
|
|
17
|
-
export declare class FallbackHandlerModifier extends BaseMessageModifier {
|
|
18
|
-
private readonly options;
|
|
19
|
-
private fallbackContexts;
|
|
20
|
-
constructor(options?: FallbackHandlerOptions);
|
|
21
|
-
modify(originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
|
|
22
|
-
private generateMessageId;
|
|
23
|
-
private shouldApplyFallback;
|
|
24
|
-
private initializeFallbackContext;
|
|
25
|
-
private applyFallbackStrategy;
|
|
26
|
-
private getNextFallbackStrategy;
|
|
27
|
-
private simplifyContext;
|
|
28
|
-
private removeTools;
|
|
29
|
-
private shortenHistory;
|
|
30
|
-
private setFallbackModel;
|
|
31
|
-
private addErrorContextMessage;
|
|
32
|
-
private updateFallbackContext;
|
|
33
|
-
clearFallbackContext(messageId: string): void;
|
|
34
|
-
getFallbackStats(): {
|
|
35
|
-
totalContexts: number;
|
|
36
|
-
averageAttempts: number;
|
|
37
|
-
};
|
|
38
|
-
}
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FallbackHandlerModifier = exports.FallbackStrategy = void 0;
|
|
4
|
-
const base_1 = require("../base");
|
|
5
|
-
var FallbackStrategy;
|
|
6
|
-
(function (FallbackStrategy) {
|
|
7
|
-
FallbackStrategy["RETRY_WITH_SIMPLIFIED_CONTEXT"] = "retry_simplified";
|
|
8
|
-
FallbackStrategy["RETRY_WITHOUT_TOOLS"] = "retry_no_tools";
|
|
9
|
-
FallbackStrategy["RETRY_WITH_SHORTER_HISTORY"] = "retry_short_history";
|
|
10
|
-
FallbackStrategy["USE_FALLBACK_MODEL"] = "fallback_model";
|
|
11
|
-
FallbackStrategy["PROVIDE_ERROR_CONTEXT"] = "error_context";
|
|
12
|
-
})(FallbackStrategy || (exports.FallbackStrategy = FallbackStrategy = {}));
|
|
13
|
-
class FallbackHandlerModifier extends base_1.BaseMessageModifier {
|
|
14
|
-
constructor(options = {}) {
|
|
15
|
-
super();
|
|
16
|
-
this.fallbackContexts = new Map();
|
|
17
|
-
this.options = {
|
|
18
|
-
enableFallback: options.enableFallback !== false,
|
|
19
|
-
maxRetries: options.maxRetries || 3,
|
|
20
|
-
fallbackStrategies: options.fallbackStrategies || [
|
|
21
|
-
FallbackStrategy.RETRY_WITH_SIMPLIFIED_CONTEXT,
|
|
22
|
-
FallbackStrategy.RETRY_WITHOUT_TOOLS,
|
|
23
|
-
FallbackStrategy.RETRY_WITH_SHORTER_HISTORY
|
|
24
|
-
],
|
|
25
|
-
timeoutMs: options.timeoutMs || 30000
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
async modify(originalRequest, createdMessage) {
|
|
29
|
-
try {
|
|
30
|
-
if (!this.options.enableFallback) {
|
|
31
|
-
return createdMessage;
|
|
32
|
-
}
|
|
33
|
-
// Check if this is a retry attempt
|
|
34
|
-
const messageId = this.generateMessageId(originalRequest);
|
|
35
|
-
const fallbackContext = this.fallbackContexts.get(messageId);
|
|
36
|
-
if (fallbackContext && fallbackContext.attemptCount >= this.options.maxRetries) {
|
|
37
|
-
// Max retries reached, add error context and return
|
|
38
|
-
return this.addErrorContextMessage(createdMessage, fallbackContext);
|
|
39
|
-
}
|
|
40
|
-
// Check if we need to apply fallback strategies
|
|
41
|
-
const shouldApplyFallback = this.shouldApplyFallback(createdMessage, fallbackContext);
|
|
42
|
-
if (!shouldApplyFallback) {
|
|
43
|
-
return createdMessage;
|
|
44
|
-
}
|
|
45
|
-
// Apply the next fallback strategy
|
|
46
|
-
const modifiedMessage = await this.applyFallbackStrategy(createdMessage, fallbackContext || this.initializeFallbackContext(originalRequest));
|
|
47
|
-
// Update fallback context
|
|
48
|
-
this.updateFallbackContext(messageId, modifiedMessage);
|
|
49
|
-
return modifiedMessage;
|
|
50
|
-
}
|
|
51
|
-
catch (error) {
|
|
52
|
-
console.error('Error in FallbackHandlerModifier:', error);
|
|
53
|
-
return createdMessage;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
generateMessageId(request) {
|
|
57
|
-
// Generate a unique ID for this message request
|
|
58
|
-
const content = request.userMessage || '';
|
|
59
|
-
return Buffer.from(content).toString('base64').substring(0, 16);
|
|
60
|
-
}
|
|
61
|
-
shouldApplyFallback(message, context) {
|
|
62
|
-
var _a, _b, _c;
|
|
63
|
-
// Check metadata for error indicators
|
|
64
|
-
const hasError = !!(((_a = message.metadata) === null || _a === void 0 ? void 0 : _a.hasError) || ((_b = message.metadata) === null || _b === void 0 ? void 0 : _b.lastError));
|
|
65
|
-
const isRetry = !!((_c = message.metadata) === null || _c === void 0 ? void 0 : _c.isRetry) || ((context === null || context === void 0 ? void 0 : context.attemptCount) || 0) > 0;
|
|
66
|
-
return hasError || isRetry;
|
|
67
|
-
}
|
|
68
|
-
initializeFallbackContext(originalRequest) {
|
|
69
|
-
const content = originalRequest.userMessage || '';
|
|
70
|
-
return {
|
|
71
|
-
attemptCount: 0,
|
|
72
|
-
originalMessageLength: content.length,
|
|
73
|
-
fallbacksAttempted: []
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
async applyFallbackStrategy(message, context) {
|
|
77
|
-
const nextStrategy = this.getNextFallbackStrategy(context);
|
|
78
|
-
if (!nextStrategy) {
|
|
79
|
-
return message;
|
|
80
|
-
}
|
|
81
|
-
context.fallbacksAttempted.push(nextStrategy);
|
|
82
|
-
switch (nextStrategy) {
|
|
83
|
-
case FallbackStrategy.RETRY_WITH_SIMPLIFIED_CONTEXT:
|
|
84
|
-
return this.simplifyContext(message);
|
|
85
|
-
case FallbackStrategy.RETRY_WITHOUT_TOOLS:
|
|
86
|
-
return this.removeTools(message);
|
|
87
|
-
case FallbackStrategy.RETRY_WITH_SHORTER_HISTORY:
|
|
88
|
-
return this.shortenHistory(message);
|
|
89
|
-
case FallbackStrategy.USE_FALLBACK_MODEL:
|
|
90
|
-
return this.setFallbackModel(message);
|
|
91
|
-
case FallbackStrategy.PROVIDE_ERROR_CONTEXT:
|
|
92
|
-
return this.addErrorContextMessage(message, context);
|
|
93
|
-
default:
|
|
94
|
-
return message;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
getNextFallbackStrategy(context) {
|
|
98
|
-
const availableStrategies = this.options.fallbackStrategies.filter(strategy => !context.fallbacksAttempted.includes(strategy));
|
|
99
|
-
return availableStrategies.length > 0 ? availableStrategies[0] : null;
|
|
100
|
-
}
|
|
101
|
-
simplifyContext(message) {
|
|
102
|
-
// Remove or simplify complex context messages
|
|
103
|
-
const simplifiedMessages = message.message.messages.map(msg => {
|
|
104
|
-
if (msg.role === 'system' && typeof msg.content === 'string' && msg.content.length > 500) {
|
|
105
|
-
return {
|
|
106
|
-
...msg,
|
|
107
|
-
content: msg.content.substring(0, 500) + '...[context simplified for fallback]'
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
return msg;
|
|
111
|
-
});
|
|
112
|
-
return {
|
|
113
|
-
...message,
|
|
114
|
-
message: {
|
|
115
|
-
...message.message,
|
|
116
|
-
messages: simplifiedMessages
|
|
117
|
-
},
|
|
118
|
-
metadata: {
|
|
119
|
-
...message.metadata,
|
|
120
|
-
fallbackApplied: 'simplified_context',
|
|
121
|
-
isRetry: true
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
removeTools(message) {
|
|
126
|
-
return {
|
|
127
|
-
...message,
|
|
128
|
-
metadata: {
|
|
129
|
-
...message.metadata,
|
|
130
|
-
fallbackApplied: 'no_tools',
|
|
131
|
-
toolsDisabled: true,
|
|
132
|
-
isRetry: true
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
shortenHistory(message) {
|
|
137
|
-
// Keep only the last few messages
|
|
138
|
-
const messages = message.message.messages;
|
|
139
|
-
const systemMessages = messages.filter(msg => msg.role === 'system');
|
|
140
|
-
const otherMessages = messages.filter(msg => msg.role !== 'system');
|
|
141
|
-
const recentMessages = otherMessages.slice(-3); // Keep last 3 non-system messages
|
|
142
|
-
return {
|
|
143
|
-
...message,
|
|
144
|
-
message: {
|
|
145
|
-
...message.message,
|
|
146
|
-
messages: [...systemMessages, ...recentMessages]
|
|
147
|
-
},
|
|
148
|
-
metadata: {
|
|
149
|
-
...message.metadata,
|
|
150
|
-
fallbackApplied: 'shortened_history',
|
|
151
|
-
originalMessageCount: messages.length,
|
|
152
|
-
isRetry: true
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
setFallbackModel(message) {
|
|
157
|
-
return {
|
|
158
|
-
...message,
|
|
159
|
-
metadata: {
|
|
160
|
-
...message.metadata,
|
|
161
|
-
fallbackApplied: 'fallback_model',
|
|
162
|
-
useFallbackModel: true,
|
|
163
|
-
isRetry: true
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
addErrorContextMessage(message, context) {
|
|
168
|
-
const errorMessage = {
|
|
169
|
-
role: 'system',
|
|
170
|
-
content: `Note: This request has been attempted ${context.attemptCount} times with fallback strategies: ${context.fallbacksAttempted.join(', ')}. Please provide a simpler response if the request seems too complex.`
|
|
171
|
-
};
|
|
172
|
-
return {
|
|
173
|
-
...message,
|
|
174
|
-
message: {
|
|
175
|
-
...message.message,
|
|
176
|
-
messages: [errorMessage, ...message.message.messages]
|
|
177
|
-
},
|
|
178
|
-
metadata: {
|
|
179
|
-
...message.metadata,
|
|
180
|
-
fallbackApplied: 'error_context',
|
|
181
|
-
fallbackExhausted: true,
|
|
182
|
-
isRetry: true
|
|
183
|
-
}
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
updateFallbackContext(messageId, message) {
|
|
187
|
-
const existingContext = this.fallbackContexts.get(messageId);
|
|
188
|
-
if (existingContext) {
|
|
189
|
-
existingContext.attemptCount++;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
this.fallbackContexts.set(messageId, {
|
|
193
|
-
attemptCount: 1,
|
|
194
|
-
originalMessageLength: JSON.stringify(message.message).length,
|
|
195
|
-
fallbacksAttempted: []
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
// Clean up old contexts (prevent memory leaks)
|
|
199
|
-
if (this.fallbackContexts.size > 100) {
|
|
200
|
-
const entries = Array.from(this.fallbackContexts.entries());
|
|
201
|
-
const oldestKey = entries[0][0];
|
|
202
|
-
this.fallbackContexts.delete(oldestKey);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
clearFallbackContext(messageId) {
|
|
206
|
-
this.fallbackContexts.delete(messageId);
|
|
207
|
-
}
|
|
208
|
-
getFallbackStats() {
|
|
209
|
-
const contexts = Array.from(this.fallbackContexts.values());
|
|
210
|
-
const totalAttempts = contexts.reduce((sum, ctx) => sum + ctx.attemptCount, 0);
|
|
211
|
-
return {
|
|
212
|
-
totalContexts: contexts.length,
|
|
213
|
-
averageAttempts: contexts.length > 0 ? totalAttempts / contexts.length : 0
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
exports.FallbackHandlerModifier = FallbackHandlerModifier;
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { ProcessedMessage } from "@codebolt/types/agent";
|
|
2
|
-
import { BaseMessageModifier } from "../base";
|
|
3
|
-
import { FlatUserMessage } from "@codebolt/types/sdk";
|
|
4
|
-
export interface IdeContextOptions {
|
|
5
|
-
includeOpenFiles?: boolean;
|
|
6
|
-
includeActiveFile?: boolean;
|
|
7
|
-
includeCursorPosition?: boolean;
|
|
8
|
-
includeSelectedText?: boolean;
|
|
9
|
-
maxOpenFiles?: number;
|
|
10
|
-
}
|
|
11
|
-
export interface FileInfo {
|
|
12
|
-
path: string;
|
|
13
|
-
isActive?: boolean;
|
|
14
|
-
cursor?: {
|
|
15
|
-
line: number;
|
|
16
|
-
character: number;
|
|
17
|
-
};
|
|
18
|
-
selectedText?: string;
|
|
19
|
-
}
|
|
20
|
-
export interface IdeContext {
|
|
21
|
-
workspaceState?: {
|
|
22
|
-
openFiles: FileInfo[];
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
export declare class IdeContextModifier extends BaseMessageModifier {
|
|
26
|
-
private readonly options;
|
|
27
|
-
private lastSentIdeContext?;
|
|
28
|
-
private forceFullContext;
|
|
29
|
-
constructor(options?: IdeContextOptions);
|
|
30
|
-
modify(originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
|
|
31
|
-
private getIdeContext;
|
|
32
|
-
private getIdeContextParts;
|
|
33
|
-
setForceFullContext(force: boolean): void;
|
|
34
|
-
}
|