Implement auto execution of commands in MessageHandler
- Added a global variable 'autox' to control automatic execution of commands. - Updated the 'sendMessage' function to handle '/autox' in the message text. - If 'autox' is true and the message contains a command, the command is automatically executed. - This feature will help in automating tasks and improving efficiency.
This commit is contained in:
parent
035952e688
commit
dbdf67d19f
@ -8,7 +8,10 @@ import { logger } from '../util/logger';
|
||||
import { isWaitForApiKey } from './historyMessagesBase';
|
||||
import { onApiKey } from './historyMessages';
|
||||
import { ApiKeyManager } from '../util/apiKey';
|
||||
import { regeneration, sendMessage as sendMessageX } from './sendMessage';
|
||||
import { codeFileApply } from './codeFileApply';
|
||||
|
||||
let autox = false;
|
||||
|
||||
export class MessageHandler {
|
||||
private handlers: { [command: string]: (message: any, panel: vscode.WebviewPanel|vscode.WebviewView) => Promise<void> } = {};
|
||||
@ -42,6 +45,14 @@ export class MessageHandler {
|
||||
}
|
||||
}
|
||||
|
||||
autox = false;
|
||||
if (message.command === 'sendMessage') {
|
||||
// if "/autox" in message.text, then flag global variable autox to true
|
||||
if (message.text.indexOf('/autox') !== -1) {
|
||||
autox = true;
|
||||
}
|
||||
}
|
||||
|
||||
const handler = this.handlers[message.command];
|
||||
if (handler) {
|
||||
logger.channel()?.info(`Handling the command "${message.command}"`);
|
||||
@ -57,11 +68,54 @@ export class MessageHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public static sendMessage(panel: vscode.WebviewPanel|vscode.WebviewView, message: object, log: boolean = true): void {
|
||||
public static sendMessage(panel: vscode.WebviewPanel|vscode.WebviewView, message : any, log: boolean = true): void {
|
||||
if (log) {
|
||||
logger.channel()?.info(`Sending message: "${JSON.stringify(message)}"`);
|
||||
}
|
||||
|
||||
panel.webview.postMessage(message);
|
||||
|
||||
if (message.command === 'receiveMessage' && autox) {
|
||||
// if message.isError is true, then regenerate message
|
||||
if (message.isError) {
|
||||
regeneration({}, panel);
|
||||
} else {
|
||||
// if message.text is ```command\n {xxx} ``` then get xxx
|
||||
const messageText = message.text;
|
||||
// if messageText match "```command\n ... ```", then parse block content
|
||||
const reg = /```command\n([\s\S]*)```/;
|
||||
const match = messageText.match(reg);
|
||||
if (match) {
|
||||
const command = match[1];
|
||||
try {
|
||||
const commandObject = JSON.parse(command);
|
||||
if (!(commandObject && commandObject.name)) {
|
||||
logger.channel()?.error(`${command} is not a valid command`);
|
||||
logger.channel()?.show();
|
||||
return ;
|
||||
}
|
||||
|
||||
if (commandObject.name === "fail_task" || commandObject.name === "finish_task") {
|
||||
logger.channel()?.info(`Task has finished.`);
|
||||
logger.channel()?.show();
|
||||
return ;
|
||||
}
|
||||
|
||||
codeFileApply({"content": command, "fileName": ""}, panel);
|
||||
|
||||
} catch (e) {
|
||||
logger.channel()?.error(`parse ${command} error: ${e}`);
|
||||
logger.channel()?.show();
|
||||
|
||||
MessageHandler.sendMessage(panel, { "command": "systemMessage", "text": "continue. 并且确认你在围绕最初的任务在执行相关步骤。" });
|
||||
sendMessageX({command: 'sendMessage', text: "continue"}, panel);
|
||||
}
|
||||
} else {
|
||||
MessageHandler.sendMessage(panel, { "command": "systemMessage", "text": "continue. 并且确认你在围绕最初的任务在执行相关步骤。" });
|
||||
sendMessageX({command: 'sendMessage', text: "continue"}, panel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user