diff --git a/src/extension.ts b/src/extension.ts index 5307e02..2f436d3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -286,8 +286,12 @@ export async function activate(context: vscode.ExtensionContext) { const addCodeToChat = vscode.commands.registerCommand( "ic-coder.addCodeToChat", async () => { + console.log('[addCodeToChat] 命令触发'); const editor = vscode.window.activeTextEditor; - if (!editor) return; + if (!editor) { + console.log('[addCodeToChat] 没有活动编辑器'); + return; + } const selection = editor.selection; const selectedText = editor.document.getText(selection); @@ -303,24 +307,53 @@ export async function activate(context: vscode.ExtensionContext) { // 检查是否已有打开的面板 let panel = (global as any).currentICHelperPanel; - if (!panel || panel._isDisposed) { + let needCreatePanel = false; + + if (!panel) { + needCreatePanel = true; + } else { + // 尝试访问 webview,如果抛出异常说明已销毁 + try { + const _ = panel.webview; + } catch (e) { + needCreatePanel = true; + } + } + + console.log('[addCodeToChat] 需要创建面板:', needCreatePanel); + + if (needCreatePanel) { + console.log('[addCodeToChat] 正在打开面板...'); await showICHelperPanel(context); panel = (global as any).currentICHelperPanel; + console.log('[addCodeToChat] 面板打开后状态:', panel ? '成功' : '失败'); + + // 如果面板仍未创建(如未登录),直接返回 + if (!panel) { + console.log('[addCodeToChat] 面板创建失败,退出'); + return; + } } // 发送代码上下文 + console.log('[addCodeToChat] 准备发送代码到面板'); setTimeout(() => { - if (panel?.webview) { - panel.webview.postMessage({ - command: 'addCodeContext', - fileName, - startLine, - endLine, - code: selectedText, - languageId: editor.document.languageId - }); + try { + if (panel?.webview) { + console.log('[addCodeToChat] 发送 addCodeContext 消息'); + panel.webview.postMessage({ + command: 'addCodeContext', + fileName, + startLine, + endLine, + code: selectedText, + languageId: editor.document.languageId + }); + } + } catch (e) { + console.log('[addCodeToChat] 发送消息失败:', e); } - }, 300); + }, 500); } );