Merge branch 'main' of https://github.com/covespace/devchat-vscode
This commit is contained in:
commit
2624d2f77c
@ -6,6 +6,7 @@ import DevChat, { ChatResponse } from '../toolwrapper/devchat';
|
||||
import CommandManager from '../command/commandManager';
|
||||
import { logger } from '../util/logger';
|
||||
import { MessageHandler } from './messageHandler';
|
||||
import messageHistory from '../util/messageHistory';
|
||||
|
||||
|
||||
// Add this function to messageHandler.ts
|
||||
@ -71,7 +72,8 @@ function getInstructionFiles(): string[] {
|
||||
|
||||
const devChat = new DevChat();
|
||||
|
||||
// message: { command: 'sendMessage', text: 'xxx', parent_hash: 'xxx'}
|
||||
|
||||
// message: { command: 'sendMessage', text: 'xxx', hash: 'xxx'}
|
||||
// return message:
|
||||
// { command: 'receiveMessage', text: 'xxxx', hash: 'xxx', user: 'xxx', date: 'xxx'}
|
||||
// { command: 'receiveMessagePartial', text: 'xxxx', user: 'xxx', date: 'xxx'}
|
||||
@ -80,10 +82,19 @@ export async function sendMessage(message: any, panel: vscode.WebviewPanel): Pro
|
||||
const parsedMessage = parseMessage(newText2);
|
||||
const chatOptions: any = {};
|
||||
|
||||
logger.channel()?.info(`parent_hash: ${message.parent_hash}`)
|
||||
if (message.parent_hash) {
|
||||
chatOptions.parent = message.parent_hash;
|
||||
let parent_hash = undefined;
|
||||
logger.channel()?.info(`request message hash: ${message.hash}`)
|
||||
if (message.hash) {
|
||||
const hmessage = messageHistory.find(panel, message.hash);
|
||||
parent_hash = hmessage ? message.parent_hash : undefined;
|
||||
} else {
|
||||
const hmessage = messageHistory.findLast(panel);
|
||||
parent_hash = hmessage ? hmessage.hash : undefined;
|
||||
}
|
||||
if (parent_hash) {
|
||||
chatOptions.parent = parent_hash;
|
||||
}
|
||||
logger.channel()?.info(`parent hash: ${parent_hash}`);
|
||||
|
||||
if (parsedMessage.context.length > 0) {
|
||||
chatOptions.context = parsedMessage.context;
|
||||
@ -104,6 +115,10 @@ export async function sendMessage(message: any, panel: vscode.WebviewPanel): Pro
|
||||
|
||||
const chatResponse = await devChat.chat(parsedMessage.text, chatOptions, onData);
|
||||
|
||||
if (!chatResponse.isError) {
|
||||
messageHistory.add(panel, {request: message.text, text: parsedMessage.text, parent_hash, hash: chatResponse['prompt-hash'], user: chatResponse.user, date: chatResponse.date });
|
||||
}
|
||||
|
||||
MessageHandler.sendMessage(panel, { command: 'receiveMessage', text: chatResponse.response, hash: chatResponse['prompt-hash'], user: chatResponse.user, date: chatResponse.date, isError: chatResponse.isError });
|
||||
return;
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import '../handler/loadHandlers';
|
||||
import handleMessage from '../handler/messageHandler';
|
||||
import WebviewManager from './webviewManager';
|
||||
|
||||
import messageHistory from '../util/messageHistory';
|
||||
|
||||
export default class ChatPanel {
|
||||
private static _instance: ChatPanel | undefined;
|
||||
private readonly _panel: vscode.WebviewPanel;
|
||||
@ -16,6 +18,9 @@ export default class ChatPanel {
|
||||
ChatPanel._instance._panel.reveal();
|
||||
} else {
|
||||
const panel = ChatPanel.createWebviewPanel(extensionUri);
|
||||
panel.onDidDispose(() => {
|
||||
messageHistory.remove(panel);
|
||||
});
|
||||
ChatPanel._instance = new ChatPanel(panel, extensionUri);
|
||||
}
|
||||
}
|
||||
|
40
src/util/messageHistory.ts
Normal file
40
src/util/messageHistory.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
class MessageHistory {
|
||||
private history: WeakMap<vscode.WebviewPanel, any[]>;
|
||||
private lastmessage: WeakMap<vscode.WebviewPanel, any>;
|
||||
|
||||
constructor() {
|
||||
this.history = new WeakMap();
|
||||
this.lastmessage = new WeakMap();
|
||||
}
|
||||
|
||||
add(panel: vscode.WebviewPanel, message: any) {
|
||||
if (!this.history.has(panel)) {
|
||||
this.history.set(panel, []);
|
||||
}
|
||||
this.history.get(panel)!.push(message);
|
||||
this.lastmessage.set(panel, message);
|
||||
}
|
||||
|
||||
find(panel: vscode.WebviewPanel, hash: string) {
|
||||
if (!this.history.has(panel)) {
|
||||
return null;
|
||||
}
|
||||
return this.history.get(panel)!.find(message => message.hash === hash);
|
||||
}
|
||||
findLast(panel: vscode.WebviewPanel) {
|
||||
if (!this.history.has(panel)) {
|
||||
return null;
|
||||
}
|
||||
return this.lastmessage.get(panel);
|
||||
}
|
||||
|
||||
remove(panel: vscode.WebviewPanel) {
|
||||
this.history.delete(panel);
|
||||
this.lastmessage.delete(panel);
|
||||
}
|
||||
}
|
||||
|
||||
const messageHistory = new MessageHistory();
|
||||
export default messageHistory;
|
Loading…
x
Reference in New Issue
Block a user