Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2135 commits
Select commit Hold shift + click to select a range
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
b84e266
🕒 feat: Track Terms Acceptance Timestamp (#10810)
berry-13 Jun 24, 2026
61016e3
🔄 feat: Continue Shared Conversations as Personal Copies (#13714)
berry-13 Jun 24, 2026
771b93b
🪝 feat: HITL Tool Approval Scaffolding (Slice A) (#12938)
danny-avila Jun 24, 2026
397ddc5
🧠 feat: Add Memory as an Agent Capability with Inline Tools and Ephem…
danny-avila Jun 24, 2026
1dffa10
📦 chore: bump `@librechat/agents` to v3.2.52 (#13939)
danny-avila Jun 24, 2026
5c5ef37
⬆️ chore: Migrate off deprecated @ariakit/react-core to @ariakit/reac…
danny-avila Jun 25, 2026
03ecac8
🧪 ci: Resolve DataTable test infinite re-render (#13947)
danny-avila Jun 25, 2026
e26ce47
🔑 fix: Honor User-Provided MCP API Key Instead of Forcing OAuth (#13954)
danny-avila Jun 25, 2026
376370d
♻️ refactor: Compute Context Gauge Client-Side, Drop Projection Endpo…
danny-avila Jun 25, 2026
abf9fc3
📇 feat: Agent Contact Visibility with Owner Fallback (#13663)
peeeteeer Jun 25, 2026
0d1103f
🪙 fix: Count Quote Tokens on Message Edit (#13958)
danny-avila Jun 25, 2026
0789a04
🪟 feat: Faithful Over-Window Context Estimate via Prune Mirror and Ov…
danny-avila Jun 25, 2026
a0529c9
🪭 feat: Add opt-in Langfuse fanout gateway + collector (#13872)
upman Jun 26, 2026
edeb1ec
📋 fix: Route Clipboard Paste Through Upload Options (#13957)
dustinhealy Jun 26, 2026
3790bdc
📇 fix: Index sharedlinks updatedAt for Cosmos DB Sorts (#13979)
danny-avila Jun 26, 2026
b15d40e
🪣 refactor: Rate-Limit Token Routes and Cap Remote File Downloads (#1…
danny-avila Jun 26, 2026
12fea69
🦥 perf: Lazy-Load Agent Version History in Editor (#13977)
danny-avila Jun 26, 2026
4fa86be
📂 fix: Mount Skill Files Under `skills/` in Code Interpreter (#13961)…
danny-avila Jun 26, 2026
c948606
🛗 perf: Fetch Pinned Agents Directly Past the Global Agents Map (#13972)
danny-avila Jun 26, 2026
186b738
🪟 fix: Re-measure Sidebar Chat List on Width Change to Fix Date-Group…
danny-avila Jun 26, 2026
6dbf9d5
🪝 feat: Human-in-the-Loop Runtime - Tool Approval + Ask-User-Question…
danny-avila Jun 29, 2026
8545af9
📦 chore: bump `@librechat/agents` to v3.2.54 (#14035)
danny-avila Jun 30, 2026
e5d5018
⚡ perf: memoize FavoritesList and BookmarkNav to prevent re-renders d…
berry-13 Jun 30, 2026
dd8a455
🪗 feat: Dock-Style Fisheye Nav Rail With Instant Hover Preview (#14021)
danny-avila Jun 30, 2026
6523a5a
🗺️ refactor: Light Up In-Viewport Ribs at Rest in Message Nav (#14041)
danny-avila Jun 30, 2026
9f8b6d9
🤖 feat: Add Claude Sonnet 5 Support (#14042)
danny-avila Jun 30, 2026
927a595
📏 fix: Make `create_file` Missing-Content Error Truncation-Aware (#14…
danny-avila Jun 30, 2026
ac759ef
🥷 feat: Add `showInMenu` Option to Model Specs (#14034)
alexkorep Jun 30, 2026
954caef
🔄 chore: Bump `@librechat/agents` to v3.2.55
danny-avila Jul 1, 2026
84329ab
fix: use `logAxiosError` at the RAG file_search/context call sites (#…
mawburn Jul 1, 2026
c00fb2d
fix: `stripHeavyErrorFields` Winston format (defense-in-depth) (#14018)
mawburn Jul 1, 2026
6576688
📥 fix: Download Original File From Artifact Preview Panel for Office …
berry-13 Jul 1, 2026
68bb533
🔥 fix: Firebase CDN Initialization Under tsdown CJS Interop (#14046)
jakacenta Jul 1, 2026
38ab4ad
fix: preserve role SHARE permissions across boot in initializeRoles (…
mawburn Jul 1, 2026
b20abb2
fix: bound peak memory of concurrent base64 attachment encoding (#14023)
mawburn Jul 1, 2026
e88f7a8
📧 fix: Add .eml (message/rfc822) Support to File Upload (#13989)
Zirkonium88 Jul 1, 2026
f5c64a4
📐 test: Guard Web Search Description Length (#14044)
danny-avila Jul 1, 2026
bb7d99d
🫷 feat: Exclude File Authoring Tools From Eager Execution (#14051)
danny-avila Jul 1, 2026
e6f5b6e
🌍 i18n: Update translation.json with latest translations (#14053)
danny-avila Jul 1, 2026
89931ba
🚪 fix: Support Admin Redirect Detection for Same-Origin Subpaths (#14…
arjunvijay24 Jul 1, 2026
53ee82f
🩹 fix: Coerce Stringified `edit_file` Edits (JSON-in-JSON) (#14056)
danny-avila Jul 1, 2026
8683ecc
🧠 fix: Apply Bedrock thinking config to bare inference-profile model …
danny-avila Jul 1, 2026
6b049c2
🧠 fix: Default Bedrock thinking `maxTokens` to model max output (#14058)
danny-avila Jul 1, 2026
e452a13
⚡ perf: Minimize group membership query in principal resolution (#14055)
danny-avila Jul 2, 2026
0eef643
🌍 i18n: Update translation.json with latest translations (#14070)
danny-avila Jul 2, 2026
477ee34
🧪 ci: De-flake ConversationsSection memoization spec on slow runners …
danny-avila Jul 2, 2026
8f0756e
fix: stop the artifact-edit retry loop on unrecoverable 400s (#14060)
mawburn Jul 2, 2026
f1ea415
🎣 fix: Surface Resumable Stream Start Errors (#14072)
danny-avila Jul 2, 2026
b6c0bc7
⚡ perf: Skip Role Route Capability Probe for Own and Default Roles (#…
danny-avila Jul 2, 2026
ac7dc49
🪭 refactor: safe structured failure logging for langfuse fanout gatew…
upman Jul 2, 2026
53b3e16
📉 perf: Skip Redundant Permission Queries on MCP Servers List (#14077)
danny-avila Jul 2, 2026
424ccff
🪝 feat: Configurable Tool-Approval Policy via Programmatic Hooks (#14…
danny-avila Jul 2, 2026
ed85470
⚡ perf: Persist HITL checkpoints only on pause (lazy checkpointer) (#…
danny-avila Jul 5, 2026
7b7fa49
🗃️ perf: Cache Group Memberships for ACL Principal Resolution (#14075)
danny-avila Jul 5, 2026
84fa6aa
🧹 feat: Eager HITL Checkpoint Cleanup (Expiry + Deletion) & Full-Wiri…
danny-avila Jul 5, 2026
edd614b
🧰 feat: Redesign Agent Builder with Unified Tools Marketplace, Skills…
berry-13 Jul 5, 2026
446b73b
🧯 fix: Harden Principals Cache Invalidation and Lock-Wait Paths (#14120)
danny-avila Jul 5, 2026
e8d7654
📡 feat: add rum browser page-load diagnostics (#14106)
upman Jul 5, 2026
f11b737
🏁 fix: Ignore Finalized SSE Transport Errors (#14114)
danny-avila Jul 5, 2026
61e1633
fix: fall back to `_id` for user id in `createSafeUser` (#14083)
mawburn Jul 5, 2026
5789f89
🌏 fix: guard IME composition on Enter in prompt name/labels and dynam…
mahirhir Jul 5, 2026
13a01de
🗄️ fix: Return Cached Transaction-Support Value on Cache Hit (#13999)
Osamaali313 Jul 5, 2026
1f7b38e
🧠 fix: Format Reasoning Exports (#14116)
danny-avila Jul 5, 2026
2d4ef52
🧮 fix: Prevent String Corruption of Numeric Agent Model Parameters (#…
danny-avila Jul 5, 2026
a03c574
🧢 fix: Raise Claude Sonnet 4.6 Output Cap (#14115)
danny-avila Jul 5, 2026
8fcb77f
🧵 fix: Preserve Fenced Markdown Artifacts (#14121)
danny-avila Jul 5, 2026
a0aa1f2
🎚️ feat: Explicit "Use All Skills" Toggle in the Skills Section (#14125)
berry-13 Jul 6, 2026
44d1275
⚙️ perf: reduce first-load MongoDB round trips (#14101)
upman Jul 6, 2026
bfebf0f
🧷 chore: Expose Retain Recent Summarization Config (#14134)
danny-avila Jul 6, 2026
9a8eca1
📦 chore: bump langfuse fanout Go dependencies (#14126)
upman Jul 6, 2026
47a8749
🔒 fix: Prevent Role Grants on Shared Links (#14137)
danny-avila Jul 7, 2026
dcdaaea
🤐 fix: Exclude Provider Secrets from HITL Pending Actions (#14136)
danny-avila Jul 7, 2026
f3692b5
⏳ fix: Defer MCP Connection for Request-Scoped Placeholders on Reinit…
danny-avila Jul 7, 2026
0347d4a
🎯 style: Center Scroll-to-Bottom Rib in Message Nav Rail (#14151)
danny-avila Jul 7, 2026
9636782
🧷 fix: Align Agent File Attachment Ownership (#14149)
danny-avila Jul 7, 2026
96d213a
🧊 fix: Include Conversation Starters in Agent View and List Responses…
serhiizghama Jul 8, 2026
280da51
🌍 i18n: Localize Token Balance Error Message (#14169)
Philipp-Voss Jul 8, 2026
fc67416
♊ fix: Resolve Local JSON Pointer Refs & Sanitize Tool Search Schema …
usnavy13 Jul 8, 2026
988a14a
🙋 feat: ask_user_question - agent-initiated questions with durable pa…
danny-avila Jul 8, 2026
cf9a426
🛡️ fix: Guard HITL checkpoint size against MongoDB 16MB limit (#14157)
danny-avila Jul 8, 2026
9446f32
🔡 fix: Normalize Email Case When Issuing Verification Tokens (#14172)
VictorEPlus Jul 9, 2026
cb5454d
🪜 fix: Apply Recursion Limit Config to Subagents (#14185)
danny-avila Jul 9, 2026
73c43de
💂 fix: Enforce `ALLOW_EMAIL_LOGIN` on the Backend Login Route (#14180)
lurkerCha Jul 9, 2026
3945d29
🗂️ feat: Per-Agent Memory Partitions (#14084)
danny-avila Jul 9, 2026
29e958c
🧩 fix: Allow `compatibility` Field in Skill Frontmatter (#14189)
danny-avila Jul 9, 2026
1999f9f
📎 fix: Translate Finite `supportedMimeTypes` Allowlists to Picker Acc…
danny-avila Jul 9, 2026
9a272c2
⭐ docs: update Star History section (#14198)
berry-13 Jul 9, 2026
6e8f44d
🪆 fix: Serve Nested Skill Files Through a Wildcard Route (#14191)
danny-avila Jul 9, 2026
b753da1
🤖 feat: Add GPT-5.6 (Sol/Terra/Luna) OpenAI Models (#14206)
danny-avila Jul 12, 2026
329ed48
📉 perf: cache OpenID JWT user documents (#14187)
upman Jul 12, 2026
55451ee
📉 perf: start message queries before file map loads (#14188)
upman Jul 12, 2026
8cfe4d8
🪭 feat: support per-run central langfuse export suppression (#14207)
upman Jul 12, 2026
4182f90
🃏 fix: Attach Request-Scoped MCP Servers From the Builder via the `mc…
adamscross04 Jul 12, 2026
53e369f
🧪 feat: stateful_code_sessions capability for warm Code API sandbox s…
danny-avila Jul 12, 2026
654c7a7
🔍 fix: Sync Conversation Title Updates to MeiliSearch (#14223)
danny-avila Jul 12, 2026
5bf675a
🪜 style: Adjust rib dimensions and button sizes in `MessageNav` (#14234)
danny-avila Jul 13, 2026
11caf5f
📦 chore: Update `@librechat/agents` to v3.2.62 (#14235)
danny-avila Jul 13, 2026
b3f9cdd
🧠 feat: Add GPT-5.6 reasoning.mode + reasoning.context (Responses API…
danny-avila Jul 13, 2026
520af66
🧵 feat: Background Tool Calls for Agents & Model Specs (#14197)
danny-avila Jul 13, 2026
e46805d
🪜 style: Center scroll-to-bottom marker in MessageNav (#14238)
danny-avila Jul 13, 2026
b0d46b0
🗝️ feat: Encrypted Langfuse Fanout Config (#14107)
dustinhealy Jul 14, 2026
9bb351a
🧭 feat: Mid-Run Steering and Queued Messages for Agent Runs (#14220)
danny-avila Jul 14, 2026
5771bf6
♨️ feat: Prewarm Stateful Code Sandboxes with Cold-Boot UX Feedback (…
danny-avila Jul 14, 2026
8018d94
📛 feat: Add Client Name Header to Tavily Search Requests (#14082)
manisrinivasan2k1 Jul 14, 2026
7083cf8
👻 fix: Guard Redis Stream Resume Against Disposed HITL Graph (#14258)
danny-avila Jul 14, 2026
39a3256
🤝 fix: Discover MCP OAuth Exchange Methods (#14256)
danny-avila Jul 14, 2026
db22188
👋 fix: Terminate Streamable HTTP MCP Sessions on Teardown (#14252)
danny-avila Jul 14, 2026
1ca7e78
🗂️ fix: Route read_file Through the Stateful Code Session (#14259)
danny-avila Jul 14, 2026
02a5b98
💭 fix: Default GPT-5.6 Reasoning Requests to Responses API (#14232)
jomspk Jul 14, 2026
e813934
🔖 fix: Preserve Ephemeral Agent Params and Identity for ask_user_ques…
jjhidalgar-celonis Jul 14, 2026
5b0330f
💬 feat: Explain Steering & Queuing at Every User-Facing Surface (#14260)
danny-avila Jul 14, 2026
9165833
🎫 fix: Strip Reserved Fields From Bedrock `additionalModelRequestFiel…
danny-avila Jul 14, 2026
4321f68
📦 chore: Update `@librechat/agents` to v3.2.65 (#14263)
danny-avila Jul 14, 2026
d922e1e
📱 fix: Single-Tap Select for Pinned Agents, Model Specs & Models on T…
danny-avila Jul 14, 2026
c865de9
🛞 style: Reveal the Steered "?" on Message Hover/Focus (#14271)
danny-avila Jul 14, 2026
481e2a9
🧹 chore: Prune Dangling Images After deployed-update Pull (#14269)
danny-avila Jul 14, 2026
305e0f5
🧽 fix: Clear Deleted Chats From Message Cache (#14270)
danny-avila Jul 14, 2026
b754287
🌍 i18n: Update translation.json with latest translations (#14266)
danny-avila Jul 15, 2026
7447fdd
🙊 refactor: Clarify Ask Question Schema Errors and Retry Guidance (#1…
danny-avila Jul 15, 2026
eccc7d5
🧟 fix: Prevent Drained Steer From Re-Queuing After Run-End Race (#14276)
danny-avila Jul 15, 2026
f1b9c5f
🍽️ chore: Drop Pending Composer Draft When Steering or Queuing (#14289)
danny-avila Jul 15, 2026
abcbc40
🙋 fix: Await `ask_user_question` Tool Factory in `loadTools` (#14291)
danny-avila Jul 15, 2026
9c7547d
🧷 fix: Flush Pending File Deletion on Unmount (#14293)
danny-avila Jul 15, 2026
0352283
🙋 fix: Stop answered ask_user_question card from reopening its popove…
danny-avila Jul 16, 2026
20cd00c
🖼️ feat: Return Sandbox Images From `read_file` as Viewable Artifacts…
danny-avila Jul 16, 2026
6f21be7
feat: add low-noise Redis observability (#14309)
upman Jul 16, 2026
8f71225
💬 refactor: Anchor In-Flight Steers Above the Composer (#14308)
danny-avila Jul 16, 2026
bd1df30
🔒 fix: Scope, Cap, and De-Execute the In-Flight Steer Stack (#14310)
danny-avila Jul 16, 2026
b04ff26
📱 fix: Don't Connect the Favorites Drag Source on Touch Pointers (#14…
danny-avila Jul 16, 2026
8e5ef1f
⚡ perf: Halve Per-Delta Redis Round Trips in Resumable Streams (#14313)
danny-avila Jul 16, 2026
99f2cc8
🧵 fix: Harden Request-Scoped MCP Lifecycle (#14342)
danny-avila Jul 20, 2026
5cf849d
🪆 fix: Build RAG-API Chart Before Parent to Bundle PostgreSQL Depende…
Aho-Bakaa Jul 21, 2026
56ecb64
✋ feat: Add Reclaim-Gated Controls to In-Flight Steers (#14321)
danny-avila Jul 21, 2026
33b9980
🧭 refactor: `web_search` Description on When To Search vs Answer Dire…
joshbla Jul 21, 2026
a8ecdd6
🧷 perf: Stabilize Mutation-Dependent Memos in Chat Hooks (#14328)
danny-avila Jul 21, 2026
d5e8c5c
🚰 perf: Suppress No-Op Conversation Writes and Widen-Proof Atom Subsc…
danny-avila Jul 21, 2026
d02867a
🔍 refactor: Surface primary OpenID JWT failure reason in auth failure…
danny-avila Jul 21, 2026
1a58c72
🧩 chore: Prebundle Node Polyfills for Buffer, Process, and Global in …
danny-avila Jul 21, 2026
74de989
🚪 fix: Keep Owners From Being Locked Out of Their Own Resource When S…
danny-avila Jul 21, 2026
eeb4ea2
🧭 perf: Warm Conversation Switches with Single-Navigation Focus Inten…
danny-avila Jul 21, 2026
f4a0e0c
🧹 perf: Share Voices Store, Gate Timestamp Ticker, Stabilize Greeting…
danny-avila Jul 21, 2026
3337bde
🚏 fix: Route Admin-Configured Document Types to RAG /text on Agent Up…
danny-avila Jul 21, 2026
3171b86
🎞️ perf: Coalesce Streaming Delta Cache Writes Per Animation Frame (#…
danny-avila Jul 21, 2026
9e245ac
🎟️ fix: Claim Idempotency Keys to Dedup Retried Generation Requests a…
danny-avila Jul 21, 2026
71fa24a
🎛️ perf: Narrow Composer Subscriptions to Streaming State (#14333)
danny-avila Jul 21, 2026
ad46f66
🧬 perf: Memoize Message Spine and Isolate Scroll-Button State (#14330)
danny-avila Jul 21, 2026
913540d
📦 chore: Update `@librechat/agents` to v3.2.66 & `npm audit fix` (#14…
danny-avila Jul 21, 2026
87b3557
🫧 feat: Float In-Flight Steers Over the Thread with Collapsible Conte…
danny-avila Jul 21, 2026
21766b5
🧠 fix: Restore Agent Memory Scope Control in Unified Builder (#14292)
danny-avila Jul 21, 2026
7406f5d
🌍 i18n: Update translation.json with latest translations (#14307)
danny-avila Jul 21, 2026
ade0205
🛟 fix: Keep File Uploads Alive With SSE Heartbeats (#14295)
MarcAmick Jul 21, 2026
3e9f079
🧩 fix: Preserve Deployment Skill IDs on Agents (#14368)
danny-avila Jul 21, 2026
3f51fc5
🧭 fix: Keep Message Nav Chevrons Working on In-Thread Steers (#14377)
danny-avila Jul 21, 2026
deea679
🤐 fix: Withhold MCP OAuth Headers From Untrusted Preconfigured Discov…
danny-avila Jul 22, 2026
a3c92b8
🧾 ci: Skip Workflows for Markdown-Only Changes (#14378)
danny-avila Jul 22, 2026
1dd7121
🌍 i18n: Update translation.json with latest translations (#14376)
danny-avila Jul 22, 2026
cbaa2fe
⚡ feat: Add Gemini 3.6 Flash and Gemini 3.5 Flash-Lite Support (#14369)
danny-avila Jul 22, 2026
ca6ffb3
📦 chore: Update `@librechat/agents` to v3.2.68 (#14380)
danny-avila Jul 22, 2026
8751cc1
🔗 fix: Preserve resource owner access when sharing (key share diff by…
jomspk Jul 22, 2026
af7b276
🪟 perf: Virtualize Search Results and Stop the Per-Query Remount (#14…
danny-avila Jul 22, 2026
4c0ac88
🪆 fix: Preserve Nested Subagent Delegation (#14392)
danny-avila Jul 22, 2026
337facb
✋ fix: Enable Submit on First Tool-Approval Decision (#14393)
danny-avila Jul 22, 2026
ad5bb47
🎞️ fix: Surface Clear Error for Unprocessable Gemini YouTube Videos (…
danny-avila Jul 22, 2026
dbb771a
🚦 ci: Gate Playwright Runs to Maintainers (#14385)
danny-avila Jul 22, 2026
5af12c7
🎭 ci: Scope Playwright Runs to Relevant Changes (#14388)
danny-avila Jul 22, 2026
00c5a74
🧵 feat: Native Background Execution for Code Interpreter Tools (#14386)
danny-avila Jul 23, 2026
30ae414
📌 fix: Pin Scroll-to-Bottom Rib in Message Nav (#14397)
danny-avila Jul 23, 2026
60eba76
🫙 fix: Preserve Loaded Message Content When Resume Snapshot Is Empty …
danny-avila Jul 23, 2026
142973e
🌍 i18n: Update translation.json with latest translations (#14406)
danny-avila Jul 23, 2026
21dc4a2
🎯 fix: Correct Off-by-One Rail Scrub After Pinning the Terminus (#14409)
danny-avila Jul 23, 2026
6c97a7f
♾️ fix: Preserve Resumable Stream Ordering Across Turns (#14411)
danny-avila Jul 23, 2026
cd21515
✳️ feat: Claude Opus 5 Support (#14422)
danny-avila Jul 25, 2026
73699b5
⚡ perf: Reduce Agent Chat Startup Latency (#14423)
danny-avila Jul 25, 2026
f3159f9
🧩 fix: Harden Agent Skill Lifecycles End to End (#14429)
danny-avila Jul 25, 2026
d8427ff
🛂 test: Cover Tool Approval Workflows End to End (#14427)
danny-avila Jul 27, 2026
8374b84
📧 fix: Restore `invite-user` CLI (#14436)
unsnow-iac Jul 27, 2026
a53936d
🧭 test: Cover Agent Handoffs End to End (#14428)
danny-avila Jul 27, 2026
531fecc
🍃 chore: Bump Mongoose to 8.24.1 to Patch Prototype Pollution (#14461)
danny-avila Jul 27, 2026
74f46f9
🗺️ chore: Bump PostCSS to 8.5.18 to Patch Source Map Traversal (#14463)
danny-avila Jul 27, 2026
250aca3
🔗 fix: Resolve MCP Tool-Key Boundary Against Configured Server Names …
danny-avila Jul 27, 2026
e0892bb
🍃 fix: Strip $-Prefixed Schema Keywords Before Persisting MCP Tool Pa…
danny-avila Jul 27, 2026
52fcc51
🌍 i18n: Update translation.json with latest translations (#14460)
danny-avila Jul 27, 2026
ea643e8
🔗 fix: Render Shared Links Containing Steers (#14480)
danny-avila Jul 28, 2026
728fc12
🔒 fix: Bound `/files/usage` TTL Hold Instead of Clearing It (#14470)
danny-avila Jul 28, 2026
044c134
🤏 fix: Filter Admin Config Reads by Section-Scoped Read Capability (#…
dustinhealy Jul 28, 2026
f7bc50a
📦 chore: bump `@librechat/agents` to v3.3.4 (#14482)
danny-avila Jul 28, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
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
3 changes: 1 addition & 2 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ services:
environment:
- HOST=0.0.0.0
- MONGO_URI=mongodb://mongodb:27017/LibreChat
# - CHATGPT_REVERSE_PROXY=http://host.docker.internal:8080/api/conversation # if you are hosting your own chatgpt reverse proxy with docker
# - OPENAI_REVERSE_PROXY=http://host.docker.internal:8070/v1/chat/completions # if you are hosting your own chatgpt reverse proxy with docker
# - OPENAI_REVERSE_PROXY=http://host.docker.internal:8070/v1
- MEILI_HOST=http://meilisearch:7700

# Runs app on the same network as the service container, allows "forwardPorts" in devcontainer.json function.
Expand Down
25 changes: 25 additions & 0 deletions .do/gitnexus/Caddyfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Caddy reverse proxy with bearer token auth and automatic HTTPS.
# The domain is supplied via environment variable GITNEXUS_DOMAIN,
# and the auth token via API_TOKEN. Both are set in docker-compose.yml.

{$GITNEXUS_DOMAIN} {
# Health check — unauthenticated so monitoring can probe it
@health path /health
handle @health {
reverse_proxy gitnexus:4747 {
rewrite /api/info
}
}

# All other routes require bearer token
@authed {
header Authorization "Bearer {$API_TOKEN}"
}

handle @authed {
reverse_proxy gitnexus:4747
}

# Reject unauthenticated requests
respond "Unauthorized" 401
}
46 changes: 46 additions & 0 deletions .do/gitnexus/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Long-lived GitNexus image for DigitalOcean droplet deployment.
#
# This image does NOT bake in the index data. Indexes are mounted from
# the host at /indexes/<repo>/.gitnexus/ and registered at container
# startup. A fresh index only requires rsync + container restart — no
# image rebuild on every push.

FROM node:24.16.0-slim

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

# 2. Upgrade libstdc++ from Trixie — @ladybugdb/core prebuilt binary needs
# GLIBCXX_3.4.32 which Bookworm (3.4.31) doesn't ship.
RUN echo "deb http://deb.debian.org/debian trixie main" > /etc/apt/sources.list.d/trixie.list \
&& apt-get update \
&& apt-get install -y -t trixie libstdc++6 \
&& rm /etc/apt/sources.list.d/trixie.list \
&& rm -rf /var/lib/apt/lists/*

# 3. Pre-install LadybugDB FTS + vector extensions so ~/.kuzu/extension/
# 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

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

EXPOSE 4747

ENTRYPOINT ["/entrypoint.sh"]
87 changes: 87 additions & 0 deletions .do/gitnexus/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# GitNexus stack for the DigitalOcean droplet.
#
# Two services: the gitnexus server (bound to an internal network only)
# and a Caddy reverse proxy that handles TLS + auth.
#
# Index data lives on the host at /opt/gitnexus/indexes/ and is
# bind-mounted read-write into the gitnexus container. The deploy
# workflow rsyncs fresh indexes into that directory and restarts
# only the gitnexus container — Caddy keeps running undisturbed.
#
# Break-glass: if gitnexus is stuck unhealthy and you need to restart
# just Caddy (e.g. to push an emergency Caddyfile fix), the
# `depends_on: condition: service_healthy` would block:
# docker compose up -d caddy
# Use --no-deps to bypass the dependency check:
# docker compose up -d --no-deps caddy

name: gitnexus

# Shared logging defaults applied to both services so the droplet's
# disk doesn't fill up with unbounded json-file logs.
x-logging: &default-logging
driver: json-file
options:
max-size: '50m'
max-file: '3'

services:
gitnexus:
# Override via GITNEXUS_IMAGE in /opt/gitnexus/.env to use a fork or
# a pinned version tag like :v1.5.3 for reproducible rollbacks.
image: ${GITNEXUS_IMAGE:-ghcr.io/danny-avila/librechat-gitnexus:latest}
container_name: gitnexus
restart: unless-stopped
networks:
- gitnexus-net
volumes:
- /opt/gitnexus/indexes:/indexes
# memswap_limit equal to mem_limit disables swap for this container.
# Without it, Docker lets the process silently swap onto host disk,
# turning sub-second graph queries into multi-second ones. Hard
# OOM-kill is preferable — the container restarts via unless-stopped,
# the deploy health poll catches it, and the failure is explicit.
mem_limit: 1792m
memswap_limit: 1792m
logging: *default-logging
healthcheck:
test: ['CMD', 'curl', '-fsS', 'http://127.0.0.1:4747/api/info']
interval: 30s
timeout: 5s
retries: 3
start_period: 60s

caddy:
image: caddy:2-alpine
container_name: gitnexus-caddy
restart: unless-stopped
# service_healthy (not just service_started) ensures Caddy doesn't
# start routing traffic until gitnexus passes its initial healthcheck
# on a cold `compose up`. This only governs initial startup ordering —
# during force-recreates of gitnexus, Caddy stays up and may briefly
# return 502 while the new gitnexus container binds its port. The
# deploy workflow's health poll catches any sustained failure.
depends_on:
gitnexus:
condition: service_healthy
ports:
- '80:80'
- '443:443'
networks:
- gitnexus-net
volumes:
- /opt/gitnexus/Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
- caddy-config:/config
logging: *default-logging
environment:
GITNEXUS_DOMAIN: ${GITNEXUS_DOMAIN}
API_TOKEN: ${API_TOKEN}

networks:
gitnexus-net:
driver: bridge

volumes:
caddy-data:
caddy-config:
48 changes: 48 additions & 0 deletions .do/gitnexus/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/sh
set -e

# Cap Node heap below the container's cgroup limit (1792m in compose),
# leaving room for @ladybugdb/core's C++ heap and OS overhead. Native
# allocations happen outside V8's view, so a slim V8 budget is the only
# thing between a heavy query and a cgroup OOM-kill. Without this cap,
# gitnexus defaults to --max-old-space-size=8192 and reserves memory
# the container doesn't have.
export NODE_OPTIONS="${NODE_OPTIONS:---max-old-space-size=1280}"

# Register every index mounted under /indexes/<name>/.gitnexus/.
# This is idempotent — re-registering an existing repo updates the
# metadata pointer without touching the index data.
#
# Registration failure handling:
# - main (LibreChat) and dev (LibreChat-dev) are critical. If either
# fails to register, exit 1 so docker marks the container unhealthy
# and the deploy workflow's readiness check surfaces the error.
# - PR indexes (LibreChat-pr-*) are best-effort. A corrupt PR index
# shouldn't take the whole server down.
if [ -d /indexes ]; then
for dir in /indexes/*/; do
[ -d "$dir" ] || continue
name=$(basename "$dir")
[ -d "$dir.gitnexus" ] || continue
echo "Registering index: $name"
if ! gitnexus index "$dir" --allow-non-git; then
case "$name" in
LibreChat|LibreChat-dev)
echo "ERROR: failed to register critical index $name" >&2
exit 1
;;
*)
echo "WARN: failed to register PR index $name — skipping" >&2
;;
esac
fi
done
else
echo "WARN: /indexes directory not mounted" >&2
fi

# Bind 0.0.0.0 inside the container so Caddy (in a separate container
# on the same docker network) can reach gitnexus at gitnexus:4747.
# docker-compose.yml intentionally does NOT expose port 4747 on the
# host — only Caddy's 80/443 are published.
exec gitnexus serve --host 0.0.0.0 --port 4747
46 changes: 46 additions & 0 deletions .do/gitnexus/install-extensions.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* Pre-install LadybugDB extensions (FTS + vector) into the Docker image's
* extension cache (~/.kuzu/extension/). Without this, gitnexus serve's
* lbug-adapter calls LOAD EXTENSION fts at runtime but fails silently
* because the extension was never installed, causing all BM25 and
* semantic queries via the query() tool to return empty.
*
* Workaround for upstream GitNexus 1.5.3 bug where the CI-produced
* .gitnexus/ artifact doesn't include the extension cache.
*/

const path = require('path');
const fs = require('fs');

// @ladybugdb/core lives under the globally-installed gitnexus package.
// This path is stable across gitnexus versions because npm always nests
// transitive deps under the installed package's node_modules.
const lbugPath = '/usr/local/lib/node_modules/gitnexus/node_modules/@ladybugdb/core';
const lbug = require(lbugPath);

const tmpDir = '/tmp/lbug-ext-install';
fs.mkdirSync(tmpDir, { recursive: true });

// Open a throwaway database just to run INSTALL against. The extension
// cache persists in ~/.kuzu/extension/ regardless of which database was
// used to install it, so the throwaway db and tmpDir are deleted in the
// Dockerfile after this script finishes.
const db = new lbug.Database(path.join(tmpDir, 'db'), 0, false, false);
const conn = new lbug.Connection(db);

(async () => {
try {
await conn.query('INSTALL fts');
console.log('FTS extension installed');
} catch (err) {
console.error('FTS install failed:', err.message);
process.exit(1);
}
try {
await conn.query('INSTALL vector');
console.log('Vector extension installed');
} catch (err) {
console.error('Vector install failed:', err.message);
process.exit(1);
}
})();
Loading