feat(ui): sidebar redesign — project zones, grouping modes, full-page surfaces (#2480)

* checkpoint: flatten sidebar core (flat sessions, zones, single mode, folders flat)

* checkpoint: sidebar nav + scheduled/archive full-page surfaces, recent zone header

* checkpoint: worktrees management surface via project menu

* checkpoint: docs, i18n, validation for sidebar redesign

* checkpoint: unified row/zone geometry, recent backfill, tooltips everywhere, primary spinner

* checkpoint: branch icon marker, date moved to rich tooltip, recent back to pure time window

* checkpoint: PR state on branch markers + tooltip, no reserved right space, aligned show-more, instant tooltips

* checkpoint: reserve hover-action space so title text is not overlapped

* checkpoint: tighten hover-action reserve

* checkpoint: color-only unread emphasis to avoid title reflow

* checkpoint: drop new-subfolder action, folder actions overlay on hover

* checkpoint: fix sticky project headers (sticky on trigger div), stuck elevation

* checkpoint: full-bleed semibold zone headers, no top scroll fade

* checkpoint: headers without background tint (typography-only emphasis)

* checkpoint: recent header flush with scroll top (no pre-stick bump)

* checkpoint: shared tooltip provider with grouping (instant handoff between rows)

* checkpoint: blur pointer-click focus so hover chrome hides on mouse-leave

* checkpoint: tooltip closeDelay bridges inter-row gap

* checkpoint: nav above controls, merged view dropdown, project-scoped bulk selection, cross-worktree folders

* checkpoint: folder header tooltip with full path name

* checkpoint: true page surfaces (hidden chat, header title, close-on-select), multirun page, run-now jump, folders on top, controls row polish

* checkpoint: rename mode — dual-instance outside-click fix, no vertical shift

* checkpoint: session grouping mode toggle (by-worktree default, flat option)

* checkpoint: worktree header — hover padding reserve + delete worktree action

* checkpoint: frosted sticky header backing under desktop vibrancy

* checkpoint: align worktree sub-header with project header icon column

* checkpoint: restore worktree group DnD reorder; dense vibrancy header tint (Chromium mask+backdrop-filter)

* checkpoint: vibrancy — drop scroller mask so backdrop-filter samples rows (Chromium backdrop-root limitation)

* checkpoint: vibrancy headers use opaque sidebar tone (Electron transparent-window backdrop-filter bug)

* checkpoint: nav collapsed to one row (New session + surface icons), mirrors Add project row

* checkpoint: raise sticky zone headers above row action layers (z-20)

* checkpoint: New session as full-width CTA + single quiet toolbar row

* checkpoint: New session row back to quiet text form above the toolbar

* checkpoint: align toolbar left icon with New session icon column

* checkpoint: hoverless flat header controls (color-only hover states)

* checkpoint: sticky project headers toggle in view dropdown (default on)

* checkpoint: full-page surfaces adapted — archive directory filter panel, scheduled master-detail, multirun without duplicate title bar

* checkpoint: multirun joins mutually exclusive surface set

* checkpoint: surfaces leave via navigation only (no close/cancel buttons), robust close-on-new-session, drop dead MultiRunWindow

* checkpoint: no scheduled header description, aligned empty-worktree note, collapse/expand covers worktree groups

* checkpoint: overlay scrollbar above sticky zone headers

* checkpoint: archive delete icons reveal on hover with padding shift

* checkpoint: new worktrees surface at top of the worktree list

* checkpoint: no grab cursor on worktree headers

* checkpoint: worktrees page list-only with inline action, no worktrees in edit dialog, drop menu ellipsis

* checkpoint: worktrees page uses full content width

* checkpoint: worktrees header — 'in' instead of em dash, no description

* checkpoint: drop legacy OpenCode badge from worktree list, tooltip without OpenCode mention

* review: bound pr summary cache
This commit is contained in:
Bohdan Triapitsyn
2026-07-28 12:04:39 +03:00
committed by GitHub
parent 5787ea5d49
commit 1291cde5c2
56 changed files with 1902 additions and 1044 deletions
@@ -1283,7 +1283,7 @@ export const settingsDict = {
'settings.openchamber.worktrees.setup.waitForCommandsAria': 'Wait for Worktree setup commands before creating or sending a session',
'settings.openchamber.worktrees.setup.toast.saveFailed': 'Failed to save worktree setup commands',
'settings.openchamber.worktrees.list.title': 'Existing worktrees',
'settings.openchamber.worktrees.list.tooltip': 'Worktrees live outside the repo (OpenCode-managed). Deleting a worktree also removes linked sessions.',
'settings.openchamber.worktrees.list.tooltip': 'Deleting a worktree also removes its linked sessions.',
'settings.openchamber.worktrees.list.loading': 'Loading worktrees...',
'settings.openchamber.worktrees.list.empty': 'No worktrees found for this project',
'settings.openchamber.worktrees.list.detachedHead': 'Detached HEAD',
+22
View File
@@ -420,6 +420,28 @@ export const dict = {
'sessions.sidebar.empty.noMatches.title': 'No matching sessions',
'sessions.sidebar.empty.noMatches.description': 'Try a different title, branch, folder, or path.',
'sessions.sidebar.activity.recentTitle': 'recent',
'sessions.archivePage.allDirectories': 'All directories',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Sticky project headers',
'sessions.sidebar.header.grouping.label': 'Group sessions',
'sessions.sidebar.header.grouping.byWorktree': 'By worktree',
'sessions.sidebar.header.grouping.flat': 'Flat list',
'sessions.sidebar.project.actions.manageWorktrees': 'Manage worktrees',
'sessions.worktreesPage.title': 'Worktrees in {project}',
'sessions.worktreesPage.description': 'Create, inspect, and remove git worktrees for this project.',
'sessions.worktreesPage.closeAria': 'Close worktrees',
'sessions.scheduledTasks.page.closeAria': 'Close scheduled tasks',
'sessions.sidebar.nav.archive': 'Archive',
'sessions.archivePage.title': 'Archive',
'sessions.archivePage.countSingle': '{count} archived session',
'sessions.archivePage.countPlural': '{count} archived sessions',
'sessions.archivePage.closeAria': 'Close archive',
'sessions.archivePage.searchPlaceholder': 'Search archived sessions',
'sessions.archivePage.empty.noArchived': 'No archived sessions',
'sessions.archivePage.empty.noMatches': 'No matching archived sessions',
'sessions.archivePage.otherProjects': 'other projects',
'sessions.archivePage.deleteProject': 'Delete all archived sessions in this project',
'sessions.archivePage.deleteProjectAria': 'Delete all archived sessions in {label}',
'sessions.archivePage.deleteSessionAria': 'Delete {title}',
'sessions.switcher.openAria': 'Open session switcher',
'sessions.switcher.empty': 'No recent sessions',
'sessions.switcher.draftTitle': 'New session',
@@ -1250,7 +1250,7 @@ export const settingsDict = {
"settings.openchamber.worktrees.setup.waitForCommandsAria": "Esperar los comandos de configuración de Worktree antes de crear o enviar una sesión",
"settings.openchamber.worktrees.setup.toast.saveFailed": "Error al guardar los comandos de configuración del worktree",
"settings.openchamber.worktrees.list.title": "Worktrees existentes",
"settings.openchamber.worktrees.list.tooltip": "Los worktrees existen fuera del repositorio (gestionados por OpenCode). Eliminar un worktree también elimina las sesiones vinculadas.",
"settings.openchamber.worktrees.list.tooltip": "Eliminar un worktree también elimina las sesiones vinculadas.",
"settings.openchamber.worktrees.list.loading": "Cargando worktrees...",
"settings.openchamber.worktrees.list.empty": "No se encontraron worktrees para este proyecto",
"settings.openchamber.worktrees.list.detachedHead": "HEAD desvinculado",
+22
View File
@@ -421,6 +421,28 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.empty.noMatches.title": "No hay sesiones coincidentes",
"sessions.sidebar.empty.noMatches.description": "Inténtalo con un título, rama, carpeta o ruta diferente.",
"sessions.sidebar.activity.recentTitle": "reciente",
"sessions.archivePage.allDirectories": "Todos los directorios",
"sessions.sidebar.header.displayMode.stickyHeaders": "Encabezados de proyecto fijos",
"sessions.sidebar.header.grouping.label": "Agrupar sesiones",
"sessions.sidebar.header.grouping.byWorktree": "Por worktree",
"sessions.sidebar.header.grouping.flat": "Lista plana",
"sessions.sidebar.project.actions.manageWorktrees": "Gestionar worktrees",
"sessions.worktreesPage.title": "Worktrees en {project}",
"sessions.worktreesPage.description": "Crea, inspecciona y elimina los worktrees de git de este proyecto.",
"sessions.worktreesPage.closeAria": "Cerrar worktrees",
"sessions.scheduledTasks.page.closeAria": "Cerrar tareas programadas",
"sessions.sidebar.nav.archive": "Archivo",
"sessions.archivePage.title": "Archivo",
"sessions.archivePage.countSingle": "{count} sesión archivada",
"sessions.archivePage.countPlural": "{count} sesiones archivadas",
"sessions.archivePage.closeAria": "Cerrar archivo",
"sessions.archivePage.searchPlaceholder": "Buscar sesiones archivadas",
"sessions.archivePage.empty.noArchived": "No hay sesiones archivadas",
"sessions.archivePage.empty.noMatches": "No hay sesiones archivadas coincidentes",
"sessions.archivePage.otherProjects": "otros proyectos",
"sessions.archivePage.deleteProject": "Eliminar todas las sesiones archivadas de este proyecto",
"sessions.archivePage.deleteProjectAria": "Eliminar todas las sesiones archivadas de {label}",
"sessions.archivePage.deleteSessionAria": "Eliminar {title}",
"sessions.switcher.openAria": "Abrir selector de sesiones",
"sessions.switcher.empty": "No hay sesiones recientes",
"sessions.switcher.draftTitle": "Nueva sesión",
@@ -1171,7 +1171,7 @@ export const settingsDict = {
'settings.openchamber.worktrees.setup.waitForCommandsAria': 'Attendre les commandes de configuration Worktree avant de créer ou d\'envoyer une session',
'settings.openchamber.worktrees.setup.toast.saveFailed': 'Échec de l\'enregistrement des commandes de configuration Worktree',
'settings.openchamber.worktrees.list.title': 'Worktrees existants',
'settings.openchamber.worktrees.list.tooltip': 'Les worktrees vivent en dehors du dépôt (gérés par OpenCode). La suppression d\'un worktree supprime également les sessions liées.',
'settings.openchamber.worktrees.list.tooltip': 'La suppression d\'un worktree supprime également les sessions liées.',
'settings.openchamber.worktrees.list.loading': 'Chargement des worktrees...',
'settings.openchamber.worktrees.list.empty': 'Aucun worktree trouvé pour ce projet',
'settings.openchamber.worktrees.list.detachedHead': 'HEAD détaché',
+22
View File
@@ -262,6 +262,28 @@ export const dict = {
'sessions.sidebar.empty.noMatches.title': 'Aucune session correspondante',
'sessions.sidebar.empty.noMatches.description': 'Essayez un autre titre, branche, dossier ou chemin.',
'sessions.sidebar.activity.recentTitle': 'récent',
'sessions.archivePage.allDirectories': 'Tous les répertoires',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Épingler les en-têtes de projet',
'sessions.sidebar.header.grouping.label': 'Regrouper les sessions',
'sessions.sidebar.header.grouping.byWorktree': 'Par worktree',
'sessions.sidebar.header.grouping.flat': 'Liste plate',
'sessions.sidebar.project.actions.manageWorktrees': 'Gérer les worktrees',
'sessions.worktreesPage.title': 'Worktrees dans {project}',
'sessions.worktreesPage.description': 'Créez, inspectez et supprimez les worktrees git de ce projet.',
'sessions.worktreesPage.closeAria': 'Fermer les worktrees',
'sessions.scheduledTasks.page.closeAria': 'Fermer les tâches planifiées',
'sessions.sidebar.nav.archive': 'Archives',
'sessions.archivePage.title': 'Archives',
'sessions.archivePage.countSingle': '{count} session archivée',
'sessions.archivePage.countPlural': '{count} sessions archivées',
'sessions.archivePage.closeAria': 'Fermer les archives',
'sessions.archivePage.searchPlaceholder': 'Rechercher des sessions archivées',
'sessions.archivePage.empty.noArchived': 'Aucune session archivée',
'sessions.archivePage.empty.noMatches': 'Aucune session archivée correspondante',
'sessions.archivePage.otherProjects': 'autres projets',
'sessions.archivePage.deleteProject': 'Supprimer toutes les sessions archivées de ce projet',
'sessions.archivePage.deleteProjectAria': 'Supprimer toutes les sessions archivées de {label}',
'sessions.archivePage.deleteSessionAria': 'Supprimer {title}',
'sessions.switcher.openAria': 'Sélecteur de session ouvert',
'sessions.switcher.empty': 'Aucune session récente',
'sessions.switcher.draftTitle': 'Nouvelle session',
@@ -1283,7 +1283,7 @@ export const settingsDict = {
'settings.openchamber.worktrees.setup.waitForCommandsAria': 'Worktree セットアップコマンドの完了を待ってからセッションを作成または送信する',
'settings.openchamber.worktrees.setup.toast.saveFailed': 'ワークツリー設定コマンドの保存に失敗しました',
'settings.openchamber.worktrees.list.title': '既存の Worktree',
'settings.openchamber.worktrees.list.tooltip': 'Worktree はリポジトリの外にあり(OpenCode 管理)、削除するとリンクされた Session も削除されます。',
'settings.openchamber.worktrees.list.tooltip': 'Worktree 削除するとリンクされたセッションも削除されます。',
'settings.openchamber.worktrees.list.loading': 'Worktree を読み込み中...',
'settings.openchamber.worktrees.list.empty': 'このプロジェクトに Worktree は見つかりません',
'settings.openchamber.worktrees.list.detachedHead': '分離 HEAD',
+22
View File
@@ -421,6 +421,28 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '一致するセッションがありません',
'sessions.sidebar.empty.noMatches.description': '別のタイトル、ブランチ、フォルダ、パスをお試しください。',
'sessions.sidebar.activity.recentTitle': '最近',
'sessions.archivePage.allDirectories': 'すべてのディレクトリ',
'sessions.sidebar.header.displayMode.stickyHeaders': 'プロジェクトヘッダーを固定',
'sessions.sidebar.header.grouping.label': 'セッションのグループ化',
'sessions.sidebar.header.grouping.byWorktree': 'ワークツリー別',
'sessions.sidebar.header.grouping.flat': 'フラットリスト',
'sessions.sidebar.project.actions.manageWorktrees': 'ワークツリーを管理',
'sessions.worktreesPage.title': '{project} のワークツリー',
'sessions.worktreesPage.description': 'このプロジェクトの git ワークツリーを作成・確認・削除します。',
'sessions.worktreesPage.closeAria': 'ワークツリーを閉じる',
'sessions.scheduledTasks.page.closeAria': 'スケジュールタスクを閉じる',
'sessions.sidebar.nav.archive': 'アーカイブ',
'sessions.archivePage.title': 'アーカイブ',
'sessions.archivePage.countSingle': 'アーカイブ済みセッション {count} 件',
'sessions.archivePage.countPlural': 'アーカイブ済みセッション {count} 件',
'sessions.archivePage.closeAria': 'アーカイブを閉じる',
'sessions.archivePage.searchPlaceholder': 'アーカイブ済みセッションを検索',
'sessions.archivePage.empty.noArchived': 'アーカイブ済みセッションはありません',
'sessions.archivePage.empty.noMatches': '一致するアーカイブ済みセッションはありません',
'sessions.archivePage.otherProjects': 'その他のプロジェクト',
'sessions.archivePage.deleteProject': 'このプロジェクトのアーカイブ済みセッションをすべて削除',
'sessions.archivePage.deleteProjectAria': '{label} のアーカイブ済みセッションをすべて削除',
'sessions.archivePage.deleteSessionAria': '{title} を削除',
'sessions.switcher.openAria': 'セッションスイッチャーを開く',
'sessions.switcher.empty': '最近のセッションはありません',
'sessions.switcher.draftTitle': '新しいセッション',
@@ -1250,7 +1250,7 @@ export const settingsDict = {
'settings.openchamber.worktrees.setup.waitForCommandsAria': '세션을 만들거나 보내기 전에 Worktree 설정 명령이 끝날 때까지 기다리기',
'settings.openchamber.worktrees.setup.toast.saveFailed': 'Worktree 설정 명령 저장에 실패했습니다',
'settings.openchamber.worktrees.list.title': '기존 worktree',
'settings.openchamber.worktrees.list.tooltip': 'Worktree는 repo 외부에 있습니다(OpenCode 관리). worktree를 삭제하면 연결된 세션도 제거됩니다.',
'settings.openchamber.worktrees.list.tooltip': 'Worktree를 삭제하면 연결된 세션도 제거됩니다.',
'settings.openchamber.worktrees.list.loading': 'worktree 로딩 중...',
'settings.openchamber.worktrees.list.empty': '이 프로젝트의 worktree를 찾을 수 없습니다',
'settings.openchamber.worktrees.list.detachedHead': 'Detached HEAD',
+22
View File
@@ -421,6 +421,28 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '일치하는 세션 없음',
'sessions.sidebar.empty.noMatches.description': '다른 제목, 브랜치, 폴더 또는 경로로 검색해 보세요.',
'sessions.sidebar.activity.recentTitle': '최근',
'sessions.archivePage.allDirectories': '모든 디렉터리',
'sessions.sidebar.header.displayMode.stickyHeaders': '프로젝트 헤더 고정',
'sessions.sidebar.header.grouping.label': '세션 그룹화',
'sessions.sidebar.header.grouping.byWorktree': '워크트리별',
'sessions.sidebar.header.grouping.flat': '평면 목록',
'sessions.sidebar.project.actions.manageWorktrees': '워크트리 관리',
'sessions.worktreesPage.title': '{project}의 워크트리',
'sessions.worktreesPage.description': '이 프로젝트의 git 워크트리를 생성, 확인, 삭제합니다.',
'sessions.worktreesPage.closeAria': '워크트리 닫기',
'sessions.scheduledTasks.page.closeAria': '예약 작업 닫기',
'sessions.sidebar.nav.archive': '보관함',
'sessions.archivePage.title': '보관함',
'sessions.archivePage.countSingle': '보관된 세션 {count}개',
'sessions.archivePage.countPlural': '보관된 세션 {count}개',
'sessions.archivePage.closeAria': '보관함 닫기',
'sessions.archivePage.searchPlaceholder': '보관된 세션 검색',
'sessions.archivePage.empty.noArchived': '보관된 세션이 없습니다',
'sessions.archivePage.empty.noMatches': '일치하는 보관된 세션이 없습니다',
'sessions.archivePage.otherProjects': '기타 프로젝트',
'sessions.archivePage.deleteProject': '이 프로젝트의 보관된 세션 모두 삭제',
'sessions.archivePage.deleteProjectAria': '{label}의 보관된 세션 모두 삭제',
'sessions.archivePage.deleteSessionAria': '{title} 삭제',
'sessions.switcher.openAria': '세션 전환기 열기',
'sessions.switcher.empty': '최근 세션 없음',
'sessions.switcher.draftTitle': '새 세션',
@@ -1187,7 +1187,7 @@ export const settingsDict = {
'settings.openchamber.worktrees.list.empty': 'Nie znaleziono worktree dla tego projektu',
'settings.openchamber.worktrees.list.loading': 'Ładowanie worktree...',
'settings.openchamber.worktrees.list.title': 'Istniejące worktree',
'settings.openchamber.worktrees.list.tooltip': 'Worktree znajdują się poza repozytorium i są zarządzane przez OpenCode. Usunięcie worktree usuwa także powiązane sesje.',
'settings.openchamber.worktrees.list.tooltip': 'Usunięcie worktree usuwa także powiązane sesje.',
'settings.openchamber.worktrees.setup.addCommand': 'Dodaj polecenie',
'settings.openchamber.worktrees.setup.commandPlaceholder': 'np. bun install',
'settings.openchamber.worktrees.setup.loading': 'Ładowanie...',
+22
View File
@@ -237,6 +237,28 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': 'Brak pasujących sesji',
'sessions.sidebar.empty.noMatches.description': 'Spróbuj innego tytułu, gałęzi, folderu lub ścieżki.',
'sessions.sidebar.activity.recentTitle': 'ostatnie',
'sessions.archivePage.allDirectories': 'Wszystkie katalogi',
'sessions.sidebar.header.displayMode.stickyHeaders': 'Przyklejone nagłówki projektów',
'sessions.sidebar.header.grouping.label': 'Grupowanie sesji',
'sessions.sidebar.header.grouping.byWorktree': 'Według worktree',
'sessions.sidebar.header.grouping.flat': 'Płaska lista',
'sessions.sidebar.project.actions.manageWorktrees': 'Zarządzaj worktree',
'sessions.worktreesPage.title': 'Worktree w {project}',
'sessions.worktreesPage.description': 'Twórz, przeglądaj i usuwaj worktree gita tego projektu.',
'sessions.worktreesPage.closeAria': 'Zamknij worktree',
'sessions.scheduledTasks.page.closeAria': 'Zamknij zaplanowane zadania',
'sessions.sidebar.nav.archive': 'Archiwum',
'sessions.archivePage.title': 'Archiwum',
'sessions.archivePage.countSingle': '{count} zarchiwizowana sesja',
'sessions.archivePage.countPlural': '{count} zarchiwizowanych sesji',
'sessions.archivePage.closeAria': 'Zamknij archiwum',
'sessions.archivePage.searchPlaceholder': 'Szukaj zarchiwizowanych sesji',
'sessions.archivePage.empty.noArchived': 'Brak zarchiwizowanych sesji',
'sessions.archivePage.empty.noMatches': 'Brak pasujących zarchiwizowanych sesji',
'sessions.archivePage.otherProjects': 'inne projekty',
'sessions.archivePage.deleteProject': 'Usuń wszystkie zarchiwizowane sesje tego projektu',
'sessions.archivePage.deleteProjectAria': 'Usuń wszystkie zarchiwizowane sesje w {label}',
'sessions.archivePage.deleteSessionAria': 'Usuń {title}',
'sessions.switcher.openAria': 'Otwórz przełącznik sesji',
'sessions.switcher.empty': 'Brak ostatnich sesji',
'sessions.switcher.draftTitle': 'Nowa sesja',
@@ -1250,7 +1250,7 @@ export const settingsDict = {
"settings.openchamber.worktrees.setup.waitForCommandsAria": "Aguardar os comandos de configuração do Worktree antes de criar ou enviar uma sessão",
"settings.openchamber.worktrees.setup.toast.saveFailed": "Falha ao salvar os comandos de configuração do Worktree",
"settings.openchamber.worktrees.list.title": "Worktrees existentes",
"settings.openchamber.worktrees.list.tooltip": "Os worktrees existem fuera do repositório (gerenciados por OpenCode). Excluir um worktree também remove sessões vinculadas.",
"settings.openchamber.worktrees.list.tooltip": "Excluir um worktree também remove as sessões vinculadas.",
"settings.openchamber.worktrees.list.loading": "Carregando worktrees...",
"settings.openchamber.worktrees.list.empty": "Nenhum worktree encontrado para este projeto",
"settings.openchamber.worktrees.list.detachedHead": "HEAD desvinculado",
@@ -421,6 +421,28 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.empty.noMatches.title": "Não há sessões coincidentes",
"sessions.sidebar.empty.noMatches.description": "Tente com outro título, branch, pasta ou caminho.",
"sessions.sidebar.activity.recentTitle": "recente",
"sessions.archivePage.allDirectories": "Todos os diretórios",
"sessions.sidebar.header.displayMode.stickyHeaders": "Cabeçalhos de projeto fixos",
"sessions.sidebar.header.grouping.label": "Agrupar sessões",
"sessions.sidebar.header.grouping.byWorktree": "Por worktree",
"sessions.sidebar.header.grouping.flat": "Lista plana",
"sessions.sidebar.project.actions.manageWorktrees": "Gerenciar worktrees",
"sessions.worktreesPage.title": "Worktrees em {project}",
"sessions.worktreesPage.description": "Crie, inspecione e remova os worktrees git deste projeto.",
"sessions.worktreesPage.closeAria": "Fechar worktrees",
"sessions.scheduledTasks.page.closeAria": "Fechar tarefas agendadas",
"sessions.sidebar.nav.archive": "Arquivo",
"sessions.archivePage.title": "Arquivo",
"sessions.archivePage.countSingle": "{count} sessão arquivada",
"sessions.archivePage.countPlural": "{count} sessões arquivadas",
"sessions.archivePage.closeAria": "Fechar arquivo",
"sessions.archivePage.searchPlaceholder": "Pesquisar sessões arquivadas",
"sessions.archivePage.empty.noArchived": "Nenhuma sessão arquivada",
"sessions.archivePage.empty.noMatches": "Nenhuma sessão arquivada correspondente",
"sessions.archivePage.otherProjects": "outros projetos",
"sessions.archivePage.deleteProject": "Excluir todas as sessões arquivadas deste projeto",
"sessions.archivePage.deleteProjectAria": "Excluir todas as sessões arquivadas de {label}",
"sessions.archivePage.deleteSessionAria": "Excluir {title}",
"sessions.switcher.openAria": "Abrir seletor de sessões",
"sessions.switcher.empty": "Nenhuma sessão recente",
"sessions.switcher.draftTitle": "Nova sessão",
@@ -1250,7 +1250,7 @@ export const settingsDict = {
"settings.openchamber.worktrees.setup.waitForCommandsAria": "Чекати завершення команд налаштування Worktree перед створенням або надсиланням сесії",
"settings.openchamber.worktrees.setup.toast.saveFailed": "Не вдалося зберегти команди налаштування Worktree",
"settings.openchamber.worktrees.list.title": "Наявні worktree",
"settings.openchamber.worktrees.list.tooltip": "Worktree розташовані поза репозиторієм і керуються OpenCode. Видалення worktree також видаляє пов’язані сесії.",
"settings.openchamber.worktrees.list.tooltip": "Видалення worktree також видаляє пов’язані з ним сесії.",
"settings.openchamber.worktrees.list.loading": "Завантаження worktree...",
"settings.openchamber.worktrees.list.empty": "Для цього проєкту не знайдено worktree",
"settings.openchamber.worktrees.list.detachedHead": "Відокремлено HEAD",
+22
View File
@@ -421,6 +421,28 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.empty.noMatches.title": "Немає відповідних сесій",
"sessions.sidebar.empty.noMatches.description": "Спробуйте інший заголовок, гілку, папку або шлях.",
"sessions.sidebar.activity.recentTitle": "Останні",
"sessions.archivePage.allDirectories": "Всі директорії",
"sessions.sidebar.header.displayMode.stickyHeaders": "Липкі заголовки проектів",
"sessions.sidebar.header.grouping.label": "Групування сесій",
"sessions.sidebar.header.grouping.byWorktree": "За worktree",
"sessions.sidebar.header.grouping.flat": "Плаский список",
"sessions.sidebar.project.actions.manageWorktrees": "Керувати worktree",
"sessions.worktreesPage.title": "Worktree у {project}",
"sessions.worktreesPage.description": "Створюйте, переглядайте та видаляйте git worktree цього проєкту.",
"sessions.worktreesPage.closeAria": "Закрити worktree",
"sessions.scheduledTasks.page.closeAria": "Закрити заплановані завдання",
"sessions.sidebar.nav.archive": "Архів",
"sessions.archivePage.title": "Архів",
"sessions.archivePage.countSingle": "{count} архівна сесія",
"sessions.archivePage.countPlural": "{count} архівних сесій",
"sessions.archivePage.closeAria": "Закрити архів",
"sessions.archivePage.searchPlaceholder": "Пошук архівних сесій",
"sessions.archivePage.empty.noArchived": "Немає архівних сесій",
"sessions.archivePage.empty.noMatches": "Немає збігів серед архівних сесій",
"sessions.archivePage.otherProjects": "інші проєкти",
"sessions.archivePage.deleteProject": "Видалити всі архівні сесії цього проєкту",
"sessions.archivePage.deleteProjectAria": "Видалити всі архівні сесії у {label}",
"sessions.archivePage.deleteSessionAria": "Видалити {title}",
"sessions.switcher.openAria": "Відкрити перемикач сесій",
"sessions.switcher.empty": "Немає недавніх сесій",
"sessions.switcher.draftTitle": "Нова сесія",
@@ -1250,7 +1250,7 @@ export const settingsDict = {
'settings.openchamber.worktrees.setup.waitForCommandsAria': '创建或发送会话前等待 Worktree 初始化命令完成',
'settings.openchamber.worktrees.setup.toast.saveFailed': '保存 Worktree 初始化命令失败',
'settings.openchamber.worktrees.list.title': '现有工作树',
'settings.openchamber.worktrees.list.tooltip': '工作树位于仓库外部(由 OpenCode 管理)。删除工作树也会删除关联会话。',
'settings.openchamber.worktrees.list.tooltip': '删除工作树也会删除关联会话。',
'settings.openchamber.worktrees.list.loading': '正在加载工作树...',
'settings.openchamber.worktrees.list.empty': '该项目未找到工作树',
'settings.openchamber.worktrees.list.detachedHead': '分离 HEAD',
@@ -421,6 +421,28 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '没有匹配的会话',
'sessions.sidebar.empty.noMatches.description': '请尝试其他标题、分支、文件夹或路径。',
'sessions.sidebar.activity.recentTitle': '最近',
'sessions.archivePage.allDirectories': '所有目录',
'sessions.sidebar.header.displayMode.stickyHeaders': '固定项目标题',
'sessions.sidebar.header.grouping.label': '会话分组',
'sessions.sidebar.header.grouping.byWorktree': '按工作树',
'sessions.sidebar.header.grouping.flat': '平铺列表',
'sessions.sidebar.project.actions.manageWorktrees': '管理工作树',
'sessions.worktreesPage.title': '{project} 的工作树',
'sessions.worktreesPage.description': '创建、查看和删除此项目的 git 工作树。',
'sessions.worktreesPage.closeAria': '关闭工作树',
'sessions.scheduledTasks.page.closeAria': '关闭计划任务',
'sessions.sidebar.nav.archive': '归档',
'sessions.archivePage.title': '归档',
'sessions.archivePage.countSingle': '{count} 个已归档会话',
'sessions.archivePage.countPlural': '{count} 个已归档会话',
'sessions.archivePage.closeAria': '关闭归档',
'sessions.archivePage.searchPlaceholder': '搜索已归档会话',
'sessions.archivePage.empty.noArchived': '没有已归档会话',
'sessions.archivePage.empty.noMatches': '没有匹配的已归档会话',
'sessions.archivePage.otherProjects': '其他项目',
'sessions.archivePage.deleteProject': '删除此项目的所有已归档会话',
'sessions.archivePage.deleteProjectAria': '删除 {label} 的所有已归档会话',
'sessions.archivePage.deleteSessionAria': '删除 {title}',
'sessions.switcher.openAria': '打开会话切换器',
'sessions.switcher.empty': '没有最近会话',
'sessions.switcher.draftTitle': '新会话',
@@ -1156,7 +1156,7 @@
'settings.openchamber.worktrees.setup.waitForCommandsAria': '建立或傳送工作階段前等待 Worktree 設定命令完成',
'settings.openchamber.worktrees.setup.toast.saveFailed': '儲存 Worktree 設定命令失敗',
'settings.openchamber.worktrees.list.title': '現有 worktree',
'settings.openchamber.worktrees.list.tooltip': 'Worktree 位於儲存庫外部(由 OpenCode 管理)。刪除 worktree 也會刪除關聯工作階段。',
'settings.openchamber.worktrees.list.tooltip': '刪除 worktree 也會刪除關聯工作階段。',
'settings.openchamber.worktrees.list.loading': '正在載入 worktree...',
'settings.openchamber.worktrees.list.empty': '該專案找不到 worktree',
'settings.openchamber.worktrees.list.detachedHead': '分離 HEAD',
@@ -434,6 +434,28 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.empty.noMatches.title': '沒有符合的會話',
'sessions.sidebar.empty.noMatches.description': '請嘗試其他標題、分支、資料夾或路徑。',
'sessions.sidebar.activity.recentTitle': '最近',
'sessions.archivePage.allDirectories': '所有目錄',
'sessions.sidebar.header.displayMode.stickyHeaders': '固定專案標題',
'sessions.sidebar.header.grouping.label': '工作階段分組',
'sessions.sidebar.header.grouping.byWorktree': '依工作樹',
'sessions.sidebar.header.grouping.flat': '平面清單',
'sessions.sidebar.project.actions.manageWorktrees': '管理工作樹',
'sessions.worktreesPage.title': '{project} 的工作樹',
'sessions.worktreesPage.description': '建立、檢視及移除此專案的 git 工作樹。',
'sessions.worktreesPage.closeAria': '關閉工作樹',
'sessions.scheduledTasks.page.closeAria': '關閉排程任務',
'sessions.sidebar.nav.archive': '封存',
'sessions.archivePage.title': '封存',
'sessions.archivePage.countSingle': '{count} 個已封存工作階段',
'sessions.archivePage.countPlural': '{count} 個已封存工作階段',
'sessions.archivePage.closeAria': '關閉封存',
'sessions.archivePage.searchPlaceholder': '搜尋已封存工作階段',
'sessions.archivePage.empty.noArchived': '沒有已封存的工作階段',
'sessions.archivePage.empty.noMatches': '沒有符合的已封存工作階段',
'sessions.archivePage.otherProjects': '其他專案',
'sessions.archivePage.deleteProject': '刪除此專案的所有已封存工作階段',
'sessions.archivePage.deleteProjectAria': '刪除 {label} 的所有已封存工作階段',
'sessions.archivePage.deleteSessionAria': '刪除 {title}',
'sessions.switcher.openAria': '開啟會話切換器',
'sessions.switcher.empty': '沒有最近會話',
'sessions.switcher.draftTitle': '新會話',