From 8458401ce65169bb2e8c722a4b01d15a34f14a3f Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Sun, 1 Jun 2025 20:52:35 -0400 Subject: [PATCH 01/40] =?UTF-8?q?=F0=9F=90=8B=20ci:=20Update=20Docker=20im?= =?UTF-8?q?age=20removal=20command=20in=20deploy=20workflow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy-dev.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index ef02e4decc..ed56fa4d82 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -30,17 +30,15 @@ jobs: DO_USER: ${{ secrets.DO_USER }} run: | ssh -o StrictHostKeyChecking=no ${DO_USER}@${DO_HOST} << EOF - sudo -i -u danny bash << EEOF cd ~/LibreChat && \ git fetch origin main && \ - npm run stop:deployed && \ - docker images -a | grep "librechat" | awk '{print \$3}' | xargs docker rmi && \ - npm run update:deployed && \ + sudo npm run stop:deployed && \ + sudo docker images --format "{{.Repository}}:{{.ID}}" | grep -E "lc-dev|librechat" | cut -d: -f2 | xargs -r sudo docker rmi -f || true && \ + sudo npm run update:deployed && \ git checkout dev && \ git pull origin dev && \ git checkout do-deploy && \ git rebase dev && \ - npm run start:deployed && \ + sudo npm run start:deployed && \ echo "Update completed. Application should be running now." - EEOF EOF From 09e3500d3922ea1d2436bee84a467c8acf5866ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 05:25:04 -0400 Subject: [PATCH 02/40] =?UTF-8?q?=F0=9F=8C=8D=20i18n:=20Update=20translati?= =?UTF-8?q?on.json=20with=20latest=20translations=20(#7635)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- client/src/locales/en/translation.json | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/client/src/locales/en/translation.json b/client/src/locales/en/translation.json index 79ff5d018c..59cad48c03 100644 --- a/client/src/locales/en/translation.json +++ b/client/src/locales/en/translation.json @@ -304,27 +304,27 @@ "com_nav_auto_transcribe_audio": "Auto transcribe audio", "com_nav_automatic_playback": "Autoplay Latest Message", "com_nav_balance": "Balance", - "com_nav_balance_auto_refill_settings": "Auto-Refill Settings", "com_nav_balance_auto_refill_disabled": "Auto-Refill is disabled.", "com_nav_balance_auto_refill_error": "Error loading auto-refill settings.", - "com_nav_balance_last_refill": "Last Refill:", - "com_nav_balance_refill_amount": "Refill Amount:", - "com_nav_balance_interval": "Interval:", - "com_nav_balance_next_refill": "Next Refill:", - "com_nav_balance_next_refill_info": "The next refill will occur automatically only when both conditions are met: the designated time interval has passed since the last refill, and sending a prompt would cause your balance to drop below zero.", - "com_nav_balance_every": "Every", - "com_nav_balance_second": "second", - "com_nav_balance_seconds": "seconds", - "com_nav_balance_minute": "minute", - "com_nav_balance_minutes": "minutes", - "com_nav_balance_hour": "hour", - "com_nav_balance_hours": "hours", + "com_nav_balance_auto_refill_settings": "Auto-Refill Settings", "com_nav_balance_day": "day", "com_nav_balance_days": "days", - "com_nav_balance_week": "week", - "com_nav_balance_weeks": "weeks", + "com_nav_balance_every": "Every", + "com_nav_balance_hour": "hour", + "com_nav_balance_hours": "hours", + "com_nav_balance_interval": "Interval:", + "com_nav_balance_last_refill": "Last Refill:", + "com_nav_balance_minute": "minute", + "com_nav_balance_minutes": "minutes", "com_nav_balance_month": "month", "com_nav_balance_months": "months", + "com_nav_balance_next_refill": "Next Refill:", + "com_nav_balance_next_refill_info": "The next refill will occur automatically only when both conditions are met: the designated time interval has passed since the last refill, and sending a prompt would cause your balance to drop below zero.", + "com_nav_balance_refill_amount": "Refill Amount:", + "com_nav_balance_second": "second", + "com_nav_balance_seconds": "seconds", + "com_nav_balance_week": "week", + "com_nav_balance_weeks": "weeks", "com_nav_browser": "Browser", "com_nav_center_chat_input": "Center Chat Input on Welcome Screen", "com_nav_change_picture": "Change picture", @@ -963,4 +963,4 @@ "com_ui_zoom": "Zoom", "com_user_message": "You", "com_warning_resubmit_unsupported": "Resubmitting the AI message is not supported for this endpoint." -} +} \ No newline at end of file From d3a504857a892bc9cc2e3720581e22aa7d5ebf12 Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Mon, 2 Jun 2025 05:33:46 -0400 Subject: [PATCH 03/40] =?UTF-8?q?=F0=9F=90=8B=20ci:=20update=20dev=20deplo?= =?UTF-8?q?yment=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy-dev.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-dev.yml b/.github/workflows/deploy-dev.yml index ed56fa4d82..a255932e3e 100644 --- a/.github/workflows/deploy-dev.yml +++ b/.github/workflows/deploy-dev.yml @@ -30,6 +30,7 @@ jobs: DO_USER: ${{ secrets.DO_USER }} run: | ssh -o StrictHostKeyChecking=no ${DO_USER}@${DO_HOST} << EOF + sudo -i -u danny bash << 'EEOF' cd ~/LibreChat && \ git fetch origin main && \ sudo npm run stop:deployed && \ @@ -41,4 +42,5 @@ jobs: git rebase dev && \ sudo npm run start:deployed && \ echo "Update completed. Application should be running now." + EEOF EOF From 80bc49db8d4a083244e3249c1142febfd6e22039 Mon Sep 17 00:00:00 2001 From: derhelge Date: Mon, 2 Jun 2025 13:48:33 +0200 Subject: [PATCH 04/40] =?UTF-8?q?=F0=9F=AA=99=20a11y:=20Improved=20Readabi?= =?UTF-8?q?lity=20of=20Tokens=20(#7643)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Helge Wiethoff --- client/src/components/Nav/AccountSettings.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/components/Nav/AccountSettings.tsx b/client/src/components/Nav/AccountSettings.tsx index 921d4b0356..fc76e440a0 100644 --- a/client/src/components/Nav/AccountSettings.tsx +++ b/client/src/components/Nav/AccountSettings.tsx @@ -78,7 +78,8 @@ function AccountSettings() { {startupConfig?.balance?.enabled === true && balanceQuery.data != null && ( <>
- {localize('com_nav_balance')}: {balanceQuery.data.tokenCredits.toFixed(2)} + {localize('com_nav_balance')}:{' '} + {new Intl.NumberFormat().format(Math.round(balanceQuery.data.tokenCredits))}
From 37c94beeacb8724d38c1e78413dcef28ff8179f2 Mon Sep 17 00:00:00 2001 From: Marco Beretta <81851188+berry-13@users.noreply.github.com> Date: Mon, 2 Jun 2025 13:49:10 +0200 Subject: [PATCH 05/40] =?UTF-8?q?=F0=9F=8E=A8=20refactor:=20Auth=20Compone?= =?UTF-8?q?nts=20UI=20Consistency=20(#7651)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 refactor: Improve Error Handling and UI Consistency in Auth Components * 🔧 refactor: Email Templates * 🔧 refactor: Enhance LoginForm with loading state and spinner * 🔧 refactor: Replace button elements with Button component and enhance UI consistency across Auth forms --- .../utils/emails/passwordReset.handlebars | 76 ++++++++++++++--- .../emails/requestPasswordReset.handlebars | 84 ++++++++++++++++--- .../utils/emails/verifyEmail.handlebars | 81 +++++++++++++++--- client/src/components/Auth/AuthLayout.tsx | 49 ++++++----- client/src/components/Auth/ErrorMessage.tsx | 2 +- client/src/components/Auth/Login.tsx | 4 +- client/src/components/Auth/LoginForm.tsx | 14 ++-- client/src/components/Auth/Registration.tsx | 13 +-- .../components/Auth/RequestPasswordReset.tsx | 38 +++------ client/src/components/Auth/ResetPassword.tsx | 63 +++++--------- 10 files changed, 284 insertions(+), 140 deletions(-) diff --git a/api/server/utils/emails/passwordReset.handlebars b/api/server/utils/emails/passwordReset.handlebars index 9076b92edb..6b735f53fd 100644 --- a/api/server/utils/emails/passwordReset.handlebars +++ b/api/server/utils/emails/passwordReset.handlebars @@ -22,17 +22,71 @@ diff --git a/api/server/utils/emails/requestPasswordReset.handlebars b/api/server/utils/emails/requestPasswordReset.handlebars index 2600b5a9d3..b7005254ba 100644 --- a/api/server/utils/emails/requestPasswordReset.handlebars +++ b/api/server/utils/emails/requestPasswordReset.handlebars @@ -22,18 +22,78 @@ diff --git a/api/server/utils/emails/verifyEmail.handlebars b/api/server/utils/emails/verifyEmail.handlebars index 63b52e79be..fa77575053 100644 --- a/api/server/utils/emails/verifyEmail.handlebars +++ b/api/server/utils/emails/verifyEmail.handlebars @@ -22,18 +22,75 @@ diff --git a/client/src/components/Auth/AuthLayout.tsx b/client/src/components/Auth/AuthLayout.tsx index d90f0d3dfe..02b3802917 100644 --- a/client/src/components/Auth/AuthLayout.tsx +++ b/client/src/components/Auth/AuthLayout.tsx @@ -1,23 +1,12 @@ import { TranslationKeys, useLocalize } from '~/hooks'; -import { BlinkAnimation } from './BlinkAnimation'; import { TStartupConfig } from 'librechat-data-provider'; +import { ErrorMessage } from '~/components/Auth/ErrorMessage'; import SocialLoginRender from './SocialLoginRender'; -import { ThemeSelector } from '~/components/ui'; +import { BlinkAnimation } from './BlinkAnimation'; +import { ThemeSelector } from '~/components'; import { Banner } from '../Banners'; import Footer from './Footer'; -const ErrorRender = ({ children }: { children: React.ReactNode }) => ( -
-
- {children} -
-
-); - function AuthLayout({ children, header, @@ -40,19 +29,29 @@ function AuthLayout({ const hasStartupConfigError = startupConfigError !== null && startupConfigError !== undefined; const DisplayError = () => { if (hasStartupConfigError) { - return {localize('com_auth_error_login_server')}; + return ( +
+ {localize('com_auth_error_login_server')} +
+ ); } else if (error === 'com_auth_error_invalid_reset_token') { return ( - - {localize('com_auth_error_invalid_reset_token')}{' '} - - {localize('com_auth_click_here')} - {' '} - {localize('com_auth_to_try_again')} - +
+ + {localize('com_auth_error_invalid_reset_token')}{' '} + + {localize('com_auth_click_here')} + {' '} + {localize('com_auth_to_try_again')} + +
); } else if (error != null && error) { - return {localize(error)}; + return ( +
+ {localize(error)} +
+ ); } return null; }; @@ -87,8 +86,8 @@ function AuthLayout({ {children} {!pathname.includes('2fa') && (pathname.includes('login') || pathname.includes('register')) && ( - - )} + + )}