Skip to content

Commit 0667c41

Browse files
mcp added
1 parent a9b4ced commit 0667c41

File tree

7 files changed

+171
-57
lines changed

7 files changed

+171
-57
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
build
22
node_modules
33

4+
modules

index.d.ts

Lines changed: 66 additions & 39 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
/**
@@ -18,13 +19,26 @@ declare class Codebolt {
1819
waitForConnection(): Promise<void>;
1920
websocket: WebSocket | null;
2021
fs: {
21-
createFile: (fileName: string, source: string, filePath: string) => Promise<import("@codebolt/types").CreateFileResponse>;
22+
createFile: (fileName: string, source: string, filePath: string) => Promise<import("@codebolt/types").CreateFileResponse>; /**
23+
* @method waitForConnection
24+
* @description Waits for the WebSocket connection to open.
25+
* @returns {Promise<void>} A promise that resolves when the WebSocket connection is open.
26+
*/
2227
createFolder: (folderName: string, folderPath: string) => Promise<import("@codebolt/types").CreateFolderResponse>;
23-
readFile: (filename: string, filePath: string) => Promise<import("@codebolt/types").ReadFileResponse>;
28+
readFile: (filePath: string) => Promise<import("@codebolt/types").ReadFileResponse>;
2429
updateFile: (filename: string, filePath: string, newContent: string) => Promise<import("@codebolt/types").UpdateFileResponse>;
2530
deleteFile: (filename: string, filePath: string) => Promise<import("@codebolt/types").DeleteFileResponse>;
2631
deleteFolder: (foldername: string, folderpath: string) => Promise<import("@codebolt/types").DeleteFolderResponse>;
2732
listFile: (folderPath: string, isRecursive?: boolean) => Promise<unknown>;
33+
listCodeDefinitionNames: (path: string) => Promise<{
34+
success: boolean;
35+
result: any;
36+
}>;
37+
searchFiles: (path: string, regex: string, filePattern: string) => Promise<{
38+
success: boolean;
39+
result: any;
40+
}>;
41+
writeToFile: (relPath: string, newContent: string) => Promise<unknown>;
2842
};
2943
git: {
3044
init: (path: string) => Promise<any>;
@@ -66,76 +80,77 @@ declare class Codebolt {
6680
getChatHistory: () => Promise<import("@codebolt/types").ChatMessage[]>;
6781
onActionMessage: () => {
6882
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
69-
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
70-
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
71-
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
72-
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
73-
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
83+
addListener<K_1>(eventName: string | symbol, listener: (...args: any[]) => void): any;
84+
on<K_2>(eventName: string | symbol, listener: (...args: any[]) => void): any;
85+
once<K_3>(eventName: string | symbol, listener: (...args: any[]) => void): any;
86+
removeListener<K_4>(eventName: string | symbol, listener: (...args: any[]) => void): any;
87+
off<K_5>(eventName: string | symbol, listener: (...args: any[]) => void): any;
7488
removeAllListeners(eventName?: string | symbol | undefined): any;
7589
setMaxListeners(n: number): any;
7690
getMaxListeners(): number;
77-
listeners<K>(eventName: string | symbol): Function[];
78-
rawListeners<K>(eventName: string | symbol): Function[];
79-
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
80-
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
81-
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
82-
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
91+
listeners<K_6>(eventName: string | symbol): Function[];
92+
rawListeners<K_7>(eventName: string | symbol): Function[];
93+
emit<K_8>(eventName: string | symbol, ...args: any[]): boolean;
94+
listenerCount<K_9>(eventName: string | symbol, listener?: Function | undefined): number;
95+
prependListener<K_10>(eventName: string | symbol, listener: (...args: any[]) => void): any;
96+
prependOnceListener<K_11>(eventName: string | symbol, listener: (...args: any[]) => void): any;
8397
eventNames(): (string | symbol)[];
8498
} | undefined;
8599
sendMessage: (message: string, payload: any) => void;
86100
waitforReply: (message: string) => Promise<import("@codebolt/types").UserMessage>;
87101
processStarted: () => {
88102
event: {
89103
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
90-
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
91-
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
92-
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
93-
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
94-
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
104+
addListener<K_1>(eventName: string | symbol, listener: (...args: any[]) => void): any;
105+
on<K_2>(eventName: string | symbol, listener: (...args: any[]) => void): any;
106+
once<K_3>(eventName: string | symbol, listener: (...args: any[]) => void): any;
107+
removeListener<K_4>(eventName: string | symbol, listener: (...args: any[]) => void): any;
108+
off<K_5>(eventName: string | symbol, listener: (...args: any[]) => void): any;
95109
removeAllListeners(eventName?: string | symbol | undefined): any;
96110
setMaxListeners(n: number): any;
97111
getMaxListeners(): number;
98-
listeners<K>(eventName: string | symbol): Function[];
99-
rawListeners<K>(eventName: string | symbol): Function[];
100-
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
101-
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
102-
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
103-
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
112+
listeners<K_6>(eventName: string | symbol): Function[];
113+
rawListeners<K_7>(eventName: string | symbol): Function[];
114+
emit<K_8>(eventName: string | symbol, ...args: any[]): boolean;
115+
listenerCount<K_9>(eventName: string | symbol, listener?: Function | undefined): number;
116+
prependListener<K_10>(eventName: string | symbol, listener: (...args: any[]) => void): any;
117+
prependOnceListener<K_11>(eventName: string | symbol, listener: (...args: any[]) => void): any;
104118
eventNames(): (string | symbol)[];
105119
};
106120
stopProcess: () => void;
107121
};
108122
stopProcess: () => void;
109123
processFinished: () => void;
110-
sendConfirmationRequest: (confirmationMessage: string, buttons?: string[]) => Promise<string>;
124+
sendConfirmationRequest: (confirmationMessage: string, buttons?: string[], withFeedback?: boolean) => Promise<string>;
125+
askQuestion: (question: string, buttons?: string[], withFeedback?: boolean) => Promise<string>;
111126
sendNotificationEvent: (notificationMessage: string, type: "debug" | "git" | "planner" | "browser" | "editor" | "terminal" | "preview") => void;
112127
};
113128
terminal: {
114129
eventEmitter: {
115130
[EventEmitter.captureRejectionSymbol]?<K>(error: Error, event: string | symbol, ...args: any[]): void;
116-
addListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
117-
on<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
118-
once<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
119-
removeListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
120-
off<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
131+
addListener<K_1>(eventName: string | symbol, listener: (...args: any[]) => void): any;
132+
on<K_2>(eventName: string | symbol, listener: (...args: any[]) => void): any;
133+
once<K_3>(eventName: string | symbol, listener: (...args: any[]) => void): any;
134+
removeListener<K_4>(eventName: string | symbol, listener: (...args: any[]) => void): any;
135+
off<K_5>(eventName: string | symbol, listener: (...args: any[]) => void): any;
121136
removeAllListeners(eventName?: string | symbol | undefined): any;
122137
setMaxListeners(n: number): any;
123138
getMaxListeners(): number;
124-
listeners<K>(eventName: string | symbol): Function[];
125-
rawListeners<K>(eventName: string | symbol): Function[];
126-
emit<K>(eventName: string | symbol, ...args: any[]): boolean;
127-
listenerCount<K>(eventName: string | symbol, listener?: Function | undefined): number;
128-
prependListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
129-
prependOnceListener<K>(eventName: string | symbol, listener: (...args: any[]) => void): any;
139+
listeners<K_6>(eventName: string | symbol): Function[];
140+
rawListeners<K_7>(eventName: string | symbol): Function[];
141+
emit<K_8>(eventName: string | symbol, ...args: any[]): boolean;
142+
listenerCount<K_9>(eventName: string | symbol, listener?: Function | undefined): number;
143+
prependListener<K_10>(eventName: string | symbol, listener: (...args: any[]) => void): any;
144+
prependOnceListener<K_11>(eventName: string | symbol, listener: (...args: any[]) => void): any;
130145
eventNames(): (string | symbol)[];
131146
};
132-
executeCommand: (command: string, executeInMain?: boolean) => Promise<import("@codebolt/types").CommandOutput | import("@codebolt/types").CommandError>;
147+
executeCommand: (command: string, returnEmptyStringOnSuccess?: boolean) => Promise<unknown>;
133148
executeCommandRunUntilError: (command: string, executeInMain?: boolean) => Promise<import("@codebolt/types").CommandError>;
134149
sendManualInterrupt(): Promise<import("@codebolt/types").TerminalInterruptResponse>;
135-
executeCommandWithStream(command: string, executeInMain?: boolean): EventEmitter;
150+
executeCommandWithStream(command: string, executeInMain?: boolean): EventEmitter<[never]>;
136151
};
137152
codeutils: {
138-
getJsTree: (filePath?: string) => Promise<any>;
153+
getJsTree: (filePath?: string | undefined) => void;
139154
getAllFilesAsMarkDown: () => Promise<string>;
140155
performMatch: (matcherDefinition: object, problemPatterns: any[], problems: any[]) => Promise<import("@codebolt/types").MatchProblemResponse>;
141156
getMatcherList: () => Promise<import("@codebolt/types").GetMatcherListTreeResponse>;
@@ -178,8 +193,13 @@ declare class Codebolt {
178193
project: {
179194
getProjectSettings: (output: any) => void;
180195
getProjectPath: () => Promise<import("@codebolt/types").GetProjectPathResponse>;
196+
/**
197+
* @constructor
198+
* @description Initializes the websocket connection.
199+
*/
181200
getRepoMap: (message: any) => Promise<import("@codebolt/types").GetProjectPathResponse>;
182201
runProject: () => void;
202+
getEditorFileStatus: () => Promise<unknown>;
183203
};
184204
dbmemory: {
185205
addKnowledge: (key: string, value: any) => Promise<import("@codebolt/types").MemorySetResponse>;
@@ -222,6 +242,13 @@ declare class Codebolt {
222242
content: string;
223243
}[]>;
224244
};
245+
MCP: {
246+
executeTool: (toolName: string, params: any, mcpServer?: string | undefined) => Promise<any>;
247+
getMcpTools: (tools: string[]) => Promise<any>;
248+
getAllMCPTools: (mpcName: string) => Promise<any>;
249+
getMCPTool: (name: string) => Promise<any>;
250+
getEnabledMCPS: () => Promise<any>;
251+
};
225252
}
226253
declare const _default: Codebolt;
227254
export default _default;

index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const debug_1 = __importDefault(require("./modules/debug"));
2727
const tokenizer_1 = __importDefault(require("./modules/tokenizer"));
2828
const ws_1 = __importDefault(require("ws"));
2929
const history_1 = require("./modules/history");
30+
const mcp_1 = __importDefault(require("./modules/mcp"));
3031
/**
3132
* @class Codebolt
3233
* @description This class provides a unified interface to interact with various modules.
@@ -60,6 +61,7 @@ class Codebolt {
6061
this.debug = debug_1.default;
6162
this.tokenizer = tokenizer_1.default;
6263
this.chatSummary = history_1.chatSummary;
64+
this.MCP = mcp_1.default;
6365
this.websocket = websocket_1.default.getWebsocket;
6466
}
6567
/**

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.70",
3+
"version": "1.1.71",
44
"description": "",
55
"keywords": [],
66
"author": "",

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class Codebolt { // Extend EventEmitter
9292
debug = debug;
9393
tokenizer = tokenizer;
9494
chatSummary=chatSummary;
95-
codeboltMCP = codeboltMCP;
95+
MCP = codeboltMCP;
9696
}
9797

9898
export default new Codebolt();

src/modules/chat.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ let eventEmitter = new CustomEventEmitter()
1414
* Chat module to interact with the WebSocket server.
1515
*/
1616
const cbchat = {
17-
1817
/**
1918
* Retrieves the chat history from the server.
2019
* @returns {Promise<ChatMessage[]>} A promise that resolves with an array of ChatMessage objects representing the chat history.
@@ -32,7 +31,6 @@ const cbchat = {
3231
})
3332
})
3433
},
35-
3634
/**
3735
* Sets up a listener for incoming WebSocket messages and emits a custom event when a message is received.
3836
* @returns {EventEmitter} The event emitter used for emitting custom events.
@@ -53,7 +51,6 @@ const cbchat = {
5351
});
5452
return eventEmitter;
5553
},
56-
5754
/**
5855
* Sends a message through the WebSocket connection.
5956
* @param {string} message - The message to be sent.
@@ -66,7 +63,6 @@ const cbchat = {
6663
payload
6764
}));
6865
},
69-
7066
/**
7167
* Waits for a reply to a sent message.
7268
* @param {string} message - The message for which a reply is expected.
@@ -86,7 +82,6 @@ const cbchat = {
8682
});
8783
});
8884
},
89-
9085
/**
9186
* Notifies the server that a process has started and sets up an event listener for stopProcessClicked events.
9287
* @returns An object containing the event emitter and a stopProcess method.
@@ -143,7 +138,6 @@ const cbchat = {
143138
"type": "processFinished"
144139
}));
145140
},
146-
147141
/**
148142
* Sends a confirmation request to the server with two options: Yes or No.
149143
* @returns {Promise<string>} A promise that resolves with the server's response.
@@ -165,6 +159,23 @@ const cbchat = {
165159
});
166160
});
167161
},
162+
askQuestion: (question: string, buttons: string[] = [],withFeedback:boolean=false): Promise<string> => {
163+
return new Promise((resolve, reject) => {
164+
cbws.getWebsocket.send(JSON.stringify({
165+
"type": "confirmationRequest",
166+
"message": question,
167+
buttons: buttons,
168+
withFeedback
169+
170+
}));
171+
cbws.getWebsocket.on('message', (data: string) => {
172+
const response = JSON.parse(data);
173+
if (response.type === "confirmationResponse" || response.type === "feedbackResponse" ) {
174+
resolve(response); // Resolve the Promise with the server's response
175+
}
176+
});
177+
});
178+
},
168179
/**
169180
* Sends a notification event to the server.
170181
* @param {string} notificationMessage - The message to be sent in the notification.

0 commit comments

Comments
 (0)