Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
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
ada8b93
Merge remote-tracking branch 'origin/mia-dev' into claude/hopeful-hei…
claude Jun 23, 2026
de5d64a
Merge pull request #13 from pcode-at/claude/hopeful-heisenberg-gbq809
npeham Jun 23, 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
  •  
  •  
  •  
19 changes: 10 additions & 9 deletions .do/gitnexus/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@

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
43 changes: 37 additions & 6 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@ NODE_MAX_OLD_SPACE_SIZE=6144

# CONFIG_PATH="/alternative/path/to/librechat.yaml"

# Deployment skills are loaded read-only at startup and exposed to all users
# with the Skills capability enabled. Defaults to project root ./skill.
# DEPLOYMENT_SKILLS_DIR=./skill

#==================#
# Langfuse Tracing #
#==================#
Expand All @@ -134,6 +138,8 @@ NODE_MAX_OLD_SPACE_SIZE=6144
# OTEL_TRACES_SAMPLER=parentbased_always_on
# OTEL_LOG_LEVEL=INFO
# OTEL_SDK_DISABLED=false
# Enable Redis command-level spans. Disabled by default to keep backend traces high-level.
# OTEL_IOREDIS_TRACING_ENABLED=false

#===============================#
# Real User Monitoring (Browser) #
Expand Down Expand Up @@ -175,9 +181,13 @@ NODE_MAX_OLD_SPACE_SIZE=6144

# ENDPOINTS=openAI,assistants,azureOpenAI,google,anthropic

# Optional outbound proxy for server-side requests, including remote MCP HTTP/SSE transports.
# Remote MCP transports also honor HTTP_PROXY, HTTPS_PROXY, and NO_PROXY when PROXY is unset.
# Optional outbound proxy for server-side requests.
# PROXY applies to both HTTP and HTTPS targets. When PROXY is unset, LibreChat honors
# HTTP_PROXY, HTTPS_PROXY, and NO_PROXY/no_proxy for supported server-side clients.
PROXY=
# HTTP_PROXY=
# HTTPS_PROXY=
# NO_PROXY=

#===================================#
# Known Endpoints - librechat.yaml #
Expand Down Expand Up @@ -205,7 +215,7 @@ PROXY=
#============#

ANTHROPIC_API_KEY=user_provided
# ANTHROPIC_MODELS=claude-opus-4-8,claude-opus-4-7,claude-sonnet-4-6,claude-opus-4-6,claude-opus-4-20250514,claude-3-7-sonnet-20250219,claude-3-5-sonnet-20241022,claude-3-5-haiku-20241022,claude-3-opus-20240229,claude-3-sonnet-20240229,claude-3-haiku-20240307
# ANTHROPIC_MODELS=claude-fable-5,claude-opus-4-8,claude-opus-4-7,claude-sonnet-4-6,claude-opus-4-6,claude-opus-4-20250514,claude-3-7-sonnet-20250219,claude-3-5-sonnet-20241022,claude-3-5-haiku-20241022,claude-3-opus-20240229,claude-3-sonnet-20240229,claude-3-haiku-20240307
# ANTHROPIC_REVERSE_PROXY=

# Set to true to use Anthropic models through Google Vertex AI instead of direct API
Expand Down Expand Up @@ -271,8 +281,8 @@ ANTHROPIC_API_KEY=user_provided
# BEDROCK_AWS_BEARER_TOKEN=yourBedrockApiKey

