Skip to content

Commit 88efd9c

Browse files
changes
1 parent ecd77c2 commit 88efd9c

File tree

9 files changed

+100
-75
lines changed

9 files changed

+100
-75
lines changed

index.d.ts

Lines changed: 44 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/// <reference types="node" />
12
import WebSocket from 'ws';
23
import { EventEmitter } from 'events';
34
/**
@@ -73,44 +74,44 @@ declare class Codebolt {
7374
};
7475
chat: {
7576
getChatHistory: () => Promise<import("@codebolt/types").ChatMessage[]>;
76-
setRequestHandler: (handler: (request: any, response: (data: any) => void) => Promise<void> | void) => void;
77+
setRequestHandler: (handler: (request: any, response: (data: any) => void) => void | Promise<void>) => void;
7778
onActionMessage: () => {
7879
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
79-
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
80-
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
81-
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
82-
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
83-
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
84-
removeAllListeners(eventName?: string | symbol | undefined): /*elided*/ any;
85-
setMaxListeners(n: number): /*elided*/ any;
80+
addListener<K_1>(eventName: string | symbol, listener: (...args: any[]) => void): any;
81+
on<K_2>(eventName: string | symbol, listener: (...args: any[]) => void): any;
82+
once<K_3>(eventName: string | symbol, listener: (...args: any[]) => void): any;
83+
removeListener<K_4>(eventName: string | symbol, listener: (...args: any[]) => void): any;
84+
off<K_5>(eventName: string | symbol, listener: (...args: any[]) => void): any;
85+
removeAllListeners(eventName?: string | symbol | undefined): any;
86+
setMaxListeners(n: number): any;
8687
getMaxListeners(): number;
87-
listeners<K>(eventName: string | symbol): Function[];
88-
rawListeners<K>(eventName: string | symbol): Function[];
89-
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
90-
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
91-
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
92-
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
88+
listeners<K_6>(eventName: string | symbol): Function[];
89+
rawListeners<K_7>(eventName: string | symbol): Function[];
90+
emit<K_8>(eventName: string | symbol, ...args: any[]): boolean;
91+
listenerCount<K_9>(eventName: string | symbol, listener?: Function | undefined): number;
92+
prependListener<K_10>(eventName: string | symbol, listener: (...args: any[]) => void): any;
93+
prependOnceListener<K_11>(eventName: string | symbol, listener: (...args: any[]) => void): any;
9394
eventNames(): (string | symbol)[];
9495
};
9596
sendMessage: (message: string, payload: any) => void;
9697
waitforReply: (message: string) => Promise<import("@codebolt/types").UserMessage>;
9798
processStarted: () => {
9899
event: {
99100
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
100-
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
101-
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
102-
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
103-
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
104-
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
105-
removeAllListeners(eventName?: string | symbol | undefined): /*elided*/ any;
106-
setMaxListeners(n: number): /*elided*/ any;
101+
addListener<K_1>(eventName: string | symbol, listener: (...args: any[]) => void): any;
102+
on<K_2>(eventName: string | symbol, listener: (...args: any[]) => void): any;
103+
once<K_3>(eventName: string | symbol, listener: (...args: any[]) => void): any;
104+
removeListener<K_4>(eventName: string | symbol, listener: (...args: any[]) => void): any;
105+
off<K_5>(eventName: string | symbol, listener: (...args: any[]) => void): any;
106+
removeAllListeners(eventName?: string | symbol | undefined): any;
107+
setMaxListeners(n: number): any;
107108
getMaxListeners(): number;
108-
listeners<K>(eventName: string | symbol): Function[];
109-
rawListeners<K>(eventName: string | symbol): Function[];
110-
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
111-
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
112-
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
113-
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
109+
listeners<K_6>(eventName: string | symbol): Function[];
110+
rawListeners<K_7>(eventName: string | symbol): Function[];
111+
emit<K_8>(eventName: string | symbol, ...args: any[]): boolean;
112+
listenerCount<K_9>(eventName: string | symbol, listener?: Function | undefined): number;
113+
prependListener<K_10>(eventName: string | symbol, listener: (...args: any[]) => void): any;
114+
prependOnceListener<K_11>(eventName: string | symbol, listener: (...args: any[]) => void): any;
114115
eventNames(): (string | symbol)[];
115116
};
116117
stopProcess: () => void;
@@ -124,29 +125,29 @@ declare class Codebolt {
124125
terminal: {
125126
eventEmitter: {
126127
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
127-
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
128-
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
129-
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
130-
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
131-
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
132-
removeAllListeners(eventName?: string | symbol | undefined): /*elided*/ any;
133-
setMaxListeners(n: number): /*elided*/ any;
128+
addListener<K_1>(eventName: string | symbol, listener: (...args: any[]) => void): any;
129+
on<K_2>(eventName: string | symbol, listener: (...args: any[]) => void): any;
130+
once<K_3>(eventName: string | symbol, listener: (...args: any[]) => void): any;
131+
removeListener<K_4>(eventName: string | symbol, listener: (...args: any[]) => void): any;
132+
off<K_5>(eventName: string | symbol, listener: (...args: any[]) => void): any;
133+
removeAllListeners(eventName?: string | symbol | undefined): any;
134+
setMaxListeners(n: number): any;
134135
getMaxListeners(): number;
135-
listeners<K>(eventName: string | symbol): Function[];
136-
rawListeners<K>(eventName: string | symbol): Function[];
137-
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
138-
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
139-
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
140-
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): /*elided*/ any;
136+
listeners<K_6>(eventName: string | symbol): Function[];
137+
rawListeners<K_7>(eventName: string | symbol): Function[];
138+
emit<K_8>(eventName: string | symbol, ...args: any[]): boolean;
139+
listenerCount<K_9>(eventName: string | symbol, listener?: Function | undefined): number;
140+
prependListener<K_10>(eventName: string | symbol, listener: (...args: any[]) => void): any;
141+
prependOnceListener<K_11>(eventName: string | symbol, listener: (...args: any[]) => void): any;
141142
eventNames(): (string | symbol)[];
142143
};
143144
executeCommand: (command: string, returnEmptyStringOnSuccess?: boolean) => Promise<unknown>;
144145
executeCommandRunUntilError: (command: string, executeInMain?: boolean) => Promise<import("@codebolt/types").CommandError>;
145146
sendManualInterrupt(): Promise<import("@codebolt/types").TerminalInterruptResponse>;
146-
executeCommandWithStream(command: string, executeInMain?: boolean): EventEmitter;
147+
executeCommandWithStream(command: string, executeInMain?: boolean): EventEmitter<[never]>;
147148
};
148149
codeutils: {
149-
getJsTree: (filePath?: string) => Promise<unknown>;
150+
getJsTree: (filePath?: string | undefined) => Promise<unknown>;
150151
getAllFilesAsMarkDown: () => Promise<string>;
151152
performMatch: (matcherDefinition: object, problemPatterns: any[], problems: any[]) => Promise<import("@codebolt/types").MatchProblemResponse>;
152153
getMatcherList: () => Promise<import("@codebolt/types").GetMatcherListTreeResponse>;
@@ -237,7 +238,7 @@ declare class Codebolt {
237238
}[]>;
238239
};
239240
MCP: {
240-
executeTool: (toolName: string, params: any, mcpServer?: string) => Promise<any>;
241+
executeTool: (toolName: string, params: any, mcpServer?: string | undefined) => Promise<any>;
241242
getMcpTools: (tools: string[]) => Promise<any>;
242243
getAllMCPTools: (mpcName: string) => Promise<any>;
243244
getMCPTool: (name: string) => Promise<any>;

modules/agentlib/agent.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ declare class Agent {
77
private maxRun;
88
private systemPrompt;
99
private userMessage;
10-
constructor(tools: any | undefined, systemPrompt: SystemPrompt, maxRun?: number, subAgents?: Agent[]);
10+
constructor(tools: any, systemPrompt: SystemPrompt, maxRun?: number, subAgents?: any[]);
1111
run(task: TaskInstruction, successCondition?: () => boolean): Promise<{
1212
success: boolean;
1313
error: string | null;

modules/agentlib/agent.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ exports.Agent = void 0;
77
const chat_1 = __importDefault(require("./../chat"));
88
const mcp_1 = __importDefault(require("./../mcp"));
99
const llm_1 = __importDefault(require("./../llm"));
10+
const agent_1 = __importDefault(require("./../agent"));
1011
class Agent {
1112
constructor(tools = [], systemPrompt, maxRun = 0, subAgents = []) {
1213
this.tools = tools;
@@ -15,6 +16,13 @@ class Agent {
1516
this.maxRun = maxRun;
1617
this.systemPrompt = systemPrompt;
1718
this.subAgents = subAgents;
19+
this.subAgents = subAgents.map(subagent => {
20+
subagent.function.name = `subagent--${subagent.function.name}`;
21+
return subagent;
22+
});
23+
this.tools = this.tools.concat(subAgents.map(subagent => ({
24+
...subagent
25+
})));
1826
}
1927
async run(task, successCondition = () => true) {
2028
var _a, _b;
@@ -60,11 +68,13 @@ class Agent {
6068
taskCompletedBlock = tool;
6169
}
6270
else {
63-
let [serverName, nameOfTool] = toolName.replace('--', ':').split(':');
71+
let [serverName] = toolName.replace('--', ':').split(':');
6472
if (serverName == 'subagent') {
65-
console.log("calling agent with params", nameOfTool, toolInput);
66-
const [didUserReject, result] = await this.startSubAgent(toolName, toolInput);
67-
console.log("tool result", result);
73+
console.log("calling agent with params", toolName, toolInput);
74+
const agentResponse = await agent_1.default.startAgent(toolName.replace("subagent--", ''), toolInput.task);
75+
console.log("got sub agent resonse result", agentResponse);
76+
const [didUserReject, result] = [false, "tool result is successful"];
77+
console.log("got sub agent resonse result", didUserReject, result);
6878
toolResults.push(this.getToolResult(toolUseId, result));
6979
if (didUserReject) {
7080
userRejectedToolUse = true;
@@ -110,10 +120,12 @@ class Agent {
110120
}
111121
}
112122
catch (error) {
123+
console.error("Error in agent tool call:", error);
113124
return { success: false, error: error instanceof Error ? error.message : String(error), message: null };
114125
}
115126
}
116127
catch (error) {
128+
console.error("Error in agent tool call:", error);
117129
return { success: false, error: error instanceof Error ? error.message : String(error), message: null };
118130
}
119131
}
@@ -151,7 +163,7 @@ class Agent {
151163
return mcp_1.default.executeTool(toolName, toolInput);
152164
}
153165
async startSubAgent(agentName, params) {
154-
return mcp_1.default.executeTool(agentName, params);
166+
return agent_1.default.startAgent(agentName, params.task);
155167
}
156168
getToolDetail(tool) {
157169
return {

modules/chat.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/// <reference types="node" />
12
import { EventEmitter } from 'events';
23
import { ChatMessage, UserMessage } from '@codebolt/types';
34
type RequestHandler = (request: any, response: (data: any) => void) => Promise<void> | void;
@@ -68,6 +69,6 @@ declare const cbchat: {
6869
* Sends a notification event to the server.
6970
* @param {string} notificationMessage - The message to be sent in the notification.
7071
*/
71-
sendNotificationEvent: (notificationMessage: string, type: "debug" | "git" | "planner" | "browser" | "editor" | "terminal" | "preview") => void;
72+
sendNotificationEvent: (notificationMessage: string, type: 'debug' | 'git' | 'planner' | 'browser' | 'editor' | 'terminal' | 'preview') => void;
7273
};
7374
export default cbchat;

modules/codeutils.js

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
1515
}) : function(o, v) {
1616
o["default"] = v;
1717
});
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-
})();
18+
var __importStar = (this && this.__importStar) || function (mod) {
19+
if (mod && mod.__esModule) return mod;
20+
var result = {};
21+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22+
__setModuleDefault(result, mod);
23+
return result;
24+
};
3525
var __importDefault = (this && this.__importDefault) || function (mod) {
3626
return (mod && mod.__esModule) ? mod : { "default": mod };
3727
};

modules/terminal.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/// <reference types="node" />
12
import { EventEmitter } from 'events';
23
import { CommandError, TerminalInterruptResponse } from '@codebolt/types';
34
/**

modules/toolBox.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/// <reference types="node" />
2+
/// <reference types="node" />
3+
/// <reference types="node" />
14
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
25
import { ClientCapabilities, CreateMessageRequestSchema, Root } from "@modelcontextprotocol/sdk/types.js";
36
import { z } from "zod";

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@codebolt/codeboltjs",
3-
"version": "1.1.90",
3+
"version": "1.1.91",
44
"description": "",
55
"keywords": [],
66
"author": "",

src/modules/agentlib/agent.ts

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import chatlib from "./../chat"
22
import mcp from "./../mcp"
33
import llm from "./../llm"
4+
import codeboltAgent from "./../agent"
45
import { SystemPrompt } from "./systemprompt";
56
import { TaskInstruction } from "./taskInstruction";
67

@@ -25,20 +26,28 @@ interface ToolDetails {
2526

2627
class Agent {
2728
private tools: any[];
28-
private subAgents: Agent[];
29+
private subAgents: any[];
2930
private apiConversationHistory: Message[];
3031
private maxRun: number;
3132
private systemPrompt: SystemPrompt;
3233
private userMessage: Message[];
3334

3435

35-
constructor(tools: any = [], systemPrompt: SystemPrompt, maxRun: number = 0, subAgents: Agent[] = []) {
36+
constructor(tools: any = [], systemPrompt: SystemPrompt, maxRun: number = 0, subAgents: any[] = []) {
3637
this.tools = tools;
3738
this.userMessage = [];
3839
this.apiConversationHistory = [];
3940
this.maxRun = maxRun;
4041
this.systemPrompt = systemPrompt;
4142
this.subAgents = subAgents;
43+
this.subAgents = subAgents.map(subagent => {
44+
subagent.function.name = `subagent--${subagent.function.name}`;
45+
return subagent;
46+
});
47+
this.tools = this.tools.concat(subAgents.map(subagent => ({
48+
...subagent
49+
})));
50+
4251

4352
}
4453

@@ -95,11 +104,17 @@ class Agent {
95104
taskCompletedBlock = tool;
96105
} else {
97106

98-
let [serverName, nameOfTool] = toolName.replace('--', ':').split(':');
107+
let [serverName] = toolName.replace('--', ':').split(':');
108+
109+
99110
if (serverName == 'subagent') {
100-
console.log("calling agent with params", nameOfTool, toolInput);
101-
const [didUserReject, result] = await this.startSubAgent(toolName, toolInput);
102-
console.log("tool result", result);
111+
console.log("calling agent with params", toolName, toolInput);
112+
113+
const agentResponse = await codeboltAgent.startAgent(toolName.replace("subagent--", ''), toolInput.task);
114+
console.log("got sub agent resonse result", agentResponse);
115+
const [didUserReject, result] = [false,"tool result is successful"];
116+
console.log("got sub agent resonse result", didUserReject, result);
117+
103118
toolResults.push(this.getToolResult(toolUseId, result));
104119
if (didUserReject) {
105120
userRejectedToolUse = true;
@@ -153,9 +168,11 @@ class Agent {
153168
}
154169
}
155170
} catch (error) {
171+
console.error("Error in agent tool call:", error);
156172
return { success: false, error: error instanceof Error ? error.message : String(error), message: null };
157173
}
158174
} catch (error) {
175+
console.error("Error in agent tool call:", error);
159176
return { success: false, error: error instanceof Error ? error.message : String(error), message: null };
160177
}
161178
}
@@ -198,7 +215,7 @@ class Agent {
198215
return mcp.executeTool(toolName, toolInput);
199216
}
200217
private async startSubAgent(agentName: string, params: any): Promise<[boolean, any]> {
201-
return mcp.executeTool(agentName, params);
218+
return codeboltAgent.startAgent(agentName, params.task);
202219
}
203220

204221
private getToolDetail(tool: any): ToolDetails {

0 commit comments

Comments
 (0)