Repository navigation
💾 feat: Add Memory Configuration Options for CI unit tests - #10567
Merged
danny-avila merged 2 commits intoDec 25, 2025
Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds configurable memory allocation settings to improve CI test reliability, particularly for environments with smaller VM resources than standard GitHub-hosted runners. The changes set a default Node.js heap size of 6144 MiB and add heap usage logging for debugging purposes.
- Added
NODE_OPTIONSenvironment variable configuration with--max-old-space-size=6144across CI workflows - Implemented
--logHeapUsageflag in Jest test scripts for memory monitoring - Updated Docker build configurations to use configurable memory limits via build arguments
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/frontend-review.yml |
Adds NODE_OPTIONS environment variable for Ubuntu and Windows frontend test jobs |
.github/workflows/backend-review.yml |
Adds NODE_OPTIONS environment variable for backend test job |
.github/workflows/build.yml |
Adds NODE_MAX_OLD_SPACE_SIZE build argument for Docker container build |
Dockerfile |
Introduces ARG for configurable memory and applies it to frontend build step |
Dockerfile.multi |
Introduces ARG for configurable memory in multi-stage build |
api/package.json |
Adds --logHeapUsage flag to CI test script |
client/package.json |
Adds --logHeapUsage flag to CI test script |
packages/data-provider/package.json |
Adds --logHeapUsage flag to CI test script |
api/test/jestSetup.js |
Attempts to set NODE_MAX_OLD_SPACE_SIZE environment variable |
api/test/.env.test.example |
Documents NODE_MAX_OLD_SPACE_SIZE configuration |
api/app/clients/document/tokenSplit.spec.js |
Increases Jest timeout to 120 seconds for slow-running tests |
.env.example |
Documents NODE_MAX_OLD_SPACE_SIZE environment variable |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review for a chance to win a $100 gift card. Take the survey.
Collaborator
|
there is a merge conflict in the code, changed base branch to |
danny-avila
force-pushed
the
dev-staging
branch
5 times, most recently
from
December 2, 2025 05:52
84d6a9c to
40e444c
Compare
1 task done
1 task done
danny-avila
force-pushed
the
dev-staging
branch
6 times, most recently
from
December 4, 2025 19:35
8a35d16 to
6aa696b
Compare
danny-avila
force-pushed
the
dev-staging
branch
2 times, most recently
from
December 11, 2025 21:41
34b366c to
ef96ce2
Compare
chrisdoyle
force-pushed
the
feat/nodejs-memory-config
branch
3 times, most recently
from
December 15, 2025 12:58
5201b99 to
ef8f271
Compare
- configured GitHub Actions workflows with configurable Node.js heap allocation, defaults to 6144 MiB - added heap usage logging for memory monitoring and debugging - increased Docker frontend build memory allocation to ensure consistent memory limits - optimized Jest timeout for tokenSplit test
- responding to PR feedback from Copilot
chrisdoyle
force-pushed
the
feat/nodejs-memory-config
branch
from
December 23, 2025 15:25
ef8f271 to
e2252ca
Compare
akdombrowski
added a commit
to akdombrowski/LibreChat
that referenced
this pull request
Dec 28, 2025
commit d0835d5222c777356a80216ab31393643fc57ae6
Author: Danny Avila <danny@librechat.ai>
Date: Sun Dec 28 12:43:17 2025 -0500
👐 fix: Return Focus to MCP Edit Button after Dialog Closes
- Added `editButtonRef` prop to `MCPCardActions` for improved focus management.
- Updated `MCPServerCard` to pass a reference to the edit button, enhancing accessibility.
- Modified `MCPServerDialog` to accept a more flexible `triggerRef` type, allowing for better integration with various button elements.
commit e4870ed0b063c63bbe5965ca2eec1efa2ac912eb
Author: Marco Beretta <81851188+berry-13@users.noreply.github.com>
Date: Sun Dec 28 18:20:15 2025 +0100
🔌 refactor: MCP UI with Improved Accessibility and Reusable Components (#11118)
* feat: enhance MCP server selection UI with new components and improved accessibility
* fix(i18n): add missing com_ui_mcp_servers translation key
The MCP server menu aria-label was referencing a non-existent translation
key. Added the missing key for accessibility.
* feat(MCP): enhance MCP components with improved accessibility and focus management
* fix(i18n): remove outdated MCP server translation keys
* fix(MCPServerList): improve color contrast by updating text color for no MCP servers message
* refactor(MCP): Server status components and improve user action handling
Updated MCPServerStatusIcon to use a unified icon system for better clarity
Introduced new MCPCardActions component for standardized action buttons on server cards
Created MCPServerCard component to encapsulate server display logic and actions
Enhanced MCPServerList to render MCPServerCard components, improving code organization
Added MCPStatusBadge for consistent status representation in dialogs
Updated utility functions for status color and text retrieval to align with new design
Improved localization keys for better clarity and consistency in user messages
* style(MCP): update button and card background styles for improved UI consistency
* feat(MCP): implement global server initialization state management using Jotai
* refactor(MCP): modularize MCPServerDialog into structured component architecture
- Split monolithic dialog into dedicated section components (Auth, BasicInfo, Connection, Transport, Trust)
- Extract form logic into useMCPServerForm custom hook
- Add utility modules for JSON import and URL handling
- Introduce reusable SecretInput component in @librechat/client
- Remove deprecated MCPAuth component
* style(MCP): update button styles for improved layout and adjust empty state background color
* refactor(Radio): enhance component mounting logic and background style updates
* refactor(translation): remove unused keys and streamline localization strings
commit 0b8e0fcede10f78ab9e98efb70fa5fb812c20f1d
Author: Danny Avila <danny@librechat.ai>
Date: Sun Dec 28 12:19:27 2025 -0500
📡 refactor: SSE Connection Settings and Error Handling (#11129)
* 🛜 refactor: SSE Connection Handling in MCP
- Introduced a longer initial handshake timeout for SSE connections to improve reliability through proxies.
- Added standardized request headers for SSE connections to ensure proper handling.
- Implemented a function to extract meaningful error messages from SSE transport errors, addressing common issues like timeouts, connection resets, and DNS failures.
- Enhanced error logging with detailed context to aid in debugging and provide insights into connection issues.
This update aims to improve the robustness and user experience of SSE connections in the MCP.
* chore: Update SSE Connection Headers Documentation
- Clarified the documentation for SSE connection headers by removing unnecessary details and emphasizing the headers that are intentionally excluded.
- Improved readability and conciseness of the comments regarding HTTP/2 connection management.
This change aims to enhance the clarity of the code documentation for better understanding and maintenance.
* refactor: Improved the handling of SSE transport errors by implementing a function to extract meaningful error messages, addressing various scenarios such as timeouts, connection resets, and DNS failures.
- Added comprehensive unit tests for the new error handling function, ensuring robust detection and reporting of common SSE error cases.
- Updated comments in the connection handling code to clarify the merging of headers, emphasizing user-defined overrides.
This update aims to improve the reliability and clarity of error reporting in SSE connections, enhancing the overall user experience.
* refactor: Enhance SSE error message extraction for improved timeout detection
- Updated the `extractSSEErrorMessage` function to include case-insensitive matching for various timeout patterns, including 'ESOCKETTIMEDOUT', 'timed out', 'timeout after', and 'request timeout'.
- Added unit tests to ensure accurate detection of these timeout messages and prevent false positives in unrelated contexts.
- Improved comments for clarity on the timeout detection logic.
This change aims to enhance the reliability of error handling in SSE connections, providing clearer feedback for timeout scenarios.
commit eeb5522464ad2584532bc01611e306d21bd7784e
Author: Danny Avila <danny@librechat.ai>
Date: Sun Dec 28 11:49:41 2025 -0500
📦 chore: bump MCP SDK to v1.25.1 and fix `packages/api` ghost dependencies (#11128)
* chore: bump `@modelcontextprotocol/sdk` to v1.25.1
* chore: update dependencies in package-lock.json and package.json
- Bump versions of several `@smithy` packages to improve compatibility and performance.
- Add `@aws-sdk/client-bedrock-runtime` and `@smithy/node-http-handler` as peer dependencies.
- Update `https-proxy-agent` to version 7.0.6 for enhanced security and functionality.
- Remove outdated dependencies to streamline the project.
* fix: update httpsAgent type in fetchModels function
- Changed the type of httpsAgent from HttpsProxyAgent to HttpsProxyAgent<string> for improved type safety and clarity in the fetchModels function.
commit c7b2d4227904780115c254884c85f5417427fa24
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun Dec 28 11:35:36 2025 -0500
🌍 i18n: Update translation.json with latest translations (#11127)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit e854967e94b26f4966146f5d43341d5cb96817df
Author: Danny Avila <danny@librechat.ai>
Date: Sun Dec 28 11:09:17 2025 -0500
🧜♀️ fix: Mermaid Dialog UI Improvements (#11125)
* refactor(Mermaid): enhance dialog UI with close button and improved styling
* refactor(Mermaid): add dialog copy functionality and improve button styling
- Introduced state management for dialog copy status with visual feedback.
- Enhanced button styles for better usability and consistency across the component.
- Updated dialog content styling for improved visual hierarchy.
commit 5181356bef02d474c6189241fca189224814540a
Author: Marco Beretta <81851188+berry-13@users.noreply.github.com>
Date: Sun Dec 28 17:01:25 2025 +0100
🪄 refactor: UI Polish and Admin Dialog Unification (#11108)
* refactor(OpenSidebar): removed useless classNames
* style(Header): update hover styles across various components for improved UI consistency
* style(Nav): update hover styles in AccountSettings and SearchBar for improved UI consistency
* style: update button classes for consistent hover effects and improved UI responsiveness
* style(Nav, OpenSidebar, Header, Convo): improve UI responsiveness and animation transitions
* style(PresetsMenu, NewChat): update icon sizes and improve component styling for better UI consistency
* style(Nav, Root): enhance sidebar mobile animations and responsiveness for better UI experience
* style(ExportAndShareMenu, BookmarkMenu): update icon sizes for improved UI consistency
* style: remove transition duration from button classes for improved UI responsiveness
* style(CustomMenu, ModelSelector): update background colors for improved UI consistency and responsiveness
* style(ExportAndShareMenu): update icon color for improved UI consistency
* style(TemporaryChat): refine button styles for improved UI consistency and responsiveness
* style(BookmarkNav): refactor to use DropdownPopup and remove BookmarkNavItems for improved UI consistency and functionality
* style(CustomMenu, EndpointItem): enhance UI elements for improved consistency and accessibility
* style(EndpointItem): adjust gap in icon container for improved layout consistency
* style(CustomMenu, EndpointItem): update focus ring color for improved UI consistency
* style(EndpointItem): update icon color for improved UI consistency in dark theme
* style: update focus styles for improved accessibility and consistency across components
* refactor(Nav): extract sidebar width to NAV_WIDTH constant
Centralize mobile (320px) and desktop (260px) sidebar widths in a single
exported constant to avoid magic numbers and ensure consistency.
* fix(BookmarkNav): memoize handlers used in useMemo
Wrap handleTagClick and handleClear in useCallback and add them to the
dropdownItems useMemo dependency array to prevent stale closures.
* feat: introduce FilterInput component and replace existing inputs with it across multiple components
* feat(DataTable): replace custom input with FilterInput component for improved filtering
* fix: Nested dialog overlay stacking issue
Fixes overlay appearing behind content when opening nested dialogs.
Introduced dynamic z-index calculation based on dialog depth using React context.
- First dialog: overlay z-50, content z-100
- Nested dialogs increment by 60: overlay z-110/content z-160, etc.
Preserves a11y escape key handling from #10975 and #10851.
Regression from #11008 (afb67fcf1) which increased content z-index
without adjusting overlay z-index for nested dialog scenarios.
* Refactor admin settings components to use a unified AdminSettingsDialog
- Removed redundant code from AdminSettings, MCPAdminSettings, and Memories AdminSettings components.
- Introduced AdminSettingsDialog component to handle permission management for different sections.
- Updated permission handling logic to use a consistent structure across components.
- Enhanced role selection and permission confirmation features in the new dialog.
- Improved UI consistency and maintainability by centralizing dialog functionality.
* refactor(Memory): memory management UI components and replace MemoryViewer with MemoryPanel
* refactor(Memory): enhance UI components for Memory dialogs and improve input styling
* refactor(Bookmarks): improve bookmark management UI with enhanced styling
* refactor(translations): remove redundant filter input and bookmark count entries
* refactor(Convo): integrate useShiftKey hook for enhanced keyboard interaction and improve UI responsiveness
commit c21733930c4f311bfa3b73d5d1342d67c9d53b4c
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Sun Dec 28 10:35:14 2025 -0500
🌍 i18n: Update translation.json with latest translations (#11114)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit daed6d9c0e0096797cfb6a4c5c4b440164423d23
Author: Danny Avila <danny@librechat.ai>
Date: Fri Dec 26 20:56:06 2025 -0500
📋 feat: Add Floating Copy Button to Code Blocks (#11113)
* feat: Add MermaidErrorBoundary for handling rendering errors in Mermaid diagrams
* feat: Implement FloatingCodeBar for enhanced code block interaction and copy functionality
* feat: Add zoom-level bar copy functionality to Mermaid component
* feat: Enhance button styles in FloatingCodeBar and RunCode components for improved user interaction
* refactor: copy button rendering in CodeBar and FloatingCodeBar for improved accessibility and clarity
* chore: linting
* chore: import order
commit 3503b7caeb69a0119d668044561721a812aeaea4
Author: Danny Avila <danny@librechat.ai>
Date: Fri Dec 26 19:53:06 2025 -0500
📊 feat: Render Inline Mermaid Diagrams (#11112)
* chore: add mermaid, swr, ts-md5 packages
* WIP: first pass, inline mermaid
* feat: Enhance Mermaid component with zoom, pan, and error handling features
* feat: Update Mermaid component styles for improved UI consistency
* feat: Improve Mermaid rendering with enhanced debouncing and error handling
* refactor: Update Mermaid component styles and enhance error handling in useMermaid hook
* feat: Enhance security settings in useMermaid configuration to prevent DoS attacks
* feat: Add dialog for expanded Mermaid view with zoom and pan controls
* feat: Implement auto-scroll for streaming code in Mermaid component
* feat: Replace loading spinner with reusable Spinner component in Mermaid
* feat: Sanitize SVG output in useMermaid to enhance security
* feat: Enhance SVG sanitization in useMermaid to support additional elements for text rendering
* refactor: Enhance initial content check in useDebouncedMermaid for improved rendering logic
* feat: Refactor Mermaid component to use Button component and enhance focus management for code toggling and copying
* chore: remove unused key
* refactor: initial content check in useDebouncedMermaid to detect significant content changes
commit 43c2c20dd75afd890952b0b19216d2d0485fd513
Author: Danny Avila <danny@librechat.ai>
Date: Fri Dec 26 09:01:27 2025 -0500
🛜 feat: Enable Network Requests in Offline Mode (#11107)
commit f993189e6674bc8a0b690529bc300f7e1bfed00d
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri Dec 26 08:48:48 2025 -0500
🌍 i18n: Update translation.json with latest translations (#11103)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit 8a4c2931f6e50aab49e3ee004028f22359851217
Author: Odrec <renatogarita@gmail.com>
Date: Thu Dec 25 16:21:21 2025 -0600
🪧 feat: Add Custom Group Icon Support for Model Specs (#10782)
* feat: add groupIcon property to modelSpecs for custom group icons
Added the ability to define icons for custom model spec groups in the UI selector.
Changes:
- Added property to TModelSpec type and schema in data-provider
- Created GroupIcon component to render URL or built-in endpoint icons
- Updated CustomGroup component to display group icons
- Added documentation and examples in librechat.example.yaml
Usage:
The groupIcon can be:
- A built-in endpoint key (e.g., "openAI", "anthropic", "groq")
- A URL to a custom icon image
Only the first spec in a group needs groupIcon - all specs share the same icon.
* fix: address Copilot review comments for GroupIcon component
- Changed URL detection from includes('http') to checking if iconURL exists in icons map (more robust approach)
- Removed redundant !iconURL check since iconURL is always a string from props
---------
Co-authored-by: odrec <odrec@users.noreply.github.com>
Co-authored-by: Odrec <odrec@Odrecs-MacBook-Pro.local>
commit b9792160e29242f8df5e2d8dc673ea05b81fc471
Author: Doyle <873891+chrisdoyle@users.noreply.github.com>
Date: Thu Dec 25 16:17:17 2025 -0500
💾 feat: Add Memory Configuration Options for CI unit tests (#10567)
* 💾 feat: Add Memory Configuration Options for CI unit tests
- configured GitHub Actions workflows with configurable Node.js heap allocation, defaults to 6144 MiB
- added heap usage logging for memory monitoring and debugging
- increased Docker frontend build memory allocation to ensure consistent memory limits
- optimized Jest timeout for tokenSplit test
* 💾 feat: Add Memory Configuration Options for CI unit tests
- responding to PR feedback from Copilot
commit d7a765ac4cb264901e2f22df1f9734de8daa4c4c
Author: Danny Avila <danny@librechat.ai>
Date: Thu Dec 25 16:08:49 2025 -0500
🪙 feat: Update GPT-5.1 and GPT-5.2 Token Pricing (#11101)
commit 7183223e59d486450774240779c61ab4c0f5a4aa
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 25 12:54:15 2025 -0800
📤 fix: Show Proper Upload Options for Azure and Agent Endpoints (#11081)
* fix: only show upload to provider for azureOpenAi when use responses api is true
* fix: model_parameters not available on first load so Upload Image incorrectly shown - now we query if not populated
* test: update tests for new azureOpenAI Responses API logic
* chore: correct order of headers in OAuth request to ensure proper content type is set
* fix: add useResponsesApi prop to AttachFileMenu and DragDropModal components
---------
Co-authored-by: Danny Avila <danny@librechat.ai>
commit 4fe223eedd90c026ee1e8afdb395a691501ca5c5
Author: papasaidfine <44102846+papasaidfine@users.noreply.github.com>
Date: Thu Dec 25 13:23:29 2025 -0500
🎞️ feat: OpenRouter Audio/Video File Upload Support (#11070)
* Added video upload support for OpenRouter
- Added VIDEO_URL content type to support video_url message format
- Implemented OpenRouter video encoding using base64 data URLs
- Extended encodeAndFormatVideos() to handle OpenRouter provider
- Updated UI to accept video uploads for OpenRouter (mp4, webm, mpeg, mov)
- Fixed case-sensitivity in provider detection for agents
- Made isDocumentSupportedProvider() and isOpenAILikeProvider() case-insensitive
Videos are now converted to data:video/mp4;base64,... format compatible
with OpenRouter's API requirements per their documentation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* refactor: change multimodal and google_multimodal to more transparent variable names of image_document and image_document_video_audio
(also google_multimodal doesn't apply as much since we are adding support for video and audio uploads for open router)
* fix: revert .toLowerCase change to isOpenAILikeProvider and isDocumentSupportedProvider which broke upload to provider detection for openAI endpoints
* wip: add audio support to openrouter
* fix: filetypes now properly parsed and sent rather than destructured mimetypes for openrouter
* refactor: Omit to Exclude for ESLint
* feat: update DragDropModal for new openrouter support
* fix: special case openrouter for lower case provider
(currently getting issues with the provider coming in as 'OpenRouter' and our enum being 'openrouter') This will probably require a larger refactor later to handle case insensitivity for all providers, but that will have to be thoroughly tested in its own isolated PR
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
commit 5caa0084326310e8d2085edf9709e6e58de827f7
Author: owengo <owengo@users.noreply.github.com>
Date: Thu Dec 25 19:22:34 2025 +0100
🎫 fix: OAuth Token Endpoint Auth. Method Handling for FastMCP 2.14+ Compatibility (#11067)
Co-authored-by: Olivier Schiavo <olivier.schiavo@wengo.com>
commit bfc981d73640425f60980f4b18e8a9b4ba6eb855
Author: Danny Avila <danny@librechat.ai>
Date: Thu Dec 25 12:59:48 2025 -0500
✍️ fix: Validation for Conversation Title Updates (#11099)
* ✍️ fix: Validation for Conversation Title Updates
* fix: Add validateConvoAccess middleware mock in tests
commit b7ea340769cfc8a2b75770d445b57836400aa2ef
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 25 09:45:38 2025 -0800
🏞️ feat: Modifiable OpenAI Image Gen Model Environment Variable (#11082)
commit 6ffb176056f96b6020157ca1baa053152f72a5c4
Author: Danny Avila <danny@librechat.ai>
Date: Thu Dec 25 12:25:41 2025 -0500
🧮 refactor: Replace Eval with Safe Math Expression Parser (#11098)
* chore: Add mathjs dependency
* refactor: Replace eval with mathjs for safer expression evaluation and improve session expiry handling to not environment variables from data-schemas package
* test: Add integration tests for math function with environment variable expressions
* refactor: Update test description for clarity on expiresIn behavior
* refactor: Update test cases to clarify default expiration behavior for token generation
* refactor: Improve error handling in math function for clearer evaluation errors
commit d0863de8d4373e60c1d6e514beda41b1fc52ec42
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 25 09:25:25 2025 -0800
🧈 fix: Smoother Control Panel Tab Expansion Animations (#11077)
* fix: add opacity transitions for expansion / collapse of control panel tabs so they dont overlap anymore
* fix: make sure Agent Builder panel animates nicely
commit 7844a93f8b536293c02268f3025336f1f1004cd6
Author: Artyom Bogachenko <32168471+SpectralOne@users.noreply.github.com>
Date: Thu Dec 25 20:24:01 2025 +0300
♻️ fix: use DOMAIN_CLIENT for MCP OAuth Redirects (#11057)
Co-authored-by: Artyom Bogachenco <a.bogachenko@easyreport.ai>
commit d7ff507ff4b92e76f5b4bf75f25794a0587c7d6f
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 25 09:16:02 2025 -0800
🖲️ fix: Convert Create and Edit Prompt Buttons to Links (#11056)
commit 439bc98682783d4c9d6b15e0cd27f8506aae13da
Author: Danny Avila <danny@librechat.ai>
Date: Thu Dec 25 01:43:54 2025 -0500
⏸ refactor: Improve UX for Parallel Streams (Multi-Convo) (#11096)
* 🌊 feat: Implement multi-conversation feature with added conversation context and payload adjustments
* refactor: Replace isSubmittingFamily with isSubmitting across message components for consistency
* feat: Add loadAddedAgent and processAddedConvo for multi-conversation agent execution
* refactor: Update ContentRender usage to conditionally render PlaceholderRow based on isLast and isSubmitting
* WIP: first pass, sibling index
* feat: Enhance multi-conversation support with agent tracking and display improvements
* refactor: Introduce isEphemeralAgentId utility and update related logic for agent handling
* refactor: Implement createDualMessageContent utility for sibling message display and enhance useStepHandler for added conversations
* refactor: duplicate tools for added agent if ephemeral and primary agent is also ephemeral
* chore: remove deprecated multimessage rendering
* refactor: enhance dual message content creation and agent handling for parallel rendering
* refactor: streamline message rendering and submission handling by removing unused state and optimizing conditional logic
* refactor: adjust content handling in parallel mode to utilize existing content for improved agent display
* refactor: update @librechat/agents dependency to version 3.0.53
* refactor: update @langchain/core and @librechat/agents dependencies to latest versions
* refactor: remove deprecated @langchain/core dependency from package.json
* chore: remove unused SearchToolConfig and GetSourcesParams types from web.ts
* refactor: remove unused message properties from Message component
* refactor: enhance parallel content handling with groupId support in ContentParts and useStepHandler
* refactor: implement parallel content styling in Message, MessageRender, and ContentRender components. use explicit model name
* refactor: improve agent ID handling in createDualMessageContent for dual message display
* refactor: simplify title generation in AddedConvo by removing unused sender and preset logic
* refactor: replace string interpolation with cn utility for className in HoverButtons component
* refactor: enhance agent ID handling by adding suffix management for parallel agents and updating related components
* refactor: enhance column ordering in ContentParts by sorting agents with suffix management
* refactor: update @librechat/agents dependency to version 3.0.55
* feat: implement parallel content rendering with metadata support
- Added `ParallelContentRenderer` and `ParallelColumns` components for rendering messages in parallel based on groupId and agentId.
- Introduced `contentMetadataMap` to store metadata for each content part, allowing efficient parallel content detection.
- Updated `Message` and `ContentRender` components to utilize the new metadata structure for rendering.
- Modified `useStepHandler` to manage content indices and metadata during message processing.
- Enhanced `IJobStore` interface and its implementations to support storing and retrieving content metadata.
- Updated data schemas to include `contentMetadataMap` for messages, enabling multi-agent and parallel execution scenarios.
* refactor: update @librechat/agents dependency to version 3.0.56
* refactor: remove unused EPHEMERAL_AGENT_ID constant and simplify agent ID check
* refactor: enhance multi-agent message processing and primary agent determination
* refactor: implement branch message functionality for parallel responses
* refactor: integrate added conversation retrieval into message editing and regeneration processes
* refactor: remove unused isCard and isMultiMessage props from MessageRender and ContentRender components
* refactor: update @librechat/agents dependency to version 3.0.60
* refactor: replace usage of EPHEMERAL_AGENT_ID constant with isEphemeralAgentId function for improved clarity and consistency
* refactor: standardize agent ID format in tests for consistency
* chore: move addedConvo property to the correct position in payload construction
* refactor: rename agent_id values in loadAgent tests for clarity
* chore: reorder props in ContentParts component for improved readability
* refactor: rename variable 'content' to 'result' for clarity in RedisJobStore tests
* refactor: streamline useMessageActions by removing duplicate handleFeedback assignment
* chore: revert placeholder rendering logic MessageRender and ContentRender components to original
* refactor: implement useContentMetadata hook for optimized content metadata handling
* refactor: remove contentMetadataMap and related logic from the codebase and revert back to agentId/groupId in content parts
- Eliminated contentMetadataMap from various components and services, simplifying the handling of message content.
- Updated functions to directly access agentId and groupId from content parts instead of relying on a separate metadata map.
- Adjusted related hooks and components to reflect the removal of contentMetadataMap, ensuring consistent handling of message content.
- Updated tests and documentation to align with the new structure of message content handling.
* refactor: remove logging from groupParallelContent function to clean up output
* refactor: remove model parameter from TBranchMessageRequest type for simplification
* refactor: enhance branch message creation by stripping metadata for standalone content
* chore: streamline branch message creation by simplifying content filtering and removing unnecessary metadata checks
* refactor: include attachments in branch message creation for improved content handling
* refactor: streamline agent content processing by consolidating primary agent identification and filtering logic
* refactor: simplify multi-agent message processing by creating a dedicated mapping method and enhancing content filtering
* refactor: remove unused parameter from loadEphemeralAgent function for cleaner code
* refactor: update groupId handling in metadata to only set when provided by the server
commit 9b6e7cabc92b7ca70573b9f418941e5904c88697
Author: NK <47662869+Nk-rodrigues@users.noreply.github.com>
Date: Thu Dec 25 04:29:40 2025 +0530
🔗 fix: Share Links Respect Custom Base Path (#11087)
* fix: share links respect base path
Fixes #11072
* chore: import order
* chore: import order
---------
Co-authored-by: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
commit 5740ca59d83e14b87b01f8973a28cabf578fc396
Author: Danny Avila <danny@librechat.ai>
Date: Fri Dec 19 12:14:53 2025 -0500
🔧 fix: Reduce debounce time for rapid text input in useAutoSave hook from 65ms to 25ms for improved responsiveness
commit 0ae3b87b65b84b08f813c2c631be3b950d9f6f96
Author: Danny Avila <danny@librechat.ai>
Date: Fri Dec 19 10:12:39 2025 -0500
🌊 feat: Resumable LLM Streams with Horizontal Scaling (#10926)
* ✨ feat: Implement Resumable Generation Jobs with SSE Support
- Introduced GenerationJobManager to handle resumable LLM generation jobs independently of HTTP connections.
- Added support for subscribing to ongoing generation jobs via SSE, allowing clients to reconnect and receive updates without losing progress.
- Enhanced existing agent controllers and routes to integrate resumable functionality, including job creation, completion, and error handling.
- Updated client-side hooks to manage adaptive SSE streams, switching between standard and resumable modes based on user settings.
- Added UI components and settings for enabling/disabling resumable streams, improving user experience during unstable connections.
* WIP: resuming
* WIP: resumable stream
* feat: Enhance Stream Management with Abort Functionality
- Updated the abort endpoint to support aborting ongoing generation streams using either streamId or conversationId.
- Introduced a new mutation hook `useAbortStreamMutation` for client-side integration.
- Added `useStreamStatus` query to monitor stream status and facilitate resuming conversations.
- Enhanced `useChatHelpers` to incorporate abort functionality when stopping generation.
- Improved `useResumableSSE` to handle stream errors and token refresh seamlessly.
- Updated `useResumeOnLoad` to check for active streams and resume conversations appropriately.
* fix: Update query parameter handling in useChatHelpers
- Refactored the logic for determining the query parameter used in fetching messages to prioritize paramId from the URL, falling back to conversationId only if paramId is not available. This change ensures consistency with the ChatView component's expectations.
* fix: improve syncing when switching conversations
* fix: Prevent memory leaks in useResumableSSE by clearing handler maps on stream completion and cleanup
* fix: Improve content type mismatch handling in useStepHandler
- Enhanced the condition for detecting content type mismatches to include additional checks, ensuring more robust validation of content types before processing updates.
* fix: Allow dynamic content creation in useChatFunctions
- Updated the initial response handling to avoid pre-initializing content types, enabling dynamic creation of content parts based on incoming delta events. This change supports various content types such as think and text.
* fix: Refine response message handling in useStepHandler
- Updated logic to determine the appropriate response message based on the last message's origin, ensuring correct message replacement or appending based on user interaction. This change enhances the accuracy of message updates in the chat flow.
* refactor: Enhance GenerationJobManager with In-Memory Implementations
- Introduced InMemoryJobStore, InMemoryEventTransport, and InMemoryContentState for improved job management and event handling.
- Updated GenerationJobManager to utilize these new implementations, allowing for better separation of concerns and easier maintenance.
- Enhanced job metadata handling to support user messages and response IDs for resumable functionality.
- Improved cleanup and state management processes to prevent memory leaks and ensure efficient resource usage.
* refactor: Enhance GenerationJobManager with improved subscriber handling
- Updated RuntimeJobState to include allSubscribersLeftHandlers for managing client disconnections without affecting subscriber count.
- Refined createJob and subscribe methods to ensure generation starts only when the first real client connects.
- Added detailed documentation for methods and properties to clarify the synchronization of job generation with client readiness.
- Improved logging for subscriber checks and event handling to facilitate debugging and monitoring.
* chore: Adjust timeout for subscriber readiness in ResumableAgentController
- Reduced the timeout duration from 5000ms to 2500ms in the startGeneration function to improve responsiveness when waiting for subscriber readiness. This change aims to enhance the efficiency of the agent's background generation process.
* refactor: Update GenerationJobManager documentation and structure
- Enhanced the documentation for GenerationJobManager to clarify the architecture and pluggable service design.
- Updated comments to reflect the potential for Redis integration and the need for async refactoring.
- Improved the structure of the GenerationJob facade to emphasize the unified API while allowing for implementation swapping without affecting consumer code.
* refactor: Convert GenerationJobManager methods to async for improved performance
- Updated methods in GenerationJobManager and InMemoryJobStore to be asynchronous, enhancing the handling of job creation, retrieval, and management.
- Adjusted the ResumableAgentController and related routes to await job operations, ensuring proper flow and error handling.
- Increased timeout duration in ResumableAgentController's startGeneration function to 3500ms for better subscriber readiness management.
* refactor: Simplify initial response handling in useChatFunctions
- Removed unnecessary pre-initialization of content types in the initial response, allowing for dynamic content creation based on incoming delta events. This change enhances flexibility in handling various content types in the chat flow.
* refactor: Clarify content handling logic in useStepHandler
- Updated comments to better explain the handling of initialContent and existingContent in edit and resume scenarios.
- Simplified the logic for merging content, ensuring that initialContent is used directly when available, improving clarity and maintainability.
* refactor: Improve message handling logic in useStepHandler
- Enhanced the logic for managing messages in multi-tab scenarios, ensuring that the most up-to-date message history is utilized.
- Removed existing response placeholders and ensured user messages are included, improving the accuracy of message updates in the chat flow.
* fix: remove unnecessary content length logging in the chat stream response, simplifying the debug message while retaining essential information about run steps. This change enhances clarity in logging without losing critical context.
* refactor: Integrate streamId handling for improved resumable functionality for attachments
- Added streamId parameter to various functions to support resumable mode in tool loading and memory processing.
- Updated related methods to ensure proper handling of attachments and responses based on the presence of streamId, enhancing the overall streaming experience.
- Improved logging and attachment management to accommodate both standard and resumable modes.
* refactor: Streamline abort handling and integrate GenerationJobManager for improved job management
- Removed the abortControllers middleware and integrated abort handling directly into GenerationJobManager.
- Updated abortMessage function to utilize GenerationJobManager for aborting jobs by conversation ID, enhancing clarity and efficiency.
- Simplified cleanup processes and improved error handling during abort operations.
- Enhanced metadata management for jobs, including endpoint and model information, to facilitate better tracking and resource management.
* refactor: Unify streamId and conversationId handling for improved job management
- Updated ResumableAgentController and AgentController to generate conversationId upfront, ensuring it matches streamId for consistency.
- Simplified job creation and metadata management by removing redundant conversationId updates from callbacks.
- Refactored abortMiddleware and related methods to utilize the unified streamId/conversationId approach, enhancing clarity in job handling.
- Removed deprecated methods from GenerationJobManager and InMemoryJobStore, streamlining the codebase and improving maintainability.
* refactor: Enhance resumable SSE handling with improved UI state management and error recovery
- Added UI state restoration on successful SSE connection to indicate ongoing submission.
- Implemented detailed error handling for network failures, including retry logic with exponential backoff.
- Introduced abort event handling to reset UI state on intentional stream closure.
- Enhanced debugging capabilities for testing reconnection and clean close scenarios.
- Updated generation function to retry on network errors, improving resilience during submission processes.
* refactor: Consolidate content state management into IJobStore for improved job handling
- Removed InMemoryContentState and integrated its functionality into InMemoryJobStore, streamlining content state management.
- Updated GenerationJobManager to utilize jobStore for content state operations, enhancing clarity and reducing redundancy.
- Introduced RedisJobStore for horizontal scaling, allowing for efficient job management and content reconstruction from chunks.
- Updated IJobStore interface to reflect changes in content state handling, ensuring consistency across implementations.
* feat: Introduce Redis-backed stream services for enhanced job management
- Added createStreamServices function to configure job store and event transport, supporting both Redis and in-memory options.
- Updated GenerationJobManager to allow configuration with custom job stores and event transports, improving flexibility for different deployment scenarios.
- Refactored IJobStore interface to support asynchronous content retrieval, ensuring compatibility with Redis implementations.
- Implemented RedisEventTransport for real-time event delivery across instances, enhancing scalability and responsiveness.
- Updated InMemoryJobStore to align with new async patterns for content and run step retrieval, ensuring consistent behavior across storage options.
* refactor: Remove redundant debug logging in GenerationJobManager and RedisEventTransport
- Eliminated unnecessary debug statements in GenerationJobManager related to subscriber actions and job updates, enhancing log clarity.
- Removed debug logging in RedisEventTransport for subscription and subscriber disconnection events, streamlining the logging output.
- Cleaned up debug messages in RedisJobStore to focus on essential information, improving overall logging efficiency.
* refactor: Enhance job state management and TTL configuration in RedisJobStore
- Updated the RedisJobStore to allow customizable TTL values for job states, improving flexibility in job management.
- Refactored the handling of job expiration and cleanup processes to align with new TTL configurations.
- Simplified the response structure in the chat status endpoint by consolidating state retrieval, enhancing clarity and performance.
- Improved comments and documentation for better understanding of the changes made.
* refactor: cleanupOnComplete option to GenerationJobManager for flexible resource management
- Introduced a new configuration option, cleanupOnComplete, allowing immediate cleanup of event transport and job resources upon job completion.
- Updated completeJob and abortJob methods to respect the cleanupOnComplete setting, enhancing memory management.
- Improved cleanup logic in the cleanup method to handle orphaned resources effectively.
- Enhanced documentation and comments for better clarity on the new functionality.
* refactor: Update TTL configuration for completed jobs in InMemoryJobStore
- Changed the TTL for completed jobs from 5 minutes to 0, allowing for immediate cleanup.
- Enhanced cleanup logic to respect the new TTL setting, improving resource management.
- Updated comments for clarity on the behavior of the TTL configuration.
* refactor: Enhance RedisJobStore with local graph caching for improved performance
- Introduced a local cache for graph references using WeakRef to optimize reconnects for the same instance.
- Updated job deletion and cleanup methods to manage the local cache effectively, ensuring stale entries are removed.
- Enhanced content retrieval methods to prioritize local cache access, reducing Redis round-trips for same-instance reconnects.
- Improved documentation and comments for clarity on the caching mechanism and its benefits.
* feat: Add integration tests for GenerationJobManager, RedisEventTransport, and RedisJobStore, add Redis Cluster support
- Introduced comprehensive integration tests for GenerationJobManager, covering both in-memory and Redis modes to ensure consistent job management and event handling.
- Added tests for RedisEventTransport to validate pub/sub functionality, including cross-instance event delivery and error handling.
- Implemented integration tests for RedisJobStore, focusing on multi-instance job access, content reconstruction from chunks, and consumer group behavior.
- Enhanced test setup and teardown processes to ensure a clean environment for each test run, improving reliability and maintainability.
* fix: Improve error handling in GenerationJobManager for allSubscribersLeft handlers
- Enhanced the error handling logic when retrieving content parts for allSubscribersLeft handlers, ensuring that any failures are logged appropriately.
- Updated the promise chain to catch errors from getContentParts, improving robustness and clarity in error reporting.
* ci: Improve Redis client disconnection handling in integration tests
- Updated the afterAll cleanup logic in integration tests for GenerationJobManager, RedisEventTransport, and RedisJobStore to use `quit()` for graceful disconnection of the Redis client.
- Added fallback to `disconnect()` if `quit()` fails, enhancing robustness in resource management during test teardown.
- Improved comments for clarity on the disconnection process and error handling.
* refactor: Enhance GenerationJobManager and event transports for improved resource management
- Updated GenerationJobManager to prevent immediate cleanup of eventTransport upon job completion, allowing final events to transmit fully before cleanup.
- Added orphaned stream cleanup logic in GenerationJobManager to handle streams without corresponding jobs.
- Introduced getTrackedStreamIds method in both InMemoryEventTransport and RedisEventTransport for better management of orphaned streams.
- Improved comments for clarity on resource management and cleanup processes.
* refactor: Update GenerationJobManager and ResumableAgentController for improved event handling
- Modified GenerationJobManager to resolve readyPromise immediately, eliminating startup latency and allowing early event buffering for late subscribers.
- Enhanced event handling logic to replay buffered events when the first subscriber connects, ensuring no events are lost due to race conditions.
- Updated comments for clarity on the new event synchronization mechanism and its benefits in both Redis and in-memory modes.
* fix: Update cache integration test command for stream to ensure proper execution
- Modified the test command for cache integration related to streams by adding the --forceExit flag to prevent hanging tests.
- This change enhances the reliability of the test suite by ensuring all tests complete as expected.
* feat: Add active job management for user and show progress in conversation list
- Implemented a new endpoint to retrieve active generation job IDs for the current user, enhancing user experience by allowing visibility of ongoing tasks.
- Integrated active job tracking in the Conversations component, displaying generation indicators based on active jobs.
- Optimized job management in the GenerationJobManager and InMemoryJobStore to support user-specific job queries, ensuring efficient resource handling and cleanup.
- Updated relevant components and hooks to utilize the new active jobs feature, improving overall application responsiveness and user feedback.
* feat: Implement active job tracking by user in RedisJobStore
- Added functionality to retrieve active job IDs for a specific user, enhancing user experience by allowing visibility of ongoing tasks.
- Implemented self-healing cleanup for stale job entries, ensuring accurate tracking of active jobs.
- Updated job creation, update, and deletion methods to manage user-specific job sets effectively.
- Enhanced integration tests to validate the new user-specific job management features.
* refactor: Simplify job deletion logic by removing user job cleanup from InMemoryJobStore and RedisJobStore
* WIP: Add backend inspect script for easier debugging in production
* refactor: title generation logic
- Changed the title generation endpoint from POST to GET, allowing for more efficient retrieval of titles based on conversation ID.
- Implemented exponential backoff for title fetching retries, improving responsiveness and reducing server load.
- Introduced a queuing mechanism for title generation, ensuring titles are generated only after job completion.
- Updated relevant components and hooks to utilize the new title generation logic, enhancing user experience and application performance.
* feat: Enhance updateConvoInAllQueries to support moving conversations to the top
* chore: temp. remove added multi convo
* refactor: Update active jobs query integration for optimistic updates on abort
- Introduced a new interface for active jobs response to standardize data handling.
- Updated query keys for active jobs to ensure consistency across components.
- Enhanced job management logic in hooks to properly reflect active job states, improving overall application responsiveness.
* refactor: useResumableStreamToggle hook to manage resumable streams for legacy/assistants endpoints
- Introduced a new hook, useResumableStreamToggle, to automatically toggle resumable streams off for assistants endpoints and restore the previous value when switching away.
- Updated ChatView component to utilize the new hook, enhancing the handling of streaming behavior based on endpoint type.
- Refactored imports in ChatView for better organization.
* refactor: streamline conversation title generation handling
- Removed unused type definition for TGenTitleMutation in mutations.ts to clean up the codebase.
- Integrated queueTitleGeneration call in useEventHandlers to trigger title generation for new conversations, enhancing the responsiveness of the application.
* feat: Add USE_REDIS_STREAMS configuration for stream job storage
- Introduced USE_REDIS_STREAMS to control Redis usage for resumable stream job storage, defaulting to true if USE_REDIS is enabled but not explicitly set.
- Updated cacheConfig to include USE_REDIS_STREAMS and modified createStreamServices to utilize this new configuration.
- Enhanced unit tests to validate the behavior of USE_REDIS_STREAMS under various environment settings, ensuring correct defaults and overrides.
* fix: title generation queue management for assistants
- Introduced a queueListeners mechanism to notify changes in the title generation queue, improving responsiveness for non-resumable streams.
- Updated the useTitleGeneration hook to track queue changes with a queueVersion state, ensuring accurate updates when jobs complete.
- Refactored the queueTitleGeneration function to trigger listeners upon adding new conversation IDs, enhancing the overall title generation flow.
* refactor: streamline agent controller and remove legacy resumable handling
- Updated the AgentController to route all requests to ResumableAgentController, simplifying the logic.
- Deprecated the legacy non-resumable path, providing a clear migration path for future use.
- Adjusted setHeaders middleware to remove unnecessary checks for resumable mode.
- Cleaned up the useResumableSSE hook to eliminate redundant query parameters, enhancing clarity and performance.
* feat: Add USE_REDIS_STREAMS configuration to .env.example
- Updated .env.example to include USE_REDIS_STREAMS setting, allowing control over Redis usage for resumable LLM streams.
- Provided additional context on the behavior of USE_REDIS_STREAMS when not explicitly set, enhancing clarity for configuration management.
* refactor: remove unused setHeaders middleware from chat route
- Eliminated the setHeaders middleware from the chat route, streamlining the request handling process.
- This change contributes to cleaner code and improved performance by reducing unnecessary middleware checks.
* fix: Add streamId parameter for resumable stream handling across services (actions, mcp oauth)
* fix(flow): add immediate abort handling and fix intervalId initialization
- Add immediate abort handler that responds instantly to abort signal
- Declare intervalId before cleanup function to prevent 'Cannot access before initialization' error
- Consolidate cleanup logic into single function to avoid duplicate cleanup
- Properly remove abort event listener on cleanup
* fix(mcp): clean up OAuth flows on abort and simplify flow handling
- Add abort handler in reconnectServer to clean up mcp_oauth and mcp_get_tokens flows
- Update createAbortHandler to clean up both flow types on tool call abort
- Pass abort signal to createFlow in returnOnOAuth path
- Simplify handleOAuthRequired to always cancel existing flows and start fresh
- This ensures user always gets a new OAuth URL instead of waiting for stale flows
* fix(agents): handle 'new' conversationId and improve abort reliability
- Treat 'new' as placeholder that needs UUID in request controller
- Send JSON response immediately before tool loading for faster SSE connection
- Use job's abort controller instead of prelimAbortController
- Emit errors to stream if headers already sent
- Skip 'new' as valid ID in abort endpoint
- Add fallback to find active jobs by userId when conversationId is 'new'
* fix(stream): detect early abort and prevent navigation to non-existent conversation
- Abort controller on job completion to signal pending operations
- Detect early abort (no content, no responseMessageId) in abortJob
- Set conversation and responseMessage to null for early aborts
- Add earlyAbort flag to final event for frontend detection
- Remove unused text field from AbortResult interface
- Frontend handles earlyAbort by staying on/navigating to new chat
* test(mcp): update test to expect signal parameter in createFlow
fix(agents): include 'new' conversationId in newConvo check for title generation
When frontend sends 'new' as conversationId, it should still trigger
title generation since it's a new conversation. Rename boolean variable for clarity
fix(agents): check abort state before completeJob for title generation
completeJob now triggers abort signal for cleanup, so we need to
capture the abort state beforehand to correctly determine if title
generation should run.
commit 25a0ebee856fd4d3c680ba39607a76eb3685d618
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Fri Dec 19 10:01:03 2025 -0500
🌍 i18n: Update translation.json with latest translations (#11051)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit cd5299807bc52b12e21adb6aa1194c16894021b1
Author: Daniel Lew <dlew@users.noreply.github.com>
Date: Fri Dec 19 09:00:41 2025 -0600
⏳ refactor: Exclude Temporary Conversations and Messages from Meilisearch Indexing (#10872)
Temporary chat data should not show up when searching.
Now we check whether a TTL has been set on a conversation/message
before indexing it in meilisearch. If there is a TTL, we skip it.
commit e352f8d3fbd0fd3c8bba9eadf278b2bed96f1fe2
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Thu Dec 18 20:45:11 2025 -0500
🌍 i18n: Update translation.json with latest translations (#11034)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit 7ef975e9753cd8270d0c829f0a9cbe7653721941
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 18 17:44:40 2025 -0800
🥂 feat: High Contrast Toasts (#11035)
commit 9dda857a59b5591bc8e1c480049a5036baec5bfd
Author: Danny Avila <danny@librechat.ai>
Date: Thu Dec 18 14:06:37 2025 -0500
🧰 refactor: Default TTL for Cached Tools (#11033)
- Added `TWELVE_HOURS` constant to `Time` enum for better time management.
- Updated `getCachedTools` function to set a default TTL of 12 hours if not specified in options.
commit 41f815c0372225e558559d6d566e9f8261c26bcf
Author: Atef Bellaaj <atef.bellaaj@slalom.com>
Date: Thu Dec 18 20:06:13 2025 +0100
⚡ feat: Add Keyv memory cache read-through for MCPServersRegistry (#11030)
Co-authored-by: Atef Bellaaj <slalom.bellaaj@external.daimlertruck.com>
commit 95a69df70eaa79d1c3605a1b705bfc9905c38d1b
Author: Atef Bellaaj <atef.bellaaj@slalom.com>
Date: Thu Dec 18 19:57:49 2025 +0100
🔒 feat: Add MCP server domain restrictions for remote transports (#11013)
* 🔒 feat: Add MCP server domain restrictions for remote transports
* 🔒 feat: Implement comprehensive MCP error handling and domain validation
- Added `handleMCPError` function to centralize error responses for domain restrictions and inspection failures.
- Introduced custom error classes: `MCPDomainNotAllowedError` and `MCPInspectionFailedError` for better error management.
- Updated MCP server controllers to utilize the new error handling mechanism.
- Enhanced domain validation logic in `createMCPTools` and `createMCPTool` functions to prevent operations on disallowed domains.
- Added tests for runtime domain validation scenarios to ensure correct behavior.
* chore: import order
* 🔒 feat: Enhance domain validation in MCP tools with user role-based restrictions
- Integrated `getAppConfig` to fetch allowed domains based on user roles in `createMCPTools` and `createMCPTool` functions.
- Removed the deprecated `getAllowedDomains` method from `MCPServersRegistry`.
- Updated tests to verify domain restrictions are applied correctly based on user roles.
- Ensured that domain validation logic is consistent and efficient across tool creation processes.
* 🔒 test: Refactor MCP tests to utilize configurable app settings
- Introduced a mock for `getAppConfig` to enhance test flexibility.
- Removed redundant mock definition to streamline test setup.
- Ensured tests are aligned with the latest domain validation logic.
---------
Co-authored-by: Atef Bellaaj <slalom.bellaaj@external.daimlertruck.com>
Co-authored-by: Danny Avila <danny@librechat.ai>
commit 98294755ee4ef4c0eca1d5600e2509fcfde057fe
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 18 10:36:19 2025 -0800
👁️ fix: Return Focus on My Files Modal Close (#11032)
* fix: focus returns to manage files button on modal close
* refactor: remove atoms and re-use components instead
* refactor: FilesView to MyFilesModal
* chore: import styling
* chore: delete file that was meant to be renamed
* feat: add trigger ref for settings button as well
commit 1f695e0cdc16f5333932bd97d433ac0f8b03061c
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Thu Dec 18 06:28:27 2025 -0800
🚧 fix: OriginalDialog Modal Tooltip and Dropdown Menu Regressions from (#10975, #10952, #11008) (#11023)
* fix: tooltips appear over z-index 100
* fix: tooltips and dropdowns now have xpected behavior again with escape
* fix: query document, not on ref, in case of portaled content, and allows escape to close dialog properly for my files modal
* fix: console warning about improperly passing props
commit afb67fcf166fbb7c6ee30f9689e5cdaa1256e18f
Author: Alessio Pelliccione <66967361+alessiopelliccione@users.noreply.github.com>
Date: Wed Dec 17 14:42:28 2025 +0100
💬 fix: Increase Z-index of `OriginalDialog` for Proper Layering (#11008)
commit da108155663f8aaab4e9d83e8a45aba273f0f7aa
Author: Danny Avila <danny@librechat.ai>
Date: Tue Dec 16 20:20:09 2025 -0500
📦 chore: Bump `@librechat/agents` to v3.0.52 (#11003)
commit 73c2ed18c8757a9d4291a8f3489fa6b149cd9d3a
Author: Gerald M. <gerdevstudio@gmail.com>
Date: Wed Dec 17 01:55:35 2025 +0100
📂 fix: Extend MIME Type Support for Developer Code Files (#10908)
* fix: add support for uploading code files preventing "Unable to determine file type errors" on widely used file extensions for developers
* fix: update MIME types for YAML file extensions in codeTypeMapping
---------
Co-authored-by: Gerald Moreno <gerald.moreno@spesys-services.fr>
Co-authored-by: Danny Avila <danny@librechat.ai>
commit d505e3124fbf3b3e40a1792d8e3c6079aec5e912
Author: Danny Avila <danny@librechat.ai>
Date: Tue Dec 16 18:42:00 2025 -0500
🔄 fix: Resolve Infinite Refresh Loop on OpenID Provider/Database Switch (#11002)
The refreshController was not updating user openidId when found by email
with a different openidId already set. This caused an infinite loop where:
1. JWT auth failed (openidId mismatch)
2. Refresh found user by email but didn't update openidId
3. Next JWT auth failed again → loop
Now updates openidId when either migration is needed OR when the stored
openidId doesn't match the token's sub claim. Added debug logging for
visibility into auth state during refresh.
commit b4459ab564e829ef62409c8f745e16742a63e81d
Author: Danny Avila <danny@librechat.ai>
Date: Tue Dec 16 18:00:06 2025 -0500
🪵 fix: Standardize Logging Directory with Environment-Aware Resolution (#11000)
* refactor: Implement getLogDir function to set log directory based on environment variables and execution context (Docker or local)
* fix: Adjust Dockerfile to create the correct log directory path for consistency
commit a0df7e8df18d5d0e86ec54ef432be6de339c7c2f
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Tue Dec 16 14:28:25 2025 -0800
⛓️💥 feat: More Accessible Login Page Links (#10997)
* feat: do not open login footer links in new tab
* feat: underline login links on hover for better accessibility
* feat: nicer visuals for links on hover and focus
commit 8b5ef1507134359b54b313e1b3904afb3d780f48
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Date: Tue Dec 16 11:16:09 2025 -0500
🌍 i18n: Update translation.json with latest translations (#10995)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
commit d8b788aecc10dc478544420f2f765ca177f47da7
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Tue Dec 16 06:15:43 2025 -0800
🏃 feat: Keep Modals Open on Escape in Dropdown Menus (#10975)
* fix: filter dropdown now closable with escape, doesn't close whole modal
* refactor: simplify escapekeydown handler logic for tooltips and dropdown menus
* refactor: more specific conditions for preventDefault
commit 23279b4b14f12b667967c8fb7fd88ff396056b46
Author: Danny Avila <danny@librechat.ai>
Date: Tue Dec 16 09:15:03 2025 -0500
📦 chore: Bump `@librechat/agents` to v3.0.51 (#10994)
commit 5bfebc7c9dd687373c17e34695db6471decd4a48
Author: Danny Avila <danny@librechat.ai>
Date: Mon Dec 15 18:47:55 2025 -0500
✨ v0.8.2-rc1 (#10987)
* v0.8.2-rc1
* 🔧 chore: Update package versions for api, client, data-provider, and data-schemas
* chore: update bun lockfile
commit f9060fa25f6b9eda210806098f76f707dff26ba0
Author: Danny Avila <danny@librechat.ai>
Date: Mon Dec 15 17:55:25 2025 -0500
🔧 chore: Update ESLint Config & Run Linter (#10986)
commit e53619959d1067f6be9c8a70511ee8c54abb1be4
Author: Atef Bellaaj <atef.bellaaj@slalom.com>
Date: Mon Dec 15 23:06:13 2025 +0100
🔐 feat: MCP Server Auth UX with Dynamic Detection & Manual OAuth (#10978)
* 🔐 feat: Improve MCP Server Auth UX with Dynamic Detection & Manual OAuth
* 🔧 fix: Update OAuth input autocomplete and refine translation description for clarity
---------
Co-authored-by: Atef Bellaaj <slalom.bellaaj@external.daimlertruck.com>
Co-authored-by: Danny Avila <danny@librechat.ai>
commit 03ced7a894f13d50b67c50f87e58bfef66505e62
Author: Danny Avila <danny@librechat.ai>
Date: Mon Dec 15 17:02:16 2025 -0500
Revert "⌨️ feat: Add Shift-Key Shortcuts for Instant Conversation Actions (#10732)"
This reverts commit 41c0a96d39d0285f51e91461f67195feb0b1a4c1.
commit dcd9273700f1c0e9f8eac9fc66ae55070f224f25
Author: Danny Avila <danny@librechat.ai>
Date: Mon Dec 15 16:46:56 2025 -0500
🔄 refactor: MCP Server Init and Stale Cache Handling (#10984)
* 🔧 refactor: Update MCP connection handling to improve performance and testing
* refactor: Replace getAll() with getLoaded() in MCP.js to prevent unnecessary connection creation for user-context servers.
* test: Adjust MCP.spec.js to mock getLoaded() instead of getAll() for consistency with the new implementation.
* feat: Enhance MCPServersInitializer to reset initialization flag for better handling of process restarts and stale data.
* test: Add integration tests to verify re-initialization behavior and ensure stale data is cleared when necessary.
* 🔧 refactor: Enhance cached endpoints config handling for GPT plugins
* refactor: Update MCPServersInitializer tests to use new server management methods
* refactor: Replace direct Redis server manipulation with registry.addServer and registry.getServerConfig for better abstraction and consistency.
* test: Adjust integration tests to verify server initialization and stale data handling using the updated methods.
* 🔧 refactor: Increase retry limits and delay for MCP server creation
* Updated MAX_CREATE_RETRIES from 3 to 5 to allow for more attempts during server creation.
* Increased RETRY_BASE_DELAY_MS from 10 to 25 milliseconds to provide a longer wait time between retries, improving stability in server initialization.
* refactor: Update MCPServersInitializer tests to utilize new registry methods
* refactor: Replace direct access to sharedAppServers with registry.getServerConfig for improved abstraction.
* test: Adjust tests to verify server initialization and stale data handling using the updated registry methods, ensuring consistency and clarity in the test structure.
commit 02fc4647e1104b7d88df62fc0186b0d8e418fb13
Author: Marco Beretta <81851188+berry-13@users.noreply.github.com>
Date: Mon Dec 15 16:29:10 2025 +0100
💬 feat: Improve speech recognition UX for unsupported browsers (#10964)
Show helpful error message when browser doesn't support speech recognition,
suggesting external STT option only when it's configured on the server.
commit 6ae839c14dcb725b3e3330533afb282d40702e7b
Author: Dustin Healy <54083382+dustinhealy@users.noreply.github.com>
Date: Mon Dec 15 07:28:28 2025 -0800
↕️ feat: Improve Sorting Accessibility in Archived Chats and Shared Links Modals (#10973)
* fix: cast translation keys for ESLint
* fix: sort by header withi keyboard nav now retains focus on press
…
jcbartle
pushed a commit
to jcbartle/LibreChat
that referenced
this pull request
May 11, 2026
…-AI#10567) * 💾 feat: Add Memory Configuration Options for CI unit tests - configured GitHub Actions workflows with configurable Node.js heap allocation, defaults to 6144 MiB - added heap usage logging for memory monitoring and debugging - increased Docker frontend build memory allocation to ensure consistent memory limits - optimized Jest timeout for tokenSplit test * 💾 feat: Add Memory Configuration Options for CI unit tests - responding to PR feedback from Copilot
ThomasVuNguyen
pushed a commit
to ThomasVuNguyen/LibreChat
that referenced
this pull request
Jul 15, 2026
…-AI#10567) * 💾 feat: Add Memory Configuration Options for CI unit tests - configured GitHub Actions workflows with configurable Node.js heap allocation, defaults to 6144 MiB - added heap usage logging for memory monitoring and debugging - increased Docker frontend build memory allocation to ensure consistent memory limits - optimized Jest timeout for tokenSplit test * 💾 feat: Add Memory Configuration Options for CI unit tests - responding to PR feedback from Copilot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
TL;DR
--max-old-space-size=6144)--logHeapUsage)Background
We manage a forked version of LibreChat in our Enterprise Cloud GitHub Organization. While working on our upgrade to v0.8.x we noted CI test failures due to a JavaScript heap out of memory error during Pull Requests, notably:
HOWEVER, as @danny-avila noted, this is not a bug. After exhaustive research on our side, we discovered that these tests were failing because the Standard GitHub-hosted runners within our Enterprise-hosted pool use smaller VMs than those provided by the Public GitHub Actions pool in order to manage isolation and costs more tightly. The same tests pass when executed from accounts within the Public GitHub Actions environment (upstream and personal), which instead use large, multi-tenant Azure VMs with larger out-of-the-box capacity.
In summary:
ubuntu-latest(Enterprise Cloud) !=ubuntu-latest(Public)As such, I have prepared a configurable override for the Node.js heap allocation via this PR, and per his request:
Change Type
Please delete any irrelevant options.
Testing
We tested the successful execution of the unit tests using our GitHub Enterprise runners AND from my personal GitHub account.
Test Configuration:
mainto isolate testing.feat/*branches for Backend Unit Tests and Frontend Unit Tests to enable iterative testing without a PR.Checklist
Please delete any irrelevant options.