diff --git a/packages/types/src/vscode.ts b/packages/types/src/vscode.ts index 00f6bbbcba..d9e6ad5d78 100644 --- a/packages/types/src/vscode.ts +++ b/packages/types/src/vscode.ts @@ -39,6 +39,7 @@ export const commandIds = [ "settingsButtonClicked", "openInNewTab", + "openInThisTab", "showHumanRelayDialog", "registerHumanRelayCallback", diff --git a/src/activate/registerCommands.ts b/src/activate/registerCommands.ts index bd925b0e90..2442ee5f8b 100644 --- a/src/activate/registerCommands.ts +++ b/src/activate/registerCommands.ts @@ -126,6 +126,7 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt return openClineInNewTab({ context, outputChannel }) }, openInNewTab: () => openClineInNewTab({ context, outputChannel }), + openInThisTab: () => openClineInThisTab({ context, outputChannel }), settingsButtonClicked: () => { const visibleProvider = getVisibleProviderOrLog(outputChannel) @@ -220,35 +221,42 @@ const getCommandsMap = ({ context, outputChannel, provider }: RegisterCommandOpt }, }) -export const openClineInNewTab = async ({ context, outputChannel }: Omit) => { +/** + * Opens Roo Code in a tab with configurable column targeting and locking behavior + */ +const openClineInTab = async ( + { context, outputChannel }: Omit, + options: { + useNewColumn: boolean + lockEditorGroup: boolean + }, +): Promise => { // (This example uses webviewProvider activation event which is necessary to // deserialize cached webview, but since we use retainContextWhenHidden, we // don't need to use that event). // https://github.com/microsoft/vscode-extension-samples/blob/main/webview-sample/src/extension.ts const contextProxy = await ContextProxy.getInstance(context) const codeIndexManager = CodeIndexManager.getInstance(context) + const tabProvider = new ClineProvider(context, outputChannel, "editor", contextProxy, codeIndexManager) - // Get the existing MDM service instance to ensure consistent policy enforcement - let mdmService: MdmService | undefined - try { - mdmService = MdmService.getInstance() - } catch (error) { - // MDM service not initialized, which is fine - extension can work without it - mdmService = undefined - } + let targetCol: vscode.ViewColumn - const tabProvider = new ClineProvider(context, outputChannel, "editor", contextProxy, codeIndexManager, mdmService) - const lastCol = Math.max(...vscode.window.visibleTextEditors.map((editor) => editor.viewColumn || 0)) + if (options.useNewColumn) { + const lastCol = Math.max(...vscode.window.visibleTextEditors.map((editor) => editor.viewColumn || 0)) - // Check if there are any visible text editors, otherwise open a new group - // to the right. - const hasVisibleEditors = vscode.window.visibleTextEditors.length > 0 + // Check if there are any visible text editors, otherwise open a new group + // to the right. + const hasVisibleEditors = vscode.window.visibleTextEditors.length > 0 - if (!hasVisibleEditors) { - await vscode.commands.executeCommand("workbench.action.newGroupRight") - } + if (!hasVisibleEditors) { + await vscode.commands.executeCommand("workbench.action.newGroupRight") + } - const targetCol = hasVisibleEditors ? Math.max(lastCol + 1, 1) : vscode.ViewColumn.Two + targetCol = hasVisibleEditors ? Math.max(lastCol + 1, 1) : vscode.ViewColumn.Two + } else { + // Use the active column instead of creating a new one + targetCol = vscode.ViewColumn.Active + } const newPanel = vscode.window.createWebviewPanel(ClineProvider.tabPanelId, "Roo Code", targetCol, { enableScripts: true, @@ -290,8 +298,18 @@ export const openClineInNewTab = async ({ context, outputChannel }: Omit) => { + return openClineInTab({ context, outputChannel }, { useNewColumn: true, lockEditorGroup: true }) +} + +export const openClineInThisTab = async ({ context, outputChannel }: Omit) => { + return openClineInTab({ context, outputChannel }, { useNewColumn: false, lockEditorGroup: false }) +} diff --git a/src/package.json b/src/package.json index 14f6607742..e29498f1ca 100644 --- a/src/package.json +++ b/src/package.json @@ -115,6 +115,11 @@ "title": "%command.openInNewTab.title%", "category": "%configuration.title%" }, + { + "command": "roo-cline.openInThisTab", + "title": "%command.openInThisTab.title%", + "category": "%configuration.title%" + }, { "command": "roo-cline.explainCode", "title": "%command.explainCode.title%", diff --git a/src/package.nls.ca.json b/src/package.nls.ca.json index 978caf3df3..acdb412b7e 100644 --- a/src/package.nls.ca.json +++ b/src/package.nls.ca.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Millorar Codi", "command.addToContext.title": "Afegir al Context", "command.openInNewTab.title": "Obrir en una Nova Pestanya", + "command.openInThisTab.title": "Obrir en Aquesta Pestanya", "command.focusInput.title": "Enfocar Camp d'Entrada", "command.setCustomStoragePath.title": "Establir Ruta d'Emmagatzematge Personalitzada", "command.importSettings.title": "Importar Configuració", diff --git a/src/package.nls.de.json b/src/package.nls.de.json index 32b38f7dee..da4e6b577d 100644 --- a/src/package.nls.de.json +++ b/src/package.nls.de.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Code Verbessern", "command.addToContext.title": "Zum Kontext Hinzufügen", "command.openInNewTab.title": "In Neuem Tab Öffnen", + "command.openInThisTab.title": "In Diesem Tab Öffnen", "command.focusInput.title": "Eingabefeld Fokussieren", "command.setCustomStoragePath.title": "Benutzerdefinierten Speicherpfad Festlegen", "command.importSettings.title": "Einstellungen Importieren", diff --git a/src/package.nls.es.json b/src/package.nls.es.json index dc76f15e94..9c9ccb1878 100644 --- a/src/package.nls.es.json +++ b/src/package.nls.es.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Mejorar Código", "command.addToContext.title": "Añadir al Contexto", "command.openInNewTab.title": "Abrir en Nueva Pestaña", + "command.openInThisTab.title": "Abrir en Esta Pestaña", "command.focusInput.title": "Enfocar Campo de Entrada", "command.setCustomStoragePath.title": "Establecer Ruta de Almacenamiento Personalizada", "command.importSettings.title": "Importar Configuración", diff --git a/src/package.nls.fr.json b/src/package.nls.fr.json index 621cab976e..16fb54adfe 100644 --- a/src/package.nls.fr.json +++ b/src/package.nls.fr.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Améliorer le Code", "command.addToContext.title": "Ajouter au Contexte", "command.openInNewTab.title": "Ouvrir dans un Nouvel Onglet", + "command.openInThisTab.title": "Ouvrir dans Cet Onglet", "command.focusInput.title": "Focus sur le Champ de Saisie", "command.setCustomStoragePath.title": "Définir le Chemin de Stockage Personnalisé", "command.importSettings.title": "Importer les Paramètres", diff --git a/src/package.nls.hi.json b/src/package.nls.hi.json index d54f1d829e..b28d9cc396 100644 --- a/src/package.nls.hi.json +++ b/src/package.nls.hi.json @@ -7,6 +7,7 @@ "command.improveCode.title": "कोड सुधारें", "command.addToContext.title": "संदर्भ में जोड़ें", "command.openInNewTab.title": "नए टैब में खोलें", + "command.openInThisTab.title": "इस टैब में खोलें", "command.focusInput.title": "इनपुट फ़ील्ड पर फोकस करें", "command.setCustomStoragePath.title": "कस्टम स्टोरेज पाथ सेट करें", "command.importSettings.title": "सेटिंग्स इम्पोर्ट करें", diff --git a/src/package.nls.id.json b/src/package.nls.id.json index 99313d151e..3e53248bed 100644 --- a/src/package.nls.id.json +++ b/src/package.nls.id.json @@ -14,6 +14,7 @@ "command.settings.title": "Pengaturan", "command.documentation.title": "Dokumentasi", "command.openInNewTab.title": "Buka di Tab Baru", + "command.openInThisTab.title": "Buka di Tab Ini", "command.explainCode.title": "Jelaskan Kode", "command.fixCode.title": "Perbaiki Kode", "command.improveCode.title": "Tingkatkan Kode", diff --git a/src/package.nls.it.json b/src/package.nls.it.json index 0fca90870c..b2fb5119a8 100644 --- a/src/package.nls.it.json +++ b/src/package.nls.it.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Migliora Codice", "command.addToContext.title": "Aggiungi al Contesto", "command.openInNewTab.title": "Apri in Nuova Scheda", + "command.openInThisTab.title": "Apri in Questa Scheda", "command.focusInput.title": "Focalizza Campo di Input", "command.setCustomStoragePath.title": "Imposta Percorso di Archiviazione Personalizzato", "command.importSettings.title": "Importa Impostazioni", diff --git a/src/package.nls.ja.json b/src/package.nls.ja.json index 5fd4ade628..d244f3c92f 100644 --- a/src/package.nls.ja.json +++ b/src/package.nls.ja.json @@ -14,6 +14,7 @@ "command.settings.title": "設定", "command.documentation.title": "ドキュメント", "command.openInNewTab.title": "新しいタブで開く", + "command.openInThisTab.title": "このタブで開く", "command.explainCode.title": "コードの説明", "command.fixCode.title": "コードの修正", "command.improveCode.title": "コードの改善", diff --git a/src/package.nls.json b/src/package.nls.json index 23885f80be..f47052d5ef 100644 --- a/src/package.nls.json +++ b/src/package.nls.json @@ -14,6 +14,7 @@ "command.settings.title": "Settings", "command.documentation.title": "Documentation", "command.openInNewTab.title": "Open In New Tab", + "command.openInThisTab.title": "Open In This Tab", "command.explainCode.title": "Explain Code", "command.fixCode.title": "Fix Code", "command.improveCode.title": "Improve Code", diff --git a/src/package.nls.ko.json b/src/package.nls.ko.json index e6e30c155b..30a6453d90 100644 --- a/src/package.nls.ko.json +++ b/src/package.nls.ko.json @@ -7,6 +7,7 @@ "command.improveCode.title": "코드 개선", "command.addToContext.title": "컨텍스트에 추가", "command.openInNewTab.title": "새 탭에서 열기", + "command.openInThisTab.title": "이 탭에서 열기", "command.focusInput.title": "입력 필드 포커스", "command.setCustomStoragePath.title": "사용자 지정 저장소 경로 설정", "command.importSettings.title": "설정 가져오기", diff --git a/src/package.nls.nl.json b/src/package.nls.nl.json index 095aace43e..a589f2aadf 100644 --- a/src/package.nls.nl.json +++ b/src/package.nls.nl.json @@ -14,6 +14,7 @@ "command.settings.title": "Instellingen", "command.documentation.title": "Documentatie", "command.openInNewTab.title": "Openen in Nieuw Tabblad", + "command.openInThisTab.title": "Openen in Dit Tabblad", "command.explainCode.title": "Leg Code Uit", "command.fixCode.title": "Repareer Code", "command.improveCode.title": "Verbeter Code", diff --git a/src/package.nls.pl.json b/src/package.nls.pl.json index 9963d96db6..dca4524120 100644 --- a/src/package.nls.pl.json +++ b/src/package.nls.pl.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Ulepsz Kod", "command.addToContext.title": "Dodaj do Kontekstu", "command.openInNewTab.title": "Otwórz w Nowej Karcie", + "command.openInThisTab.title": "Otwórz w Tej Karcie", "command.focusInput.title": "Fokus na Pole Wprowadzania", "command.setCustomStoragePath.title": "Ustaw Niestandardową Ścieżkę Przechowywania", "command.importSettings.title": "Importuj Ustawienia", diff --git a/src/package.nls.pt-BR.json b/src/package.nls.pt-BR.json index aaec3b4533..258062db10 100644 --- a/src/package.nls.pt-BR.json +++ b/src/package.nls.pt-BR.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Melhorar Código", "command.addToContext.title": "Adicionar ao Contexto", "command.openInNewTab.title": "Abrir em Nova Aba", + "command.openInThisTab.title": "Abrir nesta Aba", "command.focusInput.title": "Focar Campo de Entrada", "command.setCustomStoragePath.title": "Definir Caminho de Armazenamento Personalizado", "command.importSettings.title": "Importar Configurações", diff --git a/src/package.nls.ru.json b/src/package.nls.ru.json index 632c1e3628..dfc7a8d09f 100644 --- a/src/package.nls.ru.json +++ b/src/package.nls.ru.json @@ -14,6 +14,7 @@ "command.settings.title": "Настройки", "command.documentation.title": "Документация", "command.openInNewTab.title": "Открыть в новой вкладке", + "command.openInThisTab.title": "Открыть в этой вкладке", "command.explainCode.title": "Объяснить код", "command.fixCode.title": "Исправить код", "command.improveCode.title": "Улучшить код", diff --git a/src/package.nls.tr.json b/src/package.nls.tr.json index a0b6c47d4f..d0862d2b48 100644 --- a/src/package.nls.tr.json +++ b/src/package.nls.tr.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Kodu İyileştir", "command.addToContext.title": "Bağlama Ekle", "command.openInNewTab.title": "Yeni Sekmede Aç", + "command.openInThisTab.title": "Bu Sekmede Aç", "command.focusInput.title": "Giriş Alanına Odaklan", "command.setCustomStoragePath.title": "Özel Depolama Yolunu Ayarla", "command.importSettings.title": "Ayarları İçe Aktar", diff --git a/src/package.nls.vi.json b/src/package.nls.vi.json index 2b5013fed0..a3b8634c92 100644 --- a/src/package.nls.vi.json +++ b/src/package.nls.vi.json @@ -7,6 +7,7 @@ "command.improveCode.title": "Cải Thiện Mã", "command.addToContext.title": "Thêm vào Ngữ Cảnh", "command.openInNewTab.title": "Mở trong Tab Mới", + "command.openInThisTab.title": "Mở trong Tab Này", "command.focusInput.title": "Tập Trung vào Trường Nhập", "command.setCustomStoragePath.title": "Đặt Đường Dẫn Lưu Trữ Tùy Chỉnh", "command.importSettings.title": "Nhập Cài Đặt", diff --git a/src/package.nls.zh-CN.json b/src/package.nls.zh-CN.json index 76bc991c36..fe2f62f01d 100644 --- a/src/package.nls.zh-CN.json +++ b/src/package.nls.zh-CN.json @@ -7,6 +7,7 @@ "command.improveCode.title": "改进代码", "command.addToContext.title": "添加到上下文", "command.openInNewTab.title": "在新标签页中打开", + "command.openInThisTab.title": "在此标签页中打开", "command.focusInput.title": "聚焦输入框", "command.setCustomStoragePath.title": "设置自定义存储路径", "command.importSettings.title": "导入设置", diff --git a/src/package.nls.zh-TW.json b/src/package.nls.zh-TW.json index c833708541..ce7d65b02d 100644 --- a/src/package.nls.zh-TW.json +++ b/src/package.nls.zh-TW.json @@ -7,6 +7,7 @@ "command.improveCode.title": "改進程式碼", "command.addToContext.title": "新增到上下文", "command.openInNewTab.title": "在新分頁中開啟", + "command.openInThisTab.title": "在此分頁中開啟", "command.focusInput.title": "聚焦輸入框", "command.setCustomStoragePath.title": "設定自訂儲存路徑", "command.importSettings.title": "匯入設定",