# Note: This example list is not meant to be exhaustive. If omitted, all known, supported model IDs will be included for you.
# BEDROCK_AWS_MODELS=anthropic.claude-opus-4-8,anthropic.claude-opus-4-7,anthropic.claude-sonnet-4-6,anthropic.claude-opus-4-6-v1,anthropic.claude-3-5-sonnet-20240620-v1:0,meta.llama3-1-8b-instruct-v1:0
# Cross-region inference model IDs: us.anthropic.claude-opus-4-8,us.anthropic.claude-opus-4-7,us.anthropic.claude-sonnet-4-6,us.anthropic.claude-opus-4-6-v1,global.anthropic.claude-opus-4-6-v1
# BEDROCK_AWS_MODELS=anthropic.claude-fable-5,anthropic.claude-opus-4-8,anthropic.claude-opus-4-7,anthropic.claude-sonnet-4-6,anthropic.claude-opus-4-6-v1,anthropic.claude-3-5-sonnet-20240620-v1:0,meta.llama3-1-8b-instruct-v1:0
# Cross-region inference model IDs: us.anthropic.claude-fable-5,us.anthropic.claude-opus-4-8,us.anthropic.claude-opus-4-7,us.anthropic.claude-sonnet-4-6,us.anthropic.claude-opus-4-6-v1,global.anthropic.claude-opus-4-6-v1

# See all Bedrock model IDs here: https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html#model-ids-arns

Expand All @@ -283,6 +293,10 @@ ANTHROPIC_API_KEY=user_provided
# The following models are not support due to not supporting conversation history:
# ai21.j2-ultra-v1, cohere.command-text-v14, cohere.command-light-text-v14

# Claude Mythos-class models (anthropic.claude-fable-5, anthropic.claude-mythos-5) are inference-profile
# only on Bedrock — use a profile ID (e.g. us.anthropic.claude-fable-5) — and require opting into Anthropic
# data sharing via the Bedrock Data Retention API/console before they can be invoked.

#============#
# Google #
#============#
Expand Down Expand Up @@ -637,7 +651,9 @@ OPENID_NAME_CLAIM=
# Set to determine which user info claim to use as the email/identifier for user matching (e.g., "upn" for Entra ID)
# When not set, defaults to: email -> preferred_username -> upn
OPENID_EMAIL_CLAIM=
# Optional audience parameter for OpenID authorization requests
# Optional audience parameter for OpenID authorization requests and JWT validation.
# If comma-separated values are provided, JWT validation accepts all values and
# authorization requests use the first non-empty value.
OPENID_AUDIENCE=
# Optional audience parameter for OpenID refresh token requests.
# Some providers, such as Auth0 custom APIs, require this to preserve
Expand All @@ -654,6 +670,12 @@ OPENID_AUTO_REDIRECT=false
OPENID_USE_PKCE=false
#Set to true to reuse openid tokens for authentication management instead of using the mongodb session and the custom refresh token.
OPENID_REUSE_TOKENS=
#Max age a reused OpenID session token is served before LibreChat forces an IdP refresh. Default 900000 ms (15 min).
#Accepts an arithmetic expression like SESSION_EXPIRY (e.g. 60 * 60 * 24 * 1000 for 24h).
#Raise toward the IdP access-token lifetime when the IdP revokes the previous access token on refresh, so a still-valid token
#is not rotated/revoked out from under downstream consumers (e.g. MCP servers that introspect the bearer).
#When OPENID_REUSE_TOKENS=true, the OpenID session cookie maxAge is extended to at least this value.
OPENID_REUSE_MAX_SESSION_AGE_MS=
#By default, signing key verification results are cached in order to prevent excessive HTTP requests to the JWKS endpoint.
#If a signing key matching the kid is found, this will be cached and the next time this kid is requested the signing key will be served from the cache.
#Default is true.
Expand Down Expand Up @@ -824,6 +846,9 @@ ALLOW_SHARED_LINKS_PUBLIC=false
# If you have another service in front of your LibreChat doing compression, disable express based compression here
# DISABLE_COMPRESSION=true

# Serve precompressed Brotli versions of static app assets when available.
# ENABLE_STATIC_ASSET_BROTLI=true

