@lobehub/chat 1.97.16 → 1.98.0

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/apps/desktop/package.json +8 -5
  3. package/apps/desktop/src/main/const/store.ts +12 -0
  4. package/apps/desktop/src/main/controllers/NetworkProxyCtr.ts +172 -0
  5. package/apps/desktop/src/main/controllers/__tests__/NetworkProxyCtr.test.ts +401 -0
  6. package/apps/desktop/src/main/core/Browser.ts +2 -0
  7. package/apps/desktop/src/main/modules/networkProxy/dispatcher.ts +116 -0
  8. package/apps/desktop/src/main/modules/networkProxy/index.ts +6 -0
  9. package/apps/desktop/src/main/modules/networkProxy/tester.ts +163 -0
  10. package/apps/desktop/src/main/modules/networkProxy/urlBuilder.ts +25 -0
  11. package/apps/desktop/src/main/modules/networkProxy/validator.ts +80 -0
  12. package/apps/desktop/src/main/types/store.ts +2 -1
  13. package/apps/desktop/src/main/utils/logger.ts +2 -1
  14. package/changelog/v1.json +18 -0
  15. package/locales/ar/electron.json +39 -0
  16. package/locales/ar/setting.json +1 -0
  17. package/locales/bg-BG/electron.json +39 -0
  18. package/locales/bg-BG/setting.json +1 -0
  19. package/locales/de-DE/electron.json +39 -0
  20. package/locales/de-DE/setting.json +1 -0
  21. package/locales/en-US/electron.json +39 -0
  22. package/locales/en-US/setting.json +1 -0
  23. package/locales/es-ES/electron.json +39 -0
  24. package/locales/es-ES/setting.json +1 -0
  25. package/locales/fa-IR/electron.json +39 -0
  26. package/locales/fa-IR/setting.json +1 -0
  27. package/locales/fr-FR/electron.json +39 -0
  28. package/locales/fr-FR/setting.json +1 -0
  29. package/locales/it-IT/electron.json +39 -0
  30. package/locales/it-IT/setting.json +1 -0
  31. package/locales/ja-JP/electron.json +39 -0
  32. package/locales/ja-JP/setting.json +1 -0
  33. package/locales/ko-KR/electron.json +39 -0
  34. package/locales/ko-KR/setting.json +1 -0
  35. package/locales/nl-NL/electron.json +39 -0
  36. package/locales/nl-NL/setting.json +1 -0
  37. package/locales/pl-PL/electron.json +39 -0
  38. package/locales/pl-PL/setting.json +1 -0
  39. package/locales/pt-BR/electron.json +39 -0
  40. package/locales/pt-BR/setting.json +1 -0
  41. package/locales/ru-RU/electron.json +39 -0
  42. package/locales/ru-RU/setting.json +1 -0
  43. package/locales/tr-TR/electron.json +39 -0
  44. package/locales/tr-TR/setting.json +1 -0
  45. package/locales/vi-VN/electron.json +39 -0
  46. package/locales/vi-VN/setting.json +1 -0
  47. package/locales/zh-CN/electron.json +39 -0
  48. package/locales/zh-CN/setting.json +1 -0
  49. package/locales/zh-TW/electron.json +39 -0
  50. package/locales/zh-TW/setting.json +1 -0
  51. package/package.json +3 -3
  52. package/packages/electron-client-ipc/src/events/index.ts +3 -1
  53. package/packages/electron-client-ipc/src/events/settings.ts +12 -0
  54. package/packages/electron-client-ipc/src/types/index.ts +1 -0
  55. package/packages/electron-client-ipc/src/types/proxy.ts +12 -0
  56. package/src/app/[variants]/(main)/settings/hooks/useCategory.tsx +11 -1
  57. package/src/app/[variants]/(main)/settings/proxy/features/ProxyForm.tsx +369 -0
  58. package/src/app/[variants]/(main)/settings/proxy/index.tsx +22 -0
  59. package/src/app/[variants]/(main)/settings/proxy/page.tsx +28 -0
  60. package/src/config/aiModels/google.ts +15 -26
  61. package/src/config/aiModels/groq.ts +0 -16
  62. package/src/config/aiModels/hunyuan.ts +79 -1
  63. package/src/config/aiModels/novita.ts +50 -56
  64. package/src/config/aiModels/qwen.ts +10 -32
  65. package/src/config/aiModels/siliconcloud.ts +111 -86
  66. package/src/config/aiModels/zhipu.ts +74 -12
  67. package/src/config/modelProviders/zhipu.ts +1 -2
  68. package/src/libs/model-runtime/hunyuan/index.ts +9 -1
  69. package/src/locales/default/electron.ts +39 -0
  70. package/src/locales/default/setting.ts +1 -0
  71. package/src/services/electron/settings.ts +33 -0
  72. package/src/store/electron/actions/settings.ts +55 -0
  73. package/src/store/electron/initialState.ts +12 -1
  74. package/src/store/electron/selectors/__tests__/desktopState.test.ts +3 -1
  75. package/src/store/electron/store.ts +4 -1
  76. package/src/store/global/initialState.ts +1 -0
  77. package/apps/desktop/scripts/pglite-server.ts +0 -14
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "인증 필요",
4
+ "authDesc": "프록시 서버가 사용자 이름과 비밀번호를 요구하는 경우",
5
+ "authSettings": "인증 설정",
6
+ "basicSettings": "프록시 설정",
7
+ "basicSettingsDesc": "프록시 서버 연결 매개변수 구성",
8
+ "bypass": "프록시를 사용하지 않는 주소",
9
+ "connectionTest": "연결 테스트",
10
+ "enable": "프록시 활성화",
11
+ "enableDesc": "활성화하면 프록시 서버를 통해 네트워크에 접속합니다",
12
+ "password": "비밀번호",
13
+ "password_placeholder": "비밀번호를 입력하세요",
14
+ "port": "포트",
15
+ "resetButton": "재설정",
16
+ "saveButton": "저장",
17
+ "saveFailed": "저장 실패: {{error}}",
18
+ "saveSuccess": "프록시 설정이 성공적으로 저장되었습니다",
19
+ "server": "서버 주소",
20
+ "testButton": "연결 테스트",
21
+ "testDescription": "현재 프록시 구성을 사용하여 연결을 테스트하고 구성이 정상 작동하는지 확인합니다",
22
+ "testFailed": "연결 실패",
23
+ "testSuccessWithTime": "연결 테스트 성공, 소요 시간 {{time}} ms",
24
+ "testUrl": "테스트 주소",
25
+ "testUrlPlaceholder": "테스트할 URL을 입력하세요",
26
+ "testing": "연결 테스트 중...",
27
+ "type": "프록시 유형",
28
+ "unsavedChanges": "저장하지 않은 변경 사항이 있습니다",
29
+ "username": "사용자 이름",
30
+ "username_placeholder": "사용자 이름을 입력하세요",
31
+ "validation": {
32
+ "passwordRequired": "인증 활성화 시 비밀번호는 필수 항목입니다",
33
+ "portInvalid": "포트는 1에서 65535 사이의 숫자여야 합니다",
34
+ "portRequired": "프록시 활성화 시 포트는 필수 항목입니다",
35
+ "serverInvalid": "유효한 서버 주소(IP 또는 도메인)를 입력하세요",
36
+ "serverRequired": "프록시 활성화 시 서버 주소는 필수 항목입니다",
37
+ "typeRequired": "프록시 활성화 시 프록시 유형은 필수 항목입니다",
38
+ "usernameRequired": "인증 활성화 시 사용자 이름은 필수 항목입니다"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "인증 실패: {{error}}",
4
43
  "authPending": "브라우저에서 인증을 완료하세요",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "단축키",
521
521
  "llm": "언어 모델",
522
522
  "provider": "AI 서비스 제공자",
523
+ "proxy": "네트워크 프록시",
523
524
  "storage": "데이터 저장소",
524
525
  "sync": "클라우드 동기화",
525
526
  "system-agent": "시스템 도우미",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "Authenticatie vereist",
4
+ "authDesc": "Als de proxyserver een gebruikersnaam en wachtwoord vereist",
5
+ "authSettings": "Authenticatie-instellingen",
6
+ "basicSettings": "Proxy-instellingen",
7
+ "basicSettingsDesc": "Configureer de verbindingsparameters van de proxyserver",
8
+ "bypass": "Adressen zonder proxy",
9
+ "connectionTest": "Verbindingstest",
10
+ "enable": "Proxy inschakelen",
11
+ "enableDesc": "Als ingeschakeld wordt het netwerk via de proxyserver benaderd",
12
+ "password": "Wachtwoord",
13
+ "password_placeholder": "Voer wachtwoord in",
14
+ "port": "Poort",
15
+ "resetButton": "Resetten",
16
+ "saveButton": "Opslaan",
17
+ "saveFailed": "Opslaan mislukt: {{error}}",
18
+ "saveSuccess": "Proxy-instellingen succesvol opgeslagen",
19
+ "server": "Serveradres",
20
+ "testButton": "Test verbinding",
21
+ "testDescription": "Test de verbinding met de huidige proxyconfiguratie om te verifiëren of de instellingen correct werken",
22
+ "testFailed": "Verbinding mislukt",
23
+ "testSuccessWithTime": "Verbindingstest geslaagd, duurde {{time}} ms",
24
+ "testUrl": "Testadres",
25
+ "testUrlPlaceholder": "Voer de te testen URL in",
26
+ "testing": "Verbinding aan het testen...",
27
+ "type": "Proxy type",
28
+ "unsavedChanges": "U heeft niet-opgeslagen wijzigingen",
29
+ "username": "Gebruikersnaam",
30
+ "username_placeholder": "Voer gebruikersnaam in",
31
+ "validation": {
32
+ "passwordRequired": "Wachtwoord is verplicht bij ingeschakelde authenticatie",
33
+ "portInvalid": "Poort moet een getal tussen 1 en 65535 zijn",
34
+ "portRequired": "Poort is verplicht bij ingeschakelde proxy",
35
+ "serverInvalid": "Voer een geldig serveradres in (IP of domeinnaam)",
36
+ "serverRequired": "Serveradres is verplicht bij ingeschakelde proxy",
37
+ "typeRequired": "Proxytype is verplicht bij ingeschakelde proxy",
38
+ "usernameRequired": "Gebruikersnaam is verplicht bij ingeschakelde authenticatie"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "Autorisatiefout: {{error}}",
4
43
  "authPending": "Voltooi de autorisatie in de browser",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "Sneltoetsen",
521
521
  "llm": "Taalmodel",
522
522
  "provider": "AI-dienstverlener",
523
+ "proxy": "Netwerkproxy",
523
524
  "storage": "Gegevensopslag",
524
525
  "sync": "Cloudsynchronisatie",
525
526
  "system-agent": "Systeemassistent",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "Wymagana autoryzacja",
4
+ "authDesc": "Jeśli serwer proxy wymaga nazwy użytkownika i hasła",
5
+ "authSettings": "Ustawienia uwierzytelniania",
6
+ "basicSettings": "Ustawienia proxy",
7
+ "basicSettingsDesc": "Konfiguracja parametrów połączenia serwera proxy",
8
+ "bypass": "Adresy, które nie używają proxy",
9
+ "connectionTest": "Test połączenia",
10
+ "enable": "Włącz proxy",
11
+ "enableDesc": "Po włączeniu dostęp do sieci będzie realizowany przez serwer proxy",
12
+ "password": "Hasło",
13
+ "password_placeholder": "Wprowadź hasło",
14
+ "port": "Port",
15
+ "resetButton": "Resetuj",
16
+ "saveButton": "Zapisz",
17
+ "saveFailed": "Zapis nie powiódł się: {{error}}",
18
+ "saveSuccess": "Ustawienia proxy zostały pomyślnie zapisane",
19
+ "server": "Adres serwera",
20
+ "testButton": "Testuj połączenie",
21
+ "testDescription": "Testuj połączenie za pomocą bieżącej konfiguracji proxy, aby zweryfikować poprawność ustawień",
22
+ "testFailed": "Połączenie nie powiodło się",
23
+ "testSuccessWithTime": "Test połączenia zakończony sukcesem, czas trwania {{time}} ms",
24
+ "testUrl": "Adres testowy",
25
+ "testUrlPlaceholder": "Wprowadź adres URL do przetestowania",
26
+ "testing": "Testowanie połączenia...",
27
+ "type": "Typ proxy",
28
+ "unsavedChanges": "Masz niezapisane zmiany",
29
+ "username": "Nazwa użytkownika",
30
+ "username_placeholder": "Wprowadź nazwę użytkownika",
31
+ "validation": {
32
+ "passwordRequired": "Hasło jest wymagane, gdy uwierzytelnianie jest włączone",
33
+ "portInvalid": "Port musi być liczbą z zakresu od 1 do 65535",
34
+ "portRequired": "Port jest wymagany, gdy proxy jest włączone",
35
+ "serverInvalid": "Wprowadź poprawny adres serwera (IP lub nazwa domeny)",
36
+ "serverRequired": "Adres serwera jest wymagany, gdy proxy jest włączone",
37
+ "typeRequired": "Typ proxy jest wymagany, gdy proxy jest włączone",
38
+ "usernameRequired": "Nazwa użytkownika jest wymagana, gdy uwierzytelnianie jest włączone"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "Błąd autoryzacji: {{error}}",
4
43
  "authPending": "Proszę zakończyć autoryzację w przeglądarce",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "Skróty klawiszowe",
521
521
  "llm": "Model językowy",
522
522
  "provider": "Dostawca usług AI",
523
+ "proxy": "Proxy sieciowy",
523
524
  "storage": "Przechowywanie danych",
524
525
  "sync": "Synchronizacja w chmurze",
525
526
  "system-agent": "System Agent",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "Autenticação necessária",
4
+ "authDesc": "Se o servidor proxy requer nome de usuário e senha",
5
+ "authSettings": "Configurações de autenticação",
6
+ "basicSettings": "Configurações do proxy",
7
+ "basicSettingsDesc": "Configure os parâmetros de conexão do servidor proxy",
8
+ "bypass": "Endereços que não usam proxy",
9
+ "connectionTest": "Teste de conexão",
10
+ "enable": "Ativar proxy",
11
+ "enableDesc": "Quando ativado, o acesso à rede será feito através do servidor proxy",
12
+ "password": "Senha",
13
+ "password_placeholder": "Digite a senha",
14
+ "port": "Porta",
15
+ "resetButton": "Redefinir",
16
+ "saveButton": "Salvar",
17
+ "saveFailed": "Falha ao salvar: {{error}}",
18
+ "saveSuccess": "Configurações do proxy salvas com sucesso",
19
+ "server": "Endereço do servidor",
20
+ "testButton": "Testar conexão",
21
+ "testDescription": "Teste a conexão usando a configuração atual do proxy para verificar se está funcionando corretamente",
22
+ "testFailed": "Falha na conexão",
23
+ "testSuccessWithTime": "Conexão testada com sucesso, tempo gasto {{time}} ms",
24
+ "testUrl": "URL de teste",
25
+ "testUrlPlaceholder": "Digite a URL a ser testada",
26
+ "testing": "Testando conexão...",
27
+ "type": "Tipo de proxy",
28
+ "unsavedChanges": "Você tem alterações não salvas",
29
+ "username": "Nome de usuário",
30
+ "username_placeholder": "Digite o nome de usuário",
31
+ "validation": {
32
+ "passwordRequired": "Senha é obrigatória quando a autenticação está ativada",
33
+ "portInvalid": "A porta deve ser um número entre 1 e 65535",
34
+ "portRequired": "Porta é obrigatória quando o proxy está ativado",
35
+ "serverInvalid": "Por favor, insira um endereço de servidor válido (IP ou domínio)",
36
+ "serverRequired": "Endereço do servidor é obrigatório quando o proxy está ativado",
37
+ "typeRequired": "Tipo de proxy é obrigatório quando o proxy está ativado",
38
+ "usernameRequired": "Nome de usuário é obrigatório quando a autenticação está ativada"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "Erro de autorização: {{error}}",
4
43
  "authPending": "Por favor, complete a autorização no navegador",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "Atalhos",
521
521
  "llm": "Modelo de Linguagem",
522
522
  "provider": "Fornecedor de IA",
523
+ "proxy": "Proxy de Rede",
523
524
  "storage": "Armazenamento de Dados",
524
525
  "sync": "Sincronização na nuvem",
525
526
  "system-agent": "Assistente do Sistema",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "Требуется аутентификация",
4
+ "authDesc": "Если прокси-сервер требует имя пользователя и пароль",
5
+ "authSettings": "Настройки аутентификации",
6
+ "basicSettings": "Настройки прокси",
7
+ "basicSettingsDesc": "Настройка параметров подключения к прокси-серверу",
8
+ "bypass": "Адреса без прокси",
9
+ "connectionTest": "Тест подключения",
10
+ "enable": "Включить прокси",
11
+ "enableDesc": "При включении доступ в интернет будет осуществляться через прокси-сервер",
12
+ "password": "Пароль",
13
+ "password_placeholder": "Введите пароль",
14
+ "port": "Порт",
15
+ "resetButton": "Сбросить",
16
+ "saveButton": "Сохранить",
17
+ "saveFailed": "Ошибка сохранения: {{error}}",
18
+ "saveSuccess": "Настройки прокси успешно сохранены",
19
+ "server": "Адрес сервера",
20
+ "testButton": "Проверить соединение",
21
+ "testDescription": "Тестирование подключения с использованием текущих настроек прокси для проверки корректности конфигурации",
22
+ "testFailed": "Подключение не удалось",
23
+ "testSuccessWithTime": "Подключение успешно, время выполнения {{time}} мс",
24
+ "testUrl": "Тестовый адрес",
25
+ "testUrlPlaceholder": "Введите URL для тестирования",
26
+ "testing": "Проверка соединения...",
27
+ "type": "Тип прокси",
28
+ "unsavedChanges": "У вас есть несохранённые изменения",
29
+ "username": "Имя пользователя",
30
+ "username_placeholder": "Введите имя пользователя",
31
+ "validation": {
32
+ "passwordRequired": "Пароль обязателен при включенной аутентификации",
33
+ "portInvalid": "Порт должен быть числом от 1 до 65535",
34
+ "portRequired": "Порт обязателен при включенном прокси",
35
+ "serverInvalid": "Пожалуйста, введите корректный адрес сервера (IP или доменное имя)",
36
+ "serverRequired": "Адрес сервера обязателен при включенном прокси",
37
+ "typeRequired": "Тип прокси обязателен при включенном прокси",
38
+ "usernameRequired": "Имя пользователя обязательно при включенной аутентификации"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "Ошибка авторизации: {{error}}",
4
43
  "authPending": "Пожалуйста, завершите авторизацию в браузере",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "Горячие клавиши",
521
521
  "llm": "Языковая модель",
522
522
  "provider": "Поставщик ИИ услуг",
523
+ "proxy": "Сетевой прокси",
523
524
  "storage": "Хранение данных",
524
525
  "sync": "Синхронизация с облаком",
525
526
  "system-agent": "Системный агент",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "Kimlik doğrulama gerekli",
4
+ "authDesc": "Eğer proxy sunucusu kullanıcı adı ve şifre gerektiriyorsa",
5
+ "authSettings": "Kimlik Doğrulama Ayarları",
6
+ "basicSettings": "Proxy Ayarları",
7
+ "basicSettingsDesc": "Proxy sunucusunun bağlantı parametrelerini yapılandırın",
8
+ "bypass": "Proxy kullanılmayacak adresler",
9
+ "connectionTest": "Bağlantı Testi",
10
+ "enable": "Proxy'yi etkinleştir",
11
+ "enableDesc": "Etkinleştirildiğinde, ağ erişimi proxy sunucusu üzerinden yapılacaktır",
12
+ "password": "Şifre",
13
+ "password_placeholder": "Şifrenizi girin",
14
+ "port": "Port",
15
+ "resetButton": "Sıfırla",
16
+ "saveButton": "Kaydet",
17
+ "saveFailed": "Kaydetme başarısız: {{error}}",
18
+ "saveSuccess": "Proxy ayarları başarıyla kaydedildi",
19
+ "server": "Sunucu adresi",
20
+ "testButton": "Bağlantıyı test et",
21
+ "testDescription": "Mevcut proxy yapılandırmasını kullanarak bağlantıyı test edin, yapılandırmanın düzgün çalıştığını doğrulayın",
22
+ "testFailed": "Bağlantı başarısız",
23
+ "testSuccessWithTime": "Bağlantı testi başarılı, geçen süre {{time}} ms",
24
+ "testUrl": "Test adresi",
25
+ "testUrlPlaceholder": "Test etmek için URL girin",
26
+ "testing": "Bağlantı test ediliyor...",
27
+ "type": "Proxy türü",
28
+ "unsavedChanges": "Kaydedilmemiş değişiklikleriniz var",
29
+ "username": "Kullanıcı adı",
30
+ "username_placeholder": "Kullanıcı adınızı girin",
31
+ "validation": {
32
+ "passwordRequired": "Kimlik doğrulama etkinleştirildiğinde şifre zorunludur",
33
+ "portInvalid": "Port numarası 1 ile 65535 arasında olmalıdır",
34
+ "portRequired": "Proxy etkinleştirildiğinde port zorunludur",
35
+ "serverInvalid": "Geçerli bir sunucu adresi (IP veya alan adı) giriniz",
36
+ "serverRequired": "Proxy etkinleştirildiğinde sunucu adresi zorunludur",
37
+ "typeRequired": "Proxy etkinleştirildiğinde proxy türü zorunludur",
38
+ "usernameRequired": "Kimlik doğrulama etkinleştirildiğinde kullanıcı adı zorunludur"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "Yetkilendirme hatası: {{error}}",
4
43
  "authPending": "Yetkilendirmeyi tarayıcıda tamamlayın",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "Kısayollar",
521
521
  "llm": "Modeller",
522
522
  "provider": "Yapay Zeka Hizmet Sağlayıcısı",
523
+ "proxy": "Ağ Proxy",
523
524
  "storage": "Veri Depolama",
524
525
  "sync": "Bulut Senkronizasyonu",
525
526
  "system-agent": "Sistem Asistanı",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "Cần xác thực",
4
+ "authDesc": "Nếu máy chủ proxy yêu cầu tên đăng nhập và mật khẩu",
5
+ "authSettings": "Cài đặt xác thực",
6
+ "basicSettings": "Cài đặt proxy",
7
+ "basicSettingsDesc": "Cấu hình các tham số kết nối của máy chủ proxy",
8
+ "bypass": "Địa chỉ không sử dụng proxy",
9
+ "connectionTest": "Kiểm tra kết nối",
10
+ "enable": "Bật proxy",
11
+ "enableDesc": "Khi bật, truy cập mạng sẽ thông qua máy chủ proxy",
12
+ "password": "Mật khẩu",
13
+ "password_placeholder": "Vui lòng nhập mật khẩu",
14
+ "port": "Cổng",
15
+ "resetButton": "Đặt lại",
16
+ "saveButton": "Lưu",
17
+ "saveFailed": "Lưu thất bại: {{error}}",
18
+ "saveSuccess": "Lưu cài đặt proxy thành công",
19
+ "server": "Địa chỉ máy chủ",
20
+ "testButton": "Kiểm tra kết nối",
21
+ "testDescription": "Sử dụng cấu hình proxy hiện tại để kiểm tra kết nối, xác nhận cấu hình hoạt động bình thường",
22
+ "testFailed": "Kết nối thất bại",
23
+ "testSuccessWithTime": "Kiểm tra kết nối thành công, thời gian: {{time}} ms",
24
+ "testUrl": "Địa chỉ kiểm tra",
25
+ "testUrlPlaceholder": "Vui lòng nhập URL cần kiểm tra",
26
+ "testing": "Đang kiểm tra kết nối...",
27
+ "type": "Loại proxy",
28
+ "unsavedChanges": "Bạn có các thay đổi chưa được lưu",
29
+ "username": "Tên người dùng",
30
+ "username_placeholder": "Vui lòng nhập tên người dùng",
31
+ "validation": {
32
+ "passwordRequired": "Mật khẩu là bắt buộc khi bật xác thực",
33
+ "portInvalid": "Cổng phải là số từ 1 đến 65535",
34
+ "portRequired": "Cổng là bắt buộc khi bật proxy",
35
+ "serverInvalid": "Vui lòng nhập địa chỉ máy chủ hợp lệ (IP hoặc tên miền)",
36
+ "serverRequired": "Địa chỉ máy chủ là bắt buộc khi bật proxy",
37
+ "typeRequired": "Loại proxy là bắt buộc khi bật proxy",
38
+ "usernameRequired": "Tên đăng nhập là bắt buộc khi bật xác thực"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "Xác thực thất bại: {{error}}",
4
43
  "authPending": "Vui lòng hoàn tất xác thực trong trình duyệt",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "Phím tắt",
521
521
  "llm": "Mô hình ngôn ngữ",
522
522
  "provider": "Nhà cung cấp AI",
523
+ "proxy": "Mạng proxy",
523
524
  "storage": "Lưu trữ dữ liệu",
524
525
  "sync": "Đồng bộ trên đám mây",
525
526
  "system-agent": "Trợ lý hệ thống",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "需要认证",
4
+ "authDesc": "如果代理服务器需要用户名和密码",
5
+ "authSettings": "认证设置",
6
+ "basicSettings": "代理设置",
7
+ "basicSettingsDesc": "配置代理服务器的连接参数",
8
+ "bypass": "不使用代理的地址",
9
+ "connectionTest": "连接测试",
10
+ "enable": "启用代理",
11
+ "enableDesc": "开启后将通过代理服务器访问网络",
12
+ "password": "密码",
13
+ "password_placeholder": "请输入密码",
14
+ "port": "端口",
15
+ "resetButton": "重置",
16
+ "saveButton": "保存",
17
+ "saveFailed": "保存失败:{{error}}",
18
+ "saveSuccess": "代理设置保存成功",
19
+ "server": "服务器地址",
20
+ "testButton": "测试连接",
21
+ "testDescription": "使用当前代理配置测试连接,验证配置是否正常工作",
22
+ "testFailed": "连接失败",
23
+ "testSuccessWithTime": "测试连接成功,耗时 {{time}} ms",
24
+ "testUrl": "测试地址",
25
+ "testUrlPlaceholder": "请输入要测试的 URL",
26
+ "testing": "正在测试连接...",
27
+ "type": "代理类型",
28
+ "unsavedChanges": "您有未保存的更改",
29
+ "username": "用户名",
30
+ "username_placeholder": "请输入用户名",
31
+ "validation": {
32
+ "passwordRequired": "启用认证时密码为必填项",
33
+ "portInvalid": "端口必须是 1 到 65535 之间的数字",
34
+ "portRequired": "启用代理时端口为必填项",
35
+ "serverInvalid": "请输入有效的服务器地址(IP 或域名)",
36
+ "serverRequired": "启用代理时服务器地址为必填项",
37
+ "typeRequired": "启用代理时代理类型为必填项",
38
+ "usernameRequired": "启用认证时用户名为必填项"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "授权失败: {{error}}",
4
43
  "authPending": "请在浏览器中完成授权",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "快捷键",
521
521
  "llm": "语言模型",
522
522
  "provider": "AI 服务商",
523
+ "proxy": "网络代理",
523
524
  "storage": "数据存储",
524
525
  "sync": "云端同步",
525
526
  "system-agent": "系统助手",
@@ -1,4 +1,43 @@
1
1
  {
2
+ "proxy": {
3
+ "auth": "需要認證",
4
+ "authDesc": "如果代理伺服器需要使用者名稱和密碼",
5
+ "authSettings": "認證設定",
6
+ "basicSettings": "代理設定",
7
+ "basicSettingsDesc": "配置代理伺服器的連線參數",
8
+ "bypass": "不使用代理的地址",
9
+ "connectionTest": "連線測試",
10
+ "enable": "啟用代理",
11
+ "enableDesc": "開啟後將透過代理伺服器存取網路",
12
+ "password": "密碼",
13
+ "password_placeholder": "請輸入密碼",
14
+ "port": "埠號",
15
+ "resetButton": "重設",
16
+ "saveButton": "儲存",
17
+ "saveFailed": "儲存失敗:{{error}}",
18
+ "saveSuccess": "代理設定儲存成功",
19
+ "server": "伺服器地址",
20
+ "testButton": "測試連接",
21
+ "testDescription": "使用目前代理設定測試連線,驗證設定是否正常運作",
22
+ "testFailed": "連線失敗",
23
+ "testSuccessWithTime": "測試連線成功,耗時 {{time}} 毫秒",
24
+ "testUrl": "測試地址",
25
+ "testUrlPlaceholder": "請輸入要測試的 URL",
26
+ "testing": "正在測試連接...",
27
+ "type": "代理類型",
28
+ "unsavedChanges": "您有未儲存的變更",
29
+ "username": "使用者名稱",
30
+ "username_placeholder": "請輸入使用者名稱",
31
+ "validation": {
32
+ "passwordRequired": "啟用認證時密碼為必填項",
33
+ "portInvalid": "連接埠必須是 1 到 65535 之間的數字",
34
+ "portRequired": "啟用代理時連接埠為必填項",
35
+ "serverInvalid": "請輸入有效的伺服器位址(IP 或網域名稱)",
36
+ "serverRequired": "啟用代理時伺服器位址為必填項",
37
+ "typeRequired": "啟用代理時代理類型為必填項",
38
+ "usernameRequired": "啟用認證時使用者名稱為必填項"
39
+ }
40
+ },
2
41
  "remoteServer": {
3
42
  "authError": "授權失敗: {{error}}",
4
43
  "authPending": "請在瀏覽器中完成授權",
@@ -520,6 +520,7 @@
520
520
  "hotkey": "快速鍵",
521
521
  "llm": "語言模型",
522
522
  "provider": "AI 服務商",
523
+ "proxy": "網路代理",
523
524
  "storage": "資料儲存",
524
525
  "sync": "雲端同步",
525
526
  "system-agent": "系統助手",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/chat",
3
- "version": "1.97.16",
3
+ "version": "1.98.0",
4
4
  "description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -118,7 +118,7 @@
118
118
  "dependencies": {
119
119
  "@ant-design/icons": "^5.6.1",
120
120
  "@ant-design/pro-components": "^2.8.7",
121
- "@anthropic-ai/sdk": "^0.54.0",
121
+ "@anthropic-ai/sdk": "^0.56.0",
122
122
  "@auth/core": "^0.38.0",
123
123
  "@aws-sdk/client-bedrock-runtime": "^3.821.0",
124
124
  "@aws-sdk/client-s3": "^3.821.0",
@@ -199,7 +199,7 @@
199
199
  "langfuse": "^3.37.3",
200
200
  "langfuse-core": "^3.37.3",
201
201
  "lodash-es": "^4.17.21",
202
- "lucide-react": "^0.522.0",
202
+ "lucide-react": "^0.525.0",
203
203
  "mammoth": "^1.9.1",
204
204
  "markdown-to-txt": "^2.0.1",
205
205
  "mdast-util-to-markdown": "^2.1.2",
@@ -1,6 +1,7 @@
1
1
  import { LocalFilesDispatchEvents } from './localFile';
2
2
  import { MenuDispatchEvents } from './menu';
3
3
  import { RemoteServerBroadcastEvents, RemoteServerDispatchEvents } from './remoteServer';
4
+ import { DesktopSettingsDispatchEvents } from './settings';
4
5
  import { ShortcutDispatchEvents } from './shortcut';
5
6
  import { SystemBroadcastEvents, SystemDispatchEvents } from './system';
6
7
  import { TrayDispatchEvents } from './tray';
@@ -21,7 +22,8 @@ export interface ClientDispatchEvents
21
22
  ShortcutDispatchEvents,
22
23
  RemoteServerDispatchEvents,
23
24
  UploadFilesDispatchEvents,
24
- TrayDispatchEvents {}
25
+ TrayDispatchEvents,
26
+ DesktopSettingsDispatchEvents {}
25
27
 
26
28
  export type ClientDispatchEventKey = keyof ClientDispatchEvents;
27
29
 
@@ -0,0 +1,12 @@
1
+ import { NetworkProxySettings } from '../types';
2
+
3
+ export interface DesktopSettingsDispatchEvents {
4
+ getProxySettings: () => NetworkProxySettings;
5
+ setProxySettings: (settings: Partial<NetworkProxySettings>) => void;
6
+ testProxyConfig: (data: { config: NetworkProxySettings; testUrl?: string }) => Promise<{
7
+ message?: string;
8
+ responseTime?: number;
9
+ success: boolean;
10
+ }>;
11
+ testProxyConnection: (url: string) => Promise<{ message?: string; success: boolean }>;
12
+ }
@@ -1,6 +1,7 @@
1
1
  export * from './dataSync';
2
2
  export * from './dispatch';
3
3
  export * from './localFile';
4
+ export * from './proxy';
4
5
  export * from './proxyTRPCRequest';
5
6
  export * from './route';
6
7
  export * from './shortcut';
@@ -0,0 +1,12 @@
1
+ export type ProxyType = 'http' | 'https' | 'socks5';
2
+
3
+ export interface NetworkProxySettings {
4
+ enableProxy: boolean;
5
+ proxyBypass?: string;
6
+ proxyPassword?: string;
7
+ proxyPort: string;
8
+ proxyRequireAuth: boolean;
9
+ proxyServer: string;
10
+ proxyType: ProxyType;
11
+ proxyUsername?: string;
12
+ }
@@ -4,6 +4,7 @@ import {
4
4
  Brain,
5
5
  Cloudy,
6
6
  Database,
7
+ EthernetPort,
7
8
  Info,
8
9
  KeyboardIcon,
9
10
  Mic2,
@@ -16,7 +17,7 @@ import { useTranslation } from 'react-i18next';
16
17
  import { Flexbox } from 'react-layout-kit';
17
18
 
18
19
  import type { MenuProps } from '@/components/Menu';
19
- import { isDeprecatedEdition } from '@/const/version';
20
+ import { isDeprecatedEdition, isDesktop } from '@/const/version';
20
21
  import { SettingsTabs } from '@/store/global/initialState';
21
22
  import { featureFlagsSelectors, useServerConfigStore } from '@/store/serverConfig';
22
23
 
@@ -117,6 +118,15 @@ export const useCategory = () => {
117
118
  {
118
119
  type: 'divider',
119
120
  },
121
+ isDesktop && {
122
+ icon: <Icon icon={EthernetPort} />,
123
+ key: SettingsTabs.Proxy,
124
+ label: (
125
+ <Link href={'/settings/proxy'} onClick={(e) => e.preventDefault()}>
126
+ {t('tab.proxy')}
127
+ </Link>
128
+ ),
129
+ },
120
130
  {
121
131
  icon: <Icon icon={Database} />,
122
132
  key: SettingsTabs.Storage,