Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
396 commits
Select commit Hold shift + click to select a range
983a33f
🎛️ refactor: Scope App-Config Override Cache by Isolation Context (#1…
danny-avila Jun 1, 2026
8120fc6
🪝 fix: Apply Isolation Plugin to Distinct Queries (#13457)
danny-avila Jun 1, 2026
547b284
🗼 ci: Guard Scoped Model Applies the Isolation Plugin (#13458)
danny-avila Jun 1, 2026
730878b
🔐 feat: Use `SecretInput` for Sensitive Fields (#12955)
berry-13 Jun 1, 2026
2ab432b
💭 fix: Preserve Custom Endpoint Reasoning Params (#13447)
danny-avila Jun 1, 2026
67398e0
🏷️ ci: Fix Helm Tag Sync Git Auth (#13460)
danny-avila Jun 1, 2026
e0c346c
🤫 chore: Quiet Repetitive Log Noise from Balance, CloudFront, and Cap…
danny-avila Jun 2, 2026
88e5a2f
📉 refactor: Reduce Frontend Build Warning Noise (#13463)
danny-avila Jun 2, 2026
a86e504
📡 feat: Add Authenticated Proxy Mode for Browser RUM Telemetry (#13464)
upman Jun 2, 2026
a7cfbcc
🌎 ci: Fix Locize Sync CDN Mode (#13465)
danny-avila Jun 2, 2026
5866228
🪝 fix: Preserve Grouped Tool Expansion During Streaming (#13462)
danny-avila Jun 2, 2026
268f095
🔒 feat: Add On-Behalf-Of (OBO) token exchange support for MCP Servers…
jcbartle Jun 2, 2026
502dcde
🌍 i18n: Update translation.json with latest translations (#13466)
danny-avila Jun 2, 2026
83d8ac0
🪜 feat: Add OpenID Role Sync (#13415)
danny-avila Jun 2, 2026
f27e7d7
🛂 fix: Gate RUM Proxy Route on the RUM_ENABLED Flag (#13475)
upman Jun 2, 2026
571d8d8
⚡ refactor: Change Minifier from 'terser' to 'oxc' in Vite Config (#1…
danny-avila Jun 2, 2026
8ba0249
🗃️ feat: Retain Agent Files During All-Data Retention (#13477)
danny-avila Jun 2, 2026
317b8df
🩻 refactor: Replace Opaque OAuth Errors with Structured Failure Diagn…
danny-avila Jun 2, 2026
b45e4ae
🎭 feat: Add Credential-Free Playwright Smoke Suite with a Local Mock …
teresama Jun 2, 2026
2ef7bdf
⚡ feat: Immediate Conversation Title Generation (#13395)
danny-avila Jun 2, 2026
d680763
🧭 ci: Use System Chrome for Mock E2E (#13481)
danny-avila Jun 3, 2026
eae0025
🌍 i18n: Update translation.json with latest translations (#13482)
danny-avila Jun 3, 2026
c50b3c5
🏷️ fix: Prevent Bedrock Cache Tokens from Inflating Completion Count …
joohan-lee Jun 3, 2026
1fa28ec
🛰️ feat: Add Auth Fallback Observability (#13488)
danny-avila Jun 3, 2026
86fe79c
🔗 feat: Add Granular Access Control to Shared Links via ACL System (#…
AtefBellaaj Jun 3, 2026
baa23a8
🗂️ feat: Add Private Chat Projects (#13467)
danny-avila Jun 3, 2026
4dce0fd
🎚️ feat: Add Focus Management and Drag-to-Scrub to MessageNav (#13497)
danny-avila Jun 3, 2026
45d85bd
🪤 fix: Reload Messages When Reopening a Chat from a Non-Chat Route (#…
danny-avila Jun 4, 2026
1da789b
🗂️ feat: Add Agent File Authoring Tools (#13435)
danny-avila Jun 4, 2026
1507246
🚦 fix: Gate Chat Starts During Readiness (#13502)
danny-avila Jun 4, 2026
14d769d
🌍 i18n: Update translation.json with latest translations (#13505)
danny-avila Jun 4, 2026
a1bfa3b
🎭 test: Run Mock E2E Suite Through `createRun` With In-Process Fake M…
danny-avila Jun 4, 2026
dc42748
🧷 fix: Bind Agent File Context to Current Turn (#13506)
danny-avila Jun 4, 2026
dd66a43
💼 fix: Harden Shared-Link Message Sanitization with an Allowlist (#13…
danny-avila Jun 4, 2026
a11751e
🖼️ fix: Upgrade Framer Motion for Vite 8 Compatibility (#13512)
dlew Jun 4, 2026
f86e3ae
🧪 test: Add E2E Regression For 2FA framer-motion Crash (#13513)
danny-avila Jun 4, 2026
2f06d14
🪧 chore: Generalize Project Name Placeholder (#13514)
danny-avila Jun 4, 2026
7d0fead
📦 chore: npm audit fix (#13515)
danny-avila Jun 4, 2026
44ed786
📜 feat: Improve Skill Authoring Guidance (#13517)
danny-avila Jun 4, 2026
40ec77e
🪡 fix: Handle Missing Skill File Upsert Metadata (#13520)
danny-avila Jun 5, 2026
28e937a
👻 fix: Clear Project-Scoped Landing When the Selected Project Is Dele…
danny-avila Jun 5, 2026
3fb4802
🪹 feat: Collapse Empty Projects Section in the Sidebar by Default (#1…
danny-avila Jun 5, 2026
6357ea1
🧭 feat: Scope Model Spec Skills (#13522)
danny-avila Jun 5, 2026
2c8d54e
🗂️ feat: Add Deployment Skill Directory (#13523)
danny-avila Jun 5, 2026
5118a56
🧭 fix: Restore Empty Skill Allowlist Catalog (#13526)
danny-avila Jun 5, 2026
aeb5adf
🪦 fix: Add Durable MCP Config Tombstones (#13534)
danny-avila Jun 5, 2026
2ed59ac
🔐 fix: Handle Multiple Concurrent MCP OAuth Login Prompts (#13200)
janluedemann-esome Jun 5, 2026
da58763
🔐 fix: Reuse MCP OAuth Authorization URL (#13532)
danny-avila Jun 5, 2026
c374d08
🪪 fix: Filter ACL Principal Details (#13524)
danny-avila Jun 5, 2026
4b3fd63
🖼️ fix: Support Known Endpoint Group Icons (#13542)
danny-avila Jun 6, 2026
bede561
📊 fix: Contain Markdown Table Overflow (#13543)
danny-avila Jun 6, 2026
21607ba
📎 fix: Preserve Provider Document Uploads (#13550)
danny-avila Jun 6, 2026
bfb6b22
🔧 chore: Update ESLint config, Import Sorting script, Test Sharding, …
danny-avila Jun 6, 2026
ed4546c
🛠️ fix: Enable Gemini Mixed Tool Config (#13538)
danny-avila Jun 6, 2026
5c00bbe
🏪 feat: Surface Agent Marketplace in Model Selector (#13553)
danny-avila Jun 6, 2026
83bdd3d
🌱 feat: Support Soft Default Model Spec (#13554)
danny-avila Jun 6, 2026
5011be4
🚦 fix: Guard Auth Continuation with Dedicated Limiter (#13555)
danny-avila Jun 6, 2026
3571dfc
🏷️ fix: Categorize Auth Tokens by Flow Type (#13556)
danny-avila Jun 6, 2026
75bbefb
📎 fix: Scope Attachment Usage to Request Owner (#13557)
danny-avila Jun 6, 2026
8c71dbc
🛂 fix: Normalize Verification Flow Error Responses (#13558)
danny-avila Jun 6, 2026
07af6ee
🔀 fix: Reconcile Agent Action Credential Merges (#13559)
danny-avila Jun 6, 2026
9882234
⏳ feat: Make OpenID Token Reuse Window Configurable (#13546)
pboers1988 Jun 6, 2026
727dd3b
🃏 refactor: Agent Avatar Conversation Icons and Streaming Indicators …
danny-avila Jun 6, 2026
265d660
👷 ci: Type-check the Client Workspace (#13560)
danny-avila Jun 6, 2026
4b871a1
🧼 fix: Prevent Shared Link Caching and Strengthen Log Redaction (#13561)
danny-avila Jun 6, 2026
9a596fd
📦 chore: Update Turbo to v2.9.16 (#13564)
danny-avila Jun 6, 2026
9bf7046
🩹 chore: Double-Assert Partial Test Fixture in EndpointIcon (#13567)
danny-avila Jun 7, 2026
7554f2e
🩹 fix: Bump GitNexus to 1.6.5 and Fail-Soft the PR Index Job (#13569)
danny-avila Jun 7, 2026
1612dba
🏷️ fix: Preserve Generated Conversation Title on Stop (#13568)
danny-avila Jun 7, 2026
15108f0
🌲 test: Add E2E Coverage for Message Tree Streaming (#13570)
danny-avila Jun 7, 2026
6950448
🏛️ refactor: Prioritize Deployment Skills over Persisted Duplicates (…
danny-avila Jun 7, 2026
cb1d536
📻 fix: Replay MCP OAuth Prompts for Coalesced Connections (#13565)
danny-avila Jun 7, 2026
90ebecb
📊 feat: Surface Message Feedback as Langfuse Scores (#13544)
graphaelli Jun 7, 2026
15ea036
🧊 perf: Memoize Completed Markdown Blocks During Streaming (#13576)
danny-avila Jun 8, 2026
c80c54e
🔐 fix: Resolve Env Variables in MCP OAuth URL Fields (#13573)
rene84 Jun 8, 2026
192703e
⚡ perf: Migrate `data-schemas` Build to tsdown with isolatedDeclarati…
danny-avila Jun 8, 2026
6edbafd
⬆️ chore: Bump TypeScript to 5.9.3 (+ typescript-eslint 8.60.1) (#13584)
danny-avila Jun 8, 2026
3f4001f
🌿 fix: Anchor Post-Auth MCP Stream to Submission Message Tree (#13582)
danny-avila Jun 8, 2026
209e8d1
🚧 fix: Add Per-User Throttle to 2FA Continuation Attempts (#13583)
danny-avila Jun 8, 2026
4b699fb
📌 fix: Preserve Project Scope Through Enforced Model Specs (#13586)
danny-avila Jun 8, 2026
50a6a5b
🔧 chore: Enforce isolatedDeclarations in data-schemas tsconfig (#13593)
danny-avila Jun 8, 2026
6bc75d2
⚡️ refactor: Migrate `@librechat/api` build to `tsdown` (#13595)
danny-avila Jun 8, 2026
fbc51f6
⚡ refactor: Migrate `data-provider` Build to `tsdown` (split tsc dts)…
danny-avila Jun 8, 2026
cb6dbc8
⚡ refactor: Migrate `@librechat/client` build to `tsdown` (#13596)
danny-avila Jun 8, 2026
fb87abe
🧩 feat: Enable Model Spec Subagents (#13598)
danny-avila Jun 8, 2026
98755d8
📦 chore: Declare runtime deps externalized by tsdown in `@librechat/a…
danny-avila Jun 8, 2026
ae0c187
📋 refactor: Attach Message Context to Langfuse Feedback Scores (#13604)
danny-avila Jun 8, 2026
2a956f1
🪞 fix: Preserve Model Spec Icons Across Stream Resume and Abort (#13603)
danny-avila Jun 8, 2026
0bd1a73
👷 ci: Add API runtime smoke (boot the production image) to docker-smo…
danny-avila Jun 8, 2026
d231972
👷 fix: Preserve disabled build info flag in loadDefaultInterface (#13…
ethanlaj Jun 9, 2026
753e53e
🛬 fix: Coalesce Auth Recovery into a Single Refresh Flight (#13618)
danny-avila Jun 9, 2026
fd47282
🧵 fix: Reject Preliminary Parent Follow-Ups (#13619)
danny-avila Jun 9, 2026
6fc72e5
🚫 fix: Hide Empty Agents Endpoint from Model Selector (#13624)
danny-avila Jun 9, 2026
9db68ee
♊ chore: Upgrade `@google/genai` SDK to ^2.8.0 (#13625)
danny-avila Jun 9, 2026
6c36d80
♊ fix: Sanitize MCP Tool Schemas for Gemini/Vertex Compatibility (#13…
danny-avila Jun 9, 2026
82f7200
🌍 fix: Prefer Imagen-Specific Location over Default Google Region (#1…
pedrojreis Jun 9, 2026
8fc2314
🧠 fix: Bound Memory Agent Input (#13606)
danny-avila Jun 9, 2026
2aea5f4
📖 feat: Add Claude Fable 5 Support (#13628)
danny-avila Jun 9, 2026
a91c45d
🎙️ fix: Resolve Speech Recognition CJS/ESM Import Shape (#13631)
upman Jun 9, 2026
cecaa17
🕳️ fix: Guard Sparse Content Parts in Message Nav Preview (#13632)
upman Jun 9, 2026
7791fcf
🔇 fix: Suppress Expected Speech Synthesis Cancellation Errors (#13627)
upman Jun 9, 2026
d7fc4a7
📦 chore: Bump `@librechat/agents` to v3.2.32 (#13633)
danny-avila Jun 9, 2026
793cbd4
✂️ fix: Deduplicate Skill Bodies Across Fresh Primes and History (#13…
danny-avila Jun 9, 2026
c216b3c
🎞️ fix: Stream File Authoring Previews from Partial Tool Args (#13634)
danny-avila Jun 9, 2026
a7f1691
⏳ fix: Extend and Decouple MCP OAuth Flow Timeouts (#13622)
danny-avila Jun 9, 2026
7eafe31
🗝️ fix: Resolve MCP Runtime User and Request Placeholders (#13626)
danny-avila Jun 9, 2026
ba5778d
📥 fix: ChatGPT Conversation Import Failures (#13637)
danny-avila Jun 9, 2026
ca26a2d
🛰️ feat: Add GPT-5.5 + Frontier OpenAI Models, Drop Deprecated Defaul…
danny-avila Jun 10, 2026
f074bd9
📦 chore: Bump `jest-junit` to v17.0.0
danny-avila Jun 10, 2026
e25373d
📦 chore: Bump `@librechat/agents` to v3.2.33
danny-avila Jun 10, 2026
5660873
⚙️ refactor: Lazy-load HEIC upload conversion (#13638)
upman Jun 10, 2026
db863e7
⚙️ refactor: Lazy load locale resources (#13640)
upman Jun 10, 2026
346ebea
⚙️ refactor: brotli asset serving behind a feature toggle (#13641)
upman Jun 10, 2026
da6b74e
🪶 fix: Prevent Soft Default Model Spec from Overriding User Selection…
danny-avila Jun 10, 2026
56281ec
🚰 ci: Close Leaked Redis Clients in Cache Integration Tests (#13649)
danny-avila Jun 10, 2026
70f7450
🪟 ci: Shard Windows Frontend Unit Tests (#13651)
danny-avila Jun 10, 2026
5867f1a
🛡️ feat: Configurable Message PII Filter (#13602)
dustinhealy Jun 10, 2026
9628930
✅ ci: Add mock e2e coverage for agents, prompts, MCP, and chat flows …
teresama Jun 10, 2026
87cdd37
🧭 fix: Mobile Sidebar Navigation on Projects View (#13647)
danny-avila Jun 10, 2026
fe7bf39
🗜️ ci: Cache Dependencies and Builds in Cache Integration Tests (#13652)
danny-avila Jun 10, 2026
d91cec2
🤗 ci: Cache and Authenticate HF Model Downloads in GitNexus Index (#1…
danny-avila Jun 10, 2026
865e1da
⚙️ refactor: lazy-load React Query Devtools (#13639)
upman Jun 10, 2026
c27d6b8
🤫 refactor: Silent MCP OAuth Refresh on Mid-Session 401 (#13369)
danny-avila Jun 10, 2026
4a9af12
📐 fix: Sidebar Chat List Width Tracking and Stale Row Measurements (#…
danny-avila Jun 10, 2026
b4fa200
⏫ ci: Bump GitNexus to 1.6.7 to Fix Embeddings Index Timeout (#13658)
danny-avila Jun 10, 2026
dffd27f
🎫 fix: Forward User Auth Headers on Model Fetch (#13616)
Ivan-Apro Jun 10, 2026
0d24cbd
🚪 fix: Align Mobile Sidebar Toggle Gating with JS Breakpoint Across V…
danny-avila Jun 10, 2026
eebbde7
📦 chore: Update Turbo package to v2.9.17
danny-avila Jun 10, 2026
a52c824
🚷 fix: Reject Client-Supplied Subagent Configuration (#13660)
danny-avila Jun 10, 2026
7a8a18f
🗝️ chore: Use Element Access over `any`-Casts in Registry Cache Spec …
danny-avila Jun 11, 2026
470be23
✨ feat: Surface Model Spec Branding on Landing and Selector (#13662)
danny-avila Jun 11, 2026
197a1dc
🧬 feat: Add GitHub Skill Sync (#13293)
danny-avila Jun 11, 2026
919a463
🧹 ci: Relieve disk pressure on GitNexus deploy (#13666)
danny-avila Jun 11, 2026
65bca95
🎒 fix: Carry Request-Scoped MCP Tools into PTC Execution (#13669)
danny-avila Jun 11, 2026
139d61c
🚐 fix: Reuse Request-Scoped MCP Connections per Run (#13673)
danny-avila Jun 11, 2026
e0f715b
🔒 fix: Scan All Message Roles in messageFilter.pii (#13677)
dustinhealy Jun 11, 2026
788cc5a
🛟 fix: Auto-Recover from Stale Service Worker Assets After Deploys (#…
danny-avila Jun 11, 2026
731a7c5
🥇 fix: Send First OpenID Audience on Authorization Requests (#13694)
danny-avila Jun 11, 2026
b39ec16
🔌 fix: Preserve Ephemeral MCP Selections Across Model Switches (#13697)
danny-avila Jun 11, 2026
a8a6360
📬 feat: Report Tool Results Per Call via `onResult` Channel (#13698)
danny-avila Jun 12, 2026
2d6b7df
🛬 fix: Prevent Viewed Conversations from Re-Arming the Soft Default S…
danny-avila Jun 12, 2026
8154a31
📦 chore: npm audit fix (#13701)
danny-avila Jun 12, 2026
dea71c8
🪟 fix: Cross-Platform Absolute-Path Check in tsdown neverBundle Predi…
phoenixtekk Jun 13, 2026
5ceabad
🪢 fix: Prune Dangling Skill IDs from Agent Allowlists (#13702)
danny-avila Jun 13, 2026
49859c0
🗄️ fix: Gate Request-Scoped MCP Servers Out of Persistent Tool Cache …
danny-avila Jun 13, 2026
05eb986
💬 feat: Conversation Starters for Model Specs (#13710)
mharveybu Jun 13, 2026
65e2838
🔧 fix: Honor NO_PROXY for OpenID requests when PROXY is set (#13716)
i-anubhav-anand Jun 13, 2026
3c3837b
🧾 fix: Bill Subagent Child-Run Model Usage in Parent Transactions (#1…
danny-avila Jun 13, 2026
db7011d
📊 feat: Real-Time Context Window & Token Usage Tracking (#13670)
danny-avila Jun 13, 2026
9618be6
🌿 fix: Preserve Viewed Branch on Sibling-Tree Churn (#13732)
danny-avila Jun 14, 2026
fc2ae89
⌚ feat: Show Message Timestamps on Hover (#13709)
berry-13 Jun 14, 2026
16bbc4b
🎨 fix: Gate message hover-reveal controls on hover capability, not wi…
berry-13 Jun 14, 2026
98704f2
🌐 fix: Centralize Outbound Proxy Handling (#13726)
danny-avila Jun 14, 2026
b03b2a0
💾 feat: Persist Context Breakdown & Branch/Total Usage Cost (#13734)
danny-avila Jun 14, 2026
4ee68d5
💸 feat: Per-Agent Endpoint Token Config in Multi-Endpoint Billing (#1…
danny-avila Jun 14, 2026
7cf2877
🪙 feat: Context Gauge UX, Hover Snapshot, Click Breakdown, Currency, …
danny-avila Jun 14, 2026
1ae54b3
🔍 fix: Render Web Search Favicons on Raw SERP Results During Streamin…
danny-avila Jun 14, 2026
7c071e2
🔢 fix: Prevent "approximately" tildes from rendering as markdown subs…
danny-avila Jun 14, 2026
2350ebb
📨 feat: Custom Headers on Built-in Provider Endpoints (#13742)
danny-avila Jun 14, 2026
44c253d
🪙 fix: Correct Context Usage Gauge After Summarization (#13744)
danny-avila Jun 14, 2026
9efe487
🅰️ feat: Native Anthropic Provider for Custom Endpoints (#13748)
danny-avila Jun 14, 2026
bc5a3f5
📡 refactor: Gate Noisy Redis OTEL Instrumentation (#13764)
upman Jun 15, 2026
fbc990f
📈 fix: Isolate RUM Telemetry Proxy Auth from App Auth (#13765)
upman Jun 15, 2026
b917e04
✨ v0.8.7-rc1 (#13592)
danny-avila Jun 15, 2026
5986a1c
📊 chore: Bump Helm chart version to 2.0.6
danny-avila Jun 15, 2026
23c9226
🌍 i18n: Update translation.json with latest translations (#13766)
danny-avila Jun 15, 2026
bf94697
🫷 fix: Withhold Anthropic Custom Headers From User URLs (#13767)
danny-avila Jun 15, 2026
ec94437
🧾 refactor: Disable Context Cost By Default (#13768)
danny-avila Jun 15, 2026
62ed62a
🏘️ fix: Scope Skill Sync Status (#13771)
danny-avila Jun 15, 2026
0537930
🗂️ fix: Scope Token Config Cache (#13770)
danny-avila Jun 15, 2026
055585f
🪢 fix: Tie MCP Cleanup To Resumable Runs (#13769)
danny-avila Jun 15, 2026
d18d62e
🪙 refactor: Reconcile Context Gauge to Actual Provider Tokens (#13780)
danny-avila Jun 16, 2026
b91c1c2
🎤 fix: Keep Microphone Icon Visible On Initial Chat Render (#13788)
danny-avila Jun 16, 2026
d0f659f
🗜️ fix: Support Windows ZIP MIME Uploads (#13794)
danny-avila Jun 16, 2026
054fa4b
🥽 fix: Restrict MCP Server URL Disclosure to Admins, Owners, and Edit…
dustinhealy Jun 16, 2026
4cb3594
🩹 fix: Bill Anthropic Prompt-Cache Tokens Once (#13798)
danny-avila Jun 16, 2026
c820dfb
🛤️ ci: Limit GitNexus Deploys To Main And Dev Only (#13799)
danny-avila Jun 16, 2026
fdc7e64
🪙 feat: SDK-Aligned Context-Usage Projection (gauge for window-switch…
danny-avila Jun 16, 2026
6055ad0
🪃 fix: Restore Raw Spec Fallback for Enforced Presets (#13804)
danny-avila Jun 17, 2026
c04bddd
🪵 refactor: Bound Log Traversal And Remove Legacy api/config Logger (…
danny-avila Jun 17, 2026
49f4b65
🔐 fix: Honor Admin-Panel MCP Allowlist Overrides Without Restart (#13…
danny-avila Jun 18, 2026
743f57f
🔖 feat: Add Pinned Conversations (#13492)
dlew Jun 18, 2026
8628897
📦 chore: Bump `@librechat/agents` to v3.2.37 (#13826)
danny-avila Jun 18, 2026
27b0782
📛 feat: Tag Langfuse Traces With Tenant ID (#13808)
upman Jun 18, 2026
a6b5343
📦 chore: npm audit fix (#13828)
danny-avila Jun 18, 2026
58647bc
🔖 fix: Decrement Bookmark Counts When Deleting Conversations (#13830)
danny-avila Jun 18, 2026
d847486
🕰️ feat: Resolve Agent Prompt Time Variables in User's Timezone (#13815)
berry-13 Jun 18, 2026
9de3249
🎛️ feat: Redesign Settings with Registry-Driven Dialog, Search, and M…
berry-13 Jun 18, 2026
a468bec
🔑 feat: Agent API Keys management UI in Settings → Data controls (#13…
berry-13 Jun 18, 2026
2fcba91
🔗 fix: Surface Share Permissions Load Error as Alert Button With Tool…
danny-avila Jun 18, 2026
68d142d
🦜 refactor: Use path for Read/Write/Edit/Create File Tools (#13834)
danny-avila Jun 18, 2026
84886c5
🧷 fix: Preserve Document Priority on Section-Scoped Config Writes (#1…
dustinhealy Jun 18, 2026
fa20003
🛂 refactor: Accept Targeted `assign:configs` for Config Scope-Lifecyc…
dustinhealy Jun 18, 2026
6a63531
📒 feat: Audit Log Backend for SystemGrant Assign and Revoke Events (#…
dustinhealy Jun 18, 2026
268fcbb
🕐 feat: Add `promptCacheTtl` model parameter for 1h/5m cache duration…
danny-avila Jun 18, 2026
2c6db6b
🪞 fix: Match Prompt Cache TTL Control to Region Combobox Styling (#13…
danny-avila Jun 19, 2026
91f25b8
📦 chore: bump `@librechat/agents` to v3.2.42 (#13848)
danny-avila Jun 19, 2026
e6fc232
🌍 i18n: Update translation.json with latest translations (#13836)
danny-avila Jun 19, 2026
36ae268
🐛 fix: resolve dayjs plugin ESM imports in data-provider (#13851)
danny-avila Jun 19, 2026
8969034
♊ fix: Strip remaining unsupported JSON Schema keywords for Gemini MC…
danny-avila Jun 19, 2026
f8aa45d
🔚 feat: Add Bottom Terminus Node to Message Minimap Navigation (#13853)
danny-avila Jun 19, 2026
59637e1
📦 chore: Bump `@librechat/agents` to v3.2.43 (#13854)
danny-avila Jun 19, 2026
3926fda
🎒 fix: Apply OCR Context to Responses API Agents and Handoffs (#13707)
Airamhh Jun 20, 2026
21d98b8
🏷️ fix: Scope File Search entity_id to Agent Knowledge-Base Files Onl…
msserpa Jun 20, 2026
9dd0df9
🔑 feat: Surface User-Provided API Keys in Settings, Scoped to Reachab…
danny-avila Jun 20, 2026
ff81377
🚦 ci: Stop Auto-Indexing PR Branches in GitNexus Index (#13866)
danny-avila Jun 20, 2026
229c54c
🪢 fix: Paginate MCP `tools/list` to Load All Tools (#13840)
TomasPalsson Jun 20, 2026
dfc1178
🪙 feat: Add Token Pricing for Devstral, Voxtral, Holo2, and Mistral M…
JumpLink Jun 20, 2026
8824e8f
🚪 fix: Gate Artifacts Toggle on Agent Capability Flag (#13665)
serhiizghama Jun 20, 2026
f76a5fa
📌 feat: Seed Default Pinned Tools and MCP Dropdown via Interface Conf…
danny-avila Jun 20, 2026
c9180d1
🎯 fix: Narrow Public Share 401 Bypass to the Share Endpoint Only (#12…
danny-avila Jun 20, 2026
ef65f4a
🪙 chore: drop redundant voxtral-small token pricing key (#13867)
JumpLink Jun 20, 2026
e515063
🔗 feat: Snapshot Files for Shared-Link Attachments (#13740)
danny-avila Jun 21, 2026
5eb1c2c
🖇️ feat: Reference Selected Chat Text with Multi-Quote Popup (#13868)
danny-avila Jun 21, 2026
1505fd5
📦 chore: Bump `@librechat/agents` to v3.2.44
danny-avila Jun 21, 2026
465cb6e
👐 a11y: Bump `@ariakit/react`, Improve a11y of Token Usage, Archived …
danny-avila Jun 21, 2026
919c798
🌍 i18n: Update translation.json with latest translations (#13875)
danny-avila Jun 22, 2026
3945533
🏷️ chore: Bump Individual Package Versions (#13891)
danny-avila Jun 22, 2026
30f9759
🌍 i18n: Update translation.json with latest translations (#13892)
danny-avila Jun 22, 2026
77983db
🐳 feat: Bundle Admin Panel in Docker Compose Stacks (#13876)
danny-avila Jun 22, 2026
ebb4f15
⌨️ feat: Keyboard Shortcuts (#12425)
berry-13 Jun 22, 2026
e807c63
🔐 fix: Gate Shared Startup Config By Link Access (#13897)
danny-avila Jun 23, 2026
edc0aeb
🛂 fix: Re-Check `execute_code` Authorization on Event-Driven Tool Loa…
danny-avila Jun 23, 2026
725a14e
🪜 fix: Strip Caller-Supplied Priority from Assign-Only Config Upserts…
danny-avila Jun 23, 2026
ddc7635
🍪 fix: Validate Shared-File Cookie Auth Against the Live Refresh Sess…
danny-avila Jun 23, 2026
d9251fc
✂️ fix: Cap Audit Chain Verification and Honor Client Cancellation (#…
danny-avila Jun 23, 2026
2f800c5
💰 fix: Bound MCP tools/list Pagination with Aggregate Budgets (#13909)
danny-avila Jun 23, 2026
77854de
🪣 fix: Cap Context Projection Workload Before Tokenization (#13910)
danny-avila Jun 23, 2026
cb2bafb
🧂 chore: Require an Operator-Supplied Admin Panel Session Secret (#13…
danny-avila Jun 23, 2026
bc6b032
🛑 refactor: Demote User Abort Logs (#13904)
danny-avila Jun 23, 2026
33d7b00
🌍 i18n: Update translation.json with latest translations (#13914)
danny-avila Jun 23, 2026
f14309e
🪶 refactor: Ground Default Model Spec Selection in Conversation Recen…
danny-avila Jun 23, 2026
606292c
🤐 fix: Withhold Custom Endpoint Headers for User URLs (#13917)
danny-avila Jun 23, 2026
1eb460e
🧾 fix: Harden Historical File Authorization (#13918)
danny-avila Jun 23, 2026
f616a58
🖱️ fix: Summon Quote Popup on Double-Click Word Selection (#13923)
danny-avila Jun 23, 2026
562bd8e
🐛 fix: Prevent Infinite Render Loop on Code-Execution File Preview (#…
danny-avila Jun 23, 2026
0a3448d
🧭 fix: Harden User Provided Endpoint URL Protection (#13919)
danny-avila Jun 23, 2026
f09a1ad
🧹 fix: Order Enabled Guard After Config Expansion in `useGetAgentById…
dlew Jun 23, 2026
d9a76fc
🧠 feat: Configurable Reasoning Replay for Custom Endpoints (#13921)
danny-avila Jun 24, 2026
6934d07
🌵 fix: Align Mention Empty Result Behavior With Skills Command (#13928)
Oliver777int Jun 24, 2026
1662adc
📺 feat: Google URL Context Param with Native YouTube Video Understand…
danny-avila Jun 24, 2026
ef1ee6e
🪤 fix: Guard Prompts Popover Against Empty Result Keyboard Navigation…
danny-avila Jun 24, 2026
8266244
🧱 ci: Retry Failed Docker Builds (#13935)
danny-avila Jun 24, 2026
189cb24
🫥 fix: Hide Quote Popup When Selection Collapses Silently (#13936)
danny-avila Jun 24, 2026
c561087
🐌 fix: Prevent ReDoS in YouTube URL Extraction for URL Context (#13937)
danny-avila Jun 24, 2026
9e74cc0
✨ v0.8.7 (#13907)
danny-avila Jun 24, 2026
481841f
Resolved conflicts
Jul 15, 2026
98536ff
🔧 fix: Resolve isolatedDeclarations and prettier errors in data-schemas
Jul 15, 2026
288b29c
🔧 fix: Resolve isolatedDeclarations error in admin user stats handler
Jul 15, 2026
890c1b1
🎨 style: Fix prettier formatting in admin/user.stats and data-schemas
Jul 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:18-bullseye
FROM node:24.16.0-bullseye

RUN useradd -m -s /bin/bash vscode
RUN mkdir -p /workspaces && chown -R vscode:vscode /workspaces
Expand Down
21 changes: 11 additions & 10 deletions .do/gitnexus/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,20 @@
# startup. A fresh index only requires rsync + container restart — no
# image rebuild on every push.

FROM node:24-slim
FROM node:24.16.0-slim

ARG GITNEXUS_VERSION=1.5.3
ARG GITNEXUS_VERSION=1.6.7
# Pin the native DB to match the index workflow; gitnexus's ^0.17.0 range
# would otherwise let the served image drift from the CI-produced index.
ARG LADYBUG_VERSION=0.17.1

# 1. Build native addons with Bookworm toolchain, then remove build tools.
# curl stays for the docker healthcheck; Caddy lives in its own container.
# LadybugDB is pinned nested under gitnexus so step 3's require() resolves it.
RUN apt-get update \
&& apt-get install -y --no-install-recommends python3 make g++ curl \
&& npm install -g gitnexus@${GITNEXUS_VERSION} \
&& npm install --no-save --prefix /usr/local/lib/node_modules/gitnexus "@ladybugdb/core@${LADYBUG_VERSION}" \
&& apt-get purge -y --auto-remove python3 make g++ \
&& rm -rf /var/lib/apt/lists/* /root/.npm

Expand All @@ -26,17 +31,13 @@ RUN echo "deb http://deb.debian.org/debian trixie main" > /etc/apt/sources.list.
&& rm -rf /var/lib/apt/lists/*

# 3. Pre-install LadybugDB FTS + vector extensions so ~/.kuzu/extension/
# is baked into the image. Workaround for upstream GitNexus 1.5.3 bug.
# is baked into the image. gitnexus serve loads extensions with a
# load-only policy and never installs them at runtime, so the cache
# must already exist. (GitNexus loads the vector extension itself
# via loadVectorExtension — no adapter patch needed.)
COPY install-extensions.js /tmp/install-extensions.js
RUN node /tmp/install-extensions.js && rm -rf /tmp/install-extensions.js /tmp/lbug-ext-install

# 4. Patch lbug-adapter.js to also LOAD EXTENSION vector after FTS.
RUN LBUG_ADAPTER=/usr/local/lib/node_modules/gitnexus/dist/mcp/core/lbug-adapter.js \
&& grep -q "LOAD EXTENSION fts" "$LBUG_ADAPTER" \
&& sed -i "s|await available\[0\]\.query('LOAD EXTENSION fts');|await available[0].query('LOAD EXTENSION fts'); try { await available[0].query('LOAD EXTENSION vector'); } catch (e) { /* vector extension may not be installed */ }|g" "$LBUG_ADAPTER" \
&& grep -c "LOAD EXTENSION vector" "$LBUG_ADAPTER" \
&& echo "lbug-adapter.js patched to load vector extension"

COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

Expand Down
185 changes: 180 additions & 5 deletions .env.example

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Project maintainers have the right and responsibility to remove, edit, or reject

## 1. Development Setup

1. Use Node.js v20.19.0+ or ^22.12.0 or >= 23.0.0.
1. Use Node.js v24.16.0.
2. Run `npm run smart-reinstall` to install dependencies (uses Turborepo). Use `npm run reinstall` for a clean install, or `npm ci` for a fresh lockfile-based install.
3. Build all compiled code: `npm run build`.
4. Setup and run unit tests:
Expand Down
21 changes: 9 additions & 12 deletions .github/ISSUE_TEMPLATE/BUG-REPORT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,14 @@ body:
id: version-info
attributes:
label: Version Information
description: |
If using Docker, please run and provide the output of:
```bash
docker images | grep librechat
```

If running from source, please run and provide the output of:
```bash
git rev-parse HEAD
```
placeholder: Paste the output here
description: |
In LibreChat, open **Settings → About** and click **Copy diagnostics**, then paste the result here.
This captures the exact version, commit, branch, and build date so maintainers can pinpoint the build you're running.

If the About panel is unavailable (older version / self-hosted with it disabled), please provide as much of the following as possible instead:
- Docker: `docker images | grep librechat` (image tag) and `docker inspect <image> | grep -i "\"Commit\\|BUILD_"` if build args were set
- Source: `git rev-parse HEAD` and `git rev-parse --abbrev-ref HEAD`
placeholder: Paste the diagnostics block here
validations:
required: true
- type: textarea
Expand Down Expand Up @@ -93,4 +90,4 @@ body:
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/danny-avila/LibreChat/blob/main/.github/CODE_OF_CONDUCT.md)
options:
- label: I agree to follow this project's Code of Conduct
required: true
required: true
2 changes: 1 addition & 1 deletion .github/playwright.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
# - uses: actions/checkout@v4
# - uses: actions/setup-node@v4
# with:
# node-version: 18
# node-version: 24.16.0
# cache: 'npm'

# - name: Install global dependencies
Expand Down
237 changes: 237 additions & 0 deletions .github/scripts/sync-helm-chart-tags.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,237 @@
#!/usr/bin/env bash
set -euo pipefail

CHART_PATH="${CHART_PATH:-helm/librechat/Chart.yaml}"
DEFAULT_BRANCH="${DEFAULT_BRANCH:-main}"
BASE_REF="${BASE_REF:-refs/remotes/origin/${DEFAULT_BRANCH}}"
BACKFILL_FROM_VERSION="${BACKFILL_FROM_VERSION:-1.9.0}"
PUSH_TAGS="${PUSH_TAGS:-false}"
TAG_PREFIX="${TAG_PREFIX:-chart-}"
GITHUB_SERVER_URL="${GITHUB_SERVER_URL:-https://github.com}"
DISPATCH_WORKFLOW="${DISPATCH_WORKFLOW:-}"
RELEASE_EXISTING_TAG="${RELEASE_EXISTING_TAG:-}"
SEMVER_REGEX='^(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[0-9A-Za-z-]+([.][0-9A-Za-z-]+)*)?([+][0-9A-Za-z-]+([.][0-9A-Za-z-]+)*)?$'

fail() {
printf '::error::%s\n' "$1" >&2
exit 1
}

git_auth_header() {
token="$(printf 'x-access-token:%s' "$GITHUB_TOKEN" | base64 | tr -d '\n')"
printf 'AUTHORIZATION: basic %s' "$token"
}

git_with_auth() {
if [ -n "${GITHUB_TOKEN:-}" ]; then
git -c "http.extraheader=$(git_auth_header)" "$@"
return
fi

git "$@"
}

dispatch_release() {
tag="$1"

if [ -z "$DISPATCH_WORKFLOW" ]; then
return
fi

if [ -z "${GITHUB_REPOSITORY:-}" ]; then
fail "GITHUB_REPOSITORY is required to dispatch ${DISPATCH_WORKFLOW}"
fi

if [[ ! "$GITHUB_REPOSITORY" =~ ^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$ ]]; then
fail "Unexpected repository name: ${GITHUB_REPOSITORY}"
fi

if [[ ! "$DISPATCH_WORKFLOW" =~ ^[A-Za-z0-9_.-]+[.]ya?ml$ ]]; then
fail "Unexpected workflow file: ${DISPATCH_WORKFLOW}"
fi

token="${GH_TOKEN:-${GITHUB_TOKEN:-}}"
if [ -z "$token" ]; then
fail "GH_TOKEN or GITHUB_TOKEN is required to dispatch ${DISPATCH_WORKFLOW}"
fi

command -v gh >/dev/null ||
fail "GitHub CLI is required to dispatch ${DISPATCH_WORKFLOW}"

GH_TOKEN="$token" gh workflow run "$DISPATCH_WORKFLOW" \
--repo "$GITHUB_REPOSITORY" \
--ref "$DEFAULT_BRANCH" \
-f "chart_tag=${tag}"
}

version_less_than() {
left="${1%%[-+]*}"
right="${2%%[-+]*}"

IFS=. read -r left_major left_minor left_patch <<<"$left"
IFS=. read -r right_major right_minor right_patch <<<"$right"

if (( left_major != right_major )); then
(( left_major < right_major ))
return
fi

if (( left_minor != right_minor )); then
(( left_minor < right_minor ))
return
fi

(( left_patch < right_patch ))
}

validate_chart_tag() {
tag="$1"
version="${tag#${TAG_PREFIX}}"

git check-ref-format "refs/tags/${tag}" >/dev/null ||
fail "Refusing to use invalid tag ${tag}"

if [[ "$tag" != "${TAG_PREFIX}"* || ! "$version" =~ $SEMVER_REGEX ]]; then
fail "Chart tags must use the form ${TAG_PREFIX}<semver>, for example ${TAG_PREFIX}2.0.5"
fi
}

dispatch_existing_tag() {
tag="$1"

if [ -z "$tag" ]; then
return
fi

validate_chart_tag "$tag"

if [ "$PUSH_TAGS" != "true" ]; then
printf 'Would dispatch release workflow for existing %s.\n' "$tag"
return
fi

if ! git_with_auth ls-remote --exit-code --tags origin "refs/tags/${tag}" >/dev/null 2>&1; then
fail "Remote tag ${tag} does not exist"
fi

printf 'Dispatching release workflow for existing %s.\n' "$tag"
dispatch_release "$tag"
}

chart_version_at() {
git show "${1}:${CHART_PATH}" 2>/dev/null | awk '
/^version:[[:space:]]*/ {
value = $0
sub(/^version:[[:space:]]*/, "", value)
sub(/[[:space:]]*#.*/, "", value)
gsub(/^[[:space:]"'\''"]+|[[:space:]"'\''"]+$/, "", value)
print value
exit
}
'
}

case "$PUSH_TAGS" in
true | false) ;;
*) fail "PUSH_TAGS must be true or false" ;;
esac

if [[ ! "$BACKFILL_FROM_VERSION" =~ $SEMVER_REGEX ]]; then
fail "BACKFILL_FROM_VERSION must be a valid SemVer value"
fi

git rev-parse --verify "${BASE_REF}^{commit}" >/dev/null ||
fail "Unable to resolve ${BASE_REF}; fetch ${DEFAULT_BRANCH} before running this script"

history_file="$(mktemp)"
versions_file="$(mktemp)"
seen_file="$(mktemp)"
missing_file="$(mktemp)"
cleanup() {
rm -f "$history_file" "$versions_file" "$seen_file" "$missing_file"
}
trap cleanup EXIT

git log --first-parent --reverse --format=%H "$BASE_REF" -- "$CHART_PATH" >"$history_file"

if [ ! -s "$history_file" ]; then
fail "No history found for ${CHART_PATH} on ${BASE_REF}"
fi

while IFS= read -r commit; do
version="$(chart_version_at "$commit")"

if [ -z "$version" ]; then
continue
fi

if [[ ! "$version" =~ $SEMVER_REGEX ]]; then
fail "${CHART_PATH} has invalid SemVer '${version}' at ${commit}"
fi

if version_less_than "$version" "$BACKFILL_FROM_VERSION"; then
continue
fi

if grep -Fqx "$version" "$seen_file"; then
continue
fi

printf '%s\n' "$version" >>"$seen_file"
printf '%s\t%s\n' "$version" "$commit" >>"$versions_file"
done <"$history_file"

if [ ! -s "$versions_file" ]; then
fail "No chart versions found in ${CHART_PATH}"
fi

while IFS="$(printf '\t')" read -r version commit; do
tag="${TAG_PREFIX}${version}"

validate_chart_tag "$tag"

if git rev-parse --quiet --verify "refs/tags/${tag}" >/dev/null; then
continue
fi

printf '%s\t%s\n' "$tag" "$commit" >>"$missing_file"
done <"$versions_file"

if [ ! -s "$missing_file" ]; then
printf 'All chart versions on %s already have %s tags.\n' "$BASE_REF" "$TAG_PREFIX"
dispatch_existing_tag "$RELEASE_EXISTING_TAG"
exit 0
fi

while IFS="$(printf '\t')" read -r tag commit; do
short_commit="$(git rev-parse --short "$commit")"

if [ "$PUSH_TAGS" != "true" ]; then
printf 'Would create %s at %s.\n' "$tag" "$short_commit"
continue
fi

if git_with_auth ls-remote --exit-code --tags origin "refs/tags/${tag}" >/dev/null 2>&1; then
printf 'Remote tag %s already exists; dispatching release workflow.\n' "$tag"
dispatch_release "$tag"
continue
fi

git tag "$tag" "$commit"

if git_with_auth push origin "refs/tags/${tag}"; then
printf 'Created %s at %s.\n' "$tag" "$short_commit"
dispatch_release "$tag"
continue
fi

if git_with_auth ls-remote --exit-code --tags origin "refs/tags/${tag}" >/dev/null 2>&1; then
printf 'Remote tag %s was created concurrently; dispatching release workflow.\n' "$tag"
dispatch_release "$tag"
continue
fi

fail "Failed to push ${tag}"
done <"$missing_file"

dispatch_existing_tag "$RELEASE_EXISTING_TAG"
4 changes: 4 additions & 0 deletions .github/workflows/a11y.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ on:
required: true
default: 'false'

permissions:
contents: read
pull-requests: write

jobs:
axe-linter:
runs-on: ubuntu-latest
Expand Down
Loading
Loading