fix(desktop): recover from macOS directory permission failures

This commit is contained in:
deatheros
2026-08-07 01:49:44 +03:00
parent 7e0e22f6e2
commit d8518bf053
30 changed files with 497 additions and 106 deletions
+6
View File
@@ -1499,6 +1499,10 @@ export const dict = {
'directoryExplorerDialog.browse.directories': 'Verzeichnisse',
'directoryExplorerDialog.browse.loading': 'Lade Verzeichnisse...',
'directoryExplorerDialog.browse.empty': 'Keine passenden Verzeichnisse.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber benötigt Zugriff auf diesen Ordner.',
'directoryExplorerDialog.browse.loadFailed': 'Dieser Ordner konnte nicht geladen werden.',
'directoryExplorerDialog.browse.grantAccess': 'Zugriff gewähren',
'directoryExplorerDialog.browse.retry': 'Erneut versuchen',
'directoryExplorerDialog.browse.parentDirectory': 'Übergeordnetes Verzeichnis',
'directoryExplorerDialog.browse.addedBadge': 'Hinzugefügt',
'directoryExplorerDialog.browse.quickAdd': 'Hinzufügen',
@@ -2924,6 +2928,8 @@ export const dict = {
'sessions.sidebar.group.empty.loadingSessions': 'Sitzungen werden geladen...',
'sessions.sidebar.group.empty.loadFailed': 'Sitzungen konnten nicht geladen werden',
'sessions.sidebar.group.empty.retry': 'Erneut versuchen',
'sessions.sidebar.group.empty.permissionDenied': 'Ordnerzugriff ist erforderlich.',
'sessions.sidebar.group.empty.grantAccess': 'Zugriff gewähren',
'chat.messageBody.actions.pinContext': 'Kontext anheften',
'chat.messageBody.actions.unpinContext': 'Kontext lösen',
'chat.messageBody.actions.contextPinFailed': 'Kontext konnte nicht angeheftet werden',
+6
View File
@@ -1656,6 +1656,10 @@ export const dict = {
'directoryExplorerDialog.browse.directories': 'Directories',
'directoryExplorerDialog.browse.loading': 'Loading directories...',
'directoryExplorerDialog.browse.empty': 'No matching directories.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber needs access to this folder.',
'directoryExplorerDialog.browse.loadFailed': 'Could not load this folder.',
'directoryExplorerDialog.browse.grantAccess': 'Grant access',
'directoryExplorerDialog.browse.retry': 'Try again',
'directoryExplorerDialog.browse.parentDirectory': 'Parent directory',
'directoryExplorerDialog.browse.addedBadge': 'Added',
'directoryExplorerDialog.browse.quickAdd': 'Add',
@@ -2007,6 +2011,8 @@ export const dict = {
'sessions.sidebar.group.empty.loadingSessions': 'Loading sessions…',
'sessions.sidebar.group.empty.loadFailed': 'Could not refresh sessions.',
'sessions.sidebar.group.empty.retry': 'Try again',
'sessions.sidebar.group.empty.permissionDenied': 'Folder access is required.',
'sessions.sidebar.group.empty.grantAccess': 'Grant access',
'chat.unifiedControls.title': 'Controls',
'chat.unifiedControls.model.title': 'Model',
'chat.unifiedControls.model.noRecent': 'No recent models',
+6
View File
@@ -1634,6 +1634,10 @@ export const dict: Record<I18nKey, string> = {
"directoryExplorerDialog.browse.directories": "Directorios",
"directoryExplorerDialog.browse.loading": "Cargando directorios...",
"directoryExplorerDialog.browse.empty": "No hay directorios coincidentes.",
"directoryExplorerDialog.browse.permissionDenied": "OpenChamber necesita acceso a esta carpeta.",
"directoryExplorerDialog.browse.loadFailed": "No se pudo cargar esta carpeta.",
"directoryExplorerDialog.browse.grantAccess": "Permitir acceso",
"directoryExplorerDialog.browse.retry": "Reintentar",
"directoryExplorerDialog.browse.parentDirectory": "Directorio padre",
"directoryExplorerDialog.browse.addedBadge": "Añadido",
"directoryExplorerDialog.browse.quickAdd": "Añadir",
@@ -1985,6 +1989,8 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.group.empty.loadingSessions": "Cargando sesiones…",
"sessions.sidebar.group.empty.loadFailed": "No se pudieron actualizar las sesiones.",
"sessions.sidebar.group.empty.retry": "Reintentar",
"sessions.sidebar.group.empty.permissionDenied": "Se requiere acceso a la carpeta.",
"sessions.sidebar.group.empty.grantAccess": "Permitir acceso",
"chat.unifiedControls.title": "Controles",
"chat.unifiedControls.model.title": "Modelo",
"chat.unifiedControls.model.noRecent": "No hay modelos recientes",
+6
View File
@@ -1469,6 +1469,10 @@ export const dict = {
'directoryExplorerDialog.browse.directories': 'Annuaires',
'directoryExplorerDialog.browse.loading': 'Chargement des répertoires...',
'directoryExplorerDialog.browse.empty': 'Aucun répertoire correspondant.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber doit accéder à ce dossier.',
'directoryExplorerDialog.browse.loadFailed': 'Impossible de charger ce dossier.',
'directoryExplorerDialog.browse.grantAccess': 'Autoriser l’accès',
'directoryExplorerDialog.browse.retry': 'Réessayer',
'directoryExplorerDialog.browse.parentDirectory': 'Annuaire parent',
'directoryExplorerDialog.browse.addedBadge': 'Ajouté',
'directoryExplorerDialog.browse.quickAdd': 'Ajouter',
@@ -1794,6 +1798,8 @@ export const dict = {
'sessions.sidebar.group.empty.loadingSessions': 'Chargement des sessions…',
'sessions.sidebar.group.empty.loadFailed': 'Impossible d’actualiser les sessions.',
'sessions.sidebar.group.empty.retry': 'Réessayer',
'sessions.sidebar.group.empty.permissionDenied': 'L’accès au dossier est requis.',
'sessions.sidebar.group.empty.grantAccess': 'Autoriser l’accès',
'chat.unifiedControls.title': 'Contrôles',
'chat.unifiedControls.model.title': 'Modèle',
'chat.unifiedControls.model.noRecent': 'Aucun modèle récent',
+6
View File
@@ -1652,6 +1652,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': 'ディレクトリ',
'directoryExplorerDialog.browse.loading': 'ディレクトリを読み込み中...',
'directoryExplorerDialog.browse.empty': '一致するディレクトリがありません。',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber がこのフォルダにアクセスする必要があります。',
'directoryExplorerDialog.browse.loadFailed': 'このフォルダを読み込めませんでした。',
'directoryExplorerDialog.browse.grantAccess': 'アクセスを許可',
'directoryExplorerDialog.browse.retry': '再試行',
'directoryExplorerDialog.browse.parentDirectory': '親ディレクトリ',
'directoryExplorerDialog.browse.addedBadge': '追加済み',
'directoryExplorerDialog.browse.quickAdd': '追加',
@@ -2003,6 +2007,8 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.group.empty.loadingSessions': 'セッションを読み込んでいます…',
'sessions.sidebar.group.empty.loadFailed': 'セッションを更新できませんでした。',
'sessions.sidebar.group.empty.retry': '再試行',
'sessions.sidebar.group.empty.permissionDenied': 'フォルダへのアクセスが必要です。',
'sessions.sidebar.group.empty.grantAccess': 'アクセスを許可',
'chat.unifiedControls.title': 'コントロール',
'chat.unifiedControls.model.title': 'モデル',
'chat.unifiedControls.model.noRecent': '最近のモデルはありません',
+6
View File
@@ -1658,6 +1658,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': '디렉터리',
'directoryExplorerDialog.browse.loading': '디렉터리 로드 중...',
'directoryExplorerDialog.browse.empty': '일치하는 디렉터리가 없습니다.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber에서 이 폴더에 접근해야 합니다.',
'directoryExplorerDialog.browse.loadFailed': '이 폴더를 불러올 수 없습니다.',
'directoryExplorerDialog.browse.grantAccess': '접근 허용',
'directoryExplorerDialog.browse.retry': '다시 시도',
'directoryExplorerDialog.browse.parentDirectory': '상위 디렉터리',
'directoryExplorerDialog.browse.addedBadge': '추가됨',
'directoryExplorerDialog.browse.quickAdd': '추가',
@@ -2009,6 +2013,8 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.group.empty.loadingSessions': '세션을 불러오는 중…',
'sessions.sidebar.group.empty.loadFailed': '세션을 새로 고칠 수 없습니다.',
'sessions.sidebar.group.empty.retry': '다시 시도',
'sessions.sidebar.group.empty.permissionDenied': '폴더 접근이 필요합니다.',
'sessions.sidebar.group.empty.grantAccess': '접근 허용',
'chat.unifiedControls.title': '컨트롤',
'chat.unifiedControls.model.title': '모델',
'chat.unifiedControls.model.noRecent': '최근 모델 없음',
+6
View File
@@ -811,6 +811,8 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.group.empty.loadingSessions': 'Wczytywanie sesji…',
'sessions.sidebar.group.empty.loadFailed': 'Nie udało się odświeżyć sesji.',
'sessions.sidebar.group.empty.retry': 'Spróbuj ponownie',
'sessions.sidebar.group.empty.permissionDenied': 'Wymagany jest dostęp do folderu.',
'sessions.sidebar.group.empty.grantAccess': 'Przyznaj dostęp',
'chat.unifiedControls.title': 'Kontrolki',
'chat.unifiedControls.model.title': 'Model',
'chat.unifiedControls.model.noRecent': 'Brak ostatnich modeli',
@@ -1738,6 +1740,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.quickAdd': 'Dodaj',
'directoryExplorerDialog.browse.directories': 'Katalogi',
'directoryExplorerDialog.browse.empty': 'Brak pasujących katalogów.',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber potrzebuje dostępu do tego folderu.',
'directoryExplorerDialog.browse.loadFailed': 'Nie udało się wczytać tego folderu.',
'directoryExplorerDialog.browse.grantAccess': 'Przyznaj dostęp',
'directoryExplorerDialog.browse.retry': 'Spróbuj ponownie',
'directoryExplorerDialog.browse.loading': 'Ładowanie katalogów...',
'directoryExplorerDialog.browse.parentDirectory': 'Katalog nadrzędny',
'directoryExplorerDialog.description': 'Wybierz folder, który chcesz dodać jako projekt.',
@@ -1634,6 +1634,10 @@ export const dict: Record<I18nKey, string> = {
"directoryExplorerDialog.browse.directories": "Diretórios",
"directoryExplorerDialog.browse.loading": "Carregando diretórios...",
"directoryExplorerDialog.browse.empty": "Nenhum diretório correspondente.",
"directoryExplorerDialog.browse.permissionDenied": "OpenChamber precisa acessar esta pasta.",
"directoryExplorerDialog.browse.loadFailed": "Não foi possível carregar esta pasta.",
"directoryExplorerDialog.browse.grantAccess": "Conceder acesso",
"directoryExplorerDialog.browse.retry": "Tentar novamente",
"directoryExplorerDialog.browse.parentDirectory": "Diretório pai",
"directoryExplorerDialog.browse.addedBadge": "Adicionado",
"directoryExplorerDialog.browse.quickAdd": "Adicionar",
@@ -1985,6 +1989,8 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.group.empty.loadingSessions": "Carregando sessões…",
"sessions.sidebar.group.empty.loadFailed": "Não foi possível atualizar as sessões.",
"sessions.sidebar.group.empty.retry": "Tentar novamente",
"sessions.sidebar.group.empty.permissionDenied": "É necessário acesso à pasta.",
"sessions.sidebar.group.empty.grantAccess": "Conceder acesso",
"chat.unifiedControls.title": "Controles",
"chat.unifiedControls.model.title": "Modelo",
"chat.unifiedControls.model.noRecent": "Não há modelos recentes",
+6
View File
@@ -1634,6 +1634,10 @@ export const dict: Record<I18nKey, string> = {
"directoryExplorerDialog.browse.directories": "Каталоги",
"directoryExplorerDialog.browse.loading": "Завантаження каталогів...",
"directoryExplorerDialog.browse.empty": "Немає відповідних каталогів.",
"directoryExplorerDialog.browse.permissionDenied": "OpenChamber потрібен доступ до цієї папки.",
"directoryExplorerDialog.browse.loadFailed": "Не вдалося завантажити цю папку.",
"directoryExplorerDialog.browse.grantAccess": "Надати доступ",
"directoryExplorerDialog.browse.retry": "Спробувати знову",
"directoryExplorerDialog.browse.parentDirectory": "Батьківський каталог",
"directoryExplorerDialog.browse.addedBadge": "Додано",
"directoryExplorerDialog.browse.quickAdd": "Додати",
@@ -1985,6 +1989,8 @@ export const dict: Record<I18nKey, string> = {
"sessions.sidebar.group.empty.loadingSessions": "Завантаження сесій…",
"sessions.sidebar.group.empty.loadFailed": "Не вдалося оновити сесії.",
"sessions.sidebar.group.empty.retry": "Спробувати знову",
"sessions.sidebar.group.empty.permissionDenied": "Потрібен доступ до папки.",
"sessions.sidebar.group.empty.grantAccess": "Надати доступ",
"chat.unifiedControls.title": "Елементи керування",
"chat.unifiedControls.model.title": "Модель",
"chat.unifiedControls.model.noRecent": "Немає останніх моделей",
@@ -1622,6 +1622,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': '目录',
'directoryExplorerDialog.browse.loading': '正在加载目录...',
'directoryExplorerDialog.browse.empty': '没有匹配的目录。',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber 需要访问此文件夹。',
'directoryExplorerDialog.browse.loadFailed': '无法加载此文件夹。',
'directoryExplorerDialog.browse.grantAccess': '授予访问权限',
'directoryExplorerDialog.browse.retry': '重试',
'directoryExplorerDialog.browse.parentDirectory': '上级目录',
'directoryExplorerDialog.browse.addedBadge': '已添加',
'directoryExplorerDialog.browse.quickAdd': '添加',
@@ -1973,6 +1977,8 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.group.empty.loadingSessions': '正在加载会话…',
'sessions.sidebar.group.empty.loadFailed': '无法刷新会话。',
'sessions.sidebar.group.empty.retry': '重试',
'sessions.sidebar.group.empty.permissionDenied': '需要文件夹访问权限。',
'sessions.sidebar.group.empty.grantAccess': '授予访问权限',
'chat.unifiedControls.title': '控制',
'chat.unifiedControls.model.title': '模型',
'chat.unifiedControls.model.noRecent': '没有最近使用的模型',
@@ -1626,6 +1626,10 @@ export const dict: Record<I18nKey, string> = {
'directoryExplorerDialog.browse.directories': '目錄',
'directoryExplorerDialog.browse.loading': '正在載入目錄...',
'directoryExplorerDialog.browse.empty': '沒有符合的目錄。',
'directoryExplorerDialog.browse.permissionDenied': 'OpenChamber 需要存取此資料夾。',
'directoryExplorerDialog.browse.loadFailed': '無法載入此資料夾。',
'directoryExplorerDialog.browse.grantAccess': '授予存取權限',
'directoryExplorerDialog.browse.retry': '再試一次',
'directoryExplorerDialog.browse.parentDirectory': '上層目錄',
'directoryExplorerDialog.browse.addedBadge': '已新增',
'directoryExplorerDialog.browse.quickAdd': '添加',
@@ -1977,6 +1981,8 @@ export const dict: Record<I18nKey, string> = {
'sessions.sidebar.group.empty.loadingSessions': '正在載入工作階段…',
'sessions.sidebar.group.empty.loadFailed': '無法重新整理工作階段。',
'sessions.sidebar.group.empty.retry': '再試一次',
'sessions.sidebar.group.empty.permissionDenied': '需要資料夾存取權限。',
'sessions.sidebar.group.empty.grantAccess': '授予存取權限',
'chat.unifiedControls.title': '控制',
'chat.unifiedControls.model.title': '模型',
'chat.unifiedControls.model.noRecent': '沒有最近使用的模型',