# If you have gzipped version of uploaded image images in the same folder, this will enable gzip scan and serving of these images
# Note: The images folder will be scanned on startup and a ma kept in memory. Be careful for large number of images.
# ENABLE_IMAGE_OUTPUT_GZIP_SCAN=true
Expand Down Expand Up @@ -978,6 +1003,12 @@ OPENWEATHER_API_KEY=
# Timeout for OAuth detection requests in milliseconds
# MCP_OAUTH_DETECTION_TIMEOUT=5000

# How long to wait (ms) for a user to complete the OAuth flow before timing out (default: 10 minutes)
# MCP_OAUTH_HANDLING_TIMEOUT=600000

# TTL (ms) for OAuth flow state; must outlive MCP_OAUTH_HANDLING_TIMEOUT (default: 15 minutes)
# MCP_OAUTH_FLOW_TTL=900000

# Cache connection status checks for this many milliseconds to avoid expensive verification
# MCP_CONNECTION_CHECK_TTL=60000

Expand Down
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
30 changes: 19 additions & 11 deletions .github/workflows/backend-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
uses: actions/cache@v4
with:
path: packages/data-provider/dist
key: build-data-provider-${{ runner.os }}-${{ hashFiles('packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/rollup.config.js', 'packages/data-provider/package.json') }}
key: build-data-provider-${{ runner.os }}-${{ hashFiles('packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/tsdown.config.mjs', 'packages/data-provider/package.json') }}

- name: Build data-provider
if: steps.cache-data-provider.outputs.cache-hit != 'true'
Expand All @@ -57,7 +57,7 @@ jobs:
uses: actions/cache@v4
with:
path: packages/data-schemas/dist
key: build-data-schemas-${{ runner.os }}-${{ hashFiles('packages/data-schemas/src/**', 'packages/data-schemas/tsconfig*.json', 'packages/data-schemas/rollup.config.js', 'packages/data-schemas/package.json', 'packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/rollup.config.js', 'packages/data-provider/package.json') }}
key: build-data-schemas-${{ runner.os }}-${{ hashFiles('packages/data-schemas/src/**', 'packages/data-schemas/tsconfig*.json', 'packages/data-schemas/tsdown.config.mjs', 'packages/data-schemas/package.json', 'packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/tsdown.config.mjs', 'packages/data-provider/package.json') }}

- name: Build data-schemas
if: steps.cache-data-schemas.outputs.cache-hit != 'true'
Expand All @@ -68,7 +68,7 @@ jobs:
uses: actions/cache@v4
with:
path: packages/api/dist
key: build-api-${{ runner.os }}-${{ hashFiles('packages/api/src/**', 'packages/api/tsconfig*.json', 'packages/api/server-rollup.config.js', 'packages/api/package.json', 'packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/rollup.config.js', 'packages/data-provider/package.json', 'packages/data-schemas/src/**', 'packages/data-schemas/tsconfig*.json', 'packages/data-schemas/rollup.config.js', 'packages/data-schemas/package.json') }}
key: build-api-${{ runner.os }}-${{ hashFiles('packages/api/src/**', 'packages/api/tsconfig*.json', 'packages/api/tsdown.config.mjs', 'packages/api/package.json', 'packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/tsdown.config.mjs', 'packages/data-provider/package.json', 'packages/data-schemas/src/**', 'packages/data-schemas/tsconfig*.json', 'packages/data-schemas/tsdown.config.mjs', 'packages/data-schemas/package.json') }}

- name: Build api
if: steps.cache-api.outputs.cache-hit != 'true'
Expand Down Expand Up @@ -215,10 +215,14 @@ jobs:
fi

