@codebolt/agent 1.1.0 → 2.2.2
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/README.md +157 -66
- package/dist/builderpattern/agent.d.ts +86 -0
- package/dist/builderpattern/agent.js +324 -0
- package/dist/builderpattern/followupquestionbuilder.d.ts +75 -0
- package/dist/builderpattern/followupquestionbuilder.js +197 -0
- package/dist/builderpattern/index.d.ts +14 -0
- package/dist/builderpattern/index.js +23 -0
- package/dist/builderpattern/llmoutputhandler.d.ts +102 -0
- package/dist/builderpattern/llmoutputhandler.js +452 -0
- package/dist/builderpattern/promptbuilder.d.ts +382 -0
- package/dist/builderpattern/promptbuilder.js +805 -0
- package/dist/builderpattern/systemprompt.d.ts +20 -0
- package/dist/builderpattern/systemprompt.js +48 -0
- package/dist/builderpattern/taskInstruction.d.ts +37 -0
- package/dist/builderpattern/taskInstruction.js +57 -0
- package/dist/builderpattern/usermessage.d.ts +70 -0
- package/dist/builderpattern/usermessage.js +123 -0
- package/dist/composablepattern/agent.d.ts +169 -0
- package/dist/composablepattern/agent.js +598 -0
- package/dist/composablepattern/codebolt-storage.d.ts +67 -0
- package/dist/composablepattern/codebolt-storage.js +320 -0
- package/dist/composablepattern/document.d.ts +149 -0
- package/dist/composablepattern/document.js +405 -0
- package/dist/composablepattern/examples/codebolt-integration-example.d.ts +12 -0
- package/dist/composablepattern/examples/codebolt-integration-example.js +218 -0
- package/dist/composablepattern/examples/codebolt-storage-example.d.ts +40 -0
- package/dist/composablepattern/examples/codebolt-storage-example.js +223 -0
- package/dist/composablepattern/examples/custom-steps-example.d.ts +20 -0
- package/dist/composablepattern/examples/custom-steps-example.js +455 -0
- package/dist/composablepattern/examples/document-agent.d.ts +17 -0
- package/dist/composablepattern/examples/document-agent.js +107 -0
- package/dist/composablepattern/examples/simple-codebolt-integration.d.ts +8 -0
- package/dist/composablepattern/examples/simple-codebolt-integration.js +164 -0
- package/dist/composablepattern/examples/weather-agent.d.ts +18 -0
- package/dist/composablepattern/examples/weather-agent.js +86 -0
- package/dist/composablepattern/examples/workflow-example.d.ts +12 -0
- package/dist/composablepattern/examples/workflow-example.js +463 -0
- package/dist/composablepattern/index.d.ts +63 -0
- package/dist/composablepattern/index.js +115 -0
- package/dist/composablepattern/memory.d.ts +89 -0
- package/dist/composablepattern/memory.js +141 -0
- package/dist/composablepattern/tool.d.ts +84 -0
- package/dist/composablepattern/tool.js +260 -0
- package/dist/composablepattern/types.d.ts +194 -0
- package/dist/composablepattern/types.js +6 -0
- package/dist/composablepattern/user-context.d.ts +214 -0
- package/dist/composablepattern/user-context.js +275 -0
- package/dist/composablepattern/workflow.d.ts +388 -0
- package/dist/composablepattern/workflow.js +562 -0
- package/dist/processor/agent/agentStep.d.ts +49 -0
- package/dist/processor/agent/agentStep.js +241 -0
- package/dist/processor/agent/toolExecutor.d.ts +19 -0
- package/dist/processor/agent/toolExecutor.js +90 -0
- package/dist/processor/index.d.ts +7 -0
- package/dist/processor/index.js +36 -0
- package/dist/processor/messageModifiers/baseMessageModifier.d.ts +20 -0
- package/dist/processor/messageModifiers/baseMessageModifier.js +55 -0
- package/dist/processor/processors/baseProcessor.d.ts +14 -0
- package/dist/processor/processors/baseProcessor.js +29 -0
- package/dist/processor/tools/baseTool.d.ts +10 -0
- package/dist/processor/tools/baseTool.js +20 -0
- package/dist/processor/tools/toolList.d.ts +9 -0
- package/dist/processor/tools/toolList.js +22 -0
- package/dist/processor/types/interfaces.d.ts +94 -0
- package/dist/processor/types/interfaces.js +2 -0
- package/dist/processor-pieces/base/baseMessageModifier.d.ts +12 -0
- package/dist/processor-pieces/base/baseMessageModifier.js +15 -0
- package/dist/processor-pieces/base/basePostInferenceProcessor.d.ts +13 -0
- package/dist/processor-pieces/base/basePostInferenceProcessor.js +18 -0
- package/dist/processor-pieces/base/basePostToolCallProcessor.d.ts +15 -0
- package/dist/processor-pieces/base/basePostToolCallProcessor.js +25 -0
- package/dist/processor-pieces/base/basePreInferenceProcessor.d.ts +12 -0
- package/dist/processor-pieces/base/basePreInferenceProcessor.js +17 -0
- package/dist/processor-pieces/base/basePreToolCallProcessor.d.ts +18 -0
- package/dist/processor-pieces/base/basePreToolCallProcessor.js +66 -0
- package/dist/processor-pieces/base/index.d.ts +9 -0
- package/dist/processor-pieces/base/index.js +18 -0
- package/dist/processor-pieces/index.d.ts +1 -0
- package/dist/processor-pieces/index.js +59 -0
- package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.d.ts +22 -0
- package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.js +144 -0
- package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.d.ts +13 -0
- package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.js +68 -0
- package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.d.ts +25 -0
- package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.js +453 -0
- package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.d.ts +15 -0
- package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.js +75 -0
- package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.d.ts +11 -0
- package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.js +46 -0
- package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.d.ts +18 -0
- package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.js +104 -0
- package/dist/processor-pieces/messageModifiers/chatRecordingModifier.d.ts +23 -0
- package/dist/processor-pieces/messageModifiers/chatRecordingModifier.js +173 -0
- package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.d.ts +14 -0
- package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.js +130 -0
- package/dist/processor-pieces/messageModifiers/directoryContextModifier.d.ts +36 -0
- package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +418 -0
- package/dist/processor-pieces/messageModifiers/environmentContextModifier.d.ts +26 -0
- package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +260 -0
- package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.d.ts +12 -0
- package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.js +60 -0
- package/dist/processor-pieces/messageModifiers/ideContextModifier.d.ts +34 -0
- package/dist/processor-pieces/messageModifiers/ideContextModifier.js +157 -0
- package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.d.ts +18 -0
- package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.js +222 -0
- package/dist/processor-pieces/messageModifiers/index.d.ts +11 -0
- package/dist/processor-pieces/messageModifiers/index.js +26 -0
- package/dist/processor-pieces/messageModifiers/memoryImportModifier.d.ts +15 -0
- package/dist/processor-pieces/messageModifiers/memoryImportModifier.js +129 -0
- package/dist/processor-pieces/messageModifiers/toolInjectionModifier.d.ts +20 -0
- package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +152 -0
- package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.d.ts +22 -0
- package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.js +194 -0
- package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.d.ts +29 -0
- package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.js +174 -0
- package/dist/processor-pieces/postToolCallProcessors/index.d.ts +1 -0
- package/dist/processor-pieces/postToolCallProcessors/index.js +2 -0
- package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.d.ts +25 -0
- package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.js +225 -0
- package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.d.ts +35 -0
- package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +255 -0
- package/dist/processor-pieces/preInferenceProcessors/index.d.ts +1 -0
- package/dist/processor-pieces/preInferenceProcessors/index.js +2 -0
- package/dist/processor-pieces/pretoolCallProcessors/index.d.ts +1 -0
- package/dist/processor-pieces/pretoolCallProcessors/index.js +2 -0
- package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.d.ts +41 -0
- package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.js +197 -0
- package/dist/processor-pieces/processors/chatCompressionProcessor.d.ts +26 -0
- package/dist/processor-pieces/processors/chatCompressionProcessor.js +90 -0
- package/dist/processor-pieces/processors/chatRecordingProcessor.d.ts +81 -0
- package/dist/processor-pieces/processors/chatRecordingProcessor.js +329 -0
- package/dist/processor-pieces/processors/contextManagementProcessor.d.ts +40 -0
- package/dist/processor-pieces/processors/contextManagementProcessor.js +305 -0
- package/dist/processor-pieces/processors/loopDetectionProcessor.d.ts +30 -0
- package/dist/processor-pieces/processors/loopDetectionProcessor.js +137 -0
- package/dist/processor-pieces/processors/responseValidationProcessor.d.ts +30 -0
- package/dist/processor-pieces/processors/responseValidationProcessor.js +228 -0
- package/dist/processor-pieces/processors/telemetryProcessor.d.ts +99 -0
- package/dist/processor-pieces/processors/telemetryProcessor.js +311 -0
- package/dist/processor-pieces/processors/tokenManagementProcessor.d.ts +37 -0
- package/dist/processor-pieces/processors/tokenManagementProcessor.js +178 -0
- package/dist/processor-pieces/processors/toolExecutionProcessor.d.ts +43 -0
- package/dist/processor-pieces/processors/toolExecutionProcessor.js +207 -0
- package/dist/processor-pieces/tools/fileTools.d.ts +26 -0
- package/dist/processor-pieces/tools/fileTools.js +162 -0
- package/dist/processor-pieces/utils/messageModifierHelper.d.ts +4 -0
- package/dist/processor-pieces/utils/messageModifierHelper.js +58 -0
- package/dist/types/commonTypes.d.ts +4 -0
- package/dist/types/processorTypes.d.ts +67 -0
- package/dist/types/processorTypes.js +58 -0
- package/dist/unified/agent/agent.d.ts +17 -0
- package/dist/unified/agent/agent.js +79 -0
- package/dist/unified/agent/team.d.ts +2 -0
- package/dist/unified/agent/team.js +6 -0
- package/dist/unified/agent/tools.d.ts +44 -0
- package/dist/unified/agent/tools.js +487 -0
- package/dist/unified/agent/workflow.d.ts +24 -0
- package/dist/unified/agent/workflow.js +275 -0
- package/dist/unified/agent/workflowControls.d.ts +11 -0
- package/dist/unified/agent/workflowControls.js +20 -0
- package/dist/unified/agent/workflowSteps.d.ts +63 -0
- package/dist/unified/agent/workflowSteps.js +284 -0
- package/dist/unified/base/agentStep.d.ts +32 -0
- package/dist/unified/base/agentStep.js +96 -0
- package/dist/unified/base/create/createInitialPromptGenerators.d.ts +5 -0
- package/dist/unified/base/create/createInitialPromptGenerators.js +17 -0
- package/dist/unified/base/index.d.ts +5 -0
- package/dist/unified/base/index.js +13 -0
- package/dist/unified/base/initialPromptGenerator.d.ts +48 -0
- package/dist/unified/base/initialPromptGenerator.js +118 -0
- package/dist/unified/base/responseExecutor.d.ts +36 -0
- package/dist/unified/base/responseExecutor.js +283 -0
- package/dist/unified/index.d.ts +18 -0
- package/dist/unified/index.js +42 -0
- package/dist/unified/team/team.d.ts +1 -0
- package/dist/unified/team/team.js +2 -0
- package/dist/unified/types/libTypes.d.ts +378 -0
- package/dist/unified/types/libTypes.js +6 -0
- package/dist/unified/types/types.d.ts +212 -0
- package/dist/unified/types/types.js +43 -0
- package/dist/unified/utils/utils.d.ts +40 -0
- package/dist/unified/utils/utils.js +219 -0
- package/package.json +29 -7
|
@@ -0,0 +1,96 @@
|
|
|
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.AgentStep = void 0;
|
|
7
|
+
const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
|
|
8
|
+
/**
|
|
9
|
+
* Unified agent step that handles LLM interaction and tool call analysis
|
|
10
|
+
*/
|
|
11
|
+
class AgentStep {
|
|
12
|
+
constructor(options = {}) {
|
|
13
|
+
this.preInferenceProcessors = options.preInferenceProcessors || [];
|
|
14
|
+
this.postInferenceProcessors = options.postInferenceProcessors || [];
|
|
15
|
+
this.llmRole = options.llmRole || 'default';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Execute a single agent step
|
|
19
|
+
*/
|
|
20
|
+
async executeStep(originalRequest, createdMessage) {
|
|
21
|
+
var _a;
|
|
22
|
+
try {
|
|
23
|
+
for (const preInferenceProcessor of this.preInferenceProcessors) {
|
|
24
|
+
try {
|
|
25
|
+
// Each modifier returns a new ProcessedMessage
|
|
26
|
+
createdMessage = await preInferenceProcessor.modify(originalRequest, createdMessage);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
console.error(`[InitialPromptGenerator] Error in message modifier:`, error);
|
|
30
|
+
// Continue with other modifiers
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Generate LLM response
|
|
34
|
+
const rawLLMResponse = await this.generateResponse(createdMessage.message);
|
|
35
|
+
// add llm reslponse to created message
|
|
36
|
+
let modifiedMessage = createdMessage;
|
|
37
|
+
(_a = rawLLMResponse.choices) === null || _a === void 0 ? void 0 : _a.forEach(contentBlock => {
|
|
38
|
+
modifiedMessage.message.messages.push({
|
|
39
|
+
...contentBlock.message,
|
|
40
|
+
role: contentBlock.message.role
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
for (const postInferenceProcessor of this.postInferenceProcessors) {
|
|
44
|
+
try {
|
|
45
|
+
// Each modifier returns a new ProcessedMessage
|
|
46
|
+
modifiedMessage = await postInferenceProcessor.modify(createdMessage, rawLLMResponse, modifiedMessage);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(`[InitialPromptGenerator] Error in message modifier:`, error);
|
|
50
|
+
// Continue with other modifiers
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const output = {
|
|
54
|
+
rawLLMResponse: rawLLMResponse,
|
|
55
|
+
nextMessage: modifiedMessage,
|
|
56
|
+
actualMessageSentToLLM: createdMessage
|
|
57
|
+
};
|
|
58
|
+
return output;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
62
|
+
throw new Error(`Failed to execute agent step: ${errorMessage}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async generateResponse(messageForLLM) {
|
|
66
|
+
const response = await codeboltjs_1.default.llm.inference(messageForLLM);
|
|
67
|
+
return response.completion;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Update LLM configuration
|
|
71
|
+
*/
|
|
72
|
+
setLLMConfig(config) {
|
|
73
|
+
this.llmRole = config;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get current LLM configuration
|
|
77
|
+
*/
|
|
78
|
+
getLLMConfig() {
|
|
79
|
+
return this.llmRole;
|
|
80
|
+
}
|
|
81
|
+
updatePreInferenceProcessors(processors) {
|
|
82
|
+
this.preInferenceProcessors = processors;
|
|
83
|
+
}
|
|
84
|
+
;
|
|
85
|
+
getPreInferenceProcessors() {
|
|
86
|
+
return this.preInferenceProcessors;
|
|
87
|
+
}
|
|
88
|
+
updatePostInferenceProcessors(processors) {
|
|
89
|
+
this.postInferenceProcessors = processors;
|
|
90
|
+
}
|
|
91
|
+
;
|
|
92
|
+
getPostInferenceProcessors() {
|
|
93
|
+
return this.postInferenceProcessors;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.AgentStep = AgentStep;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDefaultMessageProcessor = createDefaultMessageProcessor;
|
|
4
|
+
const initialPromptGenerator_1 = require("../initialPromptGenerator");
|
|
5
|
+
/**
|
|
6
|
+
* Utility function to create a basic message processor with default settings
|
|
7
|
+
*/
|
|
8
|
+
function createDefaultMessageProcessor() {
|
|
9
|
+
return new initialPromptGenerator_1.InitialPromptGenerator({
|
|
10
|
+
enableLogging: true,
|
|
11
|
+
processors: [], //TODO add some default processors here
|
|
12
|
+
metaData: {
|
|
13
|
+
timestamp: new Date().toISOString(),
|
|
14
|
+
version: '1.0.0'
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unified Base Classes Index
|
|
4
|
+
* Exports core unified framework classes
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.InitialPromptGenerator = void 0;
|
|
8
|
+
// Core unified framework classes
|
|
9
|
+
var initialPromptGenerator_1 = require("./initialPromptGenerator");
|
|
10
|
+
Object.defineProperty(exports, "InitialPromptGenerator", { enumerable: true, get: function () { return initialPromptGenerator_1.InitialPromptGenerator; } });
|
|
11
|
+
// export { default as AgentStep } from './agentStep';
|
|
12
|
+
// Response executor functions
|
|
13
|
+
// export { createUnifiedResponseExecutor, createBasicResponseExecutor } from './responseExecutor';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { FlatUserMessage } from '@codebolt/types/sdk';
|
|
2
|
+
import type { InitialPromptGeneratorInterface, MessageModifier, ProcessedMessage } from '@codebolt/types/agent';
|
|
3
|
+
/**
|
|
4
|
+
* Initial prompt generator that combines message modifiers with unified processing
|
|
5
|
+
*/
|
|
6
|
+
export declare class InitialPromptGenerator implements InitialPromptGeneratorInterface {
|
|
7
|
+
private processors;
|
|
8
|
+
private metaData;
|
|
9
|
+
private enableLogging;
|
|
10
|
+
private baseSystemPrompt?;
|
|
11
|
+
constructor(options?: {
|
|
12
|
+
processors?: MessageModifier[];
|
|
13
|
+
baseSystemPrompt?: string;
|
|
14
|
+
metaData?: Record<string, unknown>;
|
|
15
|
+
enableLogging?: boolean;
|
|
16
|
+
templating?: boolean;
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Process and modify input messages using the message modifier pattern
|
|
20
|
+
*/
|
|
21
|
+
processMessage(input: FlatUserMessage): Promise<ProcessedMessage>;
|
|
22
|
+
/**
|
|
23
|
+
* Set context value
|
|
24
|
+
*/
|
|
25
|
+
setMetaData(key: string, value: unknown): void;
|
|
26
|
+
/**
|
|
27
|
+
* Get context value
|
|
28
|
+
*/
|
|
29
|
+
getMetaData(key: string): unknown;
|
|
30
|
+
/**
|
|
31
|
+
* Clear all context
|
|
32
|
+
*/
|
|
33
|
+
clearMetaData(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Get all message modifiers
|
|
36
|
+
*/
|
|
37
|
+
updateProcessors(processors: MessageModifier[]): void;
|
|
38
|
+
getProcessors(): MessageModifier[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Factory function to create a unified message processor with message modifiers
|
|
42
|
+
*/
|
|
43
|
+
export declare function createUnifiedMessageProcessor(options?: {
|
|
44
|
+
processors?: MessageModifier[];
|
|
45
|
+
baseSystemPrompt?: string;
|
|
46
|
+
metaData?: Record<string, unknown>;
|
|
47
|
+
enableLogging?: boolean;
|
|
48
|
+
}): InitialPromptGeneratorInterface;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InitialPromptGenerator = void 0;
|
|
4
|
+
exports.createUnifiedMessageProcessor = createUnifiedMessageProcessor;
|
|
5
|
+
const types_1 = require("../types/types");
|
|
6
|
+
/**
|
|
7
|
+
* Initial prompt generator that combines message modifiers with unified processing
|
|
8
|
+
*/
|
|
9
|
+
class InitialPromptGenerator {
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
this.processors = [];
|
|
12
|
+
this.metaData = {};
|
|
13
|
+
this.processors = options.processors || [];
|
|
14
|
+
this.metaData = options.metaData || {};
|
|
15
|
+
this.enableLogging = options.enableLogging !== false;
|
|
16
|
+
this.baseSystemPrompt = options.baseSystemPrompt;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Process and modify input messages using the message modifier pattern
|
|
20
|
+
*/
|
|
21
|
+
async processMessage(input) {
|
|
22
|
+
try {
|
|
23
|
+
if (this.enableLogging) {
|
|
24
|
+
console.log('[InitialPromptGenerator] Processing message:', input);
|
|
25
|
+
}
|
|
26
|
+
// Create initial ProcessedMessage from FlatUserMessage
|
|
27
|
+
const content = input.userMessage;
|
|
28
|
+
// Create messages array, starting with system message if baseSystemPrompt is defined
|
|
29
|
+
const messages = [];
|
|
30
|
+
let createdMessage = {
|
|
31
|
+
message: {
|
|
32
|
+
messages: messages,
|
|
33
|
+
tools: []
|
|
34
|
+
},
|
|
35
|
+
metadata: {
|
|
36
|
+
timestamp: new Date().toISOString(),
|
|
37
|
+
messageId: input.messageId,
|
|
38
|
+
threadId: input.threadId
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
// Apply all message modifiers in sequence
|
|
42
|
+
// Each modifier receives the original request (FlatUserMessage) and the current processed message
|
|
43
|
+
for (const messageModifier of this.processors) {
|
|
44
|
+
try {
|
|
45
|
+
// Each modifier returns a new ProcessedMessage
|
|
46
|
+
createdMessage = await messageModifier.modify(input, createdMessage);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(`[InitialPromptGenerator] Error in message modifier:`, error);
|
|
50
|
+
// Continue with other modifiers
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
createdMessage.message.messages.push({
|
|
54
|
+
role: 'assistant',
|
|
55
|
+
content: "Got it. Thanks for the context!"
|
|
56
|
+
});
|
|
57
|
+
createdMessage.message.messages.push({
|
|
58
|
+
role: 'user',
|
|
59
|
+
content: content.trim()
|
|
60
|
+
});
|
|
61
|
+
if (this.enableLogging) {
|
|
62
|
+
console.log('[InitialPromptGenerator] Processing completed:', {
|
|
63
|
+
messageCount: createdMessage.message.messages.length,
|
|
64
|
+
metadata: createdMessage.metadata
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (this.baseSystemPrompt !== undefined) {
|
|
68
|
+
const hasSystem = createdMessage.message.messages.some(msg => msg.role === 'system');
|
|
69
|
+
if (!hasSystem) {
|
|
70
|
+
createdMessage.message.messages.unshift({
|
|
71
|
+
role: 'system',
|
|
72
|
+
content: this.baseSystemPrompt
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return createdMessage;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
80
|
+
throw new types_1.UnifiedMessageProcessingError(`Failed to process message: ${errorMessage}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Set context value
|
|
85
|
+
*/
|
|
86
|
+
setMetaData(key, value) {
|
|
87
|
+
this.metaData[key] = value;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get context value
|
|
91
|
+
*/
|
|
92
|
+
getMetaData(key) {
|
|
93
|
+
return this.metaData[key];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Clear all context
|
|
97
|
+
*/
|
|
98
|
+
clearMetaData() {
|
|
99
|
+
this.metaData = {};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Get all message modifiers
|
|
103
|
+
*/
|
|
104
|
+
updateProcessors(processors) {
|
|
105
|
+
this.processors = processors;
|
|
106
|
+
}
|
|
107
|
+
;
|
|
108
|
+
getProcessors() {
|
|
109
|
+
return this.processors;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.InitialPromptGenerator = InitialPromptGenerator;
|
|
113
|
+
/**
|
|
114
|
+
* Factory function to create a unified message processor with message modifiers
|
|
115
|
+
*/
|
|
116
|
+
function createUnifiedMessageProcessor(options = {}) {
|
|
117
|
+
return new InitialPromptGenerator(options);
|
|
118
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AgentResponseExecutor, PostToolCallProcessor, PreToolCallProcessor, ResponseInput, ResponseOutput } from '@codebolt/types/agent';
|
|
2
|
+
export declare class ResponseExecutor implements AgentResponseExecutor {
|
|
3
|
+
private preToolCalProcessors;
|
|
4
|
+
private postToolCallProcessors;
|
|
5
|
+
private completed;
|
|
6
|
+
constructor(options: {
|
|
7
|
+
preToolCalProcessors: PreToolCallProcessor[];
|
|
8
|
+
postToolCallProcessors: PostToolCallProcessor[];
|
|
9
|
+
});
|
|
10
|
+
executeResponse(input: ResponseInput): Promise<ResponseOutput>;
|
|
11
|
+
/**
|
|
12
|
+
* Extract tool details from tool call
|
|
13
|
+
*/
|
|
14
|
+
private getToolDetail;
|
|
15
|
+
private executeTools;
|
|
16
|
+
/**
|
|
17
|
+
* Executes a tool with given name and input.
|
|
18
|
+
*
|
|
19
|
+
* @param toolName - The name of the tool to execute
|
|
20
|
+
* @param toolInput - The input parameters for the tool
|
|
21
|
+
* @returns Promise with tuple [userRejected, result]
|
|
22
|
+
*/
|
|
23
|
+
private executeTool;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a tool result object from the tool execution response.
|
|
26
|
+
*
|
|
27
|
+
* @param tool_call_id - The ID of the tool call
|
|
28
|
+
* @param content - The content returned by the tool
|
|
29
|
+
* @returns ToolResult object
|
|
30
|
+
*/
|
|
31
|
+
private parseToolResult;
|
|
32
|
+
setPreToolCallProcessors(processors: PreToolCallProcessor[]): void;
|
|
33
|
+
setPostToolCallProcessors(processors: PostToolCallProcessor[]): void;
|
|
34
|
+
getPreToolCallProcessors(): PreToolCallProcessor[];
|
|
35
|
+
getPostToolCallProcessors(): PostToolCallProcessor[];
|
|
36
|
+
}
|
|
@@ -0,0 +1,283 @@
|
|
|
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.ResponseExecutor = void 0;
|
|
7
|
+
const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
|
|
8
|
+
class ResponseExecutor {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.preToolCalProcessors = [];
|
|
11
|
+
this.postToolCallProcessors = [];
|
|
12
|
+
this.completed = false;
|
|
13
|
+
this.preToolCalProcessors = options.preToolCalProcessors;
|
|
14
|
+
this.postToolCallProcessors = options.postToolCallProcessors;
|
|
15
|
+
}
|
|
16
|
+
async executeResponse(input) {
|
|
17
|
+
let nextMessage = input.nextMessage;
|
|
18
|
+
for (const preToolCallProcessor of this.preToolCalProcessors) {
|
|
19
|
+
try {
|
|
20
|
+
// TODO: Extract required properties from input for PreToolCallProcessorInput
|
|
21
|
+
let { nextPrompt, shouldExit } = await preToolCallProcessor.modify({ llmMessageSent: input.actualMessageSentToLLM, rawLLMResponseMessage: input.rawLLMOutput, nextPrompt: input.nextMessage });
|
|
22
|
+
nextMessage = nextPrompt;
|
|
23
|
+
if (shouldExit) {
|
|
24
|
+
this.completed = true;
|
|
25
|
+
Promise.resolve({
|
|
26
|
+
nextPrompt,
|
|
27
|
+
completed: this.completed
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error(`[InitialPromptGenerator] Error in message modifier:`, error);
|
|
33
|
+
// Continue with other modifiers
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//ToolCall here
|
|
37
|
+
let toolResults = await this.executeTools(input.rawLLMOutput);
|
|
38
|
+
// INSERT_YOUR_CODE
|
|
39
|
+
if (nextMessage && toolResults && toolResults.length > 0 && nextMessage && nextMessage.message && Array.isArray(nextMessage.message.messages)) {
|
|
40
|
+
for (const toolResult of toolResults) {
|
|
41
|
+
const messageObject = {
|
|
42
|
+
role: toolResult.role,
|
|
43
|
+
content: typeof toolResult.content === 'string' ? toolResult.content : JSON.stringify(toolResult.content),
|
|
44
|
+
tool_call_id: toolResult.tool_call_id
|
|
45
|
+
};
|
|
46
|
+
nextMessage.message.messages.push(messageObject);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// this.completed=true;
|
|
51
|
+
nextMessage.message.messages.push({
|
|
52
|
+
role: "user",
|
|
53
|
+
content: [{
|
|
54
|
+
type: "text",
|
|
55
|
+
text: "If you have completed the user's task, use the attempt_completion tool. if you have not completed the task and do not need additional information, then proceed with the next step of the task. (This is an automated message, so do not respond to it conversationally.)"
|
|
56
|
+
}]
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
for (const postToolCallProcessor of this.postToolCallProcessors) {
|
|
60
|
+
try {
|
|
61
|
+
// TODO: Extract required properties from input for PreToolCallProcessorInput
|
|
62
|
+
let { nextPrompt, shouldExit } = await postToolCallProcessor.modify({
|
|
63
|
+
llmMessageSent: input.actualMessageSentToLLM,
|
|
64
|
+
rawLLMResponseMessage: input.rawLLMOutput,
|
|
65
|
+
nextPrompt: input.nextMessage,
|
|
66
|
+
toolResults: []
|
|
67
|
+
});
|
|
68
|
+
if (shouldExit) {
|
|
69
|
+
this.completed = true;
|
|
70
|
+
Promise.resolve({
|
|
71
|
+
nextPrompt,
|
|
72
|
+
completed: this.completed
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error(`[InitialPromptGenerator] Error in message modifier:`, error);
|
|
78
|
+
// Continue with other modifiers
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
completed: this.completed,
|
|
83
|
+
nextMessage: nextMessage,
|
|
84
|
+
toolResults: toolResults
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extract tool details from tool call
|
|
89
|
+
*/
|
|
90
|
+
getToolDetail(tool) {
|
|
91
|
+
let toolInput = {};
|
|
92
|
+
if (tool.function.arguments) {
|
|
93
|
+
try {
|
|
94
|
+
toolInput = JSON.parse(tool.function.arguments);
|
|
95
|
+
}
|
|
96
|
+
catch (parseError) {
|
|
97
|
+
throw new Error(`Failed to parse tool arguments: ${parseError}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
toolName: tool.function.name,
|
|
102
|
+
toolInput: toolInput,
|
|
103
|
+
toolUseId: tool.id
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
async executeTools(llmResponse) {
|
|
107
|
+
var _a, _b;
|
|
108
|
+
try {
|
|
109
|
+
let fallBackMessages = [];
|
|
110
|
+
for (const contentBlock of llmResponse.choices || []) {
|
|
111
|
+
if (contentBlock.message) {
|
|
112
|
+
if (contentBlock.message.content != null) {
|
|
113
|
+
await codeboltjs_1.default.chat.sendMessage(contentBlock.message.content, {});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
try {
|
|
118
|
+
let toolResults = [];
|
|
119
|
+
let taskCompletedBlock;
|
|
120
|
+
let userRejectedToolUse = false;
|
|
121
|
+
const contentBlock = (_a = llmResponse.choices) === null || _a === void 0 ? void 0 : _a[0];
|
|
122
|
+
if (contentBlock && ((_b = contentBlock.message) === null || _b === void 0 ? void 0 : _b.tool_calls)) {
|
|
123
|
+
for (const tool of contentBlock.message.tool_calls) {
|
|
124
|
+
try {
|
|
125
|
+
const { toolInput, toolName, toolUseId } = this.getToolDetail(tool);
|
|
126
|
+
if (!userRejectedToolUse) {
|
|
127
|
+
if (toolName.includes("attempt_completion")) {
|
|
128
|
+
taskCompletedBlock = tool;
|
|
129
|
+
this.completed = true;
|
|
130
|
+
}
|
|
131
|
+
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,
|
|
141
|
+
});
|
|
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
|
+
}
|
|
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
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
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
|
+
});
|
|
182
|
+
if (toolResult.userMessage) {
|
|
183
|
+
fallBackMessages.push({
|
|
184
|
+
role: "user",
|
|
185
|
+
content: toolResult.userMessage.toString()
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
toolResults.push({
|
|
192
|
+
role: "tool",
|
|
193
|
+
tool_call_id: tool.id,
|
|
194
|
+
content: String(error),
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (taskCompletedBlock) {
|
|
200
|
+
let [_, result] = await this.executeTool(taskCompletedBlock.function.name, JSON.parse(taskCompletedBlock.function.arguments || "{}"));
|
|
201
|
+
if (result === "") {
|
|
202
|
+
// this.completed = true;
|
|
203
|
+
result = "The user is satisfied with the result.";
|
|
204
|
+
}
|
|
205
|
+
let toolResult = this.parseToolResult(taskCompletedBlock.id, result);
|
|
206
|
+
toolResults.push({
|
|
207
|
+
role: "tool",
|
|
208
|
+
tool_call_id: toolResult.tool_call_id,
|
|
209
|
+
content: toolResult.content,
|
|
210
|
+
});
|
|
211
|
+
if (toolResult.userMessage) {
|
|
212
|
+
fallBackMessages.push({
|
|
213
|
+
role: "user",
|
|
214
|
+
content: toolResult.userMessage.toString()
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
return toolResults;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
}
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Executes a tool with given name and input.
|
|
229
|
+
*
|
|
230
|
+
* @param toolName - The name of the tool to execute
|
|
231
|
+
* @param toolInput - The input parameters for the tool
|
|
232
|
+
* @returns Promise with tuple [userRejected, result]
|
|
233
|
+
*/
|
|
234
|
+
async executeTool(toolName, toolInput) {
|
|
235
|
+
//codebolttools--readfile
|
|
236
|
+
console.log("Executing tool: ", toolName, toolInput);
|
|
237
|
+
const [toolboxName, actualToolName] = toolName.split('--');
|
|
238
|
+
console.log("Toolbox name: ", toolboxName, "Actual tool name: ", actualToolName);
|
|
239
|
+
const { data } = await codeboltjs_1.default.mcp.executeTool(toolboxName, actualToolName, toolInput);
|
|
240
|
+
console.log("Tool result: ", data);
|
|
241
|
+
return [false, data];
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Creates a tool result object from the tool execution response.
|
|
245
|
+
*
|
|
246
|
+
* @param tool_call_id - The ID of the tool call
|
|
247
|
+
* @param content - The content returned by the tool
|
|
248
|
+
* @returns ToolResult object
|
|
249
|
+
*/
|
|
250
|
+
parseToolResult(tool_call_id, content) {
|
|
251
|
+
let userMessage = undefined;
|
|
252
|
+
try {
|
|
253
|
+
let parsed = JSON.parse(content);
|
|
254
|
+
console.log("Parsed Content: ", parsed);
|
|
255
|
+
if (parsed.payload && parsed.payload.content) {
|
|
256
|
+
content = `The browser action has been executed. The screenshot have been captured for your analysis. The tool response is provided in the next user message`;
|
|
257
|
+
// this.apiConversationHistory.push()
|
|
258
|
+
userMessage = parsed.payload.content;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
role: "tool",
|
|
265
|
+
tool_call_id,
|
|
266
|
+
content,
|
|
267
|
+
userMessage
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
setPreToolCallProcessors(processors) {
|
|
271
|
+
this.preToolCalProcessors = processors;
|
|
272
|
+
}
|
|
273
|
+
setPostToolCallProcessors(processors) {
|
|
274
|
+
this.postToolCallProcessors = processors;
|
|
275
|
+
}
|
|
276
|
+
getPreToolCallProcessors() {
|
|
277
|
+
return this.preToolCalProcessors;
|
|
278
|
+
}
|
|
279
|
+
getPostToolCallProcessors() {
|
|
280
|
+
return this.postToolCallProcessors;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
exports.ResponseExecutor = ResponseExecutor;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified Agent Framework
|
|
3
|
+
*
|
|
4
|
+
* This module provides a unified approach to agent development that combines:
|
|
5
|
+
* - Message modification using the processor pattern
|
|
6
|
+
* - Agent step execution with LLM integration
|
|
7
|
+
* - Response execution with tool handling and conversation management
|
|
8
|
+
*
|
|
9
|
+
* The framework is designed to be modular, extensible, and easy to use.
|
|
10
|
+
*/
|
|
11
|
+
export type { UnifiedAgentConfig, UnifiedMessageOutput, UnifiedStepInput, UnifiedStepOutput, UnifiedResponseInput, UnifiedResponseOutput, UnifiedAgentInput, UnifiedAgentOutput, UnifiedMessageModifier, UnifiedResponseExecutor, UnifiedAgentEvent, UnifiedAgentEventHandler, UnifiedAgentEventType } from './types/types';
|
|
12
|
+
export { UnifiedAgentError, UnifiedMessageProcessingError, UnifiedStepExecutionError, UnifiedResponseExecutionError, UnifiedToolExecutionError } from './types/types';
|
|
13
|
+
export { createDefaultMessageProcessor } from './base/create/createInitialPromptGenerators';
|
|
14
|
+
export { InitialPromptGenerator } from './base/initialPromptGenerator';
|
|
15
|
+
export { AgentStep } from './base/agentStep';
|
|
16
|
+
export { ResponseExecutor } from './base/responseExecutor';
|
|
17
|
+
export { type OpenAIMessage, type OpenAITool, type ToolResult, type CodeboltAPI, type AgentExecutionResult, type StreamChunk, type StreamCallback } from './types/libTypes';
|
|
18
|
+
export { type LLMConfig } from './types/libTypes';
|