diff --git a/content/changelog/v0.8.9.mdx b/content/changelog/v0.8.9.mdx new file mode 100644 index 000000000..51f8978fe --- /dev/null +++ b/content/changelog/v0.8.9.mdx @@ -0,0 +1,442 @@ +--- +date: 2026-11-12 +title: ๐Ÿš€ LibreChat v0.8.9 +description: Chat Projects, Slack Agents, Tool Search, new models, and account protection +version: '0.8.9' +--- + +## What's Changed + +This release follows [v0.8.9-rc1](/changelog/v0.8.9-rc1). Operator configuration changes in the release candidate are described in [Config v1.3.18](/changelog/config_v1.3.18). + +### ๐Ÿž๏ธ Highlights + +- Chat Projects with shared instructions and reference files +- Passkeys, email changes, and stronger account protection +- Deployment themes and polished chat controls, notifications, and right-to-left layouts +- Opt-in Slack Agents with linked accounts, approvals, and feedback +- Background Responses API with saved results, review, cancellation, and recovery +- MCP Apps, clearer tool approvals, and deferred system tools through Tool Search +- Highly experimental BYOM: machine enrollment, per-chat workspaces, attachment copies, and PR status +- Inline Ask User questions and more reliable pause, resume, stop, steer, and queue controls +- Recoverable Subagent transcripts and clearer background-task progress +- Langfuse prompts in the catalog, slash command, and Agent instructions +- GPT-6.1 Terra, Claude Fable 5.2, GPT Image 2.6 Sunburst/Flare, and restricted-access Mythos 5.2/GPT-6 Cyber +- Draft restoration, thinking settings, compaction recovery, and streaming Read Aloud +- Faster chat loading, deferred MCP UI/export libraries, and fewer composer re-renders +- Node.js 24.22.3 security updates and stronger request, auth, file, and tool safeguards + +### Upgrade Notes + +Slack Channels are opt-in and require a configured gateway, shared service credentials, and transaction-capable MongoDB. Shared Slack workspace setup additionally requires public HTTPS callbacks. Background Responses are separately enabled under `endpoints.agents.remoteApi.background.enabled` and require an Agent API key and durable storage/runtime support. Tool deferral requires the `deferred_tools` capability and a tool or model-spec deferral policy. GPT-6 Cyber requires approved provider access. Stateful Code sessions remain highly experimental and require compatible services. + +`SLACK_WORKSPACES_ENABLED=true` enables Channels, shared Slack apps, webhook transport, and background Responses together after deployment validation; it does not override explicitly disabled API-key authentication. Background Responses require transaction-capable MongoDB for terminal publication, but do not require a Slack gateway. `deferred_tools` is in the default capability list; tools still need a deferral policy. Mythos 5.2 requires provider verification and is absent from the default catalog. GPT Image 2.6 support does not change the `IMAGE_GEN_OAI_MODEL` default of `gpt-image-2.5-flare`. + +OpenTelemetry tool execution logs use the existing `OTEL_LOGS_ENABLED` pipeline. They report execution identity, outcome, and elapsed time without tool arguments, results, or error text. Rebuild images and recreate containers to pick up the Node.js security update. + +--- + +## Changes Since v0.8.9-rc1 + +### Configuration Changes Since RC1 + +The published [Config v1.3.18](https://www.librechat.ai/changelog/config_v1.3.18) entry describes the RC1 baseline. The following additions and behavior changes landed afterward. The app schema constant remains `1.3.18` at the audited source commit; this list does not assign an unpublished config version. + +| Area | Changes and defaults | +| --- | --- | +| Background Responses | `endpoints.agents.remoteApi.background.enabled: false`; `acknowledgementTimeoutMs: 10000` (100โ€“60000 ms). API-key auth and transaction-capable storage are required. | +| Slack Channels | `endpoints.agents.channels.enabled: false`; `transport: socket_mode`; `nativeSessions: false`; `lifecycleReactions: false`; `signatureToleranceSeconds: 300`; `socketReconnectDelayMs: 5000`. Shared workspace deployment uses webhook transport and UI-managed app credentials. | +| Shared Slack apps | `channels.slackApp.enabled: false`; `flowLifetimeMs: 600000`; `requestTimeoutMs: 10000`; `maxResponseBytes: 65536`. Gateway defaults: ingress concurrency 32, worker concurrency 4, discovery batch 32, polling 1000 ms. | +| Channel environment and deployment | `CHANNEL_SERVICE_TOKEN` (at least 32 characters), `CHANNEL_ID`, `CHANNEL_TENANT_ID`, Socket Mode `SLACK_APP_TOKEN`, shared setup `SLACK_WORKSPACES_ENABLED`/`SLACK_GATEWAY_URL`, `CHANNEL_GATEWAY_PORT`, and release-matched `LIBRECHAT_IMAGE_TAG`. Optional Compose overlays and Helm gateway deployment do not enable themselves. | +| Tool deferral | `modelSpecs.list[].deferLoading`: omitted/false, true for all eligible tools, or a list of equipped tool names/capabilities. Saved Agents use `tool_options..defer_loading`. Requires `deferred_tools`; orchestration tools remain loaded. | +| Prompt instructions | `endpoints.agents.instructions.langfuse.enabled: false`, separate from Langfuse prompt-catalog synchronization. | +| Browser limits | `clientLimits`: refresh 30000, TTS 60000, SharePoint 300000, CloudFront 15000 ms; upload concurrency 3. | +| Server budgets | `timeouts.directoryMs: 30000`, `toolsMs: 60000`, `speechMs: 300000`, `imageGenerationMs: 300000`; `imageFetchMs: 30000` now also bounds blob-storage reads. | +| Lookup concurrency | `permissionPrincipalLookups: 4`, `connectedAgentLoads: 4`, `mcpCatalogLookups: 4`, `skillNameLookups: 8`, `skillFileInspections: 4`, `resumeAgentLoads: 4`; each accepts 1โ€“32. | +| Spreadsheet parsing | `spreadsheetParsing.timeoutMs: 5000` (100โ€“60000 ms); `maxConcurrent: 2` (1โ€“8 per API process). | +| Files | `fileConfig.deletionRetryLimit: 5` persists discarded-upload retry counts across reloads. `fileConfig.stt.supportedMimeTypes` now takes effect; configure a speech provider separately. | +| Pagination and logs | `messages.maxPageSize: 1000` (1โ€“10000); `violationLog.maxEntries: 100`; `mcpSettings.oauthFailureRetentionMs: 86400000` (up to 30 days). | +| Interface | `landingFooter: true` now places the footer at page bottom; `composer` restores under-composer placement. `messageAuthor: always` also accepts `whenDifferent`. `analyticsConsent: true` may be disabled by deployments that handle consent themselves. | +| Telemetry | `telemetry.stackTraceLimit` accepts 1โ€“1000 frames; omitted, preserves the process default. Service-version precedence is `OTEL_SERVICE_VERSION` โ†’ `BUILD_COMMIT` โ†’ package version. Logs and request spans carry a config digest; tool lifecycle logs omit payloads. | +| Optional favorites storage | `persistence.favorites: mongo` by default; `postgres` requires PostgreSQL 16, explicit schema migration, offline import and verification, and coordinated cutover. This does not replace MongoDB or the RAG database. | +| Override ownership | Storage, browser limits, telemetry, management API, shared Slack-app configuration, and other operator-owned fields cannot be activated through stored Base/role/group/user overrides. Inspect applied/skipped config reports. | +| Account recovery | Password-reset credentials are emailed only; they are never displayed as a fallback. Configure email delivery. | + +Persistent references: [config structure](https://www.librechat.ai/docs/configuration/librechat_yaml/object_structure/config), [file configuration](https://www.librechat.ai/docs/configuration/librechat_yaml/object_structure/file_config), [model specifications](https://www.librechat.ai/docs/configuration/librechat_yaml/object_structure/model_specs), and [admin configuration](https://www.librechat.ai/docs/configuration/admin_panel). + +### โœจ Features + +- ๐Ÿฆ‚ feat: Add GPT-6 Cyber Support by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18023](https://github.com/LibreChat-AI/LibreChat/pull/18023) +- ๐Ÿšœ feat: Support Native PostgreSQL Tool Favorites by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18032](https://github.com/LibreChat-AI/LibreChat/pull/18032) +- ๐Ÿ–จ๏ธ feat: Add OpenTelemetry Tool Execution Logs by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18035](https://github.com/LibreChat-AI/LibreChat/pull/18035) +- โœจ feat: Polish Slack App and Agent Setup by [@dustinhealy](https://github.com/dustinhealy) in [#17982](https://github.com/LibreChat-AI/LibreChat/pull/17982) +- ๐Ÿ” feat: Add Admin-Assigned Slack Bot Managers by [@dustinhealy](https://github.com/dustinhealy) in [#17836](https://github.com/LibreChat-AI/LibreChat/pull/17836) +- ๐Ÿ“ฆ feat: Package Shared Slack Workspace Deployments by [@dustinhealy](https://github.com/dustinhealy) in [#17815](https://github.com/LibreChat-AI/LibreChat/pull/17815) +- ๐ŸŒ feat: Connect Organization Slack Workspaces to Agents by [@dustinhealy](https://github.com/dustinhealy) in [#17811](https://github.com/LibreChat-AI/LibreChat/pull/17811) +- ๐Ÿ”Œ feat: Add Tenant-Owned Slack Installation Storage and OAuth by [@dustinhealy](https://github.com/dustinhealy) in [#17810](https://github.com/LibreChat-AI/LibreChat/pull/17810) +- โ˜ธ๏ธ feat: Add Optional Channel Gateway Helm Deployment by [@dustinhealy](https://github.com/dustinhealy) in [#17786](https://github.com/LibreChat-AI/LibreChat/pull/17786) +- ๐Ÿณ feat: Publish Release-Matched Channel Gateway Images by [@dustinhealy](https://github.com/dustinhealy) in [#17784](https://github.com/LibreChat-AI/LibreChat/pull/17784) +- ๐Ÿณ feat: Add Optional Transactional Gateway Docker Setup by [@dustinhealy](https://github.com/dustinhealy) in [#17776](https://github.com/LibreChat-AI/LibreChat/pull/17776) +- ๐Ÿงฑ feat: Render Rich Agent Messages With Slack Block Kit by [@dustinhealy](https://github.com/dustinhealy) in [#17698](https://github.com/LibreChat-AI/LibreChat/pull/17698) +- ๐Ÿš€ feat: Run the Standalone Slack Channel Gateway by [@dustinhealy](https://github.com/dustinhealy) in [#17618](https://github.com/LibreChat-AI/LibreChat/pull/17618) +- ๐ŸŽจ feat: Render Slack Replies and Private Review Controls by [@dustinhealy](https://github.com/dustinhealy) in [#17617](https://github.com/LibreChat-AI/LibreChat/pull/17617) +- ๐Ÿ› ๏ธ feat: Add Slack Gateway Transport Adapters by [@dustinhealy](https://github.com/dustinhealy) in [#17616](https://github.com/LibreChat-AI/LibreChat/pull/17616) +- ๐Ÿ‘ค feat: Link and Revoke Personal Channel Accounts by [@dustinhealy](https://github.com/dustinhealy) in [#17615](https://github.com/LibreChat-AI/LibreChat/pull/17615) +- ๐Ÿ’ฌ feat: Configure Slack Connections in the Agent Builder by [@dustinhealy](https://github.com/dustinhealy) in [#17614](https://github.com/LibreChat-AI/LibreChat/pull/17614) +- โฏ๏ธ feat: Review and Stop Background Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17613](https://github.com/LibreChat-AI/LibreChat/pull/17613) +- ๐ŸŒ feat: Wire Responses and Channel Lifecycle APIs by [@dustinhealy](https://github.com/dustinhealy) in [#17611](https://github.com/LibreChat-AI/LibreChat/pull/17611) +- ๐Ÿ‘ feat: Record Feedback on Delivered Channel Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17610](https://github.com/LibreChat-AI/LibreChat/pull/17610) +- ๐Ÿ“จ feat: Coordinate Channel Delivery Through Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17609](https://github.com/LibreChat-AI/LibreChat/pull/17609) +- ๐Ÿ“Ž feat: Resolve Channel Attachments and Usage Summaries by [@dustinhealy](https://github.com/dustinhealy) in [#17608](https://github.com/LibreChat-AI/LibreChat/pull/17608) +- ๐Ÿ”— feat: Configure Channels and Link Participant Accounts by [@dustinhealy](https://github.com/dustinhealy) in [#17607](https://github.com/LibreChat-AI/LibreChat/pull/17607) +- ๐Ÿงฉ feat: Compose the Background Responses Host by [@dustinhealy](https://github.com/dustinhealy) in [#17606](https://github.com/LibreChat-AI/LibreChat/pull/17606) +- ๐Ÿ’พ feat: Persist and Continue Stored Agent Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17605](https://github.com/LibreChat-AI/LibreChat/pull/17605) +- ๐Ÿงต feat: Execute and Resume Background Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17602](https://github.com/LibreChat-AI/LibreChat/pull/17602) +- ๐Ÿ—ณ๏ธ feat: Retain Background Response Decisions by [@dustinhealy](https://github.com/dustinhealy) in [#17601](https://github.com/LibreChat-AI/LibreChat/pull/17601) +- ๐Ÿšฆ feat: Dispatch and Recover Background Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17600](https://github.com/LibreChat-AI/LibreChat/pull/17600) +- ๐Ÿ“Š feat: Preserve Response Accounting and History by [@dustinhealy](https://github.com/dustinhealy) in [#17599](https://github.com/LibreChat-AI/LibreChat/pull/17599) +- ๐Ÿ”‘ feat: Bind Agent API Keys to Source Authority by [@dustinhealy](https://github.com/dustinhealy) in [#17597](https://github.com/LibreChat-AI/LibreChat/pull/17597) +- ๐Ÿชช feat: Store Channel Connections and Account Links by [@dustinhealy](https://github.com/dustinhealy) in [#17596](https://github.com/LibreChat-AI/LibreChat/pull/17596) +- ๐Ÿ“ฌ feat: Persist Channel Events and Delivery Receipts by [@dustinhealy](https://github.com/dustinhealy) in [#17595](https://github.com/LibreChat-AI/LibreChat/pull/17595) +- ๐Ÿ—„๏ธ feat: Persist and Expire Background Responses by [@dustinhealy](https://github.com/dustinhealy) in [#17594](https://github.com/LibreChat-AI/LibreChat/pull/17594) +- โ˜„๏ธ feat: Add GPT Image 2.6 Flare Support by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18021](https://github.com/LibreChat-AI/LibreChat/pull/18021) +- โ˜€๏ธ feat: Add GPT Image 2.6 Sunburst Support by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18019](https://github.com/LibreChat-AI/LibreChat/pull/18019) +- ๐Ÿ‰ feat: Add Claude Mythos 5.2 Support by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18017](https://github.com/LibreChat-AI/LibreChat/pull/18017) +- ๐Ÿœ๏ธ feat: Add GPT-6.1 Terra Support by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18016](https://github.com/LibreChat-AI/LibreChat/pull/18016) +- ๐ŸฆŠ feat: Add Claude Fable 5.2 Support by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18015](https://github.com/LibreChat-AI/LibreChat/pull/18015) +- ๐Ÿ—‚๏ธ feat: Defer System Tools Behind Tool Search by [@danny-avila](https://github.com/danny-avila) in [#17864](https://github.com/LibreChat-AI/LibreChat/pull/17864) +- ๐ŸชŸ feat: Add Welcome Footer and Response Author Options and Tidy the Chat Chrome by [@berry-13](https://github.com/berry-13) in [#17879](https://github.com/LibreChat-AI/LibreChat/pull/17879) +- ๐Ÿ’ฌ feat: Show Ask-User Questions Inline in the Chat Instead of Over the Composer by [@danny-avila](https://github.com/danny-avila) in [#17839](https://github.com/LibreChat-AI/LibreChat/pull/17839) +- ๐Ÿงฉ feat: Export Popover Parts From @librechat/client by [@berry-13](https://github.com/berry-13) in [#17751](https://github.com/LibreChat-AI/LibreChat/pull/17751) +- ๐Ÿชช feat: Name the Build and Config in Telemetry, Configure Stack Depth, Keep Scoped Frames by [@danny-avila](https://github.com/danny-avila) in [#17515](https://github.com/LibreChat-AI/LibreChat/pull/17515) +- ๐Ÿ”— feat: Link Langfuse Prompts as Agent Instructions by [@AtefBellaaj](https://github.com/AtefBellaaj) in [#17294](https://github.com/LibreChat-AI/LibreChat/pull/17294) +- ๐Ÿงพ feat: Keep Every Lost Start Owed Until an Answer Resolves That Start by [@berry-13](https://github.com/berry-13) in [#17593](https://github.com/LibreChat-AI/LibreChat/pull/17593) +- โณ feat: Retire Expired and Older Pauses and Reconcile the Held Pause With Sync Snapshots by [@berry-13](https://github.com/berry-13) in [#17590](https://github.com/LibreChat-AI/LibreChat/pull/17590) +- โธ๏ธ feat: Answer, Restore and Stop a Paused Generation From the Chat Core by [@berry-13](https://github.com/berry-13) in [#17587](https://github.com/LibreChat-AI/LibreChat/pull/17587) +- ๐Ÿ” feat: Reattach to a Running Generation and Keep a Dropped One Stoppable by [@berry-13](https://github.com/berry-13) in [#17584](https://github.com/LibreChat-AI/LibreChat/pull/17584) +- ๐Ÿ›‘ feat: Stop the Turn in Flight From the Chat Core by [@berry-13](https://github.com/berry-13) in [#17577](https://github.com/LibreChat-AI/LibreChat/pull/17577) +- ๐Ÿงฑ feat: Catch Module-Load Use of Mocked Packages in @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17539](https://github.com/LibreChat-AI/LibreChat/pull/17539) +- ๐Ÿ“Š feat: Let Deployments Skip the Analytics Consent Prompt by [@berry-13](https://github.com/berry-13) in [#17552](https://github.com/LibreChat-AI/LibreChat/pull/17552) +- ๐Ÿ”ข feat: Count Core Chat Changes and Let Hosts Replace Its Messages by [@berry-13](https://github.com/berry-13) in [#17084](https://github.com/LibreChat-AI/LibreChat/pull/17084) +- ๐Ÿ“ feat: Give Dropdown the Positioning Props DropdownPopup Takes by [@berry-13](https://github.com/berry-13) in [#17461](https://github.com/LibreChat-AI/LibreChat/pull/17461) + +### ๐Ÿ› Fixes + +- ๐Ÿ‘ fix: Avoid Per-User Copies of Base App Config by [@dwaddle](https://github.com/dwaddle) in [#18057](https://github.com/LibreChat-AI/LibreChat/pull/18057) +- โณ fix: Stop the Settings Timer From Expiring a URL Auto-Submit That Waits for the Composer by [@danny-avila](https://github.com/danny-avila) in [#18072](https://github.com/LibreChat-AI/LibreChat/pull/18072) +- ๐Ÿงถ fix: Close Two Stream Races That Untraced Mock E2E Attempts Expose by [@danny-avila](https://github.com/danny-avila) in [#18075](https://github.com/LibreChat-AI/LibreChat/pull/18075) +- ๐ŸŽฏ fix: Match the GPT-6 Cyber API Mode to an Exact Endpoint URL by [@danny-avila](https://github.com/danny-avila) in [#18071](https://github.com/LibreChat-AI/LibreChat/pull/18071) +- ๐Ÿšช fix: Refuse Interactive MCP Sign-in on Remote Agent API Runs by [@danny-avila](https://github.com/danny-avila) in [#18058](https://github.com/LibreChat-AI/LibreChat/pull/18058) +- ๐Ÿ’ญ fix: Settle Finished Grouped Thoughts and Steady Four Flaky UI Scenarios by [@danny-avila](https://github.com/danny-avila) in [#18062](https://github.com/LibreChat-AI/LibreChat/pull/18062) +- ๐Ÿชข fix: Resolve the Races Behind Four Intermittent Session and Scenario E2E Tests by [@danny-avila](https://github.com/danny-avila) in [#18061](https://github.com/LibreChat-AI/LibreChat/pull/18061) +- ๐Ÿงญ fix: Close the Product Races Behind Four Retried Run Scenarios by [@danny-avila](https://github.com/danny-avila) in [#18060](https://github.com/LibreChat-AI/LibreChat/pull/18060) +- ๐ŸŒ„ fix: Show Skill Pills When a Turn Starts by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18036](https://github.com/LibreChat-AI/LibreChat/pull/18036) +- ๐Ÿง fix: Initialize Debit-Created Balances With Configured Allowances by [@danny-avila](https://github.com/danny-avila) in [#18056](https://github.com/LibreChat-AI/LibreChat/pull/18056) +- fix: Guard Mongo Cleanup In Api Services Tests by [@berry-13](https://github.com/berry-13) in [#17990](https://github.com/LibreChat-AI/LibreChat/pull/17990) +- fix: Guard Mongo Cleanup In Controller And Migration Tests by [@berry-13](https://github.com/berry-13) in [#17989](https://github.com/LibreChat-AI/LibreChat/pull/17989) +- ๐ŸŽจ fix: Polish ClickHouse Theme Controls, Menus and Panels by [@berry-13](https://github.com/berry-13) in [#18042](https://github.com/LibreChat-AI/LibreChat/pull/18042) +- fix: Clear Slack Progress After Successful Delivery by [@dustinhealy](https://github.com/dustinhealy) in [#18040](https://github.com/LibreChat-AI/LibreChat/pull/18040) +- ๐Ÿ”— fix: Update Slack Account Linking in Place by [@dustinhealy](https://github.com/dustinhealy) in [#18039](https://github.com/LibreChat-AI/LibreChat/pull/18039) +- ๐Ÿ‘ฅ fix: Let Members Connect Agents to Slack Workspaces by [@dustinhealy](https://github.com/dustinhealy) in [#17835](https://github.com/LibreChat-AI/LibreChat/pull/17835) +- ๐Ÿงน fix: Remove Disconnected Slack Workspaces by [@dustinhealy](https://github.com/dustinhealy) in [#17834](https://github.com/LibreChat-AI/LibreChat/pull/17834) +- ๐Ÿ”ง fix: Fence Channel Startup and Transaction Capability by [@dustinhealy](https://github.com/dustinhealy) in [#17831](https://github.com/LibreChat-AI/LibreChat/pull/17831) +- ๐ŸŽจ fix: Clarify Slack Account Linking by [@dustinhealy](https://github.com/dustinhealy) in [#17806](https://github.com/LibreChat-AI/LibreChat/pull/17806) +- fix: Guard transactional channel writes by [@dustinhealy](https://github.com/dustinhealy) in [#17770](https://github.com/LibreChat-AI/LibreChat/pull/17770) +- ๐Ÿ—„๏ธ fix: Restore Transaction Capability Detection by [@dustinhealy](https://github.com/dustinhealy) in [#17735](https://github.com/LibreChat-AI/LibreChat/pull/17735) +- ๐Ÿ”„ fix: Restore MCP Sign-In Prompts After Reload by [@dustinhealy](https://github.com/dustinhealy) in [#17604](https://github.com/LibreChat-AI/LibreChat/pull/17604) +- ๐Ÿ” fix: Redact MCP OAuth Diagnostics by [@dustinhealy](https://github.com/dustinhealy) in [#17603](https://github.com/LibreChat-AI/LibreChat/pull/17603) +- ๐Ÿ›ก๏ธ fix: Retain Execution Ownership Until Terminal Persistence by [@dustinhealy](https://github.com/dustinhealy) in [#17598](https://github.com/LibreChat-AI/LibreChat/pull/17598) +- ๐Ÿงท fix: Promote Unapplied Steers to Durable Queued Turns at Run End by [@danny-avila](https://github.com/danny-avila) in [#18028](https://github.com/LibreChat-AI/LibreChat/pull/18028) +- โญ๏ธ fix: Let Queued User Turns Go Before Completion Wake-ups at Run End by [@danny-avila](https://github.com/danny-avila) in [#18027](https://github.com/LibreChat-AI/LibreChat/pull/18027) +- ๐Ÿฆช fix: Preserve Generated File Byte Snapshots by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18009](https://github.com/LibreChat-AI/LibreChat/pull/18009) +- ๐Ÿ“ fix: Preserve MCP Server Ping Responses by [@berry-13](https://github.com/berry-13) in [#18020](https://github.com/LibreChat-AI/LibreChat/pull/18020) +- ๐Ÿ”‚ fix: Preserve Subagent Checkpoints Across Tool Approvals by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18007](https://github.com/LibreChat-AI/LibreChat/pull/18007) +- ๐Ÿ–จ๏ธ fix: Preserve Concurrent PDF Extraction by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18008](https://github.com/LibreChat-AI/LibreChat/pull/18008) +- ๐Ÿ”Š fix: Stream Manual Read Aloud Before Audio Completes by [@berry-13](https://github.com/berry-13) in [`88b07c9f96`](https://github.com/LibreChat-AI/LibreChat/commit/88b07c9f96d3fba86be67242b2411cf4bacb1093) +- fix: Preserve Unknown-Provider MCP Display Images by [@berry-13](https://github.com/berry-13) in [#18000](https://github.com/LibreChat-AI/LibreChat/pull/18000) +- ๐Ÿช’ fix: Strip Provider Attachment Payloads From Terminal Events by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18003](https://github.com/LibreChat-AI/LibreChat/pull/18003) +- ๐Ÿฆฃ fix: Honor Trace Policy in Memory Runs by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18006](https://github.com/LibreChat-AI/LibreChat/pull/18006) +- ๐Ÿงญ fix: Add Context Windows for Unmapped Bedrock Models by [@berry-13](https://github.com/berry-13) in [#17995](https://github.com/LibreChat-AI/LibreChat/pull/17995) +- โฑ๏ธ fix: Preserve Running Tool Timers Across Disclosure Remounts by [@berry-13](https://github.com/berry-13) in [#17997](https://github.com/LibreChat-AI/LibreChat/pull/17997) +- ๐ŸŽฉ fix: Dismiss Only the Topmost Dialog on Escape by [@danny-avila](https://github.com/danny-avila) in [#17977](https://github.com/LibreChat-AI/LibreChat/pull/17977) +- ๐Ÿฅธ fix: Block Private IPv4-Translated IPv6 Targets by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18002](https://github.com/LibreChat-AI/LibreChat/pull/18002) +- ๐Ÿฅธ fix: Resolve Directory Principals Through Trusted Integration Data by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17825](https://github.com/LibreChat-AI/LibreChat/pull/17825) +- โŒจ๏ธ fix: Preserve User Focus During Sidebar Opening by [@berry-13](https://github.com/berry-13) in [#18001](https://github.com/LibreChat-AI/LibreChat/pull/18001) +- fix: Serialize MCP App Theme Variables as CSS Colors by [@berry-13](https://github.com/berry-13) in [#17999](https://github.com/LibreChat-AI/LibreChat/pull/17999) +- ๐Ÿ“ฐ fix: Preview Pasted Text Without Blocking Sends by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17962](https://github.com/LibreChat-AI/LibreChat/pull/17962) +- fix: Keep Untagged Chat Code Fences Plain by [@berry-13](https://github.com/berry-13) in [#17986](https://github.com/LibreChat-AI/LibreChat/pull/17986) +- fix: Keep Plugin Pagination Keyboard Navigation Within Bounds by [@berry-13](https://github.com/berry-13) in [#17987](https://github.com/LibreChat-AI/LibreChat/pull/17987) +- ๐ŸŒ fix: Use Localized Button Text for Accessible Names by [@berry-13](https://github.com/berry-13) in [#17988](https://github.com/LibreChat-AI/LibreChat/pull/17988) +- ๐ŸŸฉ fix: Add Context Windows for Bedrock NVIDIA Nemotron Models by [@berry-13](https://github.com/berry-13) in [#17952](https://github.com/LibreChat-AI/LibreChat/pull/17952) +- ๐Ÿ“Ž fix: Keep Lazily Provisioned Attachments for Code Calls After read_file by [@berry-13](https://github.com/berry-13) in [#17942](https://github.com/LibreChat-AI/LibreChat/pull/17942) +- ๐ŸŽจ fix: Move Project and PR Icons to the Left of Conversation Rows by [@berry-13](https://github.com/berry-13) in [#17747](https://github.com/LibreChat-AI/LibreChat/pull/17747) +- ๐ŸŽ›๏ธ fix: Align Agent Instruction Controls and Theme Ownership Icon by [@berry-13](https://github.com/berry-13) in [#17730](https://github.com/LibreChat-AI/LibreChat/pull/17730) +- ๐ŸŒ fix: Localize Citation Pagination and Source Errors by [@berry-13](https://github.com/berry-13) in [`91ed9748cb`](https://github.com/LibreChat-AI/LibreChat/commit/91ed9748cbdadb8b2d1c7ad810118d83ec63f4f3) +- ๐Ÿ–ผ๏ธ fix: Bound Flux Tool Images and Preserve Original Attachments by [@dvorak33](https://github.com/dvorak33) in [#13749](https://github.com/LibreChat-AI/LibreChat/pull/13749) +- โšก fix: Parallelize Setup Cancel Lookups and Keep Attachment Drafts on Reload by [@berry-13](https://github.com/berry-13) in [#17963](https://github.com/LibreChat-AI/LibreChat/pull/17963) +- fix: patch glob traversal and redirect dependencies by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17964](https://github.com/LibreChat-AI/LibreChat/pull/17964) +- โš“ fix: Anchor Schedule Time Popovers to Their Field by [@berry-13](https://github.com/berry-13) in [#17947](https://github.com/LibreChat-AI/LibreChat/pull/17947) +- ๐Ÿž fix: Hold Upload Error Toasts Open Until Dismissed by [@berry-13](https://github.com/berry-13) in [#17954](https://github.com/LibreChat-AI/LibreChat/pull/17954) +- ๐ŸŽš๏ธ fix: Forward Selected Gemini Thinking Levels as reasoning_effort on Custom Endpoints by [@berry-13](https://github.com/berry-13) in [#17951](https://github.com/LibreChat-AI/LibreChat/pull/17951) +- ๐ŸชŸ fix: Serve the OAuth Error Page for Connect Callback Failures by [@berry-13](https://github.com/berry-13) in [#17946](https://github.com/LibreChat-AI/LibreChat/pull/17946) +- ๐Ÿšช fix: Let Users Sign Out of Required Two-Factor Enrollment by [@berry-13](https://github.com/berry-13) in [#17956](https://github.com/LibreChat-AI/LibreChat/pull/17956) +- ๐Ÿ“‹ fix: Detach the Original Chip After Saving a Pasted Text Edit by [@berry-13](https://github.com/berry-13) in [#17955](https://github.com/LibreChat-AI/LibreChat/pull/17955) +- โš ๏ธ fix: Keep Warnings That Follow a File Authoring Success Summary by [@berry-13](https://github.com/berry-13) in [#17953](https://github.com/LibreChat-AI/LibreChat/pull/17953) +- ๐Ÿ”— fix: Encode Local Storage URLs and Reject Nested File Names by [@berry-13](https://github.com/berry-13) in [#17949](https://github.com/LibreChat-AI/LibreChat/pull/17949) +- ๐Ÿ‘ฅ fix: Keep Skill Call Output in Shared Transcripts by [@berry-13](https://github.com/berry-13) in [#17948](https://github.com/LibreChat-AI/LibreChat/pull/17948) +- ๐Ÿ”— fix: Open the Child Run Activity Dialog From a Shared Link by [@berry-13](https://github.com/berry-13) in [#17945](https://github.com/LibreChat-AI/LibreChat/pull/17945) +- ๐Ÿง  fix: Hide the Reasoning Control for Hidden Enforced Model Specs by [@berry-13](https://github.com/berry-13) in [#17944](https://github.com/LibreChat-AI/LibreChat/pull/17944) +- ๐Ÿ“ฑ fix: Wrap Action Auth and API Key Expiry Controls on Narrow Screens by [@berry-13](https://github.com/berry-13) in [#17943](https://github.com/LibreChat-AI/LibreChat/pull/17943) +- โฑ๏ธ fix: Bound Generation Status Reads So a Silent Request Cannot Strand the Pane by [@berry-13](https://github.com/berry-13) in [#17927](https://github.com/LibreChat-AI/LibreChat/pull/17927) +- ๐Ÿšฆ fix: Keep the Gateway Message on Classified Rate Limit Errors by [@berry-13](https://github.com/berry-13) in [#17903](https://github.com/LibreChat-AI/LibreChat/pull/17903) +- ๐Ÿชข fix: Wrap Label Text Between Words Instead of Mid-Word by [@berry-13](https://github.com/berry-13) in [#17926](https://github.com/LibreChat-AI/LibreChat/pull/17926) +- ๐Ÿ—‘๏ธ fix: Drain Assistants Runs Before Erasing the Account by [@berry-13](https://github.com/berry-13) in [#17937](https://github.com/LibreChat-AI/LibreChat/pull/17937) +- ๐Ÿ”’ fix: Gate GET Routes That Start OAuth Flows Behind Terms Acceptance by [@berry-13](https://github.com/berry-13) in [#17935](https://github.com/LibreChat-AI/LibreChat/pull/17935) +- ๐Ÿ”’ fix: Return Approved Error Text From the Remaining Structured Tools by [@berry-13](https://github.com/berry-13) in [#17934](https://github.com/LibreChat-AI/LibreChat/pull/17934) +- โณ fix: Bound Blob Storage Image Reads by the Image Fetch Budget by [@berry-13](https://github.com/berry-13) in [#17932](https://github.com/LibreChat-AI/LibreChat/pull/17932) +- ๐Ÿงท fix: Keep Agent References to File Ids Another Record Still Holds by [@berry-13](https://github.com/berry-13) in [#17931](https://github.com/LibreChat-AI/LibreChat/pull/17931) +- ๐Ÿ“œ fix: Skip Scheduled Fires for Owners Who Have Not Accepted the Terms by [@berry-13](https://github.com/berry-13) in [#17930](https://github.com/LibreChat-AI/LibreChat/pull/17930) +- ๐Ÿฆฆ fix: Bound Spreadsheet Text Extraction by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17824](https://github.com/LibreChat-AI/LibreChat/pull/17824) +- ๐Ÿ“ช fix: Require Email Delivery for Password Reset Links by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17823](https://github.com/LibreChat-AI/LibreChat/pull/17823) +- ๐Ÿ“ fix: Measure Usage Percent Against the Allowance Each Period Granted by [@danny-avila](https://github.com/danny-avila) in [#17850](https://github.com/LibreChat-AI/LibreChat/pull/17850) +- ๐Ÿ—ƒ๏ธ fix: Load Retention Config on the Archive Route Before Saving by [@berry-13](https://github.com/berry-13) in [#17929](https://github.com/LibreChat-AI/LibreChat/pull/17929) +- ๐Ÿ” fix: Authorize Restored MCP Tools Before Agent Revert Writes Them by [@danny-avila](https://github.com/danny-avila) in [#17843](https://github.com/LibreChat-AI/LibreChat/pull/17843) +- ๐Ÿ”Ž fix: Align Custom Anthropic Model Discovery With Native Requests by [@AtefBellaaj](https://github.com/AtefBellaaj) in [#17881](https://github.com/LibreChat-AI/LibreChat/pull/17881) +- ๐Ÿช fix: Skip the Axios XSRF Cookie Read So Requests Are Not Stranded by [@berry-13](https://github.com/berry-13) in [#17925](https://github.com/LibreChat-AI/LibreChat/pull/17925) +- ๐Ÿ“ฆ fix: Skip Implicit npm Audits in Docker Builds by [@berry-13](https://github.com/berry-13) in [#17924](https://github.com/LibreChat-AI/LibreChat/pull/17924) +- ๐Ÿงฉ fix: Match Vendor Chunk Rules Against the Module Path, Not the Checkout by [@berry-13](https://github.com/berry-13) in [#17921](https://github.com/LibreChat-AI/LibreChat/pull/17921) +- ๐Ÿ›‚ fix: Only Hand Out OpenID Access Tokens the Bearer Verifier Accepts by [@berry-13](https://github.com/berry-13) in [#17904](https://github.com/LibreChat-AI/LibreChat/pull/17904) +- ๐Ÿ“ฌ fix: Require a Click to Submit Email Verification Links by [@berry-13](https://github.com/berry-13) in [#17905](https://github.com/LibreChat-AI/LibreChat/pull/17905) +- ๐Ÿ—„๏ธ fix: Skip Attachments Deleted by Storage Retention Instead of Failing the Turn by [@berry-13](https://github.com/berry-13) in [#17910](https://github.com/LibreChat-AI/LibreChat/pull/17910) +- ๐Ÿ“ฆ fix: Treat Empty Sandpack Bundler URLs as Unset by [@berry-13](https://github.com/berry-13) in [#17901](https://github.com/LibreChat-AI/LibreChat/pull/17901) +- ๐ŸŒ fix: Default the Flux Tool to the Global BFL Endpoint by [@berry-13](https://github.com/berry-13) in [#17909](https://github.com/LibreChat-AI/LibreChat/pull/17909) +- ๐Ÿ›ฐ๏ธ fix: Poll the Flux Cluster Returned by the Global Endpoint by [@berry-13](https://github.com/berry-13) in [#17907](https://github.com/LibreChat-AI/LibreChat/pull/17907) +- ๐Ÿงฉ fix: Match mcp:: Tool Approval Patterns Against MCP Tool Keys by [@berry-13](https://github.com/berry-13) in [#17902](https://github.com/LibreChat-AI/LibreChat/pull/17902) +- ๐Ÿ•ฐ๏ธ fix: Refresh Copied Client Bundle Timestamps After Build by [@berry-13](https://github.com/berry-13) in [#17906](https://github.com/LibreChat-AI/LibreChat/pull/17906) +- ๐Ÿงฉ fix: Accept Content-Array Tool Outputs in the Responses API by [@berry-13](https://github.com/berry-13) in [#17900](https://github.com/LibreChat-AI/LibreChat/pull/17900) +- ๐Ÿฆ™ fix: Use an Available OpenRouter Title Model in the Example Config by [@berry-13](https://github.com/berry-13) in [#17899](https://github.com/LibreChat-AI/LibreChat/pull/17899) +- ๐Ÿ”‘ fix: Remember Tool Approvals for MCP Servers Using Env References by [@berry-13](https://github.com/berry-13) in [#17889](https://github.com/LibreChat-AI/LibreChat/pull/17889) +- ๐Ÿงฎ fix: Count Memory Tokens After the o200k Encoding Loads by [@berry-13](https://github.com/berry-13) in [#17892](https://github.com/LibreChat-AI/LibreChat/pull/17892) +- ๐Ÿ—‘๏ธ fix: Keep the Delete Dialog on the Chat It Was Opened For by [@berry-13](https://github.com/berry-13) in [#17891](https://github.com/LibreChat-AI/LibreChat/pull/17891) +- ๐Ÿงพ fix: Count Google Native Media Blocks in Precomputed Token Budgets by [@berry-13](https://github.com/berry-13) in [#17890](https://github.com/LibreChat-AI/LibreChat/pull/17890) +- ๐ŸชŸ fix: Stop the Sidebar Close Toggle Throwing on Click by [@berry-13](https://github.com/berry-13) in [#17893](https://github.com/LibreChat-AI/LibreChat/pull/17893) +- ๐Ÿงฎ fix: Report Zeroed Summary in SharedLink Permissions Dry Run With No Links by [@berry-13](https://github.com/berry-13) in [#17888](https://github.com/LibreChat-AI/LibreChat/pull/17888) +- ๐Ÿท๏ธ fix: Show MCP Server Titles in the Tool Library by [@berry-13](https://github.com/berry-13) in [#17883](https://github.com/LibreChat-AI/LibreChat/pull/17883) +- โš–๏ธ fix: Apply User and Group Balance Overrides on Sign-In by [@berry-13](https://github.com/berry-13) in [#17884](https://github.com/LibreChat-AI/LibreChat/pull/17884) +- ๐Ÿฉบ fix: Report Union, Object, Array and Later Fields in Tool Validation Feedback by [@berry-13](https://github.com/berry-13) in [#17885](https://github.com/LibreChat-AI/LibreChat/pull/17885) +- ๐Ÿ”Ž fix: Name the Skipped Skill File in the Console Log by [@berry-13](https://github.com/berry-13) in [#17877](https://github.com/LibreChat-AI/LibreChat/pull/17877) +- ๐Ÿงพ fix: Read Skill Upload Filenames as UTF-8 by [@berry-13](https://github.com/berry-13) in [#17880](https://github.com/LibreChat-AI/LibreChat/pull/17880) +- ๐Ÿ”ค fix: Encode Unicode Filenames in Project File Uploads by [@berry-13](https://github.com/berry-13) in [#17878](https://github.com/LibreChat-AI/LibreChat/pull/17878) +- ๐Ÿ“‚ fix: Reject Missing Deployment Skill Files Before Upload by [@berry-13](https://github.com/berry-13) in [#17876](https://github.com/LibreChat-AI/LibreChat/pull/17876) +- ๐Ÿง  fix: Let Native Azure Deployments Declare Their Reasoning Efforts by [@berry-13](https://github.com/berry-13) in [#17851](https://github.com/LibreChat-AI/LibreChat/pull/17851) +- ๐Ÿ” fix: Retire Credentials by Their Committing Write and on Opt-In 2FA by [@berry-13](https://github.com/berry-13) in [#17504](https://github.com/LibreChat-AI/LibreChat/pull/17504) +- ๐Ÿ’ถ fix: Price Mistral Large 4 by [@Alan-Billi](https://github.com/Alan-Billi) in [#17028](https://github.com/LibreChat-AI/LibreChat/pull/17028) +- ๐Ÿงท fix: Skip Config Overrides LibreChat Never Applies and Apply librechat.yaml's `fileListLimit` by [@danny-avila](https://github.com/danny-avila) in [#17820](https://github.com/LibreChat-AI/LibreChat/pull/17820) +- ๐Ÿ’พ fix: Restore Send State From Saved Drafts by [@berry-13](https://github.com/berry-13) in [#17822](https://github.com/LibreChat-AI/LibreChat/pull/17822) +- ๐Ÿชค fix: Keep the Pre-Push Hook's Git Environment Away From Its Checks by [@berry-13](https://github.com/berry-13) in [#17798](https://github.com/LibreChat-AI/LibreChat/pull/17798) +- ๐Ÿงฒ fix: Match the Mobile Drawer New Chat Link by Its Exact Name by [@berry-13](https://github.com/berry-13) in [#17804](https://github.com/LibreChat-AI/LibreChat/pull/17804) +- ๐Ÿงน fix: Simplify Tool Activity Headers by [@berry-13](https://github.com/berry-13) in [#17512](https://github.com/LibreChat-AI/LibreChat/pull/17512) +- ๐Ÿค fix: Keep Long Agent Names Inside Handoff Rows on Phones by [@berry-13](https://github.com/berry-13) in [#17764](https://github.com/LibreChat-AI/LibreChat/pull/17764) +- ๐Ÿšจ fix: Show a Failed Assistants Run's Error on a New Chat by [@berry-13](https://github.com/berry-13) in [#17703](https://github.com/LibreChat-AI/LibreChat/pull/17703) +- ๐Ÿชช fix: Bind Role Delete Config Restore to the Role Identity and Audit the Members It Moved by [@berry-13](https://github.com/berry-13) in [#17501](https://github.com/LibreChat-AI/LibreChat/pull/17501) +- ๐Ÿ“ฒ fix: Close the Mobile Drawer When Selecting an Agent by [@berry-13](https://github.com/berry-13) in [#17696](https://github.com/LibreChat-AI/LibreChat/pull/17696) +- ๐Ÿช fix: Keep Manual Compaction Anchored and Visible Across Reloads by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17689](https://github.com/LibreChat-AI/LibreChat/pull/17689) +- ๐ŸŽ‹ fix: Scope Document Replay Budgets to Each Message by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17687](https://github.com/LibreChat-AI/LibreChat/pull/17687) +- fix: patch Langfuse fanout Go certificate trust by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17663](https://github.com/LibreChat-AI/LibreChat/pull/17663) +- ๐ŸŽŸ๏ธ fix: End a Pause Answer's Claim Only When Its Generation Ends by [@berry-13](https://github.com/berry-13) in [#17636](https://github.com/LibreChat-AI/LibreChat/pull/17636) +- ๐Ÿฆญ fix: Require Full-Length Private Text Authentication Tags by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17646](https://github.com/LibreChat-AI/LibreChat/pull/17646) +- ๐Ÿš‹ fix: Scope Document Name Traversal to Bedrock Agents by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17627](https://github.com/LibreChat-AI/LibreChat/pull/17627) +- ๐Ÿ”š fix: Bound Abandoned File Deletion Retries by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17640](https://github.com/LibreChat-AI/LibreChat/pull/17640) +- ๐Ÿ˜ fix: Preserve Authored Skills Across Approval Resumes by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17630](https://github.com/LibreChat-AI/LibreChat/pull/17630) +- ๐Ÿšค fix: Keep Host Tool Loading Independent of Worker Status by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17628](https://github.com/LibreChat-AI/LibreChat/pull/17628) +- ๐ŸงŠ fix: Fence Auth User Cache Writes After Eviction and Evict Favorite Holders by [@berry-13](https://github.com/berry-13) in [#17505](https://github.com/LibreChat-AI/LibreChat/pull/17505) +- ๐Ÿˆฏ fix: Accept Locale Count Placeholders in Locize Plural Forms by [@berry-13](https://github.com/berry-13) in [#17625](https://github.com/LibreChat-AI/LibreChat/pull/17625) +- fix(metrics): preserve Insights request paths by [@upman](https://github.com/upman) in [#17151](https://github.com/LibreChat-AI/LibreChat/pull/17151) +- ๐Ÿ”‘ fix: Drop Legacy Langfuse Ingestion Check from Connection Test by [@upman](https://github.com/upman) in [#17581](https://github.com/LibreChat-AI/LibreChat/pull/17581) +- ๐Ÿšฆ fix: Stop Queued Lookups After the First Concurrent Failure by [@berry-13](https://github.com/berry-13) in [#17557](https://github.com/LibreChat-AI/LibreChat/pull/17557) +- โฑ๏ธ fix: Bound Remaining Outbound Calls With Timeout Budgets by [@berry-13](https://github.com/berry-13) in [#17468](https://github.com/LibreChat-AI/LibreChat/pull/17468) +- ๐Ÿ“Œ fix: Keep the Composer Thinking Level for the Rest of the Conversation by [@berry-13](https://github.com/berry-13) in [#17497](https://github.com/LibreChat-AI/LibreChat/pull/17497) +- ๐Ÿ” fix: Keep the Admin OpenID State So PKCE Holds When the IdP Omits S256 by [@danny-avila](https://github.com/danny-avila) in [#17478](https://github.com/LibreChat-AI/LibreChat/pull/17478) +- ๐Ÿชข fix: Keep Chat Rollback, Publish and Snapshot Version Coherent Across Store Boundaries by [@berry-13](https://github.com/berry-13) in [#17518](https://github.com/LibreChat-AI/LibreChat/pull/17518) +- ๐Ÿ›Ÿ fix: Promote Reconciled Compaction Snapshots to the Terminal Row by [@berry-13](https://github.com/berry-13) in [#16553](https://github.com/LibreChat-AI/LibreChat/pull/16553) +- ๐Ÿงญ fix: Honor Documented Azure Model Assistants and fileConfig.stt Keys by [@berry-13](https://github.com/berry-13) in [#17500](https://github.com/LibreChat-AI/LibreChat/pull/17500) +- ๐Ÿงฏ fix: Return Approved Tool and Generation Error Text Instead of Raw Exceptions by [@berry-13](https://github.com/berry-13) in [#17508](https://github.com/LibreChat-AI/LibreChat/pull/17508) +- ๐Ÿ” fix: Fence ACL Viewers and Surface Revocation Failures When Removing Shared MCP Servers by [@berry-13](https://github.com/berry-13) in [#17506](https://github.com/LibreChat-AI/LibreChat/pull/17506) +- ๐Ÿชถ fix: Time Out Client Refresh and Trim Lodash Imports by [@berry-13](https://github.com/berry-13) in [#17467](https://github.com/LibreChat-AI/LibreChat/pull/17467) +- โš›๏ธ fix: Make Ledger, Plugin, Memory and Preset Writes Atomic by [@berry-13](https://github.com/berry-13) in [#17463](https://github.com/LibreChat-AI/LibreChat/pull/17463) +- ๐Ÿงฏ fix: Guard SSE Writes and Interval Cleanups Against Crashes by [@berry-13](https://github.com/berry-13) in [#17462](https://github.com/LibreChat-AI/LibreChat/pull/17462) +- โŒจ๏ธ fix: Close Only the Dropdown List on Escape Inside Settings by [@berry-13](https://github.com/berry-13) in [#17503](https://github.com/LibreChat-AI/LibreChat/pull/17503) +- ๐Ÿ“ฑ fix: Keep the Mobile Drawer Open When a Dialog Opened From It Takes Escape by [@berry-13](https://github.com/berry-13) in [#17502](https://github.com/LibreChat-AI/LibreChat/pull/17502) + +### ๐Ÿ”ง Refactoring and Performance + +- ๐Ÿฅ‡ perf: Start Critical Chat Reads Before Discovery by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18065](https://github.com/LibreChat-AI/LibreChat/pull/18065) +- ๐Ÿฅฝ perf: Reuse Successful Image Resize Capability Probes by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18034](https://github.com/LibreChat-AI/LibreChat/pull/18034) +- ๐Ÿชš refactor: Separate Checkpoint Storage From Graph Runtime by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18029](https://github.com/LibreChat-AI/LibreChat/pull/18029) +- ๐Ÿงน refactor: Consolidate Channel and Response Contracts by [@dustinhealy](https://github.com/dustinhealy) in [#17705](https://github.com/LibreChat-AI/LibreChat/pull/17705) +- ๐Ÿ”Œ refactor: Support Host-Provided Approval Submission by [@dustinhealy](https://github.com/dustinhealy) in [#17612](https://github.com/LibreChat-AI/LibreChat/pull/17612) +- ๐Ÿชธ refactor: Separate Shared-Link and Schedule Persistence by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18031](https://github.com/LibreChat-AI/LibreChat/pull/18031) +- ๐Ÿชถ perf: Load MCP UI and Export Libraries on Demand by [@berry-13](https://github.com/berry-13) in [#17975](https://github.com/LibreChat-AI/LibreChat/pull/17975) +- ๐Ÿงญ perf: Validate Agent Models Against Their Own Endpoint Catalog by [@berry-13](https://github.com/berry-13) in [#17972](https://github.com/LibreChat-AI/LibreChat/pull/17972) +- ๐Ÿ”Œ perf: Look Up MCP Server Catalogs Concurrently for Tool Definitions by [@berry-13](https://github.com/berry-13) in [#17973](https://github.com/LibreChat-AI/LibreChat/pull/17973) +- ๐ŸŒฟ perf: Read Only the Active Branch for Turn History by [@berry-13](https://github.com/berry-13) in [#17971](https://github.com/LibreChat-AI/LibreChat/pull/17971) +- โŒจ๏ธ perf: Keep the Composer Bar From Re-rendering on Keystrokes by [@berry-13](https://github.com/berry-13) in [#17974](https://github.com/LibreChat-AI/LibreChat/pull/17974) +- ๐Ÿก perf: Batch Sidebar Unread Cache Scans by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18004](https://github.com/LibreChat-AI/LibreChat/pull/18004) +- ๐Ÿ›Œ perf: Defer Search Key Dialog Initialization Until First Open by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17976](https://github.com/LibreChat-AI/LibreChat/pull/17976) +- ๐Ÿ› perf: Render Chats Independently of Catalog Discovery by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17692](https://github.com/LibreChat-AI/LibreChat/pull/17692) +- ๐ŸŽ๏ธ perf: Load Conversation Messages From the Chat Route by [@berry-13](https://github.com/berry-13) in [#17912](https://github.com/LibreChat-AI/LibreChat/pull/17912) +- ๐Ÿงบ refactor: Move the Composer Tray and Staged Items Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17817](https://github.com/LibreChat-AI/LibreChat/pull/17817) +- ๐Ÿงฐ refactor: Move Part Helpers and activityLabels Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17771](https://github.com/LibreChat-AI/LibreChat/pull/17771) +- ๐Ÿš refactor: Move the Queued Follow-Up Row Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17868](https://github.com/LibreChat-AI/LibreChat/pull/17868) +- ๐ŸŒฑ refactor: Move Conversation Starters Into the Chat Package With a Starter Button Variant by [@berry-13](https://github.com/berry-13) in [#17805](https://github.com/LibreChat-AI/LibreChat/pull/17805) +- ๐Ÿ“Ž refactor: Move the Attachment Row Into @librechat/chat Behind the Files Host by [@berry-13](https://github.com/berry-13) in [#17801](https://github.com/LibreChat-AI/LibreChat/pull/17801) +- ๐Ÿ“œ refactor: Make the Package Scroll Button the Message List Default by [@berry-13](https://github.com/berry-13) in [#17761](https://github.com/LibreChat-AI/LibreChat/pull/17761) +- ๐Ÿงฏ refactor: Retire Host Tool Outcome, Sibling, Branch Tail and Approval Members by [@berry-13](https://github.com/berry-13) in [#17867](https://github.com/LibreChat-AI/LibreChat/pull/17867) +- ๐Ÿšš refactor: Move the Subagent Thread Panel Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17781](https://github.com/LibreChat-AI/LibreChat/pull/17781) +- ๐Ÿ›ฐ๏ธ refactor: Read the Subagent Thread Panel's App Capabilities Through the Subagents Host by [@berry-13](https://github.com/berry-13) in [#17759](https://github.com/LibreChat-AI/LibreChat/pull/17759) +- ๐Ÿช† refactor: Move the Subagent Conversation and Shared Activity Dialog Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17757](https://github.com/LibreChat-AI/LibreChat/pull/17757) +- ๐Ÿ“ฎ refactor: Derive a Send's Code Decision Inside @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17797](https://github.com/LibreChat-AI/LibreChat/pull/17797) +- ๐Ÿงฉ refactor: Ship Icon Sizes, Status Type and the Label Sweep From @librechat/client by [@berry-13](https://github.com/berry-13) in [#17800](https://github.com/LibreChat-AI/LibreChat/pull/17800) +- ๐Ÿงฉ refactor: Move the Message Rows Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17838](https://github.com/LibreChat-AI/LibreChat/pull/17838) +- ๐Ÿ“Š refactor: Move the Context Usage Popover Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17799](https://github.com/LibreChat-AI/LibreChat/pull/17799) +- ๐Ÿงต refactor: Render the Package Message List by Default in ChatScreen by [@berry-13](https://github.com/berry-13) in [#17753](https://github.com/LibreChat-AI/LibreChat/pull/17753) +- ๐ŸŒฟ refactor: Move Leaf Content Parts Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17756](https://github.com/LibreChat-AI/LibreChat/pull/17756) +- ๐Ÿช refactor: Move the Message Row Hooks Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17802](https://github.com/LibreChat-AI/LibreChat/pull/17802) +- ๐Ÿงฎ refactor: Move the Code Workspace Decision Logic Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17782](https://github.com/LibreChat-AI/LibreChat/pull/17782) +- โฐ refactor: Move the Wake-Up Row Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17780](https://github.com/LibreChat-AI/LibreChat/pull/17780) +- ๐Ÿ›‚ refactor: Move the Code Approval Mode Logic Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17769](https://github.com/LibreChat-AI/LibreChat/pull/17769) +- ๐Ÿช„ refactor: Compose Chat Package Styles From Shared Primitive Variants by [@berry-13](https://github.com/berry-13) in [#17760](https://github.com/LibreChat-AI/LibreChat/pull/17760) +- ๐Ÿ”Ž perf: Read Dependency Usage From Source Files Only in Static Checks by [@berry-13](https://github.com/berry-13) in [#17767](https://github.com/LibreChat-AI/LibreChat/pull/17767) +- โฑ๏ธ perf: Share the Installed Dependency Cache and Fetch Static Check History Blobless by [@berry-13](https://github.com/berry-13) in [#17766](https://github.com/LibreChat-AI/LibreChat/pull/17766) +- ๐Ÿ’ญ refactor: Move the Composer Thinking Control Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17754](https://github.com/LibreChat-AI/LibreChat/pull/17754) +- ๐Ÿงญ refactor: Move the Message Navigation Rail Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17758](https://github.com/LibreChat-AI/LibreChat/pull/17758) +- ๐Ÿ‘๏ธ refactor: Report Conversation Seen From @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17755](https://github.com/LibreChat-AI/LibreChat/pull/17755) +- ๐Ÿ›ž refactor: Run Message Scrolling Inside @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17752](https://github.com/LibreChat-AI/LibreChat/pull/17752) +- ๐Ÿง  refactor: Move the Composer Reasoning Budget Control Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17763](https://github.com/LibreChat-AI/LibreChat/pull/17763) +- ๐Ÿท๏ธ refactor: Resolve the Turn Sender, Reasoning Override and Launch in @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17762](https://github.com/LibreChat-AI/LibreChat/pull/17762) +- ๐ŸŽฏ refactor: Let useTurns Own Response Binding, Regenerated Focus and the History Guard by [@berry-13](https://github.com/berry-13) in [#17750](https://github.com/LibreChat-AI/LibreChat/pull/17750) +- ๐Ÿ” style: Restyle the OAuth Success and Error Pages by [@berry-13](https://github.com/berry-13) in [#17729](https://github.com/LibreChat-AI/LibreChat/pull/17729) +- ๐Ÿ›ฐ๏ธ refactor: Stream Assistants Turns Through @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17697](https://github.com/LibreChat-AI/LibreChat/pull/17697) +- ๐Ÿšฆ refactor: Move the Tool Outcome Helpers Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17708](https://github.com/LibreChat-AI/LibreChat/pull/17708) +- ๐Ÿฆถ refactor: Share One Message Footer Across Message Rows by [@berry-13](https://github.com/berry-13) in [#17706](https://github.com/LibreChat-AI/LibreChat/pull/17706) +- ๐Ÿ–ผ๏ธ refactor: Move the Composer Layout Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17680](https://github.com/LibreChat-AI/LibreChat/pull/17680) +- โœ๏ธ refactor: Move the Composer Field and Action Slot Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17679](https://github.com/LibreChat-AI/LibreChat/pull/17679) +- ๐Ÿท๏ธ refactor: Move the Tool Label Helpers Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17682](https://github.com/LibreChat-AI/LibreChat/pull/17682) +- ๐Ÿงฎ refactor: Move the Ask Question and Tool Call Phase Helpers Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17676](https://github.com/LibreChat-AI/LibreChat/pull/17676) +- ๐Ÿงฑ refactor: Draw Structured Message Rows Through ContentRow in @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17701](https://github.com/LibreChat-AI/LibreChat/pull/17701) +- ๐Ÿงท refactor: Move the Message Row Contexts into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17674](https://github.com/LibreChat-AI/LibreChat/pull/17674) +- ๐Ÿชœ refactor: Move the Thread Renderers Into @librechat/chat as the Default Thread by [@berry-13](https://github.com/berry-13) in [#17661](https://github.com/LibreChat-AI/LibreChat/pull/17661) +- ๐ŸŽ›๏ธ refactor: Move the Message Hover Toolbar into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17660](https://github.com/LibreChat-AI/LibreChat/pull/17660) +- ๐Ÿช„ refactor: Move the Skills Popover Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17675](https://github.com/LibreChat-AI/LibreChat/pull/17675) +- ๐Ÿšฆ refactor: Move the Composer Queue Rail Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17685](https://github.com/LibreChat-AI/LibreChat/pull/17685) +- ๐Ÿ’ฌ refactor: Move the Steer Part Into the Chat Package Behind Image and File Preview Slots by [@berry-13](https://github.com/berry-13) in [#17704](https://github.com/LibreChat-AI/LibreChat/pull/17704) +- ๐Ÿ“ก refactor: Move the Stream Event Handlers into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17677](https://github.com/LibreChat-AI/LibreChat/pull/17677) +- ๐Ÿงญ refactor: Route Stream Event Handler Effects Through Grouped Host Services by [@berry-13](https://github.com/berry-13) in [#17668](https://github.com/LibreChat-AI/LibreChat/pull/17668) +- ๐Ÿงต refactor: Move the Thread and Lanes Helpers Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17656](https://github.com/LibreChat-AI/LibreChat/pull/17656) +- ๐Ÿ“‹ refactor: Move the Copy Footer and Action Gate into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17585](https://github.com/LibreChat-AI/LibreChat/pull/17585) +- ๐ŸŽš๏ธ refactor: Move the Thinking-Level Track Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17684](https://github.com/LibreChat-AI/LibreChat/pull/17684) +- ๐Ÿท๏ธ refactor: Paint the Provider Badge Over Media Through a Theme Role by [@berry-13](https://github.com/berry-13) in [#17681](https://github.com/LibreChat-AI/LibreChat/pull/17681) +- ๐Ÿ–ผ๏ธ refactor: Assemble the Chat Screen in @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17671](https://github.com/LibreChat-AI/LibreChat/pull/17671) +- โ“ refactor: Move the Ask Question Popover Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17683](https://github.com/LibreChat-AI/LibreChat/pull/17683) +- ๐Ÿ“œ refactor: Move the Prompts Popover Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17670](https://github.com/LibreChat-AI/LibreChat/pull/17670) +- ๐Ÿ“ผ refactor: Move the Subagent Transcript Into @librechat/chat Behind a Subagents Host by [@berry-13](https://github.com/berry-13) in [#17678](https://github.com/LibreChat-AI/LibreChat/pull/17678) +- ๐Ÿงญ refactor: Move the Chat Surface, Task Panel and Activity Group Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17669](https://github.com/LibreChat-AI/LibreChat/pull/17669) +- ๐Ÿชช refactor: Move Subagent Authors Into @librechat/chat Behind a Message Icon Slot by [@berry-13](https://github.com/berry-13) in [#17635](https://github.com/LibreChat-AI/LibreChat/pull/17635) +- ๐Ÿ—‚๏ธ refactor: Read the Parent Subagent Index Through the Stream Host by [@berry-13](https://github.com/berry-13) in [#17633](https://github.com/LibreChat-AI/LibreChat/pull/17633) +- ๐Ÿงท refactor: Move Subagent Dispatch and Attachment Routing Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17632](https://github.com/LibreChat-AI/LibreChat/pull/17632) +- ๐Ÿงณ refactor: Move Ask State, Approval and File Previews, and Diff View Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17657](https://github.com/LibreChat-AI/LibreChat/pull/17657) +- ๐Ÿ”Ž refactor: Move the Mention Popover Into the Chat Package as a Combobox by [@berry-13](https://github.com/berry-13) in [#17659](https://github.com/LibreChat-AI/LibreChat/pull/17659) +- ๐Ÿงฎ refactor: Move Error Turn and Title Helpers into Chat Core by [@berry-13](https://github.com/berry-13) in [#17658](https://github.com/LibreChat-AI/LibreChat/pull/17658) +- ๐Ÿ“œ refactor: Move the MessagesView Root Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17589](https://github.com/LibreChat-AI/LibreChat/pull/17589) +- ๐Ÿงญ refactor: Move the Pure Subagent Modules Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17582](https://github.com/LibreChat-AI/LibreChat/pull/17582) +- ๐Ÿชœ refactor: Move Row Mounting and the Scrollbar Gutter Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17586](https://github.com/LibreChat-AI/LibreChat/pull/17586) +- ๐Ÿ—๏ธ refactor: Lay Out the Chat Pane Through @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17574](https://github.com/LibreChat-AI/LibreChat/pull/17574) +- ๐Ÿด refactor: Move the Fork and Feedback Actions into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17561](https://github.com/LibreChat-AI/LibreChat/pull/17561) +- โŒจ๏ธ refactor: Move Composer Input Controls Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17551](https://github.com/LibreChat-AI/LibreChat/pull/17551) +- ๐Ÿ”‘ perf: Cache JWT Users and Batch Auth-Path Reads by [@berry-13](https://github.com/berry-13) in [#17466](https://github.com/LibreChat-AI/LibreChat/pull/17466) +- ๐Ÿ›Ÿ refactor: Move Resume-on-Load and Stream Steer State Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17565](https://github.com/LibreChat-AI/LibreChat/pull/17565) +- ๐Ÿ” refactor: Move the Resume Helpers and Their State Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17562](https://github.com/LibreChat-AI/LibreChat/pull/17562) +- ๐Ÿ“Ž refactor: Move Stream Content and Attachment Handlers Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17559](https://github.com/LibreChat-AI/LibreChat/pull/17559) +- ๐Ÿงฎ refactor: Move Token Usage State and Its Stream Handlers Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17558](https://github.com/LibreChat-AI/LibreChat/pull/17558) +- โœ‚๏ธ refactor: Move the Markdown Block Splitter and Editable Part Checks Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17579](https://github.com/LibreChat-AI/LibreChat/pull/17579) +- ๐ŸŒŠ refactor: Move the Stream Step Handler Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17555](https://github.com/LibreChat-AI/LibreChat/pull/17555) +- ๐Ÿ“ก refactor: Attach the Subagent Activity Feed Through the Chat Transport by [@berry-13](https://github.com/berry-13) in [#17526](https://github.com/LibreChat-AI/LibreChat/pull/17526) +- ๐Ÿ“Ž refactor: Move Composer Attachment Components Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17533](https://github.com/LibreChat-AI/LibreChat/pull/17533) +- ๐Ÿช refactor: Move the Chat Session Provider Into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17580](https://github.com/LibreChat-AI/LibreChat/pull/17580) +- ๐Ÿ‚ refactor: Move Tool Disclosure State and Leaf Part Components Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17560](https://github.com/LibreChat-AI/LibreChat/pull/17560) +- ๐Ÿงฎ refactor: Move Pure Part Helpers Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17520](https://github.com/LibreChat-AI/LibreChat/pull/17520) +- ๐ŸชŸ refactor: Move Message Row and Timestamp into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17554](https://github.com/LibreChat-AI/LibreChat/pull/17554) +- ๐Ÿงฑ refactor: Move Message Row Leaves into @librechat/chat by [@berry-13](https://github.com/berry-13) in [#17523](https://github.com/LibreChat-AI/LibreChat/pull/17523) +- ๐Ÿช refactor: Own Ask and Regenerate in the Chat Package by [@berry-13](https://github.com/berry-13) in [#17540](https://github.com/LibreChat-AI/LibreChat/pull/17540) +- ๐ŸŽ๏ธ perf: Parallelize Independent Agent and Schedule Lookups by [@berry-13](https://github.com/berry-13) in [#17465](https://github.com/LibreChat-AI/LibreChat/pull/17465) +- ๐Ÿงฑ refactor: Move Turn Building Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17519](https://github.com/LibreChat-AI/LibreChat/pull/17519) +- ๐ŸŽ›๏ธ refactor: Move Composer Leaf Controls and Steering Into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17521](https://github.com/LibreChat-AI/LibreChat/pull/17521) +- ๐Ÿšฆ refactor: Add the Core Chat Class With a Serial Job Executor and React Query State by [@berry-13](https://github.com/berry-13) in [#17030](https://github.com/LibreChat-AI/LibreChat/pull/17030) +- ๐Ÿ—‚๏ธ perf: Index Hot Lookups and Fix the Message Cursor by [@berry-13](https://github.com/berry-13) in [#17464](https://github.com/LibreChat-AI/LibreChat/pull/17464) +- ๐Ÿ”— refactor: Restyle the Connected Accounts Settings Row by [@berry-13](https://github.com/berry-13) in [#17460](https://github.com/LibreChat-AI/LibreChat/pull/17460) +- ๐Ÿ“ก refactor: Move the Adaptive and Resumable SSE Bindings into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17452](https://github.com/LibreChat-AI/LibreChat/pull/17452) +- ๐Ÿงฐ refactor: Move useChatHelpers and ChatProvider into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17446](https://github.com/LibreChat-AI/LibreChat/pull/17446) +- ๐Ÿ“ฆ refactor: Move the useChat Facade and ChatContext into the Chat Package by [@berry-13](https://github.com/berry-13) in [#17445](https://github.com/LibreChat-AI/LibreChat/pull/17445) +- ๐Ÿท๏ธ refactor: Export the Dialog Parts Under Canonical Dialog Names by [@berry-13](https://github.com/berry-13) in [#17459](https://github.com/LibreChat-AI/LibreChat/pull/17459) + +### ๐Ÿงช Tests + +- ๐Ÿงช test: Close Two Input Timing Gaps Behind Intermittent Tool Timer and Pinned Drag Failures by [@danny-avila](https://github.com/danny-avila) in [#18074](https://github.com/LibreChat-AI/LibreChat/pull/18074) +- ๐Ÿ”Œ test: Keep Harness Connections Open for Playwright's Idle Sockets by [@danny-avila](https://github.com/danny-avila) in [#18070](https://github.com/LibreChat-AI/LibreChat/pull/18070) +- ๐Ÿงช test: Keep Handlers Answering When a Mock Spec Removes a Route by [@danny-avila](https://github.com/danny-avila) in [#18069](https://github.com/LibreChat-AI/LibreChat/pull/18069) +- ๐Ÿงช test: Close Three Timing Gaps Behind Intermittent Mock E2E Failures by [@danny-avila](https://github.com/danny-avila) in [#18067](https://github.com/LibreChat-AI/LibreChat/pull/18067) +- ๐Ÿงช test: Release Route Handlers Before Mock Spec Contexts Close by [@danny-avila](https://github.com/danny-avila) in [#18064](https://github.com/LibreChat-AI/LibreChat/pull/18064) +- ๐Ÿงช test: Let Theme Paint Route Handlers Settle Before Teardown by [@danny-avila](https://github.com/danny-avila) in [#18059](https://github.com/LibreChat-AI/LibreChat/pull/18059) +- ๐Ÿงช test: Stabilize the RTL Prompt Counter and Undocked Dock-Back Scenarios by [@danny-avila](https://github.com/danny-avila) in [#18052](https://github.com/LibreChat-AI/LibreChat/pull/18052) +- ๐Ÿงพ test: Bill Detached Subagents Their Own Prompt in the Mock Model by [@danny-avila](https://github.com/danny-avila) in [#18050](https://github.com/LibreChat-AI/LibreChat/pull/18050) +- ๐Ÿงช test: Stabilize the Sidebar Focus and Fold Tree Scenarios by [@berry-13](https://github.com/berry-13) in [#18030](https://github.com/LibreChat-AI/LibreChat/pull/18030) +- ๐Ÿงพ test: Bill Advertised Tool Definitions in the Mock Model's Input Tokens by [@berry-13](https://github.com/berry-13) in [#17897](https://github.com/LibreChat-AI/LibreChat/pull/17897) +- ๐Ÿงช test: Wait for the Reply Tab's Seen Write Before Restoring the Unread Baseline by [@berry-13](https://github.com/berry-13) in [#17870](https://github.com/LibreChat-AI/LibreChat/pull/17870) +- ๐ŸŽฏ test: Restore the Ask-User Arrival Focus Specs by [@berry-13](https://github.com/berry-13) in [#17869](https://github.com/LibreChat-AI/LibreChat/pull/17869) +- ๐Ÿช‘ test: Verify Portable Resource Lease Ownership and Expiry by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17691](https://github.com/LibreChat-AI/LibreChat/pull/17691) +- ๐Ÿงช test: Render the Effort Track With the Real English Copy by [@berry-13](https://github.com/berry-13) in [#17699](https://github.com/LibreChat-AI/LibreChat/pull/17699) +- ๐Ÿ“ฑ test: Reach the Composer and Child Panel on the Mobile Mock Project by [@berry-13](https://github.com/berry-13) in [#17695](https://github.com/LibreChat-AI/LibreChat/pull/17695) +- ๐Ÿฆ  test: Add Portable Favorites Contracts and Mutation Testing by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17690](https://github.com/LibreChat-AI/LibreChat/pull/17690) +- ๐Ÿงช test: Render the Consumer Spec Through the Package Message Row by [@berry-13](https://github.com/berry-13) in [#17578](https://github.com/LibreChat-AI/LibreChat/pull/17578) +- ๐Ÿงช test: Prove the @librechat/chat Public Entries With a Consumer Spec by [@berry-13](https://github.com/berry-13) in [#17522](https://github.com/LibreChat-AI/LibreChat/pull/17522) +- ๐ŸŒณ test: Assert the Message Tree a Host Write Leaves After a Replaced Start Rolls Back by [@berry-13](https://github.com/berry-13) in [#17548](https://github.com/LibreChat-AI/LibreChat/pull/17548) + +### ๐Ÿ“ฆ Dependencies, Chores & CI + +- ๐Ÿง‘โ€โš–๏ธ ci: Require Explicit PR Quality Decisions and Validate Reports by [@AtefBellaaj](https://github.com/AtefBellaaj) in [#18025](https://github.com/LibreChat-AI/LibreChat/pull/18025) +- ๐Ÿงฏ ci: Stop Diagnostic Artifact Uploads From Failing or Stalling Test Jobs by [@danny-avila](https://github.com/danny-avila) in [#18068](https://github.com/LibreChat-AI/LibreChat/pull/18068) +- ๐Ÿฆ  chore: Upgrade Node.js and Undici to Security Releases by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18066](https://github.com/LibreChat-AI/LibreChat/pull/18066) +- ๐Ÿงฑ ci: Block the PWA Service Worker Across the Mock E2E Profiles by [@danny-avila](https://github.com/danny-avila) in [#18063](https://github.com/LibreChat-AI/LibreChat/pull/18063) +- ๐Ÿšฆ ci: Make Dev Workflows Ready for a Merge Queue by [@danny-avila](https://github.com/danny-avila) in [#18054](https://github.com/LibreChat-AI/LibreChat/pull/18054) +- ๐Ÿƒ ci: Provision the mongod Binary Before Any Test Starts by [@danny-avila](https://github.com/danny-avila) in [#18053](https://github.com/LibreChat-AI/LibreChat/pull/18053) +- ๐ŸŽฒ ci: Fail Playwright Runs When a Test Passes Only on a Retry by [@danny-avila](https://github.com/danny-avila) in [#18051](https://github.com/LibreChat-AI/LibreChat/pull/18051) +- ๐Ÿฅ… ci: Run Playwright After Merges to Dev and Guard Specs Under Test Selection by [@danny-avila](https://github.com/danny-avila) in [#18049](https://github.com/LibreChat-AI/LibreChat/pull/18049) +- ๐Ÿงฐ ci: Provision Pinned Redis Binaries Without a Distro Mirror by [@danny-avila](https://github.com/danny-avila) in [#18055](https://github.com/LibreChat-AI/LibreChat/pull/18055) +- ๐Ÿฆ• ci: Support Older Heads in Change Quality by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#18022](https://github.com/LibreChat-AI/LibreChat/pull/18022) +- ๐ŸŒก๏ธ ci: Report Mutation Scores and Change Risk for Edited Functions by [@AtefBellaaj](https://github.com/AtefBellaaj) in [#17965](https://github.com/LibreChat-AI/LibreChat/pull/17965) +- ๐Ÿ”’ chore: Patch minimatch and qs Advisories in Nested Dev Dependencies by [@danny-avila](https://github.com/danny-avila) in [#18005](https://github.com/LibreChat-AI/LibreChat/pull/18005) +- ๐Ÿงญ chore: Bump Artifact react-router-dom to v7 by [@garfiec](https://github.com/garfiec) in [#17819](https://github.com/LibreChat-AI/LibreChat/pull/17819) +- ๐Ÿชฐ chore: Bump HTTP Dependencies and Scope Security Overrides by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17688](https://github.com/LibreChat-AI/LibreChat/pull/17688) +- ๐Ÿช ci: Verify the Pushed Commit With the Static Checks Before Push by [@berry-13](https://github.com/berry-13) in [#17768](https://github.com/LibreChat-AI/LibreChat/pull/17768) +- โš–๏ธ ci: Refresh Playwright Shard Timings From Recent Runs by [@berry-13](https://github.com/berry-13) in [#17765](https://github.com/LibreChat-AI/LibreChat/pull/17765) +- ๐Ÿงน chore: Clear the Whole-Repo Lint Errors on Dev by [@berry-13](https://github.com/berry-13) in [#17702](https://github.com/LibreChat-AI/LibreChat/pull/17702) +- ๐Ÿฆฟ chore: Bump Agents SDK to 4.2.1 by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17664](https://github.com/LibreChat-AI/LibreChat/pull/17664) +- ๐Ÿ“ฆ chore: Update `re2js` to v2.9.1 and bump `@hono/node-server` to v2.1.5 by [@danny-avila](https://github.com/danny-avila) in [#17652](https://github.com/LibreChat-AI/LibreChat/pull/17652) +- ๐Ÿฅ chore: Standardize Bun-First Workspace Typechecks by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17651](https://github.com/LibreChat-AI/LibreChat/pull/17651) +- ๐Ÿงช ci: Isolate `auth.tenant` Spec From a Local `librechat.yaml` by [@jomspk](https://github.com/jomspk) in [#17642](https://github.com/LibreChat-AI/LibreChat/pull/17642) +- ๐Ÿง— chore: Bump ClickHouse to 26.3.62.3 LTS by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17647](https://github.com/LibreChat-AI/LibreChat/pull/17647) +- ๐Ÿ“ต chore: Add an Offline OSS Scanner Environment by [@lia-by-librechat](https://github.com/apps/lia-by-librechat) in [#17645](https://github.com/LibreChat-AI/LibreChat/pull/17645) +- ๐Ÿ” ci: Skip the data-provider publish when its version is already on npm by [@danny-avila](https://github.com/danny-avila) in [#17639](https://github.com/LibreChat-AI/LibreChat/pull/17639) + +### ๐ŸŒ Internationalization + +- ๐ŸŒ i18n: Update translation.json with latest translations by [@github-actions](https://github.com/apps/github-actions) in [#17629](https://github.com/LibreChat-AI/LibreChat/pull/17629) +- ๐Ÿชท i18n: Add Hindi, Marathi, and Tamil Languages by [@berry-13](https://github.com/berry-13) in [#17498](https://github.com/LibreChat-AI/LibreChat/pull/17498) + +## New Contributors + +- [@garfiec](https://github.com/garfiec) made their first contribution in [#17819](https://github.com/LibreChat-AI/LibreChat/pull/17819) +- [@dvorak33](https://github.com/dvorak33) made their first contribution in [#13749](https://github.com/LibreChat-AI/LibreChat/pull/13749) +- [@dwaddle](https://github.com/dwaddle) made their first contribution in [#18057](https://github.com/LibreChat-AI/LibreChat/pull/18057) + +**Full Changelog:** [v0.8.9-rc1...v0.8.9](https://github.com/LibreChat-AI/LibreChat/compare/v0.8.9-rc1...v0.8.9) diff --git a/content/docs/configuration/admin_panel.mdx b/content/docs/configuration/admin_panel.mdx index 832bcf72e..ac5583242 100644 --- a/content/docs/configuration/admin_panel.mdx +++ b/content/docs/configuration/admin_panel.mdx @@ -139,6 +139,8 @@ An override theme that fails the [theme rules](/docs/configuration/librechat_yam **YAML-only settings.** MCP servers with `type: stdio` or process fields (`command`, `args`, `env`, `cwd`, `stderr`) and `langfuse.headers` can only be set in `librechat.yaml`. The admin API rejects writes to them and overrides cannot replace or remove them. See [Langfuse: Authenticated Proxies and Gateways](/docs/configuration/langfuse#authenticated-proxies-and-gateways). +**Deployment-owned settings.** Base, role, group, and user profiles cannot change `persistence`, `clientLimits`, `telemetry.rum`, `telemetry.stackTraceLimit`, `conversationList`, `passwordHashing`, `interface.colorModeFromUrl`, `fileConfig.skills.deletionCleanupConcurrency`, `endpoints.agents.managementApi`, `endpoints.agents.channels.slackApp`, or `mcpSettings.oauthFailureRetentionMs`. Configure them in deployment YAML. Inspect the admin configuration catalog and applied/skipped write report: saving a profile does not mean a deployment-only value became effective. + **Section-scoped access.** Config capabilities can be broad (`read:configs`, `manage:configs`) or limited to one top-level section (`read:configs:
`, `manage:configs:
`). Creating, changing, or deleting the Base profile always needs broad `manage:configs`; section-scoped management applies to role, group, and user profiles. See [Admin capabilities](/docs/configuration/access_control#admin-capabilities). ## Admin API diff --git a/content/docs/configuration/authentication/email.mdx b/content/docs/configuration/authentication/email.mdx index da89fbc15..e2ad0f68a 100644 --- a/content/docs/configuration/authentication/email.mdx +++ b/content/docs/configuration/authentication/email.mdx @@ -65,7 +65,7 @@ If you want to use a generic SMTP service or need advanced configuration for one /> -If `ALLOW_PASSWORD_RESET=true` and neither Mailgun nor SMTP is configured, LibreChat shows the reset link directly on the page instead of emailing it, so anyone who knows a user's email address can reset that user's password. Configure email before enabling password reset. Email is also what sends verification links to new accounts; see [Authentication](/docs/configuration/authentication#email-verification-and-password-reset). +Password reset requires working Mailgun or SMTP delivery in addition to `ALLOW_PASSWORD_RESET=true`. The page never displays the reset link. Missing accounts, missing email configuration, and delivery failures receive the same generic acknowledgment; a successful acknowledgment does not confirm that an email was sent. Email also sends verification links to new accounts; see [Authentication](/docs/configuration/authentication#email-verification-and-password-reset). ## Setup with Mailgun diff --git a/content/docs/configuration/authentication/index.mdx b/content/docs/configuration/authentication/index.mdx index 9f21d266e..4393adaf9 100644 --- a/content/docs/configuration/authentication/index.mdx +++ b/content/docs/configuration/authentication/index.mdx @@ -44,7 +44,7 @@ When an [email service](/docs/configuration/authentication/email) is configured, diff --git a/content/docs/configuration/dotenv.mdx b/content/docs/configuration/dotenv.mdx index d50253b8f..012a879ca 100644 --- a/content/docs/configuration/dotenv.mdx +++ b/content/docs/configuration/dotenv.mdx @@ -737,7 +737,7 @@ LibreChat can emit backend OpenTelemetry traces for general API, HTTP, MongoDB, [ 'OTEL_SERVICE_VERSION', 'string', - 'Service version reported to OpenTelemetry. Defaults to the package version when unset.', + 'Service version reported to OpenTelemetry. Falls back to BUILD_COMMIT, then npm_package_version, when unset.', '# OTEL_SERVICE_VERSION=', ], [ diff --git a/content/docs/configuration/librechat_yaml/object_structure/config.mdx b/content/docs/configuration/librechat_yaml/object_structure/config.mdx index 69bebd593..858fdb6e5 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/config.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/config.mdx @@ -1796,10 +1796,11 @@ see: [Transactions Object Structure](/docs/configuration/librechat_yaml/object_s ## telemetry -Controls browser real user monitoring (RUM). This block rejects unknown keys. +Controls error stack depth and browser real user monitoring (RUM). This block rejects unknown keys. These are deployment settings read from base YAML. + +```yaml filename="spreadsheetParsing" +spreadsheetParsing: + timeoutMs: 5000 + maxConcurrent: 2 +``` + ## clientLimits Request deadlines for the browser client, in milliseconds, and upload concurrency. Every key is optional; omitting the block keeps the defaults. Raise a deadline when your infrastructure legitimately needs longer. Deadlines accept positive integers up to 3600000, and unknown keys are rejected. diff --git a/content/docs/configuration/librechat_yaml/object_structure/file_config.mdx b/content/docs/configuration/librechat_yaml/object_structure/file_config.mdx index 02fd1b839..9bec83aea 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/file_config.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/file_config.mdx @@ -362,7 +362,25 @@ fileConfig: ## stt -`fileConfig.stt` is not read in current versions of LibreChat; an `stt` block here is ignored. Audio files added as text are transcribed when a speech-to-text provider is configured under [`speech.stt`](/docs/configuration/librechat_yaml/object_structure/speech), using a built-in list of audio types: MP3, MPEG, WAV, OGG, Vorbis, MP4 and M4A audio, FLAC, WebM, AAC, WMA, and Opus. +`fileConfig.stt.supportedMimeTypes` controls which uploaded MIME types are routed to speech-to-text when added as text. A provider must also be configured under [`speech.stt`](/docs/configuration/librechat_yaml/object_structure/speech). This controls uploaded-file transcription, not microphone recording. + +Omitting the list keeps the built-in audio types: MP3, MPEG, WAV, OGG, Vorbis, MP4 and M4A audio, FLAC, WebM, AAC, WMA, and Opus. Setting a list replaces those patterns. + +```yaml filename="fileConfig / stt" +fileConfig: + stt: + supportedMimeTypes: + - '^audio/(mpeg|wav|webm)$' +``` + +## deletionRetryLimit + +Maximum automatic retries when cleaning up a discarded upload. The default is `5`; set a positive integer. Retry counts survive tab reloads so a failing deletion does not retry indefinitely. This is separate from server-side retention and vector cleanup. + +```yaml filename="fileConfig / deletionRetryLimit" +fileConfig: + deletionRetryLimit: 5 +``` ## File Processing Priority diff --git a/content/docs/configuration/librechat_yaml/object_structure/model_specs.mdx b/content/docs/configuration/librechat_yaml/object_structure/model_specs.mdx index 5d4d91aaf..b757868d1 100644 --- a/content/docs/configuration/librechat_yaml/object_structure/model_specs.mdx +++ b/content/docs/configuration/librechat_yaml/object_structure/model_specs.mdx @@ -453,6 +453,8 @@ This feature is particularly useful when you want to add descriptions to models Use this when a curated model spec should not let users turn on tools from the composer. It hides the **Tools**, **Skills** and **MCP Servers** sections of the [composer's **+** palette](/docs/features/composer#turn-on-tools-skills-and-mcp-servers) and their chips on the composer. File uploads stay available. The name is kept from the earlier badge row it used to hide. +Visible model-spec tool flags normally provide defaults that explicit user toggles can override. With `hideBadgeRow: true` or `showInMenu: false`, capabilities explicitly configured by the spec stay authoritative. `skills: false` is always a hard opt-out, and MCP servers pinned by the spec that are not selectable from chat remain pinned. + **Example:** ```yaml filename="modelSpecs / hideBadgeRow" @@ -759,6 +761,26 @@ modelSpecs: --- +### deferLoading + +Controls which equipped tools are exposed only after the model discovers them through Tool Search. Requires the deployment-level `deferred_tools` Agent capability. Omitted or `false` keeps existing loading behavior; `true` defers every eligible tool, and an array selects tool names or capability markers. Code execution, web search, file search, and memory can be deferred alongside MCP tools. + +```yaml filename="modelSpecs / deferLoading" +modelSpecs: + list: + - name: 'research-assistant' + webSearch: true + executeCode: true + deferLoading: ['web_search', 'execute_code'] + preset: + endpoint: 'openAI' + model: 'gpt-4o-mini' +``` + +Tool Search, Skill discovery, background polling, programmatic Bash orchestration, and Ask User stay loaded. This setting does not equip additional tools or bypass tool permissions. See [Deferred tools](/docs/features/agents#deferred-tools). + +--- + ### describeIntent With `user_provided`, you supply no key at all: each user enters their own from the chat UI. Open the endpoint menu, and next to **OpenAI** there is a gear icon labelled **Set API Key**. Clicking it opens a dialog with a field for the key and a dropdown for how long it should be kept: 30 minutes, 2 hours, 12 hours (the default), 1 day, 7 days, 30 days, or never expire. diff --git a/content/docs/configuration/rag_api.mdx b/content/docs/configuration/rag_api.mdx index e51f3f942..6cd1b13a1 100644 --- a/content/docs/configuration/rag_api.mdx +++ b/content/docs/configuration/rag_api.mdx @@ -11,7 +11,7 @@ The RAG API indexes user-uploaded files and retrieves relevant passages to augme -MongoDB is required: LibreChat stores users, conversations, messages, and settings in it. PostgreSQL is optional: only the RAG API uses it, to store document embeddings, and LibreChat itself never connects to it. The default Docker Compose files start both because they include the RAG API (and its `vectordb` service) out of the box. For a [local npm install](/docs/local/npm), you only need PostgreSQL if you set up the RAG API; without `RAG_API_URL`, LibreChat runs normally but file search uploads are unavailable. +MongoDB is required: LibreChat stores users, conversations, messages, and settings in it. PostgreSQL is optional for the RAG API's document embeddings. Separately, LibreChat can use PostgreSQL 16 for [tool favorites](/docs/configuration/librechat_yaml/object_structure/config#persistence) when explicitly configured; that does not replace MongoDB. The default Docker Compose files start PostgreSQL because they include the RAG API and its `vectordb` service. A [local npm install](/docs/local/npm) needs PostgreSQL only for a feature configured to use it. Without `RAG_API_URL`, LibreChat runs normally but file search uploads are unavailable. ## Availability diff --git a/content/docs/configuration/tools/openai_image_gen.mdx b/content/docs/configuration/tools/openai_image_gen.mdx index 6e223f08e..82052dca3 100644 --- a/content/docs/configuration/tools/openai_image_gen.mdx +++ b/content/docs/configuration/tools/openai_image_gen.mdx @@ -52,6 +52,8 @@ The image size an agent can request depends on the model: `auto`, `1024x1024`, ` OpenAI retired `gpt-image-1` on October 23, 2026. If you set it in `IMAGE_GEN_OAI_MODEL`, remove it or switch to a current model. +LibreChat also recognizes `gpt-image-2.6-sunburst` and `gpt-image-2.6-flare`. Select either explicitly with `IMAGE_GEN_OAI_MODEL`; adding support does not change the default from `gpt-image-2.5-flare`. The recognized 2.6 models expose `xhigh` and `max` quality options in addition to the baseline choices. Size may be `auto` or a positive `WIDTHxHEIGHT` value, with supported dimensions validated by the provider. + ## Keeping large images LibreChat resizes saved images so the shorter side is at most 768 pixels, so a `3840x2160` result is stored at 1365x768. To keep the size the model returned, set [`fileConfig.imageGeneration`](/docs/configuration/librechat_yaml/object_structure/file_config#imagegeneration) to `percentage: 100`. diff --git a/content/docs/configuration/upgrade.mdx b/content/docs/configuration/upgrade.mdx index bb9a194dc..8829b2ac8 100644 --- a/content/docs/configuration/upgrade.mdx +++ b/content/docs/configuration/upgrade.mdx @@ -35,7 +35,7 @@ System-grant assignments and widening resource-sharing changes fail closed by de ### Admin configuration and secrets -The active database Base profile overrides deployment YAML before role, group, and user profiles, regardless of Base's numeric priority. Other active profiles merge in ascending priority with deterministic ties. Removing an override restores inheritance; a tombstone suppresses an inherited value. Ordinary arrays are suppressed as a whole; supported keyed collections also allow hiding an individual named entry. Removing that tombstone restores inheritance. +The active database Base profile overrides overridable deployment YAML fields before role, group, and user profiles, regardless of Base's numeric priority. Deployment-only fields still come from YAML; a stored Base value cannot override them. Other active profiles merge in ascending priority with deterministic ties. Removing an override restores inheritance; a tombstone suppresses an inherited value. Ordinary arrays are suppressed as a whole; supported keyed collections also allow hiding an individual named entry. Removing that tombstone restores inheritance. The admin config `changes` endpoint applies a batch to one profile atomically. Use `dryRun` to validate and `expectedRevision` for optimistic concurrency; a stale revision returns `409`. Inspect ignored results because protected settings may remain unapplied without rejecting the whole batch. This guarantee does not make role renames or other multi-document admin operations atomic. diff --git a/content/docs/features/agents.mdx b/content/docs/features/agents.mdx index 9e41c274f..81dd32f81 100644 --- a/content/docs/features/agents.mdx +++ b/content/docs/features/agents.mdx @@ -112,6 +112,10 @@ Each MCP tool has a **Tool Options** menu with a few per-tool switches: An agent with several MCP servers can easily carry dozens of tool definitions, and sending all of them on every request eats context and makes the model worse at picking the right one. A deferred tool is left out of the initial request. The agent gets a tool search tool instead, finds deferred tools by name or description when it needs them, and can use a found tool for the rest of the conversation. +Deferral also supports equipped system tools, including web search, file search, Code Interpreter file and execution tools, and memory. It requires the `deferred_tools` Agent capability, which is included in the default capability list. A saved Agent selects tools with `tool_options..defer_loading: true`; model specs use `deferLoading: true` for all eligible tools or a list such as `['execute_code', 'web_search']` for selected tools or capabilities. The capability alone does not defer tools. This changes when equipped tools are exposed; it does not grant new tools or permissions. + +Tool Search itself, Skill discovery, background-task polling, programmatic Bash orchestration, and Ask User remain available rather than being deferred. A discovered tool remains available on later turns. + ### Programmatic tool calling With **Programmatic** turned on for an MCP tool (or a whole server), the model does not call that tool directly. It writes code in the Code Interpreter sandbox that calls the tool as a function, so it can loop, paginate, retry, and filter results before answering. This helps with jobs like "check these 40 tickets and summarize the open ones", which would otherwise take 40 separate tool calls through the model. diff --git a/content/docs/features/password_reset.mdx b/content/docs/features/password_reset.mdx index 9e6900a0c..951a87369 100644 --- a/content/docs/features/password_reset.mdx +++ b/content/docs/features/password_reset.mdx @@ -29,7 +29,7 @@ A successful reset signs the account out of every other session and revokes its - If the admin restricted registration to certain email domains, addresses outside those domains cannot request a reset. - If password reset is turned on but no email service is configured, LibreChat skips the email and shows the reset link directly on the page, to whoever typed the address. Anyone who knows a user's email can then take over that account. The server logs a warning at startup when it detects this setup. + Password reset requires configured email delivery. The page never displays reset credentials. Unknown accounts, missing email configuration, and delivery failures receive the same generic acknowledgment, so the acknowledgment does not confirm that a reset email was sent. ## Setup