test-api:
name: 'Tests: api'
name: 'Tests: api (shard ${{ matrix.shard }}/3)'
needs: build
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3]
env:
MONGO_URI: ${{ secrets.MONGO_URI }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
Expand Down Expand Up @@ -278,8 +282,8 @@ jobs:
- name: Prepare .env.test file
run: cp api/test/.env.test.example api/test/.env.test

- name: Run unit tests
run: cd api && npm run test:ci
- name: Run unit tests (shard ${{ matrix.shard }}/3)
run: cd api && npm run test:ci -- --shard=${{ matrix.shard }}/3

test-data-provider:
name: 'Tests: data-provider'
Expand Down Expand Up @@ -364,14 +368,18 @@ jobs:
run: cd packages/data-schemas && npm run test:ci

test-packages-api:
name: 'Tests: @librechat/api'
name: 'Tests: @librechat/api (shard ${{ matrix.shard }}/4)'
needs: build
runs-on: ubuntu-latest
# Suite typically completes in ~5 min on a warm runner, but tail-latency
# cancellations have started showing up: tests are actively passing right
# up to the timeout, then the job is killed mid-suite. Bump headroom to
# absorb GitHub Actions runner variance.
# up to the timeout, then the job is killed mid-suite. Sharding splits the
# suite across runners; per-shard headroom still absorbs runner variance.
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -414,5 +422,5 @@ jobs:
name: build-api
path: packages/api/dist

- name: Run unit tests
run: cd packages/api && npm run test:ci
- name: Run unit tests (shard ${{ matrix.shard }}/4)
run: cd packages/api && npm run test:ci -- --shard=${{ matrix.shard }}/4
51 changes: 45 additions & 6 deletions .github/workflows/cache-integration-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: '24.16.0'
cache: 'npm'

- name: Install Redis tools
run: |
Expand All @@ -57,14 +56,54 @@ jobs:
redis-cli -p 7002 cluster info || exit 1
redis-cli -p 7003 cluster info || exit 1

- name: Restore node_modules cache
id: cache-node-modules
uses: actions/cache@v4
with:
path: |
node_modules
api/node_modules
packages/api/node_modules
packages/data-provider/node_modules
packages/data-schemas/node_modules
key: node-modules-backend-${{ runner.os }}-24.16.0-${{ hashFiles('package-lock.json') }}

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: npm ci

- name: Build packages
run: |
npm run build:data-provider
npm run build:data-schemas
npm run build:api
- name: Restore data-provider build cache
id: cache-data-provider
uses: actions/cache@v4
with:
path: packages/data-provider/dist
key: build-data-provider-${{ runner.os }}-${{ hashFiles('packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/tsdown.config.mjs', 'packages/data-provider/package.json') }}

- name: Build data-provider
if: steps.cache-data-provider.outputs.cache-hit != 'true'
run: npm run build:data-provider

- name: Restore data-schemas build cache
id: cache-data-schemas
uses: actions/cache@v4
with:
path: packages/data-schemas/dist
key: build-data-schemas-${{ runner.os }}-${{ hashFiles('packages/data-schemas/src/**', 'packages/data-schemas/tsconfig*.json', 'packages/data-schemas/tsdown.config.mjs', 'packages/data-schemas/package.json', 'packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/tsdown.config.mjs', 'packages/data-provider/package.json') }}

- name: Build data-schemas
if: steps.cache-data-schemas.outputs.cache-hit != 'true'
run: npm run build:data-schemas

- name: Restore api build cache
id: cache-api
uses: actions/cache@v4
with:
path: packages/api/dist
key: build-api-${{ runner.os }}-${{ hashFiles('packages/api/src/**', 'packages/api/tsconfig*.json', 'packages/api/tsdown.config.mjs', 'packages/api/package.json', 'packages/data-provider/src/**', 'packages/data-provider/tsconfig*.json', 'packages/data-provider/tsdown.config.mjs', 'packages/data-provider/package.json', 'packages/data-schemas/src/**', 'packages/data-schemas/tsconfig*.json', 'packages/data-schemas/tsdown.config.mjs', 'packages/data-schemas/package.json') }}

- name: Build api
if: steps.cache-api.outputs.cache-hit != 'true'
run: npm run build:api

- name: Run all cache integration tests (Single Redis Node)
working-directory: packages/api
Expand Down
Loading
Loading