## LibreChat-AI/LibreChat — v0.8.8-rc2…v0.8.8-rc3

_257+ commits._

### Fixes
- **🧼 fix: Render Agent Description HTML Safely (#15951)** (942c959)
- **🫴 fix: Preserve Queued Follow-Ups Through Handoff (#15942)** (96cb5e7)
- **📖 fix: Preview Extracted Upload Text (#15946)** (5e2a2c6)
- **🔓 fix: Keep Code Approval Mode Selectable Mid-Run (#15938)** (d9c5d1c)
- **🎞️ fix: Deliver Opted-In Custom Endpoint Media Safely (#15937)** (2f8bc3d)
- **🛅 fix: Preserve Agent Management Upload IDs (#15840)** (ec1304f)
- **👯 fix: Reject Duplicate Tool Approval Identities (#15933)** (b1f6f6d)
- **📫 fix: Route Azure Astra Through Responses API (#15845)** (27acf97)
- **🗯️ fix: Give Failed Turns Actionable Guidance (#15896)** (f077e8c)
- **🍵 fix: Support Renewable MCP Credentials for Schedules (#15908)** (345cf88)
- **🧷 fix: Keep a Failed Summary From Bounding the Conversation History (#15913)** (b204216)
- **👑 fix: Elect a Single Expired-File Sweeper (#15909)** (7e05c48)
- **🚛 fix: Move Sealed Chats to New Code Environments (#15902)** (4216de4)
- **📐 fix: Accept Custom WIDTHxHEIGHT Sizes in OpenAI Image Tools (#15904)** (3c39ea5)
- **🧾 fix: Count the Tool Results a Tool-Limit Stop Retains (#15893)** (e95e696)
- **🪧 fix: Emit the Configured-Footer Answer With the HTML Shell (#15886)** (8e6e6f0)
- **🧷 fix: Mark a Failed Compaction So Its Rerun Controls Stay Withheld (#15883)** (91e00bb)
- **💰 fix: Bill Stopped Agent Turns From Provider Usage (#15889)** (f6335cb)
- **🪟 fix: Opaque Header Controls Over the Chat Gradient (#15894)** (c640d80)
- **🪢 fix: Withhold the Editor's Rerun Where No User Turn Can Be Replayed (#15887)** (566e0a8)
- **🏦 fix: Reserve Credits for In-Flight Requests (#15879)** (696bcb6)
- **🏷️ fix: Keep a Configured Sender Label From Revealing the Model on Hover (#15489)** (d6f8b2e)
- **🧿 fix: Bind Login Flows to the Browser That Started Them (#15880)** (9cf33cc)
- **🫂 fix: Scope People Picker Searches to Permitted Types (#15878)** (424d559)
- **🛬 fix: Land MCP OAuth Callbacks on Waiting Connections (#15876)** (3f2e477)
- **💤 fix: Preserve Dormant Workspace Bindings (#15877)** (17c7b30)
- **🔎 fix: Enforce WEB_SEARCH Role Permission on Agents (#15875)** (74fa60c)
- **🪂 fix: Release Stalled MCP Catalog Recovery Without Dropping Refreshed Tokens (#15871)** (2e1ccbb)
- **📇 fix: Stop an MCP Credential Refresh From Fencing Its Own Catalog Recovery (#15865)** (037b033)
- **🪢 fix: Recover a Failed MCP Server Once When Reinspections Overlap (#15867)** (ddd2dd8)
- **💠 fix: Paint Native Tool Verification Badges (#15862)** (246e7e5)
- **🔐 fix: Stop an MCP Credential Refresh From Fencing Its Own Connection (#15863)** (5a2c4a0)
- **🔣 fix: Encode Images From Storage Keys (#15851)** (bd08a36)
- **🧵 fix: Preserve Per-Message Inspection Budgets Through Provider Preparation (#15860)** (e7dea56)
- **🧲 fix: Match Directory Users to Existing Principals (#15855)** (f3e2bf2)
- **🧨 fix: Defuse Skill and Artifact Parsing Backtracking (#15856)** (fe351ee)
- **🥅 fix: Keep Tool Error Prefix Parsing In Bounds (#15857)** (7b71c3f)
- **Read OpenID flight state from primary database** — Fixed OpenID refresh flight queries to always read from the primary database instead of replicas, ensuring consistent state when resolving conflicts and finding flights. This prevents race conditions where stale data from secondary replicas could cause issues with lock acquisition. (1ef4aa9)
- **Fix file locator inspection per message** — Enhanced file locator inspection to work correctly on a per-message basis and improved diagnostic reporting across content protection checks. This ensures files attached to individual messages are properly validated throughout the system. (8f13845)
- **🔠 fix: Name Artifact Downloads After Their Titles (#15836)** (ab50601)
- **🧊 fix: Withhold Rerun Controls on Compaction Turns (#15797)** (afaf22f)
- **🏷️ fix: Model-Agnostic Hint for Short Skill Descriptions (#15833)** (523e800)
- **🔌 fix: Close Leaked HTTP Server in Server Specs (#15821)** (0354db3)
- **🪢 fix: Keep One Code File per Sandbox Destination (#15817)** (e49cb79)
- **🥅 fix: Keep Mobile Composer Actions In Bounds (#15825)** (e1cc080)
- **🛖 fix: Restore Saved Attached Workspaces (#15811)** (d510b6f)
- **📯 fix: Propagate Host Cancellation Into API Tools (#15812)** (a785a61)
- **🈳 fix: Treat Blank Mongo Index Settings as Unset (#15809)** (b356c3d)
- **🎒 fix: Carry Subagent Identity Past Streaming (#15795)** (03a42d6)
- **🛂 fix: Back Off MCP OAuth Discovery (#15783)** (6965f8e)
- **🛎️ fix: Preflight MCP Readiness for Scheduled Chats (#15782)** (442d477)
- **🕳️ fix: Clear Nullable Queue Anchor (#15794)** (ac2307b)
- **🛟 fix: Recover CodeAPI File Uploads After Throttling (#15784)** (65bb64b)
- **🫆 fix: Preserve Durable Parents for Queued Turns (#15787)** (f0c9dee)
- **🌳 fix: Guard Ambiguous BYOM Workspace Selection (#15785)** (6cb0499)
- **🔐 fix: Send One Code API Authentication Method (#15781)** (23a96bd)
- **🛑 fix: Preserve BYOM Foreground Cancellation Identity (#15777)** (66faf4c)
- **🪡 fix: Thread Stop Into BYOM Commands (#15772)** (b207530)
- **🪴 fix: Restore Native Workspace Selection (#15771)** (2c07e28)
- **🧿 fix: Patch gRPC xDS Denial of Service (#15769)** (8da4ae7)
- **🔢 fix: Normalize PDF Citation Page Numbers (#15731)** (fdaf4db)
- **🏠 fix: Keep MCP Caches Fresh on Demand (#15765)** (af6e97f)
- **🛗 fix: Add Tenant Index Upgrade Migration (#15767)** (dad20b1)
- **🗳️ fix: Recover Durable Background Tool Receipts (#15752)** (a353e11)
- **🗝️ fix: Load User Keys on Resumed Requests (#15749)** (639d606)
- **🧷 fix: Keep Ref Cleanup and Hold Consumer Handlers to the Frontmost Dialog (#15751)** (49b6e51)
- **🧍 fix: Accommodate BYOM Queue and Execution Budgets (#15750)** (1a6410a)
- **👯 fix: Collapse Radix Layer Packages to One Copy (#15742)** (fd229fe)
- **🪪 fix: Guard Null Avatar URLs in Social Login (#15747)** (5020dbd)
- **🫣 fix: Hide Scroll-to-Bottom Under Composer Panels (#15746)** (ab52730)
- **🟫 fix: Reject Invalid Hex Color Matches (#15744)** (57ebbe1)
- **🧘 fix: Settle Stale Response Parts (#15743)** (3bff323)
- **🛄 fix: Clear MCP Connection State Before Catalog Refresh (#15741)** (2577324)
- **⏳ fix: Separate Temporary and General Chat Retention (#15734)** (ab6cde0)
- **🫧 fix: Raise Nested Popovers Above Dialog Layers (#15738)** (5cd70ad)
- **🪫 fix: Gate Programmatic Bash on Stateful Worker Capabilities (#15726)** (968950a)
- **⛔ fix: Bind Tool Approvals to Generation Scope (#15724)** (ba12eaa)
- **🪹 fix: Attach Ready OAuth MCP Servers With Empty Catalogs (#15727)** (1dfefc3)
- **🩻 fix: Preserve Workspace Tool HTTP Diagnostics (#15723)** (1b51ec4)
- **🏠 fix: Preserve Stateful Deployment Default (#15719)** (6a4d227)
- **🪬 fix: Fence Agent Checkpoint Ownership and Cleanup Recovery (#15680)** (cdc3339)
- **🪫 fix: Recharge Direct OpenID MCP Bearer Sessions (#15704)** (f1bd854)
- **🧱 fix: Close MCP OAuth Teardown Races (#15716)** (8fa5963)
- **🫧 fix: Retire Cancelled MCP OAuth State (#15702)** (601ed07)
- **🎒 fix: Bound Agent Attachment Context (#15694)** (e370ce4)
- **🏰 fix: Enforce Platform Grants for Code Workers (#15700)** (dd5829e)
- **🧲 fix: Coalesce and Bound Code Environment Status Polls (#15701)** (911b632)
- **🧺 fix: Skip Priming Denied File Search Resources (#15699)** (29971f1)
- **🚧 fix: Gate File Search and Run Code by Role (#15691)** (a3fc3b9)
- **🥽 fix: Stop the DocumentDB Guard Flagging Mongoose's Document `$where` (#15686)** (45bb99a)
- **🪣 fix: Decode S3 Object Keys from URLs (#15426)** (ea3c61d)
- **🛬 fix: Land Early Steers on the Live Placeholder (#15692)** (1aa86a9)

### UI
- **Visual polish for composer and welcome** — Updated the temporary chat indicator to use an incognito icon, moved the model disclaimer to only appear on the landing page, fixed mobile composer spacing to reach screen edges, adjusted landing page disclaimer styling for better contrast, and improved empty prompts panel styling to match other panels. Also fixed composer positioning and spacing across navigation between welcome screen and conversations. (1bea7e4)

### Backend
- **📊 chore: bump Helm chart to 2.0.12 (#15950)** (1df4484)
- **🚚 ci: Make Image Publishing Owner-Agnostic Ahead of the Org Move (#15952)** (80f93a4)
- **🧷 feat: Carry Ask User Answers Past Compaction (#15944)** (dea7346)
- **🪂 feat: Opt-In Text Fallback for Files No Tool Can Read (#15940)** (2ffee7e)
- **⬆️ chore: bump agents to 3.8.7 (#15947)** (e32e9f3)
- **🕹️ feat: Run Declared Project Actions on Attached Workers (#15943)** (bc12fad)
- **🪓 ci: Cull Stale Codegraph Select Runs (#15939)** (1396946)
- **🏮 docs: Relight the Helm AI Setup Link (#15808)** (b88d70b)
- **🪧 feat: Unify Artifact Triggers as Tool Rows (#15915)** (16faadb)
- **📜 style: Scroll the Sidebar as One Surface (#15914)** (d8c953b)
- **🧵 ci: Keep a Floor of Two Jest Workers in CI (#15819)** (7fe9a45)
- **🎖️ chore: Promote Helm Chart to 2.0.11 (#15905)** (fa3dff1)
- **💉 chore: Upgrade `@azure/msal-node` to v5.6.0 (#15903)** (28cd3db)
- **🧪 test: Wait for the Durable Task Input Before Reserving a Child Control (#15901)** (14c5e8d)
- **🔁 feat: Retry OpenID Discovery After Startup Failures (#15899)** (854645f)
- **🎨 style: Color Image Tool Labels With the Activity Rows' Secondary Role (#15900)** (c2f3d0c)
- **🔡 style: Size Image Tool Labels Like Every Other Activity Row (#15898)** (f3991f2)
- **⏱️ ci: Cut the ESLint Config Sweep to the Rules That Can Regress (#15890)** (6e3295e)
- **🩹 ci: Invoke ESLint and Prettier Binaries Directly in Static Checks (#15884)** (1453258)
- **🧷 style: Sidebar Row Controls, Pinned Unpin Badge and Drag Rules (#15870)** (9bf51fc)
- **🚄 perf: Linearize Conversation Import Lineage (#15881)** (e43fed2)
- **🚀 v0.8.8-rc3 (#15859)** (e18606e)
- **🔭 feat: Conversation Trace Viewer (#15869)** (f43301f)
- **🖋️ feat: Seal Code Environment Choices Per Conversation (#15868)** (1163045)
- **🔠 feat: Render Safe Upstream Model Errors (#15837)** (19eb249)
- **📟 feat: Record Safe Upstream Model Failures (#15800)** (7a83b8f)
- **🦘 feat: Share Run-Scoped Files With Subagents (#15848)** (f25242d)
- **🧪 test: Restore Two Rotted Integration Suites and Run Every One in CI (#15866)** (fb13224)
- **🔎 feat: Filter and Sort the Sidebar Chats List (#15842)** (5b4ec6b)
- **🏡 feat: Remember Agent Workspace Defaults (#15843)** (1d45f5b)
- **Stop animating hidden code spinners** — Fixed performance issue where code execution spinners continued animating even when hidden from view. Also refactored quote selection updates to bypass React's rendering cycle, preventing unnecessary re-renders and improving responsiveness when selecting text. (767ee59)
- **🧮 feat: Surface Retained Tool-Message Context Usage (#15796)** (e2f5772)
- **🩻 feat: improve agent filter controls for insights (#15807)** (980f3ed)
- **📌 feat: Unified Pinned Section With Sidebar Drag Interactions (#15057)** (e75835e)
- **🥼 feat: Expose BYOM Cancellation Diagnostics (#15810)** (bee183e)
- **🧷 ci: Await durable finalization in conversation-management mock e2e (#15791)** (3cab71c)
- **🪔 feat: Expose Bounded Attached Bash Timeouts (#15776)** (9f311b8)
- **🪓 feat: Cancel Background Tool Invocations (#15773)** (559fd7d)
- **🧵 test: Type BYOM Cancellation Mock (#15774)** (eaed216)
- **🏕️ feat: Select Attached Code Workspaces (#15768)** (a8087ce)
- **📦 chore: bump npm audit packages and `@librechat/agents` to v3.8.5 (#15770)** (c79f13b)
- **📎 test: Verify Stateful Sandbox Upload Continuity (#14363)** (fed09da)
- **🧫 chore: Keep Jest Specs Out of Tool Discovery (#15766)** (0d85af0)
- **🚚 feat: Route Attachments and Provision Tools Lazily (#15763)** (ec15075)
- **👣 docs: Define CJS and Jotai Migration Triggers (#15756)** (e6376f6)
- **🧱 docs: Hold Module Boundaries, Configurable Levers and Injected Dependencies (#15754)** (49a3b71)
- **📐 docs: Set PR Description, Review and Completion Standards (#15753)** (2dd7ca4)
- **🧰 feat: Move Code Settings Into Run Code (#15722)** (f50c40e)
- **💠 style: Unify Code Approval With Composer Controls (#15721)** (6988921)
- **🏁 style: Align Streaming Elapsed Reading With Footer Start (#15720)** (25fcd12)
- **🛫 feat: Enable Full Access for BYOM Coding (#15718)** (5ca1093)
- **🧐 feat: Restore Interactive Tool Approval Review (#15717)** (6f05678)
- **🪗 feat: Compact Context in a Summarize-Only Turn (#15690)** (3e2a6f3)
- **🕓 style: Move the Queued-Message Hint Into a Hover Tooltip on the Clock Icon (#15706)** (21c03b7)
- **🪧 feat: Surface Conversation Code Approval Modes (#15703)** (4b3a6ea)
- **🧶 feat: Thread Conversation Code Approval Through Requests (#15698)** (3f27726)
- **🗝️ refactor: Prefer the Recorded Storage Key for Every Download Stream (#15695)** (58de776)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/LibreChat-AI/LibreChat?utm_source=github-action)._