diff --git a/content/changelog/config_v1.3.17.mdx b/content/changelog/config_v1.3.17.mdx index e712eca3d..dbc190bec 100644 --- a/content/changelog/config_v1.3.17.mdx +++ b/content/changelog/config_v1.3.17.mdx @@ -23,7 +23,7 @@ version: '1.3.17' - Expanded highly experimental stateful Code session controls - `endpoints.agents.repositoryInstructions.timeoutMs` bounds attached-workspace instruction discovery and defaults to `2000` ms - - `statefulCodeSessions.userConfig.bash.maxQueueWaitMs` bounds attached Bash capacity retries and defaults to `300000` ms + - `statefulCodeSessions.environments[].configSchema.limits.maxQueueWaitMs` bounds attached Bash capacity retries and defaults to `300000` ms - Setting `maxQueueWaitMs` to `0` disables client retries after initial admission without cancelling admitted or running work - Added Agent error and background-result limits @@ -69,4 +69,67 @@ version: '1.3.17' - Set the value to an empty string only when all LibreChat credentials are injected through other supported environment settings - Bundled Meilisearch still requires its separately configured master-key Secret +- Added optional saved-chat workspace transitions after rc4 + - `endpoints.agents.statefulCodeSessions.conversationMoves.enabled` opts in to moving a conversation's sealed workspace and recovering a missing workspace + - `conversationMoves.allowAttachDetach` separately opts in to attaching or leaving a workspace; omission keeps the move-only policy + - Upgrade every API replica and enable `CODE_ENVIRONMENT_DECISION_VERSION=1` before activating the transitions + +- Added optional attached-workspace request budgets + - `statefulCodeSessions.environments[].configSchema.limits.maxRequestTimeoutMs` caps total HTTP time for one call at up to `610000` ms + - The existing 30-second admission budget per attempt remains when this is unset, and `maxQueueWaitMs` remains an independent retry horizon + - Do not enable longer admission until the Code API honors per-request queue allowances and the shortest live ingress timeout has been measured + - `configSchema.limits.minCommandAdmissionMs` reserves `10000` ms by default before command execution (valid `1000`โ€“`300000` ms); the total request budget must exceed this reserve plus 10000 ms of settlement/delivery grace + - Configured and advertised Bash command limits fit within the remaining HTTP budget; a 90000 ms request with an 80000 ms command ceiling and default reserve advertises at most a 70000 ms command + +- Added opt-in linked-worktree scheduling for attached Code environments + - `statefulCodeSessions.environments[].configSchema.workspaces.linkedWorktrees` defaults to off; enable only after upgrading LibreChat, deploying Code API linked-worktree support, and starting compatible workers with `--linked-worktree-lanes` + - File tools with a worktree path and Bash commands with a worktree `cwd` use that worker lane; commands that `cd` internally stay in the checkout lane + +- Added idle Agent recovery and graceful-shutdown controls + - `endpoints.agents.eventDriven.idlePolling.deliveryMaxIntervalMs` defaults to `15000` ms + - `queuedTurnMaxIntervalMs` and `maintenanceMaxIntervalMs` default to `120000` ms; `completionWaitMaxIntervalMs` defaults to `60000` ms + - Local readiness events can expedite delivery without waiting for an idle MongoDB recovery scan + - `endpoints.agents.backgroundTasks.shutdownInterruptGraceMs` defaults to `5000` ms (valid `0` through `60000`) before unfinished tools are recorded as interrupted during graceful shutdown + +- Added `interface.agentSelectorLimit` to cap the unsearched Agent selector at `10` entries by default (valid `1` through `100`); searching still reaches all Agents + +- Updated configuration validation and reload behavior + - Malformed explicitly configured `CREDS_KEY` or `CREDS_IV` values now fail startup; migrate data encrypted with an invalid-length key deliberately rather than rotating it blindly + - `rateLimits.conversationsImport`, `rateLimits.tts`, `rateLimits.stt`, and skill/Agent upload limits from `librechat.yaml` now apply to their route limiters without matching environment variables + - Invalid role, group, or user config override writes now return `400` without saving; previously stored overrides that would invalidate the merged config are dropped with a warning + - Reload failures keep the last good validated configuration active; startup validation still fails closed + +- Hardened MCP OAuth HTTP requests + - Server-side OAuth discovery, registration, token, and revocation calls reject redirects; configure the final URL when an identity provider redirects + - Private IP literals are refused unless permitted by the existing admin-trusted host or exact address-and-port policy + +- Added capability-negotiated workspace edit matching + - `statefulCodeSessions.environments[].configSchema.edits.tolerantMatching` allows whitespace-tolerant fallback by default when the worker advertises `tolerant_match`; set it to `false` to require exact matches + - Attached `edit_file` and protected edit previews only send new matching fields after negotiation; `replace_all` also requires the worker to advertise that feature + - Requires compatible Code API and worker builds implementing [Code Interpreter #271](https://github.com/LibreChat-AI/code-interpreter/pull/271); older deployments keep their current request format and matching behavior + - Edit conflicts use bounded, host-rendered facts rather than untrusted worker text; a rejected batch writes nothing + +- Added GPT point-release family fallback and GPT-6.1 Sol + - A GPT point release without its own entry inherits the recognized family's context/output limits, pricing, and reasoning settings; explicit per-release entries win + - GPT-6.1 Sol joins the OpenAI and Agents catalogs, not Assistants; its limits and prices currently inherit GPT-6 Sol rather than new provider-published figures + - Native OpenAI Responses routing can inherit the family policy; Azure deployment routing and custom-endpoint opt-in behavior stay unchanged + +- Hardened web-search credential pairing + - User-provided Firecrawl or SearXNG URLs cannot be combined with the server's API key, even when the destination passes SSRF checks + - Firecrawl ignores the optional user URL and uses its default endpoint; SearXNG cannot initialize with that mixed-ownership pair because its URL is required + - User-owned pairs, administrator-owned pairs, and keyless SearXNG remain supported; set both URL and key at the same ownership level + +- Added tenant-scoped YAML custom endpoints + - `endpoints.custom[].tenantId` optionally restricts an endpoint and its associated model specs to the authoritative request tenant; omission preserves deployment-wide availability + - Tenant IDs accept 1โ€“128 letters, digits, hyphens, underscores, or periods; whitespace and the reserved `__SYSTEM__` sentinel are invalid + - Missing tenant context does not receive scoped endpoints; cache, override, runtime augmentation, and fallback paths keep the same boundary + - Filtering the last model spec restores normal model controls while preserving explicit interface settings + - Upgrade every API replica before configuring scoped endpoints; older replicas do not enforce the new YAML field + +- Bound per-user MCP API keys to their destinations + - UI-created/shared servers require each user to enter a key again when the URL path/query, proxy, transport, auth format/header, or configured OAuth client/destination changes + - Equivalent and cosmetic updates preserve existing keys; legacy keys remain usable at their unchanged boundary without a bulk migration + - Shared servers resolve only their currently declared credential variables, so old generated names cannot bypass re-entry + - Upgrade every API replica, including configuration writers, before relying on the new binding + - Updated the config version to `1.3.17` diff --git a/content/changelog/v0.8.8.mdx b/content/changelog/v0.8.8.mdx new file mode 100644 index 000000000..ba751279b --- /dev/null +++ b/content/changelog/v0.8.8.mdx @@ -0,0 +1,1325 @@ +--- +date: 2026-09-29 +title: ๐Ÿš€ LibreChat v0.8.8 +description: The v0.8.8 release of LibreChat +version: '0.8.8' +--- + +## What's Changed + +Operator-facing YAML, environment, default, and migration changes are collected in [Config v1.3.15](/changelog/config_v1.3.15), [Config v1.3.16](/changelog/config_v1.3.16), and [Config v1.3.17](/changelog/config_v1.3.17). + +### ๐Ÿž๏ธ Highlights + +- [Meet Lia: Building LibreChat with LibreChat](/blog/2026-09-29_meet-lia-building-librechat-with-librechat), introducing Lia and the Agent capabilities behind our coding workflow +- Interrupt, steer, or queue Agent runs, with HITL approvals, questions, and tool-limit recovery +- Scheduled Chats with cron, time zones, MCP readiness checks, and Project destinations +- New models: GPT-5.6, GPT-6 Astra, Sol, and Luna, and GPT-6.1 Sol with family fallback; Claude Fable 5.1, Opus 5.5, and Sonnet 5.5; Gemini 3.8, 3.7, 3.6 Flash, and 3.5 Flash-Lite +- Live activity, phase, reasoning, and tool-intent labels, with background-task cards, header controls, and preparation-versus-call timing +- Unified Agent Builder with Skill authoring, background tools, and Programmatic Tool Calling +- Beta durable Agent Events and saved Agent teams with background wakeups and automatic continuation +- Beta Agent Plugins and highly experimental selectable Code workspaces with guarded permissions, recovery, opt-in attach/detach, linked-worktree lanes, and capability-negotiated tolerant edits +- Beta Agent Management API for Agent and Skill automation with M2M OIDC, public OpenAPI routes, and caller-executed Open Responses tools +- Context Usage for dialogue, tool traffic, cache, instructions, cost, and runway pressure +- Unified draggable Pinned section, manual compaction, mobile polish, and rich-text copy +- Unified attachments with automatic model routing and lazy File Search or Code provisioning +- Stronger MCP, OpenID, shared-link, tenant, file, Redis, and DocumentDB safeguards +- Conversation Trace Viewer with steps, roles, previews, and cost; run-scoped Subagent file sharing and chat-list filtering + +--- + +### โœจ Features + +- ๐Ÿงท feat: Carry Ask User Answers Past Compaction by [@danny-avila](https://github.com/danny-avila) in [#15944](https://github.com/LibreChat-AI/LibreChat/pull/15944) +- ๐Ÿช‚ feat: Opt-In Text Fallback for Files No Tool Can Read by [@danny-avila](https://github.com/danny-avila) in [#15940](https://github.com/LibreChat-AI/LibreChat/pull/15940) +- ๐Ÿ•น๏ธ feat: Run Declared Project Actions on Attached Workers by [@danny-avila](https://github.com/danny-avila) in [#15943](https://github.com/LibreChat-AI/LibreChat/pull/15943) +- ๐Ÿชง feat: Unify Artifact Triggers as Tool Rows by [@berry-13](https://github.com/berry-13) in [#15915](https://github.com/LibreChat-AI/LibreChat/pull/15915) +- ๐Ÿ” feat: Retry OpenID Discovery After Startup Failures by [@danny-avila](https://github.com/danny-avila) in [#15899](https://github.com/LibreChat-AI/LibreChat/pull/15899) +- ๐Ÿ”ญ feat: Conversation Trace Viewer by [@danny-avila](https://github.com/danny-avila) in [#15869](https://github.com/LibreChat-AI/LibreChat/pull/15869) +- ๐Ÿฆ˜ feat: Share Run-Scoped Files With Subagents by [@usnavy13](https://github.com/usnavy13) in [#15848](https://github.com/LibreChat-AI/LibreChat/pull/15848) +- ๐Ÿ”Ž feat: Filter and Sort the Sidebar Chats List by [@berry-13](https://github.com/berry-13) in [#15842](https://github.com/LibreChat-AI/LibreChat/pull/15842) +- ๐Ÿ“Ÿ feat: Record Safe Upstream Model Failures by [@dustinhealy](https://github.com/dustinhealy) in [#15800](https://github.com/LibreChat-AI/LibreChat/pull/15800) +- ๐Ÿ”  feat: Render Safe Upstream Model Errors by [@dustinhealy](https://github.com/dustinhealy) in [#15837](https://github.com/LibreChat-AI/LibreChat/pull/15837) +- ๐Ÿ–‹๏ธ feat: Seal Code Environment Choices Per Conversation by [@danny-avila](https://github.com/danny-avila) in [#15868](https://github.com/LibreChat-AI/LibreChat/pull/15868) +- ๐Ÿก feat: Remember Agent Workspace Defaults by [@danny-avila](https://github.com/danny-avila) in [#15843](https://github.com/LibreChat-AI/LibreChat/pull/15843) +- ๐Ÿงฎ feat: Surface Retained Tool-Message Context Usage by [@berry-13](https://github.com/berry-13) in [#15796](https://github.com/LibreChat-AI/LibreChat/pull/15796) +- ๐Ÿฉป feat: improve agent filter controls for insights by [@upman](https://github.com/upman) in [#15807](https://github.com/LibreChat-AI/LibreChat/pull/15807) +- ๐Ÿ“Œ feat: Unified Pinned Section With Sidebar Drag Interactions by [@berry-13](https://github.com/berry-13) in [#15057](https://github.com/LibreChat-AI/LibreChat/pull/15057) +- ๐Ÿฅผ feat: Expose BYOM Cancellation Diagnostics by [@danny-avila](https://github.com/danny-avila) in [#15810](https://github.com/LibreChat-AI/LibreChat/pull/15810) +- ๐Ÿช“ feat: Cancel Background Tool Invocations by [@danny-avila](https://github.com/danny-avila) in [#15773](https://github.com/LibreChat-AI/LibreChat/pull/15773) +- ๐Ÿช” feat: Expose Bounded Attached Bash Timeouts by [@danny-avila](https://github.com/danny-avila) in [#15776](https://github.com/LibreChat-AI/LibreChat/pull/15776) +- ๐Ÿ•๏ธ feat: Select Attached Code Workspaces by [@danny-avila](https://github.com/danny-avila) in [#15768](https://github.com/LibreChat-AI/LibreChat/pull/15768) +- ๐Ÿšš feat: Route Attachments and Provision Tools Lazily by [@danny-avila](https://github.com/danny-avila) in [#15763](https://github.com/LibreChat-AI/LibreChat/pull/15763) +- ๐Ÿ•’ feat: Track terms acceptance timestamp by [@berry-13](https://github.com/berry-13) in [#10810](https://github.com/LibreChat-AI/LibreChat/pull/10810) +- ๐Ÿ”„ feat: Continue Shared Conversations as Personal Copies by [@berry-13](https://github.com/berry-13) in [#13714](https://github.com/LibreChat-AI/LibreChat/pull/13714) +- ๐Ÿช feat: HITL Tool Approval Scaffolding (Slice A) by [@danny-avila](https://github.com/danny-avila) in [#12938](https://github.com/LibreChat-AI/LibreChat/pull/12938) +- ๐Ÿง  feat: Add Memory as an Agent Capability with Inline Tools and Ephemeral Badge by [@danny-avila](https://github.com/danny-avila) in [#13869](https://github.com/LibreChat-AI/LibreChat/pull/13869) +- ๐Ÿ“‡ feat: Agent Contact Visibility with Owner Fallback by [@peeeteeer](https://github.com/peeeteeer) in [#13663](https://github.com/LibreChat-AI/LibreChat/pull/13663) +- ๐ŸชŸ feat: Faithful Over-Window Context Estimate via Prune Mirror and Overhead Reserve by [@danny-avila](https://github.com/danny-avila) in [#13959](https://github.com/LibreChat-AI/LibreChat/pull/13959) +- ๐Ÿชญ feat: Add opt-in Langfuse fanout gateway + collector by [@upman](https://github.com/upman) in [#13872](https://github.com/LibreChat-AI/LibreChat/pull/13872) +- ๐Ÿช feat: Human-in-the-Loop Runtime - Tool Approval + Ask-User-Question (Slice B) by [@danny-avila](https://github.com/danny-avila) in [#13942](https://github.com/LibreChat-AI/LibreChat/pull/13942) +- ๐Ÿช— feat: Dock-Style Fisheye Nav Rail With Instant Hover Preview by [@danny-avila](https://github.com/danny-avila) in [#14021](https://github.com/LibreChat-AI/LibreChat/pull/14021) +- ๐Ÿค– feat: Add Claude Sonnet 5 Support by [@danny-avila](https://github.com/danny-avila) in [#14042](https://github.com/LibreChat-AI/LibreChat/pull/14042) +- ๐Ÿฅท feat: Add `showInMenu` Option to Model Specs by [@alexkorep](https://github.com/alexkorep) in [#14034](https://github.com/LibreChat-AI/LibreChat/pull/14034) +- ๐Ÿซท feat: Exclude File Authoring Tools From Eager Execution by [@danny-avila](https://github.com/danny-avila) in [#14051](https://github.com/LibreChat-AI/LibreChat/pull/14051) +- ๐Ÿช feat: Configurable Tool-Approval Policy via Programmatic Hooks by [@danny-avila](https://github.com/danny-avila) in [#14025](https://github.com/LibreChat-AI/LibreChat/pull/14025) +- ๐Ÿงน feat: Eager HITL Checkpoint Cleanup (Expiry + Deletion) & Full-Wiring E2E by [@danny-avila](https://github.com/danny-avila) in [#14123](https://github.com/LibreChat-AI/LibreChat/pull/14123) +- ๐Ÿงฐ feat: Redesign Agent Builder with Unified Tools Marketplace, Skills & Orchestration by [@berry-13](https://github.com/berry-13) in [#13952](https://github.com/LibreChat-AI/LibreChat/pull/13952) +- ๐Ÿ“ก feat: add rum browser page-load diagnostics by [@upman](https://github.com/upman) in [#14106](https://github.com/LibreChat-AI/LibreChat/pull/14106) +- ๐ŸŽš๏ธ feat: Explicit "Use All Skills" Toggle in the Skills Section by [@berry-13](https://github.com/berry-13) in [#14125](https://github.com/LibreChat-AI/LibreChat/pull/14125) +- ๐Ÿ™‹ feat: ask_user_question - agent-initiated questions with durable pause/resume by [@danny-avila](https://github.com/danny-avila) in [#14139](https://github.com/LibreChat-AI/LibreChat/pull/14139) +- ๐Ÿ—‚๏ธ feat: Per-Agent Memory Partitions by [@danny-avila](https://github.com/danny-avila) in [#14084](https://github.com/LibreChat-AI/LibreChat/pull/14084) +- ๐Ÿค– feat: Add GPT-5.6 (Sol/Terra/Luna) OpenAI Models by [@danny-avila](https://github.com/danny-avila) in [#14206](https://github.com/LibreChat-AI/LibreChat/pull/14206) +- ๐Ÿชญ feat: support per-run central export suppression by [@upman](https://github.com/upman) in [#14207](https://github.com/LibreChat-AI/LibreChat/pull/14207) +- โœจ feat: stateful_code_sessions capability for warm Code API sandbox sessions (experimental) by [@danny-avila](https://github.com/danny-avila) in [#14150](https://github.com/LibreChat-AI/LibreChat/pull/14150) +- ๐Ÿง  feat: Add GPT-5.6 reasoning.mode + reasoning.context (Responses API) by [@danny-avila](https://github.com/danny-avila) in [#14233](https://github.com/LibreChat-AI/LibreChat/pull/14233) +- ๐Ÿงต feat: Background Tool Calls for Agents & Model Specs by [@danny-avila](https://github.com/danny-avila) in [#14197](https://github.com/LibreChat-AI/LibreChat/pull/14197) +- ๐Ÿ—๏ธ feat: Encrypted Langfuse Fanout Config by [@dustinhealy](https://github.com/dustinhealy) in [#14107](https://github.com/LibreChat-AI/LibreChat/pull/14107) +- ๐Ÿงญ feat: Mid-Run Steering and Queued Messages for Agent Runs by [@danny-avila](https://github.com/danny-avila) in [#14220](https://github.com/LibreChat-AI/LibreChat/pull/14220) +- โ™จ๏ธ feat: Prewarm Stateful Code Sandboxes with Cold-Boot UX Feedback by [@danny-avila](https://github.com/danny-avila) in [#14239](https://github.com/LibreChat-AI/LibreChat/pull/14239) +- ๐Ÿ“› feat: Add Client Name Header to Tavily Search Requests by [@manisrinivasan2k1](https://github.com/manisrinivasan2k1) in [#14082](https://github.com/LibreChat-AI/LibreChat/pull/14082) +- ๐Ÿ’ฌ feat: Explain Steering & Queuing at Every User-Facing Surface by [@danny-avila](https://github.com/danny-avila) in [#14260](https://github.com/LibreChat-AI/LibreChat/pull/14260) +- ๐Ÿ–ผ๏ธ feat: Return Sandbox Images From `read_file` as Viewable Artifacts by [@danny-avila](https://github.com/danny-avila) in [#14277](https://github.com/LibreChat-AI/LibreChat/pull/14277) +- feat: add low-noise Redis observability by [@upman](https://github.com/upman) in [#14309](https://github.com/LibreChat-AI/LibreChat/pull/14309) +- โœ‹ feat: Add Reclaim-Gated Controls to In-Flight Steers by [@danny-avila](https://github.com/danny-avila) in [#14321](https://github.com/LibreChat-AI/LibreChat/pull/14321) +- ๐Ÿซง feat: Float In-Flight Steers Over the Thread with Collapsible Content by [@danny-avila](https://github.com/danny-avila) in [#14365](https://github.com/LibreChat-AI/LibreChat/pull/14365) +- โšก feat: Add Gemini 3.6 Flash and Gemini 3.5 Flash-Lite Support by [@danny-avila](https://github.com/danny-avila) in [#14369](https://github.com/LibreChat-AI/LibreChat/pull/14369) +- ๐Ÿงต feat: Native Background Execution for Code Interpreter Tools by [@danny-avila](https://github.com/danny-avila) in [#14386](https://github.com/LibreChat-AI/LibreChat/pull/14386) +- โœณ๏ธ feat: Claude Opus 5 Support by [@danny-avila](https://github.com/danny-avila) in [#14422](https://github.com/LibreChat-AI/LibreChat/pull/14422) +- โฑ๏ธ feat: Configurable HTTP Server Timeouts by [@danny-avila](https://github.com/danny-avila) in [#14481](https://github.com/LibreChat-AI/LibreChat/pull/14481) +- ๐Ÿ•ถ feat: Generalize Admin Config Secret Redaction by [@dustinhealy](https://github.com/dustinhealy) in [#14509](https://github.com/LibreChat-AI/LibreChat/pull/14509) +- ๐Ÿท๏ธ feat: Activity Groups With Fast-Model Headers by [@danny-avila](https://github.com/danny-avila) in [#14391](https://github.com/LibreChat-AI/LibreChat/pull/14391) +- ๐Ÿ—๏ธ feat: Custom Endpoint API Key Encryption via Array Secret Registry by [@danny-avila](https://github.com/danny-avila) in [#14510](https://github.com/LibreChat-AI/LibreChat/pull/14510) +- ๐ŸŽฏ feat: Tool Intent Label Capability (tool_intents) by [@danny-avila](https://github.com/danny-avila) in [#14499](https://github.com/LibreChat-AI/LibreChat/pull/14499) +- ๐Ÿชข feat: Langfuse Fanout Connection Setting by [@danny-avila](https://github.com/danny-avila) in [#14108](https://github.com/LibreChat-AI/LibreChat/pull/14108) +- ๐Ÿ›‘ feat: Preemptive Steer - Backend Interrupt & Steer by [@danny-avila](https://github.com/danny-avila) in [#14518](https://github.com/LibreChat-AI/LibreChat/pull/14518) +- ๐ŸŽฏ feat: Per-Tool Intent Labels for Model Specs by [@danny-avila](https://github.com/danny-avila) in [#14526](https://github.com/LibreChat-AI/LibreChat/pull/14526) +- โšก feat: Interrupt & Steer, Client by [@danny-avila](https://github.com/danny-avila) in [#14528](https://github.com/LibreChat-AI/LibreChat/pull/14528) +- ๐Ÿงต feat: Background-Native Code Execution Tools by [@danny-avila](https://github.com/danny-avila) in [#14532](https://github.com/LibreChat-AI/LibreChat/pull/14532) +- ๐ŸŽฏ feat: Render Tool Intent as the Live Tool-Call Label by [@danny-avila](https://github.com/danny-avila) in [#14536](https://github.com/LibreChat-AI/LibreChat/pull/14536) +- ๐ŸŽฏ feat: Per-Tool Intent Label Toggles in the Agent Builder by [@danny-avila](https://github.com/danny-avila) in [#14550](https://github.com/LibreChat-AI/LibreChat/pull/14550) +- โšก feat: Reliable Interrupt & Steer Escalation and Recovery by [@danny-avila](https://github.com/danny-avila) in [#14558](https://github.com/LibreChat-AI/LibreChat/pull/14558) +- ๐Ÿ’ฌ feat: Interim Progress Card for Streaming Q&A Calls by [@danny-avila](https://github.com/danny-avila) in [#14576](https://github.com/LibreChat-AI/LibreChat/pull/14576) +- ๐Ÿšฆ feat: Configurable Circuit Breakers for Runaway Streamed Tool Args by [@danny-avila](https://github.com/danny-avila) in [#14613](https://github.com/LibreChat-AI/LibreChat/pull/14613) +- โšก feat: Coalesce Redis Streaming Delta Publications into Windowed Batches by [@danny-avila](https://github.com/danny-avila) in [#14614](https://github.com/LibreChat-AI/LibreChat/pull/14614) +- ๐Ÿ”’ feat: Add allowedAddresses Exemption to Speech (STT/TTS) and OCR Config Schemas by [@dustinhealy](https://github.com/dustinhealy) in [#14559](https://github.com/LibreChat-AI/LibreChat/pull/14559) +- ๐ŸŒŠ feat: Wire Adaptive Stream Smoothing Across Google, Bedrock, and Zero-Disable Semantics by [@danny-avila](https://github.com/danny-avila) in [#14660](https://github.com/LibreChat-AI/LibreChat/pull/14660) +- ๐Ÿ”— feat: Admin Panel Link in Settings for Admins by [@dustinhealy](https://github.com/dustinhealy) in [#14662](https://github.com/LibreChat-AI/LibreChat/pull/14662) +- ๐Ÿ‘‹ feat: Day-Aware Landing Greeting Schedule by [@berry-13](https://github.com/berry-13) in [#14633](https://github.com/LibreChat-AI/LibreChat/pull/14633) +- ๐Ÿ”‘ feat: Refresh-Capable Google Admin OAuth Sessions by [@dustinhealy](https://github.com/dustinhealy) in [#13832](https://github.com/LibreChat-AI/LibreChat/pull/13832) +- ๐Ÿ›ก๏ธ feat: Add Batched MCP Authority Proofs by [@danny-avila](https://github.com/danny-avila) in [#14688](https://github.com/LibreChat-AI/LibreChat/pull/14688) +- ๐Ÿช feat: Add Claude Hook Compatibility Layer by [@danny-avila](https://github.com/danny-avila) in [#14412](https://github.com/LibreChat-AI/LibreChat/pull/14412) +- โ›ถ feat: add fullscreen artifact previews by [@berry-13](https://github.com/berry-13) in [#14585](https://github.com/LibreChat-AI/LibreChat/pull/14585) +- ๐Ÿ”Œ feat: Add Agent Plugins (Experimental) by [@danny-avila](https://github.com/danny-avila) in [#14704](https://github.com/LibreChat-AI/LibreChat/pull/14704) +- ๐Ÿ”— feat: Shared Conversation Badge and Stable Share Links by [@berry-13](https://github.com/berry-13) in [#14712](https://github.com/LibreChat-AI/LibreChat/pull/14712) +- ๐Ÿงœ feat: Open Mermaid Diagrams as Artifacts with SVG/PNG Export by [@berry-13](https://github.com/berry-13) in [#14713](https://github.com/LibreChat-AI/LibreChat/pull/14713) +- ๐Ÿชถ feat: Resolve Explicit Subagents Lazily by [@danny-avila](https://github.com/danny-avila) in [#14714](https://github.com/LibreChat-AI/LibreChat/pull/14714) +- ๐Ÿ“ก feat: Route Web Search and Scrape Egress through the SSRF-safe Agent by [@dustinhealy](https://github.com/dustinhealy) in [#14606](https://github.com/LibreChat-AI/LibreChat/pull/14606) +- ๐ŸŽจ feat: Add Versioned Theme Foundation by [@danny-avila](https://github.com/danny-avila) in [#14709](https://github.com/LibreChat-AI/LibreChat/pull/14709) +- ๐Ÿช† feat: Add Parent Activity Phase Summaries by [@danny-avila](https://github.com/danny-avila) in [#14721](https://github.com/LibreChat-AI/LibreChat/pull/14721) +- ๐ŸŽจ feat: Refine Client Colors and Sharing Dialogs by [@berry-13](https://github.com/berry-13) in [#14734](https://github.com/LibreChat-AI/LibreChat/pull/14734) +- ๐ŸŽ›๏ธ feat: Adopt Composer Density Tokens by [@danny-avila](https://github.com/danny-avila) in [#14730](https://github.com/LibreChat-AI/LibreChat/pull/14730) +- ๐Ÿก feat: Batched User Questions With A Single Bounded Answer Form by [@danny-avila](https://github.com/danny-avila) in [#14737](https://github.com/LibreChat-AI/LibreChat/pull/14737) +- ๐Ÿช feat: Execute Agent Plugin Command Hooks by [@danny-avila](https://github.com/danny-avila) in [#14755](https://github.com/LibreChat-AI/LibreChat/pull/14755) +- ๐Ÿšฃโ€โ™€๏ธ feat: Smooth Streaming Text Fade-In by [@danny-avila](https://github.com/danny-avila) in [#14757](https://github.com/LibreChat-AI/LibreChat/pull/14757) +- ๐Ÿชข feat: add Langfuse session links by [@upman](https://github.com/upman) in [#14776](https://github.com/LibreChat-AI/LibreChat/pull/14776) +- ๐Ÿ”– feat: Bound Parent Activity Phases With an Exclusive End Index by [@danny-avila](https://github.com/danny-avila) in [#14768](https://github.com/LibreChat-AI/LibreChat/pull/14768) +- ๐Ÿ’ฌ style: Unify Message Row Layout and Edit Surfaces by [@berry-13](https://github.com/berry-13) in [#14770](https://github.com/LibreChat-AI/LibreChat/pull/14770) +- ๐Ÿ“„ feat: accept PowerPoint template MIME type by [@snapydziuba](https://github.com/snapydziuba) in [#14761](https://github.com/LibreChat-AI/LibreChat/pull/14761) +- โšก feat: Add Gemini 3.7 Flash Support by [@danny-avila](https://github.com/danny-avila) in [#14818](https://github.com/LibreChat-AI/LibreChat/pull/14818) +- ๐Ÿช„ feat: Smooth Activity Phase Transitions by [@danny-avila](https://github.com/danny-avila) in [#14832](https://github.com/LibreChat-AI/LibreChat/pull/14832) +- ๐Ÿ“ฑ style: Reclaim the Assistant Avatar Gutter on Mobile by [@danny-avila](https://github.com/danny-avila) in [#14836](https://github.com/LibreChat-AI/LibreChat/pull/14836) +- ๐Ÿ“ฑ style: Consolidate the Mobile Chat Header by [@danny-avila](https://github.com/danny-avila) in [#14843](https://github.com/LibreChat-AI/LibreChat/pull/14843) +- โžก๏ธ style: Flush the In-Flight Steer Stack to the Composer Edge by [@danny-avila](https://github.com/danny-avila) in [#14854](https://github.com/LibreChat-AI/LibreChat/pull/14854) +- ๐ŸŽจ feat: Color the Context Gauge by Category and Collapse its Breakdown by [@danny-avila](https://github.com/danny-avila) in [#14855](https://github.com/LibreChat-AI/LibreChat/pull/14855) +- ๐Ÿ“ feat: Match the Message Column to the Composer by [@berry-13](https://github.com/berry-13) in [#14851](https://github.com/LibreChat-AI/LibreChat/pull/14851) +- ๐Ÿš feat: Central Trace Destination Opt-Out for Langfuse by [@danny-avila](https://github.com/danny-avila) in [#14838](https://github.com/LibreChat-AI/LibreChat/pull/14838) +- ๐Ÿค feat: Allow Promptless Sends When Files Are Attached by [@i-anubhav-anand](https://github.com/i-anubhav-anand) in [#13717](https://github.com/LibreChat-AI/LibreChat/pull/13717) +- ๐Ÿ“ฅ feat: Download Code Blocks as Files by [@i-anubhav-anand](https://github.com/i-anubhav-anand) in [#13715](https://github.com/LibreChat-AI/LibreChat/pull/13715) +- ๐Ÿ“ฑ feat: Give the Mobile Nav the Whole Screen by [@danny-avila](https://github.com/danny-avila) in [#14849](https://github.com/LibreChat-AI/LibreChat/pull/14849) +- ๐Ÿ’„ style: Align the Overflow Menu's Icons and Ease the Assistant Header by [@danny-avila](https://github.com/danny-avila) in [#14888](https://github.com/LibreChat-AI/LibreChat/pull/14888) +- ๐Ÿ—‚๏ธ feat: Display Chat Title in Tab Setting by [@berry-13](https://github.com/berry-13) in [#14881](https://github.com/LibreChat-AI/LibreChat/pull/14881) +- ๐Ÿ›ค๏ธ feat: Per-Agent Code Execution Routing With Stateful Session Scopes by [@danny-avila](https://github.com/danny-avila) in [#14848](https://github.com/LibreChat-AI/LibreChat/pull/14848) +- ๐Ÿ—‚๏ธ feat: Rework the Projects Dashboard, Sidebar and Scoped Composer by [@berry-13](https://github.com/berry-13) in [#14866](https://github.com/LibreChat-AI/LibreChat/pull/14866) +- ๐ŸŽ›๏ธ feat: Consistent Dialogs, Clearer Settings, and a Keyboard Shortcuts Switch by [@berry-13](https://github.com/berry-13) in [#14882](https://github.com/LibreChat-AI/LibreChat/pull/14882) +- โฑ๏ธ feat: Show Run-Step Durations On Tool Cards by [@danny-avila](https://github.com/danny-avila) in [#14892](https://github.com/LibreChat-AI/LibreChat/pull/14892) +- ๐Ÿ—„๏ธ feat: Record When a Conversation Was Archived by [@berry-13](https://github.com/berry-13) in [#14863](https://github.com/LibreChat-AI/LibreChat/pull/14863) +- ๐Ÿ’„ style: Align the Thinking Dot with the Header Icon by [@danny-avila](https://github.com/danny-avila) in [#14895](https://github.com/LibreChat-AI/LibreChat/pull/14895) +- ๐Ÿ—œ๏ธ feat: Let Users Toggle Client-Side Image Resizing by [@berry-13](https://github.com/berry-13) in [#14883](https://github.com/LibreChat-AI/LibreChat/pull/14883) +- ๐Ÿง  feat: Add Live Reasoning Labels by [@danny-avila](https://github.com/danny-avila) in [#14893](https://github.com/LibreChat-AI/LibreChat/pull/14893) +- ๐Ÿ“ฑ feat: Swipe the Mobile Drawer Open and Closed by [@danny-avila](https://github.com/danny-avila) in [#14902](https://github.com/LibreChat-AI/LibreChat/pull/14902) +- ๐Ÿ“œ feat: Follow Streaming Args in Tool Detail Panes by [@danny-avila](https://github.com/danny-avila) in [#14906](https://github.com/LibreChat-AI/LibreChat/pull/14906) +- ๐Ÿ“‹ feat: Attach Long Pasted Text as a File by [@berry-13](https://github.com/berry-13) in [#14884](https://github.com/LibreChat-AI/LibreChat/pull/14884) +- ๐Ÿ—„๏ธ feat: Archive All Chats From Data Controls by [@berry-13](https://github.com/berry-13) in [#14885](https://github.com/LibreChat-AI/LibreChat/pull/14885) +- ๐Ÿ›ก๏ธ feat: Let Admins Restrict Stateful Workspace Scopes by [@danny-avila](https://github.com/danny-avila) in [#14910](https://github.com/LibreChat-AI/LibreChat/pull/14910) +- ๐ŸŽฌ style: Reveal the Chat on Programmatic Drawer Closes by [@danny-avila](https://github.com/danny-avila) in [#14930](https://github.com/LibreChat-AI/LibreChat/pull/14930) +- ๐Ÿ›ฐ๏ธ feat: Execute Generic Agent Trigger Deliveries by [@danny-avila](https://github.com/danny-avila) in [#14921](https://github.com/LibreChat-AI/LibreChat/pull/14921) +- ๐Ÿ“ก feat: Add Generic Agent Trigger Dispatch Seam by [@danny-avila](https://github.com/danny-avila) in [#14916](https://github.com/LibreChat-AI/LibreChat/pull/14916) +- ๐Ÿ“ฌ feat: Add Durable Agent Trigger Delivery by [@danny-avila](https://github.com/danny-avila) in [#14925](https://github.com/LibreChat-AI/LibreChat/pull/14925) +- ๐Ÿชœ style: Step Through Batched Questions One at a Time by [@danny-avila](https://github.com/danny-avila) in [#14935](https://github.com/LibreChat-AI/LibreChat/pull/14935) +- ๐Ÿ•ธ๏ธ feat: Run Saved Agent Teams as Subagents by [@danny-avila](https://github.com/danny-avila) in [#14944](https://github.com/LibreChat-AI/LibreChat/pull/14944) +- ๐Ÿชข feat: Custom Request Headers For Langfuse by [@danny-avila](https://github.com/danny-avila) in [#14945](https://github.com/LibreChat-AI/LibreChat/pull/14945) +- ๐Ÿงต feat: Persist View-Only Subagent Threads by [@danny-avila](https://github.com/danny-avila) in [#14957](https://github.com/LibreChat-AI/LibreChat/pull/14957) +- ๐Ÿ’ก feat: add DB-backed admin insights by [@upman](https://github.com/upman) in [#14898](https://github.com/LibreChat-AI/LibreChat/pull/14898) +- ๐Ÿ“ feat: Surface Stateful Workspace Downloads by [@danny-avila](https://github.com/danny-avila) in [#14984](https://github.com/LibreChat-AI/LibreChat/pull/14984) +- ๐Ÿ›ฐ๏ธ feat: Route Live Subagent Controls Across Replicas by [@danny-avila](https://github.com/danny-avila) in [#14971](https://github.com/LibreChat-AI/LibreChat/pull/14971) +- ๐Ÿชƒ feat: Wake Parent Agents on Child Completion by [@danny-avila](https://github.com/danny-avila) in [#14975](https://github.com/LibreChat-AI/LibreChat/pull/14975) +- ๐ŸŽ›๏ธ feat: Make Max Subagents Configurable via librechat.yaml by [@berry-13](https://github.com/berry-13) in [#15023](https://github.com/LibreChat-AI/LibreChat/pull/15023) +- ๐Ÿ”— feat: Open Footer Site Links in a New Tab by [@berry-13](https://github.com/berry-13) in [#15019](https://github.com/LibreChat-AI/LibreChat/pull/15019) +- โฑ๏ธ feat: Run Scheduled Chats Through Durable Agent Triggers by [@danny-avila](https://github.com/danny-avila) in [#14939](https://github.com/LibreChat-AI/LibreChat/pull/14939) +- ๐Ÿ•Š๏ธ feat: Yield to Subagent Completion Wakeups by [@danny-avila](https://github.com/danny-avila) in [#15066](https://github.com/LibreChat-AI/LibreChat/pull/15066) +- ๐Ÿงพ feat: Sibling Task Manifest for Resumed Parent Runs by [@danny-avila](https://github.com/danny-avila) in [#15063](https://github.com/LibreChat-AI/LibreChat/pull/15063) +- ๐Ÿ“œ feat: Add Optional Collapse for Long User Messages by [@berry-13](https://github.com/berry-13) in [#15034](https://github.com/LibreChat-AI/LibreChat/pull/15034) +- ๐Ÿ—‚๏ธ feat: Scope Scheduled Chats to Chat Projects by [@danny-avila](https://github.com/danny-avila) in [#15056](https://github.com/LibreChat-AI/LibreChat/pull/15056) +- ๐ŸชŸ feat: Read Child Threads Through Their Parent by [@danny-avila](https://github.com/danny-avila) in [#15073](https://github.com/LibreChat-AI/LibreChat/pull/15073) +- ๐Ÿ›ฐ๏ธ feat: Show Child Agent Activity in a Side Panel by [@danny-avila](https://github.com/danny-avila) in [#15075](https://github.com/LibreChat-AI/LibreChat/pull/15075) +- ๐Ÿ™ˆ feat: Config Option to Hide Response Feedback Buttons by [@berry-13](https://github.com/berry-13) in [#15085](https://github.com/LibreChat-AI/LibreChat/pull/15085) +- โœจ feat: Context Gauge Hover Reveal and Breakdown Motion Polish by [@berry-13](https://github.com/berry-13) in [#15038](https://github.com/LibreChat-AI/LibreChat/pull/15038) +- ๐Ÿซฅ feat: Add Temporary Chat Empty State and Active Indicator by [@berry-13](https://github.com/berry-13) in [#15086](https://github.com/LibreChat-AI/LibreChat/pull/15086) +- ๐ŸŽ›๏ธ feat: Configurable SearXNG Search Options by [@berry-13](https://github.com/berry-13) in [#14987](https://github.com/LibreChat-AI/LibreChat/pull/14987) +- ๐Ÿ™‹ feat: Collapse Settled Question Records by Default by [@danny-avila](https://github.com/danny-avila) in [#15107](https://github.com/LibreChat-AI/LibreChat/pull/15107) +- ๐ŸชŸ feat: Unify Subagent Activity Panel by [@danny-avila](https://github.com/danny-avila) in [#15106](https://github.com/LibreChat-AI/LibreChat/pull/15106) +- ๐Ÿ›‚ feat: Filter Model-Bound Content by Source by [@danny-avila](https://github.com/danny-avila) in [#14425](https://github.com/LibreChat-AI/LibreChat/pull/14425) +- ๐Ÿ“จ feat: Add Authenticated Agent Event Ingress by [@danny-avila](https://github.com/danny-avila) in [#15110](https://github.com/LibreChat-AI/LibreChat/pull/15110) +- ๐Ÿ“ก feat: Stream Detached Subagent Activity by [@danny-avila](https://github.com/danny-avila) in [#15111](https://github.com/LibreChat-AI/LibreChat/pull/15111) +- ๐Ÿ“จ feat: Continue Bound Child Agents from Events by [@danny-avila](https://github.com/danny-avila) in [#15112](https://github.com/LibreChat-AI/LibreChat/pull/15112) +- ๐Ÿ–ฅ๏ธ feat: Stream PTC Inner Tool Calls as a CLI-Style Trace by [@danny-avila](https://github.com/danny-avila) in [#15115](https://github.com/LibreChat-AI/LibreChat/pull/15115) +- ๐ŸŽš๏ธ feat: Configure Agent Event Runtime in YAML by [@danny-avila](https://github.com/danny-avila) in [#15128](https://github.com/LibreChat-AI/LibreChat/pull/15128) +- ๐Ÿชด feat: Fork Completed Subagents Into Continuable Chats by [@danny-avila](https://github.com/danny-avila) in [#15133](https://github.com/LibreChat-AI/LibreChat/pull/15133) +- ๐Ÿ“ฑ feat: Offer a Dismissable Strip of Chat Beside the Mobile Drawer by [@berry-13](https://github.com/berry-13) in [#14990](https://github.com/LibreChat-AI/LibreChat/pull/14990) +- โฐ feat: Custom Cron Cadence for Scheduled Chats by [@berry-13](https://github.com/berry-13) in [#15084](https://github.com/LibreChat-AI/LibreChat/pull/15084) +- ๐Ÿงญ feat: Choose a Schedule's Time Zone by [@berry-13](https://github.com/berry-13) in [#15119](https://github.com/LibreChat-AI/LibreChat/pull/15119) +- ๐Ÿ“† feat: Weekly Schedules on Several Days by [@berry-13](https://github.com/berry-13) in [#15120](https://github.com/LibreChat-AI/LibreChat/pull/15120) +- ๐Ÿ•ฐ๏ธ feat: Clock Format and Week Start Preferences by [@berry-13](https://github.com/berry-13) in [#15121](https://github.com/LibreChat-AI/LibreChat/pull/15121) +- โฑ๏ธ feat: Shared Time Picker for Schedule Times by [@berry-13](https://github.com/berry-13) in [#15122](https://github.com/LibreChat-AI/LibreChat/pull/15122) +- ๐Ÿ“‡ feat: Surface Event Child Activity Through a Bounded Parent Index by [@danny-avila](https://github.com/danny-avila) in [#15142](https://github.com/LibreChat-AI/LibreChat/pull/15142) +- ๐Ÿชน feat: Shared Empty State for Side Panels by [@berry-13](https://github.com/berry-13) in [#15123](https://github.com/LibreChat-AI/LibreChat/pull/15123) +- โฑ๏ธ feat: Show Elapsed Time Under the Streaming Response by [@danny-avila](https://github.com/danny-avila) in [#15167](https://github.com/LibreChat-AI/LibreChat/pull/15167) +- ๐Ÿงพ feat: Persist Authoritative Subagent Control Receipts by [@danny-avila](https://github.com/danny-avila) in [#15168](https://github.com/LibreChat-AI/LibreChat/pull/15168) +- ๐Ÿชถ feat: Support Non-Persistent Controlled Themes by [@danny-avila](https://github.com/danny-avila) in [#15170](https://github.com/LibreChat-AI/LibreChat/pull/15170) +- ๐ŸŽ›๏ธ feat: Expose Authoritative Subagent Controls by [@danny-avila](https://github.com/danny-avila) in [#15169](https://github.com/LibreChat-AI/LibreChat/pull/15169) +- ๐Ÿ”Œ feat: Background Execution Toggles for Actions & Plugin Tools by [@danny-avila](https://github.com/danny-avila) in [#14407](https://github.com/LibreChat-AI/LibreChat/pull/14407) +- ๐Ÿฆบ feat: Configurable Baseline HTTP Security Headers by [@danny-avila](https://github.com/danny-avila) in [#14445](https://github.com/LibreChat-AI/LibreChat/pull/14445) +- ๐Ÿš feat: Nonce-Based Content Security Policy for the SPA Shell by [@danny-avila](https://github.com/danny-avila) in [#14446](https://github.com/LibreChat-AI/LibreChat/pull/14446) +- ๐Ÿชข feat: Coalesce Bound Agent Event Bursts by [@danny-avila](https://github.com/danny-avila) in [#15208](https://github.com/LibreChat-AI/LibreChat/pull/15208) +- ๐Ÿงพ feat: Track Authoritative Agent Event Outcomes by [@danny-avila](https://github.com/danny-avila) in [#15213](https://github.com/LibreChat-AI/LibreChat/pull/15213) +- โœ๏ธ feat: Edit Pasted Text and Clear It on New Chat by [@berry-13](https://github.com/berry-13) in [#15017](https://github.com/LibreChat-AI/LibreChat/pull/15017) +- ๐Ÿฉป feat(langfuse): add tenant export telemetry by [@upman](https://github.com/upman) in [#15247](https://github.com/LibreChat-AI/LibreChat/pull/15247) +- ๐Ÿชข feat: Resume Bound Event Actors from Checkpoint Forks by [@danny-avila](https://github.com/danny-avila) in [#15227](https://github.com/LibreChat-AI/LibreChat/pull/15227) +- ๐Ÿ“ฌ feat: Serialize Bound Actor Event Mailboxes by [@danny-avila](https://github.com/danny-avila) in [#15260](https://github.com/LibreChat-AI/LibreChat/pull/15260) +- ๐Ÿงพ feat: Store Durable Event Actor Receipts by [@danny-avila](https://github.com/danny-avila) in [#15265](https://github.com/LibreChat-AI/LibreChat/pull/15265) +- ๐Ÿงต feat: Unify Subagent Child Threads by [@danny-avila](https://github.com/danny-avila) in [#15261](https://github.com/LibreChat-AI/LibreChat/pull/15261) +- ๐Ÿง… feat: Reveal Subagent Thread History and Event Detail on Demand by [@danny-avila](https://github.com/danny-avila) in [#15283](https://github.com/LibreChat-AI/LibreChat/pull/15283) +- ๐Ÿ•ธ๏ธ feat: Complete Keenable Web Search Provider by [@danny-avila](https://github.com/danny-avila) in [#15288](https://github.com/LibreChat-AI/LibreChat/pull/15288) +- ๐Ÿชข feat: show Langfuse session link in shared chats by [@upman](https://github.com/upman) in [#15273](https://github.com/LibreChat-AI/LibreChat/pull/15273) +- ๐ŸŽผ feat: Unify Agent Turn Execution Behind One Immutable Plan by [@danny-avila](https://github.com/danny-avila) in [#15296](https://github.com/LibreChat-AI/LibreChat/pull/15296) +- ๐Ÿซ† feat: Fingerprint Agent Context for Zero-Read Warm Continuation by [@danny-avila](https://github.com/danny-avila) in [#15299](https://github.com/LibreChat-AI/LibreChat/pull/15299) +- ๐Ÿค– feat: make Event Actor HITL durable by [@danny-avila](https://github.com/danny-avila) in [#15305](https://github.com/LibreChat-AI/LibreChat/pull/15305) +- ๐Ÿช‚ feat: Make Event Actor Detached Actions Durable by [@danny-avila](https://github.com/danny-avila) in [#15307](https://github.com/LibreChat-AI/LibreChat/pull/15307) +- ๐Ÿฑ feat: Guide Compaction With a Bounded Semantic Index by [@danny-avila](https://github.com/danny-avila) in [#15340](https://github.com/LibreChat-AI/LibreChat/pull/15340) +- ๐Ÿ“ฌ feat: Establish Background Continuation Admission by [@danny-avila](https://github.com/danny-avila) in [#15348](https://github.com/LibreChat-AI/LibreChat/pull/15348) +- ๐Ÿ›‘ feat: Cancel MCP Discovery Work at the Caller Deadline by [@danny-avila](https://github.com/danny-avila) in [#15353](https://github.com/LibreChat-AI/LibreChat/pull/15353) +- ๐Ÿ›„ feat: Restore Compaction Guidance Across Continuations by [@danny-avila](https://github.com/danny-avila) in [#15356](https://github.com/LibreChat-AI/LibreChat/pull/15356) +- ๐Ÿ›Ž๏ธ feat: Wake Agents on Background Tool Completion by [@danny-avila](https://github.com/danny-avila) in [#15350](https://github.com/LibreChat-AI/LibreChat/pull/15350) +- ๐Ÿต feat: Continue Late Steers in Warm Agent Runs by [@danny-avila](https://github.com/danny-avila) in [#15357](https://github.com/LibreChat-AI/LibreChat/pull/15357) +- ๐Ÿงฉ feat: Collapsible Wake-Up Task Cards and Subagent UI Consistency by [@danny-avila](https://github.com/danny-avila) in [#15364](https://github.com/LibreChat-AI/LibreChat/pull/15364) +- ๐Ÿ—ฟ feat: Add Attached Stateful Code Environments by [@danny-avila](https://github.com/danny-avila) in [#15352](https://github.com/LibreChat-AI/LibreChat/pull/15352) +- ๐Ÿงฒ feat: Enable Secure Attached Environment Pairing by [@danny-avila](https://github.com/danny-avila) in [#15355](https://github.com/LibreChat-AI/LibreChat/pull/15355) +- โœ… feat: Delivery Receipt Checkmarks for Steered Messages by [@danny-avila](https://github.com/danny-avila) in [#15376](https://github.com/LibreChat-AI/LibreChat/pull/15376) +- ๐Ÿงณ feat: Register Principal-Owned Code Environments by [@danny-avila](https://github.com/danny-avila) in [#15365](https://github.com/LibreChat-AI/LibreChat/pull/15365) +- ๐Ÿง  feat: Retain Subagent Reasoning Like Main Chat and Drop the Running Status Chip by [@danny-avila](https://github.com/danny-avila) in [#15379](https://github.com/LibreChat-AI/LibreChat/pull/15379) +- ๐Ÿ“ฌ feat: Move Agent Queued Turns Server-Side by [@danny-avila](https://github.com/danny-avila) in [#15370](https://github.com/LibreChat-AI/LibreChat/pull/15370) +- ๐Ÿช— feat: Fold a Live Run's Tool-Call Groups Into the Phase Card by [@danny-avila](https://github.com/danny-avila) in [#15434](https://github.com/LibreChat-AI/LibreChat/pull/15434) +- ๐Ÿชถ feat: Enable Standalone Skill Authoring by [@danny-avila](https://github.com/danny-avila) in [#15480](https://github.com/LibreChat-AI/LibreChat/pull/15480) +- ๐Ÿ›ซ feat: Enable Self-Service Code Worker Pairing by [@danny-avila](https://github.com/danny-avila) in [#15367](https://github.com/LibreChat-AI/LibreChat/pull/15367) +- ๐Ÿ›ž feat: Manage Personal Code Environment Lifecycles by [@danny-avila](https://github.com/danny-avila) in [#15369](https://github.com/LibreChat-AI/LibreChat/pull/15369) +- ๐Ÿงบ feat: Preserve Partial Work at Tool Call Limits by [@berry-13](https://github.com/berry-13) in [#15486](https://github.com/LibreChat-AI/LibreChat/pull/15486) +- ๐Ÿงค feat: Enforce Safe BYOM Tool Approvals by [@danny-avila](https://github.com/danny-avila) in [#15503](https://github.com/LibreChat-AI/LibreChat/pull/15503) +- ๐Ÿ”ญ feat: Audit PII Filter Findings by [@danny-avila](https://github.com/danny-avila) in [#15508](https://github.com/LibreChat-AI/LibreChat/pull/15508) +- ๐Ÿ•น๏ธ feat: Configure BYOM Tool Permissions by [@danny-avila](https://github.com/danny-avila) in [#15504](https://github.com/LibreChat-AI/LibreChat/pull/15504) +- ๐Ÿ“– feat: Add Claude Fable 5.1 Support by [@danny-avila](https://github.com/danny-avila) in [#15512](https://github.com/LibreChat-AI/LibreChat/pull/15512) +- ๐Ÿชช feat: Propagate Tenant to Agent Model Headers by [@dustinhealy](https://github.com/dustinhealy) in [#15521](https://github.com/LibreChat-AI/LibreChat/pull/15521) +- โญ๏ธ feat: Honor an Interrupt Before the Model Has Answered by [@danny-avila](https://github.com/danny-avila) in [#15491](https://github.com/LibreChat-AI/LibreChat/pull/15491) +- โšก feat: Add Gemini 3.8 Flash Support by [@danny-avila](https://github.com/danny-avila) in [#15519](https://github.com/LibreChat-AI/LibreChat/pull/15519) +- ๐ŸงŠ feat: Persist Context Fading Tier Across Agent Runs by [@danny-avila](https://github.com/danny-avila) in [#15505](https://github.com/LibreChat-AI/LibreChat/pull/15505) +- ๐Ÿ›๏ธ feat: Establish Agent Management API Contract by [@danny-avila](https://github.com/danny-avila) in [#15545](https://github.com/LibreChat-AI/LibreChat/pull/15545) +- ๐Ÿ” feat: Add M2M Authentication for Agent Management by [@dustinhealy](https://github.com/dustinhealy) in [#15555](https://github.com/LibreChat-AI/LibreChat/pull/15555) +- ๐Ÿชต feat: Add OpenTelemetry Logs Pipeline via Winston Bridge by [@danny-avila](https://github.com/danny-avila) in [#15565](https://github.com/LibreChat-AI/LibreChat/pull/15565) +- ๐Ÿ‘€ feat: Add Agent Management Read Endpoints by [@dustinhealy](https://github.com/dustinhealy) in [#15561](https://github.com/LibreChat-AI/LibreChat/pull/15561) +- โœจ feat: add morphing state icons across the client by [@berry-13](https://github.com/berry-13) in [#14697](https://github.com/LibreChat-AI/LibreChat/pull/14697) +- โž• feat: Add Agent Management Creation Endpoint by [@dustinhealy](https://github.com/dustinhealy) in [#15564](https://github.com/LibreChat-AI/LibreChat/pull/15564) +- โœ๏ธ feat: Add Agent Management Update Endpoint by [@dustinhealy](https://github.com/dustinhealy) in [#15566](https://github.com/LibreChat-AI/LibreChat/pull/15566) +- ๐Ÿช“ feat: Add Tenant-Scoped Agent Deletion by [@dustinhealy](https://github.com/dustinhealy) in [#15573](https://github.com/LibreChat-AI/LibreChat/pull/15573) +- ๐Ÿ‘“ feat: Read Attached Workspace Files by [@danny-avila](https://github.com/danny-avila) in [#15524](https://github.com/LibreChat-AI/LibreChat/pull/15524) +- ๐Ÿ•ฏ๏ธ feat: Search Text in Attached Workspaces by [@danny-avila](https://github.com/danny-avila) in [#15525](https://github.com/LibreChat-AI/LibreChat/pull/15525) +- ๐ŸŒŒ feat: Add GPT-6 Astra Support by [@danny-avila](https://github.com/danny-avila) in [#15567](https://github.com/LibreChat-AI/LibreChat/pull/15567) +- ๐ŸŽจ feat: Theme-Adaptive SVG Support for Custom MCP and Group Icons by [@berry-13](https://github.com/berry-13) in [#13817](https://github.com/LibreChat-AI/LibreChat/pull/13817) +- ๐ŸŒณ feat: List Attached Workspace Trees by [@danny-avila](https://github.com/danny-avila) in [#15527](https://github.com/LibreChat-AI/LibreChat/pull/15527) +- ๐Ÿ•๏ธ feat: Provision Native Code Workers by [@danny-avila](https://github.com/danny-avila) in [#15587](https://github.com/LibreChat-AI/LibreChat/pull/15587) +- ๐Ÿ›ป feat: Route Bash Through Attached Workspaces by [@danny-avila](https://github.com/danny-avila) in [#15546](https://github.com/LibreChat-AI/LibreChat/pull/15546) +- ๐Ÿ““ feat: Author Files in Attached Workspaces by [@danny-avila](https://github.com/danny-avila) in [#15548](https://github.com/LibreChat-AI/LibreChat/pull/15548) +- ๐Ÿ›ฐ๏ธ feat: Show BYOM Worker Readiness by [@danny-avila](https://github.com/danny-avila) in [#15618](https://github.com/LibreChat-AI/LibreChat/pull/15618) +- ๐Ÿฉป feat(insights): Scope Insights to Authorized Agents by [@upman](https://github.com/upman) in [#15549](https://github.com/LibreChat-AI/LibreChat/pull/15549) +- ๐Ÿ“‹ feat: Copy Messages as Rich Text by [@berry-13](https://github.com/berry-13) in [#15087](https://github.com/LibreChat-AI/LibreChat/pull/15087) +- โ™ฟ feat: High Contrast Light and Dark Appearance Modes by [@berry-13](https://github.com/berry-13) in [#15178](https://github.com/LibreChat-AI/LibreChat/pull/15178) +- ๐Ÿชช feat: Add Per-Agent Git Identity by [@danny-avila](https://github.com/danny-avila) in [#15628](https://github.com/LibreChat-AI/LibreChat/pull/15628) +- ๐Ÿ”ญ feat: Tag Browser Diagnostics With Client Build IDs by [@danny-avila](https://github.com/danny-avila) in [#15656](https://github.com/LibreChat-AI/LibreChat/pull/15656) +- ๐Ÿงถ feat: Flatten Active Message Threads Behind a Flag by [@danny-avila](https://github.com/danny-avila) in [#15633](https://github.com/LibreChat-AI/LibreChat/pull/15633) +- ๐Ÿ›… feat: Add Agent File Management APIs by [@danny-avila](https://github.com/danny-avila) in [#15666](https://github.com/LibreChat-AI/LibreChat/pull/15666) +- ๐Ÿ‹ feat: Add AMD Lemonade Provider Recognition and Branding by [@berry-13](https://github.com/berry-13) in [#15664](https://github.com/LibreChat-AI/LibreChat/pull/15664) +- ๐Ÿงฐ feat: Unify Tool Activity, Reasoning, Search, and Agent Workflows by [@berry-13](https://github.com/berry-13) in [#14546](https://github.com/LibreChat-AI/LibreChat/pull/14546) +- ๐Ÿ›‚ feat: Add Configurable BYOM Enrollment Policy by [@danny-avila](https://github.com/danny-avila) in [#15673](https://github.com/LibreChat-AI/LibreChat/pull/15673) +- ๐Ÿ“œ feat: Add Skills Discovery and Authoring to the Management API by [@danny-avila](https://github.com/danny-avila) in [#15642](https://github.com/LibreChat-AI/LibreChat/pull/15642) +- ๐Ÿชฌ feat: Configure Langfuse Trace User Identity and Metadata by [@danny-avila](https://github.com/danny-avila) in [#15667](https://github.com/LibreChat-AI/LibreChat/pull/15667) +- ๐Ÿ—ณ๏ธ feat: Define Conversation Code Approval Modes by [@danny-avila](https://github.com/danny-avila) in [#15685](https://github.com/LibreChat-AI/LibreChat/pull/15685) +- ๐Ÿงถ feat: Thread Conversation Code Approval Through Requests by [@danny-avila](https://github.com/danny-avila) in [#15698](https://github.com/LibreChat-AI/LibreChat/pull/15698) +- ๐Ÿชง feat: Surface Conversation Code Approval Modes by [@danny-avila](https://github.com/danny-avila) in [#15703](https://github.com/LibreChat-AI/LibreChat/pull/15703) +- ๐Ÿช— feat: Compact Context in a Summarize-Only Turn by [@danny-avila](https://github.com/danny-avila) in [#15690](https://github.com/LibreChat-AI/LibreChat/pull/15690) +- ๐Ÿง feat: Restore Interactive Tool Approval Review by [@danny-avila](https://github.com/danny-avila) in [#15717](https://github.com/LibreChat-AI/LibreChat/pull/15717) +- ๐Ÿ›ซ feat: Enable Full Access for BYOM Coding by [@danny-avila](https://github.com/danny-avila) in [#15718](https://github.com/LibreChat-AI/LibreChat/pull/15718) +- ๐Ÿงฐ feat: Move Code Settings Into Run Code by [@danny-avila](https://github.com/danny-avila) in [#15722](https://github.com/LibreChat-AI/LibreChat/pull/15722) +- โœจ feat: Client-Executed Function Tools for the Responses API by [@alexkorep](https://github.com/alexkorep) in [#16078](https://github.com/LibreChat-AI/LibreChat/pull/16078) +- ๐Ÿ›๏ธ feat: Add Programming App to OpenRouter Categories by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16228](https://github.com/LibreChat-AI/LibreChat/pull/16228) +- ๐ŸŒž feat: Add GPT-6 Sol and Luna Support by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16221](https://github.com/LibreChat-AI/LibreChat/pull/16221) +- ๐Ÿ” feat: Support Cognito Access Tokens for Agent Management by [@dustinhealy](https://github.com/dustinhealy) in [#16224](https://github.com/LibreChat-AI/LibreChat/pull/16224) +- ๐ŸŽน feat: Add Claude Opus 5.5 Support by [@danny-avila](https://github.com/danny-avila) in [#16215](https://github.com/LibreChat-AI/LibreChat/pull/16215) +- โฒ๏ธ feat: Report a Background Task's Start, Settlement and Elapsed Time by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16193](https://github.com/LibreChat-AI/LibreChat/pull/16193) +- ๐Ÿง‘โ€๐Ÿš€ feat: Add Grok 4.7 Support Through xAI by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16173](https://github.com/LibreChat-AI/LibreChat/pull/16173) +- ๐Ÿซง feat: Hold a Live Run's Activity at One Row by [@danny-avila](https://github.com/danny-avila) in [#16118](https://github.com/LibreChat-AI/LibreChat/pull/16118) +- ๐Ÿ“Ÿ feat: Render System Events as Distinct Turns by [@danny-avila](https://github.com/danny-avila) in [#16119](https://github.com/LibreChat-AI/LibreChat/pull/16119) +- ๐Ÿ’ต feat: Show Cost per Record, Step and Response in the Trace Ledger by [@danny-avila](https://github.com/danny-avila) in [#16120](https://github.com/LibreChat-AI/LibreChat/pull/16120) +- ๐Ÿ’Œ feat: Authenticate RUM Proxy Exports by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16114](https://github.com/LibreChat-AI/LibreChat/pull/16114) +- ๐Ÿฃ feat: Invoke Newly Authored Skills in the Same Run by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16036](https://github.com/LibreChat-AI/LibreChat/pull/16036) +- ๐ŸŒณ feat: Isolate Attached Workspaces by Conversation by [@danny-avila](https://github.com/danny-avila) in [#16107](https://github.com/LibreChat-AI/LibreChat/pull/16107) +- ๐Ÿ’ฌ feat: Read a Model Call as a Conversation in the Trace Viewer by [@danny-avila](https://github.com/danny-avila) in [#16103](https://github.com/LibreChat-AI/LibreChat/pull/16103) +- ๐Ÿ—ฃ๏ธ feat: Trace Viewer Roles, Agent Identity and Tool Rounds by [@danny-avila](https://github.com/danny-avila) in [#16098](https://github.com/LibreChat-AI/LibreChat/pull/16098) +- โ›ฝ feat: Negotiate Background Command Timeouts by [@danny-avila](https://github.com/danny-avila) in [#16100](https://github.com/LibreChat-AI/LibreChat/pull/16100) +- ๐Ÿชœ feat: Trace Viewer Steps, Sequence Scale and Previews by [@danny-avila](https://github.com/danny-avila) in [#16009](https://github.com/LibreChat-AI/LibreChat/pull/16009) +- ๐Ÿ“ช feat: Send Per-Request MCP Headers Without Hiding the Tool Catalog by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15988](https://github.com/LibreChat-AI/LibreChat/pull/15988) +- ๐Ÿ”Œ feat: OpenAPI spec and docs for the public Agents API by [@AtefBellaaj](https://github.com/AtefBellaaj) in [#15928](https://github.com/LibreChat-AI/LibreChat/pull/15928) +- ๐Ÿ“– Load Repository Instructions for Attached Workspaces by [@danny-avila](https://github.com/danny-avila) in [#16008](https://github.com/LibreChat-AI/LibreChat/pull/16008) +- ๐Ÿชช feat: Pass Schedule Identity to MCP Token Providers by [@danny-avila](https://github.com/danny-avila) in [#15962](https://github.com/LibreChat-AI/LibreChat/pull/15962) +- ๐Ÿš๏ธ feat: Recover Coding Chats With Missing Workspaces by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16273](https://github.com/LibreChat-AI/LibreChat/pull/16273) +- ๐ŸŒซ๏ธ feat: Add Bounded PII Text Transformation (library groundwork only; message ingress still blocks matches) by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16295](https://github.com/LibreChat-AI/LibreChat/pull/16295) +- ๐Ÿ“‹ feat: View and Stop Background Tasks From the Chat Header by [@danny-avila](https://github.com/danny-avila) in [#16348](https://github.com/LibreChat-AI/LibreChat/pull/16348) +- ๐Ÿงฒ feat: Attach or Leave a Workspace on a Saved Chat by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16124](https://github.com/LibreChat-AI/LibreChat/pull/16124) +- ๐Ÿชœ feat: Title an Open Activity Fold and Reach Failed Calls in One Click by [@danny-avila](https://github.com/danny-avila) in [#16390](https://github.com/LibreChat-AI/LibreChat/pull/16390) +- ๐Ÿ’ญ feat: Bring the Streaming Thought Peek Back Under a Collapsed Live Card by [@danny-avila](https://github.com/danny-avila) in [#16394](https://github.com/LibreChat-AI/LibreChat/pull/16394) +- ๐ŸŽด feat: Render Background Tasks as Native Tool Cards by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16407](https://github.com/LibreChat-AI/LibreChat/pull/16407) +- ๐ŸŽผ feat: Add Claude Sonnet 5.5 Support by [@danny-avila](https://github.com/danny-avila) in [#16460](https://github.com/LibreChat-AI/LibreChat/pull/16460) + +- ๐Ÿ•˜ feat: Distinguish Tool Preparation From Tool Call Time by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16455](https://github.com/LibreChat-AI/LibreChat/pull/16455) +- ๐Ÿ›ค๏ธ feat: Route Linked Worktree Requests into Per-Worktree Lanes by [@danny-avila](https://github.com/danny-avila) in [#16477](https://github.com/LibreChat-AI/LibreChat/pull/16477) +- ๐ŸŽฏ feat: Tolerant Workspace Edits with Host-Rendered Conflict Diagnostics by [@danny-avila](https://github.com/danny-avila) in [#16520](https://github.com/LibreChat-AI/LibreChat/pull/16520) +- ๐Ÿงฌ feat: Resolve GPT Point Releases to Their Family and Add GPT-6.1 Sol by [@danny-avila](https://github.com/danny-avila) in [#16526](https://github.com/LibreChat-AI/LibreChat/pull/16526) +- ๐Ÿ๏ธ feat: Scope YAML Custom Endpoints by Tenant by [@danny-avila](https://github.com/danny-avila) in [#16537](https://github.com/LibreChat-AI/LibreChat/pull/16537) + +### ๐Ÿ› Fixes + +- ๐Ÿงผ fix: Render Agent Description HTML Safely by [@danny-avila](https://github.com/danny-avila) in [#15951](https://github.com/LibreChat-AI/LibreChat/pull/15951) +- ๐Ÿซด fix: Preserve Queued Follow-Ups Through Handoff by [@danny-avila](https://github.com/danny-avila) in [#15942](https://github.com/LibreChat-AI/LibreChat/pull/15942) +- ๐Ÿ“– fix: Preview Extracted Upload Text by [@danny-avila](https://github.com/danny-avila) in [#15946](https://github.com/LibreChat-AI/LibreChat/pull/15946) +- ๐Ÿ”“ fix: Keep Code Approval Mode Selectable Mid-Run by [@danny-avila](https://github.com/danny-avila) in [#15938](https://github.com/LibreChat-AI/LibreChat/pull/15938) +- ๐ŸŽž๏ธ fix: Deliver Opted-In Custom Endpoint Media Safely by [@danny-avila](https://github.com/danny-avila) in [#15937](https://github.com/LibreChat-AI/LibreChat/pull/15937) +- ๐Ÿ›… fix: Preserve Agent Management Upload IDs by [@dustinhealy](https://github.com/dustinhealy) in [#15840](https://github.com/LibreChat-AI/LibreChat/pull/15840) +- ๐Ÿ‘ฏ fix: Reject Duplicate Tool Approval Identities by [@danny-avila](https://github.com/danny-avila) in [#15933](https://github.com/LibreChat-AI/LibreChat/pull/15933) +- ๐Ÿ“ซ fix: Route Azure Astra Through Responses API by [@usnavy13](https://github.com/usnavy13) in [#15845](https://github.com/LibreChat-AI/LibreChat/pull/15845) +- ๐Ÿ—ฏ๏ธ fix: Give Failed Turns Actionable Guidance by [@berry-13](https://github.com/berry-13) in [#15896](https://github.com/LibreChat-AI/LibreChat/pull/15896) +- ๐Ÿต fix: Support Renewable MCP Credentials for Schedules by [@danny-avila](https://github.com/danny-avila) in [#15908](https://github.com/LibreChat-AI/LibreChat/pull/15908) +- ๐Ÿงท fix: Keep a Failed Summary From Bounding the Conversation History by [@berry-13](https://github.com/berry-13) in [#15913](https://github.com/LibreChat-AI/LibreChat/pull/15913) +- ๐Ÿ‘‘ fix: Elect a Single Expired-File Sweeper by [@danny-avila](https://github.com/danny-avila) in [#15909](https://github.com/LibreChat-AI/LibreChat/pull/15909) +- ๐Ÿš› fix: Move Sealed Chats to New Code Environments by [@danny-avila](https://github.com/danny-avila) in [#15902](https://github.com/LibreChat-AI/LibreChat/pull/15902) +- ๐Ÿฆ fix: Reserve Credits for In-Flight Requests by [@danny-avila](https://github.com/danny-avila) in [#15879](https://github.com/LibreChat-AI/LibreChat/pull/15879) +- ๐Ÿ“ fix: Accept Custom WIDTHxHEIGHT Sizes in OpenAI Image Tools by [@danny-avila](https://github.com/danny-avila) in [#15904](https://github.com/LibreChat-AI/LibreChat/pull/15904) +- ๐Ÿ’ฐ fix: Bill Stopped Agent Turns From Provider Usage by [@danny-avila](https://github.com/danny-avila) in [#15889](https://github.com/LibreChat-AI/LibreChat/pull/15889) +- ๐Ÿงฟ fix: Bind Login Flows to the Browser That Started Them by [@danny-avila](https://github.com/danny-avila) in [#15880](https://github.com/LibreChat-AI/LibreChat/pull/15880) +- ๐Ÿชข fix: Withhold the Editor's Rerun Where No User Turn Can Be Replayed by [@berry-13](https://github.com/berry-13) in [#15887](https://github.com/LibreChat-AI/LibreChat/pull/15887) +- ๐ŸชŸ fix: Opaque Header Controls Over the Chat Gradient by [@berry-13](https://github.com/berry-13) in [#15894](https://github.com/LibreChat-AI/LibreChat/pull/15894) +- ๐Ÿงท fix: Mark a Failed Compaction So Its Rerun Controls Stay Withheld by [@berry-13](https://github.com/berry-13) in [#15883](https://github.com/LibreChat-AI/LibreChat/pull/15883) +- ๐Ÿชง fix: Emit the Configured-Footer Answer With the HTML Shell by [@berry-13](https://github.com/berry-13) in [#15886](https://github.com/LibreChat-AI/LibreChat/pull/15886) +- ๐Ÿงพ fix: Count the Tool Results a Tool-Limit Stop Retains by [@berry-13](https://github.com/berry-13) in [#15893](https://github.com/LibreChat-AI/LibreChat/pull/15893) +- ๐Ÿท๏ธ fix: Keep a Configured Sender Label From Revealing the Model on Hover by [@aruj0](https://github.com/aruj0) in [#15489](https://github.com/LibreChat-AI/LibreChat/pull/15489) +- ๐Ÿซ‚ fix: Scope People Picker Searches to Permitted Types by [@danny-avila](https://github.com/danny-avila) in [#15878](https://github.com/LibreChat-AI/LibreChat/pull/15878) +- ๐Ÿ›ฌ fix: Land MCP OAuth Callbacks on Waiting Connections by [@danny-avila](https://github.com/danny-avila) in [#15876](https://github.com/LibreChat-AI/LibreChat/pull/15876) +- ๐Ÿ’ค fix: Preserve Dormant Workspace Bindings by [@danny-avila](https://github.com/danny-avila) in [#15877](https://github.com/LibreChat-AI/LibreChat/pull/15877) +- ๐Ÿ”Ž fix: Enforce WEB_SEARCH Role Permission on Agents by [@danny-avila](https://github.com/danny-avila) in [#15875](https://github.com/LibreChat-AI/LibreChat/pull/15875) +- ๐Ÿช‚ fix: Release Stalled MCP Catalog Recovery Without Dropping Refreshed Tokens by [@danny-avila](https://github.com/danny-avila) in [#15871](https://github.com/LibreChat-AI/LibreChat/pull/15871) +- ๐Ÿ“‡ fix: Stop an MCP Credential Refresh From Fencing Its Own Catalog Recovery by [@danny-avila](https://github.com/danny-avila) in [#15865](https://github.com/LibreChat-AI/LibreChat/pull/15865) +- ๐Ÿชข fix: Recover a Failed MCP Server Once When Reinspections Overlap by [@danny-avila](https://github.com/danny-avila) in [#15867](https://github.com/LibreChat-AI/LibreChat/pull/15867) +- ๐Ÿ” fix: Stop an MCP Credential Refresh From Fencing Its Own Connection by [@danny-avila](https://github.com/danny-avila) in [#15863](https://github.com/LibreChat-AI/LibreChat/pull/15863) +- ๐Ÿ’  fix: Paint Native Tool Verification Badges by [@berry-13](https://github.com/berry-13) in [#15862](https://github.com/LibreChat-AI/LibreChat/pull/15862) +- ๐Ÿ”ฃ fix: Encode Images From Storage Keys by [@Ricky-Hao](https://github.com/Ricky-Hao) in [#15851](https://github.com/LibreChat-AI/LibreChat/pull/15851) +- ๐Ÿงต fix: Preserve Per-Message Inspection Budgets Through Provider Preparation by [@danny-avila](https://github.com/danny-avila) in [#15860](https://github.com/LibreChat-AI/LibreChat/pull/15860) +- ๐Ÿงฒ fix: Match Directory Users to Existing Principals by [@danny-avila](https://github.com/danny-avila) in [#15855](https://github.com/LibreChat-AI/LibreChat/pull/15855) +- ๐Ÿงจ fix: Defuse Skill and Artifact Parsing Backtracking by [@danny-avila](https://github.com/danny-avila) in [#15856](https://github.com/LibreChat-AI/LibreChat/pull/15856) +- ๐Ÿฅ… fix: Keep Tool Error Prefix Parsing In Bounds by [@danny-avila](https://github.com/danny-avila) in [#15857](https://github.com/LibreChat-AI/LibreChat/pull/15857) +- ๐Ÿฐ fix: Read OpenID Flight State From Mongo Primary by [@danny-avila](https://github.com/danny-avila) in [#15849](https://github.com/LibreChat-AI/LibreChat/pull/15849) +- ๐Ÿ“ด fix: Stop Hidden Code Spinners by [@danny-avila](https://github.com/danny-avila) in [#15846](https://github.com/LibreChat-AI/LibreChat/pull/15846) +- ๐Ÿ“ฟ fix: Inspect Stored File Locators Per Message by [@danny-avila](https://github.com/danny-avila) in [#15841](https://github.com/LibreChat-AI/LibreChat/pull/15841) +- ๐Ÿ”  fix: Name Artifact Downloads After Their Titles by [@danny-avila](https://github.com/danny-avila) in [#15836](https://github.com/LibreChat-AI/LibreChat/pull/15836) +- ๐ŸงŠ fix: Withhold Rerun Controls on Compaction Turns by [@berry-13](https://github.com/berry-13) in [#15797](https://github.com/LibreChat-AI/LibreChat/pull/15797) +- ๐Ÿท๏ธ fix: Model-Agnostic Hint for Short Skill Descriptions by [@L4XB](https://github.com/L4XB) in [#15833](https://github.com/LibreChat-AI/LibreChat/pull/15833) +- ๐Ÿ”Œ fix: Close Leaked HTTP Server in Server Specs by [@jomspk](https://github.com/jomspk) in [#15821](https://github.com/LibreChat-AI/LibreChat/pull/15821) +- ๐Ÿชข fix: Keep One Code File per Sandbox Destination by [@jomspk](https://github.com/jomspk) in [#15817](https://github.com/LibreChat-AI/LibreChat/pull/15817) +- ๐Ÿฅ… fix: Keep Mobile Composer Actions In Bounds by [@danny-avila](https://github.com/danny-avila) in [#15825](https://github.com/LibreChat-AI/LibreChat/pull/15825) +- ๐Ÿ›– fix: Restore Saved Attached Workspaces by [@danny-avila](https://github.com/danny-avila) in [#15811](https://github.com/LibreChat-AI/LibreChat/pull/15811) +- ๐Ÿ“ฏ fix: Propagate Host Cancellation Into API Tools by [@danny-avila](https://github.com/danny-avila) in [#15812](https://github.com/LibreChat-AI/LibreChat/pull/15812) +- ๐Ÿˆณ fix: Treat Blank Mongo Index Settings as Unset by [@Zsanz3](https://github.com/Zsanz3) in [#15809](https://github.com/LibreChat-AI/LibreChat/pull/15809) +- ๐ŸŽ’ fix: Carry Subagent Identity Past Streaming by [@dustinhealy](https://github.com/dustinhealy) in [#15795](https://github.com/LibreChat-AI/LibreChat/pull/15795) +- ๐Ÿ›‚ fix: Back Off MCP OAuth Discovery by [@danny-avila](https://github.com/danny-avila) in [#15783](https://github.com/LibreChat-AI/LibreChat/pull/15783) +- ๐Ÿ›Ž๏ธ fix: Preflight MCP Readiness for Scheduled Chats by [@danny-avila](https://github.com/danny-avila) in [#15782](https://github.com/LibreChat-AI/LibreChat/pull/15782) +- ๐Ÿ•ณ๏ธ fix: Clear Nullable Queue Anchor by [@danny-avila](https://github.com/danny-avila) in [#15794](https://github.com/LibreChat-AI/LibreChat/pull/15794) +- ๐Ÿ›Ÿ fix: Recover CodeAPI File Uploads After Throttling by [@danny-avila](https://github.com/danny-avila) in [#15784](https://github.com/LibreChat-AI/LibreChat/pull/15784) +- ๐Ÿซ† fix: Preserve Durable Parents for Queued Turns by [@danny-avila](https://github.com/danny-avila) in [#15787](https://github.com/LibreChat-AI/LibreChat/pull/15787) +- ๐ŸŒณ fix: Guard Ambiguous BYOM Workspace Selection by [@danny-avila](https://github.com/danny-avila) in [#15785](https://github.com/LibreChat-AI/LibreChat/pull/15785) +- ๐Ÿ” fix: Send One Code API Authentication Method by [@danny-avila](https://github.com/danny-avila) in [#15781](https://github.com/LibreChat-AI/LibreChat/pull/15781) +- ๐Ÿ›‘ fix: Preserve BYOM Foreground Cancellation Identity by [@danny-avila](https://github.com/danny-avila) in [#15777](https://github.com/LibreChat-AI/LibreChat/pull/15777) +- ๐Ÿชก fix: Thread Stop Into BYOM Commands by [@danny-avila](https://github.com/danny-avila) in [#15772](https://github.com/LibreChat-AI/LibreChat/pull/15772) +- ๐Ÿชด fix: Restore Native Workspace Selection by [@danny-avila](https://github.com/danny-avila) in [#15771](https://github.com/LibreChat-AI/LibreChat/pull/15771) +- ๐Ÿงฟ fix: Patch gRPC xDS Denial of Service by [@danny-avila](https://github.com/danny-avila) in [#15769](https://github.com/LibreChat-AI/LibreChat/pull/15769) +- ๐Ÿ”ข fix: Normalize PDF Citation Page Numbers by [@danny-avila](https://github.com/danny-avila) in [#15731](https://github.com/LibreChat-AI/LibreChat/pull/15731) +- ๐Ÿชซ fix: Gate Programmatic Bash on Stateful Worker Capabilities by [@danny-avila](https://github.com/danny-avila) in [#15726](https://github.com/LibreChat-AI/LibreChat/pull/15726) +- ๐Ÿซง fix: Raise Nested Popovers Above Dialog Layers by [@danny-avila](https://github.com/danny-avila) in [#15738](https://github.com/LibreChat-AI/LibreChat/pull/15738) +- โณ fix: Separate Temporary and General Chat Retention by [@danny-avila](https://github.com/danny-avila) in [#15734](https://github.com/LibreChat-AI/LibreChat/pull/15734) +- ๐Ÿ›„ fix: Clear MCP Connection State Before Catalog Refresh by [@danny-avila](https://github.com/danny-avila) in [#15741](https://github.com/LibreChat-AI/LibreChat/pull/15741) +- ๐Ÿง˜ fix: Settle Stale Response Parts by [@danny-avila](https://github.com/danny-avila) in [#15743](https://github.com/LibreChat-AI/LibreChat/pull/15743) +- ๐ŸŸซ fix: Reject Invalid Hex Color Matches by [@danny-avila](https://github.com/danny-avila) in [#15744](https://github.com/LibreChat-AI/LibreChat/pull/15744) +- ๐Ÿซฃ fix: Hide Scroll-to-Bottom Under Composer Panels by [@danny-avila](https://github.com/danny-avila) in [#15746](https://github.com/LibreChat-AI/LibreChat/pull/15746) +- ๐Ÿชช fix: Guard Null Avatar URLs in Social Login by [@ncchinh](https://github.com/ncchinh) in [#15747](https://github.com/LibreChat-AI/LibreChat/pull/15747) +- ๐Ÿ‘ฏ fix: Collapse Radix Layer Packages to One Copy by [@danny-avila](https://github.com/danny-avila) in [#15742](https://github.com/LibreChat-AI/LibreChat/pull/15742) +- ๐Ÿง fix: Accommodate BYOM Queue and Execution Budgets by [@danny-avila](https://github.com/danny-avila) in [#15750](https://github.com/LibreChat-AI/LibreChat/pull/15750) +- ๐Ÿงท fix: Keep Ref Cleanup and Hold Consumer Handlers to the Frontmost Dialog by [@danny-avila](https://github.com/danny-avila) in [#15751](https://github.com/LibreChat-AI/LibreChat/pull/15751) +- ๐Ÿ—๏ธ fix: Load User Keys on Resumed Requests by [@danny-avila](https://github.com/danny-avila) in [#15749](https://github.com/LibreChat-AI/LibreChat/pull/15749) +- ๐Ÿ—ณ๏ธ fix: Recover Durable Background Tool Receipts by [@danny-avila](https://github.com/danny-avila) in [#15752](https://github.com/LibreChat-AI/LibreChat/pull/15752) +- ๐Ÿ›— fix: Add Tenant Index Upgrade Migration by [@danny-avila](https://github.com/danny-avila) in [#15767](https://github.com/LibreChat-AI/LibreChat/pull/15767) +- ๐Ÿ  fix: Keep MCP Caches Fresh on Demand by [@danny-avila](https://github.com/danny-avila) in [#15765](https://github.com/LibreChat-AI/LibreChat/pull/15765) +- ๐Ÿ”‘ fix: Honor User-Provided MCP API Key Instead of Forcing OAuth by [@danny-avila](https://github.com/danny-avila) in [#13954](https://github.com/LibreChat-AI/LibreChat/pull/13954) +- ๐Ÿช™ fix: Count Quote Tokens on Message Edit by [@danny-avila](https://github.com/danny-avila) in [#13958](https://github.com/LibreChat-AI/LibreChat/pull/13958) +- ๐Ÿ“‹ fix: Route Clipboard Paste Through Upload Options by [@dustinhealy](https://github.com/dustinhealy) in [#13957](https://github.com/LibreChat-AI/LibreChat/pull/13957) +- ๐Ÿ“‡ fix: Index sharedlinks updatedAt for Cosmos DB Sorts by [@danny-avila](https://github.com/danny-avila) in [#13979](https://github.com/LibreChat-AI/LibreChat/pull/13979) +- ๐Ÿ“‚ fix: Mount Skill Files Under skills/ in Code Interpreter by [@danny-avila](https://github.com/danny-avila) in [#13961](https://github.com/LibreChat-AI/LibreChat/pull/13961) and [#13975](https://github.com/LibreChat-AI/LibreChat/pull/13975) +- ๐ŸชŸ fix: Re-measure Sidebar Chat List on Width Change to Fix Date-Group Spacing by [@danny-avila](https://github.com/danny-avila) in [#13981](https://github.com/LibreChat-AI/LibreChat/pull/13981) +- ๐Ÿ“ fix: Make create_file Missing-Content Error Truncation-Aware by [@danny-avila](https://github.com/danny-avila) in [#14043](https://github.com/LibreChat-AI/LibreChat/pull/14043) +- fix: use `logAxiosError` at the RAG file_search/context call sites by [@mawburn](https://github.com/mawburn) in [#14014](https://github.com/LibreChat-AI/LibreChat/pull/14014) +- fix: `stripHeavyErrorFields` Winston format (defense-in-depth) by [@mawburn](https://github.com/mawburn) in [#14018](https://github.com/LibreChat-AI/LibreChat/pull/14018) +- ๐Ÿ“ฅ fix: Download Original File From Artifact Preview Panel for Office Documents by [@berry-13](https://github.com/berry-13) in [#14026](https://github.com/LibreChat-AI/LibreChat/pull/14026) +- ๐Ÿ”ฅ fix: Firebase CDN Initialization Under tsdown CJS Interop by [@jakacenta](https://github.com/jakacenta) in [#14046](https://github.com/LibreChat-AI/LibreChat/pull/14046) +- fix: preserve role SHARE permissions across boot in initializeRoles by [@mawburn](https://github.com/mawburn) in [#14022](https://github.com/LibreChat-AI/LibreChat/pull/14022) +- fix: bound peak memory of concurrent base64 attachment encoding by [@mawburn](https://github.com/mawburn) in [#14023](https://github.com/LibreChat-AI/LibreChat/pull/14023) +- ๐Ÿ“ง fix: Add .eml (message/rfc822) Support to File Upload by [@Zirkonium88](https://github.com/Zirkonium88) in [#13989](https://github.com/LibreChat-AI/LibreChat/pull/13989) +- ๐Ÿšช fix: Support Admin Redirect Detection for Same-Origin Subpaths by [@arjunvijay24](https://github.com/arjunvijay24) in [#14040](https://github.com/LibreChat-AI/LibreChat/pull/14040) +- ๐Ÿฉน fix: Coerce Stringified `edit_file` Edits (JSON-in-JSON) by [@danny-avila](https://github.com/danny-avila) in [#14056](https://github.com/LibreChat-AI/LibreChat/pull/14056) +- ๐Ÿง  fix: Apply Bedrock thinking config to bare inference-profile model IDs by [@danny-avila](https://github.com/danny-avila) in [#14054](https://github.com/LibreChat-AI/LibreChat/pull/14054) +- ๐Ÿง  fix: Default Bedrock thinking `maxTokens` to model max output by [@danny-avila](https://github.com/danny-avila) in [#14058](https://github.com/LibreChat-AI/LibreChat/pull/14058) +- fix: stop the artifact-edit retry loop on unrecoverable 400s by [@mawburn](https://github.com/mawburn) in [#14060](https://github.com/LibreChat-AI/LibreChat/pull/14060) +- ๐ŸŽฃ fix: Surface Resumable Stream Start Errors by [@danny-avila](https://github.com/danny-avila) in [#14072](https://github.com/LibreChat-AI/LibreChat/pull/14072) +- ๐Ÿงฏ fix: Harden Principals Cache Invalidation and Lock-Wait Paths by [@danny-avila](https://github.com/danny-avila) in [#14120](https://github.com/LibreChat-AI/LibreChat/pull/14120) +- ๐Ÿ fix: Ignore Finalized SSE Transport Errors by [@danny-avila](https://github.com/danny-avila) in [#14114](https://github.com/LibreChat-AI/LibreChat/pull/14114) +- fix: fall back to `_id` for user id in `createSafeUser` by [@mawburn](https://github.com/mawburn) in [#14083](https://github.com/LibreChat-AI/LibreChat/pull/14083) +- ๐ŸŒ fix: guard IME composition on Enter in prompt name/labels and dynamic tag inputs by [@mahirhir](https://github.com/mahirhir) in [#13996](https://github.com/LibreChat-AI/LibreChat/pull/13996) +- ๐Ÿ—„๏ธ fix: Return Cached Transaction-Support Value on Cache Hit by [@Osamaali313](https://github.com/Osamaali313) in [#13999](https://github.com/LibreChat-AI/LibreChat/pull/13999) +- ๐Ÿง  fix: Format Reasoning Exports by [@danny-avila](https://github.com/danny-avila) in [#14116](https://github.com/LibreChat-AI/LibreChat/pull/14116) +- ๐Ÿงฎ fix: Prevent String Corruption of Numeric Agent Model Parameters by [@danny-avila](https://github.com/danny-avila) in [#14119](https://github.com/LibreChat-AI/LibreChat/pull/14119) +- ๐Ÿงข fix: Raise Claude Sonnet 4.6 Output Cap by [@danny-avila](https://github.com/danny-avila) in [#14115](https://github.com/LibreChat-AI/LibreChat/pull/14115) +- ๐Ÿงต fix: Preserve Fenced Markdown Artifacts by [@danny-avila](https://github.com/danny-avila) in [#14121](https://github.com/LibreChat-AI/LibreChat/pull/14121) +- ๐Ÿ”’ fix: Prevent Role Grants on Shared Links by [@danny-avila](https://github.com/danny-avila) in [#14137](https://github.com/LibreChat-AI/LibreChat/pull/14137) +- ๐Ÿค fix: Exclude Provider Secrets from HITL Pending Actions by [@danny-avila](https://github.com/danny-avila) in [#14136](https://github.com/LibreChat-AI/LibreChat/pull/14136) +- โณ fix: Defer MCP Connection for Request-Scoped Placeholders on Reinitialize by [@danny-avila](https://github.com/danny-avila) in [#14148](https://github.com/LibreChat-AI/LibreChat/pull/14148) +- ๐Ÿงท fix: Align Agent File Attachment Ownership by [@danny-avila](https://github.com/danny-avila) in [#14149](https://github.com/LibreChat-AI/LibreChat/pull/14149) +- ๐ŸงŠ fix: Include Conversation Starters in Agent View and List Responses by [@serhiizghama](https://github.com/serhiizghama) in [#14142](https://github.com/LibreChat-AI/LibreChat/pull/14142) +- โ™Š fix: Resolve Local JSON Pointer Refs & Sanitize Tool Search Schema for Gemini by [@usnavy13](https://github.com/usnavy13) in [#14161](https://github.com/LibreChat-AI/LibreChat/pull/14161) +- ๐Ÿ›ก๏ธ fix: Guard HITL checkpoint size against MongoDB 16MB limit by [@danny-avila](https://github.com/danny-avila) in [#14157](https://github.com/LibreChat-AI/LibreChat/pull/14157) +- ๐Ÿ”ก fix: Normalize Email Case When Issuing Verification Tokens by [@VictorEPlus](https://github.com/VictorEPlus) in [#14172](https://github.com/LibreChat-AI/LibreChat/pull/14172) +- ๐Ÿชœ fix: Apply Recursion Limit Config to Subagents by [@danny-avila](https://github.com/danny-avila) in [#14185](https://github.com/LibreChat-AI/LibreChat/pull/14185) +- ๐Ÿ’‚ fix: Enforce ALLOW_EMAIL_LOGIN on the Backend Login Route by [@lurkerCha](https://github.com/lurkerCha) in [#14180](https://github.com/LibreChat-AI/LibreChat/pull/14180) +- ๐Ÿงฉ fix: Allow `compatibility` Field in Skill Frontmatter by [@danny-avila](https://github.com/danny-avila) in [#14189](https://github.com/LibreChat-AI/LibreChat/pull/14189) +- ๐Ÿ“Ž fix: Translate Finite `supportedMimeTypes` Allowlists to Picker Accept by [@danny-avila](https://github.com/danny-avila) in [#14186](https://github.com/LibreChat-AI/LibreChat/pull/14186) +- ๐Ÿช† fix: Serve Nested Skill Files Through a Wildcard Route by [@danny-avila](https://github.com/danny-avila) in [#14191](https://github.com/LibreChat-AI/LibreChat/pull/14191) +- ๐Ÿƒ fix: Attach Request-Scoped MCP Servers From the Builder via the `mcp_all` Wildcard by [@adamscross04](https://github.com/adamscross04) in [#14177](https://github.com/LibreChat-AI/LibreChat/pull/14177) +- ๐Ÿ” fix: Sync Conversation Title Updates to MeiliSearch by [@danny-avila](https://github.com/danny-avila) in [#14223](https://github.com/LibreChat-AI/LibreChat/pull/14223) +- ๐Ÿ‘ป fix: Guard Redis Stream Resume Against Disposed HITL Graph by [@danny-avila](https://github.com/danny-avila) in [#14258](https://github.com/LibreChat-AI/LibreChat/pull/14258) +- ๐Ÿค fix: Discover MCP OAuth Exchange Methods by [@danny-avila](https://github.com/danny-avila) in [#14256](https://github.com/LibreChat-AI/LibreChat/pull/14256) +- ๐Ÿ‘‹ fix: Terminate Streamable HTTP MCP Sessions on Teardown by [@danny-avila](https://github.com/danny-avila) in [#14252](https://github.com/LibreChat-AI/LibreChat/pull/14252) +- ๐Ÿ—‚๏ธ fix: Route read_file Through the Stateful Code Session by [@danny-avila](https://github.com/danny-avila) in [#14259](https://github.com/LibreChat-AI/LibreChat/pull/14259) +- ๐Ÿ’ญ fix: Default GPT-5.6 Reasoning Requests to Responses API by [@jomspk](https://github.com/jomspk) in [#14232](https://github.com/LibreChat-AI/LibreChat/pull/14232) +- ๐Ÿ”– fix: Preserve Ephemeral Agent Params and Identity for ask_user_question Resume by [@jjhidalgar-celonis](https://github.com/jjhidalgar-celonis) in [#14254](https://github.com/LibreChat-AI/LibreChat/pull/14254) +- ๐ŸŽซ fix: Strip Reserved Fields From Bedrock `additionalModelRequestFields` by [@danny-avila](https://github.com/danny-avila) in [#14246](https://github.com/LibreChat-AI/LibreChat/pull/14246) +- ๐Ÿ“ฑ fix: Single-Tap Select for Pinned Agents, Model Specs & Models on Touch by [@danny-avila](https://github.com/danny-avila) in [#14272](https://github.com/LibreChat-AI/LibreChat/pull/14272) +- ๐Ÿงฝ fix: Clear Deleted Chats From Message Cache by [@danny-avila](https://github.com/danny-avila) in [#14270](https://github.com/LibreChat-AI/LibreChat/pull/14270) +- ๐ŸงŸ fix: Prevent Drained Steer From Re-Queuing After Run-End Race by [@danny-avila](https://github.com/danny-avila) in [#14276](https://github.com/LibreChat-AI/LibreChat/pull/14276) +- ๐Ÿ™‹ fix: Await `ask_user_question` Tool Factory in `loadTools` by [@danny-avila](https://github.com/danny-avila) in [#14291](https://github.com/LibreChat-AI/LibreChat/pull/14291) +- ๐Ÿงท fix: Flush Pending File Deletion on Unmount by [@danny-avila](https://github.com/danny-avila) in [#14293](https://github.com/LibreChat-AI/LibreChat/pull/14293) +- ๐Ÿ™‹ fix: Stop Answered `ask_user_question` Card From Reopening Its Popover by [@danny-avila](https://github.com/danny-avila) in [#14297](https://github.com/LibreChat-AI/LibreChat/pull/14297) +- ๐Ÿ”’ fix: Scope, Cap, and De-Execute the In-Flight Steer Stack by [@danny-avila](https://github.com/danny-avila) in [#14310](https://github.com/LibreChat-AI/LibreChat/pull/14310) +- ๐Ÿ“ฑ fix: Don't Connect the Favorites Drag Source on Touch Pointers by [@danny-avila](https://github.com/danny-avila) in [#14312](https://github.com/LibreChat-AI/LibreChat/pull/14312) +- ๐Ÿงต fix: Harden Request-Scoped MCP Lifecycle by [@danny-avila](https://github.com/danny-avila) in [#14342](https://github.com/LibreChat-AI/LibreChat/pull/14342) +- ๐Ÿช† fix: Build RAG-API Chart Before Parent to Bundle PostgreSQL Dependency by [@Aho-Bakaa](https://github.com/Aho-Bakaa) in [#14262](https://github.com/LibreChat-AI/LibreChat/pull/14262) +- ๐Ÿšช fix: Keep Owners From Being Locked Out of Their Own Resource When Sharing by [@danny-avila](https://github.com/danny-avila) in [#14347](https://github.com/LibreChat-AI/LibreChat/pull/14347) +- ๐Ÿš fix: Route Admin-Configured Document Types to RAG /text on Agent Upload by [@danny-avila](https://github.com/danny-avila) in [#14345](https://github.com/LibreChat-AI/LibreChat/pull/14345) +- ๐ŸŽŸ๏ธ fix: Claim Idempotency Keys to Dedup Retried Generation Requests and Prevent Double Billing by [@danny-avila](https://github.com/danny-avila) in [#14344](https://github.com/LibreChat-AI/LibreChat/pull/14344) +- ๐Ÿง  fix: Restore Agent Memory Scope Control in Unified Builder by [@danny-avila](https://github.com/danny-avila) in [#14292](https://github.com/LibreChat-AI/LibreChat/pull/14292) +- ๐Ÿ›Ÿ fix: Keep File Uploads Alive With SSE Heartbeats by [@MarcAmick](https://github.com/MarcAmick) in [#14295](https://github.com/LibreChat-AI/LibreChat/pull/14295) +- ๐Ÿงฉ fix: Preserve Deployment Skill IDs on Agents by [@danny-avila](https://github.com/danny-avila) in [#14368](https://github.com/LibreChat-AI/LibreChat/pull/14368) +- ๐Ÿงญ fix: Keep Message Nav Chevrons Working on In-Thread Steers by [@danny-avila](https://github.com/danny-avila) in [#14377](https://github.com/LibreChat-AI/LibreChat/pull/14377) +- ๐Ÿค fix: Withhold MCP OAuth Headers From Untrusted Preconfigured Discovery by [@danny-avila](https://github.com/danny-avila) in [#14379](https://github.com/LibreChat-AI/LibreChat/pull/14379) +- ๐Ÿ”— fix: Preserve resource owner access when sharing (key share diff by stable id) by [@jomspk](https://github.com/jomspk) in [#14317](https://github.com/LibreChat-AI/LibreChat/pull/14317) +- ๐Ÿช† fix: Preserve Nested Subagent Delegation by [@danny-avila](https://github.com/danny-avila) in [#14392](https://github.com/LibreChat-AI/LibreChat/pull/14392) +- โœ‹ fix: Enable Submit on First Tool-Approval Decision by [@danny-avila](https://github.com/danny-avila) in [#14393](https://github.com/LibreChat-AI/LibreChat/pull/14393) +- ๐ŸŽž๏ธ fix: Surface Clear Error for Unprocessable Gemini YouTube Videos by [@danny-avila](https://github.com/danny-avila) in [#14396](https://github.com/LibreChat-AI/LibreChat/pull/14396) +- ๐Ÿ“Œ fix: Pin Scroll-to-Bottom Rib in Message Nav by [@danny-avila](https://github.com/danny-avila) in [#14397](https://github.com/LibreChat-AI/LibreChat/pull/14397) +- ๐Ÿซ™ fix: Preserve Loaded Message Content When Resume Snapshot Is Empty by [@danny-avila](https://github.com/danny-avila) in [#14399](https://github.com/LibreChat-AI/LibreChat/pull/14399) +- ๐ŸŽฏ fix: Correct Off-by-One Rail Scrub After Pinning the Terminus by [@danny-avila](https://github.com/danny-avila) in [#14409](https://github.com/LibreChat-AI/LibreChat/pull/14409) +- โ™พ๏ธ fix: Preserve Resumable Stream Ordering Across Turns by [@danny-avila](https://github.com/danny-avila) in [#14411](https://github.com/LibreChat-AI/LibreChat/pull/14411) +- ๐Ÿงฉ fix: Harden Agent Skill Lifecycles End to End by [@danny-avila](https://github.com/danny-avila) in [#14429](https://github.com/LibreChat-AI/LibreChat/pull/14429) +- ๐Ÿ“ง fix: Restore `invite-user` CLI by [@unsnow-iac](https://github.com/unsnow-iac) in [#14436](https://github.com/LibreChat-AI/LibreChat/pull/14436) +- ๐Ÿ”— fix: Resolve MCP Tool-Key Boundary Against Configured Server Names by [@danny-avila](https://github.com/danny-avila) in [#14448](https://github.com/LibreChat-AI/LibreChat/pull/14448) +- ๐Ÿƒ fix: Strip $-Prefixed Schema Keywords Before Persisting MCP Tool Params by [@danny-avila](https://github.com/danny-avila) in [#14464](https://github.com/LibreChat-AI/LibreChat/pull/14464) +- ๐Ÿ”— fix: Render Shared Links Containing Steers by [@danny-avila](https://github.com/danny-avila) in [#14480](https://github.com/LibreChat-AI/LibreChat/pull/14480) +- ๐Ÿ”’ fix: Bound `/files/usage` TTL Hold Instead of Clearing It by [@danny-avila](https://github.com/danny-avila) in [#14470](https://github.com/LibreChat-AI/LibreChat/pull/14470) +- ๐Ÿค fix: Filter Admin Config Reads by Section-Scoped Read Capability by [@dustinhealy](https://github.com/dustinhealy) in [#14472](https://github.com/LibreChat-AI/LibreChat/pull/14472) +- ๐Ÿƒ fix: Amazon DocumentDB Compatibility for Pipeline-Form Updates by [@danny-avila](https://github.com/danny-avila) in [#14495](https://github.com/LibreChat-AI/LibreChat/pull/14495) +- ๐Ÿ›ก๏ธ fix: validate message feedback payloads by [@upman](https://github.com/upman) in [#14500](https://github.com/LibreChat-AI/LibreChat/pull/14500) +- ๐Ÿงฉ fix: Apply Every Entry of Multi-Part Stream Deltas by [@danny-avila](https://github.com/danny-avila) in [#14502](https://github.com/LibreChat-AI/LibreChat/pull/14502) +- ๐Ÿท๏ธ fix: Re-attribute Agent Content After In-Thread Steers by [@danny-avila](https://github.com/danny-avila) in [#14497](https://github.com/LibreChat-AI/LibreChat/pull/14497) +- ๐ŸŽฏ fix: Keep Run Steps and Labels in One Index Space After a Resume Sync by [@danny-avila](https://github.com/danny-avila) in [#14516](https://github.com/LibreChat-AI/LibreChat/pull/14516) +- ๐Ÿชถ fix: Yield Soft Default Model Spec to Agent Picks in Picker-Only Deployments by [@danny-avila](https://github.com/danny-avila) in [#14515](https://github.com/LibreChat-AI/LibreChat/pull/14515) +- ๐ŸชŸ fix: Surface MCP Initialization Errors by [@danny-avila](https://github.com/danny-avila) in [#14529](https://github.com/LibreChat-AI/LibreChat/pull/14529) +- ๐Ÿชƒ fix: Resolve User Vars Before the First Post-OAuth Reconnect by [@schumajs](https://github.com/schumajs) in [#14538](https://github.com/LibreChat-AI/LibreChat/pull/14538) +- ๐Ÿ”’ fix: Remove Owner Email from Agent `owner_contact` Fallback by [@danny-avila](https://github.com/danny-avila) in [#14541](https://github.com/LibreChat-AI/LibreChat/pull/14541) +- ๐Ÿ“„ fix: Filter Non-PDF Documents on the Anthropic Encode Path by [@danny-avila](https://github.com/danny-avila) in [#14535](https://github.com/LibreChat-AI/LibreChat/pull/14535) +- ๐ŸŽฏ fix: Exact Ask-Question Attribution via Interrupt tool_call_id by [@danny-avila](https://github.com/danny-avila) in [#14539](https://github.com/LibreChat-AI/LibreChat/pull/14539) +- ๐Ÿงน fix: Clean Up MCP OAuth State Mappings on Uninstall + Reject Superseded Callbacks by [@danny-avila](https://github.com/danny-avila) in [#14549](https://github.com/LibreChat-AI/LibreChat/pull/14549) +- ๐Ÿง  fix: Preserve Deferred Tool Schemas Across HITL Resume by [@danny-avila](https://github.com/danny-avila) in [#14552](https://github.com/LibreChat-AI/LibreChat/pull/14552) +- ๐Ÿฆ— fix: Ignore Sequenced Redis Events Without SSE Subscribers by [@danny-avila](https://github.com/danny-avila) in [#14557](https://github.com/LibreChat-AI/LibreChat/pull/14557) +- ๐Ÿ”— fix: Normalize MCP Tool Keys at Every Producer, Resolve Raw Names via Aliases by [@danny-avila](https://github.com/danny-avila) in [#14553](https://github.com/LibreChat-AI/LibreChat/pull/14553) +- ๐Ÿข fix: Preserve Tenant Context for Partial Response Saves on Disconnect by [@danny-avila](https://github.com/danny-avila) in [#14567](https://github.com/LibreChat-AI/LibreChat/pull/14567) +- ๐Ÿฆ— fix: Deliver Abort Acknowledgements on Zero-Subscriber Replicas by [@danny-avila](https://github.com/danny-avila) in [#14569](https://github.com/LibreChat-AI/LibreChat/pull/14569) +- ๐Ÿท๏ธ fix: Skip Title Generation for Preempt-Incomplete Turns by [@danny-avila](https://github.com/danny-avila) in [#14571](https://github.com/LibreChat-AI/LibreChat/pull/14571) +- ๐Ÿชง fix: Guard Admin OAuth Routes When Providers Are Not Configured by [@cyphercodes](https://github.com/cyphercodes) in [#14507](https://github.com/LibreChat-AI/LibreChat/pull/14507) +- ๐Ÿ”— fix: Resolve Relative Skill Markdown Links by [@berry-13](https://github.com/berry-13) in [#14586](https://github.com/LibreChat-AI/LibreChat/pull/14586) +- ๐Ÿงญ fix: Drop v6-Only MemoryRouter future Prop from Skill Markdown Spec by [@danny-avila](https://github.com/danny-avila) in [#14588](https://github.com/LibreChat-AI/LibreChat/pull/14588) +- ๐Ÿชช fix: Strip Unresolved Header Placeholders at Final Resolution by [@danny-avila](https://github.com/danny-avila) in [#14595](https://github.com/LibreChat-AI/LibreChat/pull/14595) +- ๐Ÿ”’ fix: Single-Flight MCP OAuth Token Refresh per User/Server by [@danny-avila](https://github.com/danny-avila) in [#14596](https://github.com/LibreChat-AI/LibreChat/pull/14596) +- ๐Ÿชบ fix: Keep Preempt-Abandoned Siblings Nested, Make Message Tree Order-Robust by [@danny-avila](https://github.com/danny-avila) in [#14587](https://github.com/LibreChat-AI/LibreChat/pull/14587) +- โŒจ๏ธ fix: Honor `defaultPrevented` in Global Shortcut Dispatch by [@danny-avila](https://github.com/danny-avila) in [#14570](https://github.com/LibreChat-AI/LibreChat/pull/14570) +- ๐Ÿชข fix: Bind MCP OAuth Secrets to Trusted Endpoints by [@danny-avila](https://github.com/danny-avila) in [#14578](https://github.com/LibreChat-AI/LibreChat/pull/14578) +- โš“ fix: Bind Action Servers to Metadata Ports by [@danny-avila](https://github.com/danny-avila) in [#14575](https://github.com/LibreChat-AI/LibreChat/pull/14575) +- ๐Ÿงฑ fix: Enforce Agent Runtime File Trust Boundaries by [@danny-avila](https://github.com/danny-avila) in [#14577](https://github.com/LibreChat-AI/LibreChat/pull/14577) +- ๐Ÿ“ fix: Scope Skill Command Query to Text Before the Caret by [@danny-avila](https://github.com/danny-avila) in [#14604](https://github.com/LibreChat-AI/LibreChat/pull/14604) +- ๐Ÿงฌ fix: Resolve URL-Named Model Spec to Its Full Preset on Cold Load by [@danny-avila](https://github.com/danny-avila) in [#14610](https://github.com/LibreChat-AI/LibreChat/pull/14610) +- โœ‚๏ธ fix: Truncate Overflowing Activity and Intent Labels in Chat UI by [@danny-avila](https://github.com/danny-avila) in [#14607](https://github.com/LibreChat-AI/LibreChat/pull/14607) +- ๐Ÿšฆ fix: Bound, Single-Flight, and Retry Skill File Priming Uploads by [@danny-avila](https://github.com/danny-avila) in [#14611](https://github.com/LibreChat-AI/LibreChat/pull/14611) +- ๐Ÿงน fix: Exclude Mongo ID From Conversation Updates by [@danny-avila](https://github.com/danny-avila) in [#14631](https://github.com/LibreChat-AI/LibreChat/pull/14631) +- โ™ฟ๏ธ a11y: improve keyboard operability, focus retention, and accessible naming by [@berry-13](https://github.com/berry-13) in [#14600](https://github.com/LibreChat-AI/LibreChat/pull/14600) +- ๐Ÿš fix: Localized Guidance for Model-Not-Found Errors by [@danny-avila](https://github.com/danny-avila) in [`557c22d102`](https://github.com/LibreChat-AI/LibreChat/commit/557c22d10240a66a068584f1098c54a436c4dcc8) +- ๐Ÿ›ก๏ธ fix: Run message-filter PII patterns on a linear-time regex engine (ReDoS) by [@dustinhealy](https://github.com/dustinhealy) in [#14554](https://github.com/LibreChat-AI/LibreChat/pull/14554) +- ๐Ÿชข fix: disable central fanout media uploads for langfuse by [@upman](https://github.com/upman) in [#14642](https://github.com/LibreChat-AI/LibreChat/pull/14642) +- ๐Ÿงญ fix: Fail Closed When Expected MCP Tools Are Unavailable by [@danny-avila](https://github.com/danny-avila) in [#14646](https://github.com/LibreChat-AI/LibreChat/pull/14646) +- ๐Ÿ›‚ fix: Honor Claude Document Limits Through Inference Gateways by [@danny-avila](https://github.com/danny-avila) in [#14650](https://github.com/LibreChat-AI/LibreChat/pull/14650) +- ๐ŸŽŸ๏ธ fix: Reconcile MCP OAuth Readiness Across Pods by [@danny-avila](https://github.com/danny-avila) in [#14629](https://github.com/LibreChat-AI/LibreChat/pull/14629) +- ๐ŸŒŠ fix: Preserve Custom Endpoint `streamRate` When `endpoints.all` Is Defined by [@danny-avila](https://github.com/danny-avila) in [#14645](https://github.com/LibreChat-AI/LibreChat/pull/14645) +- ๐Ÿ” fix: Preserve Structured JWT Auth Context by [@danny-avila](https://github.com/danny-avila) in [#14652](https://github.com/LibreChat-AI/LibreChat/pull/14652) +- โฑ๏ธ fix: Compile admin file-config MIME patterns on a linear-time engine (ReDoS) by [@dustinhealy](https://github.com/dustinhealy) in [#14555](https://github.com/LibreChat-AI/LibreChat/pull/14555) +- ๐Ÿ›ก๏ธ fix: SSRF-Guard Speech (STT/TTS) and OCR Outbound Requests at Connect Time by [@dustinhealy](https://github.com/dustinhealy) in [#14560](https://github.com/LibreChat-AI/LibreChat/pull/14560) +- ๐Ÿ” fix: Re-Arm Soft Default When a Stored Agent No Longer Resolves by [@danny-avila](https://github.com/danny-avila) in [#14664](https://github.com/LibreChat-AI/LibreChat/pull/14664) +- ๐Ÿ”— fix: Prevent duplicate share rows from clobbering pending role edits (dedupe adds by stable id) by [@jomspk](https://github.com/jomspk) in [#14655](https://github.com/LibreChat-AI/LibreChat/pull/14655) +- ๐Ÿ›Ÿ fix: Stop Agents When Code Resources Cannot Recover by [@danny-avila](https://github.com/danny-avila) in [#14651](https://github.com/LibreChat-AI/LibreChat/pull/14651) +- โ™ฟ fix: Restore WCAG AA Contrast for Text Tokens & Hide Edit Action While Streaming by [@danny-avila](https://github.com/danny-avila) in [#14677](https://github.com/LibreChat-AI/LibreChat/pull/14677) +- ๐Ÿฉน fix: Keep Edit Action Fully Hidden While Streaming by [@danny-avila](https://github.com/danny-avila) in [#14687](https://github.com/LibreChat-AI/LibreChat/pull/14687) +- ๐Ÿ“ก fix: Refresh MCP Tools After List-Changed Notifications by [@danny-avila](https://github.com/danny-avila) in [#14686](https://github.com/LibreChat-AI/LibreChat/pull/14686) +- ๐Ÿงฌ fix: Rebind Request Context After Remote Agent Auth by [@danny-avila](https://github.com/danny-avila) in [#14685](https://github.com/LibreChat-AI/LibreChat/pull/14685) +- ๐Ÿงญ fix: Make MCP Catalog Redis Cluster-Safe by [@danny-avila](https://github.com/danny-avila) in [#14717](https://github.com/LibreChat-AI/LibreChat/pull/14717) +- ๐Ÿงฌ fix: Normalize Legacy MCP Null Headers by [@danny-avila](https://github.com/danny-avila) in [#14720](https://github.com/LibreChat-AI/LibreChat/pull/14720) +- ๐Ÿ“ fix: Consistent Export Filenames Across Formats by [@lidonius1122](https://github.com/lidonius1122) in [#14708](https://github.com/LibreChat-AI/LibreChat/pull/14708) +- ๐Ÿงท fix: Safely Recover Runtime MCP OAuth Rejections by [@danny-avila](https://github.com/danny-avila) in [#14684](https://github.com/LibreChat-AI/LibreChat/pull/14684) +- ๐Ÿช† fix: Rebase Activity Phase Bounds over Sparse Content by [@danny-avila](https://github.com/danny-avila) in [#14729](https://github.com/LibreChat-AI/LibreChat/pull/14729) +- ๐Ÿ“Ž fix: Re-enable Send After File Upload by [@danny-avila](https://github.com/danny-avila) in [#14727](https://github.com/LibreChat-AI/LibreChat/pull/14727) +- ๐Ÿ“ธ fix: Guard Screenshot Export Against Main-Thread Freezes by [@danny-avila](https://github.com/danny-avila) in [#14733](https://github.com/LibreChat-AI/LibreChat/pull/14733) +- ๐Ÿ” fix: Preserve Plugin MCP Provenance Through Registry Storage by [@danny-avila](https://github.com/danny-avila) in [#14744](https://github.com/LibreChat-AI/LibreChat/pull/14744) +- ๐Ÿงญ fix: Re-Anchor Parent Activity Phase Bounds by [@danny-avila](https://github.com/danny-avila) in [#14741](https://github.com/LibreChat-AI/LibreChat/pull/14741) +- ๐Ÿงท fix: Preserve Elicitation Answers Across Aborts by [@danny-avila](https://github.com/danny-avila) in [#14745](https://github.com/LibreChat-AI/LibreChat/pull/14745) +- ๐Ÿ“ก fix: Preserve Redis Abort Terminal Delivery by [@danny-avila](https://github.com/danny-avila) in [#14749](https://github.com/LibreChat-AI/LibreChat/pull/14749) +- โŒจ๏ธ fix: allow file upload shortcut when editing by [@likeabas](https://github.com/likeabas) in [#14764](https://github.com/LibreChat-AI/LibreChat/pull/14764) +- ๐Ÿ›Ÿ fix: Isolate Invalid Skills During GitHub Sync by [@berry-13](https://github.com/berry-13) in [#14735](https://github.com/LibreChat-AI/LibreChat/pull/14735) +- ๐ŸŽ™๏ธ fix: Align Speech Engine Configuration With Runtime by [@berry-13](https://github.com/berry-13) in [#14736](https://github.com/LibreChat-AI/LibreChat/pull/14736) +- ๐Ÿงฉ fix: Normalize Malformed MCP Required Schemas by [@danny-avila](https://github.com/danny-avila) in [#14771](https://github.com/LibreChat-AI/LibreChat/pull/14771) +- ๐Ÿงพ fix: Honor Disabled Transactions on the Token-Count Fallback Path by [@jtodaroii](https://github.com/jtodaroii) in [#14774](https://github.com/LibreChat-AI/LibreChat/pull/14774) +- ๐Ÿ›ฐ๏ธ fix: Attach Request-Scoped MCP Servers by [@danny-avila](https://github.com/danny-avila) in [#14780](https://github.com/LibreChat-AI/LibreChat/pull/14780) +- ๐Ÿ“ฑ fix: Show Quote Popup for Block Selections and on Touch Devices by [@danny-avila](https://github.com/danny-avila) in [#14777](https://github.com/LibreChat-AI/LibreChat/pull/14777) +- ๐Ÿช‘ fix: Rebase Activity Phase Bounds Onto Compacted Content and Unskip the MCPManager Suite by [@danny-avila](https://github.com/danny-avila) in [#14782](https://github.com/LibreChat-AI/LibreChat/pull/14782) +- ๐Ÿ”– fix: Split Activity Phases at Substantial Text by [@danny-avila](https://github.com/danny-avila) in [#14785](https://github.com/LibreChat-AI/LibreChat/pull/14785) +- ๐Ÿ–Œ๏ธ style: Use correct text colour for answer textarea in dark mode by [@lizzykerrigan](https://github.com/lizzykerrigan) in [#14791](https://github.com/LibreChat-AI/LibreChat/pull/14791) +- ๐Ÿฉน fix: Restore the `@librechat/api` Build and Remove Legacy Code by [@danny-avila](https://github.com/danny-avila) in [#14808](https://github.com/LibreChat-AI/LibreChat/pull/14808) +- ๐Ÿฉน fix: apply agent updates that match the newest version entry by [@mihidumh](https://github.com/mihidumh) in [#14810](https://github.com/LibreChat-AI/LibreChat/pull/14810) +- ๐Ÿ’ฌ style: Right-Align In-Flight Steer Bubbles to the Message UI by [@danny-avila](https://github.com/danny-avila) in [#14814](https://github.com/LibreChat-AI/LibreChat/pull/14814) +- ๐Ÿ”Œ fix: Preserve MCP `serverInstructions` Declaration Through Inspection by [@danny-avila](https://github.com/danny-avila) in [#14815](https://github.com/LibreChat-AI/LibreChat/pull/14815) +- ๐Ÿ”Œ fix: Recover Quietly From Stale MCP SSE Stream Conflicts by [@danny-avila](https://github.com/danny-avila) in [#14816](https://github.com/LibreChat-AI/LibreChat/pull/14816) +- ๐Ÿ“Ž fix: Alias Shell Script MIME Variants to `application/x-sh` by [@danny-avila](https://github.com/danny-avila) in [#14817](https://github.com/LibreChat-AI/LibreChat/pull/14817) +- ๐Ÿชข fix(langfuse): mark provider-backed agent traces by [@upman](https://github.com/upman) in [#14833](https://github.com/LibreChat-AI/LibreChat/pull/14833) +- ๐Ÿ”” fix: Report Agent Saves That Reuse the Newest Version Entry by [@berry-13](https://github.com/berry-13) in [#14824](https://github.com/LibreChat-AI/LibreChat/pull/14824) +- ๐Ÿ˜๏ธ fix: Scope OpenID User Cache Keys to Signed User Identity by [@danny-avila](https://github.com/danny-avila) in [#14837](https://github.com/LibreChat-AI/LibreChat/pull/14837) +- โšก fix: avoid modal attachment menu overhead by [@danny-avila](https://github.com/danny-avila) in [#14847](https://github.com/LibreChat-AI/LibreChat/pull/14847) +- โฌ‡๏ธ fix: Keep Scroll-to-Bottom Clear of the In-Flight Steer Stack by [@danny-avila](https://github.com/danny-avila) in [#14844](https://github.com/LibreChat-AI/LibreChat/pull/14844) +- ๐Ÿ› fix: Give the Header's Sidebar Toggle Its Own Test Id by [@danny-avila](https://github.com/danny-avila) in [#14850](https://github.com/LibreChat-AI/LibreChat/pull/14850) +- fix: copy only assistant response text by [@berry-13](https://github.com/berry-13) in [#14853](https://github.com/LibreChat-AI/LibreChat/pull/14853) +- ๐ŸŒ— fix: Keep Code Block Header Visible in User Messages by [@berry-13](https://github.com/berry-13) in [#14856](https://github.com/LibreChat-AI/LibreChat/pull/14856) +- ๐Ÿ“ fix: Size the Model Picker to Its Content by [@berry-13](https://github.com/berry-13) in [#14859](https://github.com/LibreChat-AI/LibreChat/pull/14859) +- ๐Ÿฉบ fix: Render Stopped Run Steps From Explicit Status by [@danny-avila](https://github.com/danny-avila) in [#14871](https://github.com/LibreChat-AI/LibreChat/pull/14871) +- ๐Ÿ“ก fix: Publish App-Level MCP Tool Catalogs Without a Reserved Revision by [@danny-avila](https://github.com/danny-avila) in [#14858](https://github.com/LibreChat-AI/LibreChat/pull/14858) +- ๐Ÿงฉ fix: Normalize MCP UI Resource Rendering by [@danny-avila](https://github.com/danny-avila) in [#14868](https://github.com/LibreChat-AI/LibreChat/pull/14868) +- ๐ŸŽ™๏ธ fix: Prefer Compatible Formats for External STT Recording by [@berry-13](https://github.com/berry-13) in [#14864](https://github.com/LibreChat-AI/LibreChat/pull/14864) +- ๐Ÿ“‹ fix: Stop the Copy Button From Clobbering the Clipboard by [@berry-13](https://github.com/berry-13) in [#14876](https://github.com/LibreChat-AI/LibreChat/pull/14876) +- ๐Ÿฉน fix: Stop Archived and Shared Chats Dialogs Crashing on Open by [@berry-13](https://github.com/berry-13) in [#14886](https://github.com/LibreChat-AI/LibreChat/pull/14886) +- ๐Ÿท๏ธ fix: Model Spec Menu Label and Agent Avatar Fallbacks by [@danny-avila](https://github.com/danny-avila) in [#14887](https://github.com/LibreChat-AI/LibreChat/pull/14887) +- ๐Ÿ”™ fix: Stop Stacking History Entries on New-Chat Param Changes by [@danny-avila](https://github.com/danny-avila) in [#14891](https://github.com/LibreChat-AI/LibreChat/pull/14891) +- ๐Ÿ“Œ fix: Fetch Pinned Chats Independently of the Chats List by [@berry-13](https://github.com/berry-13) in [#14860](https://github.com/LibreChat-AI/LibreChat/pull/14860) +- ๐Ÿ•ฐ๏ธ fix: Stop Pinning and Archiving From Counting as Chat Activity by [@berry-13](https://github.com/berry-13) in [#14861](https://github.com/LibreChat-AI/LibreChat/pull/14861) +- ๐ŸชŸ fix: Resolve Context Windows and Pricing for Newer Model Families by [@berry-13](https://github.com/berry-13) in [#14877](https://github.com/LibreChat-AI/LibreChat/pull/14877) +- ๐Ÿ–ฑ๏ธ fix: Reveal Message Metadata on Hover, Not on Click by [@berry-13](https://github.com/berry-13) in [#14900](https://github.com/LibreChat-AI/LibreChat/pull/14900) +- ๐Ÿท๏ธ fix: Persist the Ephemeral Agent's Display Label as Sender by [@danny-avila](https://github.com/danny-avila) in [#14899](https://github.com/LibreChat-AI/LibreChat/pull/14899) +- ๐Ÿงฉ fix: Align Tenant and MCP Configuration Resolution by [@danny-avila](https://github.com/danny-avila) in [#14904](https://github.com/LibreChat-AI/LibreChat/pull/14904) +- ๐ŸŒ‰ fix: Preserve Missing Locize Translations by [@danny-avila](https://github.com/danny-avila) in [#14917](https://github.com/LibreChat-AI/LibreChat/pull/14917) +- ๐Ÿ” fix: Repair Locize PR Authentication by [@danny-avila](https://github.com/danny-avila) in [#14918](https://github.com/LibreChat-AI/LibreChat/pull/14918) +- ๐Ÿ“š fix: Keep English Source Repository-Owned by [@danny-avila](https://github.com/danny-avila) in [#14920](https://github.com/LibreChat-AI/LibreChat/pull/14920) +- ๐Ÿš fix: Preserve Endpoint Routing on HITL Resume Replay by [@danny-avila](https://github.com/danny-avila) in [#14948](https://github.com/LibreChat-AI/LibreChat/pull/14948) +- ๐ŸŒ fix: Scrollable Language Dropdown in Shared Chat Settings by [@berry-13](https://github.com/berry-13) in [#14954](https://github.com/LibreChat-AI/LibreChat/pull/14954) +- ๐Ÿ”’ fix: Hide Sensitive Input in Reset-Password CLI by [@jacksonriding](https://github.com/jacksonriding) in [#14923](https://github.com/LibreChat-AI/LibreChat/pull/14923) +- ๐Ÿ’ป fix(agents): require Code Interpreter for programmatic MCP tools by [@upman](https://github.com/upman) in [#14977](https://github.com/LibreChat-AI/LibreChat/pull/14977) +- ๐Ÿชช fix: Preserve Stored Access Token Expiry Over ID Token Exp by [@dustinhealy](https://github.com/dustinhealy) in [#14982](https://github.com/LibreChat-AI/LibreChat/pull/14982) +- ๐Ÿชข fix: Harden Langfuse Media Upload Targets by [@upman](https://github.com/upman) in [#14974](https://github.com/LibreChat-AI/LibreChat/pull/14974) +- ๐Ÿ™‹ fix: Free the Composer When a Question Pause Collapses by [@danny-avila](https://github.com/danny-avila) in [#15011](https://github.com/LibreChat-AI/LibreChat/pull/15011) +- ๐Ÿ›‚ fix: Preserve OpenID Re-Auth Errors Through MCP Tool Error Classification by [@dustinhealy](https://github.com/dustinhealy) in [#15010](https://github.com/LibreChat-AI/LibreChat/pull/15010) +- ๐Ÿช‚ fix: Land Navigation Auto-Scroll on the Rendered Thread by [@danny-avila](https://github.com/danny-avila) in [#15014](https://github.com/LibreChat-AI/LibreChat/pull/15014) +- ๐Ÿ“Ž fix: Never Let a Stalled Attachment Disable the Composer by [@danny-avila](https://github.com/danny-avila) in [#15013](https://github.com/LibreChat-AI/LibreChat/pull/15013) +- ๐Ÿชช fix: Preserve Detached Subagent Owner Context by [@danny-avila](https://github.com/danny-avila) in [#15015](https://github.com/LibreChat-AI/LibreChat/pull/15015) +- โœ‚๏ธ fix(agents): warn when skill descriptions are truncated in the model catalog by [@putramkti](https://github.com/putramkti) in [#14878](https://github.com/LibreChat-AI/LibreChat/pull/14878) +- ๐Ÿ”“ fix: Unblock Detached Subagent Preparation by [@danny-avila](https://github.com/danny-avila) in [#15016](https://github.com/LibreChat-AI/LibreChat/pull/15016) +- โ™ฟ fix: Keep Portaled Dropdown Menus Clickable Inside Modal Dialogs by [@berry-13](https://github.com/berry-13) in [#15026](https://github.com/LibreChat-AI/LibreChat/pull/15026) +- โ™ฟ fix: Resolve axe Violations in Sidebar, Tools Dropdown and Footer by [@jtodaroii](https://github.com/jtodaroii) in [#14979](https://github.com/LibreChat-AI/LibreChat/pull/14979) +- ๐ŸŽก fix: Scheduled Chat Slot Accounting and Reconciliation Rotation by [@danny-avila](https://github.com/danny-avila) in [#15040](https://github.com/LibreChat-AI/LibreChat/pull/15040) +- ๐Ÿ—“๏ธ fix: Hide Unsupported Schedule Variables by [@danny-avila](https://github.com/danny-avila) in [#15053](https://github.com/LibreChat-AI/LibreChat/pull/15053) +- ๐Ÿงต fix: Hide Child Threads From Navigation by [@danny-avila](https://github.com/danny-avila) in [#15041](https://github.com/LibreChat-AI/LibreChat/pull/15041) +- ๐Ÿ›‘ fix: Confirm Scheduled Stops and Separate Terminal Scheduler Failure from Startup by [@danny-avila](https://github.com/danny-avila) in [#15051](https://github.com/LibreChat-AI/LibreChat/pull/15051) +- ๐Ÿงต fix: Close Child-Thread Read and Search-Cleanup Gaps by [@danny-avila](https://github.com/danny-avila) in [#15055](https://github.com/LibreChat-AI/LibreChat/pull/15055) +- ๐Ÿ“ฑ fix: Recover the Stream After a Mobile Tab is Backgrounded by [@danny-avila](https://github.com/danny-avila) in [#15050](https://github.com/LibreChat-AI/LibreChat/pull/15050) +- ๐Ÿ›Ÿ fix: Report Skill Sync Files Whose Paths Cannot Be Mirrored by [@danny-avila](https://github.com/danny-avila) in [#15067](https://github.com/LibreChat-AI/LibreChat/pull/15067) +- ๐Ÿ”ญ fix: Attach to Runs This Pane Did Not Start by [@danny-avila](https://github.com/danny-avila) in [#15074](https://github.com/LibreChat-AI/LibreChat/pull/15074) +- ๐Ÿชช fix: Support MCP Server Titles With Hyphens by [@danny-avila](https://github.com/danny-avila) in [#15094](https://github.com/LibreChat-AI/LibreChat/pull/15094) +- ๐Ÿ“„ fix: Serve Stored Text for "Upload as Text" File Downloads by [@lidonius1122](https://github.com/lidonius1122) in [#14723](https://github.com/LibreChat-AI/LibreChat/pull/14723) +- ๐Ÿชข fix: Preserve Response Identity and Branch During Resumable SSE Sync by [@Falenos](https://github.com/Falenos) in [#14788](https://github.com/LibreChat-AI/LibreChat/pull/14788) +- โœ‚๏ธ fix: Strip Redundant Server-Name Prefixes from MCP Tool Keys by [@dustinhealy](https://github.com/dustinhealy) in [#14732](https://github.com/LibreChat-AI/LibreChat/pull/14732) +- ๐Ÿชก fix: Thread Parent Message ID Through MCP Request-Scoped Bodies by [@danny-avila](https://github.com/danny-avila) in [#15095](https://github.com/LibreChat-AI/LibreChat/pull/15095) +- ๐Ÿ–ผ๏ธ fix: Restore Shared Subagent Activity as a Read-Only View by [@danny-avila](https://github.com/danny-avila) in [#15108](https://github.com/LibreChat-AI/LibreChat/pull/15108) +- ๐Ÿงฏ fix: Prevent Quote Popup Update Loop by [@danny-avila](https://github.com/danny-avila) in [#15113](https://github.com/LibreChat-AI/LibreChat/pull/15113) +- ๐Ÿšฆ fix: Restrict Programmatic Tool Execution Maps by [@danny-avila](https://github.com/danny-avila) in [#15105](https://github.com/LibreChat-AI/LibreChat/pull/15105) +- ๐Ÿ›‚ fix: Preserve Legacy Assistant Attribution by [@danny-avila](https://github.com/danny-avila) in [#15118](https://github.com/LibreChat-AI/LibreChat/pull/15118) +- ๐Ÿงพ fix: Report Complete Agents API Usage by [@danny-avila](https://github.com/danny-avila) in [#15127](https://github.com/LibreChat-AI/LibreChat/pull/15127) +- ๐Ÿ“ fix: Size Agent Builder Tool and Skill Rows by [@berry-13](https://github.com/berry-13) in [#15134](https://github.com/LibreChat-AI/LibreChat/pull/15134) +- ๐Ÿซ‚ fix: Route Subagent Activity Through the Chat Renderer by [@danny-avila](https://github.com/danny-avila) in [#15137](https://github.com/LibreChat-AI/LibreChat/pull/15137) +- ๐Ÿงช fix: Mock the Parent Subagent Index Handler in Convos Route Tests by [@danny-avila](https://github.com/danny-avila) in [#15146](https://github.com/LibreChat-AI/LibreChat/pull/15146) +- ๐Ÿชถ fix: Polish Event Subagent Activity by [@danny-avila](https://github.com/danny-avila) in [#15152](https://github.com/LibreChat-AI/LibreChat/pull/15152) +- ๐Ÿ“ญ fix: Detect Agent List Pages in `useHasData` by [@jomspk](https://github.com/jomspk) in [#15156](https://github.com/LibreChat-AI/LibreChat/pull/15156) +- ๐ŸŽฝ fix: Commit Subagent Roster Selections to Form State by [@danny-avila](https://github.com/danny-avila) in [#15154](https://github.com/LibreChat-AI/LibreChat/pull/15154) +- ๐Ÿฉน fix: Restore Provider Typing Against the Agents SDK Declarations by [@danny-avila](https://github.com/danny-avila) in [#15161](https://github.com/LibreChat-AI/LibreChat/pull/15161) +- ๐Ÿ•ฏ๏ธ fix: Decay Violation Scores With a Configurable TTL by [@danny-avila](https://github.com/danny-avila) in [#15153](https://github.com/LibreChat-AI/LibreChat/pull/15153) +- ๐Ÿฅ fix: Compare TOTP Codes in Constant Time by [@pacocartones](https://github.com/pacocartones) in [#15157](https://github.com/LibreChat-AI/LibreChat/pull/15157) +- ๐Ÿงณ fix: Port Subagent Control Receipt Writes to DocumentDB-Safe Operators by [@danny-avila](https://github.com/danny-avila) in [#15171](https://github.com/LibreChat-AI/LibreChat/pull/15171) +- โœ‚๏ธ fix: Unclip the Share Dialog's Public Role Menu by [@danny-avila](https://github.com/danny-avila) in [#15177](https://github.com/LibreChat-AI/LibreChat/pull/15177) +- ๐Ÿงฎ fix: Currency-Safe Single-Dollar LaTeX via Micromark Tokenizer by [@danny-avila](https://github.com/danny-avila) in [#15181](https://github.com/LibreChat-AI/LibreChat/pull/15181) +- ๐Ÿซ— fix: Drain Quoted Excerpts Into Mid-Run Steering by [@danny-avila](https://github.com/danny-avila) in [#15175](https://github.com/LibreChat-AI/LibreChat/pull/15175) +- ๐Ÿ“Œ fix: Keep the Settled Turn Mounted Through Final Content Compaction by [@danny-avila](https://github.com/danny-avila) in [#15186](https://github.com/LibreChat-AI/LibreChat/pull/15186) +- ๐Ÿชข fix: Persist Failed Agent Turns Before Error Publication by [@danny-avila](https://github.com/danny-avila) in [#14118](https://github.com/LibreChat-AI/LibreChat/pull/14118) +- ๐Ÿ“ fix: Set the Elapsed Reading on the Column Its Neighbors Share by [@danny-avila](https://github.com/danny-avila) in [#15195](https://github.com/LibreChat-AI/LibreChat/pull/15195) +- ๐Ÿงพ fix: Honor Disabled Transactions on the Abort Paths by [@jtodaroii](https://github.com/jtodaroii) in [#15099](https://github.com/LibreChat-AI/LibreChat/pull/15099) +- ๐Ÿฅ› fix: Drop Stale Saved Model Defaults in Builder Forms by [@upman](https://github.com/upman) in [#15179](https://github.com/LibreChat-AI/LibreChat/pull/15179) +- ๐Ÿงพ fix: Honor Disabled Transactions on the Assistants Usage Path by [@jtodaroii](https://github.com/jtodaroii) in [#15100](https://github.com/LibreChat-AI/LibreChat/pull/15100) +- ๐ŸŽ›๏ธ fix: Withhold the Seeded Model Catalogue Until Models Resolve by [@berry-13](https://github.com/berry-13) in [#15035](https://github.com/LibreChat-AI/LibreChat/pull/15035) +- ๐Ÿ•ถ๏ธ fix: Unhide Event Subagent Names on the Dark Surface by [@danny-avila](https://github.com/danny-avila) in [#15206](https://github.com/LibreChat-AI/LibreChat/pull/15206) +- ๐Ÿ›‘ fix: Separate Agent Event Backpressure From User Bans by [@danny-avila](https://github.com/danny-avila) in [#15200](https://github.com/LibreChat-AI/LibreChat/pull/15200) +- โณ fix: Anchor Resumed Elapsed Time at the Generation's Real Start by [@danny-avila](https://github.com/danny-avila) in [#15204](https://github.com/LibreChat-AI/LibreChat/pull/15204) +- ๐Ÿง  fix: Correct Memory Token Accounting by [@danny-avila](https://github.com/danny-avila) in [#15224](https://github.com/LibreChat-AI/LibreChat/pull/15224) +- ๐ŸŽข fix: Restore Schedule Dialog Scrolling So Save Stays Reachable by [@danny-avila](https://github.com/danny-avila) in [#15225](https://github.com/LibreChat-AI/LibreChat/pull/15225) +- ๐Ÿ—„๏ธ fix: support DocumentDB aggregations for insights by [@upman](https://github.com/upman) in [#15226](https://github.com/LibreChat-AI/LibreChat/pull/15226) +- ๐Ÿ” fix: Rerun a Message the Editor Has Not Changed by [@berry-13](https://github.com/berry-13) in [#15212](https://github.com/LibreChat-AI/LibreChat/pull/15212) +- ๐Ÿงฎ fix: Render Google Settings From the Shared Schema and Bound Them Per Model by [@berry-13](https://github.com/berry-13) in [#14989](https://github.com/LibreChat-AI/LibreChat/pull/14989) +- ๐Ÿง  fix: Apply the Configured Reasoning Effort to Summarization by [@danny-avila](https://github.com/danny-avila) in [#15232](https://github.com/LibreChat-AI/LibreChat/pull/15232) +- ๐Ÿงข fix: Bound Tokenizer Work Per Input by [@danny-avila](https://github.com/danny-avila) in [#15246](https://github.com/LibreChat-AI/LibreChat/pull/15246) +- ๐Ÿ”ฃ fix: Escape SPA Language Attribute by [@danny-avila](https://github.com/danny-avila) in [#15248](https://github.com/LibreChat-AI/LibreChat/pull/15248) +- ๐Ÿชบ fix: Heal MCP HITL Aliases Through Nested Subagents by [@danny-avila](https://github.com/danny-avila) in [#15258](https://github.com/LibreChat-AI/LibreChat/pull/15258) +- ๐Ÿงข fix: Cap Batched HITL Answers Before PII and Moderation by [@danny-avila](https://github.com/danny-avila) in [#15257](https://github.com/LibreChat-AI/LibreChat/pull/15257) +- ๐Ÿ–‡๏ธ fix: Bind Model-Spec Authorization to the Loaded Agent by [@danny-avila](https://github.com/danny-avila) in [#15256](https://github.com/LibreChat-AI/LibreChat/pull/15256) +- ๐Ÿ“ฎ fix: Screen User-Supplied Structured Tool Endpoints by [@danny-avila](https://github.com/danny-avila) in [#15253](https://github.com/LibreChat-AI/LibreChat/pull/15253) +- ๐Ÿชช fix: Preserve SAML NameID Bindings by [@danny-avila](https://github.com/danny-avila) in [#15254](https://github.com/LibreChat-AI/LibreChat/pull/15254) +- ๐Ÿงฌ fix: Harden SAML Identity Binding by [@danny-avila](https://github.com/danny-avila) in [#15264](https://github.com/LibreChat-AI/LibreChat/pull/15264) +- ๐Ÿ›— fix: Anchor Message Nav Gestures to One Measured Rib Layout by [@danny-avila](https://github.com/danny-avila) in [#15272](https://github.com/LibreChat-AI/LibreChat/pull/15272) +- ๐ŸŒ fix: Expose Gemini Models to Vertex AI Agents by [@danny-avila](https://github.com/danny-avila) in [#15234](https://github.com/LibreChat-AI/LibreChat/pull/15234) +- ๐Ÿฅซ fix: Refuse to Boot on Retired JWT Secret Defaults by [@danny-avila](https://github.com/danny-avila) in [#15282](https://github.com/LibreChat-AI/LibreChat/pull/15282) +- ๐Ÿ“Œ fix: Keep Pinned Chats Pinned Through a New Turn by [@berry-13](https://github.com/berry-13) in [#15230](https://github.com/LibreChat-AI/LibreChat/pull/15230) +- ๐Ÿงท fix: Verify Scheduled HITL State Before Pausing by [@danny-avila](https://github.com/danny-avila) in [#15284](https://github.com/LibreChat-AI/LibreChat/pull/15284) +- โ™Ÿ๏ธ fix: Settle First Bound Actor Events by [@danny-avila](https://github.com/danny-avila) in [#15300](https://github.com/LibreChat-AI/LibreChat/pull/15300) +- ๐ŸŽฐ fix: Merge Message Provenance With Compare-and-Swap Retries by [@danny-avila](https://github.com/danny-avila) in [#15304](https://github.com/LibreChat-AI/LibreChat/pull/15304) +- ๐Ÿงต fix: Retry Shared Links After Message Persistence Gaps by [@danny-avila](https://github.com/danny-avila) in [#15306](https://github.com/LibreChat-AI/LibreChat/pull/15306) +- ๐ŸŽซ fix: Exclude System Tenant Sentinel from Code API JWT Claims by [@danny-avila](https://github.com/danny-avila) in [#15316](https://github.com/LibreChat-AI/LibreChat/pull/15316) +- ๐Ÿชช fix: Reject ID Tokens as the OpenID Bearer Reuse Access Token by [@danny-avila](https://github.com/danny-avila) in [#15317](https://github.com/LibreChat-AI/LibreChat/pull/15317) +- ๐Ÿ•ฐ๏ธ fix: Guard `expires_in` So a Token Response Cannot Outlive Its Credential by [@danny-avila](https://github.com/danny-avila) in [#15321](https://github.com/LibreChat-AI/LibreChat/pull/15321) +- ๐Ÿชง fix: Advertise Detached Event Actor Support from the Generation Store by [@danny-avila](https://github.com/danny-avila) in [#15322](https://github.com/LibreChat-AI/LibreChat/pull/15322) +- ๐Ÿชช fix: Admit Confirmed Generation Retries Before Message Limits by [@danny-avila](https://github.com/danny-avila) in [#15341](https://github.com/LibreChat-AI/LibreChat/pull/15341) +- ๐Ÿซ€ fix: Reconcile Completed Runs Behind Apparently Open Streams on Foreground by [@danny-avila](https://github.com/danny-avila) in [#15342](https://github.com/LibreChat-AI/LibreChat/pull/15342) +- ๐Ÿบ fix: Stop Routine MCP Teardowns From Failing Concurrent Tool Calls by [@danny-avila](https://github.com/danny-avila) in [#15333](https://github.com/LibreChat-AI/LibreChat/pull/15333) +- ๐Ÿ“ญ fix: Drop Empty Summary Parts Before Persistence by [@danny-avila](https://github.com/danny-avila) in [#15338](https://github.com/LibreChat-AI/LibreChat/pull/15338) +- ๐Ÿ”’ fix: Refresh MCP OBO Tokens From the Live OpenID Session by [@danny-avila](https://github.com/danny-avila) in [#15334](https://github.com/LibreChat-AI/LibreChat/pull/15334) +- ๐Ÿ‘” fix: Route Flux Finetuned Endpoints Regardless of Action by [@AyushCipher](https://github.com/AyushCipher) in [#15336](https://github.com/LibreChat-AI/LibreChat/pull/15336) +- ๐Ÿชญ fix: Settle Parent Phase Cards Without Replaying the Entrance Fold by [@danny-avila](https://github.com/danny-avila) in [#15345](https://github.com/LibreChat-AI/LibreChat/pull/15345) +- ๐Ÿ”Š fix: Autoplay Latest Message for Browser TTS and short responses by [@danny-avila](https://github.com/danny-avila) in [#15347](https://github.com/LibreChat-AI/LibreChat/pull/15347) +- ๐Ÿ”„ fix: Recover Missing MCP Marketplace Catalogs by [@dustinhealy](https://github.com/dustinhealy) in [#15323](https://github.com/LibreChat-AI/LibreChat/pull/15323) +- ๐Ÿ›Ž๏ธ fix: Enroll Remote Agent Runs in the Generation Lifecycle by [@danny-avila](https://github.com/danny-avila) in [#15349](https://github.com/LibreChat-AI/LibreChat/pull/15349) +- โฑ๏ธ fix: Bound MCP Tool Discovery With a Caller Deadline by [@danny-avila](https://github.com/danny-avila) in [#15346](https://github.com/LibreChat-AI/LibreChat/pull/15346) +- ๐Ÿงบ fix: Skip Oversized and Duplicate Files Instead of the Whole Batch by [@danny-avila](https://github.com/danny-avila) in [#15358](https://github.com/LibreChat-AI/LibreChat/pull/15358) +- fix: log config-blocked MCP recovery at debug instead of error by [@danny-avila](https://github.com/danny-avila) in [#15360](https://github.com/LibreChat-AI/LibreChat/pull/15360) +- ๐Ÿ•๏ธ fix: Restore Code Environments From Runtime Config by [@danny-avila](https://github.com/danny-avila) in [#15373](https://github.com/LibreChat-AI/LibreChat/pull/15373) +- ๐Ÿ“œ fix: Resolve MCP Server Instructions for Startup-Deferred Servers by [@danny-avila](https://github.com/danny-avila) in [#15361](https://github.com/LibreChat-AI/LibreChat/pull/15361) +- ๐Ÿงณ fix: Carry Stateful Environments Through Runtime Config by [@danny-avila](https://github.com/danny-avila) in [#15374](https://github.com/LibreChat-AI/LibreChat/pull/15374) +- ๐Ÿƒ fix: Restore Amazon DocumentDB Compatibility Across Trigger and Subagent Writes by [@danny-avila](https://github.com/danny-avila) in [#15375](https://github.com/LibreChat-AI/LibreChat/pull/15375) +- ๐Ÿงช fix: Align Detached Activity E2E With the Removed Running Chip by [@danny-avila](https://github.com/danny-avila) in [#15382](https://github.com/LibreChat-AI/LibreChat/pull/15382) +- ๐ŸชŸ fix: Keep the Subagent Panel Steady and Honest Across Event Deliveries by [@danny-avila](https://github.com/danny-avila) in [#15387](https://github.com/LibreChat-AI/LibreChat/pull/15387) +- ๐Ÿƒ fix: Send a Pure Inclusion Projection From the Legacy Receipt Sweep by [@danny-avila](https://github.com/danny-avila) in [#15390](https://github.com/LibreChat-AI/LibreChat/pull/15390) +- ๐ŸŽ›๏ธ fix: Settle New Turns at the Bottom, Steady Status Dots, and Elapsed Time in the Panel by [@danny-avila](https://github.com/danny-avila) in [#15394](https://github.com/LibreChat-AI/LibreChat/pull/15394) +- ๐Ÿ–๏ธ fix: Honor Agent Image Detail Settings by [@danny-avila](https://github.com/danny-avila) in [#15407](https://github.com/LibreChat-AI/LibreChat/pull/15407) +- ๐Ÿช fix: Keep Tool Flyouts in View by [@alexsr1](https://github.com/alexsr1) in [#15404](https://github.com/LibreChat-AI/LibreChat/pull/15404) +- ๐Ÿงฐ fix: Keep File-Backed Agent Capabilities and Their Saved Tools in Agreement by [@danny-avila](https://github.com/danny-avila) in [#15418](https://github.com/LibreChat-AI/LibreChat/pull/15418) +- ๐Ÿงท fix: Attach to a Continuation the Finished Run Left Behind by [@danny-avila](https://github.com/danny-avila) in [#15414](https://github.com/LibreChat-AI/LibreChat/pull/15414) +- ๐Ÿ•ฐ๏ธ fix: Anchor Temporal Prompt Variables to Turn Start by [@danny-avila](https://github.com/danny-avila) in [#15419](https://github.com/LibreChat-AI/LibreChat/pull/15419) +- ๐Ÿงท fix: Fence Server-Admitted Queue Boundaries by [@danny-avila](https://github.com/danny-avila) in [#15393](https://github.com/LibreChat-AI/LibreChat/pull/15393) +- ๐Ÿงด fix: Strip LangChain URLs From Provider Errors by [@danny-avila](https://github.com/danny-avila) in [#15421](https://github.com/LibreChat-AI/LibreChat/pull/15421) +- ๐Ÿงฟ fix: Restore Shared IP Limits for Generation Retries by [@danny-avila](https://github.com/danny-avila) in [#15427](https://github.com/LibreChat-AI/LibreChat/pull/15427) +- ๐Ÿซ€ fix: Expire Aborted Background Tool Leases by [@danny-avila](https://github.com/danny-avila) in [#15428](https://github.com/LibreChat-AI/LibreChat/pull/15428) +- ๐Ÿงบ fix: Funnel MCP Catalog Work Through a Shared Gate by [@danny-avila](https://github.com/danny-avila) in [#15429](https://github.com/LibreChat-AI/LibreChat/pull/15429) +- ๐Ÿ” fix: Redirect OAuth Browser Navigations Instead of Rendering JSON by [@berry-13](https://github.com/berry-13) in [#15440](https://github.com/LibreChat-AI/LibreChat/pull/15440) +- ๐ŸŽฏ fix: Keep the Thinking Label on the Lightbulb's Axis While Shimmering by [@danny-avila](https://github.com/danny-avila) in [#15437](https://github.com/LibreChat-AI/LibreChat/pull/15437) +- ๐Ÿ–ผ๏ธ fix: Give a Phase's Files Their Own Media Row by [@danny-avila](https://github.com/danny-avila) in [#15435](https://github.com/LibreChat-AI/LibreChat/pull/15435) +- ๐Ÿงฉ fix: Scope Each Image's Digest Artifacts to Its Own Manifest Merge by [@danny-avila](https://github.com/danny-avila) in [#15444](https://github.com/LibreChat-AI/LibreChat/pull/15444) +- ๐Ÿ›„ fix: Refresh Stale Skill File References by [@putramkti](https://github.com/putramkti) in [#15413](https://github.com/LibreChat-AI/LibreChat/pull/15413) +- ๐Ÿฉน fix: Stop the Subagent Composer Unmounting, and Give It Main Chat's Shape by [@danny-avila](https://github.com/danny-avila) in [#15448](https://github.com/LibreChat-AI/LibreChat/pull/15448) +- ๐Ÿ—‚๏ธ fix: Resolve Code Interpreter Destination Collisions by [@danny-avila](https://github.com/danny-avila) in [#15449](https://github.com/LibreChat-AI/LibreChat/pull/15449) +- ๐Ÿงฒ fix: Draw OpenID Refresh Lookups Into System Context by [@danny-avila](https://github.com/danny-avila) in [#15451](https://github.com/LibreChat-AI/LibreChat/pull/15451) +- ๐Ÿšฆ fix: Downgrade Stale Generation Fence Telemetry by [@danny-avila](https://github.com/danny-avila) in [#15452](https://github.com/LibreChat-AI/LibreChat/pull/15452) +- ๐Ÿ–ผ๏ธ fix: Stop Reporting a Failed Sandbox Image Read as an Unreadable Format by [@danny-avila](https://github.com/danny-avila) in [#15453](https://github.com/LibreChat-AI/LibreChat/pull/15453) +- ๐Ÿช„ fix: Reuse Downloaded Artifacts for Image Reads by [@danny-avila](https://github.com/danny-avila) in [#15454](https://github.com/LibreChat-AI/LibreChat/pull/15454) +- ๐Ÿช‚ fix: Preserve Subscribers Through Terminal Handoffs by [@danny-avila](https://github.com/danny-avila) in [#15462](https://github.com/LibreChat-AI/LibreChat/pull/15462) +- ๐Ÿซด fix: Hand Composer Focus Back After Upload Dialogs by [@danny-avila](https://github.com/danny-avila) in [#15469](https://github.com/LibreChat-AI/LibreChat/pull/15469) +- ๐Ÿ“Ž fix: Keep SharePoint Picker Selections While Navigating by [@danny-avila](https://github.com/danny-avila) in [#15389](https://github.com/LibreChat-AI/LibreChat/pull/15389) +- ๐Ÿ” fix: Keep OpenID Metadata Out of Logs and Traces by [@danny-avila](https://github.com/danny-avila) in [#15470](https://github.com/LibreChat-AI/LibreChat/pull/15470) +- ๐ŸŽ–๏ธ fix: Apply Fallback Role on Group Overage by [@danny-avila](https://github.com/danny-avila) in [#15472](https://github.com/LibreChat-AI/LibreChat/pull/15472) +- ๐Ÿ›„ fix: Reclaim Pending MCP OAuth Prompts on Resume by [@danny-avila](https://github.com/danny-avila) in [#15471](https://github.com/LibreChat-AI/LibreChat/pull/15471) +- ๐Ÿšฎ fix: Replace Backtracking LangChain Error Regexes by [@danny-avila](https://github.com/danny-avila) in [#15473](https://github.com/LibreChat-AI/LibreChat/pull/15473) +- ๐Ÿงซ fix: Contain Detached Tool Output by [@danny-avila](https://github.com/danny-avila) in [#15476](https://github.com/LibreChat-AI/LibreChat/pull/15476) +- ๐Ÿ—ฟ fix: Bound Background Task Retention by [@danny-avila](https://github.com/danny-avila) in [#15477](https://github.com/LibreChat-AI/LibreChat/pull/15477) +- ๐Ÿงถ fix: Preserve Multi-Agent Tool Call History by [@danny-avila](https://github.com/danny-avila) in [#15468](https://github.com/LibreChat-AI/LibreChat/pull/15468) +- ๐Ÿงฒ fix: Anchor Memory Partitions to Accessible Agents by [@danny-avila](https://github.com/danny-avila) in [#15475](https://github.com/LibreChat-AI/LibreChat/pull/15475) +- ๐Ÿซฅ fix: Clear Hidden MCP Chat Selections by [@danny-avila](https://github.com/danny-avila) in [#14159](https://github.com/LibreChat-AI/LibreChat/pull/14159) +- ๐Ÿ”‘ fix: Decode Action OAuth Credentials After Decryption by [@lidonius1122](https://github.com/lidonius1122) in [#14698](https://github.com/LibreChat-AI/LibreChat/pull/14698) +- ๐Ÿ›ž fix: Roll Overflow Tenant Labels Into Aggregate Metrics by [@danny-avila](https://github.com/danny-avila) in [#15474](https://github.com/LibreChat-AI/LibreChat/pull/15474) +- ๐Ÿšง fix: Narrow Chat MCP Selections to What the Picker May Offer by [@danny-avila](https://github.com/danny-avila) in [#15478](https://github.com/LibreChat-AI/LibreChat/pull/15478) +- ๐Ÿ”Ž fix: Respect Search Page Limits in MeiliSearch Queries by [@csdivad](https://github.com/csdivad) in [#15482](https://github.com/LibreChat-AI/LibreChat/pull/15482) +- ๐Ÿงณ fix: Carry Custom Endpoint Names Through Chat URLs by [@abhishekbiswas772](https://github.com/abhishekbiswas772) in [#15424](https://github.com/LibreChat-AI/LibreChat/pull/15424) +- ๐Ÿ” fix: Include Message-Matched Conversations in Sidebar Search by [@csdivad](https://github.com/csdivad) in [#15483](https://github.com/LibreChat-AI/LibreChat/pull/15483) +- ๐Ÿ”„ fix: Reindex MeiliSearch Documents After Indexed-Projection Changes by [@csdivad](https://github.com/csdivad) in [#15484](https://github.com/LibreChat-AI/LibreChat/pull/15484) +- ๐Ÿงถ fix: Untangle Parallel Subagent Descriptor Paths by [@danny-avila](https://github.com/danny-avila) in [#15492](https://github.com/LibreChat-AI/LibreChat/pull/15492) +- ๐Ÿšข fix: Reconnect Keyv Redis After Replica Failover by [@danny-avila](https://github.com/danny-avila) in [#15502](https://github.com/LibreChat-AI/LibreChat/pull/15502) +- ๐Ÿซฑ fix: Keep Polling Through Queued Run Handoffs by [@danny-avila](https://github.com/danny-avila) in [#15509](https://github.com/LibreChat-AI/LibreChat/pull/15509) +- ๐Ÿ›‘ fix: Forward Run Abort Signal to Foreground Tool Calls by [@danny-avila](https://github.com/danny-avila) in [#15517](https://github.com/LibreChat-AI/LibreChat/pull/15517) +- ๐Ÿซ™ fix: Drop Blank Content Blocks From Promptless Sends by [@danny-avila](https://github.com/danny-avila) in [#15530](https://github.com/LibreChat-AI/LibreChat/pull/15530) +- ๐Ÿšฐ fix: Record the Provider Drain When Shutdown Cuts a Generation Short by [@danny-avila](https://github.com/danny-avila) in [#15532](https://github.com/LibreChat-AI/LibreChat/pull/15532) +- ๐Ÿ“ง fix: Normalize Token Emails on Write, as Every Read Already Does by [@danny-avila](https://github.com/danny-avila) in [#15536](https://github.com/LibreChat-AI/LibreChat/pull/15536) +- ๐Ÿ’“ fix: Detect Silently Dead Redis Sockets With Deadline-Bounded Heartbeats by [@danny-avila](https://github.com/danny-avila) in [#15539](https://github.com/LibreChat-AI/LibreChat/pull/15539) +- ๐Ÿงผ fix: Clear Model Spec Fields on Configured Selections by [@danny-avila](https://github.com/danny-avila) in [#15544](https://github.com/LibreChat-AI/LibreChat/pull/15544) +- ๐Ÿงณ fix: Carry Logical Endpoints Through Agent Runs by [@danny-avila](https://github.com/danny-avila) in [#15538](https://github.com/LibreChat-AI/LibreChat/pull/15538) +- ๐Ÿ fix: Keep Polling for Owed Agent Successors by [@danny-avila](https://github.com/danny-avila) in [#15537](https://github.com/LibreChat-AI/LibreChat/pull/15537) +- ๐Ÿ“ฎ fix: Validate Invite Email Claims by [@lailson](https://github.com/lailson) in [#15542](https://github.com/LibreChat-AI/LibreChat/pull/15542) +- ๐Ÿ—๏ธ fix: Wait Out Concurrent Index Builds on DocumentDB by [@danny-avila](https://github.com/danny-avila) in [#15563](https://github.com/LibreChat-AI/LibreChat/pull/15563) +- ๐Ÿงถ fix: Render Solo Agent Groups as Sequential Content by [@danny-avila](https://github.com/danny-avila) in [#15574](https://github.com/LibreChat-AI/LibreChat/pull/15574) +- ๐Ÿ—œ๏ธ fix: Bound Conversation Page Size by [@danny-avila](https://github.com/danny-avila) in [#15576](https://github.com/LibreChat-AI/LibreChat/pull/15576) +- ๐Ÿ›ž fix: Re-Exchange Rejected OBO Tokens by [@danny-avila](https://github.com/danny-avila) in [#15577](https://github.com/LibreChat-AI/LibreChat/pull/15577) +- ๐Ÿ‘“ fix: Match Pasted Text Focus Feedback by [@danny-avila](https://github.com/danny-avila) in [#15588](https://github.com/LibreChat-AI/LibreChat/pull/15588) +- ๐Ÿ”Ž fix: Report Measured Skill Catalog Truncation by [@danny-avila](https://github.com/danny-avila) in [#15590](https://github.com/LibreChat-AI/LibreChat/pull/15590) +- ๐Ÿ”‡ fix: Stop logging an absent `create_file` target as an error by [@danny-avila](https://github.com/danny-avila) in [#15591](https://github.com/LibreChat-AI/LibreChat/pull/15591) +- ๐Ÿงฌ fix: Carry Whole File Refs Through Sandbox Authoring by [@danny-avila](https://github.com/danny-avila) in [#15593](https://github.com/LibreChat-AI/LibreChat/pull/15593) +- ๐Ÿชต fix: Log Code API Auth Header Failures With Request Context by [@danny-avila](https://github.com/danny-avila) in [#15592](https://github.com/LibreChat-AI/LibreChat/pull/15592) +- ๐Ÿฅฃ fix: Apply Agent Shaping to Built-In Summarizers by [@danny-avila](https://github.com/danny-avila) in [#15599](https://github.com/LibreChat-AI/LibreChat/pull/15599) +- ๐Ÿงƒ fix: Decode Blob-Backed MCP Resources by [@danny-avila](https://github.com/danny-avila) in [#15601](https://github.com/LibreChat-AI/LibreChat/pull/15601) +- ๐ŸŽ–๏ธ fix: Preserve Endpoint Approval Policy Precedence by [@danny-avila](https://github.com/danny-avila) in [#15604](https://github.com/LibreChat-AI/LibreChat/pull/15604) +- ๐Ÿท๏ธ fix: Record the Media Type of Saved Images, Not the Declared One by [@danny-avila](https://github.com/danny-avila) in [#15606](https://github.com/LibreChat-AI/LibreChat/pull/15606) +- fix(insights): stop the KPI grid orphaning a card on its own row by [@danielclickh](https://github.com/danielclickh) in [#15553](https://github.com/LibreChat-AI/LibreChat/pull/15553) +- ๐Ÿšฐ fix: Throttle Shared Link Reads and Aggregate Audit Findings by [@danny-avila](https://github.com/danny-avila) in [#15605](https://github.com/LibreChat-AI/LibreChat/pull/15605) +- ๐Ÿšซ fix: Decline to Name a Heif Container With Unreported Compression by [@danny-avila](https://github.com/danny-avila) in [#15612](https://github.com/LibreChat-AI/LibreChat/pull/15612) +- ๐Ÿช fix: Honor Endpoint Drop Params in Parameter Panels by [@danny-avila](https://github.com/danny-avila) in [#15610](https://github.com/LibreChat-AI/LibreChat/pull/15610) +- ๐Ÿ›ฐ๏ธ fix: Repair BYOM Live Integration by [@danny-avila](https://github.com/danny-avila) in [#15613](https://github.com/LibreChat-AI/LibreChat/pull/15613) +- ๐Ÿชซ fix: Back Off Failed Retention Deletes by [@danny-avila](https://github.com/danny-avila) in [#15608](https://github.com/LibreChat-AI/LibreChat/pull/15608) +- ๐Ÿ“ฎ fix: Consume an Invite Only Once the Account Exists by [@danny-avila](https://github.com/danny-avila) in [#15611](https://github.com/LibreChat-AI/LibreChat/pull/15611) +- ๐Ÿ—“๏ธ fix: Classify Scheduled Run Duplicate Conflicts on DocumentDB by [@danny-avila](https://github.com/danny-avila) in [#15622](https://github.com/LibreChat-AI/LibreChat/pull/15622) +- ๐Ÿ›Ž๏ธ fix: Start Code Environment Reconciliation After Mongo Connects by [@danny-avila](https://github.com/danny-avila) in [#15620](https://github.com/LibreChat-AI/LibreChat/pull/15620) +- ๐Ÿงฎ fix: Scale Code Environment Reconciliation by [@danny-avila](https://github.com/danny-avila) in [#15625](https://github.com/LibreChat-AI/LibreChat/pull/15625) +- ๐Ÿฉน fix: Restore the Client Build by Parsing Single-Dollar Math via Micromark by [@berry-13](https://github.com/berry-13) in [#15638](https://github.com/LibreChat-AI/LibreChat/pull/15638) +- ๐Ÿ“ fix: Keep the Live Slot Under a Phase Card One Row Tall by [@danny-avila](https://github.com/danny-avila) in [#15639](https://github.com/LibreChat-AI/LibreChat/pull/15639) +- ๐Ÿ› fix: improve sidebar title clarity and hover scrolling by [@berry-13](https://github.com/berry-13) in [#15644](https://github.com/LibreChat-AI/LibreChat/pull/15644) +- ๐Ÿง  fix: Return 400 for Invalid Memory Keys by [@mihidumh](https://github.com/mihidumh) in [#14618](https://github.com/LibreChat-AI/LibreChat/pull/14618) +- ๐Ÿ”” fix: Honor Toast Duration and Support Persistent Toasts by [@jtodaroii](https://github.com/jtodaroii) in [#15049](https://github.com/LibreChat-AI/LibreChat/pull/15049) +- ๐Ÿช  fix: Unblock Failed OpenID Publication Flights by [@danny-avila](https://github.com/danny-avila) in [#15641](https://github.com/LibreChat-AI/LibreChat/pull/15641) +- ๐Ÿ–ผ๏ธ fix: Precache PWA Icons and Let Them Refresh by [@berry-13](https://github.com/berry-13) in [#15654](https://github.com/LibreChat-AI/LibreChat/pull/15654) +- ๐Ÿ—“๏ธ fix: Surface a Run Now Scheduled Chat in the Sidebar by [@danny-avila](https://github.com/danny-avila) in [#15630](https://github.com/LibreChat-AI/LibreChat/pull/15630) +- ๐Ÿšฎ fix: Require Sign-In After Missing OpenID Sessions by [@danny-avila](https://github.com/danny-avila) in [#15655](https://github.com/LibreChat-AI/LibreChat/pull/15655) +- ๐Ÿƒ fix: Serialize Index Builds and the Agent Edge Cleanup for DocumentDB by [@danny-avila](https://github.com/danny-avila) in [#15670](https://github.com/LibreChat-AI/LibreChat/pull/15670) +- ๐Ÿงบ fix: Discard Stale Session Tokens at OpenID Login by [@danny-avila](https://github.com/danny-avila) in [#15668](https://github.com/LibreChat-AI/LibreChat/pull/15668) +- ๐Ÿ—“๏ธ fix: Refresh the Sidebar When a Scheduled Run Fires or Settles by [@danny-avila](https://github.com/danny-avila) in [#15631](https://github.com/LibreChat-AI/LibreChat/pull/15631) +- ๐Ÿ“ซ fix: Surface Sandbox Artifact Delivery Failures by [@danny-avila](https://github.com/danny-avila) in [#15671](https://github.com/LibreChat-AI/LibreChat/pull/15671) +- ๐Ÿซณ fix: Let the Composer Column Shrink Below a Queued Row's Text by [@danny-avila](https://github.com/danny-avila) in [#15665](https://github.com/LibreChat-AI/LibreChat/pull/15665) +- ๐Ÿชถ fix: Preserve Preset Prompt Insertion Behavior by [@danny-avila](https://github.com/danny-avila) in [#15672](https://github.com/LibreChat-AI/LibreChat/pull/15672) +- ๐ŸŽŸ๏ธ fix: Preserve OpenID Logout Token Hints by [@aeyeopsdev](https://github.com/aeyeopsdev) in [#15653](https://github.com/LibreChat-AI/LibreChat/pull/15653) +- ๐Ÿ  fix: Route Standalone File Writes to BYOM Workers by [@danny-avila](https://github.com/danny-avila) in [#15675](https://github.com/LibreChat-AI/LibreChat/pull/15675) +- ๐Ÿ“ฃ fix: Surface Skill Creation Feedback by [@aeyeopsdev](https://github.com/aeyeopsdev) in [#15649](https://github.com/LibreChat-AI/LibreChat/pull/15649) +- ๐Ÿ›ค๏ธ fix: Align File Search Citation Paths by [@aeyeopsdev](https://github.com/aeyeopsdev) in [#15650](https://github.com/LibreChat-AI/LibreChat/pull/15650) +- ๐Ÿซธ fix: Stop OAuth Sign-In After Binding Failure by [@aeyeopsdev](https://github.com/aeyeopsdev) in [#15652](https://github.com/LibreChat-AI/LibreChat/pull/15652) +- ๐Ÿ•น fix: Keep Composer Focus Off Clicked Controls So Menus Can Close by [@danny-avila](https://github.com/danny-avila) in [#15669](https://github.com/LibreChat-AI/LibreChat/pull/15669) +- ๐Ÿซ  fix: Surface Bedrock Content Filter Refusals by [@aeyeopsdev](https://github.com/aeyeopsdev) in [#15647](https://github.com/LibreChat-AI/LibreChat/pull/15647) +- ๐Ÿ“ fix: Pin Persisted Saves to Their Tenant by [@danny-avila](https://github.com/danny-avila) in [#15582](https://github.com/LibreChat-AI/LibreChat/pull/15582) +- ๐Ÿซ™ fix: Surface Document Extraction Failures by [@aeyeopsdev](https://github.com/aeyeopsdev) in [#15651](https://github.com/LibreChat-AI/LibreChat/pull/15651) +- ๐Ÿงซ fix: Verify Early Stream Recovery by [@danny-avila](https://github.com/danny-avila) in [#15676](https://github.com/LibreChat-AI/LibreChat/pull/15676) +- ๐Ÿงบ fix: Contain Conversation Import and Upload Failures by [@dustinhealy](https://github.com/dustinhealy) in [#15681](https://github.com/LibreChat-AI/LibreChat/pull/15681) +- ๐Ÿ›ฌ fix: Land Early Steers on the Live Placeholder by [@danny-avila](https://github.com/danny-avila) in [#15692](https://github.com/LibreChat-AI/LibreChat/pull/15692) +- ๐Ÿชฃ fix: Decode S3 Object Keys from URLs by [@SGudbrandsson](https://github.com/SGudbrandsson) in [#15426](https://github.com/LibreChat-AI/LibreChat/pull/15426) +- ๐Ÿฅฝ fix: Stop the DocumentDB Guard Flagging Mongoose's Document `$where` by [@danny-avila](https://github.com/danny-avila) in [#15686](https://github.com/LibreChat-AI/LibreChat/pull/15686) +- ๐Ÿšง fix: Gate File Search and Run Code by Role by [@danny-avila](https://github.com/danny-avila) in [#15691](https://github.com/LibreChat-AI/LibreChat/pull/15691) +- ๐Ÿงบ fix: Skip Priming Denied File Search Resources by [@danny-avila](https://github.com/danny-avila) in [#15699](https://github.com/LibreChat-AI/LibreChat/pull/15699) +- ๐Ÿงฒ fix: Coalesce and Bound Code Environment Status Polls by [@danny-avila](https://github.com/danny-avila) in [#15701](https://github.com/LibreChat-AI/LibreChat/pull/15701) +- ๐Ÿฐ fix: Enforce Platform Grants for Code Workers by [@danny-avila](https://github.com/danny-avila) in [#15700](https://github.com/LibreChat-AI/LibreChat/pull/15700) +- ๐ŸŽ’ fix: Bound Agent Attachment Context by [@danny-avila](https://github.com/danny-avila) in [#15694](https://github.com/LibreChat-AI/LibreChat/pull/15694) +- ๐Ÿซง fix: Retire Cancelled MCP OAuth State by [@danny-avila](https://github.com/danny-avila) in [#15702](https://github.com/LibreChat-AI/LibreChat/pull/15702) +- ๐Ÿงฑ fix: Close MCP OAuth Teardown Races by [@danny-avila](https://github.com/danny-avila) in [#15716](https://github.com/LibreChat-AI/LibreChat/pull/15716) +- ๐Ÿชซ fix: Recharge Direct OpenID MCP Bearer Sessions by [@danny-avila](https://github.com/danny-avila) in [#15704](https://github.com/LibreChat-AI/LibreChat/pull/15704) +- ๐Ÿชฌ fix: Fence Agent Checkpoint Ownership and Cleanup Recovery by [@dustinhealy](https://github.com/dustinhealy) in [#15680](https://github.com/LibreChat-AI/LibreChat/pull/15680) +- ๐Ÿ  fix: Preserve Stateful Deployment Default by [@danny-avila](https://github.com/danny-avila) in [#15719](https://github.com/LibreChat-AI/LibreChat/pull/15719) +- ๐Ÿฉป fix: Preserve Workspace Tool HTTP Diagnostics by [@danny-avila](https://github.com/danny-avila) in [#15723](https://github.com/LibreChat-AI/LibreChat/pull/15723) +- ๐Ÿชน fix: Attach Ready OAuth MCP Servers With Empty Catalogs by [@danny-avila](https://github.com/danny-avila) in [#15727](https://github.com/LibreChat-AI/LibreChat/pull/15727) +- โ›” fix: Bind Tool Approvals to Generation Scope by [@danny-avila](https://github.com/danny-avila) in [#15724](https://github.com/LibreChat-AI/LibreChat/pull/15724) +- ๐Ÿฉผ fix: Keep OpenRouter Category Override Test Type-Safe by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16229](https://github.com/LibreChat-AI/LibreChat/pull/16229) +- ๐Ÿ” fix: Enable File Search When Attaching From the Files Panel by [@jtodaroii](https://github.com/jtodaroii) in [#16223](https://github.com/LibreChat-AI/LibreChat/pull/16223) +- ๐ŸŽฝ fix: Give Each Streamed Tool Call a Stable Outward Index by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16209](https://github.com/LibreChat-AI/LibreChat/pull/16209) +- ๐ŸŽฐ fix: Show Live Tool Combo Multipliers by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16202](https://github.com/LibreChat-AI/LibreChat/pull/16202) +- โ›ฒ fix: Prevent Agent Model Stream Idle Timeouts by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16201](https://github.com/LibreChat-AI/LibreChat/pull/16201) +- ๐Ÿฅซ fix: Normalize Legacy MCP Header Maps on Cached Reads by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16200](https://github.com/LibreChat-AI/LibreChat/pull/16200) +- ๐Ÿซฅ fix: Preserve Absent MCP Header Maps Across Database Saves by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16194](https://github.com/LibreChat-AI/LibreChat/pull/16194) +- ๐Ÿด fix: Split Combined Bit Updates in ACL Permission Writes by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16172](https://github.com/LibreChat-AI/LibreChat/pull/16172) +- ๐Ÿšฅ fix: Preserve Insights With Guarded ACL Role Updates by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16170](https://github.com/LibreChat-AI/LibreChat/pull/16170) +- ๐Ÿฆ fix: Require Named Helm Credential Secrets by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16175](https://github.com/LibreChat-AI/LibreChat/pull/16175) +- ๐ŸŽˆ fix: Fill Reasoning Previews Before Throttling by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16178](https://github.com/LibreChat-AI/LibreChat/pull/16178) +- โน๏ธ fix: Cancel Stale Throttled Scroll Callbacks by [@minwookshin](https://github.com/minwookshin) in [#16167](https://github.com/LibreChat-AI/LibreChat/pull/16167) +- ๐Ÿงป fix: Unblock Conversation Deletion After Queued Turns by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16174](https://github.com/LibreChat-AI/LibreChat/pull/16174) +- ๐Ÿ”ค fix: Validate MIME Patterns With the Active Regex Engine by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16177](https://github.com/LibreChat-AI/LibreChat/pull/16177) +- ๐Ÿ“ฏ fix: Explain Tenant Index Migration on Startup Conflicts by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16176](https://github.com/LibreChat-AI/LibreChat/pull/16176) +- ๐Ÿ“ fix: Preserve Chat Drafts Across Navigation and Clearing by [@danny-avila](https://github.com/danny-avila) in [#16161](https://github.com/LibreChat-AI/LibreChat/pull/16161) +- ๐Ÿ”‚ fix: Reuse Redis Caches Without Changing TTLs by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16154](https://github.com/LibreChat-AI/LibreChat/pull/16154) +- ๐Ÿช‘ fix: Preserve Tool Pane Choices Through Response Finalization by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16152](https://github.com/LibreChat-AI/LibreChat/pull/16152) +- โœ’๏ธ fix: Persist a Generated Title Before the Turn Ends by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16137](https://github.com/LibreChat-AI/LibreChat/pull/16137) +- ๐ŸŒ fix: Stop Painting the Closed Mobile Drawer by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16127](https://github.com/LibreChat-AI/LibreChat/pull/16127) +- ๐Ÿ“  fix: Preview SVG Artifacts From Their Edited Source by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16123](https://github.com/LibreChat-AI/LibreChat/pull/16123) +- ๐Ÿ–ผ๏ธ fix: Resolve Pinned Model Icons from Endpoint Config by [@jtodaroii](https://github.com/jtodaroii) in [#16089](https://github.com/LibreChat-AI/LibreChat/pull/16089) +- โœ’๏ธ fix: Render Code in the Bundled Monospace Font by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16146](https://github.com/LibreChat-AI/LibreChat/pull/16146) +- ๐Ÿซง fix: Stop the Live Activity Row From Flashing Open on Code Calls and Thoughts by [@danny-avila](https://github.com/danny-avila) in [#16145](https://github.com/LibreChat-AI/LibreChat/pull/16145) +- ๐Ÿšท fix: Isolate Jina Credential Provenance by [@danny-avila](https://github.com/danny-avila) in [#16134](https://github.com/LibreChat-AI/LibreChat/pull/16134) +- ๐Ÿชข fix: Bind Preserved MCP API Keys to Server Configuration by [@danny-avila](https://github.com/danny-avila) in [#16136](https://github.com/LibreChat-AI/LibreChat/pull/16136) +- โš“ fix: Keep a Resumed Compaction Anchored to the Turn It Summarizes by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16037](https://github.com/LibreChat-AI/LibreChat/pull/16037) +- ๐Ÿ•ณ๏ธ fix: Repair Legacy Meili Cleanup Index by [@danny-avila](https://github.com/danny-avila) in [#16133](https://github.com/LibreChat-AI/LibreChat/pull/16133) +- โ˜” fix: Preserve MCP Authorization During Token Endpoint Outages by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16126](https://github.com/LibreChat-AI/LibreChat/pull/16126) +- ๐ŸŽฝ fix: Hand Same-Batch Code Calls the Files a Skill Just Loaded by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16115](https://github.com/LibreChat-AI/LibreChat/pull/16115) +- ๐Ÿฅข fix: Exclude Prompt Inputs From Terminal Events by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16112](https://github.com/LibreChat-AI/LibreChat/pull/16112) +- ๐Ÿฅ– fix: Refresh MCP Credentials That Arrive Already Expired by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16111](https://github.com/LibreChat-AI/LibreChat/pull/16111) +- ๐Ÿงบ fix: Bound Background Completion Batches by [@danny-avila](https://github.com/danny-avila) in [#16102](https://github.com/LibreChat-AI/LibreChat/pull/16102) +- ๐Ÿ“ฌ fix: Persist Background Results Before Parent Rows by [@danny-avila](https://github.com/danny-avila) in [#16101](https://github.com/LibreChat-AI/LibreChat/pull/16101) +- ๐Ÿ“ฌ fix: Deliver Same-Turn Background Results by [@danny-avila](https://github.com/danny-avila) in [#16097](https://github.com/LibreChat-AI/LibreChat/pull/16097) +- ๐Ÿ”‘ fix: Stringify Ban Cache Keys When Redis Is Off by [@gokay-ai](https://github.com/gokay-ai) in [#16039](https://github.com/LibreChat-AI/LibreChat/pull/16039) +- ๐Ÿ—‚๏ธ fix: Keep a Running Attachment Chat in the Sidebar by [@danny-avila](https://github.com/danny-avila) in [#16104](https://github.com/LibreChat-AI/LibreChat/pull/16104) +- ๐Ÿฅพ fix: Define Code Execution Persistence Boundaries by [@danny-avila](https://github.com/danny-avila) in [#16099](https://github.com/LibreChat-AI/LibreChat/pull/16099) +- ๐Ÿ“„ fix: Send Textual Documents to Claude Through Gateways as Text by [@mihidumh](https://github.com/mihidumh) in [#16055](https://github.com/LibreChat-AI/LibreChat/pull/16055) +- ๐ŸŽฑ fix: Stop Sealing a Code Environment Decision a Chat Never Made by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16056](https://github.com/LibreChat-AI/LibreChat/pull/16056) +- ๐Ÿซ— fix: Roll Back Incomplete Skill Archive Imports by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16052](https://github.com/LibreChat-AI/LibreChat/pull/16052) +- ๐Ÿ“ค fix(langfuse): support documented media upload types by [@upman](https://github.com/upman) in [#16079](https://github.com/LibreChat-AI/LibreChat/pull/16079) +- ๐ŸŽŸ๏ธ fix: Preserve BYOM Tool Calls Through Capacity Windows by [@danny-avila](https://github.com/danny-avila) in [#16060](https://github.com/LibreChat-AI/LibreChat/pull/16060) +- ๐Ÿ“ฑ fix: Open Sign-In and External Links From iOS Home-Screen Apps by [@danny-avila](https://github.com/danny-avila) in [#16077](https://github.com/LibreChat-AI/LibreChat/pull/16077) +- ๐Ÿ—พ fix: Route Cross-Region Attachments Through CloudFront by [@upman](https://github.com/upman) in [#16082](https://github.com/LibreChat-AI/LibreChat/pull/16082) +- ๐Ÿ“ฑ fix: Fit the Tool Library and Skills Pickers to Small Screens by [@berry-13](https://github.com/berry-13) in [#16067](https://github.com/LibreChat-AI/LibreChat/pull/16067) +- ๐Ÿ”‘ fix: Ask for MCP Sign-In When a Server Rejects Refreshed Tokens by [@danny-avila](https://github.com/danny-avila) in [#16075](https://github.com/LibreChat-AI/LibreChat/pull/16075) +- ๐Ÿ”“ fix: Stop Code Outputs and Tool-Routed Spreadsheets From Locking Threads by [@danny-avila](https://github.com/danny-avila) in [#16058](https://github.com/LibreChat-AI/LibreChat/pull/16058) +- ๐Ÿฅก fix: Delete Storage and Embeddings With Owned Agent Files by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16007](https://github.com/LibreChat-AI/LibreChat/pull/16007) +- ๐Ÿ‘› fix: Drop Unread Credentials From MCP Domain Validation by [@SpectralOne](https://github.com/SpectralOne) in [#16035](https://github.com/LibreChat-AI/LibreChat/pull/16035) +- ๐Ÿ—ผ fix: Serialize MCP OAuth Token Refresh Across Replicas by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15993](https://github.com/LibreChat-AI/LibreChat/pull/15993) +- ๐Ÿ—ฃ๏ธ fix: Keep Provider Error Text on Unclassified Agent Failures by [@berry-13](https://github.com/berry-13) in [#16034](https://github.com/LibreChat-AI/LibreChat/pull/16034) +- ๐ŸŒ fix(locales): correct English setting descriptions by [@simpleqt](https://github.com/simpleqt) in [#16023](https://github.com/LibreChat-AI/LibreChat/pull/16023) +- ๐Ÿ“ญ fix: Deliver Attachment Text Until a File Tool Holds It by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16027](https://github.com/LibreChat-AI/LibreChat/pull/16027) +- ๐Ÿ“– fix: Verify Agents OpenAPI contracts and disable external reporting by [@dustinhealy](https://github.com/dustinhealy) in [#16028](https://github.com/LibreChat-AI/LibreChat/pull/16028) +- ๐Ÿ–จ๏ธ fix: Regenerate the Agents OpenAPI Spec With `repositoryInstructions` by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16029](https://github.com/LibreChat-AI/LibreChat/pull/16029) +- ๐Ÿ›๏ธ fix: Resolve Global Access Roles for Tenant Owner Grants by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15986](https://github.com/LibreChat-AI/LibreChat/pull/15986) +- ๐Ÿช‘ fix: Explain Workspace Capacity Timeouts by [@danny-avila](https://github.com/danny-avila) in [#16016](https://github.com/LibreChat-AI/LibreChat/pull/16016) +- ๐Ÿ”… fix: Theme the Tool Approval Decision Fields by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16014](https://github.com/LibreChat-AI/LibreChat/pull/16014) +- ๐Ÿ›Ž๏ธ fix: Route Background Tool Handoffs by [@danny-avila](https://github.com/danny-avila) in [#15990](https://github.com/LibreChat-AI/LibreChat/pull/15990) +- ๐Ÿช’ fix: Strip Cache-Bust Suffixes From Every Local File Read by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15991](https://github.com/LibreChat-AI/LibreChat/pull/15991) +- ๐ŸŽš๏ธ fix: Allow Opting Out of the MCP OAuth `resource` Parameter by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15982](https://github.com/LibreChat-AI/LibreChat/pull/15982) +- โ›“๏ธ fix: Bind Programmatic Bash to Selected Workspaces by [@danny-avila](https://github.com/danny-avila) in [#15992](https://github.com/LibreChat-AI/LibreChat/pull/15992) +- โฎ๏ธ fix: Keep the Last Keystrokes When a Run Finishes by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15987](https://github.com/LibreChat-AI/LibreChat/pull/15987) +- ๐Ÿ““ fix: Keep Typed Text When Starting a New Chat by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15985](https://github.com/LibreChat-AI/LibreChat/pull/15985) +- ๐Ÿงฆ fix: Restore OpenID Refresh After the Session Store TTL Expires by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15983](https://github.com/LibreChat-AI/LibreChat/pull/15983) +- ๐Ÿ‘† fix: Thumb-Sized Send Button on Touch Devices by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15979](https://github.com/LibreChat-AI/LibreChat/pull/15979) +- ๐Ÿชƒ fix: Remember the Last Code Approval Mode by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15973](https://github.com/LibreChat-AI/LibreChat/pull/15973) +- ๐Ÿงฑ fix: Keep Streamed Content When a Turn Fails by [@danny-avila](https://github.com/danny-avila) in [#15961](https://github.com/LibreChat-AI/LibreChat/pull/15961) +- ๐Ÿฏ fix: Stop Approval Pauses From Unsealing Code Environments by [@danny-avila](https://github.com/danny-avila) in [#15963](https://github.com/LibreChat-AI/LibreChat/pull/15963) +- ๐Ÿซ– fix: Skip Blank RAG Queries Before Embedding by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16231](https://github.com/LibreChat-AI/LibreChat/pull/16231) +- ๐Ÿชš fix: Restore Measured Width to Virtualized Model Lists by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16252](https://github.com/LibreChat-AI/LibreChat/pull/16252) +- ๐Ÿš‰ fix: Keep Queue Controls with the Starting Turn by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16268](https://github.com/LibreChat-AI/LibreChat/pull/16268) +- ๐Ÿ”˜ fix: Sync Workspace Choices When Chats Start by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16266](https://github.com/LibreChat-AI/LibreChat/pull/16266) +- ๐Ÿšธ fix: Scope Queued-Turn Deletion to Selected Conversations by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16270](https://github.com/LibreChat-AI/LibreChat/pull/16270) +- ๐Ÿ“ fix: Constrain the Agent Selector to 480px and 10 Own Agents by [@berry-13](https://github.com/berry-13) in [#16256](https://github.com/LibreChat-AI/LibreChat/pull/16256) +- ๐Ÿค– fix: Accept GitHub App bot commit identities by [@danny-avila](https://github.com/danny-avila) in [#16253](https://github.com/LibreChat-AI/LibreChat/pull/16253) +- ๐ŸŽˆ fix: Restore Bedrock GPT Context for Long Prompts by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16284](https://github.com/LibreChat-AI/LibreChat/pull/16284) +- ๐Ÿฆบ fix: Skip Redundant MCP OAuth Probes and Teardown Cancellations by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16298](https://github.com/LibreChat-AI/LibreChat/pull/16298) +- ๐Ÿช fix: Keep Workspace Discovery Reactive by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16296](https://github.com/LibreChat-AI/LibreChat/pull/16296) +- ๐Ÿชด fix: Surface Persistent Memory Before First Save by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16301](https://github.com/LibreChat-AI/LibreChat/pull/16301) +- ๐Ÿฅž fix: Keep Tool Glyphs Behind Approval Reviews by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16307](https://github.com/LibreChat-AI/LibreChat/pull/16307) +- ๐Ÿฆ‰ fix: Quiet Idle Subagent Discovery While Preserving Child Wakeups by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16308](https://github.com/LibreChat-AI/LibreChat/pull/16308) +- ๐Ÿชš fix: Count Large Prompts in Bounded Tokenizer Chunks by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16305](https://github.com/LibreChat-AI/LibreChat/pull/16305) +- ๐Ÿช€ fix: Preserve Coding Approval Mode on Background Returns by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16322](https://github.com/LibreChat-AI/LibreChat/pull/16322) +- ๐Ÿข fix: Back Off Waiting Completion Wake-ups and Keep Their Trace Out of Requests by [@danny-avila](https://github.com/danny-avila) in [#16349](https://github.com/LibreChat-AI/LibreChat/pull/16349) +- โšก fix: Deliver Waiting Completion Wake-ups the Moment They Are Ready by [@danny-avila](https://github.com/danny-avila) in [#16339](https://github.com/LibreChat-AI/LibreChat/pull/16339) +- ๐Ÿ›๏ธ fix: Discover Managed Agents in Marketplace Search by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16324](https://github.com/LibreChat-AI/LibreChat/pull/16324) +- ๐Ÿ“ฃ fix: Surface MCP Credential Failures During Tool Loading by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16323](https://github.com/LibreChat-AI/LibreChat/pull/16323) +- ๐Ÿงท fix: Wait for Long Dispatch Turns Before Giving Up Background Code Results by [@danny-avila](https://github.com/danny-avila) in [#16345](https://github.com/LibreChat-AI/LibreChat/pull/16345) +- ๐Ÿ“ฎ fix: Count Undelivered Background Results as Outstanding by [@danny-avila](https://github.com/danny-avila) in [#16343](https://github.com/LibreChat-AI/LibreChat/pull/16343) +- ๐Ÿšฅ fix: Pause Rejected Steer Recoveries by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16306](https://github.com/LibreChat-AI/LibreChat/pull/16306) +- ๐Ÿฑ fix: Carry Coding Approval Mode With Queued Turns by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16326](https://github.com/LibreChat-AI/LibreChat/pull/16326) +- ๐Ÿงท fix: Anchor Background Results Onto Tool Calls a Resumed Turn Saved Without Step IDs by [@danny-avila](https://github.com/danny-avila) in [#16353](https://github.com/LibreChat-AI/LibreChat/pull/16353) +- ๐Ÿณ fix: Fail the Docker Build When the Frontend Build Fails by [@danny-avila](https://github.com/danny-avila) in [#16388](https://github.com/LibreChat-AI/LibreChat/pull/16388) +- ๐Ÿง— fix: Keep Manual Compactions on the Active Branch by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16386](https://github.com/LibreChat-AI/LibreChat/pull/16386) +- ๐Ÿ“ฌ fix: Show Background Results Still Waiting for the Agent by [@danny-avila](https://github.com/danny-avila) in [#16363](https://github.com/LibreChat-AI/LibreChat/pull/16363) +- ๐Ÿ›ƒ fix: Project Only Accepted Agents API Tool Calls by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16384](https://github.com/LibreChat-AI/LibreChat/pull/16384) +- ๐Ÿงจ fix: Reject Invalid AES Credentials Before Startup by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16402](https://github.com/LibreChat-AI/LibreChat/pull/16402) +- ๐Ÿšž fix: Route Accepted Tool Calls Through the Live Agents API by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16401](https://github.com/LibreChat-AI/LibreChat/pull/16401) +- ๐Ÿ›ฌ fix: Settle Background Tool Results Before the Server Shuts Down by [@danny-avila](https://github.com/danny-avila) in [#16365](https://github.com/LibreChat-AI/LibreChat/pull/16365) +- ๐Ÿซธ fix: Right-Align User Message Images by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16404](https://github.com/LibreChat-AI/LibreChat/pull/16404) +- ๐Ÿ’ฌ fix: Show a Thought on the Live Header Only as Finished Sentences by [@danny-avila](https://github.com/danny-avila) in [#16392](https://github.com/LibreChat-AI/LibreChat/pull/16392) +- ๐Ÿท๏ธ fix: Title an Open Live Card by Its Newest Label, Not a Line of Its Text by [@danny-avila](https://github.com/danny-avila) in [#16393](https://github.com/LibreChat-AI/LibreChat/pull/16393) +- ๐Ÿซ‚ fix: Keep Legacy Background Results Until Durable by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16405](https://github.com/LibreChat-AI/LibreChat/pull/16405) +- ๐Ÿ–Š๏ธ fix: Persist Skill Subfile Edits by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16362](https://github.com/LibreChat-AI/LibreChat/pull/16362) +- ๐Ÿ—‚๏ธ fix: Stop Telling Attached Workspaces That Uploads Are at /mnt/data by [@danny-avila](https://github.com/danny-avila) in [#16389](https://github.com/LibreChat-AI/LibreChat/pull/16389) +- ๐Ÿšฉ fix: Preserve Client Tool Call Finish Reason After Text by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16408](https://github.com/LibreChat-AI/LibreChat/pull/16408) +- ๐Ÿช fix: Prioritize Running Chats in Sidebar History by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16406](https://github.com/LibreChat-AI/LibreChat/pull/16406) +- ๐Ÿบ fix: Preserve Last Good Config on Reload by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16383](https://github.com/LibreChat-AI/LibreChat/pull/16383) +- ๐Ÿ“ fix: Keep the Context Gauge's Used Count Above Its Own Breakdown by [@danny-avila](https://github.com/danny-avila) in [#16368](https://github.com/LibreChat-AI/LibreChat/pull/16368) +- ๐Ÿท๏ธ fix: Title an Open Live Card Only by a Generated Label by [@danny-avila](https://github.com/danny-avila) in [#16412](https://github.com/LibreChat-AI/LibreChat/pull/16412) +- ๐Ÿซ– fix: Keep Sidebar Search Results Visible During Refetch by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16411](https://github.com/LibreChat-AI/LibreChat/pull/16411) +- ๐Ÿ“ก fix: Explain Model Streams That Die Mid-Response by [@danny-avila](https://github.com/danny-avila) in [#16415](https://github.com/LibreChat-AI/LibreChat/pull/16415) +- ๐Ÿฅง fix: Reserve Execution Time in Workspace Admission by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16421](https://github.com/LibreChat-AI/LibreChat/pull/16421) +- ๐Ÿ“ด fix: Surface Missing Scheduled OBO Authorization by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16416](https://github.com/LibreChat-AI/LibreChat/pull/16416) +- ๐Ÿ—„๏ธ fix: Fall Back to In-Memory Storage When Web Storage Is Denied by [@berry-13](https://github.com/berry-13) in [#16431](https://github.com/LibreChat-AI/LibreChat/pull/16431) +- ๐Ÿฅค fix: Keep Pending Code Steers Within the Composer by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16446](https://github.com/LibreChat-AI/LibreChat/pull/16446) +- ๐Ÿงป fix: Clear Stale Draft Text After Sending by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16444](https://github.com/LibreChat-AI/LibreChat/pull/16444) +- ๐ŸŽš๏ธ fix: Apply librechat.yaml Rate Limits to Route Limiters by [@berry-13](https://github.com/berry-13) in [#16432](https://github.com/LibreChat-AI/LibreChat/pull/16432) +- ๐Ÿ”’ fix: Guard 2FA Deep-Link Redirects Against Blocked Session Storage by [@berry-13](https://github.com/berry-13) in [#16439](https://github.com/LibreChat-AI/LibreChat/pull/16439) +- ๐Ÿ” fix: Retry Code API Rate Limits That Reject Before a Workspace Call Starts by [@danny-avila](https://github.com/danny-avila) in [#16453](https://github.com/LibreChat-AI/LibreChat/pull/16453) +- ๐Ÿ”ฒ fix: Anchor Quote Popup to Visible Selection by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16458](https://github.com/LibreChat-AI/LibreChat/pull/16458) +- ๐Ÿ“ถ fix: Ride Out Transient Worker Status Failures Within the Worker's Lease by [@danny-avila](https://github.com/danny-avila) in [#16463](https://github.com/LibreChat-AI/LibreChat/pull/16463) +- ๐Ÿงพ fix: Validate Principal Config Overrides Against configSchema by [@berry-13](https://github.com/berry-13) in [#16433](https://github.com/LibreChat-AI/LibreChat/pull/16433) +- fix: Enforce Tool Approval Policy on Headless Agent Runs by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16467](https://github.com/LibreChat-AI/LibreChat/pull/16467) +- ๐Ÿ”€ fix: Resolve SplitText Direction From Its Own Text Under RTL by [@shukiv](https://github.com/shukiv) in [#16454](https://github.com/LibreChat-AI/LibreChat/pull/16454) + +- ๐Ÿ”ฉ fix: Raise Vulnerable Dependency Floors by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16474](https://github.com/LibreChat-AI/LibreChat/pull/16474) +- โฑ๏ธ fix: Fit Workspace Command Timeouts Inside the Configured Request Budget by [@danny-avila](https://github.com/danny-avila) in [#16464](https://github.com/LibreChat-AI/LibreChat/pull/16464) +- ๐Ÿงง fix: Redeem Admin OAuth Codes Only Once by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16513](https://github.com/LibreChat-AI/LibreChat/pull/16513) +- ๐Ÿซธ fix: Keep Historical Artifacts Closed During Regeneration by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16511](https://github.com/LibreChat-AI/LibreChat/pull/16511) +- ๐Ÿชธ fix: Restore File Search on Later Agent Turns by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16516](https://github.com/LibreChat-AI/LibreChat/pull/16516) +- โ†ช๏ธ fix: Block Unsafe MCP OAuth Redirects and Private IPs by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16514](https://github.com/LibreChat-AI/LibreChat/pull/16514) +- ๐ŸŽจ fix: Color Pressed MCP Tool Option Toggles With Their Series Role by [@berry-13](https://github.com/berry-13) in [#16524](https://github.com/LibreChat-AI/LibreChat/pull/16524) +- ๐Ÿ›ถ fix: Keep Trigger Bans Off Shared Loopback IPs by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16535](https://github.com/LibreChat-AI/LibreChat/pull/16535) +- ๐Ÿฆซ fix: Bound Error Text Before URL Redaction by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16532](https://github.com/LibreChat-AI/LibreChat/pull/16532) +- ๐Ÿ‘ซ fix: Keep Firecrawl and SearXNG Credentials Paired by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16538](https://github.com/LibreChat-AI/LibreChat/pull/16538) +- ๐Ÿง˜ fix: Keep Prose Mounted While Activity Labels Update by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16531](https://github.com/LibreChat-AI/LibreChat/pull/16531) +- ๐Ÿฆฎ fix: Bind Per-User MCP API Keys to Their Destinations by [@lia-by-librechat[bot]](https://github.com/lia-by-librechat[bot]) in [#16536](https://github.com/LibreChat-AI/LibreChat/pull/16536) + +### ๐Ÿ”ง Refactoring and Performance + +- ๐Ÿ“œ style: Scroll the Sidebar as One Surface by [@berry-13](https://github.com/berry-13) in [#15914](https://github.com/LibreChat-AI/LibreChat/pull/15914) +- ๐Ÿงท style: Sidebar Row Controls, Pinned Unpin Badge and Drag Rules by [@berry-13](https://github.com/berry-13) in [#15870](https://github.com/LibreChat-AI/LibreChat/pull/15870) +- ๐Ÿ”ก style: Size Image Tool Labels Like Every Other Activity Row by [@danny-avila](https://github.com/danny-avila) in [#15898](https://github.com/LibreChat-AI/LibreChat/pull/15898) +- ๐ŸŽจ style: Color Image Tool Labels With the Activity Rows' Secondary Role by [@danny-avila](https://github.com/danny-avila) in [#15900](https://github.com/LibreChat-AI/LibreChat/pull/15900) +- ๐Ÿš„ perf: Linearize Conversation Import Lineage by [@danny-avila](https://github.com/danny-avila) in [#15881](https://github.com/LibreChat-AI/LibreChat/pull/15881) +- ๐Ÿงฝ style: Composer, Welcome Screen and Context Panel Polish by [@berry-13](https://github.com/berry-13) in [#15838](https://github.com/LibreChat-AI/LibreChat/pull/15838) +- ๐Ÿ›ซ refactor: Promote Generation Protocol V2 Automatically by [@danny-avila](https://github.com/danny-avila) in [#15324](https://github.com/LibreChat-AI/LibreChat/pull/15324) +- ๐ŸŽ  refactor: Route Every Event Actor Turn Through One Lifecycle by [@danny-avila](https://github.com/danny-avila) in [#15325](https://github.com/LibreChat-AI/LibreChat/pull/15325) +- ๐Ÿชฉ style: Shimmer Live Reasoning Labels and Timers by [@danny-avila](https://github.com/danny-avila) in [#15431](https://github.com/LibreChat-AI/LibreChat/pull/15431) +- โœ”๏ธ style: Anchor the Applied Steer Receipt and Name Tool Calls in Its Interrupt Copy by [@danny-avila](https://github.com/danny-avila) in [#15450](https://github.com/LibreChat-AI/LibreChat/pull/15450) +- ๐Ÿงต refactor: Give the Subagent Panel One Composer and Main Chat's Metrics by [@danny-avila](https://github.com/danny-avila) in [#15436](https://github.com/LibreChat-AI/LibreChat/pull/15436) +- ๐Ÿ† perf: Build Dev Branch Images on Native ARM and Cheapen Asset Brotli by [@danny-avila](https://github.com/danny-avila) in [#15441](https://github.com/LibreChat-AI/LibreChat/pull/15441) +- โ™ป๏ธ refactor: Compute Context Gauge Client-Side, Drop Projection Endpoint by [@danny-avila](https://github.com/danny-avila) in [#13953](https://github.com/LibreChat-AI/LibreChat/pull/13953) +- ๐Ÿชฃ refactor: Rate-Limit Token Routes and Cap Remote File Downloads by [@danny-avila](https://github.com/danny-avila) in [#13978](https://github.com/LibreChat-AI/LibreChat/pull/13978) +- ๐Ÿฆฅ perf: Lazy-Load Agent Version History in Editor by [@danny-avila](https://github.com/danny-avila) in [#13977](https://github.com/LibreChat-AI/LibreChat/pull/13977) +- ๐Ÿ›— perf: Fetch Pinned Agents Directly Past the Global Agents Map by [@danny-avila](https://github.com/danny-avila) in [#13972](https://github.com/LibreChat-AI/LibreChat/pull/13972) +- โšก perf: memoize FavoritesList and BookmarkNav to prevent re-renders during streaming by [@berry-13](https://github.com/berry-13) in [#14011](https://github.com/LibreChat-AI/LibreChat/pull/14011) +- ๐Ÿ—บ๏ธ refactor: Light Up In-Viewport Ribs at Rest in Message Nav by [@danny-avila](https://github.com/danny-avila) in [#14041](https://github.com/LibreChat-AI/LibreChat/pull/14041) +- โšก perf: Minimize group membership query in principal resolution by [@danny-avila](https://github.com/danny-avila) in [#14055](https://github.com/LibreChat-AI/LibreChat/pull/14055) +- โšก perf: Skip Role Route Capability Probe for Own and Default Roles by [@danny-avila](https://github.com/danny-avila) in [#14073](https://github.com/LibreChat-AI/LibreChat/pull/14073) +- ๐Ÿชญ refactor: safe structured failure logging for langfuse fanout gateway by [@upman](https://github.com/upman) in [#14050](https://github.com/LibreChat-AI/LibreChat/pull/14050) +- ๐Ÿ“‰ perf: Skip Redundant Permission Queries on MCP Servers List by [@danny-avila](https://github.com/danny-avila) in [#14077](https://github.com/LibreChat-AI/LibreChat/pull/14077) +- โšก perf: Persist HITL checkpoints only on pause (lazy checkpointer) by [@danny-avila](https://github.com/danny-avila) in [#14024](https://github.com/LibreChat-AI/LibreChat/pull/14024) +- ๐Ÿ—ƒ๏ธ perf: Cache Group Memberships for ACL Principal Resolution by [@danny-avila](https://github.com/danny-avila) in [#14075](https://github.com/LibreChat-AI/LibreChat/pull/14075) +- โš™๏ธ perf: reduce first-load MongoDB round trips by [@upman](https://github.com/upman) in [#14101](https://github.com/LibreChat-AI/LibreChat/pull/14101) +- ๐ŸŽฏ style: Center Scroll-to-Bottom Rib in Message Nav Rail by [@danny-avila](https://github.com/danny-avila) in [#14151](https://github.com/LibreChat-AI/LibreChat/pull/14151) +- ๐Ÿ“‰ perf: cache OpenID JWT user documents by [@upman](https://github.com/upman) in [#14187](https://github.com/LibreChat-AI/LibreChat/pull/14187) +- ๐Ÿ“‰ perf: start message queries before file map loads by [@upman](https://github.com/upman) in [#14188](https://github.com/LibreChat-AI/LibreChat/pull/14188) +- ๐Ÿชœ style: Adjust rib dimensions and button sizes in `MessageNav` by [@danny-avila](https://github.com/danny-avila) in [#14234](https://github.com/LibreChat-AI/LibreChat/pull/14234) +- ๐Ÿชœ style: Center scroll-to-bottom marker in MessageNav by [@danny-avila](https://github.com/danny-avila) in [#14238](https://github.com/LibreChat-AI/LibreChat/pull/14238) +- ๐Ÿ›ž style: Reveal the Steered "?" on Message Hover/Focus by [@danny-avila](https://github.com/danny-avila) in [#14271](https://github.com/LibreChat-AI/LibreChat/pull/14271) +- ๐Ÿ™Š refactor: Clarify Ask Question Schema Errors and Retry Guidance by [@danny-avila](https://github.com/danny-avila) in [#14279](https://github.com/LibreChat-AI/LibreChat/pull/14279) +- ๐Ÿ’ฌ refactor: Anchor In-Flight Steers Above the Composer by [@danny-avila](https://github.com/danny-avila) in [#14308](https://github.com/LibreChat-AI/LibreChat/pull/14308) +- โšก perf: Halve Per-Delta Redis Round Trips in Resumable Streams by [@danny-avila](https://github.com/danny-avila) in [#14313](https://github.com/LibreChat-AI/LibreChat/pull/14313) +- ๐Ÿงญ refactor: `web_search` Description on When To Search vs Answer Directly by [@joshbla](https://github.com/joshbla) in [#13930](https://github.com/LibreChat-AI/LibreChat/pull/13930) +- ๐Ÿงท perf: Stabilize Mutation-Dependent Memos in Chat Hooks by [@danny-avila](https://github.com/danny-avila) in [#14328](https://github.com/LibreChat-AI/LibreChat/pull/14328) +- ๐Ÿšฐ perf: Suppress No-Op Conversation Writes and Widen-Proof Atom Subscriptions by [@danny-avila](https://github.com/danny-avila) in [#14329](https://github.com/LibreChat-AI/LibreChat/pull/14329) +- ๐Ÿ” refactor: Surface primary OpenID JWT failure reason in auth failure log by [@danny-avila](https://github.com/danny-avila) in [#14346](https://github.com/LibreChat-AI/LibreChat/pull/14346) +- ๐Ÿงญ perf: Warm Conversation Switches with Single-Navigation Focus Intent by [@danny-avila](https://github.com/danny-avila) in [#14334](https://github.com/LibreChat-AI/LibreChat/pull/14334) +- ๐Ÿงน perf: Share Voices Store, Gate Timestamp Ticker, Stabilize Greeting Springs by [@danny-avila](https://github.com/danny-avila) in [#14335](https://github.com/LibreChat-AI/LibreChat/pull/14335) +- ๐ŸŽž๏ธ perf: Coalesce Streaming Delta Cache Writes Per Animation Frame by [@danny-avila](https://github.com/danny-avila) in [#14332](https://github.com/LibreChat-AI/LibreChat/pull/14332) +- ๐ŸŽ›๏ธ perf: Narrow Composer Subscriptions to Streaming State by [@danny-avila](https://github.com/danny-avila) in [#14333](https://github.com/LibreChat-AI/LibreChat/pull/14333) +- ๐Ÿงฌ perf: Memoize Message Spine and Isolate Scroll-Button State by [@danny-avila](https://github.com/danny-avila) in [#14330](https://github.com/LibreChat-AI/LibreChat/pull/14330) +- ๐ŸชŸ perf: Virtualize Search Results and Stop the Per-Query Remount by [@danny-avila](https://github.com/danny-avila) in [#14352](https://github.com/LibreChat-AI/LibreChat/pull/14352) +- โšก perf: Reduce Agent Chat Startup Latency by [@danny-avila](https://github.com/danny-avila) in [#14423](https://github.com/LibreChat-AI/LibreChat/pull/14423) +- ๐Ÿ’ฌ refactor: Raise `ask_user_question` Option Label Cap to 280 Chars by [@danny-avila](https://github.com/danny-avila) in [#14491](https://github.com/LibreChat-AI/LibreChat/pull/14491) +- ๐Ÿชข refactor: Move Agent Execution Seam Before Initialization by [@danny-avila](https://github.com/danny-avila) in [#14581](https://github.com/LibreChat-AI/LibreChat/pull/14581) +- ๐Ÿ“‰ perf: Bound Early Event Buffering for Detached Generations by [@danny-avila](https://github.com/danny-avila) in [#14612](https://github.com/LibreChat-AI/LibreChat/pull/14612) +- ๐ŸŽจ refactor: adopt the `@librechat/client` design system (semantic color tokens + component migration) by [@berry-13](https://github.com/berry-13) in [#13879](https://github.com/LibreChat-AI/LibreChat/pull/13879) +- ๐Ÿงฉ refactor: Shared UI Design System Tokens by [@danny-avila](https://github.com/danny-avila) in [#14670](https://github.com/LibreChat-AI/LibreChat/pull/14670) +- โšก perf: Agent List and Model Selector at Scale by [@berry-13](https://github.com/berry-13) in [#14601](https://github.com/LibreChat-AI/LibreChat/pull/14601) +- ๐Ÿงญ refactor: make the side panels behave the same way by [@berry-13](https://github.com/berry-13) in [#14695](https://github.com/LibreChat-AI/LibreChat/pull/14695) +- ๐Ÿซง refactor: Fading Pre-Response Dot, Legacy Cursor CSS Removed by [@danny-avila](https://github.com/danny-avila) in [#14772](https://github.com/LibreChat-AI/LibreChat/pull/14772) +- ๐Ÿงฑ refactor: Require Broad Config Management for Base Field Mutations by [@danny-avila](https://github.com/danny-avila) in [#14775](https://github.com/LibreChat-AI/LibreChat/pull/14775) +- ๐Ÿ–๏ธ refactor: Typed Console Colors and Hardened Script Helpers by [@danny-avila](https://github.com/danny-avila) in [#14778](https://github.com/LibreChat-AI/LibreChat/pull/14778) +- ๐Ÿงฑ refactor: Make Activity Phase Anchor Construction Exhaustive by [@danny-avila](https://github.com/danny-avila) in [#14805](https://github.com/LibreChat-AI/LibreChat/pull/14805) +- ๐Ÿงญ refactor: Resolve Activity Phase Position Once Per Boundary by [@danny-avila](https://github.com/danny-avila) in [#14807](https://github.com/LibreChat-AI/LibreChat/pull/14807) +- ๐Ÿงฉ refactor: Extend Step Status To Remaining Cards; Separate Cancelled From Failed by [@danny-avila](https://github.com/danny-avila) in [#14873](https://github.com/LibreChat-AI/LibreChat/pull/14873) +- ๐ŸŽฏ refactor: Infer Agents Endpoint for Model Specs Naming an Agent by [@danny-avila](https://github.com/danny-avila) in [#14889](https://github.com/LibreChat-AI/LibreChat/pull/14889) +- โšก perf: Flip the Pinned Flag Without a Full Conversation Save by [@berry-13](https://github.com/berry-13) in [#14862](https://github.com/LibreChat-AI/LibreChat/pull/14862) +- โšก perf: Optimize First Load of Large Conversations by [@danny-avila](https://github.com/danny-avila) in [#14901](https://github.com/LibreChat-AI/LibreChat/pull/14901) +- ๐Ÿท๏ธ refactor: Keep Agent Conversations From Revealing Model Labels by [@danny-avila](https://github.com/danny-avila) in [#14909](https://github.com/LibreChat-AI/LibreChat/pull/14909) +- ๐Ÿฅš refactor: Default Agents to Preferred Stateful Workspace Scope by [@danny-avila](https://github.com/danny-avila) in [#14908](https://github.com/LibreChat-AI/LibreChat/pull/14908) +- ๐Ÿ“ฑ perf: Instant Mobile View Switching + Uniform Sidebar Toggle by [@danny-avila](https://github.com/danny-avila) in [#14913](https://github.com/LibreChat-AI/LibreChat/pull/14913) +- ๐Ÿงฉ refactor: Resolve Tool-Card State Once by [@danny-avila](https://github.com/danny-avila) in [#14934](https://github.com/LibreChat-AI/LibreChat/pull/14934) +- โœจ refactor: Presets, Skills Motion and Model Selector Polish by [@berry-13](https://github.com/berry-13) in [#14953](https://github.com/LibreChat-AI/LibreChat/pull/14953) +- ๐Ÿงฒ refactor: Consolidate Claude Prompt Cache and Context Checks by [@danny-avila](https://github.com/danny-avila) in [#15008](https://github.com/LibreChat-AI/LibreChat/pull/15008) +- ๐Ÿ”Œ refactor: Extract Git Repository Adapter From Skill Sync by [@danny-avila](https://github.com/danny-avila) in [#15052](https://github.com/LibreChat-AI/LibreChat/pull/15052) +- ๐Ÿ”€ perf: Swap the Transcript With the URL on Conversation Switch by [@danny-avila](https://github.com/danny-avila) in [#15054](https://github.com/LibreChat-AI/LibreChat/pull/15054) +- โšก perf: Warm Feature Catalogs in the Background After First Paint by [@berry-13](https://github.com/berry-13) in [#15047](https://github.com/LibreChat-AI/LibreChat/pull/15047) +- ๐Ÿ‡ refactor: Decouple Meilisearch From Document Saves by [@danny-avila](https://github.com/danny-avila) in [#15109](https://github.com/LibreChat-AI/LibreChat/pull/15109) +- ๐Ÿงฎ perf: Enable Agent Context Count Reuse by [@danny-avila](https://github.com/danny-avila) in [#15130](https://github.com/LibreChat-AI/LibreChat/pull/15130) +- โšก perf: Cut Serial Round Trips and a 100ms Admission Stall from Chat Turns by [@danny-avila](https://github.com/danny-avila) in [#15138](https://github.com/LibreChat-AI/LibreChat/pull/15138) +- โšก perf: Append Saved Message Ids Instead of Rebuilding the Conversation Array by [@danny-avila](https://github.com/danny-avila) in [#15141](https://github.com/LibreChat-AI/LibreChat/pull/15141) +- โšก perf: Plain-JSON Memory Cache and an Idle Backoff for the Trigger Poll by [@danny-avila](https://github.com/danny-avila) in [#15144](https://github.com/LibreChat-AI/LibreChat/pull/15144) +- โšก perf: Build the Memory Message Copy Only When Something Reads It by [@danny-avila](https://github.com/danny-avila) in [#15164](https://github.com/LibreChat-AI/LibreChat/pull/15164) +- ๐Ÿ–ผ๏ธ refactor: Consolidate Provider Icons Into a Single Registry by [@berry-13](https://github.com/berry-13) in [#15148](https://github.com/LibreChat-AI/LibreChat/pull/15148) +- ๐Ÿ‡ perf: Bound MCP Agent Access Scan by MCP Referencing Agents and Share the Read-Through Cache by [@berry-13](https://github.com/berry-13) in [#15028](https://github.com/LibreChat-AI/LibreChat/pull/15028) +- โšก perf: Avoid Parallel Full and Paged Prompt Loading on Startup by [@berry-13](https://github.com/berry-13) in [#15031](https://github.com/LibreChat-AI/LibreChat/pull/15031) +- ๐ŸŽŸ๏ธ refactor: Require Credentials for Local Image Access by Default by [@danny-avila](https://github.com/danny-avila) in [#15252](https://github.com/LibreChat-AI/LibreChat/pull/15252) +- ๐Ÿ”‡ refactor: Quiet Framework Logging in Unit Tests by [@danny-avila](https://github.com/danny-avila) in [#15363](https://github.com/LibreChat-AI/LibreChat/pull/15363) +- ๐ŸŽป refactor: Orchestrate Agent Runs Through a Request-Free Host by [@danny-avila](https://github.com/danny-avila) in [#15366](https://github.com/LibreChat-AI/LibreChat/pull/15366) +- ๐Ÿงฌ perf: Evolve Compaction Guidance on Warm Turns by [@danny-avila](https://github.com/danny-avila) in [#15371](https://github.com/LibreChat-AI/LibreChat/pull/15371) +- ๐Ÿ•ฏ๏ธ style: Settle the Applied Steer Receipt Once the Response Is Done by [@danny-avila](https://github.com/danny-avila) in [#15377](https://github.com/LibreChat-AI/LibreChat/pull/15377) +- ๐Ÿ”Œ refactor: Give the Subagent Surface a Host Seam and Its Own Jotai State by [@danny-avila](https://github.com/danny-avila) in [#15455](https://github.com/LibreChat-AI/LibreChat/pull/15455) +- ๐Ÿ”™ refactor: Keep Pasted Text Return Action Visible by [@danny-avila](https://github.com/danny-avila) in [#15586](https://github.com/LibreChat-AI/LibreChat/pull/15586) +- style(insights): use Click UI muted token for KPI labels and 32/12 page spacing by [@danielclickh](https://github.com/danielclickh) in [#15551](https://github.com/LibreChat-AI/LibreChat/pull/15551) +- ๐Ÿ”ฃ refactor: Replace Mongo Filters With Typed Criteria by [@danny-avila](https://github.com/danny-avila) in [#15580](https://github.com/LibreChat-AI/LibreChat/pull/15580) +- ๐Ÿ›๏ธ refactor: Extract Engine-Neutral Tenant Policy by [@danny-avila](https://github.com/danny-avila) in [#15575](https://github.com/LibreChat-AI/LibreChat/pull/15575) +- style(insights): give panels their own surface in dark mode by [@danielclickh](https://github.com/danielclickh) in [#15552](https://github.com/LibreChat-AI/LibreChat/pull/15552) +- ๐Ÿ’ซ style: Align the Phase Summary Rail and Simplify its Fold by [@danny-avila](https://github.com/danny-avila) in [#15619](https://github.com/LibreChat-AI/LibreChat/pull/15619) +- ๐ŸŽ› refactor: Replace Agent Skills Toggles With a Three-Way Mode Control by [@berry-13](https://github.com/berry-13) in [#15520](https://github.com/LibreChat-AI/LibreChat/pull/15520) +- ๐Ÿ“ style: Center Every Row Glyph on the Avatar's Axis by [@danny-avila](https://github.com/danny-avila) in [#15643](https://github.com/LibreChat-AI/LibreChat/pull/15643) +- ๐ŸŽ–๏ธ perf: Promote Flat Thread Rendering to Default by [@danny-avila](https://github.com/danny-avila) in [#15660](https://github.com/LibreChat-AI/LibreChat/pull/15660) +- ๐Ÿ“ style: Put the Grouped Thought on the Row Rail by [@berry-13](https://github.com/berry-13) in [#15674](https://github.com/LibreChat-AI/LibreChat/pull/15674) +- ๐Ÿ—๏ธ refactor: Prefer the Recorded Storage Key for Every Download Stream by [@danny-avila](https://github.com/danny-avila) in [#15695](https://github.com/LibreChat-AI/LibreChat/pull/15695) +- ๐Ÿ•“ style: Move the Queued-Message Hint Into a Hover Tooltip on the Clock Icon by [@danny-avila](https://github.com/danny-avila) in [#15706](https://github.com/LibreChat-AI/LibreChat/pull/15706) +- ๐Ÿ style: Align Streaming Elapsed Reading With Footer Start by [@danny-avila](https://github.com/danny-avila) in [#15720](https://github.com/LibreChat-AI/LibreChat/pull/15720) +- ๐Ÿ’  style: Unify Code Approval With Composer Controls by [@danny-avila](https://github.com/danny-avila) in [#15721](https://github.com/LibreChat-AI/LibreChat/pull/15721) +- ๐Ÿพ style: Show the Multiplier Only on a Generic Tool Line by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16225](https://github.com/LibreChat-AI/LibreChat/pull/16225) +- ๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘ style: Seat the Live Multiplier Beside Its Status Line by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16220](https://github.com/LibreChat-AI/LibreChat/pull/16220) +- ๐Ÿ›‹๏ธ perf: Discover MCP Tools Only When Needed by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16190](https://github.com/LibreChat-AI/LibreChat/pull/16190) +- โšก perf: Throttle Code Highlighting While a Message Streams by [@berry-13](https://github.com/berry-13) in [#16073](https://github.com/LibreChat-AI/LibreChat/pull/16073) +- ๐Ÿ–๏ธ perf: Highlight Tool Code Once, and Only When Its Pane Is Open by [@danny-avila](https://github.com/danny-avila) in [#16143](https://github.com/LibreChat-AI/LibreChat/pull/16143) +- โšก perf: Virtualize the Model Selector's Search Results by [@berry-13](https://github.com/berry-13) in [#16074](https://github.com/LibreChat-AI/LibreChat/pull/16074) +- โšก perf: Preserve Message References in the Content Handler by [@berry-13](https://github.com/berry-13) in [#16072](https://github.com/LibreChat-AI/LibreChat/pull/16072) +- โšก perf: Exclude Agent Version History From Default `getAgent` Reads by [@berry-13](https://github.com/berry-13) in [#16070](https://github.com/LibreChat-AI/LibreChat/pull/16070) +- โšก perf: Split Streaming Markdown Blocks Incrementally by [@berry-13](https://github.com/berry-13) in [#16071](https://github.com/LibreChat-AI/LibreChat/pull/16071) +- โœ‚๏ธ refactor: Name Tool Rounds From the Trace, and Match a Cut Response From Its End by [@danny-avila](https://github.com/danny-avila) in [#16113](https://github.com/LibreChat-AI/LibreChat/pull/16113) +- ๐ŸŽซ perf: Limit Redis Script Caching to Atomic Claims by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16116](https://github.com/LibreChat-AI/LibreChat/pull/16116) +- ๐Ÿš perf: Enable Redis Stream Coalescing by Default by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16093](https://github.com/LibreChat-AI/LibreChat/pull/16093) +- ๐ŸŒ“ refactor: Scrim OGDialog With the Overlay Theme Role by [@berry-13](https://github.com/berry-13) in [#16068](https://github.com/LibreChat-AI/LibreChat/pull/16068) +- ๐Ÿชถ perf: Cut the Mount Cost of Finished Agent Messages by [@danny-avila](https://github.com/danny-avila) in [#16057](https://github.com/LibreChat-AI/LibreChat/pull/16057) +- โš—๏ธ refactor: Separate Content, Tool, and Agent Types From the Assistants Module by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#15910](https://github.com/LibreChat-AI/LibreChat/pull/15910) +- ๐Ÿ› refactor: Route Packaged Chat Completion Frames Through a Writer by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16267](https://github.com/LibreChat-AI/LibreChat/pull/16267) +- ๐Ÿ”• perf: Back Off Idle Durable Agent Recovery Polls by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16303](https://github.com/LibreChat-AI/LibreChat/pull/16303) +- ๐Ÿ“ style: Set the Reasoning Header at the Shared Row Scale by [@danny-avila](https://github.com/danny-avila) in [#16391](https://github.com/LibreChat-AI/LibreChat/pull/16391) +- ๐Ÿข perf: Collapse Settled Reasoning Text in AnimatedText by [@berry-13](https://github.com/berry-13) in [#16403](https://github.com/LibreChat-AI/LibreChat/pull/16403) +- ๐Ÿ“Ÿ refactor: Present Background Task Checks as a Distinct Activity by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16414](https://github.com/LibreChat-AI/LibreChat/pull/16414) +- ๐Ÿ“ƒ style: Match File Activity Icons To File Rows by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16445](https://github.com/LibreChat-AI/LibreChat/pull/16445) +- โฉ refactor: Clarify Steering Timing and First-Response Fallback by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16465](https://github.com/LibreChat-AI/LibreChat/pull/16465) +- ๐Ÿฅง refactor: Show Failed Call Fractions and Preview Age by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16468](https://github.com/LibreChat-AI/LibreChat/pull/16468) + +### ๐Ÿงช Tests + +- ๐Ÿงช test: Wait for the Durable Task Input Before Reserving a Child Control by [@danny-avila](https://github.com/danny-avila) in [#15901](https://github.com/LibreChat-AI/LibreChat/pull/15901) +- ๐Ÿงช test: Restore Two Rotted Integration Suites and Run Every One in CI by [@danny-avila](https://github.com/danny-avila) in [#15866](https://github.com/LibreChat-AI/LibreChat/pull/15866) +- ๐Ÿงต test: Type BYOM Cancellation Mock by [@danny-avila](https://github.com/danny-avila) in [#15774](https://github.com/LibreChat-AI/LibreChat/pull/15774) +- ๐Ÿ“Ž test: Verify Stateful Sandbox Upload Continuity by [@danny-avila](https://github.com/danny-avila) in [#14363](https://github.com/LibreChat-AI/LibreChat/pull/14363) +- ๐Ÿ“ test: Guard Web Search Description Length by [@danny-avila](https://github.com/danny-avila) in [#14044](https://github.com/LibreChat-AI/LibreChat/pull/14044) +- ๐Ÿ›‚ test: Cover Tool Approval Workflows End to End by [@danny-avila](https://github.com/danny-avila) in [#14427](https://github.com/LibreChat-AI/LibreChat/pull/14427) +- ๐Ÿงญ test: Cover Agent Handoffs End to End by [@danny-avila](https://github.com/danny-avila) in [#14428](https://github.com/LibreChat-AI/LibreChat/pull/14428) +- ๐Ÿงช test: Reasoning-Stream Render Perf Benchmark via react-scan by [@danny-avila](https://github.com/danny-avila) in [#14494](https://github.com/LibreChat-AI/LibreChat/pull/14494) +- ๐ŸŽ›๏ธ test: Guard Multi-Steer Injection Across Tool Boundaries by [@danny-avila](https://github.com/danny-avila) in [#14498](https://github.com/LibreChat-AI/LibreChat/pull/14498) +- ๐Ÿงช test: Run mock E2E against Redis in shards by [@danny-avila](https://github.com/danny-avila) in [#14551](https://github.com/LibreChat-AI/LibreChat/pull/14551) +- ๐ŸŽฒ test: Replace Microtask Timing Assumptions in Client Specs by [@berry-13](https://github.com/berry-13) in [#14653](https://github.com/LibreChat-AI/LibreChat/pull/14653) +- ๐Ÿ˜ test: refresh FerretDB harness, registry-derived models, bulkWrite coverage by [@danny-avila](https://github.com/danny-avila) in [#14679](https://github.com/LibreChat-AI/LibreChat/pull/14679) +- test(mcp): mock static tool startup sync by [@danny-avila](https://github.com/danny-avila) in [#14711](https://github.com/LibreChat-AI/LibreChat/pull/14711) +- ๐Ÿงช test(e2e): add Bombadil property exploration by [@upman](https://github.com/upman) in [#14462](https://github.com/LibreChat-AI/LibreChat/pull/14462) +- ๐Ÿงพ test: Pin the Transactions Config Wiring on the Fallback Path by [@danny-avila](https://github.com/danny-avila) in [#14779](https://github.com/LibreChat-AI/LibreChat/pull/14779) +- โฒ๏ธ test: Give ServerConfigsDB Mongo Hooks a 60s Timeout Budget by [@danny-avila](https://github.com/danny-avila) in [#14831](https://github.com/LibreChat-AI/LibreChat/pull/14831) +- ๐Ÿ›ฐ๏ธ test: Prove Cross-Replica Subagent Delivery by [@danny-avila](https://github.com/danny-avila) in [#15064](https://github.com/LibreChat-AI/LibreChat/pull/15064) +- ๐ŸŽฌ test: Cover Detached Subagent Activity Lifecycle by [@danny-avila](https://github.com/danny-avila) in [#15117](https://github.com/LibreChat-AI/LibreChat/pull/15117) +- ๐Ÿงซ test: Lock Subagent File Context Propagation by [@danny-avila](https://github.com/danny-avila) in [#15126](https://github.com/LibreChat-AI/LibreChat/pull/15126) +- โฑ๏ธ test: Stabilize Meilisearch Retry Cleanup Assertion by [@danny-avila](https://github.com/danny-avila) in [#15129](https://github.com/LibreChat-AI/LibreChat/pull/15129) +- โฑ๏ธ test: Make Active Item Observer Assertions Deterministic by [@berry-13](https://github.com/berry-13) in [#15147](https://github.com/LibreChat-AI/LibreChat/pull/15147) +- ๐ŸŽฌ test: Record-Once/Replay-Forever Model Fixtures for Mock E2E by [@danny-avila](https://github.com/danny-avila) in [#15210](https://github.com/LibreChat-AI/LibreChat/pull/15210) +- ๐Ÿƒ test: Sweep Every DB Schema Method Against a Live Engine by [@danny-avila](https://github.com/danny-avila) in [#15392](https://github.com/LibreChat-AI/LibreChat/pull/15392) +- ๐Ÿชข test: Prove MCP OAuth Resume End to End by [@danny-avila](https://github.com/danny-avila) in [#15485](https://github.com/LibreChat-AI/LibreChat/pull/15485) +- ๐Ÿ—œ test: Clamp Recursive Child Inputs to Builder Types by [@danny-avila](https://github.com/danny-avila) in [#15498](https://github.com/LibreChat-AI/LibreChat/pull/15498) +- ๐Ÿ“ฑ test: Add Mobile Chat Performance Benchmark by [@danny-avila](https://github.com/danny-avila) in [#15510](https://github.com/LibreChat-AI/LibreChat/pull/15510) +- ๐Ÿงฝ test: Restore the Admin Allowlist Override This Spec Leaks Into the Shard by [@danny-avila](https://github.com/danny-avila) in [#15543](https://github.com/LibreChat-AI/LibreChat/pull/15543) +- โฑ๏ธ test: Size the Subagent Lease TTL Above Shard Jitter by [@danny-avila](https://github.com/danny-avila) in [#15568](https://github.com/LibreChat-AI/LibreChat/pull/15568) +- ๐Ÿ”ฌ test: Make the Paste Action's Hover-Gate Guard Actually Guard by [@danny-avila](https://github.com/danny-avila) in [#15589](https://github.com/LibreChat-AI/LibreChat/pull/15589) +- ๐Ÿƒ test: Restore Sweep Coverage of Typed-Criteria Methods by [@danny-avila](https://github.com/danny-avila) in [#15609](https://github.com/LibreChat-AI/LibreChat/pull/15609) +- โœ… test: Prove Tenant Scoping at the Driver, Below the Engine Binding by [@danny-avila](https://github.com/danny-avila) in [#15578](https://github.com/LibreChat-AI/LibreChat/pull/15578) +- โœ… test: Add the Portable Tenant-Isolation Contract by [@danny-avila](https://github.com/danny-avila) in [#15662](https://github.com/LibreChat-AI/LibreChat/pull/15662) +- ๐Ÿงช test: Verify Native BYOM File Reliability End to End by [@danny-avila](https://github.com/danny-avila) in [#15678](https://github.com/LibreChat-AI/LibreChat/pull/15678) +- ๐Ÿ“ท test: Capture Revision-Pinned PR Screenshot Evidence by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16191](https://github.com/LibreChat-AI/LibreChat/pull/16191) +- ๐Ÿ›Œ test: Poll Instead of Sleeping for Dead Subagent Owner Expiry by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16144](https://github.com/LibreChat-AI/LibreChat/pull/16144) +- ๐Ÿ“ test: Add Deployed Smoke Profile by [@danny-avila](https://github.com/danny-avila) in [#16135](https://github.com/LibreChat-AI/LibreChat/pull/16135) +- ๐ŸฅŠ test: Prove MCP Refresh Coordination Across Replica Processes by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16131](https://github.com/LibreChat-AI/LibreChat/pull/16131) +- ๐Ÿซ› test: Separate an Authoring Run From a Skills-Off Run by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16128](https://github.com/LibreChat-AI/LibreChat/pull/16128) +- ๐Ÿšฅ test: Hold Group Cache Reads Until Concurrent Callers Arrive by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16059](https://github.com/LibreChat-AI/LibreChat/pull/16059) + +### ๐Ÿ“ฆ Dependencies, Chores & CI + +- ๐Ÿš€ v0.8.8-rc4 by [@danny-avila](https://github.com/danny-avila) in [#16147](https://github.com/LibreChat-AI/LibreChat/pull/16147) +- ๐Ÿšš ci: Make Image Publishing Owner-Agnostic Ahead of the Org Move by [@danny-avila](https://github.com/danny-avila) in [#15952](https://github.com/LibreChat-AI/LibreChat/pull/15952) +- ๐Ÿ“Š chore: bump Helm chart to 2.0.12 by [@danny-avila](https://github.com/danny-avila) in [#15950](https://github.com/LibreChat-AI/LibreChat/pull/15950) +- โฌ†๏ธ chore(deps): bump agents to 3.8.7 by [@upman](https://github.com/upman) in [#15947](https://github.com/LibreChat-AI/LibreChat/pull/15947) +- ๐Ÿช“ ci: Cull Stale Codegraph Select Runs by [@danny-avila](https://github.com/danny-avila) in [#15939](https://github.com/LibreChat-AI/LibreChat/pull/15939) +- ๐Ÿฎ docs: Relight the Helm AI Setup Link by [@jrlprost](https://github.com/jrlprost) in [#15808](https://github.com/LibreChat-AI/LibreChat/pull/15808) +- ๐ŸŽ–๏ธ chore: Promote Helm Chart to 2.0.11 by [@danny-avila](https://github.com/danny-avila) in [#15905](https://github.com/LibreChat-AI/LibreChat/pull/15905) +- ๐Ÿ’‰ chore: Upgrade `@azure/msal-node` to v5.6.0 by [@danny-avila](https://github.com/danny-avila) in [#15903](https://github.com/LibreChat-AI/LibreChat/pull/15903) +- ๐Ÿงต ci: Keep a Floor of Two Jest Workers in CI by [@jomspk](https://github.com/jomspk) in [#15819](https://github.com/LibreChat-AI/LibreChat/pull/15819) +- ๐Ÿฉน ci: Invoke ESLint and Prettier Binaries Directly in Static Checks by [@danny-avila](https://github.com/danny-avila) in [#15884](https://github.com/LibreChat-AI/LibreChat/pull/15884) +- โฑ๏ธ ci: Cut the ESLint Config Sweep to the Rules That Can Regress by [@danny-avila](https://github.com/danny-avila) in [#15890](https://github.com/LibreChat-AI/LibreChat/pull/15890) +- ๐Ÿงท ci: Await durable finalization in conversation-management mock e2e by [@jtodaroii](https://github.com/jtodaroii) in [#15791](https://github.com/LibreChat-AI/LibreChat/pull/15791) +- ๐Ÿ“ฆ chore: bump npm audit packages and `@librechat/agents` to v3.8.5 by [@danny-avila](https://github.com/danny-avila) in [#15770](https://github.com/LibreChat-AI/LibreChat/pull/15770) +- ๐Ÿ“ docs: Set PR Description, Review and Completion Standards by [@danny-avila](https://github.com/danny-avila) in [#15753](https://github.com/LibreChat-AI/LibreChat/pull/15753) +- ๐Ÿงฑ docs: Hold Module Boundaries, Configurable Levers and Injected Dependencies by [@danny-avila](https://github.com/danny-avila) in [#15754](https://github.com/LibreChat-AI/LibreChat/pull/15754) +- ๐Ÿ‘ฃ docs: Define CJS and Jotai Migration Triggers by [@danny-avila](https://github.com/danny-avila) in [#15756](https://github.com/LibreChat-AI/LibreChat/pull/15756) +- ๐Ÿงซ chore: Keep Jest Specs Out of Tool Discovery by [@danny-avila](https://github.com/danny-avila) in [#15766](https://github.com/LibreChat-AI/LibreChat/pull/15766) +- ๐Ÿš€ v0.8.8-rc3 by [@danny-avila](https://github.com/danny-avila) in [#15859](https://github.com/LibreChat-AI/LibreChat/pull/15859) +- โœจ v0.8.8-rc2 by [@danny-avila](https://github.com/danny-avila) in [#14845](https://github.com/LibreChat-AI/LibreChat/pull/14845) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.2.52 by [@danny-avila](https://github.com/danny-avila) in [#13939](https://github.com/LibreChat-AI/LibreChat/pull/13939) +- โฌ†๏ธ chore: Migrate off deprecated @ariakit/react-core to @ariakit/react-components by [@danny-avila](https://github.com/danny-avila) in [#13940](https://github.com/LibreChat-AI/LibreChat/pull/13940) +- ๐Ÿงช ci: Resolve DataTable test infinite re-render by [@danny-avila](https://github.com/danny-avila) in [#13947](https://github.com/LibreChat-AI/LibreChat/pull/13947) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.2.54 by [@danny-avila](https://github.com/danny-avila) in [#14035](https://github.com/LibreChat-AI/LibreChat/pull/14035) +- ๐Ÿ”„ chore: Bump `@librechat/agents` to v3.2.55 by [@danny-avila](https://github.com/danny-avila) in [`954caef3a3`](https://github.com/LibreChat-AI/LibreChat/commit/954caef3a35dabec2e5d5b56ae78ea5349c4721f) +- ๐Ÿงช ci: De-flake ConversationsSection Memoization Spec on Slow Runners by [@danny-avila](https://github.com/danny-avila) in [#14071](https://github.com/LibreChat-AI/LibreChat/pull/14071) +- ๐Ÿงท chore: Expose Retain Recent Summarization Config by [@danny-avila](https://github.com/danny-avila) in [#14134](https://github.com/LibreChat-AI/LibreChat/pull/14134) +- ๐Ÿ“ฆ chore: bump langfuse fanout Go dependencies by [@upman](https://github.com/upman) in [#14126](https://github.com/LibreChat-AI/LibreChat/pull/14126) +- โญ docs: update Star History section by [@berry-13](https://github.com/berry-13) in [#14198](https://github.com/LibreChat-AI/LibreChat/pull/14198) +- ๐Ÿ“ฆ chore: Update `@librechat/agents` to v3.2.62 by [@danny-avila](https://github.com/danny-avila) in [#14235](https://github.com/LibreChat-AI/LibreChat/pull/14235) +- ๐Ÿ“ฆ chore: Update `@librechat/agents` to v3.2.65 by [@danny-avila](https://github.com/danny-avila) in [#14263](https://github.com/LibreChat-AI/LibreChat/pull/14263) +- ๐Ÿงน chore: Prune Dangling Images After deployed-update Pull by [@danny-avila](https://github.com/danny-avila) in [#14269](https://github.com/LibreChat-AI/LibreChat/pull/14269) +- ๐Ÿฝ๏ธ chore: Drop Pending Composer Draft When Steering or Queuing by [@danny-avila](https://github.com/danny-avila) in [#14289](https://github.com/LibreChat-AI/LibreChat/pull/14289) +- ๐Ÿงฉ chore: Prebundle Node Polyfills for Buffer, Process, and Global in Vite `optimizeDeps` by [@danny-avila](https://github.com/danny-avila) in [#14354](https://github.com/LibreChat-AI/LibreChat/pull/14354) +- ๐Ÿ“ฆ chore: Update `@librechat/agents` to v3.2.66 & `npm audit fix` by [@danny-avila](https://github.com/danny-avila) in [#14361](https://github.com/LibreChat-AI/LibreChat/pull/14361) +- ๐Ÿงพ ci: Skip Workflows for Markdown-Only Changes by [@danny-avila](https://github.com/danny-avila) in [#14378](https://github.com/LibreChat-AI/LibreChat/pull/14378) +- ๐Ÿ“ฆ chore: Update `@librechat/agents` to v3.2.68 by [@danny-avila](https://github.com/danny-avila) in [#14380](https://github.com/LibreChat-AI/LibreChat/pull/14380) +- ๐Ÿšฆ ci: Gate Playwright Runs to Maintainers by [@danny-avila](https://github.com/danny-avila) in [#14385](https://github.com/LibreChat-AI/LibreChat/pull/14385) +- ๐ŸŽญ ci: Scope Playwright Runs to Relevant Changes by [@danny-avila](https://github.com/danny-avila) in [#14388](https://github.com/LibreChat-AI/LibreChat/pull/14388) +- ๐Ÿƒ chore: Bump Mongoose to 8.24.1 to Patch Prototype Pollution by [@danny-avila](https://github.com/danny-avila) in [#14461](https://github.com/LibreChat-AI/LibreChat/pull/14461) +- ๐Ÿ—บ๏ธ chore: Bump PostCSS to 8.5.18 to Patch Source Map Traversal by [@danny-avila](https://github.com/danny-avila) in [#14463](https://github.com/LibreChat-AI/LibreChat/pull/14463) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.3.4 by [@danny-avila](https://github.com/danny-avila) in [#14482](https://github.com/LibreChat-AI/LibreChat/pull/14482) +- ๐Ÿ‚ chore: Prune Deprecated Packages From the Dependency Tree by [@danny-avila](https://github.com/danny-avila) in [#14483](https://github.com/LibreChat-AI/LibreChat/pull/14483) +- ๐ŸŒฏ chore: Retire Rollup-Era devDependencies After tsdown Migration by [@danny-avila](https://github.com/danny-avila) in [#14496](https://github.com/LibreChat-AI/LibreChat/pull/14496) +- ๐Ÿ“ฆ chore: Bump @librechat/agents to v3.3.5 by [@danny-avila](https://github.com/danny-avila) in [#14506](https://github.com/LibreChat-AI/LibreChat/pull/14506) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.3.8 by [@danny-avila](https://github.com/danny-avila) in [#14525](https://github.com/LibreChat-AI/LibreChat/pull/14525) +- ๐Ÿงช chore: Add the Activity-Label Prose Eval Harness by [@danny-avila](https://github.com/danny-avila) in [#14527](https://github.com/LibreChat-AI/LibreChat/pull/14527) +- ๐ŸŸฆ chore: Convert Activity-Label Eval Harness to TypeScript by [@danny-avila](https://github.com/danny-avila) in [#14530](https://github.com/LibreChat-AI/LibreChat/pull/14530) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.3.9 by [@danny-avila](https://github.com/danny-avila) in [#14548](https://github.com/LibreChat-AI/LibreChat/pull/14548) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.3.11 by [@danny-avila](https://github.com/danny-avila) in [#14562](https://github.com/LibreChat-AI/LibreChat/pull/14562) +- ๐Ÿ“ฆ chore: update `sanitize-html` to latest by [@danny-avila](https://github.com/danny-avila) in [#14573](https://github.com/LibreChat-AI/LibreChat/pull/14573) +- ๐ŸŒ€ ci: Deterministic Circular Dependency Checks by [@danny-avila](https://github.com/danny-avila) in [#14579](https://github.com/LibreChat-AI/LibreChat/pull/14579) +- ๐Ÿ”’ chore: Upgrade react-router-dom to v7.18.2 (security) by [@danny-avila](https://github.com/danny-avila) in [#14582](https://github.com/LibreChat-AI/LibreChat/pull/14582) +- ๐Ÿงช ci: Settle to render-idle before ConversationsSection memo baselines by [@danny-avila](https://github.com/danny-avila) in [#14590](https://github.com/LibreChat-AI/LibreChat/pull/14590) +- ๐Ÿงน chore: Migrate Legacy Duplicate Code Files Blocking Dedupe Index by [@danny-avila](https://github.com/danny-avila) in [#14593](https://github.com/LibreChat-AI/LibreChat/pull/14593) +- ๐Ÿ“ฆ chore: npm audit by [@danny-avila](https://github.com/danny-avila) in [#14640](https://github.com/LibreChat-AI/LibreChat/pull/14640) +- ๐Ÿ›ฐ๏ธ chore: bump `@librechat/agents` to v3.4.0, cover streamed subagent results e2e by [@danny-avila](https://github.com/danny-avila) in [#14647](https://github.com/LibreChat-AI/LibreChat/pull/14647) +- ๐Ÿซ† chore: Remove Published Credential Defaults by [@danny-avila](https://github.com/danny-avila) in [#14680](https://github.com/LibreChat-AI/LibreChat/pull/14680) +- ๐Ÿ‹ chore: add opt-in alternative local stack experiments by [@danny-avila](https://github.com/danny-avila) in [#14678](https://github.com/LibreChat-AI/LibreChat/pull/14678) +- โš™๏ธ ci: Bump GitHub Actions to Node.js 24 Runtimes by [@berry-13](https://github.com/berry-13) in [#14689](https://github.com/LibreChat-AI/LibreChat/pull/14689) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.4.2 and `npm audit` by [@danny-avila](https://github.com/danny-avila) in [#14702](https://github.com/LibreChat-AI/LibreChat/pull/14702) +- ๐Ÿšฆ ci: Reduce GitHub Actions Runner Pressure by [@berry-13](https://github.com/berry-13) in [#14716](https://github.com/LibreChat-AI/LibreChat/pull/14716) +- ๐Ÿงฉ ci: Close Workflow Path-Filter Gaps by [@danny-avila](https://github.com/danny-avila) in [#14728](https://github.com/LibreChat-AI/LibreChat/pull/14728) +- ๐Ÿ›ป ci: Move the ESLint Config Sweep Into Its Own Job by [@danny-avila](https://github.com/danny-avila) in [#14742](https://github.com/LibreChat-AI/LibreChat/pull/14742) +- ๐Ÿงท ci: Enforce Durable Agent Finalization for E2E tests by [@danny-avila](https://github.com/danny-avila) in [#14740](https://github.com/LibreChat-AI/LibreChat/pull/14740) +- ๐Ÿชถ chore: Aggregate Empty MCP Tool Logs by [@danny-avila](https://github.com/danny-avila) in [#14767](https://github.com/LibreChat-AI/LibreChat/pull/14767) +- ๐Ÿ“ฆ chore: Update `@librechat/agents` to v3.4.6 by [@danny-avila](https://github.com/danny-avila) in [#14781](https://github.com/LibreChat-AI/LibreChat/pull/14781) +- ๐ŸŒ ci: Harden Locize Translation Sync by [@danny-avila](https://github.com/danny-avila) in [#14784](https://github.com/LibreChat-AI/LibreChat/pull/14784) +- ๐Ÿ”Œ chore: Bump the MCP SDK to 1.30.0 and Parse Content-Type Instead of Searching It by [@danny-avila](https://github.com/danny-avila) in [#14820](https://github.com/LibreChat-AI/LibreChat/pull/14820) +- ci: gate the e2e activity-phase DOM assertions on the persisted phase by [@danny-avila](https://github.com/danny-avila) in [#14821](https://github.com/LibreChat-AI/LibreChat/pull/14821) +- ๐Ÿš€ chore: Prepare v0.8.8-rc1 by [@danny-avila](https://github.com/danny-avila) in [#14394](https://github.com/LibreChat-AI/LibreChat/pull/14394) +- ๐Ÿงน ci: Remove Obsolete Test Server Workflow by [@danny-avila](https://github.com/danny-avila) in [#14823](https://github.com/LibreChat-AI/LibreChat/pull/14823) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.5.1 by [@danny-avila](https://github.com/danny-avila) in [#14830](https://github.com/LibreChat-AI/LibreChat/pull/14830) +- ๐ŸŽ๏ธ ci: Focus Redis E2E Coverage by [@danny-avila](https://github.com/danny-avila) in [#14842](https://github.com/LibreChat-AI/LibreChat/pull/14842) +- ๐Ÿ‘ท ci: Stop Optional Playwright Fonts From Failing E2E by [@danny-avila](https://github.com/danny-avila) in [#14852](https://github.com/LibreChat-AI/LibreChat/pull/14852) +- ๐Ÿ›‚ ci: Grant Multi-Convo Permission in E2E Mock Config by [@danny-avila](https://github.com/danny-avila) in [#14839](https://github.com/LibreChat-AI/LibreChat/pull/14839) +- โš“ ci: Settle the E2E Reply Before the Double-Click Quote by [@danny-avila](https://github.com/danny-avila) in [#14840](https://github.com/LibreChat-AI/LibreChat/pull/14840) +- โฌ†๏ธ chore: Bump `@librechat/agents` to v3.6.0 by [@danny-avila](https://github.com/danny-avila) in [#14890](https://github.com/LibreChat-AI/LibreChat/pull/14890) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.6.2 by [@danny-avila](https://github.com/danny-avila) in [#14905](https://github.com/LibreChat-AI/LibreChat/pull/14905) +- โฑ๏ธ ci: Give the E2E Redis Transport Lane Its Own Timing Budget by [@danny-avila](https://github.com/danny-avila) in [#14907](https://github.com/LibreChat-AI/LibreChat/pull/14907) +- ๐Ÿงญ fix: Repair Locize Translation Validation by [@danny-avila](https://github.com/danny-avila) in [#14911](https://github.com/LibreChat-AI/LibreChat/pull/14911) +- ๐Ÿ›ก๏ธ fix: Validate Translation Contracts Against English by [@danny-avila](https://github.com/danny-avila) in [#14914](https://github.com/LibreChat-AI/LibreChat/pull/14914) +- ๐Ÿ”ญ ci: Codegraph Test-Selection Probe (Observe-Only) by [@danny-avila](https://github.com/danny-avila) in [#14936](https://github.com/LibreChat-AI/LibreChat/pull/14936) +- ๐Ÿฉน ci: Codegraph Probe Summary Rendering by [@danny-avila](https://github.com/danny-avila) in [#14942](https://github.com/LibreChat-AI/LibreChat/pull/14942) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.6.3 by [@danny-avila](https://github.com/danny-avila) in [#14941](https://github.com/LibreChat-AI/LibreChat/pull/14941) +- ๐Ÿ—ณ๏ธ ci: Codegraph E2E Vote Runs on Dev Merges (Observe-Only) by [@danny-avila](https://github.com/danny-avila) in [#14947](https://github.com/LibreChat-AI/LibreChat/pull/14947) +- ๐Ÿฉน ci: Quote Colon in Codegraph Votes Workflow (Invalid YAML) by [@danny-avila](https://github.com/danny-avila) in [#14952](https://github.com/LibreChat-AI/LibreChat/pull/14952) +- ๐Ÿ—ณ๏ธ ci: Vote on Fail-Open Merges Too (Tiers Are Bridge-Derived) by [@danny-avila](https://github.com/danny-avila) in [#14969](https://github.com/LibreChat-AI/LibreChat/pull/14969) +- ๐Ÿช™ chore: GPT-5.6 Terra and Luna Token Cost Rates by [@afuetterer](https://github.com/afuetterer) in [#14964](https://github.com/LibreChat-AI/LibreChat/pull/14964) +- ๐Ÿงฏ ci: Disarm the Graceful-Shutdown Force-Exit Timer on Test Reset by [@danny-avila](https://github.com/danny-avila) in [#14972](https://github.com/LibreChat-AI/LibreChat/pull/14972) +- ๐Ÿชข ci: Prevent Playwright Apt Lock Leakage by [@danny-avila](https://github.com/danny-avila) in [#14993](https://github.com/LibreChat-AI/LibreChat/pull/14993) +- ๐Ÿšš chore: Bump `@librechat/agents` to v3.6.8 For Token, Trace, and Stream Fixes by [@danny-avila](https://github.com/danny-avila) in [#15012](https://github.com/LibreChat-AI/LibreChat/pull/15012) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.6.9 by [@danny-avila](https://github.com/danny-avila) in [#15037](https://github.com/LibreChat-AI/LibreChat/pull/15037) +- ๐Ÿ“ docs: Make CLAUDE.md Portable and Restore AGENTS.md Parity by [@alebgl77](https://github.com/alebgl77) in [#15046](https://github.com/LibreChat-AI/LibreChat/pull/15046) +- ๐ŸŽž๏ธ ci: Fix Playwright ffmpeg Install Hang and Cache the Download by [@danny-avila](https://github.com/danny-avila) in [#15065](https://github.com/LibreChat-AI/LibreChat/pull/15065) +- ๐Ÿงฌ chore: Upgrade Redis Dependencies to Dodge the ElastiCache BigInt Cursor by [@danny-avila](https://github.com/danny-avila) in [#15068](https://github.com/LibreChat-AI/LibreChat/pull/15068) +- ๐Ÿช™ chore: Update GPT-5.6 Sol Token Cost Rates by [@usnavy13](https://github.com/usnavy13) in [#15114](https://github.com/LibreChat-AI/LibreChat/pull/15114) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.6.12 by [@danny-avila](https://github.com/danny-avila) in [#15125](https://github.com/LibreChat-AI/LibreChat/pull/15125) +- ๐Ÿƒ ci: Cache MongoDB Memory-Server Binaries in Backend Test Jobs by [@danny-avila](https://github.com/danny-avila) in [#15131](https://github.com/LibreChat-AI/LibreChat/pull/15131) +- โ›ฉ๏ธ ci: Gate Backend Jest on Codegraph Selection (Stage 1) by [@danny-avila](https://github.com/danny-avila) in [#15132](https://github.com/LibreChat-AI/LibreChat/pull/15132) +- ๐Ÿ”ฅ chore: Bump `@librechat/agents` to v3.6.14 by [@danny-avila](https://github.com/danny-avila) in [#15135](https://github.com/LibreChat-AI/LibreChat/pull/15135) +- ๐ŸŽญ ci: Gate Playwright Lanes and Docker Smokes on Codegraph Selection (Stage 2) by [@danny-avila](https://github.com/danny-avila) in [#15136](https://github.com/LibreChat-AI/LibreChat/pull/15136) +- ๐Ÿงน chore: Sort Client Imports Left Behind by the Import Order Gate by [@berry-13](https://github.com/berry-13) in [#15139](https://github.com/LibreChat-AI/LibreChat/pull/15139) +- ๐ŸŽ๏ธ chore: Bump `@librechat/agents` to v3.6.15 by [@danny-avila](https://github.com/danny-avila) in [#15140](https://github.com/LibreChat-AI/LibreChat/pull/15140) +- ๐Ÿ—ณ๏ธ ci: Log the Exact Spec List in Codegraph E2E Votes by [@danny-avila](https://github.com/danny-avila) in [#15143](https://github.com/LibreChat-AI/LibreChat/pull/15143) +- ๐ŸŽจ ci: Gate Frontend Jest on Codegraph Selection (Stage 1.5) by [@danny-avila](https://github.com/danny-avila) in [#15145](https://github.com/LibreChat-AI/LibreChat/pull/15145) +- ๐Ÿงฉ chore: Bump Agents SDK to v3.6.16 by [@danny-avila](https://github.com/danny-avila) in [#15151](https://github.com/LibreChat-AI/LibreChat/pull/15151) +- ๐Ÿฅธ chore: Resolve Agents SDK Path Aliases That Masked Backend Types by [@danny-avila](https://github.com/danny-avila) in [#15160](https://github.com/LibreChat-AI/LibreChat/pull/15160) +- ๐Ÿ“ˆ chore: Bump Agents SDK to v3.7.0 by [@danny-avila](https://github.com/danny-avila) in [#15163](https://github.com/LibreChat-AI/LibreChat/pull/15163) +- ๐ŸŽฐ ci: Vote on the Full Mock Suite to End Phantom Spec Trials by [@danny-avila](https://github.com/danny-avila) in [#15162](https://github.com/LibreChat-AI/LibreChat/pull/15162) +- ๐Ÿ“ ci: Pin the Votes Ledger Results JSON to an Absolute Path by [@danny-avila](https://github.com/danny-avila) in [#15166](https://github.com/LibreChat-AI/LibreChat/pull/15166) +- ๐ŸŽ“ ci: Graduated E2E Spec Skipping, Wired Dark Until Armed by [@danny-avila](https://github.com/danny-avila) in [#15172](https://github.com/LibreChat-AI/LibreChat/pull/15172) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.7.1 by [@danny-avila](https://github.com/danny-avila) in [#15176](https://github.com/LibreChat-AI/LibreChat/pull/15176) +- ๐ŸŽจ style: Set Question Popover and Subagent Panel on the Sidebar Surface by [@danny-avila](https://github.com/danny-avila) in [#15201](https://github.com/LibreChat-AI/LibreChat/pull/15201) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.7.2 by [@danny-avila](https://github.com/danny-avila) in [`6284139f18`](https://github.com/LibreChat-AI/LibreChat/commit/6284139f1816bfa54f108ba154c6e4a58f0e2a34) +- ๐Ÿ“ฆ chore: bump `axios` to v1.20.0, `@librechat/agents` to v3.7.4 by [@danny-avila](https://github.com/danny-avila) in [#15285](https://github.com/LibreChat-AI/LibreChat/pull/15285) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.7.5 by [@danny-avila](https://github.com/danny-avila) in [`ab2c0d5362`](https://github.com/LibreChat-AI/LibreChat/commit/ab2c0d5362e87eb1643598d71efd818f396af8d8) +- ๐Ÿชฅ chore: Run CI's Static Checks on Each Commit's Diff by [@danny-avila](https://github.com/danny-avila) in [#15303](https://github.com/LibreChat-AI/LibreChat/pull/15303) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.7.8 by [@danny-avila](https://github.com/danny-avila) in [#15337](https://github.com/LibreChat-AI/LibreChat/pull/15337) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.7.10 by [@danny-avila](https://github.com/danny-avila) in [#15378](https://github.com/LibreChat-AI/LibreChat/pull/15378) +- ๐Ÿ”’ chore: bump `google.golang.org/grpc` to v1.82.2 (GHSA-hrxh-6v49-42gf) by [@danny-avila](https://github.com/danny-avila) in [#15383](https://github.com/LibreChat-AI/LibreChat/pull/15383) +- ๐Ÿ“ฆ chore: bump `vite` to v8.2.2 by [@danny-avila](https://github.com/danny-avila) in [#15384](https://github.com/LibreChat-AI/LibreChat/pull/15384) +- โœ๏ธ chore: Clarify That Interrupting a Steer Does Not Interrupt Reasoning by [@danny-avila](https://github.com/danny-avila) in [#15386](https://github.com/LibreChat-AI/LibreChat/pull/15386) +- ๐Ÿงœโ€โ™€๏ธ chore: Bump `mermaid` to v11.17.2 and `dompurify` to v3.4.14 by [@danny-avila](https://github.com/danny-avila) in [#15405](https://github.com/LibreChat-AI/LibreChat/pull/15405) +- ๐Ÿ“ฆ chore: Bump Packages from LibreChat SCA Audit by [@danny-avila](https://github.com/danny-avila) in [#15410](https://github.com/LibreChat-AI/LibreChat/pull/15410) +- ๐Ÿ›— chore: Elevate `@librechat/agents` to 3.7.11 and `multer` to 2.3.0 by [@danny-avila](https://github.com/danny-avila) in [#15409](https://github.com/LibreChat-AI/LibreChat/pull/15409) +- ๐Ÿ‘ ci: Cancel the Playwright E2E Gate With Its Run by [@danny-avila](https://github.com/danny-avila) in [#15415](https://github.com/LibreChat-AI/LibreChat/pull/15415) +- ๐ŸŽฏ ci: Retarget Pull Requests Opened Against `main` to `dev` by [@danny-avila](https://github.com/danny-avila) in [#15416](https://github.com/LibreChat-AI/LibreChat/pull/15416) +- ๐Ÿซ‚ ci: Unify Docker Image Publishing Workflows by [@danny-avila](https://github.com/danny-avila) in [#15447](https://github.com/LibreChat-AI/LibreChat/pull/15447) +- ๐Ÿ—ฟ chore: Upgrade gRPC to Prevent Receive Buffer Exhaustion by [@danny-avila](https://github.com/danny-avila) in [#15493](https://github.com/LibreChat-AI/LibreChat/pull/15493) +- ๐Ÿงด chore: Refresh Sanitizer and Selector Parser Dependencies by [@danny-avila](https://github.com/danny-avila) in [#15494](https://github.com/LibreChat-AI/LibreChat/pull/15494) +- ๐Ÿช› chore: Align Vite Build Config With Native ESM by [@danny-avila](https://github.com/danny-avila) in [#15495](https://github.com/LibreChat-AI/LibreChat/pull/15495) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` to v3.7.17 by [@danny-avila](https://github.com/danny-avila) in [#15531](https://github.com/LibreChat-AI/LibreChat/pull/15531), including [an upstream fix](https://github.com/danny-avila/agents/pull/500) by [@dustinhealy](https://github.com/dustinhealy) that propagates ambiguous context-window-or-output gateway errors without compacting conversation history +- ๐Ÿชค chore: Scope Assistant Tool-Resource Lookups by [@danny-avila](https://github.com/danny-avila) in [#15579](https://github.com/LibreChat-AI/LibreChat/pull/15579) +- ๐ŸŽˆ ci: Gate Page Loads Under Database Latency by [@upman](https://github.com/upman) in [#15646](https://github.com/LibreChat-AI/LibreChat/pull/15646) +- ๐Ÿฅ… chore: Block DB Model APIs That Bypass Isolation by [@danny-avila](https://github.com/danny-avila) in [#15663](https://github.com/LibreChat-AI/LibreChat/pull/15663) +- ๐Ÿ”ฆ chore: Drop `@lhci/cli` and Run Lighthouse 13 Directly by [@danny-avila](https://github.com/danny-avila) in [#15687](https://github.com/LibreChat-AI/LibreChat/pull/15687) +- ๐Ÿชž ci: Mirror Published Images to a Legacy GHCR Namespace by [@danny-avila](https://github.com/danny-avila) in [#16214](https://github.com/LibreChat-AI/LibreChat/pull/16214) +- ๐Ÿ“ฆ chore: bump agents SDK to v3.9.1 by [@danny-avila](https://github.com/danny-avila) in [#16212](https://github.com/LibreChat-AI/LibreChat/pull/16212) +- ๐ŸŽฉ docs: Set Expectations for AI-Assisted Contributions by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16207](https://github.com/LibreChat-AI/LibreChat/pull/16207) +- ๐Ÿฅข ci: Select Quote Text Across the Streaming Fade's Word Spans by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16189](https://github.com/LibreChat-AI/LibreChat/pull/16189) +- ๐Ÿ“‹ docs: Clarify Type of Change and Screenshot Uploads in the PR Template by [@berry-13](https://github.com/berry-13) in [#16165](https://github.com/LibreChat-AI/LibreChat/pull/16165) +- ๐Ÿฆพ chore: Bump Agents SDK to v3.9.0 by [@danny-avila](https://github.com/danny-avila) in [#16142](https://github.com/LibreChat-AI/LibreChat/pull/16142) +- ๐Ÿ“’ ci: Upload Per-Test Jest Results From Review Workflows by [@danny-avila](https://github.com/danny-avila) in [#16110](https://github.com/LibreChat-AI/LibreChat/pull/16110) +- ๐Ÿ“‹ chore: Restructure Pull Request Template by [@berry-13](https://github.com/berry-13) in [#16094](https://github.com/LibreChat-AI/LibreChat/pull/16094) +- ๐Ÿšก chore: Bump Agents SDK to v3.9.3 by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16261](https://github.com/LibreChat-AI/LibreChat/pull/16261) +- ๐Ÿ” ci: Gate the Legacy Mirror Behind an Environment by [@danny-avila](https://github.com/danny-avila) in [#16238](https://github.com/LibreChat-AI/LibreChat/pull/16238) +- ๐Ÿšš chore: Point Repository and Image References at LibreChat-AI by [@danny-avila](https://github.com/danny-avila) in [#16005](https://github.com/LibreChat-AI/LibreChat/pull/16005) +- ๐Ÿ๏ธ ci: Keep Canary Pull Requests on Canary by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16285](https://github.com/LibreChat-AI/LibreChat/pull/16285) +- ๐Ÿค docs: Clarify Maintainer-Directed Canary Pull Requests by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16291](https://github.com/LibreChat-AI/LibreChat/pull/16291) +- ๐Ÿงช ci: Count System Instructions in Mock Model Usage by [@danny-avila](https://github.com/danny-avila) in [#16350](https://github.com/LibreChat-AI/LibreChat/pull/16350) +- ๐Ÿ“ฆ chore: bump `@librechat/agents` SDK to v3.9.6 by [@danny-avila](https://github.com/danny-avila) in [#16354](https://github.com/LibreChat-AI/LibreChat/pull/16354) +- ๐Ÿ™ ci: Spread Playwright Coverage Across Isolated Shards by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16358](https://github.com/LibreChat-AI/LibreChat/pull/16358) +- ๐Ÿ“ฆ chore: bump agents SDK to v3.9.7 by [@danny-avila](https://github.com/danny-avila) in [#16425](https://github.com/LibreChat-AI/LibreChat/pull/16425) +- ๐Ÿงค docs: Define Safe Backend Error Contracts in AGENTS.md by [@lia-by-librechat](https://github.com/lia-by-librechat) in [#16443](https://github.com/LibreChat-AI/LibreChat/pull/16443) + + +### ๐ŸŒ Internationalization + +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14053](https://github.com/LibreChat-AI/LibreChat/pull/14053) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14070](https://github.com/LibreChat-AI/LibreChat/pull/14070) +- ๐ŸŒ i18n: Localize Token Balance Error Message by [@Philipp-Voss](https://github.com/Philipp-Voss) in [#14169](https://github.com/LibreChat-AI/LibreChat/pull/14169) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14266](https://github.com/LibreChat-AI/LibreChat/pull/14266) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14307](https://github.com/LibreChat-AI/LibreChat/pull/14307) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14376](https://github.com/LibreChat-AI/LibreChat/pull/14376) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14406](https://github.com/LibreChat-AI/LibreChat/pull/14406) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14460](https://github.com/LibreChat-AI/LibreChat/pull/14460) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14598](https://github.com/LibreChat-AI/LibreChat/pull/14598) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@danny-avila](https://github.com/danny-avila) in [#14739](https://github.com/LibreChat-AI/LibreChat/pull/14739) +- ๐ŸŒ chore: Restore English Localization Source Values by [@danny-avila](https://github.com/danny-avila) in [#14743](https://github.com/LibreChat-AI/LibreChat/pull/14743) +- ๐ŸŒ i18n: Update translation.json with latest translations by [@github-actions](https://github.com/apps/github-actions) in [#14919](https://github.com/LibreChat-AI/LibreChat/pull/14919) + +## New Contributors + +- [@alexkorep](https://github.com/alexkorep) made their first contribution in [#14034](https://github.com/LibreChat-AI/LibreChat/pull/14034) +- [@jakacenta](https://github.com/jakacenta) made their first contribution in [#14046](https://github.com/LibreChat-AI/LibreChat/pull/14046) +- [@Zirkonium88](https://github.com/Zirkonium88) made their first contribution in [#13989](https://github.com/LibreChat-AI/LibreChat/pull/13989) +- [@arjunvijay24](https://github.com/arjunvijay24) made their first contribution in [#14040](https://github.com/LibreChat-AI/LibreChat/pull/14040) +- [@mahirhir](https://github.com/mahirhir) made their first contribution in [#13996](https://github.com/LibreChat-AI/LibreChat/pull/13996) +- [@Osamaali313](https://github.com/Osamaali313) made their first contribution in [#13999](https://github.com/LibreChat-AI/LibreChat/pull/13999) +- [@Philipp-Voss](https://github.com/Philipp-Voss) made their first contribution in [#14169](https://github.com/LibreChat-AI/LibreChat/pull/14169) +- [@VictorEPlus](https://github.com/VictorEPlus) made their first contribution in [#14172](https://github.com/LibreChat-AI/LibreChat/pull/14172) +- [@adamscross04](https://github.com/adamscross04) made their first contribution in [#14177](https://github.com/LibreChat-AI/LibreChat/pull/14177) +- [@manisrinivasan2k1](https://github.com/manisrinivasan2k1) made their first contribution in [#14082](https://github.com/LibreChat-AI/LibreChat/pull/14082) +- [@jomspk](https://github.com/jomspk) made their first contribution in [#14232](https://github.com/LibreChat-AI/LibreChat/pull/14232) +- [@jjhidalgar-celonis](https://github.com/jjhidalgar-celonis) made their first contribution in [#14254](https://github.com/LibreChat-AI/LibreChat/pull/14254) +- [@Aho-Bakaa](https://github.com/Aho-Bakaa) made their first contribution in [#14262](https://github.com/LibreChat-AI/LibreChat/pull/14262) +- [@joshbla](https://github.com/joshbla) made their first contribution in [#13930](https://github.com/LibreChat-AI/LibreChat/pull/13930) +- [@unsnow-iac](https://github.com/unsnow-iac) made their first contribution in [#14436](https://github.com/LibreChat-AI/LibreChat/pull/14436) +- [@schumajs](https://github.com/schumajs) made their first contribution in [#14538](https://github.com/LibreChat-AI/LibreChat/pull/14538) +- [@cyphercodes](https://github.com/cyphercodes) made their first contribution in [#14507](https://github.com/LibreChat-AI/LibreChat/pull/14507) +- [@likeabas](https://github.com/likeabas) made their first contribution in [#14764](https://github.com/LibreChat-AI/LibreChat/pull/14764) +- [@jtodaroii](https://github.com/jtodaroii) made their first contribution in [#14774](https://github.com/LibreChat-AI/LibreChat/pull/14774) +- [@lizzykerrigan](https://github.com/lizzykerrigan) made their first contribution in [#14791](https://github.com/LibreChat-AI/LibreChat/pull/14791) +- [@mihidumh](https://github.com/mihidumh) made their first contribution in [#14810](https://github.com/LibreChat-AI/LibreChat/pull/14810) +- [@snapydziuba](https://github.com/snapydziuba) made their first contribution in [#14761](https://github.com/LibreChat-AI/LibreChat/pull/14761) +- [@jacksonriding](https://github.com/jacksonriding) made their first contribution in [#14923](https://github.com/LibreChat-AI/LibreChat/pull/14923) +- [@afuetterer](https://github.com/afuetterer) made their first contribution in [#14964](https://github.com/LibreChat-AI/LibreChat/pull/14964) +- [@putramkti](https://github.com/putramkti) made their first contribution in [#14878](https://github.com/LibreChat-AI/LibreChat/pull/14878) +- [@alebgl77](https://github.com/alebgl77) made their first contribution in [#15046](https://github.com/LibreChat-AI/LibreChat/pull/15046) +- [@pacocartones](https://github.com/pacocartones) made their first contribution in [#15157](https://github.com/LibreChat-AI/LibreChat/pull/15157) +- [@AyushCipher](https://github.com/AyushCipher) made their first contribution in [#15336](https://github.com/LibreChat-AI/LibreChat/pull/15336) +- [@alexsr1](https://github.com/alexsr1) made their first contribution in [#15404](https://github.com/LibreChat-AI/LibreChat/pull/15404) +- [@jrlprost](https://github.com/jrlprost) made their first contribution in [#15808](https://github.com/LibreChat-AI/LibreChat/pull/15808) +- [@L4XB](https://github.com/L4XB) made their first contribution in [#15833](https://github.com/LibreChat-AI/LibreChat/pull/15833) +- [@Zsanz3](https://github.com/Zsanz3) made their first contribution in [#15809](https://github.com/LibreChat-AI/LibreChat/pull/15809) +- [@ncchinh](https://github.com/ncchinh) made their first contribution in [#15747](https://github.com/LibreChat-AI/LibreChat/pull/15747) +- [@minwookshin](https://github.com/minwookshin) made their first contribution in [#16167](https://github.com/LibreChat-AI/LibreChat/pull/16167) +- [@gokay-ai](https://github.com/gokay-ai) made their first contribution in [#16039](https://github.com/LibreChat-AI/LibreChat/pull/16039) +- [@simpleqt](https://github.com/simpleqt) made their first contribution in [#16023](https://github.com/LibreChat-AI/LibreChat/pull/16023) +- [@shukiv](https://github.com/shukiv) made their first contribution in [#16454](https://github.com/LibreChat-AI/LibreChat/pull/16454) + +**Full Changelog**: [v0.8.7...v0.8.8](https://github.com/LibreChat-AI/LibreChat/compare/v0.8.7...v0.8.8) diff --git a/content/docs/configuration/librechat_yaml/object_structure/agents.mdx b/content/docs/configuration/librechat_yaml/object_structure/agents.mdx index 423a41958..0e822337f 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/agents.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/agents.mdx @@ -401,10 +401,20 @@ Configures the sharing scopes and optional execution backends for highly experim 'Optional deployment ceiling for personal worker enrollment. `enabled` defaults to true and `maxPerUser` defaults to 5.', '{ enabled: true, maxPerUser: 5 }', ], + [ + 'conversationMoves', + 'Object', + 'Opt-in owner-authorized workspace transitions for saved conversations. `allowAttachDetach` additionally permits attaching or leaving an attached workspace.', + 'Disabled', + ], ]} /> -Attached Bash environments also accept `userConfig.bash.maxQueueWaitMs`, which controls how long a request may wait for workspace capacity. The default and maximum are `300000` milliseconds (5 minutes). Set it to `0` to disable client retries after the initial admission attempt; it does not cancel work that is already admitted or running. +Attached environments accept `environments[].configSchema.limits.maxQueueWaitMs`, which controls how long a request may retry waiting for workspace capacity. The default and maximum are `300000` milliseconds (5 minutes). Set it to `0` to disable client retries after the initial admission attempt; it does not cancel work that is already admitted or running. These fields belong under `configSchema.limits`, **not** `userConfig.bash`. + +`environments[].configSchema.limits.maxRequestTimeoutMs` optionally bounds the **total HTTP time for one workspace tool call**, including admission, execution, settlement, and delivery. It accepts `1` through `610000` ms, but the config rejects budgets too small to leave any command execution time after admission and the 10-second settlement/delivery reserve. Without it, admission still has a 30-second budget per attempt; `maxQueueWaitMs` remains a separate retry horizon. **Do not enable longer admission** until every LibreChat API replica understands this field, the Code API route honors per-request queue allowances, and the shortest timeout across the live proxy/ingress path has been measured. An expired mutation may have completed on the worker, so LibreChat does not retry an ambiguous timeout. + +With a total request budget, `environments[].configSchema.limits.minCommandAdmissionMs` reserves time for a command to enter the worker before execution starts. The default is `10000` ms; set `1000`โ€“`300000` ms. The request budget must **exceed** this allowance plus 10000 ms of settlement/delivery grace; without a total budget, the setting has no effect. The Bash execution limit advertised to an Agent is the smaller of its configured or upstream ceiling and the time left after those reserves. For example, a 90000 ms request budget with an 80000 ms command ceiling and the default reserve advertises at most a 70000 ms command. ```yaml filename="endpoints / agents / statefulCodeSessions" statefulCodeSessions: @@ -437,6 +447,16 @@ statefulCodeSessions: configSchema: limits: maxCommandTimeoutMs: 120000 + # Before enabling, verify Code API queue allowances and the live proxy deadline. + # maxRequestTimeoutMs: 160000 + # minCommandAdmissionMs: 10000 + # maxQueueWaitMs: 300000 + # After upgrading Code API and opting in the worker with --linked-worktree-lanes: + # workspaces: + # linkedWorktrees: true + # Optional: require exact matching even on workers supporting tolerant edits. + # edits: + # tolerantMatching: false permissions: fileWrite: allowed: [allow, ask, deny] @@ -451,6 +471,16 @@ statefulCodeSessions: `allowedEnvironments` is required whenever the block is present and must include at least one workspace scope. Omit the entire block to allow all three scopes and continue routing stateful work through [`LIBRECHAT_CODE_BASEURL_STATEFUL`](/docs/configuration/dotenv#stateful-code-interpreter-endpoint). The personal default and Agent Builder only permit allowed values. If an administrator tightens the policy, a saved personal default remains visible but disabled, and new Agents use the first allowed scope. Existing enabled Agents retain their saved scope, but a now-disallowed scope fails closed at runtime until the Agent is reconfigured. +`conversationMoves.enabled: true` lets the conversation owner explicitly move a sealed attached workspace to a compatible environment and recover a missing workspace without replacing chat history or restoring old workspace files. To additionally allow a saved chat to **attach** a workspace or **leave** one for normal chat, set `conversationMoves.allowAttachDetach: true`. Both switches are off by default; enabling moves alone retains move-only behavior. Upgrade **all** API replicas, then enable [`CODE_ENVIRONMENT_DECISION_VERSION=1`](/docs/configuration/dotenv#code-interpreter) before opting in. Ownership, target access, active work, and current policy are rechecked at the transition; a running generation cannot be moved. + +```yaml filename="endpoints / agents / statefulCodeSessions / conversationMoves" +statefulCodeSessions: + allowedEnvironments: ['user', 'agent-user', 'conversation'] + conversationMoves: + enabled: true + allowAttachDetach: true +``` + `principalWorkers` controls self-service enrollment for personal attached workers. Omitted values resolve to `enabled: true` and `maxPerUser: 5`; set `enabled: false` or `maxPerUser: 0` to stop new enrollment. The limit counts every registered personal environment for that user across configured control planes, including offline workers. Lowering the limit or disabling enrollment does not revoke existing environments. Deployment YAML is the hard ceiling. A role, group, or user configuration override may disable enrollment or lower `maxPerUser`, but cannot raise the deployment value. A user sees pairing-enabled control planes only when the effective limit is greater than zero, [`pairing.allowPrincipalWorkers`](#statefulcodesessions) is enabled on that control plane, principal authentication is available, and the user has Code Environment management permission. @@ -464,7 +494,9 @@ When `environments` is non-empty, every entry requires a unique `id`, a display - `pairing` is optional and valid only for deployment-owned `attached` entries. `pairing.workerId` identifies an operator-managed worker to enroll, while `pairing.allowPrincipalWorkers: true` lets authorized users enroll owner-bound workers against that control plane. At least one of those fields is required when `pairing` is present. - `pairing.tokenEnv` names the environment variable containing the bridge administrator token; it never contains the token itself. Pairing requires HTTPS except for loopback development. - `configSchema.permissions` optionally lets authorized owners choose `fileWrite` and `commandExecution` policy for personal environments under **Settings > Code environments**. Each field requires a non-empty `allowed` list containing `allow`, `ask`, and/or `deny`; `default` is `ask` when omitted and must appear in `allowed`. LibreChat rejects stored values outside the administrator's list. -- `configSchema.limits.maxCommandTimeoutMs` sets the largest Bash timeout the model may request for that environment. It accepts `1` through `300000` ms; omission preserves the 30-second default. This is a deployment ceiling and is not user-configurable. +- `configSchema.limits.maxCommandTimeoutMs` sets the largest Bash timeout the model may request for that environment. It accepts `1` through `300000` ms; omission preserves the 30-second default. With a total request budget, the advertised command timeout also fits the remaining time after command admission, settlement, and delivery. This is a deployment ceiling and is not user-configurable. +- `configSchema.workspaces.linkedWorktrees: true` enables per-worktree scheduling only for attached workspaces advertising `git_linked_worktree`; omission keeps all requests in the checkout's root lane. Upgrade LibreChat **before** a worker advertises this scope, deploy a Code API supporting linked-worktree lanes, then start the worker with `--linked-worktree-lanes` before enabling the YAML setting. File operations targeting a path inside `.worktrees/` and Bash commands with a `cwd` there use that lane and return checkout-relative paths. Commands that `cd` inside their command text, checkout-root operations, conversation workspace instances, and environment actions stay root-scoped. +- `configSchema.edits.tolerantMatching` permits whitespace-tolerant fallback by default on attached workers advertising `tolerant_match`; set it to `false` to require exact matching, including protected edit previews. Matching must remain unique unless the edit explicitly sets `replace_all`. Older workers receive no new matching fields; attached `replace_all` is refused before dispatch unless the worker advertises it. These capabilities require compatible Code API and worker builds implementing [Code Interpreter #271](https://github.com/LibreChat-AI/code-interpreter/pull/271). - Do not configure `settings` in deployment YAML. LibreChat supplies that request-scoped field from the authenticated owner's server-validated preferences. - Only file-write and command-execution policy is user-configurable. Isolation, networking, mounts, privileged execution, ingress, egress, and secrets remain administrator-controlled. - If both top-level `workerId` and `pairing.workerId` are present, they must match. An entry with `allowPrincipalWorkers: true` and neither worker ID is pairing-only: it is omitted from execution selectors and cannot set `default: true`. @@ -485,6 +517,12 @@ Configures the trusted internal origin used by Agent event delivery. Most deploy 'Overrides the current process bound listener for trusted internal trigger admission. Use only when delivery must traverse another trusted HTTP origin.', '', ], + [ + 'idlePolling', + 'Object', + 'Caps idle MongoDB recovery scans and waiting completion rechecks. Local events can wake a scan sooner.', + 'See defaults below', + ], ]} /> @@ -499,6 +537,17 @@ Bound child continuations are automatic. Older `childTurns`, `completionWakeups` Leave `selfUrl` unset for the normal bound-listener path. Set it only when trusted internal trigger admission must traverse another HTTP(S) origin, such as a TLS front door. `AGENT_TRIGGERS_SELF_URL` remains a compatibility fallback when this field is omitted. See [Agents API events](/docs/features/agents_api#agent-events) and [Automatic Parent Continuation](/docs/features/subagents#automatic-parent-continuation). +`eventDriven.idlePolling` caps per-replica recovery polling when nothing is ready: `deliveryMaxIntervalMs` defaults to `15000` (valid `1000`โ€“`300000`), `queuedTurnMaxIntervalMs` and `maintenanceMaxIntervalMs` each default to `120000` (valid `30000`โ€“`300000`), and `completionWaitMaxIntervalMs` defaults to `60000` (valid `5000`โ€“`300000`). The latter bounds rechecks while a background or Subagent result is pending or its parent turn is busy. Readiness events expedite delivery; these caps retain cross-replica and crash-recovery fallbacks rather than defining normal completion latency. + +```yaml filename="endpoints / agents / eventDriven / idlePolling" +eventDriven: + idlePolling: + deliveryMaxIntervalMs: 15000 + queuedTurnMaxIntervalMs: 120000 + maintenanceMaxIntervalMs: 120000 + completionWaitMaxIntervalMs: 60000 +``` + Event Actor detached Action completion is selected automatically from the built-in generation store. In-memory execution is process-local; Redis generation streams add durable restart recovery and replica handoff. No `librechat.yaml` switch or environment feature flag is required. See [Agent Event Runtime](/docs/configuration/dotenv#agent-event-runtime). ## backgroundTasks @@ -531,6 +580,12 @@ Controls whether supported completed background tools and detached Subagents aut 'Maximum completed background results delivered in one continuation batch. Valid values are 1 through 16.', '8', ], + [ + 'shutdownInterruptGraceMs', + 'Integer', + 'Graceful-shutdown wait after interrupting a still-running background tool before recording an interrupted result. Valid values are 0 through 60000 ms.', + '5000', + ], ]} /> @@ -540,13 +595,14 @@ backgroundTasks: ordinaryToolCancellation: false completionResultMaxChars: 24576 completionResultBatchSize: 8 + shutdownInterruptGraceMs: 5000 ``` Automatic completion delivery is enabled even when this block is omitted. Set `completionWakeups: false` to require the Agent to collect every result through `check_background_task`. Set `ordinaryToolCancellation: true` to expose owner-scoped cancellation for ordinary background tools. Cancellation is cooperative, remains process-local, and keeps the task active and capacity reserved until the invocation settles. It does not cancel detached Subagents. -Ordinary background tool execution remains process-local and does not survive the loss of its worker process. Once a content-only terminal result is persisted, its delivery is durable and may continue on another replica. Tasks with live artifacts still require polling on the owning run. Detached Subagents keep their separate durable transcript and terminal-result path. Manual polling remains available for status, controls, and recovery in either mode. See [Background Tool Calls](/docs/features/agents#background-tool-calls) and [Automatic Parent Continuation](/docs/features/subagents#automatic-parent-continuation). +Ordinary background tool execution remains process-local. During a graceful shutdown, LibreChat waits within the shutdown budget for tasks to settle, then interrupts unfinished work and records a result; a sudden worker loss still cannot preserve the running task. Once a content-only terminal result is persisted, its delivery is durable and may continue on another replica. Tasks with live artifacts still require polling on the owning run. Detached Subagents keep their separate durable transcript and terminal-result path. Manual polling remains available for status, controls, and recovery in either mode. See [Background Tool Calls](/docs/features/agents#background-tool-calls) and [Automatic Parent Continuation](/docs/features/subagents#automatic-parent-continuation). ## toolApproval diff --git a/content/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx b/content/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx index 1e4301c1c..6bdcec286 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/custom_endpoint.mdx @@ -82,6 +82,26 @@ endpoints: name: 'Mistral' ``` +## tenantId + +Optional tenant scope for a YAML custom endpoint. Omit `tenantId` to preserve deployment-wide availability. With a value, the endpoint, its deployment-managed credentials, and model specs referring to it are available only in that tenant's effective configuration. The authenticated request tenant takes precedence over a potentially stale tenant ID on the user record. Requests without a tenant do not receive scoped endpoints. + +The value must be an existing tenant's exact ID, between 1 and 128 characters, using only letters, digits, hyphens, underscores, or periods. Whitespace and the reserved `__SYSTEM__` sentinel are rejected. This field selects a scope; it does not create a tenant or grant membership. Upgrade **every API replica before adding tenant-scoped YAML entries**. Older replicas do not enforce this new field and can still treat the endpoint as deployment-wide. + +```yaml filename="endpoints / custom / tenantId" +endpoints: + custom: + - name: 'Acme Gateway' + tenantId: 'acme' + apiKey: '${ACME_GATEWAY_API_KEY}' + baseURL: 'https://gateway.example.com/v1' + models: + default: ['gpt-6-sol'] + fetch: false +``` + +Scoping applies before configuration overrides and runtime augmentation, and remains enforced on cache hits, YAML-only reads, and fallback reads. A partial override cannot inherit another tenant's gateway credentials. If filtering removes the last model spec, normal model controls are restored unless explicit YAML or database interface settings override them. Unscoped endpoints remain available as before. + ## apiKey **Key:** diff --git a/content/docs/configuration/librechat_yaml/object_structure/interface.mdx b/content/docs/configuration/librechat_yaml/object_structure/interface.mdx index d7d409fd4..6fedec8ad 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/interface.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/interface.mdx @@ -13,6 +13,7 @@ These are fields under `interface`: - `privacyPolicy` - `termsOfService` - `modelSelect` +- `agentSelectorLimit` - `parameters` - `contextUsage` - `contextCost` @@ -86,6 +87,7 @@ interface: ## Introduction Welcome to LibreChat! modelSelect: false + agentSelectorLimit: 10 parameters: true contextUsage: true contextCost: true @@ -724,6 +726,15 @@ interface: public: false ``` +## agentSelectorLimit + +Limits the unsearched Agents panel selector to `10` Agents by default. Set an integer from `1` through `100` to change how many are listed before the user starts typing. Searching still reaches all accessible Agents; the limit is not an access-control setting. + +```yaml filename="interface / agentSelectorLimit" +interface: + agentSelectorLimit: 10 +``` + ## remoteAgents Controls access to the Agents API (OpenAI-compatible and Open Responses API endpoints), which allows external applications to interact with LibreChat agents programmatically via API keys. diff --git a/content/docs/configuration/librechat_yaml/object_structure/mcp_servers.mdx b/content/docs/configuration/librechat_yaml/object_structure/mcp_servers.mdx index b8328e479..927e7ef6c 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/mcp_servers.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/mcp_servers.mdx @@ -420,6 +420,8 @@ requestHeaders: custom_header: 'X-API-Key' ``` +For UI-created, shared servers using `apiKey.source: user`, saved keys are bound to the normalized request destination. Changing the URL path or query, proxy, transport, authorization format/header, or configured OAuth client/destination requires users to enter new keys; equivalent or cosmetic edits preserve them. Existing legacy keys keep working on their unchanged boundary. Only currently declared credential variables can be substituted, including in `requestHeaders`; an injected old generated name cannot reuse its key. Complete the upgrade on **every API replica**, including configuration writers. See [Credential Variables for UI-Created Servers](/docs/features/mcp#credential-variables-for-ui-created-servers) for the existing key-entry flow. + #### `iconPath` - **Type:** String (Optional) @@ -624,6 +626,8 @@ See [OpenID Connect Token Reuse](/docs/configuration/authentication/OAuth2-OIDC/ When `token_exchange_method` and `token_endpoint_auth_methods_supported` are both omitted for a preconfigured client secret, LibreChat allows up to five seconds for protected-resource and authorization-server metadata discovery. It uses advertised capabilities only when the discovered token endpoint exactly matches the configured `token_url`; discovery cannot redirect the configured client credentials to another endpoint. Set `token_exchange_method` explicitly when a provider does not publish usable metadata or needs a forced method. +Server-side OAuth discovery, registration, token, and revocation HTTP requests do **not** follow redirects, even if the original URL is allowed. Configure the provider's final endpoint directly when it redirects. Private IP-literal destinations are blocked unless explicitly permitted by the administrator's trusted host or exact address-and-port policy. This restriction applies to server-side OAuth HTTP requests; it does not prevent the user's browser from completing the normal authorization-page redirect. + #### `oauth_headers` - **Type:** Object (Optional) diff --git a/content/docs/configuration/librechat_yaml/object_structure/web_search.mdx b/content/docs/configuration/librechat_yaml/object_structure/web_search.mdx index f2b4cca24..de4156dca 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/web_search.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/web_search.mdx @@ -85,6 +85,12 @@ This field is an SSRF exemption list, not a strict allowlist. Public destination LibreChat automatically exempts a configured HTTP(S) forward-proxy endpoint so it can be reached. When the proxy carries a request, it resolves the destination and must enforce destination egress itself. `NO_PROXY` can make a request direct, where LibreChat's connection guard still applies. The guard covers connections LibreChat opens to provider APIs; it cannot constrain a page URL that a third-party scraper receives as request data and fetches on its own infrastructure. +## Credential Ownership + +A user-provided Firecrawl, SearXNG, or Jina URL must not receive a server-owned API key. SSRF validation does not make a public user-selected endpoint safe to receive the deployment's credentials. Configure the URL and key together as administrator-owned settings, or let the user provide their own pair; SearXNG can also run without a key. + +If a saved user URL would otherwise be paired with the server's key, LibreChat ignores Firecrawl's optional URL and uses its default endpoint. SearXNG's instance URL is required, so that mixed-ownership configuration is not authenticated and the search tool is not initialized. For a self-hosted deployment using the server's key, configure `FIRECRAWL_API_URL` or `SEARXNG_INSTANCE_URL` alongside that key instead of relying on a user's saved URL. Private endpoints still need [`allowedAddresses`](#ssrf-protection-and-private-providers). + ## Search Providers ### searchProvider diff --git a/content/docs/configuration/pre_configured_ai/openai.mdx b/content/docs/configuration/pre_configured_ai/openai.mdx index f5d788aec..ef543fb9f 100644 --- a/content/docs/configuration/pre_configured_ai/openai.mdx +++ b/content/docs/configuration/pre_configured_ai/openai.mdx @@ -33,11 +33,14 @@ Until a user sets a key, the endpoint is visible but unusable for them. - When `OPENAI_API_KEY` is set to the actual API key value โ†’ as long as `OPENAI_MODELS` is left commented-out, it will do an API call to find out what models are available, which should include any new ones ```bash filename=".env" -OPENAI_MODELS=gpt-6-astra,gpt-5.6,gpt-5.6-terra,gpt-5.6-luna,gpt-5.5,gpt-5.5-pro,chat-latest,gpt-5.4,gpt-5.4-pro,gpt-5.4-mini,gpt-5.4-nano,gpt-5.3-codex,gpt-5.2,gpt-5,gpt-5-codex,gpt-5-mini,gpt-5-nano,o3-pro,o3,o4-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o3-mini,o1-pro,o1,gpt-4o,gpt-4o-mini +OPENAI_MODELS=gpt-6.1-sol,gpt-6-sol,gpt-6-luna,gpt-6-astra,gpt-5.6,gpt-5.6-terra,gpt-5.6-luna,gpt-5.5,gpt-5.5-pro,chat-latest,gpt-5.4,gpt-5.4-pro,gpt-5.4-mini,gpt-5.4-nano,gpt-5.3-codex,gpt-5.2,gpt-5,gpt-5-codex,gpt-5-mini,gpt-5-nano,o3-pro,o3,o4-mini,gpt-4.1,gpt-4.1-mini,gpt-4.1-nano,o3-mini,o1-pro,o1,gpt-4o,gpt-4o-mini ``` **Notes:** +- GPT-6.1 Sol (`gpt-6.1-sol`) joins the canonical OpenAI and Agents default catalogs, not Assistants. Until explicit entries are added, it inherits GPT-6 Sol's context/output limits and pricing; these are family fallbacks, not independently confirmed GPT-6.1 pricing. +- GPT point releases with no matching per-release entry inherit their recognized family's context/output limits, pricing, and reasoning settings. Explicit entries take precedence. For example, `gpt-6.1-sol` no longer falls back to the generic 32K context budget. Undated point releases on native OpenAI can also inherit the family's Responses policy; dated snapshots retain wildcard-policy inheritance, Azure stays deployment-specific, and custom endpoints are not switched automatically. + - Internal OpenAI defaults include `gpt-6-astra` for the canonical OpenAI and Agents endpoints. LibreChat routes every Astra request through the Responses API because its tool calls are Responses-only, removes unsupported sampling parameters, and applies a 1,050,000-token context window with a 128,000-token maximum output. Astra is intentionally excluded from the Assistants, Azure Assistants, and Azure OpenAI default catalogs. - Internal OpenAI defaults include `gpt-5.6`, `gpt-5.6-terra`, and `gpt-5.6-luna`, followed by the existing GPT-5 catalog. `gpt-5.6` is the Sol tier alias; LibreChat assigns all three GPT-5.6 tiers a 1,050,000-token context window and 128,000-token maximum output. Deprecated legacy defaults are no longer included unless you add them explicitly with `OPENAI_MODELS`. - GPT-5.6 supports the Responses API-only `reasoning_mode` values `standard` and `pro`, plus `reasoning_context` values `auto`, `current_turn`, and `all_turns`. These can be configured in [model specs](/docs/configuration/librechat_yaml/object_structure/model_specs#reasoning_mode). diff --git a/content/docs/features/agents.mdx b/content/docs/features/agents.mdx index 3ebc76504..2a93ea112 100644 --- a/content/docs/features/agents.mdx +++ b/content/docs/features/agents.mdx @@ -208,7 +208,7 @@ Short progress text remains inside its parent phase. When the Agent begins a sub Files produced inside a phase remain visible in a media row beneath the collapsed card instead of being hidden inside it. Markdown image references using a bare filename, `/mnt/data/...`, or `sandbox:` path resolve to matching turn attachments. A file is omitted from the media row only when an inline image outside the collapsed phase resolves successfully, preventing duplicates without trusting broken references. -Completed tool cards show the elapsed wall-clock duration recorded for the run step. Stopped, cancelled, failed, and completed steps retain distinct statuses, including after a conversation reload. +Generic Agent and MCP tool cards distinguish **Preparing** (before SDK handoff, which may include approval or other waiting) from **Calling** (SDK handoff to result). Completed cards show both intervals; the call interval is not necessarily the upstream MCP or ClickHouse execution duration. Earlier saved messages and specialized Code, Bash, file, and memory cards retain a clearly labelled **Total elapsed** run-step duration. Stopped, cancelled, failed, and completed steps retain distinct statuses, including after a conversation reload. While a tool is running, expanded Bash, Execute Code, and File Authoring detail panes follow streamed commands, code, or preview content to the bottom. Scrolling upward pauses that follow behavior so the current reading position is preserved. diff --git a/content/docs/features/agents_api.mdx b/content/docs/features/agents_api.mdx index 7a8d9cba7..ed731c1c2 100644 --- a/content/docs/features/agents_api.mdx +++ b/content/docs/features/agents_api.mdx @@ -264,6 +264,8 @@ To continue, send a new request whose `input` replays the returned `function_cal Caller tool names may contain letters, numbers, underscores, and hyphens. Names must be unique and cannot replace a server-provided tool. A caller-executed tool must be the only tool selected in its turn; if the model mixes it with server-executed tools, LibreChat asks the model to retry the caller tool by itself. +For LibreChat-executed Agent tools, both headless inference endpoints enforce an enabled [`endpoints.agents.toolApproval`](/docs/configuration/librechat_yaml/object_structure/agents#toolapproval) policy, including `deny`, `ask`, and programmatic hooks. These calls have no interactive approval/resume channel: `deny` and `ask` block the tool instead of opening an approval prompt. Configure explicit allows only for tools the API client should be able to run unattended; when the policy is disabled, its approval hooks do not run. Caller-executed function tools remain the caller's responsibility. + ## Agent Events Agent Events let an authenticated controller or source adapter deliver durable work to an Agent. Event delivery is a beta capability and its request, response, and runtime behavior may change. diff --git a/content/docs/features/code_interpreter.mdx b/content/docs/features/code_interpreter.mdx index 28cd5e566..48ff7b6a0 100644 --- a/content/docs/features/code_interpreter.mdx +++ b/content/docs/features/code_interpreter.mdx @@ -41,7 +41,7 @@ Execute code in multiple programming languages: - Secure file management - Session-based file organization -LibreChat restores referenced conversation files into the current Code Interpreter environment before an Agent run. If every required Code Interpreter file fails recovery, the run stops before model invocation and asks the user to reattach the files rather than continuing with stale references. +LibreChat restores referenced conversation files into managed Code Interpreter environments before an Agent run. If every required Code Interpreter file fails recovery, the run stops before model invocation and asks the user to reattach the files rather than continuing with stale references. In a selected attached workspace, chat uploads are **not** copied into the user's workspace, and workspace file and Bash tools cannot open them there. If the worker advertises Programmatic Bash with file relay, that tool instead sees staged uploads under `$LIBRECHAT_CODE_DATA_DIR` for the duration of its run. Code API uploads recover from `429` rate limits by honoring `Retry-After`, reopening the source stream for each attempt, and sharing a bounded wait budget. Administrators can tune per-user, per-route recovery with [`codeApiUploadConcurrency` and `codeApiMaxRetryWaitMs`](/docs/configuration/librechat_yaml/object_structure/agents#code-api-upload-recovery). @@ -70,7 +70,7 @@ During a programmatic execution, expand the Code Interpreter card to see a live ### Background Code Execution -Background execution lets an Agent dispatch long-running code or shell work and continue the conversation. For saved Agents, supported content-only completions are delivered automatically in a follow-up continuation by default. `check_background_task` remains available for explicit status, control, live artifacts, and recovery. In LibreChat chat, when the work finishes, stdout and generated files appear on the original code call and are persisted for subsequent turns. +Background execution lets an Agent dispatch long-running code or shell work and continue the conversation. For saved Agents, supported content-only completions are delivered automatically in a follow-up continuation by default. `check_background_task` remains available for explicit status, control, live artifacts, and recovery. In LibreChat chat, when the work finishes, stdout and generated files appear on the original code call and are persisted for subsequent turns. Background completions and explicit checks render task cards with status, delivery state, and readable results; the exact original result remains available to copy. The chat header groups running and recent tasks and offers individual or stop-all controls when permitted by the deployment's cancellation policy. This feature is opt-in at the deployment level. Add `run_in_background` alongside `execute_code` in the [Agents endpoint capabilities](/docs/configuration/librechat_yaml/object_structure/agents#capabilities), then enable Code Interpreter on the agent. Code execution and shell calls become background-eligible automatically; turn off **Background execution** in the Code Interpreter tool settings when an agent should opt out. The model still decides per call whether to dispatch eligible work in the background. @@ -103,7 +103,7 @@ This feature is opt-in. Enable `execute_code` and `stateful_code_sessions` in th Stateful requests fail closed when the selected environment is missing, inaccessible, or incompatible; LibreChat does not send them to `LIBRECHAT_CODE_BASEURL` or silently choose another named backend. When no named environments are configured, `LIBRECHAT_CODE_BASEURL_STATEFUL` remains the stateful route. Stateless agents continue using the normal endpoint. LibreChat also sends `X-CodeAPI-Expected-Profile: stateful`, so the dedicated service must advertise the `stateful` profile. -Stateful and stateless sessions do not share a live workspace. The stateful workspace may reset at any time, regardless of its selected scope. Save important outputs under `/mnt/data`, and do not otherwise rely on session state as durable storage. +Stateful and stateless sessions do not share a live workspace. The stateful workspace may reset at any time, regardless of its selected scope. In managed Code Interpreter environments, save important outputs under `/mnt/data`, and do not otherwise rely on session state as durable storage. An attached workspace is a separate worker-owned directory; uploads are not placed there by default. Files authored by stateful `create_file` and `edit_file` calls appear on the assistant message under an expandable **Workspace changes** row. It lists each unique changed path for that response and provides an authenticated download action. Downloads use LibreChat's persisted file flow when available and a secure Code Interpreter fallback otherwise. The row is a record of authored outputs, not a durable workspace snapshot; stateless outputs continue to appear as regular inline attachments. @@ -123,11 +123,27 @@ Personal environments are bound to the authenticated user and tenant, protected Agents using an attached workspace can list its directory tree, read files, search file contents, create or edit files, and run Bash on the selected worker. File citations use workspace-relative paths, authored files appear in the response's **Workspace changes** row, and tool failures preserve the worker's bounded HTTP diagnostics. An Agent can also store a per-Agent Git name and email for commits created in that workspace; these values configure authorship only and do not provide repository credentials. -An attached worker advertises the workspace roots it makes available. The composer lets the user select one workspace for each attached environment reachable through the Agent or its Subagents; a single unambiguous workspace is selected automatically for a new conversation. LibreChat stores these selections on the conversation, revalidates them against the live worker before execution, and keeps them fixed through approval pauses and resumed runs. Sending is blocked when a required selection is missing or unavailable, and LibreChat never silently substitutes another workspace. At the start of a run, LibreChat can load repository instructions from the selected workspace so the Agent follows that repository's guidance; administrators can bound discovery with [`repositoryInstructions.timeoutMs`](/docs/configuration/librechat_yaml/object_structure/agents#repositoryinstructions). Native file and Bash workspace tools can use an advertised root even when the worker does not support reusable runtime sessions. Attached Programmatic Bash is currently unavailable because that tool cannot carry the selected workspace identity; workspace-aware Bash remains available directly. **Stop** cancels a signal-aware in-flight BYOM command without invalidating the workspace for later commands; detached work retains its separate cancellation lifecycle. +An attached worker advertises the workspace roots it makes available. The composer lets the user select one workspace for each attached environment reachable through the Agent or its Subagents; a single unambiguous workspace is selected automatically for a new conversation. LibreChat stores these selections on the conversation, revalidates them against the live worker before execution, and keeps them fixed through approval pauses and resumed runs. Sending is blocked when a required selection is missing or unavailable, and LibreChat never silently substitutes another workspace. At the start of a run, LibreChat can load repository instructions from the selected workspace so the Agent follows that repository's guidance; administrators can bound discovery with [`repositoryInstructions.timeoutMs`](/docs/configuration/librechat_yaml/object_structure/agents#repositoryinstructions). Native file and Bash workspace tools can use an advertised root even when the worker does not support reusable runtime sessions. Workspace-aware Programmatic Bash is available on compatible Code API and worker builds when the Agent's programmatic-tool configuration permits it, the authorized attached worker is ready and advertises `programmaticLanguages: ['bash']`, and both the selected workspace and worker allow `execute_command`. LibreChat passes the server-validated workspace ID and conversation workspace-instance ID, when present, to the programmatic tool; model arguments cannot replace that selection. Without these capabilities, Programmatic Bash is disabled; use direct Bash for workspace-aware commands. When the worker supports file relay, chat uploads are staged separately under `$LIBRECHAT_CODE_DATA_DIR` for the programmatic run, not copied into the selected workspace. **Stop** cancels a signal-aware in-flight BYOM command without invalidating the workspace for later commands; detached work retains its separate cancellation lifecycle. For an attached execution environment, the Agent Builder can set a **Workspace default** to one currently advertised root. It is validated against that attached environment and used to initialize new conversations for that Agent. Choose **Last used** to use the signed-in user's browser-local preference for that Agent and environment; it is only a convenience hint, never an authorization grant or conversation binding. Changing the execution environment clears an explicit default, and a saved root that is no longer advertised remains visible but cannot be selected until it is reconfigured. -Attached Bash uses a 30-second timeout by default. An environment can expose a larger model-requestable budget with [`configSchema.limits.maxCommandTimeoutMs`](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions), up to the five-minute protocol ceiling. The requested timeout never exceeds the deployment limit. Administrators can separately bound capacity retries with [`userConfig.bash.maxQueueWaitMs`](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions); this queue wait does not cancel an admitted or running command. +#### Saved-chat workspace changes + +By default a saved conversation's attached workspace decision is sealed. With [`statefulCodeSessions.conversationMoves.enabled`](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions) enabled, the owner can explicitly move to another authorized workspace or recover a missing workspace. Recovery preserves chat history, **not** the lost workspace's files. Setting `allowAttachDetach: true` additionally lets the owner attach a workspace to a saved non-coding chat or leave an attached workspace to continue normal chat; enabling moves alone does not enable attach/detach. These transitions cannot take place while a generation is running and are revalidated on the server. Upgrade all API replicas and enable `CODE_ENVIRONMENT_DECISION_VERSION=1` before opting in. Without the switches, existing move-only and sealed-conversation behavior is unchanged. + +Attached Bash uses a 30-second timeout by default. An environment can expose a larger model-requestable budget with [`configSchema.limits.maxCommandTimeoutMs`](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions), up to the five-minute protocol ceiling. The requested timeout never exceeds the deployment limit. Administrators can separately bound capacity retries with [`configSchema.limits.maxQueueWaitMs`](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions); this queue wait does not cancel an admitted or running command. To allow longer **individual** admission attempts, use `configSchema.limits.maxRequestTimeoutMs` only after the Code API honors the per-request queue allowance and the shortest proxy timeout on the live route is verified. The optional `configSchema.limits.minCommandAdmissionMs` reserves 10 seconds by default (valid 1โ€“300 seconds) for admission before a command. The advertised Bash timeout is fitted to the request budget after this reserve and another 10 seconds for settlement and delivery. This budget does not replace `maxQueueWaitMs`. + +#### Linked-worktree lanes + +Attached environments can opt into [per-worktree request scheduling](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions) with `configSchema.workspaces.linkedWorktrees: true`. First upgrade LibreChat, then deploy a compatible Code API bridge and start the worker with `--linked-worktree-lanes`; enable the YAML setting only after that worker advertises `git_linked_worktree`. Requests that structurally target `.worktrees//` use that worktree's lane without changing the checkout-relative paths shown to the Agent. For Bash, pass the worktree directory in the tool's `cwd` argument; running `cd .worktrees/` inside the command stays in the root lane. Checkout-root operations, environment actions, and conversation workspace instances also stay root-scoped. Without the opt-in, all requests keep their existing checkout-wide scheduling. + +#### Workspace edit matching and conflicts + +`edit_file` accepts `replace_all` at the top level or on individual entries in a multi-edit batch. Without it, each `old_text` must resolve to one location. Skill-file and managed-sandbox edits support replacement of all matches within LibreChat's size and match-count limits; attached workspaces require a worker advertising `replace_all` and reject unsupported requests before dispatch. + +On attached workers advertising `tolerant_match`, edits and protected previews try exact matching first, then whitespace-tolerant strategies for trailing whitespace, CRLF, indentation shifts, or normalized whitespace. Administrators can require exact matches with [`configSchema.edits.tolerantMatching: false`](/docs/configuration/librechat_yaml/object_structure/agents#statefulcodesessions). Success messages identify non-exact matching or multiple replacements. Failed batches are atomic: nothing is written, and LibreChat reports bounded per-edit reasons, counts, candidate line numbers, or a file-changed warning without forwarding arbitrary worker text or file excerpts. + +These attached-worker features require compatible Code API and worker builds implementing [Code Interpreter #271](https://github.com/LibreChat-AI/code-interpreter/pull/271). LibreChat only sends the new fields after capability negotiation. With older builds, the request format and matching behavior stay unchanged; upgrading LibreChat alone does not enable tolerant attached edits or `replace_all`. #### Attached-environment tool permissions diff --git a/content/docs/features/mcp.mdx b/content/docs/features/mcp.mdx index e06b3b393..777686015 100644 --- a/content/docs/features/mcp.mdx +++ b/content/docs/features/mcp.mdx @@ -165,7 +165,9 @@ Your new MCP server is also available in the Agent Builder, where you can add it When adding an MCP server through the UI, you can require users to provide their own API keys. In the Authentication section of the MCP Server Builder dialog, select "API Key" and check **"User provides key"**. Choose the header format (Bearer, Basic, or Custom) and save the server. -Behind the scenes, LibreChat automatically creates a `customUserVars` entry named `MCP_API_KEY` and configures the appropriate header template (e.g., `Authorization: Bearer {{MCP_API_KEY}}`). Each user provides their own key through the MCP Tool Select Dialog when configuring an agent โ€” the same UI used for [YAML-defined `customUserVars`](#user-provided-credentials). +Behind the scenes, LibreChat creates a destination-bound `customUserVars` entry named `MCP_API_KEY_` and configures the matching authentication header. The name is managed automatically; users still enter their key in the MCP Tool Select Dialog or MCP Settings panel. Existing servers may retain the legacy `MCP_API_KEY` name while their request boundary is unchanged. This uses the same key-entry UI as [YAML-defined `customUserVars`](#user-provided-credentials). + +Changing a UI-created server's URL (including path or query), proxy, transport, authorization format, custom auth header, or configured OAuth client/destination requires each user to enter a key for the new boundary. Old saved keys are not forwarded to that replacement destination. Cosmetic edits, equivalent normalized URLs, and fragment-only outbound URL edits preserve the existing key. Shared servers can resolve only credential variables declared by their current configuration, so an editor cannot reference an old generated name to recover a previous key. No bulk credential migration is needed. Upgrade **every API replica**, including replicas serving server-edit requests, before relying on this protection; an older writer can still recreate an unbound configuration. When an administrator or user API key is configured, LibreChat treats the server as API-key authenticated and skips OAuth auto-detection. An explicit OAuth configuration still takes precedence. If a UI-created API-key server was saved by an older LibreChat version and remains stuck in **OAuth Required**, edit and save the server once so its stored connection metadata is refreshed. diff --git a/content/docs/features/web_search.mdx b/content/docs/features/web_search.mdx index da9c2f9d5..a466d69df 100644 --- a/content/docs/features/web_search.mdx +++ b/content/docs/features/web_search.mdx @@ -58,6 +58,8 @@ To get started with web search, configure a search provider and scraper. Most pr - Users will be prompted to enter the required API keys when they first use the web search feature - They can choose which search provider (Serper, SearXNG, Tavily, or Keenable), scraper, and reranker service (Jina, Cohere, or none) to use +User-supplied Firecrawl and SearXNG URLs cannot be paired with the deployment's API key. Supply your own URL/key pair, or have an administrator configure both. Firecrawl otherwise ignores the optional user URL and uses its default endpoint; SearXNG cannot initialize that mixed-ownership configuration because its URL is required. Keyless SearXNG remains supported. See [Credential Ownership](/docs/configuration/librechat_yaml/object_structure/web_search#credential-ownership). + ## Obtaining API Keys Each enabled external service requires its own API key. Here's how to obtain them: