@huanlin/dsh-plugin-ya-workspace-sidebar 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -2259,8 +2259,21 @@ button.ya-crumb:hover { background:var(--dsw-alias-interactive-bg-hover); color:
2259
2259
  zh,
2260
2260
  en
2261
2261
  }), "ya-workspace-sidebar: dictionaries");
2262
- const betterLocale = ctx.get("betterLocale");
2263
- if (betterLocale) ctx.effect(() => betterLocale.register(NS, dicts), "ya-workspace-sidebar: better-locale override dicts");
2262
+ ctx.effect(() => {
2263
+ let dispose;
2264
+ const sync = () => {
2265
+ dispose?.();
2266
+ dispose = void 0;
2267
+ const store = ctx.get("betterLocale");
2268
+ if (store !== void 0) dispose = store.register(NS, dicts);
2269
+ };
2270
+ sync();
2271
+ const unsubscribe = ctx.locale.subscribe(sync);
2272
+ return () => {
2273
+ unsubscribe();
2274
+ dispose?.();
2275
+ };
2276
+ }, "ya-workspace-sidebar: better-locale override dicts");
2264
2277
  ctx.effect(installStyles, "ya-workspace-sidebar: styles");
2265
2278
  const flowSource = (name) => ({
2266
2279
  getSnapshot: () => ctx.slots.entries(name).length > 0,
package/lib/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["useState","useCallback","IconPlusOutline16","IconFolderClose16","Menu","Modal","Button","StateDot","useState","IconTrashOutline16","IconArchiveOutline20","Menu","IconEditOutline16","IconBranchOutline16","IconEllipsisOutline16","IconFolderClose16","IconPlusOutline16","IconChevronRightOutline14","useMemo","useRef","IconProjectAddOutline16","IconSearchOutline16","IconCloseFill14","Modal","Button"],"sources":["../src/client/dictionaries.ts","../src/client/locales.ts","../src/client/styles.ts","../src/client/WorkspacePicker.tsx","../src/client/model.ts","../src/client/settings.ts","../src/client/WorkspaceSidebar.tsx","../src/client/index.ts"],"sourcesContent":["/** 19-language override dictionaries for the better-locale store. */\nimport type { YaWorkspaceKey } from './locales.ts'\n\nexport const dicts: Record<string, Record<YaWorkspaceKey, string>> = {\n ja: {\n workspaces: 'ワークスペース',\n sessions: 'セッション',\n recent: '最近のセッション',\n ungrouped: '未分類',\n newSession: '新しいセッション',\n addWorkspace: 'ワークスペースを追加',\n addWorkspaceMenu: 'ワークスペースを追加…',\n search: 'セッションを検索',\n searchPlaceholder: '名前、キーワードで検索…',\n clearSearch: '検索をクリア',\n searching: 'セッション履歴を検索中…',\n searchUnavailable: '内容検索は利用できません。名前の一致のみ表示します。',\n noMatches: '一致するセッションなし',\n noSessions: 'セッションはまだありません',\n noWorkspaces: 'ワークスペースはまだありません',\n loading: 'ワークスペースを読み込み中…',\n rename: '名前を変更',\n renameWorkspace: 'ワークスペースの名前を変更',\n renameSession: 'セッションの名前を変更',\n deleteWorkspace: 'ワークスペースを削除',\n deleteDescription: '「{name}」をワークスペース一覧から削除します。フォルダとセッション履歴は残ります。',\n fork: 'セッションをフォーク',\n archive: 'セッションをアーカイブ',\n archiveMode: 'アーカイブモード',\n deleteMode: '削除モード',\n deleteSession: 'セッションを削除',\n deleteSessionTitle: 'セッションを削除',\n deleteSessionConfirm: 'このセッションを削除しますか?一覧から削除され、元に戻せません。',\n toggleActionMode: 'アーカイブ/削除モードを切り替え',\n actionModeLabel: 'セッション操作',\n cancel: 'キャンセル',\n confirm: '確認',\n retry: '選び直す',\n folderError: 'フォルダを開けませんでした',\n workspaceName: 'ワークスペース名',\n sessionName: 'セッション名',\n count: '{n} 件のセッション',\n now: 'たった今',\n minutes: '{n}分',\n hours: '{n}時間',\n days: '{n}日',\n months: '{n}か月',\n years: '{n}年',\n running: '実行中',\n waiting: '操作待ち',\n completed: '完了',\n collapse: '折りたたむ',\n expand: '展開',\n today: '今日',\n yesterday: '昨日',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n de: {\n workspaces: 'Arbeitsbereiche',\n sessions: 'Sitzungen',\n recent: 'Letzte Sitzungen',\n ungrouped: 'Nicht gruppiert',\n newSession: 'Neue Sitzung',\n addWorkspace: 'Arbeitsbereich hinzufügen',\n addWorkspaceMenu: 'Arbeitsbereich hinzufügen…',\n search: 'Sitzungen durchsuchen',\n searchPlaceholder: 'Name, Stichwörter suchen…',\n clearSearch: 'Suche löschen',\n searching: 'Sitzungsverlauf wird durchsucht…',\n searchUnavailable: 'Inhaltssuche nicht verfügbar. Zeigt Namensübereinstimmungen.',\n noMatches: 'Keine passenden Sitzungen',\n noSessions: 'Noch keine Sitzungen',\n noWorkspaces: 'Noch keine Arbeitsbereiche',\n loading: 'Arbeitsbereiche werden geladen…',\n rename: 'Umbenennen',\n renameWorkspace: 'Arbeitsbereich umbenennen',\n renameSession: 'Sitzung umbenennen',\n deleteWorkspace: 'Arbeitsbereich löschen',\n deleteDescription: '„{name}\" wird aus der Arbeitsbereichsliste entfernt. Ordner und Sitzungsverläufe bleiben erhalten.',\n fork: 'Sitzung forken',\n archive: 'Sitzung archivieren',\n archiveMode: 'Archivmodus',\n deleteMode: 'Löschmodus',\n deleteSession: 'Sitzung löschen',\n deleteSessionTitle: 'Sitzung löschen',\n deleteSessionConfirm: 'Diese Sitzung wirklich löschen? Sie wird aus der Liste entfernt. Dies kann nicht rückgängig gemacht werden.',\n toggleActionMode: 'Archiv-/Löschmodus umschalten',\n actionModeLabel: 'Sitzungsaktion',\n cancel: 'Abbrechen',\n confirm: 'Bestätigen',\n retry: 'Neu wählen',\n folderError: 'Ordner konnte nicht geöffnet werden',\n workspaceName: 'Arbeitsbereichsname',\n sessionName: 'Sitzungsname',\n count: '{n} Sitzungen',\n now: 'gerade eben',\n minutes: '{n} Min',\n hours: '{n} h',\n days: '{n} Tage',\n months: '{n} Mon',\n years: '{n} J',\n running: 'Läuft',\n waiting: 'Wartet auf Eingabe',\n completed: 'Abgeschlossen',\n collapse: 'Einklappen',\n expand: 'Ausklappen',\n today: 'Heute',\n yesterday: 'Gestern',\n date: '{d}.{m}.',\n dateYear: '{d}.{m}.{y}',\n },\n fr: {\n workspaces: 'Espaces de travail',\n sessions: 'Sessions',\n recent: 'Sessions récentes',\n ungrouped: 'Non groupé',\n newSession: 'Nouvelle session',\n addWorkspace: 'Ajouter un espace de travail',\n addWorkspaceMenu: 'Ajouter un espace de travail…',\n search: 'Rechercher des sessions',\n searchPlaceholder: 'Rechercher un nom, des mots-clés…',\n clearSearch: 'Effacer la recherche',\n searching: 'Recherche dans l’historique des sessions…',\n searchUnavailable: 'La recherche de contenu est indisponible. Affichage des correspondances de nom.',\n noMatches: 'Aucune session correspondante',\n noSessions: 'Aucune session pour l’instant',\n noWorkspaces: 'Aucun espace de travail pour l’instant',\n loading: 'Chargement des espaces de travail…',\n rename: 'Renommer',\n renameWorkspace: 'Renommer l’espace de travail',\n renameSession: 'Renommer la session',\n deleteWorkspace: 'Supprimer l’espace de travail',\n deleteDescription: '« {name} » sera retiré de la liste des espaces de travail. Le dossier et l’historique des sessions sont conservés.',\n fork: 'Dupliquer la session',\n archive: 'Archiver la session',\n archiveMode: 'Mode archivage',\n deleteMode: 'Mode suppression',\n deleteSession: 'Supprimer la session',\n deleteSessionTitle: 'Supprimer la session',\n deleteSessionConfirm: 'Voulez-vous vraiment supprimer cette session ? Elle sera retirée de la liste. Cette action est irréversible.',\n toggleActionMode: 'Basculer entre archivage/suppression',\n actionModeLabel: 'Action de session',\n cancel: 'Annuler',\n confirm: 'Confirmer',\n retry: 'Resélectionner',\n folderError: 'Impossible d’ouvrir le dossier',\n workspaceName: 'Nom de l’espace de travail',\n sessionName: 'Nom de la session',\n count: '{n} sessions',\n now: 'à l’instant',\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} j',\n months: '{n} mois',\n years: '{n} ans',\n running: 'En cours',\n waiting: 'En attente d’une action',\n completed: 'Terminé',\n collapse: 'Réduire',\n expand: 'Développer',\n today: 'Aujourd’hui',\n yesterday: 'Hier',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n pt: {\n workspaces: 'Espaços de trabalho',\n sessions: 'Sessões',\n recent: 'Sessões recentes',\n ungrouped: 'Não agrupado',\n newSession: 'Nova sessão',\n addWorkspace: 'Adicionar espaço de trabalho',\n addWorkspaceMenu: 'Adicionar espaço de trabalho…',\n search: 'Pesquisar sessões',\n searchPlaceholder: 'Pesquisar nome, palavras-chave…',\n clearSearch: 'Limpar pesquisa',\n searching: 'Pesquisando histórico de sessões…',\n searchUnavailable: 'A pesquisa de conteúdo está indisponível. Exibindo correspondências de nome.',\n noMatches: 'Nenhuma sessão correspondente',\n noSessions: 'Nenhuma sessão ainda',\n noWorkspaces: 'Nenhum espaço de trabalho ainda',\n loading: 'Carregando espaços de trabalho…',\n rename: 'Renomear',\n renameWorkspace: 'Renomear espaço de trabalho',\n renameSession: 'Renomear sessão',\n deleteWorkspace: 'Excluir espaço de trabalho',\n deleteDescription: 'Isto remove “{name}” da lista de espaços de trabalho. A pasta e os registros de sessão são mantidos.',\n fork: 'Bifurcar sessão',\n archive: 'Arquivar sessão',\n archiveMode: 'Modo de arquivamento',\n deleteMode: 'Modo de exclusão',\n deleteSession: 'Excluir sessão',\n deleteSessionTitle: 'Excluir sessão',\n deleteSessionConfirm: 'Tem certeza de que deseja excluir esta sessão? Ela será removida da lista. Esta ação não pode ser desfeita.',\n toggleActionMode: 'Alternar modo arquivar/excluir',\n actionModeLabel: 'Ação de sessão',\n cancel: 'Cancelar',\n confirm: 'Confirmar',\n retry: 'Escolher novamente',\n folderError: 'Não foi possível abrir a pasta',\n workspaceName: 'Nome do espaço de trabalho',\n sessionName: 'Nome da sessão',\n count: '{n} sessões',\n now: 'agora',\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} d',\n months: '{n} meses',\n years: '{n} anos',\n running: 'Em andamento',\n waiting: 'Aguardando interação',\n completed: 'Concluído',\n collapse: 'Recolher',\n expand: 'Expandir',\n today: 'Hoje',\n yesterday: 'Ontem',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n ko: {\n workspaces: '작업 공간',\n sessions: '세션',\n recent: '최근 세션',\n ungrouped: '그룹 없음',\n newSession: '새 세션',\n addWorkspace: '작업 공간 추가',\n addWorkspaceMenu: '작업 공간 추가…',\n search: '세션 검색',\n searchPlaceholder: '이름, 키워드 검색…',\n clearSearch: '검색 지우기',\n searching: '세션 기록 검색 중…',\n searchUnavailable: '내용 검색을 사용할 수 없습니다. 이름 일치만 표시합니다.',\n noMatches: '일치하는 세션 없음',\n noSessions: '아직 세션이 없습니다',\n noWorkspaces: '아직 작업 공간이 없습니다',\n loading: '작업 공간 불러오는 중…',\n rename: '이름 바꾸기',\n renameWorkspace: '작업 공간 이름 바꾸기',\n renameSession: '세션 이름 바꾸기',\n deleteWorkspace: '작업 공간 삭제',\n deleteDescription: '“{name}”을(를) 작업 공간 목록에서 제거합니다. 폴더와 세션 기록은 유지됩니다.',\n fork: '세션 포크',\n archive: '세션 보관',\n archiveMode: '보관 모드',\n deleteMode: '삭제 모드',\n deleteSession: '세션 삭제',\n deleteSessionTitle: '세션 삭제',\n deleteSessionConfirm: '이 세션을 삭제하시겠습니까? 목록에서 제거되며 되돌릴 수 없습니다.',\n toggleActionMode: '보관/삭제 모드 전환',\n actionModeLabel: '세션 작업',\n cancel: '취소',\n confirm: '확인',\n retry: '다시 선택',\n folderError: '폴더를 열 수 없음',\n workspaceName: '작업 공간 이름',\n sessionName: '세션 이름',\n count: '세션 {n}개',\n now: '방금',\n minutes: '{n}분',\n hours: '{n}시간',\n days: '{n}일',\n months: '{n}개월',\n years: '{n}년',\n running: '진행 중',\n waiting: '상호작용 대기 중',\n completed: '완료됨',\n collapse: '접기',\n expand: '펼치기',\n today: '오늘',\n yesterday: '어제',\n date: '{m}월 {d}일',\n dateYear: '{y}년 {m}월 {d}일',\n },\n ar: {\n workspaces: 'مساحات العمل',\n sessions: 'الجلسات',\n recent: 'الجلسات الأخيرة',\n ungrouped: 'غير مجمّع',\n newSession: 'جلسة جديدة',\n addWorkspace: 'إضافة مساحة عمل',\n addWorkspaceMenu: 'إضافة مساحة عمل…',\n search: 'البحث في الجلسات',\n searchPlaceholder: 'ابحث بالاسم أو الكلمات المفتاحية…',\n clearSearch: 'مسح البحث',\n searching: 'جارٍ البحث في سجل الجلسات…',\n searchUnavailable: 'البحث في المحتوى غير متاح. عرض تطابقات الأسماء فقط.',\n noMatches: 'لا توجد جلسات مطابقة',\n noSessions: 'لا توجد جلسات بعد',\n noWorkspaces: 'لا توجد مساحات عمل بعد',\n loading: 'جارٍ تحميل مساحات العمل…',\n rename: 'إعادة تسمية',\n renameWorkspace: 'إعادة تسمية مساحة العمل',\n renameSession: 'إعادة تسمية الجلسة',\n deleteWorkspace: 'حذف مساحة العمل',\n deleteDescription: 'سيؤدي هذا إلى إزالة \"{name}\" من قائمة مساحات العمل. سيبقى المجلد وسجلات الجلسة محفوظين.',\n fork: 'إنشاء نسخة من الجلسة',\n archive: 'أرشفة الجلسة',\n archiveMode: 'وضع الأرشفة',\n deleteMode: 'وضع الحذف',\n deleteSession: 'حذف الجلسة',\n deleteSessionTitle: 'حذف الجلسة',\n deleteSessionConfirm: 'هل أنت متأكد من حذف هذه الجلسة؟ ستُزال من القائمة ولا يمكن التراجع عن هذا الإجراء.',\n toggleActionMode: 'تبديل وضع الأرشفة/الحذف',\n actionModeLabel: 'إجراء الجلسة',\n cancel: 'إلغاء',\n confirm: 'تأكيد',\n retry: 'إعادة الاختيار',\n folderError: 'تعذّر فتح المجلد',\n workspaceName: 'اسم مساحة العمل',\n sessionName: 'اسم الجلسة',\n count: '{n} جلسات',\n now: 'الآن',\n minutes: '{n} دقيقة',\n hours: '{n} ساعة',\n days: '{n} يوم',\n months: '{n} شهر',\n years: '{n} سنة',\n running: 'قيد التنفيذ',\n waiting: 'بانتظار التفاعل',\n completed: 'مكتمل',\n collapse: 'طي',\n expand: 'توسيع',\n today: 'اليوم',\n yesterday: 'أمس',\n date: '{m}/{d}',\n dateYear: '{m}/{d}/{y}',\n },\n hi: {\n workspaces: 'कार्यक्षेत्र',\n sessions: 'सत्र',\n recent: 'हाल के सत्र',\n ungrouped: 'असमूहीकृत',\n newSession: 'नया सत्र',\n addWorkspace: 'कार्यक्षेत्र जोड़ें',\n addWorkspaceMenu: 'कार्यक्षेत्र जोड़ें…',\n search: 'सत्र खोजें',\n searchPlaceholder: 'नाम, कीवर्ड खोजें…',\n clearSearch: 'खोज साफ़ करें',\n searching: 'सत्र इतिहास खोजा जा रहा है…',\n searchUnavailable: 'सामग्री खोज उपलब्ध नहीं है। केवल नाम मिलान दिखाए जा रहे हैं।',\n noMatches: 'कोई मिलान सत्र नहीं',\n noSessions: 'अभी कोई सत्र नहीं',\n noWorkspaces: 'अभी कोई कार्यक्षेत्र नहीं',\n loading: 'कार्यक्षेत्र लोड हो रहे हैं…',\n rename: 'नाम बदलें',\n renameWorkspace: 'कार्यक्षेत्र का नाम बदलें',\n renameSession: 'सत्र का नाम बदलें',\n deleteWorkspace: 'कार्यक्षेत्र हटाएँ',\n deleteDescription: 'यह \"{name}\" को कार्यक्षेत्र सूची से हटा देगा। फ़ोल्डर और सत्र रिकॉर्ड रहेंगे।',\n fork: 'सत्र फ़ोर्क करें',\n archive: 'सत्र संग्रह करें',\n archiveMode: 'संग्रह मोड',\n deleteMode: 'हटाने का मोड',\n deleteSession: 'सत्र हटाएँ',\n deleteSessionTitle: 'सत्र हटाएँ',\n deleteSessionConfirm: 'क्या आप वाकई इस सत्र को हटाना चाहते हैं? यह सूची से हट जाएगा। इसे पूर्ववत नहीं किया जा सकता।',\n toggleActionMode: 'संग्रह/हटाएँ मोड टॉगल करें',\n actionModeLabel: 'सत्र क्रिया',\n cancel: 'रद्द करें',\n confirm: 'पुष्टि करें',\n retry: 'फिर से चुनें',\n folderError: 'फ़ोल्डर नहीं खोला जा सका',\n workspaceName: 'कार्यक्षेत्र का नाम',\n sessionName: 'सत्र का नाम',\n count: '{n} सत्र',\n now: 'अभी',\n minutes: '{n} मिनट',\n hours: '{n} घंटे',\n days: '{n} दिन',\n months: '{n} महीने',\n years: '{n} वर्ष',\n running: 'चल रहा है',\n waiting: 'इंटरैक्शन की प्रतीक्षा में',\n completed: 'पूर्ण',\n collapse: 'संक्षिप्त करें',\n expand: 'विस्तार करें',\n today: 'आज',\n yesterday: 'कल',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n id: {\n workspaces: 'Ruang kerja',\n sessions: 'Sesi',\n recent: 'Sesi terbaru',\n ungrouped: 'Tidak dikelompokkan',\n newSession: 'Sesi baru',\n addWorkspace: 'Tambah ruang kerja',\n addWorkspaceMenu: 'Tambah ruang kerja…',\n search: 'Cari sesi',\n searchPlaceholder: 'Cari nama, kata kunci…',\n clearSearch: 'Bersihkan pencarian',\n searching: 'Mencari riwayat sesi…',\n searchUnavailable: 'Pencarian konten tidak tersedia. Hanya mencocokkan nama.',\n noMatches: 'Tidak ada sesi yang cocok',\n noSessions: 'Belum ada sesi',\n noWorkspaces: 'Belum ada ruang kerja',\n loading: 'Memuat ruang kerja…',\n rename: 'Ganti nama',\n renameWorkspace: 'Ganti nama ruang kerja',\n renameSession: 'Ganti nama sesi',\n deleteWorkspace: 'Hapus ruang kerja',\n deleteDescription: 'Ini menghapus “{name}” dari daftar ruang kerja. Folder dan riwayat sesi tetap tersimpan.',\n fork: 'Fork sesi',\n archive: 'Arsipkan sesi',\n archiveMode: 'Mode arsip',\n deleteMode: 'Mode hapus',\n deleteSession: 'Hapus sesi',\n deleteSessionTitle: 'Hapus sesi',\n deleteSessionConfirm: 'Yakin ingin menghapus sesi ini? Sesi akan dihapus dari daftar. Tindakan ini tidak dapat dibatalkan.',\n toggleActionMode: 'Ganti mode arsip/hapus',\n actionModeLabel: 'Tindakan sesi',\n cancel: 'Batal',\n confirm: 'Konfirmasi',\n retry: 'Pilih lagi',\n folderError: 'Gagal membuka folder',\n workspaceName: 'Nama ruang kerja',\n sessionName: 'Nama sesi',\n count: '{n} sesi',\n now: 'baru saja',\n minutes: '{n} mnt',\n hours: '{n} jam',\n days: '{n} hari',\n months: '{n} bln',\n years: '{n} thn',\n running: 'Berjalan',\n waiting: 'Menunggu interaksi',\n completed: 'Selesai',\n collapse: 'Ciutkan',\n expand: 'Bentangkan',\n today: 'Hari ini',\n yesterday: 'Kemarin',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n tr: {\n workspaces: 'Çalışma alanları',\n sessions: 'Oturumlar',\n recent: 'Son oturumlar',\n ungrouped: 'Gruplanmamış',\n newSession: 'Yeni oturum',\n addWorkspace: 'Çalışma alanı ekle',\n addWorkspaceMenu: 'Çalışma alanı ekle…',\n search: 'Oturumları ara',\n searchPlaceholder: 'İsim, anahtar kelime ara…',\n clearSearch: 'Aramayı temizle',\n searching: 'Oturum geçmişi aranıyor…',\n searchUnavailable: 'İçerik araması kullanılamıyor. Yalnızca isim eşleşmeleri gösteriliyor.',\n noMatches: 'Eşleşen oturum yok',\n noSessions: 'Henüz oturum yok',\n noWorkspaces: 'Henüz çalışma alanı yok',\n loading: 'Çalışma alanları yükleniyor…',\n rename: 'Yeniden adlandır',\n renameWorkspace: 'Çalışma alanını yeniden adlandır',\n renameSession: 'Oturumu yeniden adlandır',\n deleteWorkspace: 'Çalışma alanını sil',\n deleteDescription: 'Bu, “{name}” öğesini çalışma alanı listesinden kaldırır. Klasör ve oturum kayıtları kalır.',\n fork: 'Oturumu çatalla',\n archive: 'Oturumu arşivle',\n archiveMode: 'Arşiv modu',\n deleteMode: 'Silme modu',\n deleteSession: 'Oturumu sil',\n deleteSessionTitle: 'Oturumu sil',\n deleteSessionConfirm: 'Bu oturumu silmek istediğinize emin misiniz? Listeden kaldırılacaktır. Bu işlem geri alınamaz.',\n toggleActionMode: 'Arşiv/silme modunu değiştir',\n actionModeLabel: 'Oturum işlemi',\n cancel: 'İptal',\n confirm: 'Onayla',\n retry: 'Yeniden seç',\n folderError: 'Klasör açılamadı',\n workspaceName: 'Çalışma alanı adı',\n sessionName: 'Oturum adı',\n count: '{n} oturum',\n now: 'az önce',\n minutes: '{n} dk',\n hours: '{n} sa',\n days: '{n} gün',\n months: '{n} ay',\n years: '{n} yıl',\n running: 'Devam ediyor',\n waiting: 'Etkileşim bekleniyor',\n completed: 'Tamamlandı',\n collapse: 'Daralt',\n expand: 'Genişlet',\n today: 'Bugün',\n yesterday: 'Dün',\n date: '{d}.{m}',\n dateYear: '{d}.{m}.{y}',\n },\n vi: {\n workspaces: 'Không gian làm việc',\n sessions: 'Phiên',\n recent: 'Phiên gần đây',\n ungrouped: 'Chưa nhóm',\n newSession: 'Phiên mới',\n addWorkspace: 'Thêm không gian làm việc',\n addWorkspaceMenu: 'Thêm không gian làm việc…',\n search: 'Tìm kiếm phiên',\n searchPlaceholder: 'Tìm tên, từ khóa…',\n clearSearch: 'Xóa tìm kiếm',\n searching: 'Đang tìm kiếm lịch sử phiên…',\n searchUnavailable: 'Tìm kiếm nội dung không khả dụng. Chỉ hiển thị kết quả khớp tên.',\n noMatches: 'Không có phiên phù hợp',\n noSessions: 'Chưa có phiên nào',\n noWorkspaces: 'Chưa có không gian làm việc nào',\n loading: 'Đang tải không gian làm việc…',\n rename: 'Đổi tên',\n renameWorkspace: 'Đổi tên không gian làm việc',\n renameSession: 'Đổi tên phiên',\n deleteWorkspace: 'Xóa không gian làm việc',\n deleteDescription: 'Thao tác này sẽ xóa “{name}” khỏi danh sách không gian làm việc. Thư mục và nhật ký phiên vẫn được giữ.',\n fork: 'Nhân bản phiên',\n archive: 'Lưu trữ phiên',\n archiveMode: 'Chế độ lưu trữ',\n deleteMode: 'Chế độ xóa',\n deleteSession: 'Xóa phiên',\n deleteSessionTitle: 'Xóa phiên',\n deleteSessionConfirm: 'Bạn có chắc muốn xóa phiên này? Phiên sẽ bị xóa khỏi danh sách. Hành động này không thể hoàn tác.',\n toggleActionMode: 'Chuyển chế độ lưu trữ/xóa',\n actionModeLabel: 'Thao tác phiên',\n cancel: 'Hủy',\n confirm: 'Xác nhận',\n retry: 'Chọn lại',\n folderError: 'Không thể mở thư mục',\n workspaceName: 'Tên không gian làm việc',\n sessionName: 'Tên phiên',\n count: '{n} phiên',\n now: 'vừa xong',\n minutes: '{n} phút',\n hours: '{n} giờ',\n days: '{n} ngày',\n months: '{n} tháng',\n years: '{n} năm',\n running: 'Đang chạy',\n waiting: 'Đang chờ tương tác',\n completed: 'Hoàn tất',\n collapse: 'Thu gọn',\n expand: 'Mở rộng',\n today: 'Hôm nay',\n yesterday: 'Hôm qua',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n th: {\n workspaces: 'พื้นที่ทำงาน',\n sessions: 'เซสชัน',\n recent: 'เซสชันล่าสุด',\n ungrouped: 'ไม่จัดกลุ่ม',\n newSession: 'เซสชันใหม่',\n addWorkspace: 'เพิ่มพื้นที่ทำงาน',\n addWorkspaceMenu: 'เพิ่มพื้นที่ทำงาน…',\n search: 'ค้นหาเซสชัน',\n searchPlaceholder: 'ค้นหาชื่อ คำสำคัญ…',\n clearSearch: 'ล้างการค้นหา',\n searching: 'กำลังค้นหาประวัติเซสชัน…',\n searchUnavailable: 'การค้นหาเนื้อหาไม่พร้อมใช้งาน แสดงเฉพาะชื่อที่ตรงกัน',\n noMatches: 'ไม่พบเซสชันที่ตรงกัน',\n noSessions: 'ยังไม่มีเซสชัน',\n noWorkspaces: 'ยังไม่มีพื้นที่ทำงาน',\n loading: 'กำลังโหลดพื้นที่ทำงาน…',\n rename: 'เปลี่ยนชื่อ',\n renameWorkspace: 'เปลี่ยนชื่อพื้นที่ทำงาน',\n renameSession: 'เปลี่ยนชื่อเซสชัน',\n deleteWorkspace: 'ลบพื้นที่ทำงาน',\n deleteDescription: 'การดำเนินการนี้จะนำ “{name}” ออกจากรายการพื้นที่ทำงาน โฟลเดอร์และบันทึกเซสชันจะยังคงอยู่',\n fork: 'แยกสาขาเซสชัน',\n archive: 'เก็บถาวรเซสชัน',\n archiveMode: 'โหมดเก็บถาวร',\n deleteMode: 'โหมดลบ',\n deleteSession: 'ลบเซสชัน',\n deleteSessionTitle: 'ลบเซสชัน',\n deleteSessionConfirm: 'คุณแน่ใจหรือไม่ว่าต้องการลบเซสชันนี้ จะถูกลบออกจากรายการและไม่สามารถย้อนกลับได้',\n toggleActionMode: 'สลับโหมดเก็บถาวร/ลบ',\n actionModeLabel: 'การจัดการเซสชัน',\n cancel: 'ยกเลิก',\n confirm: 'ยืนยัน',\n retry: 'เลือกใหม่',\n folderError: 'ไม่สามารถเปิดโฟลเดอร์ได้',\n workspaceName: 'ชื่อพื้นที่ทำงาน',\n sessionName: 'ชื่อเซสชัน',\n count: '{n} เซสชัน',\n now: 'เมื่อสักครู่',\n minutes: '{n} นาที',\n hours: '{n} ชั่วโมง',\n days: '{n} วัน',\n months: '{n} เดือน',\n years: '{n} ปี',\n running: 'กำลังดำเนินการ',\n waiting: 'รอปฏิสัมพันธ์',\n completed: 'เสร็จสิ้น',\n collapse: 'ย่อ',\n expand: 'ขยาย',\n today: 'วันนี้',\n yesterday: 'เมื่อวาน',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n ru: {\n workspaces: 'Рабочие области',\n sessions: 'Сеансы',\n recent: 'Недавние сеансы',\n ungrouped: 'Без группы',\n newSession: 'Новый сеанс',\n addWorkspace: 'Добавить рабочую область',\n addWorkspaceMenu: 'Добавить рабочую область…',\n search: 'Поиск сеансов',\n searchPlaceholder: 'Искать по имени, ключевым словам…',\n clearSearch: 'Очистить поиск',\n searching: 'Поиск по истории сеансов…',\n searchUnavailable: 'Поиск по содержимому недоступен. Показываем совпадения по имени.',\n noMatches: 'Нет подходящих сеансов',\n noSessions: 'Пока нет сеансов',\n noWorkspaces: 'Пока нет рабочих областей',\n loading: 'Загрузка рабочих областей…',\n rename: 'Переименовать',\n renameWorkspace: 'Переименовать рабочую область',\n renameSession: 'Переименовать сеанс',\n deleteWorkspace: 'Удалить рабочую область',\n deleteDescription: '«{name}» будет удалён из списка рабочих областей. Папка и записи сеансов сохранятся.',\n fork: 'Ответвить сеанс',\n archive: 'Архивировать сеанс',\n archiveMode: 'Режим архивации',\n deleteMode: 'Режим удаления',\n deleteSession: 'Удалить сеанс',\n deleteSessionTitle: 'Удалить сеанс',\n deleteSessionConfirm: 'Удалить этот сеанс? Он будет убран из списка. Действие необратимо.',\n toggleActionMode: 'Переключить режим архивации/удаления',\n actionModeLabel: 'Действие с сеансом',\n cancel: 'Отмена',\n confirm: 'Подтвердить',\n retry: 'Выбрать заново',\n folderError: 'Не удалось открыть папку',\n workspaceName: 'Название рабочей области',\n sessionName: 'Название сеанса',\n count: '{n} сеансов',\n now: 'только что',\n minutes: '{n} мин',\n hours: '{n} ч',\n days: '{n} дн',\n months: '{n} мес',\n years: '{n} г',\n running: 'Выполняется',\n waiting: 'Ожидает действий',\n completed: 'Завершён',\n collapse: 'Свернуть',\n expand: 'Развернуть',\n today: 'Сегодня',\n yesterday: 'Вчера',\n date: '{d}.{m}',\n dateYear: '{d}.{m}.{y}',\n },\n it: {\n workspaces: 'Aree di lavoro',\n sessions: 'Sessioni',\n recent: 'Sessioni recenti',\n ungrouped: 'Non raggruppati',\n newSession: 'Nuova sessione',\n addWorkspace: 'Aggiungi area di lavoro',\n addWorkspaceMenu: 'Aggiungi area di lavoro…',\n search: 'Cerca sessioni',\n searchPlaceholder: 'Cerca nome, parole chiave…',\n clearSearch: 'Cancella ricerca',\n searching: 'Ricerca nella cronologia delle sessioni…',\n searchUnavailable: 'La ricerca dei contenuti non è disponibile. Visualizzati solo i nomi corrispondenti.',\n noMatches: 'Nessuna sessione corrispondente',\n noSessions: 'Nessuna sessione per ora',\n noWorkspaces: 'Nessuna area di lavoro per ora',\n loading: 'Caricamento aree di lavoro…',\n rename: 'Rinomina',\n renameWorkspace: 'Rinomina area di lavoro',\n renameSession: 'Rinomina sessione',\n deleteWorkspace: 'Elimina area di lavoro',\n deleteDescription: 'Questo rimuove “{name}” dall’elenco delle aree di lavoro. La cartella e i log delle sessioni restano.',\n fork: 'Duplica sessione',\n archive: 'Archivia sessione',\n archiveMode: 'Modalità archivio',\n deleteMode: 'Modalità eliminazione',\n deleteSession: 'Elimina sessione',\n deleteSessionTitle: 'Elimina sessione',\n deleteSessionConfirm: 'Vuoi davvero eliminare questa sessione? Verrà rimossa dall’elenco. L’operazione non può essere annullata.',\n toggleActionMode: 'Commuta modalità archiviazione/eliminazione',\n actionModeLabel: 'Azione sessione',\n cancel: 'Annulla',\n confirm: 'Conferma',\n retry: 'Scegli di nuovo',\n folderError: 'Impossibile aprire la cartella',\n workspaceName: 'Nome area di lavoro',\n sessionName: 'Nome sessione',\n count: '{n} sessioni',\n now: 'adesso',\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} g',\n months: '{n} mesi',\n years: '{n} anni',\n running: 'In corso',\n waiting: 'In attesa di interazione',\n completed: 'Completata',\n collapse: 'Comprimi',\n expand: 'Espandi',\n today: 'Oggi',\n yesterday: 'Ieri',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n nl: {\n workspaces: 'Werkruimten',\n sessions: 'Sessies',\n recent: 'Recente sessies',\n ungrouped: 'Niet gegroepeerd',\n newSession: 'Nieuwe sessie',\n addWorkspace: 'Werkruimte toevoegen',\n addWorkspaceMenu: 'Werkruimte toevoegen…',\n search: 'Sessies zoeken',\n searchPlaceholder: 'Zoeken op naam, trefwoorden…',\n clearSearch: 'Zoekopdracht wissen',\n searching: 'Sessiegeschiedenis doorzoeken…',\n searchUnavailable: 'Inhoud zoeken is niet beschikbaar. Er worden alleen naamovereenkomsten getoond.',\n noMatches: 'Geen overeenkomende sessies',\n noSessions: 'Nog geen sessies',\n noWorkspaces: 'Nog geen werkruimten',\n loading: 'Werkruimten laden…',\n rename: 'Hernoemen',\n renameWorkspace: 'Werkruimte hernoemen',\n renameSession: 'Sessie hernoemen',\n deleteWorkspace: 'Werkruimte verwijderen',\n deleteDescription: 'Hiermee wordt “{name}” uit de werkruimtelijst verwijderd. De map en sessielogboeken blijven behouden.',\n fork: 'Sessie forken',\n archive: 'Sessie archiveren',\n archiveMode: 'Archiefmodus',\n deleteMode: 'Verwijdermodus',\n deleteSession: 'Sessie verwijderen',\n deleteSessionTitle: 'Sessie verwijderen',\n deleteSessionConfirm: 'Weet je zeker dat je deze sessie wilt verwijderen? Deze wordt uit de lijst verwijderd. Dit kan niet ongedaan worden gemaakt.',\n toggleActionMode: 'Archief-/verwijdermodus wisselen',\n actionModeLabel: 'Sessieactie',\n cancel: 'Annuleren',\n confirm: 'Bevestigen',\n retry: 'Opnieuw kiezen',\n folderError: 'Map kon niet worden geopend',\n workspaceName: 'Naam werkruimte',\n sessionName: 'Naam sessie',\n count: '{n} sessies',\n now: 'zojuist',\n minutes: '{n} min',\n hours: '{n} u',\n days: '{n} d',\n months: '{n} mnd',\n years: '{n} jr',\n running: 'Bezig',\n waiting: 'Wacht op interactie',\n completed: 'Voltooid',\n collapse: 'Inklappen',\n expand: 'Uitklappen',\n today: 'Vandaag',\n yesterday: 'Gisteren',\n date: '{d}-{m}',\n dateYear: '{d}-{m}-{y}',\n },\n sv: {\n workspaces: 'Arbetsytor',\n sessions: 'Sessioner',\n recent: 'Senaste sessionerna',\n ungrouped: 'Ogrupperat',\n newSession: 'Ny session',\n addWorkspace: 'Lägg till arbetsyta',\n addWorkspaceMenu: 'Lägg till arbetsyta…',\n search: 'Sök sessioner',\n searchPlaceholder: 'Sök namn, nyckelord…',\n clearSearch: 'Rensa sökning',\n searching: 'Söker sessionshistorik…',\n searchUnavailable: 'Innehållssökning är inte tillgänglig. Visar endast namnträffar.',\n noMatches: 'Inga matchande sessioner',\n noSessions: 'Inga sessioner ännu',\n noWorkspaces: 'Inga arbetsytor ännu',\n loading: 'Läser in arbetsytor…',\n rename: 'Byt namn',\n renameWorkspace: 'Byt namn på arbetsyta',\n renameSession: 'Byt namn på session',\n deleteWorkspace: 'Ta bort arbetsyta',\n deleteDescription: 'Detta tar bort “{name}” från arbetsytelistan. Mappen och sessionsloggarna behålls.',\n fork: 'Förgrena session',\n archive: 'Arkivera session',\n archiveMode: 'Arkivläge',\n deleteMode: 'Raderingsläge',\n deleteSession: 'Ta bort session',\n deleteSessionTitle: 'Ta bort session',\n deleteSessionConfirm: 'Är du säker på att du vill ta bort denna session? Den tas bort från listan. Detta kan inte ångras.',\n toggleActionMode: 'Växla arkiv-/raderingsläge',\n actionModeLabel: 'Sessionsåtgärd',\n cancel: 'Avbryt',\n confirm: 'Bekräfta',\n retry: 'Välj igen',\n folderError: 'Kunde inte öppna mappen',\n workspaceName: 'Arbetsytans namn',\n sessionName: 'Sessionens namn',\n count: '{n} sessioner',\n now: 'just nu',\n minutes: '{n} min',\n hours: '{n} tim',\n days: '{n} dgr',\n months: '{n} mån',\n years: '{n} år',\n running: 'Pågår',\n waiting: 'Väntar på interaktion',\n completed: 'Slutförd',\n collapse: 'Fäll ihop',\n expand: 'Fäll ut',\n today: 'Idag',\n yesterday: 'Igår',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n pl: {\n workspaces: 'Obszary robocze',\n sessions: 'Sesje',\n recent: 'Ostatnie sesje',\n ungrouped: 'Niezgrupowane',\n newSession: 'Nowa sesja',\n addWorkspace: 'Dodaj obszar roboczy',\n addWorkspaceMenu: 'Dodaj obszar roboczy…',\n search: 'Szukaj sesji',\n searchPlaceholder: 'Szukaj nazwy, słów kluczowych…',\n clearSearch: 'Wyczyść wyszukiwanie',\n searching: 'Trwa przeszukiwanie historii sesji…',\n searchUnavailable: 'Wyszukiwanie treści jest niedostępne. Pokazujemy tylko dopasowania nazw.',\n noMatches: 'Brak pasujących sesji',\n noSessions: 'Brak sesji',\n noWorkspaces: 'Brak obszarów roboczych',\n loading: 'Wczytywanie obszarów roboczych…',\n rename: 'Zmień nazwę',\n renameWorkspace: 'Zmień nazwę obszaru roboczego',\n renameSession: 'Zmień nazwę sesji',\n deleteWorkspace: 'Usuń obszar roboczy',\n deleteDescription: 'Spowoduje usunięcie „{name}” z listy obszarów roboczych. Folder i logi sesji zostaną zachowane.',\n fork: 'Rozwidlij sesję',\n archive: 'Zarchiwizuj sesję',\n archiveMode: 'Tryb archiwizacji',\n deleteMode: 'Tryb usuwania',\n deleteSession: 'Usuń sesję',\n deleteSessionTitle: 'Usuń sesję',\n deleteSessionConfirm: 'Na pewno usunąć tę sesję? Zostanie usunięta z listy. Tej operacji nie można cofnąć.',\n toggleActionMode: 'Przełącz tryb archiwizacji/usuwania',\n actionModeLabel: 'Akcja sesji',\n cancel: 'Anuluj',\n confirm: 'Potwierdź',\n retry: 'Wybierz ponownie',\n folderError: 'Nie można otworzyć folderu',\n workspaceName: 'Nazwa obszaru roboczego',\n sessionName: 'Nazwa sesji',\n count: '{n} sesji',\n now: 'przed chwilą',\n minutes: '{n} min',\n hours: '{n} godz.',\n days: '{n} dni',\n months: '{n} mies.',\n years: '{n} lat',\n running: 'W trakcie',\n waiting: 'Oczekuje na interakcję',\n completed: 'Zakończono',\n collapse: 'Zwiń',\n expand: 'Rozwiń',\n today: 'Dzisiaj',\n yesterday: 'Wczoraj',\n date: '{d}.{m}',\n dateYear: '{d}.{m}.{y}',\n },\n 'zh-HK': {\n workspaces: '工作區',\n sessions: '會話',\n recent: '最近會話',\n ungrouped: '未分組',\n newSession: '新會話',\n addWorkspace: '新增工作區',\n addWorkspaceMenu: '新增工作區…',\n search: '搜尋會話',\n searchPlaceholder: '搜尋名稱、關鍵字…',\n clearSearch: '清除搜尋',\n searching: '正在搜尋會話記錄…',\n searchUnavailable: '內容搜尋暫時無法使用,僅顯示名稱相符項目。',\n noMatches: '無相符會話',\n noSessions: '暫無會話',\n noWorkspaces: '暫無工作區',\n loading: '正在載入工作區…',\n rename: '重新命名',\n renameWorkspace: '重新命名工作區',\n renameSession: '重新命名會話',\n deleteWorkspace: '刪除工作區',\n deleteDescription: '會將「{name}」從工作區清單中移除。資料夾與會話記錄會保留。',\n fork: '分叉會話',\n archive: '封存會話',\n archiveMode: '封存模式',\n deleteMode: '刪除模式',\n deleteSession: '刪除會話',\n deleteSessionTitle: '刪除會話',\n deleteSessionConfirm: '確定要刪除此會話嗎?刪除後會從清單中移除,此操作無法復原。',\n toggleActionMode: '切換封存/刪除模式',\n actionModeLabel: '會話操作',\n cancel: '取消',\n confirm: '確認',\n retry: '重新選擇',\n folderError: '無法開啟資料夾',\n workspaceName: '工作區名稱',\n sessionName: '會話名稱',\n count: '{n} 個會話',\n now: '剛剛',\n minutes: '{n}分鐘',\n hours: '{n}小時',\n days: '{n}天',\n months: '{n}個月',\n years: '{n}年',\n running: '進行中',\n waiting: '等待互動',\n completed: '已完成',\n collapse: '摺疊',\n expand: '展開',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n 'zh-TW': {\n workspaces: '工作區',\n sessions: '對話',\n recent: '最近對話',\n ungrouped: '未分組',\n newSession: '新對話',\n addWorkspace: '新增工作區',\n addWorkspaceMenu: '新增工作區…',\n search: '搜尋對話',\n searchPlaceholder: '搜尋名稱、關鍵字…',\n clearSearch: '清除搜尋',\n searching: '正在搜尋對話紀錄…',\n searchUnavailable: '內容搜尋暫時無法使用,僅顯示名稱相符項目。',\n noMatches: '沒有相符的對話',\n noSessions: '尚無對話',\n noWorkspaces: '尚無工作區',\n loading: '正在載入工作區…',\n rename: '重新命名',\n renameWorkspace: '重新命名工作區',\n renameSession: '重新命名對話',\n deleteWorkspace: '刪除工作區',\n deleteDescription: '會將「{name}」從工作區清單中移除。資料夾與對話紀錄會保留。',\n fork: '分叉對話',\n archive: '封存對話',\n archiveMode: '封存模式',\n deleteMode: '刪除模式',\n deleteSession: '刪除對話',\n deleteSessionTitle: '刪除對話',\n deleteSessionConfirm: '確定要刪除此對話嗎?刪除後會從清單中移除,此操作無法復原。',\n toggleActionMode: '切換封存/刪除模式',\n actionModeLabel: '對話操作',\n cancel: '取消',\n confirm: '確認',\n retry: '重新選擇',\n folderError: '無法開啟資料夾',\n workspaceName: '工作區名稱',\n sessionName: '對話名稱',\n count: '{n} 個對話',\n now: '剛剛',\n minutes: '{n}分鐘',\n hours: '{n}小時',\n days: '{n}天',\n months: '{n}個月',\n years: '{n}年',\n running: '進行中',\n waiting: '等待互動',\n completed: '已完成',\n collapse: '摺疊',\n expand: '展開',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n 'zh-MO': {\n workspaces: '工作區',\n sessions: '會話',\n recent: '最近會話',\n ungrouped: '未分組',\n newSession: '新會話',\n addWorkspace: '新增工作區',\n addWorkspaceMenu: '新增工作區…',\n search: '搜尋會話',\n searchPlaceholder: '搜尋名稱、關鍵字…',\n clearSearch: '清除搜尋',\n searching: '正在搜尋會話記錄…',\n searchUnavailable: '內容搜尋暫時無法使用,僅顯示名稱相符項目。',\n noMatches: '無相符會話',\n noSessions: '暫無會話',\n noWorkspaces: '暫無工作區',\n loading: '正在載入工作區…',\n rename: '重新命名',\n renameWorkspace: '重新命名工作區',\n renameSession: '重新命名會話',\n deleteWorkspace: '刪除工作區',\n deleteDescription: '會將「{name}」從工作區清單中移除。資料夾與會話記錄會保留。',\n fork: '分叉會話',\n archive: '封存會話',\n archiveMode: '封存模式',\n deleteMode: '刪除模式',\n deleteSession: '刪除會話',\n deleteSessionTitle: '刪除會話',\n deleteSessionConfirm: '確定要刪除此會話嗎?刪除後會從清單中移除,此操作無法復原。',\n toggleActionMode: '切換封存/刪除模式',\n actionModeLabel: '會話操作',\n cancel: '取消',\n confirm: '確認',\n retry: '重新選擇',\n folderError: '無法開啟資料夾',\n workspaceName: '工作區名稱',\n sessionName: '會話名稱',\n count: '{n} 個會話',\n now: '剛剛',\n minutes: '{n}分鐘',\n hours: '{n}小時',\n days: '{n}天',\n months: '{n}個月',\n years: '{n}年',\n running: '進行中',\n waiting: '等待互動',\n completed: '已完成',\n collapse: '摺疊',\n expand: '展開',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n}","/** Product copy for the replacement workspace browser. */\nexport const zh = {\n workspaces: '工作区',\n sessions: '会话',\n recent: '最近会话',\n ungrouped: '未分组',\n newSession: '新会话',\n addWorkspace: '添加工作区',\n addWorkspaceMenu: '添加工作区…',\n search: '搜索会话',\n searchPlaceholder: '搜索名称、关键词…',\n clearSearch: '清除搜索',\n searching: '正在搜索会话历史…',\n searchUnavailable: '内容搜索暂不可用,仅显示名称匹配。',\n noMatches: '无匹配会话',\n noSessions: '暂无会话',\n noWorkspaces: '暂无工作区',\n loading: '正在加载工作区…',\n rename: '重命名',\n renameWorkspace: '重命名工作区',\n renameSession: '重命名会话',\n deleteWorkspace: '删除工作区',\n deleteDescription: '将把“{name}”从工作区列表中移除。文件夹与会话记录会保留。',\n fork: '分叉会话',\n archive: '归档会话',\n archiveMode: '归档模式',\n deleteMode: '删除模式',\n deleteSession: '删除会话',\n deleteSessionTitle: '删除会话',\n deleteSessionConfirm: '确定要删除此会话吗?删除后将从列表中移除,此操作不可撤销。',\n toggleActionMode: '切换归档/删除模式',\n actionModeLabel: '会话操作',\n cancel: '取消',\n confirm: '确认',\n retry: '重新选择',\n folderError: '无法打开文件夹',\n workspaceName: '工作区名称',\n sessionName: '会话名称',\n count: '{n} 个会话',\n now: '刚刚',\n minutes: '{n}分钟',\n hours: '{n}小时',\n days: '{n}天',\n months: '{n}个月',\n years: '{n}年',\n running: '进行中',\n waiting: '等待交互',\n completed: '已完成',\n collapse: '折叠',\n expand: '展开',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n} satisfies Record<string, string>\n\nexport type YaWorkspaceKey = keyof typeof zh\n\nexport const en = {\n workspaces: 'Workspaces',\n sessions: 'Sessions',\n recent: 'Recent Sessions',\n ungrouped: 'Ungrouped',\n newSession: 'New Session',\n addWorkspace: 'Add workspace',\n addWorkspaceMenu: 'Add workspace…',\n search: 'Search sessions',\n searchPlaceholder: 'Search name, keywords...',\n clearSearch: 'Clear search',\n searching: 'Searching session history…',\n searchUnavailable: 'Content search is unavailable. Showing name matches.',\n noMatches: 'No matching sessions',\n noSessions: 'No sessions yet',\n noWorkspaces: 'No workspaces yet',\n loading: 'Loading workspaces…',\n rename: 'Rename',\n renameWorkspace: 'Rename workspace',\n renameSession: 'Rename session',\n deleteWorkspace: 'Delete workspace',\n deleteDescription: 'This removes “{name}” from the workspace list. The folder and session logs remain.',\n fork: 'Fork session',\n archive: 'Archive session',\n archiveMode: 'Archive mode',\n deleteMode: 'Delete mode',\n deleteSession: 'Delete session',\n deleteSessionTitle: 'Delete session',\n deleteSessionConfirm: 'Are you sure you want to delete this session? It will be removed from the list. This cannot be undone.',\n toggleActionMode: 'Toggle archive/delete mode',\n actionModeLabel: 'Session action',\n cancel: 'Cancel',\n confirm: 'Confirm',\n retry: 'Choose again',\n folderError: 'Couldn’t open folder',\n workspaceName: 'Workspace name',\n sessionName: 'Session name',\n count: '{n} sessions',\n now: 'now',\n minutes: '{n}min',\n hours: '{n}h',\n days: '{n}d',\n months: '{n}mo',\n years: '{n}y',\n running: 'Running',\n waiting: 'Waiting for interaction',\n completed: 'Completed',\n collapse: 'Collapse',\n expand: 'Expand',\n today: 'Today',\n yesterday: 'Yesterday',\n date: '{m}/{d}',\n dateYear: '{m}/{d}/{y}',\n} satisfies Record<YaWorkspaceKey, string>\n\nexport const NS = 'ya-workspace-sidebar'\n","/** One scoped stylesheet injected for the lifetime of the client activation. */\nexport const CSS = `\n[data-ya-workspace-sidebar] { flex:1; min-height:0; display:flex; flex-direction:column; box-sizing:border-box; padding-right:var(--dsh-sidebar-inline-padding); color:var(--dsw-alias-label-primary); }\n[data-ya-workspace-sidebar].ya-rail { padding-right:0; }\n.ya-section-header { flex:none; height:36px; display:flex; align-items:center; justify-content:flex-end; gap:4px; padding-left:12px; margin-bottom:4px; box-sizing:border-box; color:var(--dsw-alias-label-tertiary); }\n.ya-section-title { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:14px; }\n.ya-icon-button { flex:none; width:28px; height:28px; border:0; border-radius:50%; padding:0; display:inline-flex; align-items:center; justify-content:center; color:var(--dsw-alias-label-secondary); background:transparent; cursor:pointer; }\n.ya-icon-button:hover { background:var(--dsw-alias-interactive-bg-hover); }\n.ya-search { flex:none; height:38px; margin:0 2px 10px; padding:0 14px; display:flex; align-items:center; gap:8px; box-sizing:border-box; border:1px solid var(--dsw-alias-border-l2); border-radius:24px; background:var(--dsw-static-neutral-bluish-75); color:var(--dsw-alias-label-caption); }\nbody[data-ds-dark-theme] .ya-search { background:var(--dsw-static-neutral-bluish-900); }\n.ya-search-input { flex:1; min-width:0; border:0; outline:0; background:transparent; color:var(--dsw-alias-label-primary); font:inherit; font-size:14px; }\n.ya-search-input::placeholder { color:var(--dsw-alias-label-tertiary); }\n.ya-search-icon { flex:none; display:inline-flex; border:0; padding:0; color:inherit; background:transparent; }\n.ya-body { flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden; margin-right:calc(-1 * var(--dsh-sidebar-inline-padding)); padding-right:var(--dsh-sidebar-inline-padding); }\n.ya-recent { flex:none; padding-bottom:8px; border-bottom:1px solid var(--dsw-alias-border-l2); }\n.ya-recent-collapsed { padding-bottom:0; border-bottom-color:transparent; }\n.ya-recent-list-wrap { display:grid; grid-template-rows:1fr; transition:grid-template-rows 220ms ease-out; }\n.ya-recent-collapsed .ya-recent-list-wrap { grid-template-rows:0fr; }\n.ya-recent-list { display:flex; flex-direction:column; overflow:hidden; min-height:0; }\n.ya-block-label { height:26px; display:flex; align-items:center; gap:2px; padding:0 8px; color:var(--dsw-alias-label-tertiary); font-size:12px; font-weight:600; letter-spacing:.02em; text-transform:uppercase; }\n.ya-block-label-toggle { flex:none; width:20px; height:20px; margin-left:auto; border:0; border-radius:6px; padding:0; display:inline-flex; align-items:center; justify-content:center; background:transparent; color:var(--dsw-alias-label-tertiary); cursor:pointer; transition:transform 180ms ease-out; }\n.ya-block-label-toggle:hover { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-secondary); }\n.ya-block-label-toggle.ya-collapsed { transform:rotate(-90deg); }\n.ya-date-group-label { height:26px; display:flex; align-items:center; padding:0 8px; color:var(--dsw-alias-label-tertiary); font-size:12px; font-weight:600; letter-spacing:.02em; }\n.ya-breadcrumb { flex:none; height:34px; display:flex; align-items:center; gap:2px; padding:0 6px; color:var(--dsw-alias-label-tertiary); font-size:13px; }\n.ya-crumb { border:0; padding:4px 3px; border-radius:6px; background:transparent; color:inherit; font:inherit; cursor:default; min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }\nbutton.ya-crumb:hover { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-primary); cursor:pointer; }\n.ya-scroll { flex:1; min-height:0; overflow-y:auto; padding-bottom:12px; }\n.ya-row { position:relative; min-height:34px; display:flex; align-items:center; gap:6px; margin:1px 0; padding:0 7px; border-radius:9px; box-sizing:border-box; color:var(--dsw-alias-label-primary); cursor:pointer; user-select:none; }\n.ya-row:hover, .ya-row.ya-menu-open { background:var(--dsw-alias-interactive-bg-hover); }\n.ya-row.ya-selected { background:var(--dsw-alias-interactive-bg-selected); }\n.ya-workspace-row { min-height:40px; }\n.ya-row-main { flex:1; min-width:0; display:flex; flex-direction:column; justify-content:center; }\n.ya-row-line { display:flex; align-items:center; min-width:0; gap:6px; }\n.ya-row-title { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13px; line-height:18px; }\n.ya-row-meta { flex:none; color:var(--dsw-alias-label-tertiary); font-size:11px; white-space:nowrap; }\n.ya-workspace-path { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-tertiary); font-size:11px; line-height:15px; }\n.ya-row-actions { flex:none; display:flex; align-items:center; gap:2px; opacity:0; pointer-events:none; transition:opacity 120ms ease-out; }\n.ya-row:hover .ya-row-actions, .ya-menu-open .ya-row-actions { opacity:1; pointer-events:auto; }\n.ya-status-slot { flex:none; width:16px; height:16px; display:inline-flex; align-items:center; justify-content:center; color:var(--dsw-alias-label-tertiary); }\n.ya-recent .ya-row { min-height:31px; }\n.ya-search-workspace { color:var(--dsw-alias-label-tertiary); font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.ya-empty, .ya-status { padding:18px 10px; color:var(--dsw-alias-label-tertiary); text-align:center; font-size:13px; }\n.ya-warning { color:var(--dsw-alias-status-warning); }\n.ya-rename-input { width:100%; height:38px; box-sizing:border-box; border:1px solid var(--dsw-alias-border-l2); border-radius:9px; padding:0 11px; background:transparent; color:var(--dsw-alias-label-primary); outline:none; }\n.ya-error { margin-top:8px; color:var(--dsw-alias-status-error); font-size:12px; }\n.ya-rail .ya-section-header { padding-left:0; margin-bottom:12px; }\n.ya-rail .ya-icon-button, .ya-rail .ya-search { width:36px; height:36px; padding:0; margin:0 0 12px; border-color:transparent; background:transparent; }\n.ya-rail .ya-search { justify-content:center; }\n.ya-rail .ya-search-icon { cursor:pointer; color:var(--dsw-alias-label-primary); }\n.ya-picker-error { color:var(--dsw-alias-status-error); white-space:pre-wrap; }\n.ya-action-mode-toggle.ya-action-mode-delete { color:var(--dsw-alias-state-error-primary); }\n.ya-action-mode-toggle.ya-action-mode-delete:hover { background:var(--dsw-alias-interactive-bg-hover-danger); }\n@keyframes ya-slide-in-forward { from { opacity:0; transform:translateX(10px); } to { opacity:1; transform:translateX(0); } }\n@keyframes ya-slide-in-backward { from { opacity:0; transform:translateX(-10px); } to { opacity:1; transform:translateX(0); } }\n.ya-level-enter-forward { animation:ya-slide-in-forward 180ms ease-out; }\n.ya-level-enter-backward { animation:ya-slide-in-backward 180ms ease-out; }\n`\n\n/** Install the stylesheet and return its disposer. */\nexport function installStyles(): () => void {\n const style = document.createElement('style')\n style.setAttribute('data-ya-workspace-sidebar-style', '')\n style.textContent = CSS\n document.head.appendChild(style)\n return () => { style.remove() }\n}\n","/** Existing-workspace menu plus composed directory-adoption flow. */\nimport type { ReactNode, RefObject } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button, IconFolderClose16, IconPlusOutline16, Menu, Modal, type MenuEntry,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type {\n WorkspaceId, WorkspaceListState, WorkspaceView,\n} from '@deepseek-ai/dsh-client-runtime/client'\nimport type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { DirectoryFlowOwnerProps, PickerProps } from './contract.ts'\n\nconst ADD = '::ya-add-workspace'\n\ninterface FlowProps {\n t: PickerProps['t']\n open: boolean\n anchorRef?: RefObject<HTMLElement | null>\n useWorkspaces: <S>(selector: (state: WorkspaceListState) => S) => S\n createWorkspace: (input: { path: string }) => Promise<WorkspaceView>\n useDirectoryFlow: SnapshotSelectorHook<boolean>\n renderDirectoryFlow: (owner: DirectoryFlowOwnerProps) => ReactNode\n onPick: (workspaceId: WorkspaceId) => void\n onClose: () => void\n addOnly?: boolean\n side?: 'bottom' | 'top' | 'right'\n selectedId?: WorkspaceId\n}\n\n/** Render the workspace target menu and directory picking conversation. */\nexport function WorkspacePickFlow({\n t, open, anchorRef, useWorkspaces, createWorkspace, useDirectoryFlow,\n renderDirectoryFlow, onPick, onClose, addOnly = false, side = 'bottom', selectedId,\n}: FlowProps) {\n const snapshot = useWorkspaces(state => state)\n const flowAvailable = useDirectoryFlow(value => value)\n const [flowOpen, setFlowOpen] = useState(false)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const getAnchorRect = useCallback(\n () => anchorRef?.current?.getBoundingClientRect() ?? null,\n [anchorRef],\n )\n useEffect(() => {\n if (flowOpen && !flowAvailable) setFlowOpen(false)\n }, [flowAvailable, flowOpen])\n\n const openFlow = useCallback(() => {\n onClose()\n setError(null)\n setFlowOpen(true)\n }, [onClose])\n const addEntries: MenuEntry[] = flowAvailable\n ? [{ id: ADD, label: t('addWorkspaceMenu'), icon: <IconPlusOutline16 size={16} />, disabled: flowOpen || busy }]\n : []\n const pinnedAdd = !addOnly && snapshot.items.length > 0\n const items: MenuEntry[] = pinnedAdd\n ? snapshot.items.map(workspace => ({\n id: workspace.workspaceId,\n label: workspace.title,\n icon: <IconFolderClose16 size={16} />,\n disabled: flowOpen || busy,\n }))\n : addEntries\n const settled = addOnly || snapshot.phase === 'ready'\n const onlyAdd = !pinnedAdd && settled && addEntries.length === 1\n useEffect(() => {\n if (open && onlyAdd && !flowOpen && !busy) openFlow()\n }, [busy, flowOpen, onlyAdd, open, openFlow])\n\n const owner: DirectoryFlowOwnerProps = {\n open: flowOpen,\n busy,\n onPicked: (path) => {\n setBusy(true)\n createWorkspace({ path }).then(workspace => {\n setFlowOpen(false)\n onPick(workspace.workspaceId)\n }).catch((reason: unknown) => {\n setFlowOpen(false)\n setError(reason instanceof Error ? reason.message : String(reason))\n }).finally(() => { setBusy(false) })\n },\n onCancel: () => { setFlowOpen(false) },\n onError: (message) => { setFlowOpen(false); setError(message) },\n }\n\n return (\n <>\n <Menu\n open={open && !onlyAdd && items.length > 0}\n anchor={null}\n items={items}\n {...pinnedAdd ? { footer: addEntries } : {}}\n selectedId={selectedId}\n onSelect={(id) => { if (id === ADD) openFlow(); else onPick(id as WorkspaceId) }}\n onClose={onClose}\n side={side}\n portal\n getAnchorRect={getAnchorRect}\n />\n {open && !onlyAdd && snapshot.phase === 'pending' && <div className=\"ya-status\">{t('loading')}</div>}\n {renderDirectoryFlow(owner)}\n <Modal\n open={error !== null}\n onClose={() => { setError(null) }}\n closeLabel={t('cancel')}\n title={t('folderError')}\n footer={(\n <>\n <Button variant=\"outline\" onClick={() => { setError(null) }}>{t('cancel')}</Button>\n <Button variant=\"primary\" disabled={!flowAvailable} onClick={openFlow}>{t('retry')}</Button>\n </>\n )}\n >\n <div className=\"ya-picker-error\" role=\"alert\">{error}</div>\n </Modal>\n </>\n )\n}\n\n/** Fill the conversation hero's workspace picker seat. */\nexport function WorkspacePicker({\n open, anchorRef, useWorkspaces, selectedId, onPick, onClose,\n createWorkspace, useDirectoryFlow, renderSlot, t,\n}: PickerProps) {\n return (\n <WorkspacePickFlow\n t={t}\n open={open}\n anchorRef={anchorRef}\n useWorkspaces={useWorkspaces}\n selectedId={selectedId}\n onPick={onPick}\n onClose={onClose}\n createWorkspace={createWorkspace}\n useDirectoryFlow={useDirectoryFlow}\n renderDirectoryFlow={owner => renderSlot('conversation.hero.workspace.directoryFlow', owner)}\n />\n )\n}\n","/** Pure sidebar projections shared by the browser and unit tests. */\nimport type {\n SessionId, SessionListState, SessionSummary, WorkspaceId, WorkspaceView,\n} from '@deepseek-ai/dsh-client-runtime/client'\n\n/** Navigation key for sessions not accounted to a real workspace. */\nexport const UNGROUPED = '__ya_ungrouped__' as const\n\n/** One sidebar session row. */\nexport interface SessionRow {\n id: SessionId\n title: string\n blank: boolean\n running: boolean\n pendingInteraction?: SessionSummary['pendingInteraction']\n completed: boolean\n updatedAt: number\n workspaceKey: WorkspaceId | typeof UNGROUPED\n workspaceTitle: string\n}\n\n/** One date-bucketed group of session rows for the real-workspace level. */\nexport interface SessionDateGroup {\n /** Local calendar date `YYYY-MM-DD`, stable key. */\n dateKey: string\n /** Days between today's local date and this group's local date (0=today, 1=yesterday, …). */\n dayOffset: number\n rows: SessionRow[]\n}\n\n/** One first-level workspace row. */\nexport interface WorkspaceRow {\n key: WorkspaceId | typeof UNGROUPED\n title: string\n path?: string\n createdAt?: string\n count: number\n real: boolean\n}\n\nfunction visible(summary: SessionSummary, current: SessionId | undefined, archived: ReadonlySet<SessionId>): boolean {\n return summary.origin !== 'subagent'\n && !archived.has(summary.id)\n && (!summary.blank || summary.id === current)\n}\n\nfunction rowOf(\n summary: SessionSummary,\n workspaceKey: WorkspaceId | typeof UNGROUPED,\n workspaceTitle: string,\n): SessionRow {\n return {\n id: summary.id,\n title: summary.blank ? 'New Session' : summary.displayTitle,\n blank: summary.blank,\n running: summary.running,\n ...(summary.pendingInteraction === undefined ? {} : { pendingInteraction: summary.pendingInteraction }),\n completed: summary.completed === true,\n updatedAt: summary.updatedAt,\n workspaceKey,\n workspaceTitle,\n }\n}\n\nfunction ownerIndex(workspaces: readonly WorkspaceView[]): Map<SessionId, WorkspaceView> {\n const result = new Map<SessionId, WorkspaceView>()\n for (const workspace of workspaces) {\n for (const sessionId of workspace.sessionIds) result.set(sessionId, workspace)\n }\n return result\n}\n\n/** Resolve the first/second-level destination for one session. */\nexport function workspaceKeyForSession(\n sessionId: SessionId | undefined,\n workspaces: readonly WorkspaceView[],\n): WorkspaceId | typeof UNGROUPED | null {\n if (sessionId === undefined) return null\n return ownerIndex(workspaces).get(sessionId)?.workspaceId ?? UNGROUPED\n}\n\n/** Derive global recent sessions, newest first. */\nexport function deriveRecent(\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n limit = 5,\n): SessionRow[] {\n const archived = new Set(archivedSessionIds)\n const owners = ownerIndex(workspaces)\n return list.ids\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined && visible(summary, list.current, archived))\n .sort((a, b) => b.updatedAt - a.updatedAt || String(a.id).localeCompare(String(b.id)))\n .slice(0, limit)\n .map((summary) => {\n const workspace = owners.get(summary.id)\n return rowOf(summary, workspace?.workspaceId ?? UNGROUPED, workspace?.title ?? 'Ungrouped')\n })\n}\n\n/** Derive first-level real workspaces plus the virtual Ungrouped row. */\nexport function deriveWorkspaces(\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n): WorkspaceRow[] {\n const archived = new Set(archivedSessionIds)\n const accounted = new Set<SessionId>()\n const result = workspaces.map((workspace): WorkspaceRow => {\n let count = 0\n for (const id of workspace.sessionIds) {\n accounted.add(id)\n const summary = list.byId[id]\n if (summary !== undefined && visible(summary, list.current, archived)) count++\n }\n return {\n key: workspace.workspaceId,\n title: workspace.title,\n path: workspace.path,\n createdAt: workspace.createdAt,\n count,\n real: true,\n }\n })\n let ungrouped = 0\n for (const id of list.ids) {\n const summary = list.byId[id]\n if (summary !== undefined && !accounted.has(id) && visible(summary, list.current, archived)) ungrouped++\n }\n result.push({ key: UNGROUPED, title: 'Ungrouped', count: ungrouped, real: false })\n return result\n}\n\n/** Derive the selected workspace's sessions in its canonical order. */\nexport function deriveWorkspaceSessions(\n key: WorkspaceId | typeof UNGROUPED,\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n): SessionRow[] {\n const archived = new Set(archivedSessionIds)\n if (key === UNGROUPED) {\n const accounted = new Set(workspaces.flatMap(workspace => workspace.sessionIds))\n return list.ids\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined\n && !accounted.has(summary.id)\n && visible(summary, list.current, archived))\n .sort((a, b) => b.updatedAt - a.updatedAt || String(a.id).localeCompare(String(b.id)))\n .map(summary => rowOf(summary, UNGROUPED, 'Ungrouped'))\n }\n const workspace = workspaces.find(item => item.workspaceId === key)\n if (workspace === undefined) return []\n return workspace.sessionIds\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined && visible(summary, list.current, archived))\n .map(summary => rowOf(summary, workspace.workspaceId, workspace.title))\n}\n\n/** Format a local calendar date as `YYYY-MM-DD` (locale-agnostic, no padding surprises). */\nfunction localDateKey(year: number, month: number, day: number): string {\n const mm = month < 9 ? `0${month + 1}` : `${month + 1}`\n const dd = day < 10 ? `0${day}` : `${day}`\n return `${year}-${mm}-${dd}`\n}\n\n/** Whole-day difference between two local calendar dates (a - b) using UTC midnight. */\nfunction dayDiff(a: { year: number; month: number; day: number }, b: { year: number; month: number; day: number }): number {\n const msA = Date.UTC(a.year, a.month, a.day)\n const msB = Date.UTC(b.year, b.month, b.day)\n return Math.round((msA - msB) / 86_400_000)\n}\n\n/**\n * Derive the selected real workspace's sessions grouped by local calendar date.\n *\n * - Only real workspaces: `Ungrouped` falls back to {@link deriveWorkspaceSessions}.\n * - Groups are ordered by date descending; rows within a group by `updatedAt` descending.\n * - {@link visible} filter is reused (archived / subagent / blank visibility).\n * - Future timestamps clamp to today's bucket (`dayOffset` 0).\n * - `now` is the reference timestamp for \"today\"; pass `Date.now()` in production.\n */\nexport function deriveWorkspaceSessionGroups(\n key: WorkspaceId | typeof UNGROUPED,\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n now: number,\n): SessionDateGroup[] {\n if (key === UNGROUPED) return []\n const workspace = workspaces.find(item => item.workspaceId === key)\n if (workspace === undefined) return []\n const archived = new Set(archivedSessionIds)\n const rows = workspace.sessionIds\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined && visible(summary, list.current, archived))\n .map(summary => rowOf(summary, workspace.workspaceId, workspace.title))\n if (rows.length === 0) return []\n\n const nowDate = new Date(now)\n const today = { year: nowDate.getFullYear(), month: nowDate.getMonth(), day: nowDate.getDate() }\n\n const buckets = new Map<string, { dayOffset: number; rows: SessionRow[] }>()\n for (const row of rows) {\n const ts = Math.min(row.updatedAt, now)\n const d = new Date(ts)\n const date = { year: d.getFullYear(), month: d.getMonth(), day: d.getDate() }\n const dateKey = localDateKey(date.year, date.month, date.day)\n let bucket = buckets.get(dateKey)\n if (bucket === undefined) {\n // dayOffset = today - date (positive for past dates). Future timestamps were\n // clamped to `now` above, so `date` never exceeds today; Math.max guards rounding noise.\n const offset = Math.max(0, dayDiff(today, date))\n bucket = { dayOffset: offset, rows: [] }\n buckets.set(dateKey, bucket)\n }\n bucket.rows.push(row)\n }\n\n const groups: SessionDateGroup[] = []\n for (const [dateKey, bucket] of buckets) {\n bucket.rows.sort((a, b) => b.updatedAt - a.updatedAt || String(a.id).localeCompare(String(b.id)))\n groups.push({ dateKey, dayOffset: bucket.dayOffset, rows: bucket.rows })\n }\n // Sort groups by date descending: newest date first = smallest dayOffset first.\n groups.sort((a, b) => a.dayOffset - b.dayOffset || a.dateKey.localeCompare(b.dateKey))\n return groups\n}\n\n/** Case-insensitive local title/workspace matching used beside Host content search. */\nexport function localMatches(rows: readonly SessionRow[], query: string): SessionRow[] {\n const normalized = query.trim().toLocaleLowerCase()\n if (normalized === '') return []\n return rows.filter(row => `${row.title}\\n${row.workspaceTitle}`.toLocaleLowerCase().includes(normalized))\n}\n","/**\n * Browser-local preference controlling whether the session row's destructive\n * action presents as Archive (default) or Delete. Delete mode renders the\n * row action red with a trash icon and gates the call behind a confirmation\n * modal; the underlying Host verb remains `archiveSession` (the only\n * session-level destructive API exposed by `ctx.workspaces`), which hides\n * the session from grouping surfaces while preserving its log.\n *\n * The preference is persisted to `localStorage` so it survives reloads and\n * remounts without host-side plumbing. Cross-device sync is intentionally\n * out of scope: this is a per-browser UX preference, not a deployment knob.\n */\n\n/** How the session row's destructive action presents and behaves. */\nexport type SessionActionMode = 'archive' | 'delete'\n\nconst STORAGE_KEY = 'ya-workspace-sidebar:action-mode'\n\nconst listeners = new Set<() => void>()\nlet currentMode: SessionActionMode = loadMode()\n\n/** Read the stored preference, falling back to `archive` on any failure. */\nfunction loadMode(): SessionActionMode {\n try {\n const value = window.localStorage.getItem(STORAGE_KEY)\n return value === 'delete' ? 'delete' : 'archive'\n } catch {\n return 'archive'\n }\n}\n\n/** Persist the preference; silently ignores quota or privacy-mode failures. */\nfunction persistMode(mode: SessionActionMode): void {\n try {\n window.localStorage.setItem(STORAGE_KEY, mode)\n } catch {\n // localStorage may be unavailable (private mode, quota exceeded); the\n // in-memory value still drives the current session.\n }\n}\n\n/** Current action mode snapshot. */\nexport function getActionMode(): SessionActionMode {\n return currentMode\n}\n\n/** Switch the action mode and notify subscribers. */\nexport function setActionMode(mode: SessionActionMode): void {\n if (mode === currentMode) return\n currentMode = mode\n persistMode(mode)\n for (const listener of [...listeners]) listener()\n}\n\n/** Subscribe to action mode changes; returns an unsubscribe disposer. */\nexport function subscribeActionMode(listener: () => void): () => void {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n}\n","/** Two-level workspace/session browser with a persistent global recent block. */\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n Button, IconArchiveOutline20, IconBranchOutline16, IconChevronRightOutline14,\n IconCloseFill14, IconEditOutline16, IconEllipsisOutline16, IconFolderClose16,\n IconPlusOutline16, IconProjectAddOutline16, IconSearchOutline16, IconTrashOutline16,\n Menu, Modal, StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { SessionId, WorkspaceId } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { SidebarProps } from './contract.ts'\nimport {\n deriveRecent, deriveWorkspaceSessionGroups, deriveWorkspaceSessions, deriveWorkspaces,\n localMatches, UNGROUPED, workspaceKeyForSession, type SessionDateGroup, type SessionRow,\n type WorkspaceRow,\n} from './model.ts'\nimport type { SessionActionMode } from './settings.ts'\nimport { getActionMode, setActionMode, subscribeActionMode } from './settings.ts'\nimport { WorkspacePickFlow } from './WorkspacePicker.tsx'\n\nconst SEARCH_DEBOUNCE_MS = 250\nconst SEARCH_MAX = 500\n\nfunction sanitized(value: string): string {\n return value.replaceAll('\\0', '').slice(0, SEARCH_MAX)\n}\n\nfunction relativeTime(updatedAt: number, now: number, t: SidebarProps['t']): string {\n const diff = Math.max(0, now - updatedAt)\n const minute = 60_000\n if (diff < minute) return t('now')\n if (diff < 60 * minute) return t('minutes', { n: Math.floor(diff / minute) })\n if (diff < 24 * 60 * minute) return t('hours', { n: Math.floor(diff / (60 * minute)) })\n if (diff < 30 * 24 * 60 * minute) return t('days', { n: Math.floor(diff / (24 * 60 * minute)) })\n if (diff < 365 * 24 * 60 * minute) return t('months', { n: Math.floor(diff / (30 * 24 * 60 * minute)) })\n return t('years', { n: Math.floor(diff / (365 * 24 * 60 * minute)) })\n}\n\n/** Format a date group's localized title from its dayOffset and `YYYY-MM-DD` key. */\nfunction dateGroupLabel(group: SessionDateGroup, now: number, t: SidebarProps['t']): string {\n if (group.dayOffset === 0) return t('today')\n if (group.dayOffset === 1) return t('yesterday')\n const parts = group.dateKey.split('-')\n const year = Number(parts[0])\n const month = Number(parts[1])\n const day = Number(parts[2])\n const nowDate = new Date(now)\n if (year === nowDate.getFullYear()) return t('date', { m: month, d: day })\n return t('dateYear', { y: year, m: month, d: day })\n}\n\nfunction SessionStatus({ row }: { row: SessionRow }) {\n if (row.pendingInteraction !== undefined) return <StateDot state=\"warning\" />\n if (row.running) return <StateDot state=\"ongoing\" />\n if (row.completed) return <StateDot state=\"done\" />\n return null\n}\n\ninterface SessionRowProps {\n row: SessionRow\n current: SessionId | undefined\n now: number\n open: (id: SessionId) => void\n rename: (row: SessionRow) => void\n fork: (id: SessionId) => void\n archive: (id: SessionId) => void\n t: SidebarProps['t']\n context?: boolean\n actionMode: SessionActionMode\n}\n\nfunction SessionItem({ row, current, now, open, rename, fork, archive, t, context, actionMode }: SessionRowProps) {\n const [menuOpen, setMenuOpen] = useState(false)\n const title = row.blank ? t('newSession') : row.title\n const isDelete = actionMode === 'delete'\n const actionLabel = isDelete ? t('deleteSession') : t('archive')\n const actionIcon = isDelete ? <IconTrashOutline16 /> : <IconArchiveOutline20 size={16} />\n return (\n <div\n className={`ya-row${row.id === current ? ' ya-selected' : ''}${menuOpen ? ' ya-menu-open' : ''}`}\n role=\"treeitem\"\n aria-selected={row.id === current}\n onClick={() => { open(row.id) }}\n >\n <span className=\"ya-status-slot\"><SessionStatus row={row} /></span>\n <span className=\"ya-row-main\">\n <span className=\"ya-row-line\">\n <span className=\"ya-row-title\">{title}</span>\n {!row.blank && <span className=\"ya-row-meta ya-row-time\">{relativeTime(row.updatedAt, now, t)}</span>}\n </span>\n {context === true && <span className=\"ya-search-workspace\">{row.workspaceTitle}</span>}\n </span>\n {!row.blank && (\n <span className=\"ya-row-actions\">\n <Menu\n open={menuOpen}\n onClose={() => { setMenuOpen(false) }}\n items={[\n { id: 'rename', label: t('rename'), icon: <IconEditOutline16 /> },\n { id: 'fork', label: t('fork'), icon: <IconBranchOutline16 /> },\n { id: 'archive', label: actionLabel, icon: actionIcon, danger: isDelete },\n ]}\n onSelect={(id) => {\n setMenuOpen(false)\n if (id === 'rename') rename(row)\n if (id === 'fork') fork(row.id)\n if (id === 'archive') archive(row.id)\n }}\n portal\n closeOnPointerLeave\n anchor={(\n <button\n type=\"button\"\n className=\"ya-icon-button\"\n aria-label={`${title} actions`}\n onClick={(event) => { event.stopPropagation(); setMenuOpen(value => !value) }}\n >\n <IconEllipsisOutline16 />\n </button>\n )}\n />\n </span>\n )}\n </div>\n )\n}\n\nfunction WorkspaceItem({ row, enter, create, rename, remove, t }: {\n row: WorkspaceRow\n enter: () => void\n create: () => void\n rename: () => void\n remove: () => void\n t: SidebarProps['t']\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n return (\n <div className={`ya-row ya-workspace-row${menuOpen ? ' ya-menu-open' : ''}`} role=\"treeitem\" onClick={enter} title={row.path}>\n <span className=\"ya-status-slot\"><IconFolderClose16 /></span>\n <span className=\"ya-row-main\">\n <span className=\"ya-row-line\">\n <span className=\"ya-row-title\">{row.real ? row.title : t('ungrouped')}</span>\n <span className=\"ya-row-meta\">{t('count', { n: row.count })}</span>\n </span>\n {row.path !== undefined && <span className=\"ya-workspace-path\">{row.path}</span>}\n </span>\n <span className=\"ya-row-actions\">\n {row.real && (\n <Menu\n open={menuOpen}\n onClose={() => { setMenuOpen(false) }}\n items={[\n { id: 'rename', label: t('rename'), icon: <IconEditOutline16 /> },\n { id: 'delete', label: t('deleteWorkspace'), icon: <IconTrashOutline16 />, danger: true },\n ]}\n onSelect={(id) => { setMenuOpen(false); if (id === 'rename') rename(); if (id === 'delete') remove() }}\n portal\n closeOnPointerLeave\n anchor={(\n <button type=\"button\" className=\"ya-icon-button\" onClick={(event) => { event.stopPropagation(); setMenuOpen(value => !value) }}>\n <IconEllipsisOutline16 />\n </button>\n )}\n />\n )}\n {row.real && (\n <button type=\"button\" className=\"ya-icon-button\" onClick={(event) => { event.stopPropagation(); create() }}>\n <IconPlusOutline16 />\n </button>\n )}\n </span>\n <IconChevronRightOutline14 />\n </div>\n )\n}\n\ninterface RemoteState {\n query: string\n status: 'idle' | 'loading' | 'ready' | 'error'\n items: readonly { sessionId: SessionId; snippet: string }[]\n hasMore: boolean\n}\n\n/** Fill `sidebar.workspaces` with the replacement browser. */\nexport function WorkspaceSidebar(props: SidebarProps) {\n const {\n wide, expandSidebar, useSessions, useWorkspaces, startSession, open, searchSessions,\n searchResultLimit, renameSession, forkSession, renameWorkspace, deleteWorkspace,\n archiveSession, createWorkspace, useDirectoryFlow, renderSlot, t,\n } = props\n const sessions = useSessions(state => state)\n const workspaceState = useWorkspaces(state => state)\n const workspaces = workspaceState.items\n const archived = workspaceState.archivedSessionIds\n const directoryFlowAvailable = useDirectoryFlow(value => value)\n const allRows = useMemo(\n () => deriveRecent(sessions, workspaces, archived, Number.MAX_SAFE_INTEGER),\n [archived, sessions, workspaces],\n )\n const recent = allRows.slice(0, 5)\n const workspaceRows = useMemo(\n () => deriveWorkspaces(sessions, workspaces, archived),\n [archived, sessions, workspaces],\n )\n const [selectedKey, setSelectedKey] = useState<WorkspaceId | typeof UNGROUPED | null>(null)\n const [direction, setDirection] = useState<'forward' | 'backward'>('forward')\n const [hasMounted, setHasMounted] = useState(false)\n useEffect(() => { setHasMounted(true) }, [])\n const observedCurrent = useRef<SessionId | undefined>(undefined)\n const initialized = useRef(false)\n useEffect(() => {\n if (initialized.current && observedCurrent.current === sessions.current) return\n initialized.current = true\n observedCurrent.current = sessions.current\n if (sessions.current !== undefined) { setDirection('forward'); setSelectedKey(workspaceKeyForSession(sessions.current, workspaces)) }\n }, [sessions.current, workspaces])\n useEffect(() => {\n if (selectedKey !== null && selectedKey !== UNGROUPED\n && !workspaces.some(workspace => workspace.workspaceId === selectedKey)) setSelectedKey(UNGROUPED)\n }, [selectedKey, workspaces])\n const selectedWorkspace = selectedKey === null || selectedKey === UNGROUPED\n ? undefined\n : workspaces.find(workspace => workspace.workspaceId === selectedKey)\n const now = Date.now()\n // Real workspace level renders date-bucketed groups; Ungrouped keeps the flat recency view.\n const levelGroups = useMemo(\n () => selectedKey !== null && selectedKey !== UNGROUPED\n ? deriveWorkspaceSessionGroups(selectedKey, sessions, workspaces, archived, now)\n : [],\n [archived, sessions, workspaces, selectedKey, now],\n )\n const levelRows = selectedKey === UNGROUPED\n ? deriveWorkspaceSessions(UNGROUPED, sessions, workspaces, archived)\n : []\n const levelEmpty = selectedKey === UNGROUPED ? levelRows.length === 0 : levelGroups.every(g => g.rows.length === 0)\n\n const [query, setQuery] = useState('')\n const normalizedQuery = sanitized(query).trim()\n const [remote, setRemote] = useState<RemoteState>({ query: '', status: 'idle', items: [], hasMore: false })\n useEffect(() => {\n if (normalizedQuery === '') {\n setRemote({ query: '', status: 'idle', items: [], hasMore: false })\n return\n }\n const controller = new AbortController()\n setRemote({ query: normalizedQuery, status: 'loading', items: [], hasMore: false })\n const timer = window.setTimeout(() => {\n searchSessions(normalizedQuery, controller.signal).then(result => {\n if (!controller.signal.aborted) setRemote({ query: normalizedQuery, status: 'ready', items: result.items, hasMore: result.hasMore })\n }).catch(() => {\n if (!controller.signal.aborted) setRemote({ query: normalizedQuery, status: 'error', items: [], hasMore: false })\n })\n }, SEARCH_DEBOUNCE_MS)\n return () => { window.clearTimeout(timer); controller.abort() }\n }, [normalizedQuery, searchSessions])\n const searchRows = useMemo(() => {\n if (normalizedQuery === '') return []\n const byId = new Map(localMatches(allRows, normalizedQuery).map(row => [row.id, row]))\n if (remote.query === normalizedQuery) {\n for (const item of remote.items) {\n const row = allRows.find(candidate => candidate.id === item.sessionId)\n if (row !== undefined) byId.set(row.id, row)\n }\n }\n return [...byId.values()].slice(0, searchResultLimit)\n }, [allRows, normalizedQuery, remote, searchResultLimit])\n\n const [pickerOpen, setPickerOpen] = useState(false)\n const pickerAnchor = useRef<HTMLButtonElement>(null)\n const [recentCollapsed, setRecentCollapsed] = useState(false)\n const [workspaceRename, setWorkspaceRename] = useState<WorkspaceRow | null>(null)\n const [sessionRename, setSessionRename] = useState<SessionRow | null>(null)\n const [renameDraft, setRenameDraft] = useState('')\n const [renameError, setRenameError] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n const [deleteTarget, setDeleteTarget] = useState<WorkspaceRow | null>(null)\n const [actionMode, setActionModeState] = useState<SessionActionMode>(() => getActionMode())\n const [sessionDeleteTarget, setSessionDeleteTarget] = useState<SessionRow | null>(null)\n\n useEffect(() => subscribeActionMode(() => setActionModeState(getActionMode())), [])\n\n const beginWorkspaceRename = (row: WorkspaceRow) => { setWorkspaceRename(row); setRenameDraft(row.title); setRenameError(null) }\n const beginSessionRename = (row: SessionRow) => { setSessionRename(row); setRenameDraft(row.title); setRenameError(null) }\n const closeRename = () => { if (!busy) { setWorkspaceRename(null); setSessionRename(null); setRenameError(null) } }\n const commitRename = () => {\n const title = renameDraft.trim()\n if (title === '' || busy) return\n setBusy(true)\n const task = workspaceRename !== null && workspaceRename.key !== UNGROUPED\n ? renameWorkspace(workspaceRename.key, title)\n : sessionRename !== null ? renameSession(sessionRename.id, title) : Promise.resolve()\n task.then(() => { setWorkspaceRename(null); setSessionRename(null) })\n .catch((reason: unknown) => { setRenameError(reason instanceof Error ? reason.message : String(reason)) })\n .finally(() => { setBusy(false) })\n }\n const confirmDelete = () => {\n if (deleteTarget === null || deleteTarget.key === UNGROUPED || busy) return\n setBusy(true)\n deleteWorkspace(deleteTarget.key).then(() => { setDeleteTarget(null) })\n .catch((reason: unknown) => { setRenameError(reason instanceof Error ? reason.message : String(reason)) })\n .finally(() => { setBusy(false) })\n }\n const archive = (id: SessionId) => {\n if (actionMode === 'delete') {\n const row = allRows.find(candidate => candidate.id === id)\n ?? levelRows.find(candidate => candidate.id === id)\n ?? levelGroups.flatMap(g => g.rows).find(candidate => candidate.id === id)\n ?? recent.find(candidate => candidate.id === id)\n setSessionDeleteTarget(row ?? { id, title: '', blank: false, running: false, completed: false, updatedAt: 0, workspaceKey: UNGROUPED, workspaceTitle: '' })\n setRenameError(null)\n return\n }\n archiveSession(id).catch(reason => { console.warn('session archive rejected:', reason) })\n }\n const confirmSessionDelete = () => {\n if (sessionDeleteTarget === null || busy) return\n setBusy(true)\n archiveSession(sessionDeleteTarget.id).then(() => { setSessionDeleteTarget(null) })\n .catch((reason: unknown) => { setRenameError(reason instanceof Error ? reason.message : String(reason)) })\n .finally(() => { setBusy(false) })\n }\n const toggleActionMode = () => { setActionMode(actionMode === 'archive' ? 'delete' : 'archive') }\n const fork = (id: SessionId) => { forkSession(id) }\n\n const sessionItem = (row: SessionRow, context = false) => (\n <SessionItem\n key={row.id}\n row={row}\n current={sessions.current}\n now={now}\n open={open}\n rename={beginSessionRename}\n fork={fork}\n archive={archive}\n t={t}\n context={context}\n actionMode={actionMode}\n />\n )\n\n return (\n <div data-ya-workspace-sidebar className={wide ? '' : 'ya-rail'}>\n <div className=\"ya-section-header\">\n {wide && <span className=\"ya-section-title\">{t('workspaces')}</span>}\n <button\n type=\"button\"\n className={`ya-icon-button ya-action-mode-toggle${actionMode === 'delete' ? ' ya-action-mode-delete' : ''}`}\n aria-label={t('toggleActionMode')}\n aria-pressed={actionMode === 'delete'}\n title={actionMode === 'delete' ? t('deleteMode') : t('archiveMode')}\n onClick={(event) => { event.stopPropagation(); toggleActionMode() }}\n >\n {actionMode === 'delete' ? <IconTrashOutline16 size={wide ? 16 : 18} /> : <IconArchiveOutline20 size={wide ? 16 : 18} />}\n </button>\n {directoryFlowAvailable && (\n <button ref={pickerAnchor} type=\"button\" className=\"ya-icon-button\" aria-label={t('addWorkspace')} onClick={() => { setPickerOpen(value => !value) }}>\n <IconProjectAddOutline16 size={wide ? 16 : 18} />\n </button>\n )}\n <WorkspacePickFlow\n t={t}\n open={pickerOpen}\n anchorRef={pickerAnchor}\n useWorkspaces={useWorkspaces}\n createWorkspace={createWorkspace}\n useDirectoryFlow={useDirectoryFlow}\n renderDirectoryFlow={owner => renderSlot('sidebar.workspaces.directoryFlow', owner)}\n addOnly\n side=\"right\"\n onPick={(workspaceId) => { setPickerOpen(false); startSession(workspaceId) }}\n onClose={() => { setPickerOpen(false) }}\n />\n </div>\n\n <div className=\"ya-search\" onClick={() => { if (!wide) expandSidebar() }}>\n <button type=\"button\" className=\"ya-search-icon\" aria-label={t('search')}><IconSearchOutline16 size={wide ? 14 : 18} /></button>\n {wide && <input className=\"ya-search-input\" value={query} maxLength={SEARCH_MAX} placeholder={t('searchPlaceholder')} onChange={event => { setQuery(sanitized(event.target.value)) }} />}\n {wide && query !== '' && <button type=\"button\" className=\"ya-icon-button\" aria-label={t('clearSearch')} onClick={() => { setQuery('') }}><IconCloseFill14 /></button>}\n </div>\n\n {wide && (\n <div className=\"ya-body\">\n {normalizedQuery !== '' ? (\n <div className=\"ya-scroll\" role=\"tree\" aria-label={t('search')}>\n {searchRows.map(row => sessionItem(row, true))}\n {remote.status === 'loading' && <div className=\"ya-status\">{t('searching')}</div>}\n {remote.status === 'error' && <div className=\"ya-status ya-warning\">{t('searchUnavailable')}</div>}\n {remote.status !== 'loading' && searchRows.length === 0 && <div className=\"ya-empty\">{t('noMatches')}</div>}\n </div>\n ) : (\n <>\n <div className={`ya-recent${recentCollapsed ? ' ya-recent-collapsed' : ''}`}>\n <div className=\"ya-block-label\">\n <span>{t('recent')}</span>\n {recent.length > 0 && (\n <button\n type=\"button\"\n className={`ya-block-label-toggle${recentCollapsed ? ' ya-collapsed' : ''}`}\n aria-label={recentCollapsed ? t('expand') : t('collapse')}\n aria-expanded={!recentCollapsed}\n onClick={(event) => { event.stopPropagation(); setRecentCollapsed(value => !value) }}\n >\n <IconChevronRightOutline14 />\n </button>\n )}\n </div>\n <div className=\"ya-recent-list-wrap\">\n {recent.length === 0\n ? <div className=\"ya-empty\">{t('noSessions')}</div>\n : <div className=\"ya-recent-list\">{recent.map(row => sessionItem(row, true))}</div>\n }\n </div>\n </div>\n <div className=\"ya-breadcrumb\">\n {selectedKey === null ? (\n <span className=\"ya-crumb\">{t('workspaces')}</span>\n ) : (\n <>\n <button type=\"button\" className=\"ya-crumb\" onClick={() => { setDirection('backward'); setSelectedKey(null) }}>{t('workspaces')}</button>\n <IconChevronRightOutline14 />\n <span className=\"ya-crumb\">{selectedKey === UNGROUPED ? t('ungrouped') : selectedWorkspace?.title}</span>\n {selectedKey !== UNGROUPED && (\n <button type=\"button\" className=\"ya-icon-button\" aria-label={t('newSession')} onClick={() => { startSession(selectedKey) }}><IconPlusOutline16 /></button>\n )}\n </>\n )}\n </div>\n <div className=\"ya-scroll\" role=\"tree\" aria-label={selectedKey === null ? t('workspaces') : t('sessions')}>\n <div key={selectedKey ?? 'root'} className={hasMounted ? `ya-level-enter-${direction}` : undefined}>\n {selectedKey === null\n ? workspaceRows.map(row => (\n <WorkspaceItem\n key={row.key}\n row={row}\n enter={() => { setDirection('forward'); setSelectedKey(row.key) }}\n create={() => { if (row.key !== UNGROUPED) startSession(row.key) }}\n rename={() => { beginWorkspaceRename(row) }}\n remove={() => { setDeleteTarget(row); setRenameError(null) }}\n t={t}\n />\n ))\n : selectedKey === UNGROUPED\n ? levelRows.map(row => sessionItem(row, false))\n : levelGroups.flatMap(group => [\n <div key={`group-${group.dateKey}`} className=\"ya-date-group-label\" role=\"separator\">\n {dateGroupLabel(group, now, t)}\n </div>,\n ...group.rows.map(row => sessionItem(row, false)),\n ])}\n {selectedKey === null && workspaceRows.length === 0 && <div className=\"ya-empty\">{t('noWorkspaces')}</div>}\n {selectedKey !== null && levelEmpty && <div className=\"ya-empty\">{t('noSessions')}</div>}\n </div>\n </div>\n </>\n )}\n </div>\n )}\n\n <Modal\n open={workspaceRename !== null || sessionRename !== null}\n onClose={closeRename}\n closeLabel={t('cancel')}\n title={workspaceRename !== null ? t('renameWorkspace') : t('renameSession')}\n footer={(\n <>\n <Button variant=\"outline\" disabled={busy} onClick={closeRename}>{t('cancel')}</Button>\n <Button variant=\"primary\" disabled={busy || renameDraft.trim() === ''} onClick={commitRename}>{t('rename')}</Button>\n </>\n )}\n >\n <input className=\"ya-rename-input\" value={renameDraft} autoFocus disabled={busy} aria-label={workspaceRename !== null ? t('workspaceName') : t('sessionName')} onChange={event => { setRenameDraft(event.target.value); setRenameError(null) }} />\n {renameError !== null && <div className=\"ya-error\" role=\"alert\">{renameError}</div>}\n </Modal>\n\n <Modal\n open={deleteTarget !== null}\n onClose={() => { if (!busy) setDeleteTarget(null) }}\n closeLabel={t('cancel')}\n title={t('deleteWorkspace')}\n description={deleteTarget === null ? undefined : t('deleteDescription', { name: deleteTarget.title })}\n footer={(\n <>\n <Button variant=\"outline\" disabled={busy} onClick={() => { setDeleteTarget(null) }}>{t('cancel')}</Button>\n <Button variant=\"outline\" disabled={busy} onClick={confirmDelete}>{t('deleteWorkspace')}</Button>\n </>\n )}\n >\n {renameError !== null && <div className=\"ya-error\" role=\"alert\">{renameError}</div>}\n </Modal>\n\n <Modal\n open={sessionDeleteTarget !== null}\n onClose={() => { if (!busy) setSessionDeleteTarget(null) }}\n closeLabel={t('cancel')}\n title={t('deleteSessionTitle')}\n description={t('deleteSessionConfirm')}\n footer={(\n <>\n <Button variant=\"outline\" disabled={busy} onClick={() => { setSessionDeleteTarget(null) }}>{t('cancel')}</Button>\n <Button variant=\"outline\" disabled={busy} onClick={confirmSessionDelete}>{t('deleteSession')}</Button>\n </>\n )}\n >\n {renameError !== null && <div className=\"ya-error\" role=\"alert\">{renameError}</div>}\n </Modal>\n </div>\n )\n}\n","/** Client assembly for the replacement workspace sidebar and hero picker. */\nimport type { HostObservable } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-sidebar/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type { PickerInjected, SidebarInjected } from './contract.ts'\nimport { dicts } from './dictionaries.ts'\nimport { en, NS, zh } from './locales.ts'\nimport { installStyles } from './styles.ts'\nimport { WorkspacePicker } from './WorkspacePicker.tsx'\nimport { WorkspaceSidebar } from './WorkspaceSidebar.tsx'\n\n/** Services required by both replacement client entries. */\nexport const inject = ['slots', 'sessions', 'workspaces', 'locale']\n\n/** Register the sidebar browser and conversation hero picker. */\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ya-workspace-sidebar: dictionaries')\n const betterLocale = (ctx as unknown as {\n get(name: string): {\n register(ns: string, dicts: Record<string, Record<string, string>>): () => void\n } | undefined\n }).get('betterLocale')\n if (betterLocale) {\n ctx.effect(() => betterLocale.register(NS, dicts), 'ya-workspace-sidebar: better-locale override dicts')\n }\n ctx.effect(installStyles, 'ya-workspace-sidebar: styles')\n\n const flowSource = (\n name: 'sidebar.workspaces.directoryFlow' | 'conversation.hero.workspace.directoryFlow',\n ): HostObservable<boolean> => ({\n getSnapshot: () => ctx.slots.entries(name).length > 0,\n subscribe: listener => ctx.slots.subscribe(name, listener),\n })\n const sidebarFlow = flowSource('sidebar.workspaces.directoryFlow')\n const pickerFlow = flowSource('conversation.hero.workspace.directoryFlow')\n const createWorkspace = (input: { path: string }) => ctx.workspaces.create(input)\n\n const searchSessions: SidebarInjected['searchSessions'] = async (query, signal) => {\n const result = await ctx.sessions.search(query, signal)\n if (!result.ok) throw new Error(result.error.message)\n return result.value\n }\n const sidebarInjected = (): SidebarInjected => ({\n startSession: workspaceId => { ctx.workspaces.startSession(workspaceId) },\n open: sessionId => { ctx.sessions.open(sessionId) },\n searchSessions,\n searchResultLimit: ctx.sessions.searchResultLimit,\n renameSession: async (sessionId, title) => {\n const session = ctx.sessions.binding(sessionId)?.session\n if (session === undefined) throw new Error(`unknown session \"${sessionId}\"`)\n const result = await session.rename(title)\n if (!result.ok) throw new Error(result.error.message)\n },\n forkSession: sessionId => {\n ctx.sessions.fork({ sessionId, increaseTitle: true })\n .then(childId => { ctx.sessions.open(childId) })\n .catch(() => {})\n },\n renameWorkspace: async (workspaceId, title) => { await ctx.workspaces.rename(workspaceId, title) },\n deleteWorkspace: async workspaceId => { await ctx.workspaces.delete(workspaceId) },\n archiveSession: async sessionId => { await ctx.workspaces.archiveSession(sessionId) },\n insertSessionBefore: async (workspaceId, sessionId, beforeSessionId) => {\n await ctx.workspaces.insertSessionBefore(workspaceId, sessionId, beforeSessionId)\n },\n createWorkspace,\n hooks: { directoryFlow: sidebarFlow },\n })\n const pickerInjected = (): PickerInjected => ({\n createWorkspace,\n hooks: { directoryFlow: pickerFlow },\n })\n\n ctx.slots.inject('sidebar.workspaces', () => ctx.slots.register({\n name: 'sidebar.workspaces',\n children: { 'sidebar.workspaces.directoryFlow': { kind: 'single', scope: 'root' } },\n inject: sidebarInjected,\n locale: NS,\n }, WorkspaceSidebar))\n\n ctx.slots.inject('conversation.hero.workspace', () => ctx.slots.register({\n name: 'conversation.hero.workspace',\n children: { 'conversation.hero.workspace.directoryFlow': { kind: 'single', scope: 'root' } },\n inject: pickerInjected,\n locale: NS,\n }, WorkspacePicker))\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["useState","useCallback","IconPlusOutline16","IconFolderClose16","Menu","Modal","Button","StateDot","useState","IconTrashOutline16","IconArchiveOutline20","Menu","IconEditOutline16","IconBranchOutline16","IconEllipsisOutline16","IconFolderClose16","IconPlusOutline16","IconChevronRightOutline14","useMemo","useRef","IconProjectAddOutline16","IconSearchOutline16","IconCloseFill14","Modal","Button"],"sources":["../src/client/dictionaries.ts","../src/client/locales.ts","../src/client/styles.ts","../src/client/WorkspacePicker.tsx","../src/client/model.ts","../src/client/settings.ts","../src/client/WorkspaceSidebar.tsx","../src/client/index.ts"],"sourcesContent":["/** 19-language override dictionaries for the better-locale store. */\nimport type { YaWorkspaceKey } from './locales.ts'\n\nexport const dicts: Record<string, Record<YaWorkspaceKey, string>> = {\n ja: {\n workspaces: 'ワークスペース',\n sessions: 'セッション',\n recent: '最近のセッション',\n ungrouped: '未分類',\n newSession: '新しいセッション',\n addWorkspace: 'ワークスペースを追加',\n addWorkspaceMenu: 'ワークスペースを追加…',\n search: 'セッションを検索',\n searchPlaceholder: '名前、キーワードで検索…',\n clearSearch: '検索をクリア',\n searching: 'セッション履歴を検索中…',\n searchUnavailable: '内容検索は利用できません。名前の一致のみ表示します。',\n noMatches: '一致するセッションなし',\n noSessions: 'セッションはまだありません',\n noWorkspaces: 'ワークスペースはまだありません',\n loading: 'ワークスペースを読み込み中…',\n rename: '名前を変更',\n renameWorkspace: 'ワークスペースの名前を変更',\n renameSession: 'セッションの名前を変更',\n deleteWorkspace: 'ワークスペースを削除',\n deleteDescription: '「{name}」をワークスペース一覧から削除します。フォルダとセッション履歴は残ります。',\n fork: 'セッションをフォーク',\n archive: 'セッションをアーカイブ',\n archiveMode: 'アーカイブモード',\n deleteMode: '削除モード',\n deleteSession: 'セッションを削除',\n deleteSessionTitle: 'セッションを削除',\n deleteSessionConfirm: 'このセッションを削除しますか?一覧から削除され、元に戻せません。',\n toggleActionMode: 'アーカイブ/削除モードを切り替え',\n actionModeLabel: 'セッション操作',\n cancel: 'キャンセル',\n confirm: '確認',\n retry: '選び直す',\n folderError: 'フォルダを開けませんでした',\n workspaceName: 'ワークスペース名',\n sessionName: 'セッション名',\n count: '{n} 件のセッション',\n now: 'たった今',\n minutes: '{n}分',\n hours: '{n}時間',\n days: '{n}日',\n months: '{n}か月',\n years: '{n}年',\n running: '実行中',\n waiting: '操作待ち',\n completed: '完了',\n collapse: '折りたたむ',\n expand: '展開',\n today: '今日',\n yesterday: '昨日',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n de: {\n workspaces: 'Arbeitsbereiche',\n sessions: 'Sitzungen',\n recent: 'Letzte Sitzungen',\n ungrouped: 'Nicht gruppiert',\n newSession: 'Neue Sitzung',\n addWorkspace: 'Arbeitsbereich hinzufügen',\n addWorkspaceMenu: 'Arbeitsbereich hinzufügen…',\n search: 'Sitzungen durchsuchen',\n searchPlaceholder: 'Name, Stichwörter suchen…',\n clearSearch: 'Suche löschen',\n searching: 'Sitzungsverlauf wird durchsucht…',\n searchUnavailable: 'Inhaltssuche nicht verfügbar. Zeigt Namensübereinstimmungen.',\n noMatches: 'Keine passenden Sitzungen',\n noSessions: 'Noch keine Sitzungen',\n noWorkspaces: 'Noch keine Arbeitsbereiche',\n loading: 'Arbeitsbereiche werden geladen…',\n rename: 'Umbenennen',\n renameWorkspace: 'Arbeitsbereich umbenennen',\n renameSession: 'Sitzung umbenennen',\n deleteWorkspace: 'Arbeitsbereich löschen',\n deleteDescription: '„{name}\" wird aus der Arbeitsbereichsliste entfernt. Ordner und Sitzungsverläufe bleiben erhalten.',\n fork: 'Sitzung forken',\n archive: 'Sitzung archivieren',\n archiveMode: 'Archivmodus',\n deleteMode: 'Löschmodus',\n deleteSession: 'Sitzung löschen',\n deleteSessionTitle: 'Sitzung löschen',\n deleteSessionConfirm: 'Diese Sitzung wirklich löschen? Sie wird aus der Liste entfernt. Dies kann nicht rückgängig gemacht werden.',\n toggleActionMode: 'Archiv-/Löschmodus umschalten',\n actionModeLabel: 'Sitzungsaktion',\n cancel: 'Abbrechen',\n confirm: 'Bestätigen',\n retry: 'Neu wählen',\n folderError: 'Ordner konnte nicht geöffnet werden',\n workspaceName: 'Arbeitsbereichsname',\n sessionName: 'Sitzungsname',\n count: '{n} Sitzungen',\n now: 'gerade eben',\n minutes: '{n} Min',\n hours: '{n} h',\n days: '{n} Tage',\n months: '{n} Mon',\n years: '{n} J',\n running: 'Läuft',\n waiting: 'Wartet auf Eingabe',\n completed: 'Abgeschlossen',\n collapse: 'Einklappen',\n expand: 'Ausklappen',\n today: 'Heute',\n yesterday: 'Gestern',\n date: '{d}.{m}.',\n dateYear: '{d}.{m}.{y}',\n },\n fr: {\n workspaces: 'Espaces de travail',\n sessions: 'Sessions',\n recent: 'Sessions récentes',\n ungrouped: 'Non groupé',\n newSession: 'Nouvelle session',\n addWorkspace: 'Ajouter un espace de travail',\n addWorkspaceMenu: 'Ajouter un espace de travail…',\n search: 'Rechercher des sessions',\n searchPlaceholder: 'Rechercher un nom, des mots-clés…',\n clearSearch: 'Effacer la recherche',\n searching: 'Recherche dans l’historique des sessions…',\n searchUnavailable: 'La recherche de contenu est indisponible. Affichage des correspondances de nom.',\n noMatches: 'Aucune session correspondante',\n noSessions: 'Aucune session pour l’instant',\n noWorkspaces: 'Aucun espace de travail pour l’instant',\n loading: 'Chargement des espaces de travail…',\n rename: 'Renommer',\n renameWorkspace: 'Renommer l’espace de travail',\n renameSession: 'Renommer la session',\n deleteWorkspace: 'Supprimer l’espace de travail',\n deleteDescription: '« {name} » sera retiré de la liste des espaces de travail. Le dossier et l’historique des sessions sont conservés.',\n fork: 'Dupliquer la session',\n archive: 'Archiver la session',\n archiveMode: 'Mode archivage',\n deleteMode: 'Mode suppression',\n deleteSession: 'Supprimer la session',\n deleteSessionTitle: 'Supprimer la session',\n deleteSessionConfirm: 'Voulez-vous vraiment supprimer cette session ? Elle sera retirée de la liste. Cette action est irréversible.',\n toggleActionMode: 'Basculer entre archivage/suppression',\n actionModeLabel: 'Action de session',\n cancel: 'Annuler',\n confirm: 'Confirmer',\n retry: 'Resélectionner',\n folderError: 'Impossible d’ouvrir le dossier',\n workspaceName: 'Nom de l’espace de travail',\n sessionName: 'Nom de la session',\n count: '{n} sessions',\n now: 'à l’instant',\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} j',\n months: '{n} mois',\n years: '{n} ans',\n running: 'En cours',\n waiting: 'En attente d’une action',\n completed: 'Terminé',\n collapse: 'Réduire',\n expand: 'Développer',\n today: 'Aujourd’hui',\n yesterday: 'Hier',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n pt: {\n workspaces: 'Espaços de trabalho',\n sessions: 'Sessões',\n recent: 'Sessões recentes',\n ungrouped: 'Não agrupado',\n newSession: 'Nova sessão',\n addWorkspace: 'Adicionar espaço de trabalho',\n addWorkspaceMenu: 'Adicionar espaço de trabalho…',\n search: 'Pesquisar sessões',\n searchPlaceholder: 'Pesquisar nome, palavras-chave…',\n clearSearch: 'Limpar pesquisa',\n searching: 'Pesquisando histórico de sessões…',\n searchUnavailable: 'A pesquisa de conteúdo está indisponível. Exibindo correspondências de nome.',\n noMatches: 'Nenhuma sessão correspondente',\n noSessions: 'Nenhuma sessão ainda',\n noWorkspaces: 'Nenhum espaço de trabalho ainda',\n loading: 'Carregando espaços de trabalho…',\n rename: 'Renomear',\n renameWorkspace: 'Renomear espaço de trabalho',\n renameSession: 'Renomear sessão',\n deleteWorkspace: 'Excluir espaço de trabalho',\n deleteDescription: 'Isto remove “{name}” da lista de espaços de trabalho. A pasta e os registros de sessão são mantidos.',\n fork: 'Bifurcar sessão',\n archive: 'Arquivar sessão',\n archiveMode: 'Modo de arquivamento',\n deleteMode: 'Modo de exclusão',\n deleteSession: 'Excluir sessão',\n deleteSessionTitle: 'Excluir sessão',\n deleteSessionConfirm: 'Tem certeza de que deseja excluir esta sessão? Ela será removida da lista. Esta ação não pode ser desfeita.',\n toggleActionMode: 'Alternar modo arquivar/excluir',\n actionModeLabel: 'Ação de sessão',\n cancel: 'Cancelar',\n confirm: 'Confirmar',\n retry: 'Escolher novamente',\n folderError: 'Não foi possível abrir a pasta',\n workspaceName: 'Nome do espaço de trabalho',\n sessionName: 'Nome da sessão',\n count: '{n} sessões',\n now: 'agora',\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} d',\n months: '{n} meses',\n years: '{n} anos',\n running: 'Em andamento',\n waiting: 'Aguardando interação',\n completed: 'Concluído',\n collapse: 'Recolher',\n expand: 'Expandir',\n today: 'Hoje',\n yesterday: 'Ontem',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n ko: {\n workspaces: '작업 공간',\n sessions: '세션',\n recent: '최근 세션',\n ungrouped: '그룹 없음',\n newSession: '새 세션',\n addWorkspace: '작업 공간 추가',\n addWorkspaceMenu: '작업 공간 추가…',\n search: '세션 검색',\n searchPlaceholder: '이름, 키워드 검색…',\n clearSearch: '검색 지우기',\n searching: '세션 기록 검색 중…',\n searchUnavailable: '내용 검색을 사용할 수 없습니다. 이름 일치만 표시합니다.',\n noMatches: '일치하는 세션 없음',\n noSessions: '아직 세션이 없습니다',\n noWorkspaces: '아직 작업 공간이 없습니다',\n loading: '작업 공간 불러오는 중…',\n rename: '이름 바꾸기',\n renameWorkspace: '작업 공간 이름 바꾸기',\n renameSession: '세션 이름 바꾸기',\n deleteWorkspace: '작업 공간 삭제',\n deleteDescription: '“{name}”을(를) 작업 공간 목록에서 제거합니다. 폴더와 세션 기록은 유지됩니다.',\n fork: '세션 포크',\n archive: '세션 보관',\n archiveMode: '보관 모드',\n deleteMode: '삭제 모드',\n deleteSession: '세션 삭제',\n deleteSessionTitle: '세션 삭제',\n deleteSessionConfirm: '이 세션을 삭제하시겠습니까? 목록에서 제거되며 되돌릴 수 없습니다.',\n toggleActionMode: '보관/삭제 모드 전환',\n actionModeLabel: '세션 작업',\n cancel: '취소',\n confirm: '확인',\n retry: '다시 선택',\n folderError: '폴더를 열 수 없음',\n workspaceName: '작업 공간 이름',\n sessionName: '세션 이름',\n count: '세션 {n}개',\n now: '방금',\n minutes: '{n}분',\n hours: '{n}시간',\n days: '{n}일',\n months: '{n}개월',\n years: '{n}년',\n running: '진행 중',\n waiting: '상호작용 대기 중',\n completed: '완료됨',\n collapse: '접기',\n expand: '펼치기',\n today: '오늘',\n yesterday: '어제',\n date: '{m}월 {d}일',\n dateYear: '{y}년 {m}월 {d}일',\n },\n ar: {\n workspaces: 'مساحات العمل',\n sessions: 'الجلسات',\n recent: 'الجلسات الأخيرة',\n ungrouped: 'غير مجمّع',\n newSession: 'جلسة جديدة',\n addWorkspace: 'إضافة مساحة عمل',\n addWorkspaceMenu: 'إضافة مساحة عمل…',\n search: 'البحث في الجلسات',\n searchPlaceholder: 'ابحث بالاسم أو الكلمات المفتاحية…',\n clearSearch: 'مسح البحث',\n searching: 'جارٍ البحث في سجل الجلسات…',\n searchUnavailable: 'البحث في المحتوى غير متاح. عرض تطابقات الأسماء فقط.',\n noMatches: 'لا توجد جلسات مطابقة',\n noSessions: 'لا توجد جلسات بعد',\n noWorkspaces: 'لا توجد مساحات عمل بعد',\n loading: 'جارٍ تحميل مساحات العمل…',\n rename: 'إعادة تسمية',\n renameWorkspace: 'إعادة تسمية مساحة العمل',\n renameSession: 'إعادة تسمية الجلسة',\n deleteWorkspace: 'حذف مساحة العمل',\n deleteDescription: 'سيؤدي هذا إلى إزالة \"{name}\" من قائمة مساحات العمل. سيبقى المجلد وسجلات الجلسة محفوظين.',\n fork: 'إنشاء نسخة من الجلسة',\n archive: 'أرشفة الجلسة',\n archiveMode: 'وضع الأرشفة',\n deleteMode: 'وضع الحذف',\n deleteSession: 'حذف الجلسة',\n deleteSessionTitle: 'حذف الجلسة',\n deleteSessionConfirm: 'هل أنت متأكد من حذف هذه الجلسة؟ ستُزال من القائمة ولا يمكن التراجع عن هذا الإجراء.',\n toggleActionMode: 'تبديل وضع الأرشفة/الحذف',\n actionModeLabel: 'إجراء الجلسة',\n cancel: 'إلغاء',\n confirm: 'تأكيد',\n retry: 'إعادة الاختيار',\n folderError: 'تعذّر فتح المجلد',\n workspaceName: 'اسم مساحة العمل',\n sessionName: 'اسم الجلسة',\n count: '{n} جلسات',\n now: 'الآن',\n minutes: '{n} دقيقة',\n hours: '{n} ساعة',\n days: '{n} يوم',\n months: '{n} شهر',\n years: '{n} سنة',\n running: 'قيد التنفيذ',\n waiting: 'بانتظار التفاعل',\n completed: 'مكتمل',\n collapse: 'طي',\n expand: 'توسيع',\n today: 'اليوم',\n yesterday: 'أمس',\n date: '{m}/{d}',\n dateYear: '{m}/{d}/{y}',\n },\n hi: {\n workspaces: 'कार्यक्षेत्र',\n sessions: 'सत्र',\n recent: 'हाल के सत्र',\n ungrouped: 'असमूहीकृत',\n newSession: 'नया सत्र',\n addWorkspace: 'कार्यक्षेत्र जोड़ें',\n addWorkspaceMenu: 'कार्यक्षेत्र जोड़ें…',\n search: 'सत्र खोजें',\n searchPlaceholder: 'नाम, कीवर्ड खोजें…',\n clearSearch: 'खोज साफ़ करें',\n searching: 'सत्र इतिहास खोजा जा रहा है…',\n searchUnavailable: 'सामग्री खोज उपलब्ध नहीं है। केवल नाम मिलान दिखाए जा रहे हैं।',\n noMatches: 'कोई मिलान सत्र नहीं',\n noSessions: 'अभी कोई सत्र नहीं',\n noWorkspaces: 'अभी कोई कार्यक्षेत्र नहीं',\n loading: 'कार्यक्षेत्र लोड हो रहे हैं…',\n rename: 'नाम बदलें',\n renameWorkspace: 'कार्यक्षेत्र का नाम बदलें',\n renameSession: 'सत्र का नाम बदलें',\n deleteWorkspace: 'कार्यक्षेत्र हटाएँ',\n deleteDescription: 'यह \"{name}\" को कार्यक्षेत्र सूची से हटा देगा। फ़ोल्डर और सत्र रिकॉर्ड रहेंगे।',\n fork: 'सत्र फ़ोर्क करें',\n archive: 'सत्र संग्रह करें',\n archiveMode: 'संग्रह मोड',\n deleteMode: 'हटाने का मोड',\n deleteSession: 'सत्र हटाएँ',\n deleteSessionTitle: 'सत्र हटाएँ',\n deleteSessionConfirm: 'क्या आप वाकई इस सत्र को हटाना चाहते हैं? यह सूची से हट जाएगा। इसे पूर्ववत नहीं किया जा सकता।',\n toggleActionMode: 'संग्रह/हटाएँ मोड टॉगल करें',\n actionModeLabel: 'सत्र क्रिया',\n cancel: 'रद्द करें',\n confirm: 'पुष्टि करें',\n retry: 'फिर से चुनें',\n folderError: 'फ़ोल्डर नहीं खोला जा सका',\n workspaceName: 'कार्यक्षेत्र का नाम',\n sessionName: 'सत्र का नाम',\n count: '{n} सत्र',\n now: 'अभी',\n minutes: '{n} मिनट',\n hours: '{n} घंटे',\n days: '{n} दिन',\n months: '{n} महीने',\n years: '{n} वर्ष',\n running: 'चल रहा है',\n waiting: 'इंटरैक्शन की प्रतीक्षा में',\n completed: 'पूर्ण',\n collapse: 'संक्षिप्त करें',\n expand: 'विस्तार करें',\n today: 'आज',\n yesterday: 'कल',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n id: {\n workspaces: 'Ruang kerja',\n sessions: 'Sesi',\n recent: 'Sesi terbaru',\n ungrouped: 'Tidak dikelompokkan',\n newSession: 'Sesi baru',\n addWorkspace: 'Tambah ruang kerja',\n addWorkspaceMenu: 'Tambah ruang kerja…',\n search: 'Cari sesi',\n searchPlaceholder: 'Cari nama, kata kunci…',\n clearSearch: 'Bersihkan pencarian',\n searching: 'Mencari riwayat sesi…',\n searchUnavailable: 'Pencarian konten tidak tersedia. Hanya mencocokkan nama.',\n noMatches: 'Tidak ada sesi yang cocok',\n noSessions: 'Belum ada sesi',\n noWorkspaces: 'Belum ada ruang kerja',\n loading: 'Memuat ruang kerja…',\n rename: 'Ganti nama',\n renameWorkspace: 'Ganti nama ruang kerja',\n renameSession: 'Ganti nama sesi',\n deleteWorkspace: 'Hapus ruang kerja',\n deleteDescription: 'Ini menghapus “{name}” dari daftar ruang kerja. Folder dan riwayat sesi tetap tersimpan.',\n fork: 'Fork sesi',\n archive: 'Arsipkan sesi',\n archiveMode: 'Mode arsip',\n deleteMode: 'Mode hapus',\n deleteSession: 'Hapus sesi',\n deleteSessionTitle: 'Hapus sesi',\n deleteSessionConfirm: 'Yakin ingin menghapus sesi ini? Sesi akan dihapus dari daftar. Tindakan ini tidak dapat dibatalkan.',\n toggleActionMode: 'Ganti mode arsip/hapus',\n actionModeLabel: 'Tindakan sesi',\n cancel: 'Batal',\n confirm: 'Konfirmasi',\n retry: 'Pilih lagi',\n folderError: 'Gagal membuka folder',\n workspaceName: 'Nama ruang kerja',\n sessionName: 'Nama sesi',\n count: '{n} sesi',\n now: 'baru saja',\n minutes: '{n} mnt',\n hours: '{n} jam',\n days: '{n} hari',\n months: '{n} bln',\n years: '{n} thn',\n running: 'Berjalan',\n waiting: 'Menunggu interaksi',\n completed: 'Selesai',\n collapse: 'Ciutkan',\n expand: 'Bentangkan',\n today: 'Hari ini',\n yesterday: 'Kemarin',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n tr: {\n workspaces: 'Çalışma alanları',\n sessions: 'Oturumlar',\n recent: 'Son oturumlar',\n ungrouped: 'Gruplanmamış',\n newSession: 'Yeni oturum',\n addWorkspace: 'Çalışma alanı ekle',\n addWorkspaceMenu: 'Çalışma alanı ekle…',\n search: 'Oturumları ara',\n searchPlaceholder: 'İsim, anahtar kelime ara…',\n clearSearch: 'Aramayı temizle',\n searching: 'Oturum geçmişi aranıyor…',\n searchUnavailable: 'İçerik araması kullanılamıyor. Yalnızca isim eşleşmeleri gösteriliyor.',\n noMatches: 'Eşleşen oturum yok',\n noSessions: 'Henüz oturum yok',\n noWorkspaces: 'Henüz çalışma alanı yok',\n loading: 'Çalışma alanları yükleniyor…',\n rename: 'Yeniden adlandır',\n renameWorkspace: 'Çalışma alanını yeniden adlandır',\n renameSession: 'Oturumu yeniden adlandır',\n deleteWorkspace: 'Çalışma alanını sil',\n deleteDescription: 'Bu, “{name}” öğesini çalışma alanı listesinden kaldırır. Klasör ve oturum kayıtları kalır.',\n fork: 'Oturumu çatalla',\n archive: 'Oturumu arşivle',\n archiveMode: 'Arşiv modu',\n deleteMode: 'Silme modu',\n deleteSession: 'Oturumu sil',\n deleteSessionTitle: 'Oturumu sil',\n deleteSessionConfirm: 'Bu oturumu silmek istediğinize emin misiniz? Listeden kaldırılacaktır. Bu işlem geri alınamaz.',\n toggleActionMode: 'Arşiv/silme modunu değiştir',\n actionModeLabel: 'Oturum işlemi',\n cancel: 'İptal',\n confirm: 'Onayla',\n retry: 'Yeniden seç',\n folderError: 'Klasör açılamadı',\n workspaceName: 'Çalışma alanı adı',\n sessionName: 'Oturum adı',\n count: '{n} oturum',\n now: 'az önce',\n minutes: '{n} dk',\n hours: '{n} sa',\n days: '{n} gün',\n months: '{n} ay',\n years: '{n} yıl',\n running: 'Devam ediyor',\n waiting: 'Etkileşim bekleniyor',\n completed: 'Tamamlandı',\n collapse: 'Daralt',\n expand: 'Genişlet',\n today: 'Bugün',\n yesterday: 'Dün',\n date: '{d}.{m}',\n dateYear: '{d}.{m}.{y}',\n },\n vi: {\n workspaces: 'Không gian làm việc',\n sessions: 'Phiên',\n recent: 'Phiên gần đây',\n ungrouped: 'Chưa nhóm',\n newSession: 'Phiên mới',\n addWorkspace: 'Thêm không gian làm việc',\n addWorkspaceMenu: 'Thêm không gian làm việc…',\n search: 'Tìm kiếm phiên',\n searchPlaceholder: 'Tìm tên, từ khóa…',\n clearSearch: 'Xóa tìm kiếm',\n searching: 'Đang tìm kiếm lịch sử phiên…',\n searchUnavailable: 'Tìm kiếm nội dung không khả dụng. Chỉ hiển thị kết quả khớp tên.',\n noMatches: 'Không có phiên phù hợp',\n noSessions: 'Chưa có phiên nào',\n noWorkspaces: 'Chưa có không gian làm việc nào',\n loading: 'Đang tải không gian làm việc…',\n rename: 'Đổi tên',\n renameWorkspace: 'Đổi tên không gian làm việc',\n renameSession: 'Đổi tên phiên',\n deleteWorkspace: 'Xóa không gian làm việc',\n deleteDescription: 'Thao tác này sẽ xóa “{name}” khỏi danh sách không gian làm việc. Thư mục và nhật ký phiên vẫn được giữ.',\n fork: 'Nhân bản phiên',\n archive: 'Lưu trữ phiên',\n archiveMode: 'Chế độ lưu trữ',\n deleteMode: 'Chế độ xóa',\n deleteSession: 'Xóa phiên',\n deleteSessionTitle: 'Xóa phiên',\n deleteSessionConfirm: 'Bạn có chắc muốn xóa phiên này? Phiên sẽ bị xóa khỏi danh sách. Hành động này không thể hoàn tác.',\n toggleActionMode: 'Chuyển chế độ lưu trữ/xóa',\n actionModeLabel: 'Thao tác phiên',\n cancel: 'Hủy',\n confirm: 'Xác nhận',\n retry: 'Chọn lại',\n folderError: 'Không thể mở thư mục',\n workspaceName: 'Tên không gian làm việc',\n sessionName: 'Tên phiên',\n count: '{n} phiên',\n now: 'vừa xong',\n minutes: '{n} phút',\n hours: '{n} giờ',\n days: '{n} ngày',\n months: '{n} tháng',\n years: '{n} năm',\n running: 'Đang chạy',\n waiting: 'Đang chờ tương tác',\n completed: 'Hoàn tất',\n collapse: 'Thu gọn',\n expand: 'Mở rộng',\n today: 'Hôm nay',\n yesterday: 'Hôm qua',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n th: {\n workspaces: 'พื้นที่ทำงาน',\n sessions: 'เซสชัน',\n recent: 'เซสชันล่าสุด',\n ungrouped: 'ไม่จัดกลุ่ม',\n newSession: 'เซสชันใหม่',\n addWorkspace: 'เพิ่มพื้นที่ทำงาน',\n addWorkspaceMenu: 'เพิ่มพื้นที่ทำงาน…',\n search: 'ค้นหาเซสชัน',\n searchPlaceholder: 'ค้นหาชื่อ คำสำคัญ…',\n clearSearch: 'ล้างการค้นหา',\n searching: 'กำลังค้นหาประวัติเซสชัน…',\n searchUnavailable: 'การค้นหาเนื้อหาไม่พร้อมใช้งาน แสดงเฉพาะชื่อที่ตรงกัน',\n noMatches: 'ไม่พบเซสชันที่ตรงกัน',\n noSessions: 'ยังไม่มีเซสชัน',\n noWorkspaces: 'ยังไม่มีพื้นที่ทำงาน',\n loading: 'กำลังโหลดพื้นที่ทำงาน…',\n rename: 'เปลี่ยนชื่อ',\n renameWorkspace: 'เปลี่ยนชื่อพื้นที่ทำงาน',\n renameSession: 'เปลี่ยนชื่อเซสชัน',\n deleteWorkspace: 'ลบพื้นที่ทำงาน',\n deleteDescription: 'การดำเนินการนี้จะนำ “{name}” ออกจากรายการพื้นที่ทำงาน โฟลเดอร์และบันทึกเซสชันจะยังคงอยู่',\n fork: 'แยกสาขาเซสชัน',\n archive: 'เก็บถาวรเซสชัน',\n archiveMode: 'โหมดเก็บถาวร',\n deleteMode: 'โหมดลบ',\n deleteSession: 'ลบเซสชัน',\n deleteSessionTitle: 'ลบเซสชัน',\n deleteSessionConfirm: 'คุณแน่ใจหรือไม่ว่าต้องการลบเซสชันนี้ จะถูกลบออกจากรายการและไม่สามารถย้อนกลับได้',\n toggleActionMode: 'สลับโหมดเก็บถาวร/ลบ',\n actionModeLabel: 'การจัดการเซสชัน',\n cancel: 'ยกเลิก',\n confirm: 'ยืนยัน',\n retry: 'เลือกใหม่',\n folderError: 'ไม่สามารถเปิดโฟลเดอร์ได้',\n workspaceName: 'ชื่อพื้นที่ทำงาน',\n sessionName: 'ชื่อเซสชัน',\n count: '{n} เซสชัน',\n now: 'เมื่อสักครู่',\n minutes: '{n} นาที',\n hours: '{n} ชั่วโมง',\n days: '{n} วัน',\n months: '{n} เดือน',\n years: '{n} ปี',\n running: 'กำลังดำเนินการ',\n waiting: 'รอปฏิสัมพันธ์',\n completed: 'เสร็จสิ้น',\n collapse: 'ย่อ',\n expand: 'ขยาย',\n today: 'วันนี้',\n yesterday: 'เมื่อวาน',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n ru: {\n workspaces: 'Рабочие области',\n sessions: 'Сеансы',\n recent: 'Недавние сеансы',\n ungrouped: 'Без группы',\n newSession: 'Новый сеанс',\n addWorkspace: 'Добавить рабочую область',\n addWorkspaceMenu: 'Добавить рабочую область…',\n search: 'Поиск сеансов',\n searchPlaceholder: 'Искать по имени, ключевым словам…',\n clearSearch: 'Очистить поиск',\n searching: 'Поиск по истории сеансов…',\n searchUnavailable: 'Поиск по содержимому недоступен. Показываем совпадения по имени.',\n noMatches: 'Нет подходящих сеансов',\n noSessions: 'Пока нет сеансов',\n noWorkspaces: 'Пока нет рабочих областей',\n loading: 'Загрузка рабочих областей…',\n rename: 'Переименовать',\n renameWorkspace: 'Переименовать рабочую область',\n renameSession: 'Переименовать сеанс',\n deleteWorkspace: 'Удалить рабочую область',\n deleteDescription: '«{name}» будет удалён из списка рабочих областей. Папка и записи сеансов сохранятся.',\n fork: 'Ответвить сеанс',\n archive: 'Архивировать сеанс',\n archiveMode: 'Режим архивации',\n deleteMode: 'Режим удаления',\n deleteSession: 'Удалить сеанс',\n deleteSessionTitle: 'Удалить сеанс',\n deleteSessionConfirm: 'Удалить этот сеанс? Он будет убран из списка. Действие необратимо.',\n toggleActionMode: 'Переключить режим архивации/удаления',\n actionModeLabel: 'Действие с сеансом',\n cancel: 'Отмена',\n confirm: 'Подтвердить',\n retry: 'Выбрать заново',\n folderError: 'Не удалось открыть папку',\n workspaceName: 'Название рабочей области',\n sessionName: 'Название сеанса',\n count: '{n} сеансов',\n now: 'только что',\n minutes: '{n} мин',\n hours: '{n} ч',\n days: '{n} дн',\n months: '{n} мес',\n years: '{n} г',\n running: 'Выполняется',\n waiting: 'Ожидает действий',\n completed: 'Завершён',\n collapse: 'Свернуть',\n expand: 'Развернуть',\n today: 'Сегодня',\n yesterday: 'Вчера',\n date: '{d}.{m}',\n dateYear: '{d}.{m}.{y}',\n },\n it: {\n workspaces: 'Aree di lavoro',\n sessions: 'Sessioni',\n recent: 'Sessioni recenti',\n ungrouped: 'Non raggruppati',\n newSession: 'Nuova sessione',\n addWorkspace: 'Aggiungi area di lavoro',\n addWorkspaceMenu: 'Aggiungi area di lavoro…',\n search: 'Cerca sessioni',\n searchPlaceholder: 'Cerca nome, parole chiave…',\n clearSearch: 'Cancella ricerca',\n searching: 'Ricerca nella cronologia delle sessioni…',\n searchUnavailable: 'La ricerca dei contenuti non è disponibile. Visualizzati solo i nomi corrispondenti.',\n noMatches: 'Nessuna sessione corrispondente',\n noSessions: 'Nessuna sessione per ora',\n noWorkspaces: 'Nessuna area di lavoro per ora',\n loading: 'Caricamento aree di lavoro…',\n rename: 'Rinomina',\n renameWorkspace: 'Rinomina area di lavoro',\n renameSession: 'Rinomina sessione',\n deleteWorkspace: 'Elimina area di lavoro',\n deleteDescription: 'Questo rimuove “{name}” dall’elenco delle aree di lavoro. La cartella e i log delle sessioni restano.',\n fork: 'Duplica sessione',\n archive: 'Archivia sessione',\n archiveMode: 'Modalità archivio',\n deleteMode: 'Modalità eliminazione',\n deleteSession: 'Elimina sessione',\n deleteSessionTitle: 'Elimina sessione',\n deleteSessionConfirm: 'Vuoi davvero eliminare questa sessione? Verrà rimossa dall’elenco. L’operazione non può essere annullata.',\n toggleActionMode: 'Commuta modalità archiviazione/eliminazione',\n actionModeLabel: 'Azione sessione',\n cancel: 'Annulla',\n confirm: 'Conferma',\n retry: 'Scegli di nuovo',\n folderError: 'Impossibile aprire la cartella',\n workspaceName: 'Nome area di lavoro',\n sessionName: 'Nome sessione',\n count: '{n} sessioni',\n now: 'adesso',\n minutes: '{n} min',\n hours: '{n} h',\n days: '{n} g',\n months: '{n} mesi',\n years: '{n} anni',\n running: 'In corso',\n waiting: 'In attesa di interazione',\n completed: 'Completata',\n collapse: 'Comprimi',\n expand: 'Espandi',\n today: 'Oggi',\n yesterday: 'Ieri',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n nl: {\n workspaces: 'Werkruimten',\n sessions: 'Sessies',\n recent: 'Recente sessies',\n ungrouped: 'Niet gegroepeerd',\n newSession: 'Nieuwe sessie',\n addWorkspace: 'Werkruimte toevoegen',\n addWorkspaceMenu: 'Werkruimte toevoegen…',\n search: 'Sessies zoeken',\n searchPlaceholder: 'Zoeken op naam, trefwoorden…',\n clearSearch: 'Zoekopdracht wissen',\n searching: 'Sessiegeschiedenis doorzoeken…',\n searchUnavailable: 'Inhoud zoeken is niet beschikbaar. Er worden alleen naamovereenkomsten getoond.',\n noMatches: 'Geen overeenkomende sessies',\n noSessions: 'Nog geen sessies',\n noWorkspaces: 'Nog geen werkruimten',\n loading: 'Werkruimten laden…',\n rename: 'Hernoemen',\n renameWorkspace: 'Werkruimte hernoemen',\n renameSession: 'Sessie hernoemen',\n deleteWorkspace: 'Werkruimte verwijderen',\n deleteDescription: 'Hiermee wordt “{name}” uit de werkruimtelijst verwijderd. De map en sessielogboeken blijven behouden.',\n fork: 'Sessie forken',\n archive: 'Sessie archiveren',\n archiveMode: 'Archiefmodus',\n deleteMode: 'Verwijdermodus',\n deleteSession: 'Sessie verwijderen',\n deleteSessionTitle: 'Sessie verwijderen',\n deleteSessionConfirm: 'Weet je zeker dat je deze sessie wilt verwijderen? Deze wordt uit de lijst verwijderd. Dit kan niet ongedaan worden gemaakt.',\n toggleActionMode: 'Archief-/verwijdermodus wisselen',\n actionModeLabel: 'Sessieactie',\n cancel: 'Annuleren',\n confirm: 'Bevestigen',\n retry: 'Opnieuw kiezen',\n folderError: 'Map kon niet worden geopend',\n workspaceName: 'Naam werkruimte',\n sessionName: 'Naam sessie',\n count: '{n} sessies',\n now: 'zojuist',\n minutes: '{n} min',\n hours: '{n} u',\n days: '{n} d',\n months: '{n} mnd',\n years: '{n} jr',\n running: 'Bezig',\n waiting: 'Wacht op interactie',\n completed: 'Voltooid',\n collapse: 'Inklappen',\n expand: 'Uitklappen',\n today: 'Vandaag',\n yesterday: 'Gisteren',\n date: '{d}-{m}',\n dateYear: '{d}-{m}-{y}',\n },\n sv: {\n workspaces: 'Arbetsytor',\n sessions: 'Sessioner',\n recent: 'Senaste sessionerna',\n ungrouped: 'Ogrupperat',\n newSession: 'Ny session',\n addWorkspace: 'Lägg till arbetsyta',\n addWorkspaceMenu: 'Lägg till arbetsyta…',\n search: 'Sök sessioner',\n searchPlaceholder: 'Sök namn, nyckelord…',\n clearSearch: 'Rensa sökning',\n searching: 'Söker sessionshistorik…',\n searchUnavailable: 'Innehållssökning är inte tillgänglig. Visar endast namnträffar.',\n noMatches: 'Inga matchande sessioner',\n noSessions: 'Inga sessioner ännu',\n noWorkspaces: 'Inga arbetsytor ännu',\n loading: 'Läser in arbetsytor…',\n rename: 'Byt namn',\n renameWorkspace: 'Byt namn på arbetsyta',\n renameSession: 'Byt namn på session',\n deleteWorkspace: 'Ta bort arbetsyta',\n deleteDescription: 'Detta tar bort “{name}” från arbetsytelistan. Mappen och sessionsloggarna behålls.',\n fork: 'Förgrena session',\n archive: 'Arkivera session',\n archiveMode: 'Arkivläge',\n deleteMode: 'Raderingsläge',\n deleteSession: 'Ta bort session',\n deleteSessionTitle: 'Ta bort session',\n deleteSessionConfirm: 'Är du säker på att du vill ta bort denna session? Den tas bort från listan. Detta kan inte ångras.',\n toggleActionMode: 'Växla arkiv-/raderingsläge',\n actionModeLabel: 'Sessionsåtgärd',\n cancel: 'Avbryt',\n confirm: 'Bekräfta',\n retry: 'Välj igen',\n folderError: 'Kunde inte öppna mappen',\n workspaceName: 'Arbetsytans namn',\n sessionName: 'Sessionens namn',\n count: '{n} sessioner',\n now: 'just nu',\n minutes: '{n} min',\n hours: '{n} tim',\n days: '{n} dgr',\n months: '{n} mån',\n years: '{n} år',\n running: 'Pågår',\n waiting: 'Väntar på interaktion',\n completed: 'Slutförd',\n collapse: 'Fäll ihop',\n expand: 'Fäll ut',\n today: 'Idag',\n yesterday: 'Igår',\n date: '{d}/{m}',\n dateYear: '{d}/{m}/{y}',\n },\n pl: {\n workspaces: 'Obszary robocze',\n sessions: 'Sesje',\n recent: 'Ostatnie sesje',\n ungrouped: 'Niezgrupowane',\n newSession: 'Nowa sesja',\n addWorkspace: 'Dodaj obszar roboczy',\n addWorkspaceMenu: 'Dodaj obszar roboczy…',\n search: 'Szukaj sesji',\n searchPlaceholder: 'Szukaj nazwy, słów kluczowych…',\n clearSearch: 'Wyczyść wyszukiwanie',\n searching: 'Trwa przeszukiwanie historii sesji…',\n searchUnavailable: 'Wyszukiwanie treści jest niedostępne. Pokazujemy tylko dopasowania nazw.',\n noMatches: 'Brak pasujących sesji',\n noSessions: 'Brak sesji',\n noWorkspaces: 'Brak obszarów roboczych',\n loading: 'Wczytywanie obszarów roboczych…',\n rename: 'Zmień nazwę',\n renameWorkspace: 'Zmień nazwę obszaru roboczego',\n renameSession: 'Zmień nazwę sesji',\n deleteWorkspace: 'Usuń obszar roboczy',\n deleteDescription: 'Spowoduje usunięcie „{name}” z listy obszarów roboczych. Folder i logi sesji zostaną zachowane.',\n fork: 'Rozwidlij sesję',\n archive: 'Zarchiwizuj sesję',\n archiveMode: 'Tryb archiwizacji',\n deleteMode: 'Tryb usuwania',\n deleteSession: 'Usuń sesję',\n deleteSessionTitle: 'Usuń sesję',\n deleteSessionConfirm: 'Na pewno usunąć tę sesję? Zostanie usunięta z listy. Tej operacji nie można cofnąć.',\n toggleActionMode: 'Przełącz tryb archiwizacji/usuwania',\n actionModeLabel: 'Akcja sesji',\n cancel: 'Anuluj',\n confirm: 'Potwierdź',\n retry: 'Wybierz ponownie',\n folderError: 'Nie można otworzyć folderu',\n workspaceName: 'Nazwa obszaru roboczego',\n sessionName: 'Nazwa sesji',\n count: '{n} sesji',\n now: 'przed chwilą',\n minutes: '{n} min',\n hours: '{n} godz.',\n days: '{n} dni',\n months: '{n} mies.',\n years: '{n} lat',\n running: 'W trakcie',\n waiting: 'Oczekuje na interakcję',\n completed: 'Zakończono',\n collapse: 'Zwiń',\n expand: 'Rozwiń',\n today: 'Dzisiaj',\n yesterday: 'Wczoraj',\n date: '{d}.{m}',\n dateYear: '{d}.{m}.{y}',\n },\n 'zh-HK': {\n workspaces: '工作區',\n sessions: '會話',\n recent: '最近會話',\n ungrouped: '未分組',\n newSession: '新會話',\n addWorkspace: '新增工作區',\n addWorkspaceMenu: '新增工作區…',\n search: '搜尋會話',\n searchPlaceholder: '搜尋名稱、關鍵字…',\n clearSearch: '清除搜尋',\n searching: '正在搜尋會話記錄…',\n searchUnavailable: '內容搜尋暫時無法使用,僅顯示名稱相符項目。',\n noMatches: '無相符會話',\n noSessions: '暫無會話',\n noWorkspaces: '暫無工作區',\n loading: '正在載入工作區…',\n rename: '重新命名',\n renameWorkspace: '重新命名工作區',\n renameSession: '重新命名會話',\n deleteWorkspace: '刪除工作區',\n deleteDescription: '會將「{name}」從工作區清單中移除。資料夾與會話記錄會保留。',\n fork: '分叉會話',\n archive: '封存會話',\n archiveMode: '封存模式',\n deleteMode: '刪除模式',\n deleteSession: '刪除會話',\n deleteSessionTitle: '刪除會話',\n deleteSessionConfirm: '確定要刪除此會話嗎?刪除後會從清單中移除,此操作無法復原。',\n toggleActionMode: '切換封存/刪除模式',\n actionModeLabel: '會話操作',\n cancel: '取消',\n confirm: '確認',\n retry: '重新選擇',\n folderError: '無法開啟資料夾',\n workspaceName: '工作區名稱',\n sessionName: '會話名稱',\n count: '{n} 個會話',\n now: '剛剛',\n minutes: '{n}分鐘',\n hours: '{n}小時',\n days: '{n}天',\n months: '{n}個月',\n years: '{n}年',\n running: '進行中',\n waiting: '等待互動',\n completed: '已完成',\n collapse: '摺疊',\n expand: '展開',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n 'zh-TW': {\n workspaces: '工作區',\n sessions: '對話',\n recent: '最近對話',\n ungrouped: '未分組',\n newSession: '新對話',\n addWorkspace: '新增工作區',\n addWorkspaceMenu: '新增工作區…',\n search: '搜尋對話',\n searchPlaceholder: '搜尋名稱、關鍵字…',\n clearSearch: '清除搜尋',\n searching: '正在搜尋對話紀錄…',\n searchUnavailable: '內容搜尋暫時無法使用,僅顯示名稱相符項目。',\n noMatches: '沒有相符的對話',\n noSessions: '尚無對話',\n noWorkspaces: '尚無工作區',\n loading: '正在載入工作區…',\n rename: '重新命名',\n renameWorkspace: '重新命名工作區',\n renameSession: '重新命名對話',\n deleteWorkspace: '刪除工作區',\n deleteDescription: '會將「{name}」從工作區清單中移除。資料夾與對話紀錄會保留。',\n fork: '分叉對話',\n archive: '封存對話',\n archiveMode: '封存模式',\n deleteMode: '刪除模式',\n deleteSession: '刪除對話',\n deleteSessionTitle: '刪除對話',\n deleteSessionConfirm: '確定要刪除此對話嗎?刪除後會從清單中移除,此操作無法復原。',\n toggleActionMode: '切換封存/刪除模式',\n actionModeLabel: '對話操作',\n cancel: '取消',\n confirm: '確認',\n retry: '重新選擇',\n folderError: '無法開啟資料夾',\n workspaceName: '工作區名稱',\n sessionName: '對話名稱',\n count: '{n} 個對話',\n now: '剛剛',\n minutes: '{n}分鐘',\n hours: '{n}小時',\n days: '{n}天',\n months: '{n}個月',\n years: '{n}年',\n running: '進行中',\n waiting: '等待互動',\n completed: '已完成',\n collapse: '摺疊',\n expand: '展開',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n 'zh-MO': {\n workspaces: '工作區',\n sessions: '會話',\n recent: '最近會話',\n ungrouped: '未分組',\n newSession: '新會話',\n addWorkspace: '新增工作區',\n addWorkspaceMenu: '新增工作區…',\n search: '搜尋會話',\n searchPlaceholder: '搜尋名稱、關鍵字…',\n clearSearch: '清除搜尋',\n searching: '正在搜尋會話記錄…',\n searchUnavailable: '內容搜尋暫時無法使用,僅顯示名稱相符項目。',\n noMatches: '無相符會話',\n noSessions: '暫無會話',\n noWorkspaces: '暫無工作區',\n loading: '正在載入工作區…',\n rename: '重新命名',\n renameWorkspace: '重新命名工作區',\n renameSession: '重新命名會話',\n deleteWorkspace: '刪除工作區',\n deleteDescription: '會將「{name}」從工作區清單中移除。資料夾與會話記錄會保留。',\n fork: '分叉會話',\n archive: '封存會話',\n archiveMode: '封存模式',\n deleteMode: '刪除模式',\n deleteSession: '刪除會話',\n deleteSessionTitle: '刪除會話',\n deleteSessionConfirm: '確定要刪除此會話嗎?刪除後會從清單中移除,此操作無法復原。',\n toggleActionMode: '切換封存/刪除模式',\n actionModeLabel: '會話操作',\n cancel: '取消',\n confirm: '確認',\n retry: '重新選擇',\n folderError: '無法開啟資料夾',\n workspaceName: '工作區名稱',\n sessionName: '會話名稱',\n count: '{n} 個會話',\n now: '剛剛',\n minutes: '{n}分鐘',\n hours: '{n}小時',\n days: '{n}天',\n months: '{n}個月',\n years: '{n}年',\n running: '進行中',\n waiting: '等待互動',\n completed: '已完成',\n collapse: '摺疊',\n expand: '展開',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n },\n}","/** Product copy for the replacement workspace browser. */\nexport const zh = {\n workspaces: '工作区',\n sessions: '会话',\n recent: '最近会话',\n ungrouped: '未分组',\n newSession: '新会话',\n addWorkspace: '添加工作区',\n addWorkspaceMenu: '添加工作区…',\n search: '搜索会话',\n searchPlaceholder: '搜索名称、关键词…',\n clearSearch: '清除搜索',\n searching: '正在搜索会话历史…',\n searchUnavailable: '内容搜索暂不可用,仅显示名称匹配。',\n noMatches: '无匹配会话',\n noSessions: '暂无会话',\n noWorkspaces: '暂无工作区',\n loading: '正在加载工作区…',\n rename: '重命名',\n renameWorkspace: '重命名工作区',\n renameSession: '重命名会话',\n deleteWorkspace: '删除工作区',\n deleteDescription: '将把“{name}”从工作区列表中移除。文件夹与会话记录会保留。',\n fork: '分叉会话',\n archive: '归档会话',\n archiveMode: '归档模式',\n deleteMode: '删除模式',\n deleteSession: '删除会话',\n deleteSessionTitle: '删除会话',\n deleteSessionConfirm: '确定要删除此会话吗?删除后将从列表中移除,此操作不可撤销。',\n toggleActionMode: '切换归档/删除模式',\n actionModeLabel: '会话操作',\n cancel: '取消',\n confirm: '确认',\n retry: '重新选择',\n folderError: '无法打开文件夹',\n workspaceName: '工作区名称',\n sessionName: '会话名称',\n count: '{n} 个会话',\n now: '刚刚',\n minutes: '{n}分钟',\n hours: '{n}小时',\n days: '{n}天',\n months: '{n}个月',\n years: '{n}年',\n running: '进行中',\n waiting: '等待交互',\n completed: '已完成',\n collapse: '折叠',\n expand: '展开',\n today: '今天',\n yesterday: '昨天',\n date: '{m}月{d}日',\n dateYear: '{y}年{m}月{d}日',\n} satisfies Record<string, string>\n\nexport type YaWorkspaceKey = keyof typeof zh\n\nexport const en = {\n workspaces: 'Workspaces',\n sessions: 'Sessions',\n recent: 'Recent Sessions',\n ungrouped: 'Ungrouped',\n newSession: 'New Session',\n addWorkspace: 'Add workspace',\n addWorkspaceMenu: 'Add workspace…',\n search: 'Search sessions',\n searchPlaceholder: 'Search name, keywords...',\n clearSearch: 'Clear search',\n searching: 'Searching session history…',\n searchUnavailable: 'Content search is unavailable. Showing name matches.',\n noMatches: 'No matching sessions',\n noSessions: 'No sessions yet',\n noWorkspaces: 'No workspaces yet',\n loading: 'Loading workspaces…',\n rename: 'Rename',\n renameWorkspace: 'Rename workspace',\n renameSession: 'Rename session',\n deleteWorkspace: 'Delete workspace',\n deleteDescription: 'This removes “{name}” from the workspace list. The folder and session logs remain.',\n fork: 'Fork session',\n archive: 'Archive session',\n archiveMode: 'Archive mode',\n deleteMode: 'Delete mode',\n deleteSession: 'Delete session',\n deleteSessionTitle: 'Delete session',\n deleteSessionConfirm: 'Are you sure you want to delete this session? It will be removed from the list. This cannot be undone.',\n toggleActionMode: 'Toggle archive/delete mode',\n actionModeLabel: 'Session action',\n cancel: 'Cancel',\n confirm: 'Confirm',\n retry: 'Choose again',\n folderError: 'Couldn’t open folder',\n workspaceName: 'Workspace name',\n sessionName: 'Session name',\n count: '{n} sessions',\n now: 'now',\n minutes: '{n}min',\n hours: '{n}h',\n days: '{n}d',\n months: '{n}mo',\n years: '{n}y',\n running: 'Running',\n waiting: 'Waiting for interaction',\n completed: 'Completed',\n collapse: 'Collapse',\n expand: 'Expand',\n today: 'Today',\n yesterday: 'Yesterday',\n date: '{m}/{d}',\n dateYear: '{m}/{d}/{y}',\n} satisfies Record<YaWorkspaceKey, string>\n\nexport const NS = 'ya-workspace-sidebar'\n","/** One scoped stylesheet injected for the lifetime of the client activation. */\nexport const CSS = `\n[data-ya-workspace-sidebar] { flex:1; min-height:0; display:flex; flex-direction:column; box-sizing:border-box; padding-right:var(--dsh-sidebar-inline-padding); color:var(--dsw-alias-label-primary); }\n[data-ya-workspace-sidebar].ya-rail { padding-right:0; }\n.ya-section-header { flex:none; height:36px; display:flex; align-items:center; justify-content:flex-end; gap:4px; padding-left:12px; margin-bottom:4px; box-sizing:border-box; color:var(--dsw-alias-label-tertiary); }\n.ya-section-title { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:14px; }\n.ya-icon-button { flex:none; width:28px; height:28px; border:0; border-radius:50%; padding:0; display:inline-flex; align-items:center; justify-content:center; color:var(--dsw-alias-label-secondary); background:transparent; cursor:pointer; }\n.ya-icon-button:hover { background:var(--dsw-alias-interactive-bg-hover); }\n.ya-search { flex:none; height:38px; margin:0 2px 10px; padding:0 14px; display:flex; align-items:center; gap:8px; box-sizing:border-box; border:1px solid var(--dsw-alias-border-l2); border-radius:24px; background:var(--dsw-static-neutral-bluish-75); color:var(--dsw-alias-label-caption); }\nbody[data-ds-dark-theme] .ya-search { background:var(--dsw-static-neutral-bluish-900); }\n.ya-search-input { flex:1; min-width:0; border:0; outline:0; background:transparent; color:var(--dsw-alias-label-primary); font:inherit; font-size:14px; }\n.ya-search-input::placeholder { color:var(--dsw-alias-label-tertiary); }\n.ya-search-icon { flex:none; display:inline-flex; border:0; padding:0; color:inherit; background:transparent; }\n.ya-body { flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden; margin-right:calc(-1 * var(--dsh-sidebar-inline-padding)); padding-right:var(--dsh-sidebar-inline-padding); }\n.ya-recent { flex:none; padding-bottom:8px; border-bottom:1px solid var(--dsw-alias-border-l2); }\n.ya-recent-collapsed { padding-bottom:0; border-bottom-color:transparent; }\n.ya-recent-list-wrap { display:grid; grid-template-rows:1fr; transition:grid-template-rows 220ms ease-out; }\n.ya-recent-collapsed .ya-recent-list-wrap { grid-template-rows:0fr; }\n.ya-recent-list { display:flex; flex-direction:column; overflow:hidden; min-height:0; }\n.ya-block-label { height:26px; display:flex; align-items:center; gap:2px; padding:0 8px; color:var(--dsw-alias-label-tertiary); font-size:12px; font-weight:600; letter-spacing:.02em; text-transform:uppercase; }\n.ya-block-label-toggle { flex:none; width:20px; height:20px; margin-left:auto; border:0; border-radius:6px; padding:0; display:inline-flex; align-items:center; justify-content:center; background:transparent; color:var(--dsw-alias-label-tertiary); cursor:pointer; transition:transform 180ms ease-out; }\n.ya-block-label-toggle:hover { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-secondary); }\n.ya-block-label-toggle.ya-collapsed { transform:rotate(-90deg); }\n.ya-date-group-label { height:26px; display:flex; align-items:center; padding:0 8px; color:var(--dsw-alias-label-tertiary); font-size:12px; font-weight:600; letter-spacing:.02em; }\n.ya-breadcrumb { flex:none; height:34px; display:flex; align-items:center; gap:2px; padding:0 6px; color:var(--dsw-alias-label-tertiary); font-size:13px; }\n.ya-crumb { border:0; padding:4px 3px; border-radius:6px; background:transparent; color:inherit; font:inherit; cursor:default; min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }\nbutton.ya-crumb:hover { background:var(--dsw-alias-interactive-bg-hover); color:var(--dsw-alias-label-primary); cursor:pointer; }\n.ya-scroll { flex:1; min-height:0; overflow-y:auto; padding-bottom:12px; }\n.ya-row { position:relative; min-height:34px; display:flex; align-items:center; gap:6px; margin:1px 0; padding:0 7px; border-radius:9px; box-sizing:border-box; color:var(--dsw-alias-label-primary); cursor:pointer; user-select:none; }\n.ya-row:hover, .ya-row.ya-menu-open { background:var(--dsw-alias-interactive-bg-hover); }\n.ya-row.ya-selected { background:var(--dsw-alias-interactive-bg-selected); }\n.ya-workspace-row { min-height:40px; }\n.ya-row-main { flex:1; min-width:0; display:flex; flex-direction:column; justify-content:center; }\n.ya-row-line { display:flex; align-items:center; min-width:0; gap:6px; }\n.ya-row-title { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:13px; line-height:18px; }\n.ya-row-meta { flex:none; color:var(--dsw-alias-label-tertiary); font-size:11px; white-space:nowrap; }\n.ya-workspace-path { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--dsw-alias-label-tertiary); font-size:11px; line-height:15px; }\n.ya-row-actions { flex:none; display:flex; align-items:center; gap:2px; opacity:0; pointer-events:none; transition:opacity 120ms ease-out; }\n.ya-row:hover .ya-row-actions, .ya-menu-open .ya-row-actions { opacity:1; pointer-events:auto; }\n.ya-status-slot { flex:none; width:16px; height:16px; display:inline-flex; align-items:center; justify-content:center; color:var(--dsw-alias-label-tertiary); }\n.ya-recent .ya-row { min-height:31px; }\n.ya-search-workspace { color:var(--dsw-alias-label-tertiary); font-size:11px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }\n.ya-empty, .ya-status { padding:18px 10px; color:var(--dsw-alias-label-tertiary); text-align:center; font-size:13px; }\n.ya-warning { color:var(--dsw-alias-status-warning); }\n.ya-rename-input { width:100%; height:38px; box-sizing:border-box; border:1px solid var(--dsw-alias-border-l2); border-radius:9px; padding:0 11px; background:transparent; color:var(--dsw-alias-label-primary); outline:none; }\n.ya-error { margin-top:8px; color:var(--dsw-alias-status-error); font-size:12px; }\n.ya-rail .ya-section-header { padding-left:0; margin-bottom:12px; }\n.ya-rail .ya-icon-button, .ya-rail .ya-search { width:36px; height:36px; padding:0; margin:0 0 12px; border-color:transparent; background:transparent; }\n.ya-rail .ya-search { justify-content:center; }\n.ya-rail .ya-search-icon { cursor:pointer; color:var(--dsw-alias-label-primary); }\n.ya-picker-error { color:var(--dsw-alias-status-error); white-space:pre-wrap; }\n.ya-action-mode-toggle.ya-action-mode-delete { color:var(--dsw-alias-state-error-primary); }\n.ya-action-mode-toggle.ya-action-mode-delete:hover { background:var(--dsw-alias-interactive-bg-hover-danger); }\n@keyframes ya-slide-in-forward { from { opacity:0; transform:translateX(10px); } to { opacity:1; transform:translateX(0); } }\n@keyframes ya-slide-in-backward { from { opacity:0; transform:translateX(-10px); } to { opacity:1; transform:translateX(0); } }\n.ya-level-enter-forward { animation:ya-slide-in-forward 180ms ease-out; }\n.ya-level-enter-backward { animation:ya-slide-in-backward 180ms ease-out; }\n`\n\n/** Install the stylesheet and return its disposer. */\nexport function installStyles(): () => void {\n const style = document.createElement('style')\n style.setAttribute('data-ya-workspace-sidebar-style', '')\n style.textContent = CSS\n document.head.appendChild(style)\n return () => { style.remove() }\n}\n","/** Existing-workspace menu plus composed directory-adoption flow. */\nimport type { ReactNode, RefObject } from 'react'\nimport { useCallback, useEffect, useState } from 'react'\nimport {\n Button, IconFolderClose16, IconPlusOutline16, Menu, Modal, type MenuEntry,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type {\n WorkspaceId, WorkspaceListState, WorkspaceView,\n} from '@deepseek-ai/dsh-client-runtime/client'\nimport type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { DirectoryFlowOwnerProps, PickerProps } from './contract.ts'\n\nconst ADD = '::ya-add-workspace'\n\ninterface FlowProps {\n t: PickerProps['t']\n open: boolean\n anchorRef?: RefObject<HTMLElement | null>\n useWorkspaces: <S>(selector: (state: WorkspaceListState) => S) => S\n createWorkspace: (input: { path: string }) => Promise<WorkspaceView>\n useDirectoryFlow: SnapshotSelectorHook<boolean>\n renderDirectoryFlow: (owner: DirectoryFlowOwnerProps) => ReactNode\n onPick: (workspaceId: WorkspaceId) => void\n onClose: () => void\n addOnly?: boolean\n side?: 'bottom' | 'top' | 'right'\n selectedId?: WorkspaceId\n}\n\n/** Render the workspace target menu and directory picking conversation. */\nexport function WorkspacePickFlow({\n t, open, anchorRef, useWorkspaces, createWorkspace, useDirectoryFlow,\n renderDirectoryFlow, onPick, onClose, addOnly = false, side = 'bottom', selectedId,\n}: FlowProps) {\n const snapshot = useWorkspaces(state => state)\n const flowAvailable = useDirectoryFlow(value => value)\n const [flowOpen, setFlowOpen] = useState(false)\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const getAnchorRect = useCallback(\n () => anchorRef?.current?.getBoundingClientRect() ?? null,\n [anchorRef],\n )\n useEffect(() => {\n if (flowOpen && !flowAvailable) setFlowOpen(false)\n }, [flowAvailable, flowOpen])\n\n const openFlow = useCallback(() => {\n onClose()\n setError(null)\n setFlowOpen(true)\n }, [onClose])\n const addEntries: MenuEntry[] = flowAvailable\n ? [{ id: ADD, label: t('addWorkspaceMenu'), icon: <IconPlusOutline16 size={16} />, disabled: flowOpen || busy }]\n : []\n const pinnedAdd = !addOnly && snapshot.items.length > 0\n const items: MenuEntry[] = pinnedAdd\n ? snapshot.items.map(workspace => ({\n id: workspace.workspaceId,\n label: workspace.title,\n icon: <IconFolderClose16 size={16} />,\n disabled: flowOpen || busy,\n }))\n : addEntries\n const settled = addOnly || snapshot.phase === 'ready'\n const onlyAdd = !pinnedAdd && settled && addEntries.length === 1\n useEffect(() => {\n if (open && onlyAdd && !flowOpen && !busy) openFlow()\n }, [busy, flowOpen, onlyAdd, open, openFlow])\n\n const owner: DirectoryFlowOwnerProps = {\n open: flowOpen,\n busy,\n onPicked: (path) => {\n setBusy(true)\n createWorkspace({ path }).then(workspace => {\n setFlowOpen(false)\n onPick(workspace.workspaceId)\n }).catch((reason: unknown) => {\n setFlowOpen(false)\n setError(reason instanceof Error ? reason.message : String(reason))\n }).finally(() => { setBusy(false) })\n },\n onCancel: () => { setFlowOpen(false) },\n onError: (message) => { setFlowOpen(false); setError(message) },\n }\n\n return (\n <>\n <Menu\n open={open && !onlyAdd && items.length > 0}\n anchor={null}\n items={items}\n {...pinnedAdd ? { footer: addEntries } : {}}\n selectedId={selectedId}\n onSelect={(id) => { if (id === ADD) openFlow(); else onPick(id as WorkspaceId) }}\n onClose={onClose}\n side={side}\n portal\n getAnchorRect={getAnchorRect}\n />\n {open && !onlyAdd && snapshot.phase === 'pending' && <div className=\"ya-status\">{t('loading')}</div>}\n {renderDirectoryFlow(owner)}\n <Modal\n open={error !== null}\n onClose={() => { setError(null) }}\n closeLabel={t('cancel')}\n title={t('folderError')}\n footer={(\n <>\n <Button variant=\"outline\" onClick={() => { setError(null) }}>{t('cancel')}</Button>\n <Button variant=\"primary\" disabled={!flowAvailable} onClick={openFlow}>{t('retry')}</Button>\n </>\n )}\n >\n <div className=\"ya-picker-error\" role=\"alert\">{error}</div>\n </Modal>\n </>\n )\n}\n\n/** Fill the conversation hero's workspace picker seat. */\nexport function WorkspacePicker({\n open, anchorRef, useWorkspaces, selectedId, onPick, onClose,\n createWorkspace, useDirectoryFlow, renderSlot, t,\n}: PickerProps) {\n return (\n <WorkspacePickFlow\n t={t}\n open={open}\n anchorRef={anchorRef}\n useWorkspaces={useWorkspaces}\n selectedId={selectedId}\n onPick={onPick}\n onClose={onClose}\n createWorkspace={createWorkspace}\n useDirectoryFlow={useDirectoryFlow}\n renderDirectoryFlow={owner => renderSlot('conversation.hero.workspace.directoryFlow', owner)}\n />\n )\n}\n","/** Pure sidebar projections shared by the browser and unit tests. */\nimport type {\n SessionId, SessionListState, SessionSummary, WorkspaceId, WorkspaceView,\n} from '@deepseek-ai/dsh-client-runtime/client'\n\n/** Navigation key for sessions not accounted to a real workspace. */\nexport const UNGROUPED = '__ya_ungrouped__' as const\n\n/** One sidebar session row. */\nexport interface SessionRow {\n id: SessionId\n title: string\n blank: boolean\n running: boolean\n pendingInteraction?: SessionSummary['pendingInteraction']\n completed: boolean\n updatedAt: number\n workspaceKey: WorkspaceId | typeof UNGROUPED\n workspaceTitle: string\n}\n\n/** One date-bucketed group of session rows for the real-workspace level. */\nexport interface SessionDateGroup {\n /** Local calendar date `YYYY-MM-DD`, stable key. */\n dateKey: string\n /** Days between today's local date and this group's local date (0=today, 1=yesterday, …). */\n dayOffset: number\n rows: SessionRow[]\n}\n\n/** One first-level workspace row. */\nexport interface WorkspaceRow {\n key: WorkspaceId | typeof UNGROUPED\n title: string\n path?: string\n createdAt?: string\n count: number\n real: boolean\n}\n\nfunction visible(summary: SessionSummary, current: SessionId | undefined, archived: ReadonlySet<SessionId>): boolean {\n return summary.origin !== 'subagent'\n && !archived.has(summary.id)\n && (!summary.blank || summary.id === current)\n}\n\nfunction rowOf(\n summary: SessionSummary,\n workspaceKey: WorkspaceId | typeof UNGROUPED,\n workspaceTitle: string,\n): SessionRow {\n return {\n id: summary.id,\n title: summary.blank ? 'New Session' : summary.displayTitle,\n blank: summary.blank,\n running: summary.running,\n ...(summary.pendingInteraction === undefined ? {} : { pendingInteraction: summary.pendingInteraction }),\n completed: summary.completed === true,\n updatedAt: summary.updatedAt,\n workspaceKey,\n workspaceTitle,\n }\n}\n\nfunction ownerIndex(workspaces: readonly WorkspaceView[]): Map<SessionId, WorkspaceView> {\n const result = new Map<SessionId, WorkspaceView>()\n for (const workspace of workspaces) {\n for (const sessionId of workspace.sessionIds) result.set(sessionId, workspace)\n }\n return result\n}\n\n/** Resolve the first/second-level destination for one session. */\nexport function workspaceKeyForSession(\n sessionId: SessionId | undefined,\n workspaces: readonly WorkspaceView[],\n): WorkspaceId | typeof UNGROUPED | null {\n if (sessionId === undefined) return null\n return ownerIndex(workspaces).get(sessionId)?.workspaceId ?? UNGROUPED\n}\n\n/** Derive global recent sessions, newest first. */\nexport function deriveRecent(\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n limit = 5,\n): SessionRow[] {\n const archived = new Set(archivedSessionIds)\n const owners = ownerIndex(workspaces)\n return list.ids\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined && visible(summary, list.current, archived))\n .sort((a, b) => b.updatedAt - a.updatedAt || String(a.id).localeCompare(String(b.id)))\n .slice(0, limit)\n .map((summary) => {\n const workspace = owners.get(summary.id)\n return rowOf(summary, workspace?.workspaceId ?? UNGROUPED, workspace?.title ?? 'Ungrouped')\n })\n}\n\n/** Derive first-level real workspaces plus the virtual Ungrouped row. */\nexport function deriveWorkspaces(\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n): WorkspaceRow[] {\n const archived = new Set(archivedSessionIds)\n const accounted = new Set<SessionId>()\n const result = workspaces.map((workspace): WorkspaceRow => {\n let count = 0\n for (const id of workspace.sessionIds) {\n accounted.add(id)\n const summary = list.byId[id]\n if (summary !== undefined && visible(summary, list.current, archived)) count++\n }\n return {\n key: workspace.workspaceId,\n title: workspace.title,\n path: workspace.path,\n createdAt: workspace.createdAt,\n count,\n real: true,\n }\n })\n let ungrouped = 0\n for (const id of list.ids) {\n const summary = list.byId[id]\n if (summary !== undefined && !accounted.has(id) && visible(summary, list.current, archived)) ungrouped++\n }\n result.push({ key: UNGROUPED, title: 'Ungrouped', count: ungrouped, real: false })\n return result\n}\n\n/** Derive the selected workspace's sessions in its canonical order. */\nexport function deriveWorkspaceSessions(\n key: WorkspaceId | typeof UNGROUPED,\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n): SessionRow[] {\n const archived = new Set(archivedSessionIds)\n if (key === UNGROUPED) {\n const accounted = new Set(workspaces.flatMap(workspace => workspace.sessionIds))\n return list.ids\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined\n && !accounted.has(summary.id)\n && visible(summary, list.current, archived))\n .sort((a, b) => b.updatedAt - a.updatedAt || String(a.id).localeCompare(String(b.id)))\n .map(summary => rowOf(summary, UNGROUPED, 'Ungrouped'))\n }\n const workspace = workspaces.find(item => item.workspaceId === key)\n if (workspace === undefined) return []\n return workspace.sessionIds\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined && visible(summary, list.current, archived))\n .map(summary => rowOf(summary, workspace.workspaceId, workspace.title))\n}\n\n/** Format a local calendar date as `YYYY-MM-DD` (locale-agnostic, no padding surprises). */\nfunction localDateKey(year: number, month: number, day: number): string {\n const mm = month < 9 ? `0${month + 1}` : `${month + 1}`\n const dd = day < 10 ? `0${day}` : `${day}`\n return `${year}-${mm}-${dd}`\n}\n\n/** Whole-day difference between two local calendar dates (a - b) using UTC midnight. */\nfunction dayDiff(a: { year: number; month: number; day: number }, b: { year: number; month: number; day: number }): number {\n const msA = Date.UTC(a.year, a.month, a.day)\n const msB = Date.UTC(b.year, b.month, b.day)\n return Math.round((msA - msB) / 86_400_000)\n}\n\n/**\n * Derive the selected real workspace's sessions grouped by local calendar date.\n *\n * - Only real workspaces: `Ungrouped` falls back to {@link deriveWorkspaceSessions}.\n * - Groups are ordered by date descending; rows within a group by `updatedAt` descending.\n * - {@link visible} filter is reused (archived / subagent / blank visibility).\n * - Future timestamps clamp to today's bucket (`dayOffset` 0).\n * - `now` is the reference timestamp for \"today\"; pass `Date.now()` in production.\n */\nexport function deriveWorkspaceSessionGroups(\n key: WorkspaceId | typeof UNGROUPED,\n list: SessionListState,\n workspaces: readonly WorkspaceView[],\n archivedSessionIds: readonly SessionId[],\n now: number,\n): SessionDateGroup[] {\n if (key === UNGROUPED) return []\n const workspace = workspaces.find(item => item.workspaceId === key)\n if (workspace === undefined) return []\n const archived = new Set(archivedSessionIds)\n const rows = workspace.sessionIds\n .map(id => list.byId[id])\n .filter((summary): summary is SessionSummary => summary !== undefined && visible(summary, list.current, archived))\n .map(summary => rowOf(summary, workspace.workspaceId, workspace.title))\n if (rows.length === 0) return []\n\n const nowDate = new Date(now)\n const today = { year: nowDate.getFullYear(), month: nowDate.getMonth(), day: nowDate.getDate() }\n\n const buckets = new Map<string, { dayOffset: number; rows: SessionRow[] }>()\n for (const row of rows) {\n const ts = Math.min(row.updatedAt, now)\n const d = new Date(ts)\n const date = { year: d.getFullYear(), month: d.getMonth(), day: d.getDate() }\n const dateKey = localDateKey(date.year, date.month, date.day)\n let bucket = buckets.get(dateKey)\n if (bucket === undefined) {\n // dayOffset = today - date (positive for past dates). Future timestamps were\n // clamped to `now` above, so `date` never exceeds today; Math.max guards rounding noise.\n const offset = Math.max(0, dayDiff(today, date))\n bucket = { dayOffset: offset, rows: [] }\n buckets.set(dateKey, bucket)\n }\n bucket.rows.push(row)\n }\n\n const groups: SessionDateGroup[] = []\n for (const [dateKey, bucket] of buckets) {\n bucket.rows.sort((a, b) => b.updatedAt - a.updatedAt || String(a.id).localeCompare(String(b.id)))\n groups.push({ dateKey, dayOffset: bucket.dayOffset, rows: bucket.rows })\n }\n // Sort groups by date descending: newest date first = smallest dayOffset first.\n groups.sort((a, b) => a.dayOffset - b.dayOffset || a.dateKey.localeCompare(b.dateKey))\n return groups\n}\n\n/** Case-insensitive local title/workspace matching used beside Host content search. */\nexport function localMatches(rows: readonly SessionRow[], query: string): SessionRow[] {\n const normalized = query.trim().toLocaleLowerCase()\n if (normalized === '') return []\n return rows.filter(row => `${row.title}\\n${row.workspaceTitle}`.toLocaleLowerCase().includes(normalized))\n}\n","/**\n * Browser-local preference controlling whether the session row's destructive\n * action presents as Archive (default) or Delete. Delete mode renders the\n * row action red with a trash icon and gates the call behind a confirmation\n * modal; the underlying Host verb remains `archiveSession` (the only\n * session-level destructive API exposed by `ctx.workspaces`), which hides\n * the session from grouping surfaces while preserving its log.\n *\n * The preference is persisted to `localStorage` so it survives reloads and\n * remounts without host-side plumbing. Cross-device sync is intentionally\n * out of scope: this is a per-browser UX preference, not a deployment knob.\n */\n\n/** How the session row's destructive action presents and behaves. */\nexport type SessionActionMode = 'archive' | 'delete'\n\nconst STORAGE_KEY = 'ya-workspace-sidebar:action-mode'\n\nconst listeners = new Set<() => void>()\nlet currentMode: SessionActionMode = loadMode()\n\n/** Read the stored preference, falling back to `archive` on any failure. */\nfunction loadMode(): SessionActionMode {\n try {\n const value = window.localStorage.getItem(STORAGE_KEY)\n return value === 'delete' ? 'delete' : 'archive'\n } catch {\n return 'archive'\n }\n}\n\n/** Persist the preference; silently ignores quota or privacy-mode failures. */\nfunction persistMode(mode: SessionActionMode): void {\n try {\n window.localStorage.setItem(STORAGE_KEY, mode)\n } catch {\n // localStorage may be unavailable (private mode, quota exceeded); the\n // in-memory value still drives the current session.\n }\n}\n\n/** Current action mode snapshot. */\nexport function getActionMode(): SessionActionMode {\n return currentMode\n}\n\n/** Switch the action mode and notify subscribers. */\nexport function setActionMode(mode: SessionActionMode): void {\n if (mode === currentMode) return\n currentMode = mode\n persistMode(mode)\n for (const listener of [...listeners]) listener()\n}\n\n/** Subscribe to action mode changes; returns an unsubscribe disposer. */\nexport function subscribeActionMode(listener: () => void): () => void {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n}\n","/** Two-level workspace/session browser with a persistent global recent block. */\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport {\n Button, IconArchiveOutline20, IconBranchOutline16, IconChevronRightOutline14,\n IconCloseFill14, IconEditOutline16, IconEllipsisOutline16, IconFolderClose16,\n IconPlusOutline16, IconProjectAddOutline16, IconSearchOutline16, IconTrashOutline16,\n Menu, Modal, StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { SessionId, WorkspaceId } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { SidebarProps } from './contract.ts'\nimport {\n deriveRecent, deriveWorkspaceSessionGroups, deriveWorkspaceSessions, deriveWorkspaces,\n localMatches, UNGROUPED, workspaceKeyForSession, type SessionDateGroup, type SessionRow,\n type WorkspaceRow,\n} from './model.ts'\nimport type { SessionActionMode } from './settings.ts'\nimport { getActionMode, setActionMode, subscribeActionMode } from './settings.ts'\nimport { WorkspacePickFlow } from './WorkspacePicker.tsx'\n\nconst SEARCH_DEBOUNCE_MS = 250\nconst SEARCH_MAX = 500\n\nfunction sanitized(value: string): string {\n return value.replaceAll('\\0', '').slice(0, SEARCH_MAX)\n}\n\nfunction relativeTime(updatedAt: number, now: number, t: SidebarProps['t']): string {\n const diff = Math.max(0, now - updatedAt)\n const minute = 60_000\n if (diff < minute) return t('now')\n if (diff < 60 * minute) return t('minutes', { n: Math.floor(diff / minute) })\n if (diff < 24 * 60 * minute) return t('hours', { n: Math.floor(diff / (60 * minute)) })\n if (diff < 30 * 24 * 60 * minute) return t('days', { n: Math.floor(diff / (24 * 60 * minute)) })\n if (diff < 365 * 24 * 60 * minute) return t('months', { n: Math.floor(diff / (30 * 24 * 60 * minute)) })\n return t('years', { n: Math.floor(diff / (365 * 24 * 60 * minute)) })\n}\n\n/** Format a date group's localized title from its dayOffset and `YYYY-MM-DD` key. */\nfunction dateGroupLabel(group: SessionDateGroup, now: number, t: SidebarProps['t']): string {\n if (group.dayOffset === 0) return t('today')\n if (group.dayOffset === 1) return t('yesterday')\n const parts = group.dateKey.split('-')\n const year = Number(parts[0])\n const month = Number(parts[1])\n const day = Number(parts[2])\n const nowDate = new Date(now)\n if (year === nowDate.getFullYear()) return t('date', { m: month, d: day })\n return t('dateYear', { y: year, m: month, d: day })\n}\n\nfunction SessionStatus({ row }: { row: SessionRow }) {\n if (row.pendingInteraction !== undefined) return <StateDot state=\"warning\" />\n if (row.running) return <StateDot state=\"ongoing\" />\n if (row.completed) return <StateDot state=\"done\" />\n return null\n}\n\ninterface SessionRowProps {\n row: SessionRow\n current: SessionId | undefined\n now: number\n open: (id: SessionId) => void\n rename: (row: SessionRow) => void\n fork: (id: SessionId) => void\n archive: (id: SessionId) => void\n t: SidebarProps['t']\n context?: boolean\n actionMode: SessionActionMode\n}\n\nfunction SessionItem({ row, current, now, open, rename, fork, archive, t, context, actionMode }: SessionRowProps) {\n const [menuOpen, setMenuOpen] = useState(false)\n const title = row.blank ? t('newSession') : row.title\n const isDelete = actionMode === 'delete'\n const actionLabel = isDelete ? t('deleteSession') : t('archive')\n const actionIcon = isDelete ? <IconTrashOutline16 /> : <IconArchiveOutline20 size={16} />\n return (\n <div\n className={`ya-row${row.id === current ? ' ya-selected' : ''}${menuOpen ? ' ya-menu-open' : ''}`}\n role=\"treeitem\"\n aria-selected={row.id === current}\n onClick={() => { open(row.id) }}\n >\n <span className=\"ya-status-slot\"><SessionStatus row={row} /></span>\n <span className=\"ya-row-main\">\n <span className=\"ya-row-line\">\n <span className=\"ya-row-title\">{title}</span>\n {!row.blank && <span className=\"ya-row-meta ya-row-time\">{relativeTime(row.updatedAt, now, t)}</span>}\n </span>\n {context === true && <span className=\"ya-search-workspace\">{row.workspaceTitle}</span>}\n </span>\n {!row.blank && (\n <span className=\"ya-row-actions\">\n <Menu\n open={menuOpen}\n onClose={() => { setMenuOpen(false) }}\n items={[\n { id: 'rename', label: t('rename'), icon: <IconEditOutline16 /> },\n { id: 'fork', label: t('fork'), icon: <IconBranchOutline16 /> },\n { id: 'archive', label: actionLabel, icon: actionIcon, danger: isDelete },\n ]}\n onSelect={(id) => {\n setMenuOpen(false)\n if (id === 'rename') rename(row)\n if (id === 'fork') fork(row.id)\n if (id === 'archive') archive(row.id)\n }}\n portal\n closeOnPointerLeave\n anchor={(\n <button\n type=\"button\"\n className=\"ya-icon-button\"\n aria-label={`${title} actions`}\n onClick={(event) => { event.stopPropagation(); setMenuOpen(value => !value) }}\n >\n <IconEllipsisOutline16 />\n </button>\n )}\n />\n </span>\n )}\n </div>\n )\n}\n\nfunction WorkspaceItem({ row, enter, create, rename, remove, t }: {\n row: WorkspaceRow\n enter: () => void\n create: () => void\n rename: () => void\n remove: () => void\n t: SidebarProps['t']\n}) {\n const [menuOpen, setMenuOpen] = useState(false)\n return (\n <div className={`ya-row ya-workspace-row${menuOpen ? ' ya-menu-open' : ''}`} role=\"treeitem\" onClick={enter} title={row.path}>\n <span className=\"ya-status-slot\"><IconFolderClose16 /></span>\n <span className=\"ya-row-main\">\n <span className=\"ya-row-line\">\n <span className=\"ya-row-title\">{row.real ? row.title : t('ungrouped')}</span>\n <span className=\"ya-row-meta\">{t('count', { n: row.count })}</span>\n </span>\n {row.path !== undefined && <span className=\"ya-workspace-path\">{row.path}</span>}\n </span>\n <span className=\"ya-row-actions\">\n {row.real && (\n <Menu\n open={menuOpen}\n onClose={() => { setMenuOpen(false) }}\n items={[\n { id: 'rename', label: t('rename'), icon: <IconEditOutline16 /> },\n { id: 'delete', label: t('deleteWorkspace'), icon: <IconTrashOutline16 />, danger: true },\n ]}\n onSelect={(id) => { setMenuOpen(false); if (id === 'rename') rename(); if (id === 'delete') remove() }}\n portal\n closeOnPointerLeave\n anchor={(\n <button type=\"button\" className=\"ya-icon-button\" onClick={(event) => { event.stopPropagation(); setMenuOpen(value => !value) }}>\n <IconEllipsisOutline16 />\n </button>\n )}\n />\n )}\n {row.real && (\n <button type=\"button\" className=\"ya-icon-button\" onClick={(event) => { event.stopPropagation(); create() }}>\n <IconPlusOutline16 />\n </button>\n )}\n </span>\n <IconChevronRightOutline14 />\n </div>\n )\n}\n\ninterface RemoteState {\n query: string\n status: 'idle' | 'loading' | 'ready' | 'error'\n items: readonly { sessionId: SessionId; snippet: string }[]\n hasMore: boolean\n}\n\n/** Fill `sidebar.workspaces` with the replacement browser. */\nexport function WorkspaceSidebar(props: SidebarProps) {\n const {\n wide, expandSidebar, useSessions, useWorkspaces, startSession, open, searchSessions,\n searchResultLimit, renameSession, forkSession, renameWorkspace, deleteWorkspace,\n archiveSession, createWorkspace, useDirectoryFlow, renderSlot, t,\n } = props\n const sessions = useSessions(state => state)\n const workspaceState = useWorkspaces(state => state)\n const workspaces = workspaceState.items\n const archived = workspaceState.archivedSessionIds\n const directoryFlowAvailable = useDirectoryFlow(value => value)\n const allRows = useMemo(\n () => deriveRecent(sessions, workspaces, archived, Number.MAX_SAFE_INTEGER),\n [archived, sessions, workspaces],\n )\n const recent = allRows.slice(0, 5)\n const workspaceRows = useMemo(\n () => deriveWorkspaces(sessions, workspaces, archived),\n [archived, sessions, workspaces],\n )\n const [selectedKey, setSelectedKey] = useState<WorkspaceId | typeof UNGROUPED | null>(null)\n const [direction, setDirection] = useState<'forward' | 'backward'>('forward')\n const [hasMounted, setHasMounted] = useState(false)\n useEffect(() => { setHasMounted(true) }, [])\n const observedCurrent = useRef<SessionId | undefined>(undefined)\n const initialized = useRef(false)\n useEffect(() => {\n if (initialized.current && observedCurrent.current === sessions.current) return\n initialized.current = true\n observedCurrent.current = sessions.current\n if (sessions.current !== undefined) { setDirection('forward'); setSelectedKey(workspaceKeyForSession(sessions.current, workspaces)) }\n }, [sessions.current, workspaces])\n useEffect(() => {\n if (selectedKey !== null && selectedKey !== UNGROUPED\n && !workspaces.some(workspace => workspace.workspaceId === selectedKey)) setSelectedKey(UNGROUPED)\n }, [selectedKey, workspaces])\n const selectedWorkspace = selectedKey === null || selectedKey === UNGROUPED\n ? undefined\n : workspaces.find(workspace => workspace.workspaceId === selectedKey)\n const now = Date.now()\n // Real workspace level renders date-bucketed groups; Ungrouped keeps the flat recency view.\n const levelGroups = useMemo(\n () => selectedKey !== null && selectedKey !== UNGROUPED\n ? deriveWorkspaceSessionGroups(selectedKey, sessions, workspaces, archived, now)\n : [],\n [archived, sessions, workspaces, selectedKey, now],\n )\n const levelRows = selectedKey === UNGROUPED\n ? deriveWorkspaceSessions(UNGROUPED, sessions, workspaces, archived)\n : []\n const levelEmpty = selectedKey === UNGROUPED ? levelRows.length === 0 : levelGroups.every(g => g.rows.length === 0)\n\n const [query, setQuery] = useState('')\n const normalizedQuery = sanitized(query).trim()\n const [remote, setRemote] = useState<RemoteState>({ query: '', status: 'idle', items: [], hasMore: false })\n useEffect(() => {\n if (normalizedQuery === '') {\n setRemote({ query: '', status: 'idle', items: [], hasMore: false })\n return\n }\n const controller = new AbortController()\n setRemote({ query: normalizedQuery, status: 'loading', items: [], hasMore: false })\n const timer = window.setTimeout(() => {\n searchSessions(normalizedQuery, controller.signal).then(result => {\n if (!controller.signal.aborted) setRemote({ query: normalizedQuery, status: 'ready', items: result.items, hasMore: result.hasMore })\n }).catch(() => {\n if (!controller.signal.aborted) setRemote({ query: normalizedQuery, status: 'error', items: [], hasMore: false })\n })\n }, SEARCH_DEBOUNCE_MS)\n return () => { window.clearTimeout(timer); controller.abort() }\n }, [normalizedQuery, searchSessions])\n const searchRows = useMemo(() => {\n if (normalizedQuery === '') return []\n const byId = new Map(localMatches(allRows, normalizedQuery).map(row => [row.id, row]))\n if (remote.query === normalizedQuery) {\n for (const item of remote.items) {\n const row = allRows.find(candidate => candidate.id === item.sessionId)\n if (row !== undefined) byId.set(row.id, row)\n }\n }\n return [...byId.values()].slice(0, searchResultLimit)\n }, [allRows, normalizedQuery, remote, searchResultLimit])\n\n const [pickerOpen, setPickerOpen] = useState(false)\n const pickerAnchor = useRef<HTMLButtonElement>(null)\n const [recentCollapsed, setRecentCollapsed] = useState(false)\n const [workspaceRename, setWorkspaceRename] = useState<WorkspaceRow | null>(null)\n const [sessionRename, setSessionRename] = useState<SessionRow | null>(null)\n const [renameDraft, setRenameDraft] = useState('')\n const [renameError, setRenameError] = useState<string | null>(null)\n const [busy, setBusy] = useState(false)\n const [deleteTarget, setDeleteTarget] = useState<WorkspaceRow | null>(null)\n const [actionMode, setActionModeState] = useState<SessionActionMode>(() => getActionMode())\n const [sessionDeleteTarget, setSessionDeleteTarget] = useState<SessionRow | null>(null)\n\n useEffect(() => subscribeActionMode(() => setActionModeState(getActionMode())), [])\n\n const beginWorkspaceRename = (row: WorkspaceRow) => { setWorkspaceRename(row); setRenameDraft(row.title); setRenameError(null) }\n const beginSessionRename = (row: SessionRow) => { setSessionRename(row); setRenameDraft(row.title); setRenameError(null) }\n const closeRename = () => { if (!busy) { setWorkspaceRename(null); setSessionRename(null); setRenameError(null) } }\n const commitRename = () => {\n const title = renameDraft.trim()\n if (title === '' || busy) return\n setBusy(true)\n const task = workspaceRename !== null && workspaceRename.key !== UNGROUPED\n ? renameWorkspace(workspaceRename.key, title)\n : sessionRename !== null ? renameSession(sessionRename.id, title) : Promise.resolve()\n task.then(() => { setWorkspaceRename(null); setSessionRename(null) })\n .catch((reason: unknown) => { setRenameError(reason instanceof Error ? reason.message : String(reason)) })\n .finally(() => { setBusy(false) })\n }\n const confirmDelete = () => {\n if (deleteTarget === null || deleteTarget.key === UNGROUPED || busy) return\n setBusy(true)\n deleteWorkspace(deleteTarget.key).then(() => { setDeleteTarget(null) })\n .catch((reason: unknown) => { setRenameError(reason instanceof Error ? reason.message : String(reason)) })\n .finally(() => { setBusy(false) })\n }\n const archive = (id: SessionId) => {\n if (actionMode === 'delete') {\n const row = allRows.find(candidate => candidate.id === id)\n ?? levelRows.find(candidate => candidate.id === id)\n ?? levelGroups.flatMap(g => g.rows).find(candidate => candidate.id === id)\n ?? recent.find(candidate => candidate.id === id)\n setSessionDeleteTarget(row ?? { id, title: '', blank: false, running: false, completed: false, updatedAt: 0, workspaceKey: UNGROUPED, workspaceTitle: '' })\n setRenameError(null)\n return\n }\n archiveSession(id).catch(reason => { console.warn('session archive rejected:', reason) })\n }\n const confirmSessionDelete = () => {\n if (sessionDeleteTarget === null || busy) return\n setBusy(true)\n archiveSession(sessionDeleteTarget.id).then(() => { setSessionDeleteTarget(null) })\n .catch((reason: unknown) => { setRenameError(reason instanceof Error ? reason.message : String(reason)) })\n .finally(() => { setBusy(false) })\n }\n const toggleActionMode = () => { setActionMode(actionMode === 'archive' ? 'delete' : 'archive') }\n const fork = (id: SessionId) => { forkSession(id) }\n\n const sessionItem = (row: SessionRow, context = false) => (\n <SessionItem\n key={row.id}\n row={row}\n current={sessions.current}\n now={now}\n open={open}\n rename={beginSessionRename}\n fork={fork}\n archive={archive}\n t={t}\n context={context}\n actionMode={actionMode}\n />\n )\n\n return (\n <div data-ya-workspace-sidebar className={wide ? '' : 'ya-rail'}>\n <div className=\"ya-section-header\">\n {wide && <span className=\"ya-section-title\">{t('workspaces')}</span>}\n <button\n type=\"button\"\n className={`ya-icon-button ya-action-mode-toggle${actionMode === 'delete' ? ' ya-action-mode-delete' : ''}`}\n aria-label={t('toggleActionMode')}\n aria-pressed={actionMode === 'delete'}\n title={actionMode === 'delete' ? t('deleteMode') : t('archiveMode')}\n onClick={(event) => { event.stopPropagation(); toggleActionMode() }}\n >\n {actionMode === 'delete' ? <IconTrashOutline16 size={wide ? 16 : 18} /> : <IconArchiveOutline20 size={wide ? 16 : 18} />}\n </button>\n {directoryFlowAvailable && (\n <button ref={pickerAnchor} type=\"button\" className=\"ya-icon-button\" aria-label={t('addWorkspace')} onClick={() => { setPickerOpen(value => !value) }}>\n <IconProjectAddOutline16 size={wide ? 16 : 18} />\n </button>\n )}\n <WorkspacePickFlow\n t={t}\n open={pickerOpen}\n anchorRef={pickerAnchor}\n useWorkspaces={useWorkspaces}\n createWorkspace={createWorkspace}\n useDirectoryFlow={useDirectoryFlow}\n renderDirectoryFlow={owner => renderSlot('sidebar.workspaces.directoryFlow', owner)}\n addOnly\n side=\"right\"\n onPick={(workspaceId) => { setPickerOpen(false); startSession(workspaceId) }}\n onClose={() => { setPickerOpen(false) }}\n />\n </div>\n\n <div className=\"ya-search\" onClick={() => { if (!wide) expandSidebar() }}>\n <button type=\"button\" className=\"ya-search-icon\" aria-label={t('search')}><IconSearchOutline16 size={wide ? 14 : 18} /></button>\n {wide && <input className=\"ya-search-input\" value={query} maxLength={SEARCH_MAX} placeholder={t('searchPlaceholder')} onChange={event => { setQuery(sanitized(event.target.value)) }} />}\n {wide && query !== '' && <button type=\"button\" className=\"ya-icon-button\" aria-label={t('clearSearch')} onClick={() => { setQuery('') }}><IconCloseFill14 /></button>}\n </div>\n\n {wide && (\n <div className=\"ya-body\">\n {normalizedQuery !== '' ? (\n <div className=\"ya-scroll\" role=\"tree\" aria-label={t('search')}>\n {searchRows.map(row => sessionItem(row, true))}\n {remote.status === 'loading' && <div className=\"ya-status\">{t('searching')}</div>}\n {remote.status === 'error' && <div className=\"ya-status ya-warning\">{t('searchUnavailable')}</div>}\n {remote.status !== 'loading' && searchRows.length === 0 && <div className=\"ya-empty\">{t('noMatches')}</div>}\n </div>\n ) : (\n <>\n <div className={`ya-recent${recentCollapsed ? ' ya-recent-collapsed' : ''}`}>\n <div className=\"ya-block-label\">\n <span>{t('recent')}</span>\n {recent.length > 0 && (\n <button\n type=\"button\"\n className={`ya-block-label-toggle${recentCollapsed ? ' ya-collapsed' : ''}`}\n aria-label={recentCollapsed ? t('expand') : t('collapse')}\n aria-expanded={!recentCollapsed}\n onClick={(event) => { event.stopPropagation(); setRecentCollapsed(value => !value) }}\n >\n <IconChevronRightOutline14 />\n </button>\n )}\n </div>\n <div className=\"ya-recent-list-wrap\">\n {recent.length === 0\n ? <div className=\"ya-empty\">{t('noSessions')}</div>\n : <div className=\"ya-recent-list\">{recent.map(row => sessionItem(row, true))}</div>\n }\n </div>\n </div>\n <div className=\"ya-breadcrumb\">\n {selectedKey === null ? (\n <span className=\"ya-crumb\">{t('workspaces')}</span>\n ) : (\n <>\n <button type=\"button\" className=\"ya-crumb\" onClick={() => { setDirection('backward'); setSelectedKey(null) }}>{t('workspaces')}</button>\n <IconChevronRightOutline14 />\n <span className=\"ya-crumb\">{selectedKey === UNGROUPED ? t('ungrouped') : selectedWorkspace?.title}</span>\n {selectedKey !== UNGROUPED && (\n <button type=\"button\" className=\"ya-icon-button\" aria-label={t('newSession')} onClick={() => { startSession(selectedKey) }}><IconPlusOutline16 /></button>\n )}\n </>\n )}\n </div>\n <div className=\"ya-scroll\" role=\"tree\" aria-label={selectedKey === null ? t('workspaces') : t('sessions')}>\n <div key={selectedKey ?? 'root'} className={hasMounted ? `ya-level-enter-${direction}` : undefined}>\n {selectedKey === null\n ? workspaceRows.map(row => (\n <WorkspaceItem\n key={row.key}\n row={row}\n enter={() => { setDirection('forward'); setSelectedKey(row.key) }}\n create={() => { if (row.key !== UNGROUPED) startSession(row.key) }}\n rename={() => { beginWorkspaceRename(row) }}\n remove={() => { setDeleteTarget(row); setRenameError(null) }}\n t={t}\n />\n ))\n : selectedKey === UNGROUPED\n ? levelRows.map(row => sessionItem(row, false))\n : levelGroups.flatMap(group => [\n <div key={`group-${group.dateKey}`} className=\"ya-date-group-label\" role=\"separator\">\n {dateGroupLabel(group, now, t)}\n </div>,\n ...group.rows.map(row => sessionItem(row, false)),\n ])}\n {selectedKey === null && workspaceRows.length === 0 && <div className=\"ya-empty\">{t('noWorkspaces')}</div>}\n {selectedKey !== null && levelEmpty && <div className=\"ya-empty\">{t('noSessions')}</div>}\n </div>\n </div>\n </>\n )}\n </div>\n )}\n\n <Modal\n open={workspaceRename !== null || sessionRename !== null}\n onClose={closeRename}\n closeLabel={t('cancel')}\n title={workspaceRename !== null ? t('renameWorkspace') : t('renameSession')}\n footer={(\n <>\n <Button variant=\"outline\" disabled={busy} onClick={closeRename}>{t('cancel')}</Button>\n <Button variant=\"primary\" disabled={busy || renameDraft.trim() === ''} onClick={commitRename}>{t('rename')}</Button>\n </>\n )}\n >\n <input className=\"ya-rename-input\" value={renameDraft} autoFocus disabled={busy} aria-label={workspaceRename !== null ? t('workspaceName') : t('sessionName')} onChange={event => { setRenameDraft(event.target.value); setRenameError(null) }} />\n {renameError !== null && <div className=\"ya-error\" role=\"alert\">{renameError}</div>}\n </Modal>\n\n <Modal\n open={deleteTarget !== null}\n onClose={() => { if (!busy) setDeleteTarget(null) }}\n closeLabel={t('cancel')}\n title={t('deleteWorkspace')}\n description={deleteTarget === null ? undefined : t('deleteDescription', { name: deleteTarget.title })}\n footer={(\n <>\n <Button variant=\"outline\" disabled={busy} onClick={() => { setDeleteTarget(null) }}>{t('cancel')}</Button>\n <Button variant=\"outline\" disabled={busy} onClick={confirmDelete}>{t('deleteWorkspace')}</Button>\n </>\n )}\n >\n {renameError !== null && <div className=\"ya-error\" role=\"alert\">{renameError}</div>}\n </Modal>\n\n <Modal\n open={sessionDeleteTarget !== null}\n onClose={() => { if (!busy) setSessionDeleteTarget(null) }}\n closeLabel={t('cancel')}\n title={t('deleteSessionTitle')}\n description={t('deleteSessionConfirm')}\n footer={(\n <>\n <Button variant=\"outline\" disabled={busy} onClick={() => { setSessionDeleteTarget(null) }}>{t('cancel')}</Button>\n <Button variant=\"outline\" disabled={busy} onClick={confirmSessionDelete}>{t('deleteSession')}</Button>\n </>\n )}\n >\n {renameError !== null && <div className=\"ya-error\" role=\"alert\">{renameError}</div>}\n </Modal>\n </div>\n )\n}\n","/** Client assembly for the replacement workspace sidebar and hero picker. */\nimport type { HostObservable } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-locale/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-sidebar/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type { PickerInjected, SidebarInjected } from './contract.ts'\nimport { dicts } from './dictionaries.ts'\nimport { en, NS, zh } from './locales.ts'\nimport { installStyles } from './styles.ts'\nimport { WorkspacePicker } from './WorkspacePicker.tsx'\nimport { WorkspaceSidebar } from './WorkspaceSidebar.tsx'\n\n/** Services required by both replacement client entries. */\nexport const inject = ['slots', 'sessions', 'workspaces', 'locale']\n\n/** Register the sidebar browser and conversation hero picker. */\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ya-workspace-sidebar: dictionaries')\n ctx.effect(() => {\n let dispose: (() => void) | undefined\n const sync = (): void => {\n dispose?.()\n dispose = undefined\n const store = (ctx as unknown as {\n get(name: string): {\n register(ns: string, dicts: Record<string, Record<string, string>>): () => void\n } | undefined\n }).get('betterLocale')\n if (store !== undefined) {\n dispose = store.register(NS, dicts)\n }\n }\n sync()\n const unsubscribe = (ctx.locale as unknown as { subscribe(fn: () => void): () => void }).subscribe(sync)\n return () => {\n unsubscribe()\n dispose?.()\n }\n }, 'ya-workspace-sidebar: better-locale override dicts')\n ctx.effect(installStyles, 'ya-workspace-sidebar: styles')\n\n const flowSource = (\n name: 'sidebar.workspaces.directoryFlow' | 'conversation.hero.workspace.directoryFlow',\n ): HostObservable<boolean> => ({\n getSnapshot: () => ctx.slots.entries(name).length > 0,\n subscribe: listener => ctx.slots.subscribe(name, listener),\n })\n const sidebarFlow = flowSource('sidebar.workspaces.directoryFlow')\n const pickerFlow = flowSource('conversation.hero.workspace.directoryFlow')\n const createWorkspace = (input: { path: string }) => ctx.workspaces.create(input)\n\n const searchSessions: SidebarInjected['searchSessions'] = async (query, signal) => {\n const result = await ctx.sessions.search(query, signal)\n if (!result.ok) throw new Error(result.error.message)\n return result.value\n }\n const sidebarInjected = (): SidebarInjected => ({\n startSession: workspaceId => { ctx.workspaces.startSession(workspaceId) },\n open: sessionId => { ctx.sessions.open(sessionId) },\n searchSessions,\n searchResultLimit: ctx.sessions.searchResultLimit,\n renameSession: async (sessionId, title) => {\n const session = ctx.sessions.binding(sessionId)?.session\n if (session === undefined) throw new Error(`unknown session \"${sessionId}\"`)\n const result = await session.rename(title)\n if (!result.ok) throw new Error(result.error.message)\n },\n forkSession: sessionId => {\n ctx.sessions.fork({ sessionId, increaseTitle: true })\n .then(childId => { ctx.sessions.open(childId) })\n .catch(() => {})\n },\n renameWorkspace: async (workspaceId, title) => { await ctx.workspaces.rename(workspaceId, title) },\n deleteWorkspace: async workspaceId => { await ctx.workspaces.delete(workspaceId) },\n archiveSession: async sessionId => { await ctx.workspaces.archiveSession(sessionId) },\n insertSessionBefore: async (workspaceId, sessionId, beforeSessionId) => {\n await ctx.workspaces.insertSessionBefore(workspaceId, sessionId, beforeSessionId)\n },\n createWorkspace,\n hooks: { directoryFlow: sidebarFlow },\n })\n const pickerInjected = (): PickerInjected => ({\n createWorkspace,\n hooks: { directoryFlow: pickerFlow },\n })\n\n ctx.slots.inject('sidebar.workspaces', () => ctx.slots.register({\n name: 'sidebar.workspaces',\n children: { 'sidebar.workspaces.directoryFlow': { kind: 'single', scope: 'root' } },\n inject: sidebarInjected,\n locale: NS,\n }, WorkspaceSidebar))\n\n ctx.slots.inject('conversation.hero.workspace', () => ctx.slots.register({\n name: 'conversation.hero.workspace',\n children: { 'conversation.hero.workspace.directoryFlow': { kind: 'single', scope: 'root' } },\n inject: pickerInjected,\n locale: NS,\n }, WorkspacePicker))\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huanlin/dsh-plugin-ya-workspace-sidebar",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },