feat: add Electron Mini Chat windows (#1161)

Add dedicated Electron Mini Chat windows for focused chat sessions without the full desktop shell. Mini Chat can open existing sessions or draft sessions, supports pinning above other windows, transfers sessions or drafts back to the main window, and deduplicates existing-session windows.

Expose Mini Chat entry points from the main header, session sidebar, command palette, and `mod+alt+n`. Add a dedicated Vite entry and React runtime so the compact surface can stay isolated from full-app chrome while still sharing chat, sync, theme, locale, model, agent, and worktree behavior.

Keep Mini Chat behavior scoped to the compact surface:
- limit assistant/user message actions to the appropriate Mini Chat set
- hide workspace changed-files UI in Mini Chat
- keep draft worktree selection and streaming directory state in sync
- mark sessions viewed while they are open in Mini Chat
- support Mini Chat-specific keyboard shortcuts for input focus, model selection, thinking variant cycling, favorite model cycling, and opening new Mini Chat drafts

Harden Electron integration by gating Mini Chat controls on desktop IPC availability, restricting pin/unpin IPC to Mini Chat windows, and only closing Mini Chat after the main window handoff succeeds.
This commit is contained in:
Bohdan Triapitsyn
2026-05-08 12:22:59 +03:00
committed by GitHub
parent 8410c41b01
commit e1ff21bc0a
37 changed files with 1312 additions and 29 deletions
+15
View File
@@ -200,6 +200,21 @@ export const isTauriShell = (): boolean => {
export const isElectronShell = (): boolean => getElectronRuntime()?.runtime === 'electron';
export const hasDesktopInvoke = (): boolean => {
if (typeof window === 'undefined') return false;
const tauri = (window as unknown as { __TAURI__?: TauriGlobal }).__TAURI__;
return typeof tauri?.core?.invoke === 'function';
};
export const canUseElectronDesktopIPC = (): boolean => isElectronShell() && hasDesktopInvoke();
export const invokeDesktop = async <T = unknown>(command: string, args?: Record<string, unknown>): Promise<T | null> => {
if (typeof window === 'undefined') return null;
const tauri = (window as unknown as { __TAURI__?: TauriGlobal }).__TAURI__;
if (typeof tauri?.core?.invoke !== 'function') return null;
return tauri.core.invoke(command, args ?? {}) as Promise<T>;
};
const normalizeOrigin = (raw: string): string | null => {
const trimmed = raw.trim();
if (!trimmed) return null;
@@ -753,6 +753,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': 'Cycle right sidebar tab',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'New session',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'New worktree draft',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'New Mini Chat window',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Open keyboard shortcuts',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': 'Toggle plan context panel',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': 'Toggle services menu',
+21
View File
@@ -1651,6 +1651,7 @@ export const dict = {
'commandPalette.empty.noResults': 'No results found.',
'commandPalette.empty.searchingFiles': 'Searching files...',
'commandPalette.item.newSession': 'New Session',
'commandPalette.item.newMiniChat': 'New Mini Chat Window',
'commandPalette.item.newWorktreeDraft': 'New Worktree Draft',
'commandPalette.item.addProject': 'Add Project',
'commandPalette.item.showSessionSwitcher': 'Show Session Switcher',
@@ -1956,6 +1957,26 @@ export const dict = {
'desktopHostSwitcher.toast.sshConnected': 'SSH instance "{host}" connected',
'desktopHostSwitcher.toast.sshFailedToConnect': 'SSH instance "{host}" failed to connect',
'desktopHostSwitcher.toast.instanceUnreachable': 'Instance "{host}" is unreachable',
'miniChat.header.newSession': 'New session',
'miniChat.header.session': 'Session',
'miniChat.header.defaultAgent': 'Default agent',
'miniChat.header.noModel': 'No model',
'miniChat.status.busy': 'Running',
'miniChat.status.retry': 'Retrying',
'miniChat.status.idle': 'Idle',
'miniChat.actions.pin': 'Pin above other windows',
'miniChat.actions.unpin': 'Unpin window',
'miniChat.actions.pinAria': 'Pin Mini Chat window',
'miniChat.actions.unpinAria': 'Unpin Mini Chat window',
'miniChat.actions.openMain': 'Open in main window',
'miniChat.actions.openMainAria': 'Open session in main window',
'miniChat.unavailable.title': 'Session unavailable',
'miniChat.unavailable.description': 'This session could not be loaded. It may have been deleted, archived, or opened from a different project context.',
'sessions.sidebar.session.menu.openMiniChatWindow': 'Open in Mini Chat Window',
'header.actions.newMiniChat': 'New Mini Chat Window',
'header.actions.newMiniChatAria': 'Open a new Mini Chat window',
'header.actions.openSessionMiniChat': 'Open Session in Mini Chat',
'header.actions.openSessionMiniChatAria': 'Open current session in Mini Chat',
'errorBoundary.title': 'Something went wrong',
'errorBoundary.description': 'The application encountered an unexpected error. This has been logged for debugging.',
'errorBoundary.state.unknownError': 'Unknown error',
@@ -753,6 +753,7 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label": "Cambiar pestaña de la barra lateral derecha",
"settings.openchamber.keyboardShortcuts.action.new_chat.label": "Nueva sesión",
"settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label": "Nuevo borrador de worktree",
"settings.openchamber.keyboardShortcuts.action.new_mini_chat.label": "Nueva ventana Mini Chat",
"settings.openchamber.keyboardShortcuts.action.open_help.label": "Abrir atajos de teclado",
"settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label": "Alternar panel de plan de contexto",
"settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label": "Mostrar u ocultar menú de servicios",
+21
View File
@@ -1617,6 +1617,7 @@ export const dict: Record<I18nKey, string> = {
"commandPalette.empty.noResults": "No se encontraron resultados.",
"commandPalette.empty.searchingFiles": "Buscando archivos...",
"commandPalette.item.newSession": "Nueva sesión",
"commandPalette.item.newMiniChat": "Nueva ventana Mini Chat",
"commandPalette.item.newWorktreeDraft": "Nuevo borrador de worktree",
"commandPalette.item.addProject": "Añadir proyecto",
"commandPalette.item.showSessionSwitcher": "Mostrar cambiador de sesiones",
@@ -1922,6 +1923,26 @@ export const dict: Record<I18nKey, string> = {
"desktopHostSwitcher.toast.sshConnected": "Instancia SSH \"{host}\" conectada",
"desktopHostSwitcher.toast.sshFailedToConnect": "No se pudo conectar con la instancia SSH \"{host}\"",
"desktopHostSwitcher.toast.instanceUnreachable": "Instancia \"{host}\" no está disponible",
"miniChat.header.newSession": "Nueva sesión",
"miniChat.header.session": "Sesión",
"miniChat.header.defaultAgent": "Agente predeterminado",
"miniChat.header.noModel": "Sin modelo",
"miniChat.status.busy": "En ejecución",
"miniChat.status.retry": "Reintentando",
"miniChat.status.idle": "Inactivo",
"miniChat.actions.pin": "Fijar sobre otras ventanas",
"miniChat.actions.unpin": "Desfijar ventana",
"miniChat.actions.pinAria": "Fijar ventana Mini Chat",
"miniChat.actions.unpinAria": "Desfijar ventana Mini Chat",
"miniChat.actions.openMain": "Abrir en la ventana principal",
"miniChat.actions.openMainAria": "Abrir sesión en la ventana principal",
"miniChat.unavailable.title": "Sesión no disponible",
"miniChat.unavailable.description": "No se pudo cargar esta sesión. Puede haber sido eliminada, archivada o abierta desde otro contexto de proyecto.",
"sessions.sidebar.session.menu.openMiniChatWindow": "Abrir en ventana Mini Chat",
"header.actions.newMiniChat": "Nueva ventana Mini Chat",
"header.actions.newMiniChatAria": "Abrir una nueva ventana Mini Chat",
"header.actions.openSessionMiniChat": "Abrir sesión en Mini Chat",
"header.actions.openSessionMiniChatAria": "Abrir la sesión actual en Mini Chat",
"errorBoundary.title": "Algo salió mal",
"errorBoundary.description": "La aplicación encontró un error inesperado. Esto se ha registrado para depuración.",
"errorBoundary.state.unknownError": "Error desconocido",
@@ -753,6 +753,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': '오른쪽 사이드바 탭 순환',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': '새 세션',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '새 worktree 초안',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '새 Mini Chat 창',
'settings.openchamber.keyboardShortcuts.action.open_help.label': '키보드 단축키 열기',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '계획 컨텍스트 패널 토글',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': '서비스 메뉴 토글',
+21
View File
@@ -1651,6 +1651,7 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.empty.noResults': '결과 없음',
'commandPalette.empty.searchingFiles': '파일 검색 중…',
'commandPalette.item.newSession': '새 세션',
'commandPalette.item.newMiniChat': '새 Mini Chat 창',
'commandPalette.item.newWorktreeDraft': '새 워크트리 드래프트',
'commandPalette.item.addProject': '프로젝트 추가',
'commandPalette.item.showSessionSwitcher': '세션 전환기 표시',
@@ -1956,6 +1957,26 @@ export const dict: Record<I18nKey, string> = {
'desktopHostSwitcher.toast.sshConnected': 'SSH 인스턴스 "{host}"에 연결했습니다',
'desktopHostSwitcher.toast.sshFailedToConnect': 'SSH 인스턴스 "{host}" 연결에 실패했습니다',
'desktopHostSwitcher.toast.instanceUnreachable': '인스턴스 "{host}"에 연결할 수 없음',
'miniChat.header.newSession': '새 세션',
'miniChat.header.session': '세션',
'miniChat.header.defaultAgent': '기본 에이전트',
'miniChat.header.noModel': '모델 없음',
'miniChat.status.busy': '실행 중',
'miniChat.status.retry': '재시도 중',
'miniChat.status.idle': '유휴',
'miniChat.actions.pin': '다른 창 위에 고정',
'miniChat.actions.unpin': '창 고정 해제',
'miniChat.actions.pinAria': 'Mini Chat 창 고정',
'miniChat.actions.unpinAria': 'Mini Chat 창 고정 해제',
'miniChat.actions.openMain': '메인 창에서 열기',
'miniChat.actions.openMainAria': '메인 창에서 세션 열기',
'miniChat.unavailable.title': '세션을 사용할 수 없음',
'miniChat.unavailable.description': '이 세션을 불러올 수 없습니다. 삭제, 보관되었거나 다른 프로젝트 컨텍스트에서 열렸을 수 있습니다.',
'sessions.sidebar.session.menu.openMiniChatWindow': 'Mini Chat 창에서 열기',
'header.actions.newMiniChat': '새 Mini Chat 창',
'header.actions.newMiniChatAria': '새 Mini Chat 창 열기',
'header.actions.openSessionMiniChat': 'Mini Chat에서 세션 열기',
'header.actions.openSessionMiniChatAria': '현재 세션을 Mini Chat에서 열기',
'errorBoundary.title': '문제가 발생했습니다',
'errorBoundary.description': '애플리케이션에서 예상치 못한 오류가 발생했습니다. 디버깅을 위해 기록되었습니다.',
'errorBoundary.state.unknownError': '알 수 없음 오류',
@@ -602,6 +602,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.focus_input.label': 'Skup pole wprowadzania',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': 'Nowa sesja',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': 'Nowy szkic obszaru roboczego',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': 'Nowe okno Mini Chat',
'settings.openchamber.keyboardShortcuts.action.open_command_palette.label': 'Otwórz paletę poleceń',
'settings.openchamber.keyboardShortcuts.action.open_go_to_line.label': 'Przejdź do linii (edytor plików)',
'settings.openchamber.keyboardShortcuts.action.open_help.label': 'Otwórz skróty klawiszowe',
+21
View File
@@ -521,6 +521,26 @@ export const dict: Record<I18nKey, string> = {
'chat.messageBody.toast.planSaved': 'Plan zapisany',
'chat.messageBody.toast.imageSaved': 'Obraz zapisany',
'chat.messageBody.toast.generateImageFailed': 'Nie udało się wygenerować obrazu',
'miniChat.header.newSession': 'Nowa sesja',
'miniChat.header.session': 'Sesja',
'miniChat.header.defaultAgent': 'Domyślny agent',
'miniChat.header.noModel': 'Brak modelu',
'miniChat.status.busy': 'Działa',
'miniChat.status.retry': 'Ponawianie',
'miniChat.status.idle': 'Bezczynny',
'miniChat.actions.pin': 'Przypnij nad innymi oknami',
'miniChat.actions.unpin': 'Odepnij okno',
'miniChat.actions.pinAria': 'Przypnij okno Mini Chat',
'miniChat.actions.unpinAria': 'Odepnij okno Mini Chat',
'miniChat.actions.openMain': 'Otwórz w głównym oknie',
'miniChat.actions.openMainAria': 'Otwórz sesję w głównym oknie',
'miniChat.unavailable.title': 'Sesja niedostępna',
'miniChat.unavailable.description': 'Nie udało się załadować tej sesji. Mogła zostać usunięta, zarchiwizowana albo otwarta z innego kontekstu projektu.',
'sessions.sidebar.session.menu.openMiniChatWindow': 'Otwórz w oknie Mini Chat',
'header.actions.newMiniChat': 'Nowe okno Mini Chat',
'header.actions.newMiniChatAria': 'Otwórz nowe okno Mini Chat',
'header.actions.openSessionMiniChat': 'Otwórz sesję w Mini Chat',
'header.actions.openSessionMiniChatAria': 'Otwórz bieżącą sesję w Mini Chat',
'errorBoundary.title': 'Coś poszło nie tak',
'errorBoundary.description': 'Aplikacja napotkała nieoczekiwany błąd. Zostało to zalogowane do celów debugowania.',
'errorBoundary.state.unknownError': 'Nieznany błąd',
@@ -961,6 +981,7 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.empty.searchingFiles': 'Wyszukiwanie plików...',
'commandPalette.input.placeholder': 'Szukaj plików, sesji i poleceń...',
'commandPalette.item.newSession': 'Nowa sesja',
'commandPalette.item.newMiniChat': 'Nowe okno Mini Chat',
'commandPalette.item.newWorktreeDraft': 'Nowy szkic drzewa pracy',
'commandPalette.item.addProject': 'Dodaj projekt',
'commandPalette.item.openSettings': 'Otwórz ustawienia...',
@@ -753,6 +753,7 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label": "Alternar aba da barra lateral direita",
"settings.openchamber.keyboardShortcuts.action.new_chat.label": "Nova sessão",
"settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label": "Novo rascunho de worktree",
"settings.openchamber.keyboardShortcuts.action.new_mini_chat.label": "Nova janela Mini Chat",
"settings.openchamber.keyboardShortcuts.action.open_help.label": "Abrir atalhos de teclado",
"settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label": "Alternar painel de plano de contexto",
"settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label": "Mostrar ou ocultar menu de serviços",
@@ -1617,6 +1617,7 @@ export const dict: Record<I18nKey, string> = {
"commandPalette.empty.noResults": "Nenhum resultado encontrado.",
"commandPalette.empty.searchingFiles": "Buscando arquivos...",
"commandPalette.item.newSession": "Nova sessão",
"commandPalette.item.newMiniChat": "Nova janela Mini Chat",
"commandPalette.item.newWorktreeDraft": "Novo rascunho de worktree",
"commandPalette.item.addProject": "Adicionar projeto",
"commandPalette.item.showSessionSwitcher": "Mostrar seletor de sessões",
@@ -1922,6 +1923,26 @@ export const dict: Record<I18nKey, string> = {
"desktopHostSwitcher.toast.sshConnected": "Instância SSH \"{host}\" conectada",
"desktopHostSwitcher.toast.sshFailedToConnect": "Não foi possível conectar com a instância SSH \"{host}\"",
"desktopHostSwitcher.toast.instanceUnreachable": "Instância \"{host}\" não está disponível",
"miniChat.header.newSession": "Nova sessão",
"miniChat.header.session": "Sessão",
"miniChat.header.defaultAgent": "Agente padrão",
"miniChat.header.noModel": "Sem modelo",
"miniChat.status.busy": "Executando",
"miniChat.status.retry": "Tentando novamente",
"miniChat.status.idle": "Ocioso",
"miniChat.actions.pin": "Fixar acima de outras janelas",
"miniChat.actions.unpin": "Desafixar janela",
"miniChat.actions.pinAria": "Fixar janela Mini Chat",
"miniChat.actions.unpinAria": "Desafixar janela Mini Chat",
"miniChat.actions.openMain": "Abrir na janela principal",
"miniChat.actions.openMainAria": "Abrir sessão na janela principal",
"miniChat.unavailable.title": "Sessão indisponível",
"miniChat.unavailable.description": "Não foi possível carregar esta sessão. Ela pode ter sido excluída, arquivada ou aberta a partir de outro contexto de projeto.",
"sessions.sidebar.session.menu.openMiniChatWindow": "Abrir na janela Mini Chat",
"header.actions.newMiniChat": "Nova janela Mini Chat",
"header.actions.newMiniChatAria": "Abrir uma nova janela Mini Chat",
"header.actions.openSessionMiniChat": "Abrir sessão no Mini Chat",
"header.actions.openSessionMiniChatAria": "Abrir a sessão atual no Mini Chat",
"errorBoundary.title": "Algo deu errado",
"errorBoundary.description": "O aplicativo encontrou um erro inesperado. Isso foi registrado para depuração.",
"errorBoundary.state.unknownError": "Erro desconhecido",
@@ -753,6 +753,7 @@ export const settingsDict = {
"settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label": "Перемкнути вкладку правої бічної панелі",
"settings.openchamber.keyboardShortcuts.action.new_chat.label": "Нова сесія",
"settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label": "Нова чернетка worktree",
"settings.openchamber.keyboardShortcuts.action.new_mini_chat.label": "Нове вікно Mini Chat",
"settings.openchamber.keyboardShortcuts.action.open_help.label": "Відкрити комбінації клавіш",
"settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label": "Перемкнути контекстну панель плану",
"settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label": "Перемкнути меню сервісів",
+21
View File
@@ -1617,6 +1617,7 @@ export const dict: Record<I18nKey, string> = {
"commandPalette.empty.noResults": "Результатів не знайдено.",
"commandPalette.empty.searchingFiles": "Пошук файлів...",
"commandPalette.item.newSession": "Нова сесія",
"commandPalette.item.newMiniChat": "Нове вікно Mini Chat",
"commandPalette.item.newWorktreeDraft": "Чернетка нового worktree",
"commandPalette.item.addProject": "Додати проєкт",
"commandPalette.item.showSessionSwitcher": "Показати перемикач сесій",
@@ -1922,6 +1923,26 @@ export const dict: Record<I18nKey, string> = {
"desktopHostSwitcher.toast.sshConnected": "Інстанс SSH \"{host}\" підключено",
"desktopHostSwitcher.toast.sshFailedToConnect": "Не вдалося підключитися до інстанса SSH \"{host}\".",
"desktopHostSwitcher.toast.instanceUnreachable": "Інстанс \"{host}\" недоступний",
"miniChat.header.newSession": "Нова сесія",
"miniChat.header.session": "Сесія",
"miniChat.header.defaultAgent": "Агент за замовчуванням",
"miniChat.header.noModel": "Модель не вибрано",
"miniChat.status.busy": "Виконується",
"miniChat.status.retry": "Повторна спроба",
"miniChat.status.idle": "Очікує",
"miniChat.actions.pin": "Закріпити над іншими вікнами",
"miniChat.actions.unpin": "Відкріпити вікно",
"miniChat.actions.pinAria": "Закріпити вікно Mini Chat",
"miniChat.actions.unpinAria": "Відкріпити вікно Mini Chat",
"miniChat.actions.openMain": "Відкрити в головному вікні",
"miniChat.actions.openMainAria": "Відкрити сесію в головному вікні",
"miniChat.unavailable.title": "Сесія недоступна",
"miniChat.unavailable.description": "Не вдалося завантажити цю сесію. Її могли видалити, заархівувати або відкрити з іншого контексту проєкту.",
"sessions.sidebar.session.menu.openMiniChatWindow": "Відкрити у вікні Mini Chat",
"header.actions.newMiniChat": "Нове вікно Mini Chat",
"header.actions.newMiniChatAria": "Відкрити нове вікно Mini Chat",
"header.actions.openSessionMiniChat": "Відкрити сесію в Mini Chat",
"header.actions.openSessionMiniChatAria": "Відкрити поточну сесію в Mini Chat",
"errorBoundary.title": "Щось пішло не так",
"errorBoundary.description": "У програмі сталася неочікувана помилка. Це було зареєстровано для налагодження.",
"errorBoundary.state.unknownError": "Невідома помилка",
@@ -753,6 +753,7 @@ export const settingsDict = {
'settings.openchamber.keyboardShortcuts.action.cycle_right_sidebar_tab.label': '轮换右侧边栏标签',
'settings.openchamber.keyboardShortcuts.action.new_chat.label': '新建会话',
'settings.openchamber.keyboardShortcuts.action.new_chat_worktree.label': '新建工作树草稿',
'settings.openchamber.keyboardShortcuts.action.new_mini_chat.label': '新建 Mini Chat 窗口',
'settings.openchamber.keyboardShortcuts.action.open_help.label': '打开键盘快捷键',
'settings.openchamber.keyboardShortcuts.action.toggle_context_plan.label': '切换上下文面板中的计划',
'settings.openchamber.keyboardShortcuts.action.toggle_services_menu.label': '切换服务菜单',
@@ -1617,6 +1617,7 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.empty.noResults': '未找到结果。',
'commandPalette.empty.searchingFiles': '正在搜索文件...',
'commandPalette.item.newSession': '新建会话',
'commandPalette.item.newMiniChat': '新建 Mini Chat 窗口',
'commandPalette.item.newWorktreeDraft': '新建工作树草稿',
'commandPalette.item.addProject': '添加项目',
'commandPalette.item.showSessionSwitcher': '显示会话切换器',
@@ -1922,6 +1923,26 @@ export const dict: Record<I18nKey, string> = {
'desktopHostSwitcher.toast.sshConnected': 'SSH 实例“{host}”已连接',
'desktopHostSwitcher.toast.sshFailedToConnect': 'SSH 实例“{host}”连接失败',
'desktopHostSwitcher.toast.instanceUnreachable': '实例“{host}”不可达',
'miniChat.header.newSession': '新会话',
'miniChat.header.session': '会话',
'miniChat.header.defaultAgent': '默认智能体',
'miniChat.header.noModel': '未选择模型',
'miniChat.status.busy': '运行中',
'miniChat.status.retry': '重试中',
'miniChat.status.idle': '空闲',
'miniChat.actions.pin': '固定在其他窗口上方',
'miniChat.actions.unpin': '取消固定窗口',
'miniChat.actions.pinAria': '固定 Mini Chat 窗口',
'miniChat.actions.unpinAria': '取消固定 Mini Chat 窗口',
'miniChat.actions.openMain': '在主窗口中打开',
'miniChat.actions.openMainAria': '在主窗口中打开会话',
'miniChat.unavailable.title': '会话不可用',
'miniChat.unavailable.description': '无法加载此会话。它可能已被删除、归档,或从其他项目上下文打开。',
'sessions.sidebar.session.menu.openMiniChatWindow': '在 Mini Chat 窗口中打开',
'header.actions.newMiniChat': '新建 Mini Chat 窗口',
'header.actions.newMiniChatAria': '打开新的 Mini Chat 窗口',
'header.actions.openSessionMiniChat': '在 Mini Chat 中打开会话',
'header.actions.openSessionMiniChatAria': '在 Mini Chat 中打开当前会话',
'errorBoundary.title': '发生错误',
'errorBoundary.description': '应用遇到意外错误,已记录用于调试。',
'errorBoundary.state.unknownError': '未知错误',
+6
View File
@@ -214,6 +214,12 @@ const SHORTCUT_ACTIONS: ReadonlyArray<ShortcutAction> = [
description: 'Create a new worktree and open a draft in it',
customizable: true,
},
{
id: 'new_mini_chat',
defaultCombo: 'mod+alt+n',
label: 'New Mini Chat window',
description: 'Open a new Mini Chat draft window',
},
{
id: 'submit_message',
defaultCombo: 'mod+enter',