Fix panel sending multiple prompts

This commit is contained in:
andrepimenta
2025-07-14 20:47:16 +01:00
parent 6e9893e3f3
commit 5b671485a1

View File

@@ -86,6 +86,7 @@ class ClaudeChatProvider {
private _webview: vscode.Webview | undefined; private _webview: vscode.Webview | undefined;
private _webviewView: vscode.WebviewView | undefined; private _webviewView: vscode.WebviewView | undefined;
private _disposables: vscode.Disposable[] = []; private _disposables: vscode.Disposable[] = [];
private _messageHandlerDisposable: vscode.Disposable | undefined;
private _totalCost: number = 0; private _totalCost: number = 0;
private _totalTokensInput: number = 0; private _totalTokensInput: number = 0;
private _totalTokensOutput: number = 0; private _totalTokensOutput: number = 0;
@@ -299,7 +300,13 @@ class ClaudeChatProvider {
} }
private _setupWebviewMessageHandler(webview: vscode.Webview) { private _setupWebviewMessageHandler(webview: vscode.Webview) {
webview.onDidReceiveMessage( // Dispose of any existing message handler
if (this._messageHandlerDisposable) {
this._messageHandlerDisposable.dispose();
}
// Set up new message handler
this._messageHandlerDisposable = webview.onDidReceiveMessage(
message => this._handleWebviewMessage(message), message => this._handleWebviewMessage(message),
null, null,
this._disposables this._disposables
@@ -351,6 +358,7 @@ class ClaudeChatProvider {
// Only reinitialize if we have a webview (sidebar) // Only reinitialize if we have a webview (sidebar)
if (this._webview) { if (this._webview) {
this._initializeWebview(); this._initializeWebview();
// Set up message handler for the webview
this._setupWebviewMessageHandler(this._webview); this._setupWebviewMessageHandler(this._webview);
} }
} }
@@ -2160,6 +2168,12 @@ class ClaudeChatProvider {
this._panel = undefined; this._panel = undefined;
} }
// Dispose message handler if it exists
if (this._messageHandlerDisposable) {
this._messageHandlerDisposable.dispose();
this._messageHandlerDisposable = undefined;
}
while (this._disposables.length) { while (this._disposables.length) {
const disposable = this._disposables.pop(); const disposable = this._disposables.pop();
if (disposable) { if (disposable) {