diff --git a/packages/vscode-ide-companion/src/WebViewProvider.ts b/packages/vscode-ide-companion/src/WebViewProvider.ts index fc12de65..b73b3f73 100644 --- a/packages/vscode-ide-companion/src/WebViewProvider.ts +++ b/packages/vscode-ide-companion/src/WebViewProvider.ts @@ -364,6 +364,20 @@ export class WebViewProvider { // Register dispose handler this.panelManager.registerDisposeHandler(this.disposables); + // Listen for active editor changes and notify WebView + const editorChangeDisposable = vscode.window.onDidChangeActiveTextEditor( + (editor) => { + const fileName = editor?.document.uri.fsPath + ? getFileName(editor.document.uri.fsPath) + : null; + this.sendMessageToWebView({ + type: 'activeEditorChanged', + data: { fileName }, + }); + }, + ); + this.disposables.push(editorChangeDisposable); + // Capture the tab reference on restore this.panelManager.captureTab(); diff --git a/packages/vscode-ide-companion/src/extension.ts b/packages/vscode-ide-companion/src/extension.ts index f8501c22..1c03ca60 100644 --- a/packages/vscode-ide-companion/src/extension.ts +++ b/packages/vscode-ide-companion/src/extension.ts @@ -189,17 +189,10 @@ export async function activate(context: vscode.ExtensionContext) { } }), vscode.commands.registerCommand('qwenCode.openNewChatTab', () => { - // Check if there's already an open chat panel - if (webViewProviders.length > 0) { - const lastProvider = webViewProviders[webViewProviders.length - 1]; - // Reveal the existing panel and create a new session within it - lastProvider.show(); - lastProvider.createNewSession(); - } else { - // Create first chat tab - const provider = createWebViewProvider(); - provider.show(); - } + // Always create a new WebviewPanel (tab) in the same view column + // The PanelManager will find existing Qwen Code tabs and open in the same column + const provider = createWebViewProvider(); + provider.show(); }), vscode.commands.registerCommand('qwenCode.clearAuthCache', async () => { await authStateManager.clearAuthState(); diff --git a/packages/vscode-ide-companion/src/webview/App.scss b/packages/vscode-ide-companion/src/webview/App.scss index f2f3b0e3..c40b2821 100644 --- a/packages/vscode-ide-companion/src/webview/App.scss +++ b/packages/vscode-ide-companion/src/webview/App.scss @@ -430,8 +430,6 @@ button { =========================== */ .input-form { display: flex; - /* gap: var(--app-spacing-medium); */ - /* padding: 16px; */ background-color: var(--app-primary-background); border-top: 1px solid var(--app-primary-border-color); } @@ -626,8 +624,6 @@ button { color: var(--app-input-foreground); display: flex; flex-direction: column; - // max-width: 680px; - // margin: 0 auto; position: relative; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); transition: border-color 0.2s ease, box-shadow 0.2s ease; @@ -644,7 +640,7 @@ button { .input-form:focus-within { border-color: var(--app-qwen-orange); - box-shadow: 0 0 0 1px var(--app-qwen-orange), 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 2px color-mix(in srgb,var(--app-qwen-orange),transparent 80%); } /* Banner area - for warnings/messages */ diff --git a/packages/vscode-ide-companion/src/webview/App.tsx b/packages/vscode-ide-companion/src/webview/App.tsx index 5db5e86e..094dc3a7 100644 --- a/packages/vscode-ide-companion/src/webview/App.tsx +++ b/packages/vscode-ide-companion/src/webview/App.tsx @@ -612,15 +612,9 @@ export const App: React.FC = () => { }; const handleNewQwenSession = () => { - vscode.postMessage({ type: 'newQwenSession', data: {} }); + // Send message to open a new chat tab + vscode.postMessage({ type: 'openNewChatTab', data: {} }); setShowSessionSelector(false); - setCurrentSessionId(null); - setCurrentSessionTitle('Past Conversations'); // Reset title to default - // Clear messages in UI - setMessages([]); - setCurrentStreamContent(''); - setPlanEntries([]); // Clear plan entries - setToolCalls(new Map()); // Clear tool calls }; // Time ago formatter (matching Claude Code) @@ -1053,6 +1047,14 @@ export const App: React.FC = () => { {getEditModeInfo().icon} {getEditModeInfo().text} + {activeFileName && ( + + {activeFileName} + + )}
- {activeFileName && ( - - {activeFileName} - - )}