summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAlex Yaroshuk <[email protected]>2026-02-03 04:36:00 +0800
committerGitHub <[email protected]>2026-02-02 14:36:00 -0600
commit824165eb792edfd8600d44aac83e1f6bba2a9e62 (patch)
tree9694a8df448d9d036d0b4761d62607337f777370
parent562c9d76d9becbd485af589ab7ddd64f9c9fd31d (diff)
downloadopencode-824165eb792edfd8600d44aac83e1f6bba2a9e62.tar.gz
opencode-824165eb792edfd8600d44aac83e1f6bba2a9e62.zip
feat(app): add workspace toggle command to command palette and prompt input (#11810)
-rw-r--r--packages/app/src/i18n/ar.ts6
-rw-r--r--packages/app/src/i18n/br.ts6
-rw-r--r--packages/app/src/i18n/da.ts6
-rw-r--r--packages/app/src/i18n/de.ts1
-rw-r--r--packages/app/src/i18n/en.ts7
-rw-r--r--packages/app/src/i18n/es.ts6
-rw-r--r--packages/app/src/i18n/fr.ts6
-rw-r--r--packages/app/src/i18n/ja.ts1
-rw-r--r--packages/app/src/i18n/ko.ts6
-rw-r--r--packages/app/src/i18n/no.ts6
-rw-r--r--packages/app/src/i18n/pl.ts6
-rw-r--r--packages/app/src/i18n/ru.ts6
-rw-r--r--packages/app/src/i18n/th.ts8
-rw-r--r--packages/app/src/i18n/zh.ts8
-rw-r--r--packages/app/src/i18n/zht.ts8
-rw-r--r--packages/app/src/pages/layout.tsx23
16 files changed, 107 insertions, 3 deletions
diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts
index 3718303e5..f816c9aca 100644
--- a/packages/app/src/i18n/ar.ts
+++ b/packages/app/src/i18n/ar.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "التبديل إلى مستوى الجهد التالي",
"command.permissions.autoaccept.enable": "قبول التعديلات تلقائيًا",
"command.permissions.autoaccept.disable": "إيقاف قبول التعديلات تلقائيًا",
+ "command.workspace.toggle": "تبديل مساحات العمل",
"command.session.undo": "تراجع",
"command.session.undo.description": "تراجع عن الرسالة الأخيرة",
"command.session.redo": "إعادة",
@@ -348,6 +349,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "توقف قبول التعديلات تلقائيًا",
"toast.permissions.autoaccept.off.description": "ستتطلب أذونات التحرير والكتابة موافقة",
+ "toast.workspace.enabled.title": "تم تمكين مساحات العمل",
+ "toast.workspace.enabled.description": "الآن يتم عرض عدة worktrees في الشريط الجانبي",
+ "toast.workspace.disabled.title": "تم تعطيل مساحات العمل",
+ "toast.workspace.disabled.description": "يتم عرض worktree الرئيسي فقط في الشريط الجانبي",
+
"toast.model.none.title": "لم يتم تحديد نموذج",
"toast.model.none.description": "قم بتوصيل موفر لتلخيص هذه الجلسة",
diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts
index 43336f8d6..4bb66e11c 100644
--- a/packages/app/src/i18n/br.ts
+++ b/packages/app/src/i18n/br.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "Mudar para o próximo nível de esforço",
"command.permissions.autoaccept.enable": "Aceitar edições automaticamente",
"command.permissions.autoaccept.disable": "Parar de aceitar edições automaticamente",
+ "command.workspace.toggle": "Alternar espaços de trabalho",
"command.session.undo": "Desfazer",
"command.session.undo.description": "Desfazer a última mensagem",
"command.session.redo": "Refazer",
@@ -347,6 +348,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "Parou de aceitar edições automaticamente",
"toast.permissions.autoaccept.off.description": "Permissões de edição e escrita exigirão aprovação",
+ "toast.workspace.enabled.title": "Espaços de trabalho ativados",
+ "toast.workspace.enabled.description": "Várias worktrees agora são exibidas na barra lateral",
+ "toast.workspace.disabled.title": "Espaços de trabalho desativados",
+ "toast.workspace.disabled.description": "Apenas a worktree principal é exibida na barra lateral",
+
"toast.model.none.title": "Nenhum modelo selecionado",
"toast.model.none.description": "Conecte um provedor para resumir esta sessão",
diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts
index 69e8e8114..95d9f4a0f 100644
--- a/packages/app/src/i18n/da.ts
+++ b/packages/app/src/i18n/da.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "Skift til næste indsatsniveau",
"command.permissions.autoaccept.enable": "Accepter ændringer automatisk",
"command.permissions.autoaccept.disable": "Stop automatisk accept af ændringer",
+ "command.workspace.toggle": "Skift arbejdsområder",
"command.session.undo": "Fortryd",
"command.session.undo.description": "Fortryd den sidste besked",
"command.session.redo": "Omgør",
@@ -349,6 +350,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "Stoppede automatisk accept af ændringer",
"toast.permissions.autoaccept.off.description": "Redigerings- og skrivetilladelser vil kræve godkendelse",
+ "toast.workspace.enabled.title": "Arbejdsområder aktiveret",
+ "toast.workspace.enabled.description": "Flere worktrees vises nu i sidepanelet",
+ "toast.workspace.disabled.title": "Arbejdsområder deaktiveret",
+ "toast.workspace.disabled.description": "Kun hoved-worktree vises i sidepanelet",
+
"toast.model.none.title": "Ingen model valgt",
"toast.model.none.description": "Forbind en udbyder for at opsummere denne session",
diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts
index 1c28e4a16..3ead99427 100644
--- a/packages/app/src/i18n/de.ts
+++ b/packages/app/src/i18n/de.ts
@@ -74,6 +74,7 @@ export const dict = {
"command.model.variant.cycle.description": "Zum nächsten Aufwandslevel wechseln",
"command.permissions.autoaccept.enable": "Änderungen automatisch akzeptieren",
"command.permissions.autoaccept.disable": "Automatische Annahme von Änderungen stoppen",
+ "command.workspace.toggle": "Arbeitsbereiche umschalten",
"command.session.undo": "Rückgängig",
"command.session.undo.description": "Letzte Nachricht rückgängig machen",
"command.session.redo": "Wiederherstellen",
diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts
index 169d09cd3..780c19e21 100644
--- a/packages/app/src/i18n/en.ts
+++ b/packages/app/src/i18n/en.ts
@@ -71,6 +71,8 @@ export const dict = {
"command.model.variant.cycle.description": "Switch to the next effort level",
"command.permissions.autoaccept.enable": "Auto-accept edits",
"command.permissions.autoaccept.disable": "Stop auto-accepting edits",
+ "command.workspace.toggle": "Toggle workspaces",
+ "command.workspace.toggle.description": "Enable or disable multiple workspaces in the sidebar",
"command.session.undo": "Undo",
"command.session.undo.description": "Undo the last message",
"command.session.redo": "Redo",
@@ -350,6 +352,11 @@ export const dict = {
"toast.theme.title": "Theme switched",
"toast.scheme.title": "Color scheme",
+ "toast.workspace.enabled.title": "Workspaces enabled",
+ "toast.workspace.enabled.description": "Multiple worktrees are now shown in the sidebar",
+ "toast.workspace.disabled.title": "Workspaces disabled",
+ "toast.workspace.disabled.description": "Only the main worktree is shown in the sidebar",
+
"toast.permissions.autoaccept.on.title": "Auto-accepting edits",
"toast.permissions.autoaccept.on.description": "Edit and write permissions will be automatically approved",
"toast.permissions.autoaccept.off.title": "Stopped auto-accepting edits",
diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts
index 6e3eac0dd..4c5fe3004 100644
--- a/packages/app/src/i18n/es.ts
+++ b/packages/app/src/i18n/es.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "Cambiar al siguiente nivel de esfuerzo",
"command.permissions.autoaccept.enable": "Aceptar ediciones automáticamente",
"command.permissions.autoaccept.disable": "Dejar de aceptar ediciones automáticamente",
+ "command.workspace.toggle": "Alternar espacios de trabajo",
"command.session.undo": "Deshacer",
"command.session.undo.description": "Deshacer el último mensaje",
"command.session.redo": "Rehacer",
@@ -350,6 +351,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "Se dejó de aceptar ediciones automáticamente",
"toast.permissions.autoaccept.off.description": "Los permisos de edición y escritura requerirán aprobación",
+ "toast.workspace.enabled.title": "Espacios de trabajo habilitados",
+ "toast.workspace.enabled.description": "Ahora se muestran varios worktrees en la barra lateral",
+ "toast.workspace.disabled.title": "Espacios de trabajo deshabilitados",
+ "toast.workspace.disabled.description": "Solo se muestra el worktree principal en la barra lateral",
+
"toast.model.none.title": "Ningún modelo seleccionado",
"toast.model.none.description": "Conecta un proveedor para resumir esta sesión",
diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts
index fa3dccd9a..41c8b4554 100644
--- a/packages/app/src/i18n/fr.ts
+++ b/packages/app/src/i18n/fr.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "Passer au niveau d'effort suivant",
"command.permissions.autoaccept.enable": "Accepter automatiquement les modifications",
"command.permissions.autoaccept.disable": "Arrêter l'acceptation automatique des modifications",
+ "command.workspace.toggle": "Basculer les espaces de travail",
"command.session.undo": "Annuler",
"command.session.undo.description": "Annuler le dernier message",
"command.session.redo": "Rétablir",
@@ -352,6 +353,11 @@ export const dict = {
"toast.permissions.autoaccept.off.description":
"Les permissions de modification et d'écriture nécessiteront une approbation",
+ "toast.workspace.enabled.title": "Espaces de travail activés",
+ "toast.workspace.enabled.description": "Plusieurs worktrees sont désormais affichés dans la barre latérale",
+ "toast.workspace.disabled.title": "Espaces de travail désactivés",
+ "toast.workspace.disabled.description": "Seul le worktree principal est affiché dans la barre latérale",
+
"toast.model.none.title": "Aucun modèle sélectionné",
"toast.model.none.description": "Connectez un fournisseur pour résumer cette session",
diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts
index 4fccbd77e..d2530f5e5 100644
--- a/packages/app/src/i18n/ja.ts
+++ b/packages/app/src/i18n/ja.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "次の思考レベルに切り替え",
"command.permissions.autoaccept.enable": "編集を自動承認",
"command.permissions.autoaccept.disable": "編集の自動承認を停止",
+ "command.workspace.toggle": "ワークスペースを切り替え",
"command.session.undo": "元に戻す",
"command.session.undo.description": "最後のメッセージを元に戻す",
"command.session.redo": "やり直す",
diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts
index 5b5d29c0e..f81164ce3 100644
--- a/packages/app/src/i18n/ko.ts
+++ b/packages/app/src/i18n/ko.ts
@@ -74,6 +74,7 @@ export const dict = {
"command.model.variant.cycle.description": "다음 생각 수준으로 전환",
"command.permissions.autoaccept.enable": "편집 자동 수락",
"command.permissions.autoaccept.disable": "편집 자동 수락 중지",
+ "command.workspace.toggle": "작업 공간 전환",
"command.session.undo": "실행 취소",
"command.session.undo.description": "마지막 메시지 실행 취소",
"command.session.redo": "다시 실행",
@@ -351,6 +352,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "편집 자동 수락 중지됨",
"toast.permissions.autoaccept.off.description": "편집 및 쓰기 권한 승인이 필요합니다",
+ "toast.workspace.enabled.title": "작업 공간 활성화됨",
+ "toast.workspace.enabled.description": "이제 사이드바에 여러 작업 트리가 표시됩니다",
+ "toast.workspace.disabled.title": "작업 공간 비활성화됨",
+ "toast.workspace.disabled.description": "사이드바에 메인 작업 트리만 표시됩니다",
+
"toast.model.none.title": "선택된 모델 없음",
"toast.model.none.description": "이 세션을 요약하려면 공급자를 연결하세요",
diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts
index 89614ce85..d1f2bc7fd 100644
--- a/packages/app/src/i18n/no.ts
+++ b/packages/app/src/i18n/no.ts
@@ -73,6 +73,7 @@ export const dict = {
"command.model.variant.cycle.description": "Bytt til neste innsatsnivå",
"command.permissions.autoaccept.enable": "Godta endringer automatisk",
"command.permissions.autoaccept.disable": "Slutt å godta endringer automatisk",
+ "command.workspace.toggle": "Veksle arbeidsområder",
"command.session.undo": "Angre",
"command.session.undo.description": "Angre siste melding",
"command.session.redo": "Gjør om",
@@ -351,6 +352,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "Sluttet å godta endringer automatisk",
"toast.permissions.autoaccept.off.description": "Redigerings- og skrivetillatelser vil kreve godkjenning",
+ "toast.workspace.enabled.title": "Arbeidsområder aktivert",
+ "toast.workspace.enabled.description": "Flere worktrees vises nå i sidefeltet",
+ "toast.workspace.disabled.title": "Arbeidsområder deaktivert",
+ "toast.workspace.disabled.description": "Kun hoved-worktree vises i sidefeltet",
+
"toast.model.none.title": "Ingen modell valgt",
"toast.model.none.description": "Koble til en leverandør for å oppsummere denne sesjonen",
diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts
index b89921a9b..f1211c459 100644
--- a/packages/app/src/i18n/pl.ts
+++ b/packages/app/src/i18n/pl.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "Przełącz na następny poziom wysiłku",
"command.permissions.autoaccept.enable": "Automatyczne akceptowanie edycji",
"command.permissions.autoaccept.disable": "Zatrzymaj automatyczne akceptowanie edycji",
+ "command.workspace.toggle": "Przełącz przestrzenie robocze",
"command.session.undo": "Cofnij",
"command.session.undo.description": "Cofnij ostatnią wiadomość",
"command.session.redo": "Ponów",
@@ -349,6 +350,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "Zatrzymano automatyczne akceptowanie edycji",
"toast.permissions.autoaccept.off.description": "Uprawnienia do edycji i zapisu będą wymagały zatwierdzenia",
+ "toast.workspace.enabled.title": "Przestrzenie robocze włączone",
+ "toast.workspace.enabled.description": "Kilka worktree jest teraz wyświetlanych na pasku bocznym",
+ "toast.workspace.disabled.title": "Przestrzenie robocze wyłączone",
+ "toast.workspace.disabled.description": "Tylko główny worktree jest wyświetlany na pasku bocznym",
+
"toast.model.none.title": "Nie wybrano modelu",
"toast.model.none.description": "Połącz dostawcę, aby podsumować tę sesję",
diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts
index e99abbd08..e0efffa41 100644
--- a/packages/app/src/i18n/ru.ts
+++ b/packages/app/src/i18n/ru.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "Переключиться к следующему уровню усилий",
"command.permissions.autoaccept.enable": "Авто-принятие изменений",
"command.permissions.autoaccept.disable": "Прекратить авто-принятие изменений",
+ "command.workspace.toggle": "Переключить рабочие пространства",
"command.session.undo": "Отменить",
"command.session.undo.description": "Отменить последнее сообщение",
"command.session.redo": "Повторить",
@@ -350,6 +351,11 @@ export const dict = {
"toast.permissions.autoaccept.off.title": "Авто-принятие остановлено",
"toast.permissions.autoaccept.off.description": "Редактирование и запись потребуют подтверждения",
+ "toast.workspace.enabled.title": "Рабочие пространства включены",
+ "toast.workspace.enabled.description": "В боковой панели теперь отображаются несколько рабочих деревьев",
+ "toast.workspace.disabled.title": "Рабочие пространства отключены",
+ "toast.workspace.disabled.description": "В боковой панели отображается только главное рабочее дерево",
+
"toast.model.none.title": "Модель не выбрана",
"toast.model.none.description": "Подключите провайдера для суммаризации сессии",
diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts
index 0da6f9acc..cfe439d51 100644
--- a/packages/app/src/i18n/th.ts
+++ b/packages/app/src/i18n/th.ts
@@ -70,6 +70,7 @@ export const dict = {
"command.model.variant.cycle.description": "สลับไปยังระดับความพยายามถัดไป",
"command.permissions.autoaccept.enable": "ยอมรับการแก้ไขโดยอัตโนมัติ",
"command.permissions.autoaccept.disable": "หยุดยอมรับการแก้ไขโดยอัตโนมัติ",
+ "command.workspace.toggle": "สลับพื้นที่ทำงาน",
"command.session.undo": "ยกเลิก",
"command.session.undo.description": "ยกเลิกข้อความล่าสุด",
"command.session.redo": "ทำซ้ำ",
@@ -349,10 +350,15 @@ export const dict = {
"toast.scheme.title": "โทนสี",
"toast.permissions.autoaccept.on.title": "กำลังยอมรับการแก้ไขโดยอัตโนมัติ",
- "toast.permissions.autoaccept.on.description": "สิทธิ์การแก้ไขและเขียนจะได้รับการอนุมัติโดยอัตโนมัติ",
+ "toast.permissions.autoaccept.on.description": "สิทธิ์การแก้ไขและจะได้รับเขียนการอนุมัติโดยอัตโนมัติ",
"toast.permissions.autoaccept.off.title": "หยุดยอมรับการแก้ไขโดยอัตโนมัติ",
"toast.permissions.autoaccept.off.description": "สิทธิ์การแก้ไขและเขียนจะต้องได้รับการอนุมัติ",
+ "toast.workspace.enabled.title": "เปิดใช้งานพื้นที่ทำงานแล้ว",
+ "toast.workspace.enabled.description": "ตอนนี้จะแสดง worktree หลายรายการในแถบด้านข้าง",
+ "toast.workspace.disabled.title": "ปิดใช้งานพื้นที่ทำงานแล้ว",
+ "toast.workspace.disabled.description": "จะแสดงเฉพาะ worktree หลักในแถบด้านข้าง",
+
"toast.model.none.title": "ไม่ได้เลือกโมเดล",
"toast.model.none.description": "เชื่อมต่อผู้ให้บริการเพื่อสรุปเซสชันนี้",
diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts
index a7e1659ec..81bb23db9 100644
--- a/packages/app/src/i18n/zh.ts
+++ b/packages/app/src/i18n/zh.ts
@@ -74,6 +74,7 @@ export const dict = {
"command.model.variant.cycle.description": "切换到下一个强度等级",
"command.permissions.autoaccept.enable": "自动接受编辑",
"command.permissions.autoaccept.disable": "停止自动接受编辑",
+ "command.workspace.toggle": "切换工作区",
"command.session.undo": "撤销",
"command.session.undo.description": "撤销上一条消息",
"command.session.redo": "重做",
@@ -344,7 +345,12 @@ export const dict = {
"toast.language.description": "已切换到{{language}}",
"toast.theme.title": "主题已切换",
- "toast.scheme.title": "配色方案",
+ "toast.scheme.title": "颜色方案",
+
+ "toast.workspace.enabled.title": "工作区已启用",
+ "toast.workspace.enabled.description": "侧边栏现在显示多个工作树",
+ "toast.workspace.disabled.title": "工作区已禁用",
+ "toast.workspace.disabled.description": "侧边栏只显示主工作树",
"toast.permissions.autoaccept.on.title": "自动接受编辑",
"toast.permissions.autoaccept.on.description": "编辑和写入权限将自动获批",
diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts
index 7b8849b9a..f01c1ce0b 100644
--- a/packages/app/src/i18n/zht.ts
+++ b/packages/app/src/i18n/zht.ts
@@ -74,6 +74,7 @@ export const dict = {
"command.model.variant.cycle.description": "切換到下一個強度等級",
"command.permissions.autoaccept.enable": "自動接受編輯",
"command.permissions.autoaccept.disable": "停止自動接受編輯",
+ "command.workspace.toggle": "切換工作區",
"command.session.undo": "復原",
"command.session.undo.description": "復原上一則訊息",
"command.session.redo": "重做",
@@ -341,7 +342,12 @@ export const dict = {
"toast.language.description": "已切換到 {{language}}",
"toast.theme.title": "主題已切換",
- "toast.scheme.title": "配色方案",
+ "toast.scheme.title": "顏色方案",
+
+ "toast.workspace.enabled.title": "工作區已啟用",
+ "toast.workspace.enabled.description": "側邊欄現在顯示多個工作樹",
+ "toast.workspace.disabled.title": "工作區已停用",
+ "toast.workspace.disabled.description": "側邊欄只顯示主工作樹",
"toast.permissions.autoaccept.on.title": "自動接受編輯",
"toast.permissions.autoaccept.on.description": "編輯和寫入權限將自動獲准",
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index fe8618b73..ba888a280 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -1139,6 +1139,29 @@ export default function Layout(props: ParentProps) {
},
},
{
+ id: "workspace.toggle",
+ title: language.t("command.workspace.toggle"),
+ description: language.t("command.workspace.toggle.description"),
+ category: language.t("command.category.workspace"),
+ slash: "workspace",
+ disabled: !currentProject() || currentProject()?.vcs !== "git",
+ onSelect: () => {
+ const project = currentProject()
+ if (!project) return
+ if (project.vcs !== "git") return
+ const wasEnabled = layout.sidebar.workspaces(project.worktree)()
+ layout.sidebar.toggleWorkspaces(project.worktree)
+ showToast({
+ title: wasEnabled
+ ? language.t("toast.workspace.disabled.title")
+ : language.t("toast.workspace.enabled.title"),
+ description: wasEnabled
+ ? language.t("toast.workspace.disabled.description")
+ : language.t("toast.workspace.enabled.description"),
+ })
+ },
+ },
+ {
id: "theme.cycle",
title: language.t("command.theme.cycle"),
category: language.t("command.category.theme"),