* feat: init @librechat/client
* feat: Add common types and interfaces for accessibility, agents, artifacts, assistants, and tools
* feat: Add jotai as a peer dependency
* fix build client package
* feat: cleanup unused types from common/index.ts
- Remove 104 unused type exports from packages/client/src/common/index.ts
- Keep only 7 actually used exports (93% reduction)
- Add cleanup script with enhanced import pattern detection
- Support both named imports and namespace imports (* as t)
- Create automatic backups and comprehensive documentation
- Maintain type safety with build verification
- No breaking changes to existing code
Kept exports:
- TShowToast, Option, OptionWithIcon, DropdownValueSetter
- MentionOption, NotificationSeverity, MenuItemProps
Scripts: cleanup-common-types-safe.js, README-CLEANUP.md
* fix: cleanup
* fix: package; refactor: tsconfig
* feat: add back `recoil`
* fix: move dependencies to peerDependencies in client package
* feat: add @librechat/client as a dependency in package.json and package-lock.json
* feat: update client package configuration and dependencies
- Added new dependencies for Rollup plugins and updated existing ones in package.json and package-lock.json.
- Introduced a new Rollup configuration file for building the client package.
- Refactored build scripts to include a dedicated build command for the client.
- Updated TypeScript configuration for improved module resolution and type declaration output.
- Integrated a Toast component from the client package into the main App component.
* feat: enhance Rollup configuration for client package
- Updated terser plugin settings to preserve directives like 'use client'.
- Added custom warning handler to ignore "use client" directive warnings during the build process.
* chore: rename package/client build script command
* feat: update client package dependencies and Rollup configuration
- Added rollup-plugin-postcss to package.json and updated package-lock.json.
- Enhanced Rollup configuration to include postcss plugin for CSS handling.
- Updated index.ts to export all components from the components directory for better modularity.
* feat: add client package directory to update configuration
- Included the 'client' package directory in the update.js configuration to ensure it is recognized during updates.
* feat: export Toast component in client package
- Added export for the Toast component in index.ts to enhance modularity and accessibility of components.
* feat: /client transition to @librechat/client
* chore: fixed formatting issues
* fix: update peer dependencies in @librechat/client to prevent bundling them
* fix: correct useSprings implementation in SplitText component
* fix: circular dependencies in DataTable
* fix: add remaining peer dependencies and match actual versions previously used in `client/package.json`
* fix: correct frontend:ci script to include client package build
* chore: enhance unused package detection for @librechat/client and improve dependency extraction
* fix: add missing peer dependency for @radix-ui/react-collapsible
* chore: include "packages/client" in unused i18next keys detection
* test: update AgentFooter tests to use document.querySelector for spinner checks
test: mock window.matchMedia in setupTests.js for consistent test environment
* feat: add react-hook-form dependency and update FormInput component to use its types
* chore: linting
* refactor: remove unused defaultSelectedValues prop from MCPSelect and MultiSelect components
* chore: linting
* feat: update GitHub Actions workflow to publish @librechat/client
* chore: update GitHub Actions workflow to install and build data-provider and client dependencies
* chore: add missing @testing-library/react dependency to client package
* chore: update tsconfig.json to exclude additional test files
* chore: fix build issues, resolve latest LC changes
* chore: move MCP components outside of `~/components/ui`
* feat: implement dynamic theme system with environment variable support and Tailwind CSS integration
* chore: remove unnecessary logging of sttExternal and ttsExternal in Speech component
* chore: squashed cleanup commits
chore: move @tanstack/react-virtual to dependencies and remove recoil from package.json
chore: move dependencies to peerDependencies in package.json
feat: update package.json and rollup.config.js to include jotai and enhance bundling configuration
feat: update package.json and rollup.config.js to include jotai and enhance bundling configuration
refactor: reorganize exports in index.ts for improved clarity
refactor: remove unused types and interfaces from common files
refactor: update peer dependencies and improve component typings
- Removed duplicate peer dependencies from package.json and organized them.
- Updated rollup.config.js to disable TypeScript checking during the build process.
- Modified AnimatedTabs component to use React.ReactNode for label and content types, and added TypeScript workarounds for compatibility.
- Enhanced Label and Separator components to accept an optional className prop and improved prop spreading.
- Updated Slider component to include an optional className prop and refined prop handling for better type safety.
refactor: clean up client workflow and update package dependencies
refactor: update package dependencies and improve PostCSS and Rollup configurations
chore: bump version to 0.1.2 in package.json
chore: bump client version to 0.1.2 in package-lock.json
chore: bump client version to 0.1.3 and update dependencies
chore: bump client version to 0.1.4 and update @react-spring dependencies
chore: update package version to 0.1.5 and adjust peer dependencies
- Bump version in package.json from 0.1.4 to 0.1.5.
- Update peer dependency for @tanstack/react-query to allow version 5.0.0.
- Add @tanstack/react-table and @tanstack/react-virtual as dependencies.
- Update various dependencies to their latest compatible versions.
- Simplify postcss.config.js by removing unnecessary options.
- Clean up rollup.config.js by removing ignored PostCSS warnings.
- Update CheckboxButton component to cast icon as React JSX element.
- Adjust Combobox component's class names for better styling.
- Change DropdownPopup component to use React's namespace import.
- Modify InputOTP component to use 'any' type for OTPInputContext.
- Ensure displayLabel and value in ModelParameters are converted to strings.
- Update MultiSearch component's placeholder to ensure it's a string.
- Cast selectIcon in MultiSelect as React JSX element for consistency.
- Update OGDialogTemplate to cast selectText as React JSX element.
- Initialize animationRef in PixelCard with undefined for clarity.
- Add TypeScript ignore comments in Select and SelectDropDown components for Radix UI type conflicts.
- Ensure title in SelectDropDown is a string and adjust rendering of options.
- Update useLocalize hook to cast options as any for compatibility.
refactor: code structure; chore: translations cleanup
chore: remove unused imports and clean up code in NewChat component
refactor: enhance Menu component to support custom render functions for menu items
style: update itemClassName in ToolsDropdown for improved UI consistency
fix: merge conflicts
chore: update @radix-ui/react-accordion to version 1.2.11
* refactor: remove unnecessary TypeScript type assertions in AnimatedTabs, Label, Separator, and Slider components
* feat: enhance theme system with localStorage persistence and new theme atoms
* chore: bump version of @librechat/client to 0.1.7
* chore: fix ci/cd warnings/errors related to linting and unused localization keys
* chore: update dependencies for class-variance-authority, clsx, and match-sorter
* chore: bump @librechat/client to v0.1.8
* feat: add utility colors for theme customization and remove unused tailwindConfig
* v0.1.9
---------
Co-authored-by: Marco Beretta <81851188+berry-13@users.noreply.github.com>
* fix: Update Gemini 2.5 Pro Preview Model Name in Token Values
* refactor: Update DeleteButton to close menu when deletion is successful
* refactor: Add unmountOnHide prop to DropdownPopup in multiple components
* chore: linting
* chore: linting
* feat: Add `chatMenu` option for MCP Servers to control visibility in MCPSelect dropdown
* refactor: Update loadManifestTools to return combined tool manifest with MCP tools first
* chore: remove deprecated openapi plugins
* chore: linting
* chore(AgentClient): linting, remove unnecessary `checkVisionRequest` logger
* refactor(AuthService): change logoutUser logging from error to debug level
* chore: new Gemini models token values and rates
* chore(AskController): linting
* ✨ feat: improve Nav/Conversations/Convo/NewChat component performance
* ✨ feat: implement cursor-based pagination for conversations API
* 🔧 refactor: remove createdAt from conversation selection in API and type definitions
* 🔧 refactor: include createdAt in conversation selection and update related types
* ✨ fix: search functionality and bugs with loadMoreConversations
* feat: move ArchivedChats to cursor and DataTable standard
* 🔧 refactor: add InfiniteQueryObserverResult type import in Nav component
* feat: enhance conversation listing with pagination, sorting, and search capabilities
* 🔧 refactor: remove unnecessary comment regarding lodash/debounce in ArchivedChatsTable
* 🔧 refactor: remove unused translation keys for archived chats and search results
* 🔧 fix: Archived Chats, Delete Convo, Duplicate Convo
* 🔧 refactor: improve conversation components with layout adjustments and new translations
* 🔧 refactor: simplify archive conversation mutation and improve unarchive handling; fix: update fork mutation
* 🔧 refactor: decode search query parameter in conversation route; improve error handling in unarchive mutation; clean up DataTable component styles
* 🔧 refactor: remove unused translation key for empty archived chats
* 🚀 fix: `archivedConversation` query key not updated correctly while archiving
* 🧠 feat: Bedrock Anthropic Reasoning & Update Endpoint Handling (#6163)
* feat: Add thinking and thinkingBudget parameters for Bedrock Anthropic models
* chore: Update @librechat/agents to version 2.1.8
* refactor: change region order in params
* refactor: Add maxTokens parameter to conversation preset schema
* refactor: Update agent client to use bedrockInputSchema and improve error handling for model parameters
* refactor: streamline/optimize llmConfig initialization and saving for bedrock
* fix: ensure config titleModel is used for all endpoints
* refactor: enhance OpenAIClient and agent initialization to support endpoint checks for OpenRouter
* chore: bump @google/generative-ai
* ✨ feat: improve Nav/Conversations/Convo/NewChat component performance
* 🔧 refactor: remove unnecessary comment regarding lodash/debounce in ArchivedChatsTable
* 🔧 refactor: update translation keys for clarity; simplify conversation query parameters and improve sorting functionality in SharedLinks component
* 🔧 refactor: optimize conversation loading logic and improve search handling in Nav component
* fix: package-lock
* fix: package-lock 2
* fix: package lock 3
* refactor: remove unused utility files and exports to clean up the codebase
* refactor: remove i18n and useAuthRedirect modules to streamline codebase
* refactor: optimize Conversations component and remove unused ToggleContext
* refactor(Convo): add RenameForm and ConvoLink components; enhance Conversations component with responsive design
* fix: add missing @azure/storage-blob dependency in package.json
* refactor(Search): add error handling with toast notification for search errors
* refactor: make createdAt and updatedAt fields of tConvoUpdateSchema less restrictive if timestamps are missing
* chore: update @azure/storage-blob dependency to version 12.27.0, ensure package-lock is correct
* refactor(Search): improve conversation handling server side
* fix: eslint warning and errors
* refactor(Search): improved search loading state and overall UX
* Refactors conversation cache management
Centralizes conversation mutation logic into dedicated utility functions for adding, updating, and removing conversations from query caches.
Improves reliability and maintainability by:
- Consolidating duplicate cache manipulation code
- Adding type safety for infinite query data structures
- Implementing consistent cache update patterns across all conversation operations
- Removing obsolete conversation helper functions in favor of standardized utilities
* fix: conversation handling and SSE event processing
- Optimizes conversation state management with useMemo and proper hook ordering
- Improves SSE event handler documentation and error handling
- Adds reset guard flag for conversation changes
- Removes redundant navigation call
- Cleans up cursor handling logic and document structure
Improves code maintainability and prevents potential race conditions in conversation state updates
* refactor: add type for SearchBar `onChange`
* fix: type tags
* style: rounded to xl all Header buttons
* fix: activeConvo in Convo not working
* style(Bookmarks): improved UI
* a11y(AccountSettings): fixed hover style not visible when using light theme
* style(SettingsTabs): improved tab switchers and dropdowns
* feat: add translations keys for Speech
* chore: fix package-lock
* fix(mutations): legacy import after rebase
* feat: refactor conversation navigation for accessibility
* fix(search): convo and message create/update date not returned
* fix(search): show correct iconURL and endpoint for searched messages
* fix: small UI improvements
* chore: console.log cleanup
* chore: fix tests
* fix(ChatForm): improve conversation ID handling and clean up useMemo dependencies
* chore: improve typing
* chore: improve typing
* fix(useSSE): clear conversation ID on submission to prevent draft restoration
* refactor(OpenAIClient): clean up abort handler
* refactor(abortMiddleware): change handleAbort to use function expression
* feat: add PENDING_CONVO constant and update conversation ID checks
* fix: final event handling on abort
* fix: improve title sync and query cache sync on final event
* fix: prevent overwriting cached conversation data if it already exists
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
* 🔧 feat: Enhance logging configuration for production and debug environments
* 🔒 feat: Implement encryption and decryption functions for sensitive values in ActionService with URL encoding/decoding
* refactor: optimize action service for agent tools
* refactor: optimize action processing for Assistants API
* fix: handle case where agent is not found in loadAgent function
* refactor: improve error handling in API calls by throwing new Error with logAxiosError output
* chore: bump @librechat/agents to 2.3.95, fixes "Invalid tool call structure: No preceding AIMessage with tool_call_ids"
* refactor: enhance error logging in logAxiosError function to include response status
* refactor: remove unused useModelSelection hook from Endpoint
* refactor: add support for assistants in useSelectorEffects hook
* refactor: replace string easing with imported easings in Landing component
* chore: remove duplicate translation
* refactor: update model selection logic and improve localization for UI elements
* refactor: replace endpoint value checks with helper functions for agents and assistants
* refactor: optimize display value logic and utilize useMemo for performance improvements
* refactor: clean up imports and optimize display/icon value logic in endpoint components, fix spec selection
* refactor: enhance error logging in axios utility to include stack traces for better debugging
* refactor: update logging configuration to use DEBUG_LOGGING and streamline log level handling
* refactor: adjust className for export menu button to improve layout consistency and remove unused title prop from ShareButton
* refactor: update import path for logAxiosError utility to improve module organization and clarity
* refactor: implement debounced search value setter in ModelSelectorContext for improved performance
* 🎨 feat: improve file display and overflow handling in SidePanel components
* 🎨 feat: enhance bookmarks management UI and improve accessibility features
* 🎨 feat: enhance BookmarkTable and BookmarkTableRow components for improved layout and performance
* 🎨 feat: enhance file display and interaction in FilesView and ImagePreview components
* 🎨 feat: adjust minimum width for filename filter input in DataTable component
* 🎨 feat: enhance file upload UI with improved layout and styling adjustments
* 🎨 feat: add surface-hover-alt color and update FileContainer styling for improved UI
* 🎨 feat: update ImagePreview component styling for improved visual consistency
* 🎨 feat: add MaximizeChatSpace component and integrate chat space maximization feature
* 🎨 feat: enhance DataTable component with transition effects and update Checkbox styling for improved accessibility
* fix: enhance a11y for Bookmark buttons by adding space key support, ARIA labels, and correct html role for key presses
* fix: return focus back to trigger for BookmarkEditDialog (Edit and new bookmark buttons)
* refactor: ShareButton and ExportModal components children prop support; refactor DropdownPopup item handling
* refactor: enhance ExportAndShareMenu and ShareButton components with improved props handling and accessibility features
* refactor: add ref prop support to MenuItemProps and update ExportAndShareMenu and DropdownPopup components so focus correctly returns to menu item
* refactor: enhance ConvoOptions and DeleteButton components with improved props handling and accessibility features
* refactor: add triggerRef support to DeleteButton and update ConvoOptions for improved dialog handling
* refactor: accessible bookmarks menu
* refactor: improve styling and accessibility for bookmarks components
* refactor: add focusLoop support to DropdownPopup and update BookmarkMenu with Tooltip
* refactor: integrate TooltipAnchor into ExportAndShareMenu for enhanced accessibility
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
* 🔃 fix: Safeguard against null token in SSE refresh token handling
* 🔃 fix: Update import path for AnnounceOptions in LiveAnnouncer component
* 🔃 a11y: Add aria-live attribute for accessibility in error messages
* fix: prevent double screen reader notification for toast
* 🔃 a11y: Enhance accessibility for main menus and buttons with ARIA roles and labels
* refactor: better alt text for logo on login page #4095
* refactor: remove unused import for DropdownNoState in Voices component
* fix: Focus management issue in the Export Options Modal #4100
* style: update AdminSettings dialog content styles for improved accessibility/theming
* style: update icon colors in ExportAndShareMenu for improved theming
* feat: enhance DropdownPopup component with additional props for customization
* feat: add role selection dropdown to AdminSettings for enhanced user permissions management
* feat: add role selection dropdown to AdminSettings for Prompt permission management
* style: add gap to button in AdminSettings for improved layout
* feat: add warning message for Admin role access in Permissions settings
* fix: type issues
* feat: Fix document title setting in Conversation component
* style: new chat theme
* fix: No keyboard access to chat menus in the chat history #3788
* fix: Menu button in the chat history area does not indicate its state #3823
* refactor: use ariakit for DropdownPopup
* style: update sticky z-index in NewChat component
* style: update ConvoOptions menu button styling
* feat: new dropdown
* fix: maintain popover active when open
* fix: update DeleteButton and ShareButton component to use useState for managing dialog state
* BREAKING: style improvement of base Button component
* style: update export button
* a11y: ExportAndShareButton
* add border
* quick style fix
* fix: flick issue on convo
* fix: DropDown opens when renaming
* chore: update radix-ui/react-dropdown-menu to latest
* small fix
* style: bookmarks update
* reorder export modal
* feat: imporved dropdowns
* style: a lot of changes; header, bookmarks, export, nav, convo, convoOptions
* fix: small style issues
* fix: button
* fix: bookmarks header menu
* fix: dropdown close glitch
* feat: Improve accessibility and keyboard navigation in ModelSpec component
* fix: Nav related type issues
* style: ConvoOptions theming and focus ring
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
* ✨ feat(types): add necessary types for shared link feature
* ✨ feat: add shared links functions to data service
Added functions for retrieving, creating, updating, and deleting shared links and shared messages.
* ✨ feat: Add useGetSharedMessages hook to fetch shared messages by shareId
Adds a new hook `useGetSharedMessages` which fetches shared messages based on the provided shareId.
* ✨ feat: Add share schema and data access functions to API models
* ✨ feat: Add share endpoint to API
The GET /api/share/${shareId} is exposed to the public, so authentication is not required. Other paths require authentication.
* ♻️ refactor(utils): generalize react-query cache manipulation functions
Introduces generic functions for manipulating react-query cache entries, marking a refinement in how query cache data is managed. It aims to enhance the flexibility and reusability of the cache interaction patterns within our application.
- Replaced specific index names with more generic terms in queries.ts, enhancing consistency across data handling functions.
- Introduced new utility functions in collection.ts for adding, updating, and deleting data entries in an InfiniteData<TCollection>. These utility functions (`addData`, `updateData`, `deleteData`, `findPage`) are designed to be re-usable across different data types and collections.
- Adapted existing conversation utility functions in convos.ts to leverage these new generic utilities.
* ✨ feat(shared-link): add functions to manipulate shared link cache list
implemented new utility functions to handle additions, updates, and deletions in the shared link cache list.
* ✨ feat: Add mutations and queries for shared links
* ✨ feat(shared-link): add `Share` button to conversation list
- Added a share button in each conversation in the conversation list.
- Implemented functionality where clicking the share button triggers a POST request to the API.
- The API checks if a share link was already created for the conversation today; if so, it returns the existing link.
- If no link was created for today, the API will create a new share link and return it.
- Each click on the share button results in a new API request, following the specification similar to ChatGPT's share link feature.
* ♻️ refactor(hooks): generalize useNavScrolling for broader use
- Modified `useNavScrolling` to accept a generic type parameter `TData`, allowing it to be used with different data structures besides `ConversationListResponse`.
- Updated instances in `Nav.tsx` and `ArchivedChatsTable.tsx` to explicitly specify `ConversationListResponse` as the type argument when invoking `useNavScrolling`.
* ✨ feat(settings): add shared links listing table with delete functionality in settings
- Integrated a delete button for each shared link in the table, allowing users to remove links as needed.
* ♻️ refactor(components): separate `EndpointIcon` from `Icon` component for standalone use
* ♻️ refactor: update useGetSharedMessages to return TSharedLink
- Modified the useGetSharedMessages hook to return not only a list of TMessage but also the TSharedLink itself.
- This change was necessary to support displaying the title and date in the Shared Message UI, which requires data from TSharedLink.
* ✨ feat(shared link): add UI for displaying shared conversations without authentication
- Implemented a new UI component to display shared conversations, designed to be accessible without requiring authentication.
- Reused components from the authenticated Messages module where possible. Copied and adapted components that could not be directly reused to fit the non-authenticated context.
* 🔧 chore: Add translations
Translate labels only. Messages remain in English as they are possibly subject to change.
* ♻️ refactor: add icon and tooltip props to EditMenuButton component
* moved icon and popover to arguments so that EditMenuButton can be reused.
* modified so that when a ShareButton is closed, the parent DropdownMenu is also closed.
* ♻️irefactor: added DropdownMenu for Export and Share
* ♻️ refactor: renamed component names more intuitive
* More accurate naming of the dropdown menu.
* When the export button is closed, the parent dropdown menu is also closed.
* 🌍 chore: updated translations
* 🐞 Fix: OpenID Profile Image Download (#2757)
* Add fetch requirement
Fixes - error: [openidStrategy] downloadImage: Error downloading image at URL "https://graph.microsoft.com/v1.0/me/photo/$value": TypeError: response.buffer is not a function
* Update openidStrategy.js
---------
Co-authored-by: Danny Avila <danacordially@gmail.com>
* 🚑 fix(export): Issue exporting Conversation with Assistants (#2769)
* 🚑 fix(export): use content as text if content is present in the message
If the endpoint is assistants, the text of the message goes into content, not message.text.
* refactor(ExportModel): TypeScript, remove unused code
---------
Co-authored-by: Yuichi Ohneda <ohneda@gmail.com>
* 📤style: export button icon (#2752)
* refactor(ShareDialog): logic and styling
* refactor(ExportAndShareMenu): imports order and icon update
* chore: imports
* chore: imports/render logic
* feat: message branching
* refactor: add optional config to useGetStartupConfig
* refactor: disable endpoints query
* chore: fix search view styling gradient in light mode
* style: ShareView gradient styling
* refactor(Share): use select queries
* style: shared link table buttons
* localization and dark text styling
* style: fix clipboard button layout shift app-wide and add localization for copy code
* support assistants message content in shared links, add useCopyToClipboard, add copy buttons to Search Messages and Shared Link Messages
* add localizations
* comparisons
---------
Co-authored-by: Yuichi Ohneda <ohneda@gmail.com>
Co-authored-by: bsu3338 <bsu3338@users.noreply.github.com>
Co-authored-by: Fuegovic <32828263+fuegovic@users.noreply.github.com>