diff --git a/.env.example b/.env.example index 8ffb4cd1f4..083c9c6b4e 100644 --- a/.env.example +++ b/.env.example @@ -571,6 +571,19 @@ MEILI_MASTER_KEY=DrhYf7zENyR6AlUCKmnz0eYASOQdl6zxH7s7MKFSfFCt STT_API_KEY= TTS_API_KEY= +#==================================================# +# Code Interpreter # +#==================================================# + +# LIBRECHAT_CODE_API_KEY= +# LIBRECHAT_CODE_BASEURL= +# Prewarm stateful per-conversation sandboxes in parallel with model generation (default: true). +# CODE_SANDBOX_PREWARM=true +# Time in milliseconds before LibreChat treats a tracked sandbox as cold (default: 2100000 / 35 minutes). +# CODE_SANDBOX_COLD_AFTER_MS=2100000 +# Bytes read per sandbox image chunk; lower this if the runner has a small stdout limit (default: 32768). +# LIBRECHAT_CODE_IMAGE_CHUNK_BYTES=32768 + #==================================================# # RAG # #==================================================# @@ -585,11 +598,18 @@ TTS_API_KEY= # Stream upload responses with heartbeats during long-running file processing. # FILE_UPLOAD_SSE_ENABLED=false +# Timeout in milliseconds for server-side remote file downloads (default: 15000). +# REMOTE_FILE_FETCH_TIMEOUT_MS=15000 +# Maximum size in bytes for server-side remote file downloads (default: 536870912 / 512 MiB). +# REMOTE_FILE_FETCH_MAX_BYTES=536870912 #===================================================# # User System # #===================================================# +# Maximum characters in one mid-run Agent steering message (default: 16000). +# STEER_MAX_LENGTH=16000 + #========================# # Moderation # #========================# @@ -1007,6 +1027,10 @@ HELP_AND_FAQ_URL=https://librechat.ai # Set to empty string to force all namespaces through Redis: FORCED_IN_MEMORY_CACHE_NAMESPACES= # FORCED_IN_MEMORY_CACHE_NAMESPACES=CONFIG_STORE,APP_CONFIG +# Opt-in cache for authenticated user documents during request bursts. Requires Redis and +# the AUTH_USER_DOC namespace to remain Redis-backed (default: off; set exactly to "on"). +# AUTH_USER_CACHE_MODE=off + # TTL in milliseconds for cached group memberships used in ACL permission checks (default: 300000 / 5 minutes; 0 disables) # Membership changes invalidate affected entries immediately; the TTL bounds staleness from cross-process races. # USER_PRINCIPALS_CACHE_TTL_MS=300000 diff --git a/Dockerfile b/Dockerfile index 9e5d41b5d6..6b40a8ed1e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -# v0.8.7 +# v0.8.8-rc1 # Base node image FROM node:24.16.0-alpine AS node diff --git a/Dockerfile.multi b/Dockerfile.multi index ce429c02bb..034c1f74d8 100644 --- a/Dockerfile.multi +++ b/Dockerfile.multi @@ -1,5 +1,5 @@ # Dockerfile.multi -# v0.8.7 +# v0.8.8-rc1 # Set configurable max-old-space-size with default ARG NODE_MAX_OLD_SPACE_SIZE=6144 diff --git a/api/package.json b/api/package.json index 55e68ad46c..332d9527fc 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/backend", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "description": "", "scripts": { "start": "echo 'please run this from the root directory'", diff --git a/bun.lock b/bun.lock index ab6db72c2f..72e83161a8 100644 --- a/bun.lock +++ b/bun.lock @@ -37,7 +37,7 @@ }, "api": { "name": "@librechat/backend", - "version": "0.8.7", + "version": "0.8.8-rc1", "dependencies": { "@anthropic-ai/vertex-sdk": "^0.14.3", "@aws-sdk/client-bedrock-runtime": "^3.980.0", @@ -130,7 +130,7 @@ }, "client": { "name": "@librechat/frontend", - "version": "0.8.7", + "version": "0.8.8-rc1", "dependencies": { "@ariakit/react": "^0.4.15", "@ariakit/react-core": "^0.4.17", @@ -264,7 +264,7 @@ }, "packages/api": { "name": "@librechat/api", - "version": "1.7.34", + "version": "1.7.35", "devDependencies": { "@babel/preset-env": "^7.21.5", "@babel/preset-react": "^7.18.6", @@ -345,7 +345,7 @@ }, "packages/client": { "name": "@librechat/client", - "version": "0.4.63", + "version": "0.4.64", "devDependencies": { "@babel/core": "^7.28.5", "@babel/preset-env": "^7.28.5", @@ -433,7 +433,7 @@ }, "packages/data-provider": { "name": "librechat-data-provider", - "version": "0.8.509", + "version": "0.8.510", "dependencies": { "axios": "^1.13.5", "dayjs": "^1.11.13", @@ -470,7 +470,7 @@ }, "packages/data-schemas": { "name": "@librechat/data-schemas", - "version": "0.0.56", + "version": "0.0.57", "devDependencies": { "@rollup/plugin-alias": "^5.1.0", "@rollup/plugin-commonjs": "^29.0.0", diff --git a/client/jest.config.cjs b/client/jest.config.cjs index c405109d1d..f29617008f 100644 --- a/client/jest.config.cjs +++ b/client/jest.config.cjs @@ -1,4 +1,4 @@ -/** v0.8.7 */ +/** v0.8.8-rc1 */ module.exports = { roots: ['/src'], testEnvironment: 'jsdom', diff --git a/client/package.json b/client/package.json index 6807682a54..b3f6ad219f 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/frontend", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "description": "", "type": "module", "scripts": { diff --git a/e2e/jestSetup.js b/e2e/jestSetup.js index 49d92eb8c8..9e74d00f07 100644 --- a/e2e/jestSetup.js +++ b/e2e/jestSetup.js @@ -1,3 +1,3 @@ -// v0.8.7 +// v0.8.8-rc1 // See .env.test.example for an example of the '.env.test' file. require('dotenv').config({ path: './e2e/.env.test' }); diff --git a/helm/librechat/Chart.yaml b/helm/librechat/Chart.yaml index e45c3d0372..6b5ba207b1 100755 --- a/helm/librechat/Chart.yaml +++ b/helm/librechat/Chart.yaml @@ -15,7 +15,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 2.0.7 +version: 2.0.8 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to @@ -23,7 +23,7 @@ version: 2.0.7 # It is recommended to use it with quotes. # renovate: image=registry.librechat.ai/danny-avila/librechat -appVersion: "v0.8.7" +appVersion: "v0.8.8-rc1" home: https://www.librechat.ai diff --git a/librechat.example.yaml b/librechat.example.yaml index aa49b4875b..e767318cd2 100644 --- a/librechat.example.yaml +++ b/librechat.example.yaml @@ -2,11 +2,21 @@ # https://www.librechat.ai/docs/configuration/librechat_yaml # Configuration version (required) -version: 1.3.13 +version: 1.3.14 # Cache settings: Set to true to enable caching cache: true +# Tenant-scoped Langfuse export (optional). Fanout also requires the deployment +# services and environment variables documented in the Langfuse guide. +# langfuse: +# enabled: true +# publicKey: '${TENANT_LANGFUSE_PUBLIC_KEY}' +# secretKey: '${TENANT_LANGFUSE_SECRET_KEY}' +# destination: 'us' # Must match an allowed LANGFUSE_FANOUT_TENANT_DESTINATIONS key +# fanout: +# enabled: true + # File storage configuration # Single strategy for all file types (legacy format, still supported) # fileStrategy: "s3" @@ -427,7 +437,21 @@ endpoints: # skills: # maxCatalogSkills: 20 # # (optional) Agent Capabilities available to all users. Omit the ones you wish to exclude. Defaults to list below. - # capabilities: ["deferred_tools", "execute_code", "file_search", "actions", "tools"] + # capabilities: ["deferred_tools", "execute_code", "file_search", "web_search", "artifacts", "subagents", "actions", "context", "skills", "memory", "ask_user_question", "tools", "chain", "ocr"] + # # The following capabilities are opt-in and must be added explicitly: + # # "programmatic_tools", "stateful_code_sessions", "run_in_background" + # # (optional) Require user approval before matching tool calls. Disabled by default. + # toolApproval: + # enabled: true + # mode: default # default, dontAsk, or bypass + # allow: ["mcp:trusted-server:read_*"] + # deny: ["mcp:*:delete_*"] # Deny rules always take precedence + # ask: ["mcp:*:*"] + # reason: "Review {tool} before it runs." + # # (optional) Persist Agent runs paused for approval or Ask User. MongoDB is the durable default. + # checkpointer: + # type: mongo # mongo (default) or memory (single-process development only) + # ttl: 86400 # Approval window in seconds; defaults to 24 hours # (optional) Custom request headers for the built-in OpenAI / Google endpoints. # Forwarded on every request to the provider (or an AI gateway / reverse proxy @@ -702,6 +726,7 @@ endpoints: # description: "Most capable GPT-4 model with multimodal support" # # default: true # Hard admin default; takes precedence over prior user choices # # softDefault: true # First-time default only; skipped after a user selects a model/spec/agent +# # showInMenu: false # Hide from the model selector while keeping explicit `spec` access # group: "openAI" # String value matching the endpoint name # preset: # endpoint: "openAI" @@ -767,6 +792,15 @@ endpoints: # endpoint: "openAI" # model: "gpt-4o-mini" +# Automatic conversation summarization (optional) +# summarization: +# enabled: true +# provider: "openAI" +# model: "gpt-4o-mini" +# retainRecent: +# turns: 2 # Keep the newest complete user/assistant turns outside the summary +# tokens: 2000 # Also preserve up to this many recent tokens + # fileConfig: # endpoints: # assistants: diff --git a/package-lock.json b/package-lock.json index 5c05796f61..bab4564963 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "LibreChat", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "LibreChat", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "license": "ISC", "workspaces": [ "api", @@ -46,7 +46,7 @@ }, "api": { "name": "@librechat/backend", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "license": "ISC", "dependencies": { "@anthropic-ai/vertex-sdk": "^0.16.0", @@ -917,7 +917,7 @@ }, "client": { "name": "@librechat/frontend", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "license": "ISC", "dependencies": { "@ariakit/react": "^0.4.29", @@ -43633,7 +43633,7 @@ }, "packages/api": { "name": "@librechat/api", - "version": "1.7.34", + "version": "1.7.35", "license": "ISC", "dependencies": { "@langchain/langgraph-checkpoint": "^1.1.2", @@ -44343,7 +44343,7 @@ }, "packages/client": { "name": "@librechat/client", - "version": "0.4.63", + "version": "0.4.64", "devDependencies": { "@babel/core": "^7.28.5", "@babel/preset-env": "^7.29.5", @@ -45486,7 +45486,7 @@ }, "packages/data-provider": { "name": "librechat-data-provider", - "version": "0.8.509", + "version": "0.8.510", "license": "ISC", "dependencies": { "axios": "^1.16.0", @@ -46094,7 +46094,7 @@ }, "packages/data-schemas": { "name": "@librechat/data-schemas", - "version": "0.0.56", + "version": "0.0.57", "license": "MIT", "devDependencies": { "@rollup/plugin-alias": "^5.1.0", diff --git a/package.json b/package.json index d3d5586830..bf3e0fca2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "LibreChat", - "version": "v0.8.7", + "version": "v0.8.8-rc1", "description": "", "packageManager": "npm@11.13.0", "workspaces": [ diff --git a/packages/api/package.json b/packages/api/package.json index 19e8da0db9..b3837ecfe0 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/api", - "version": "1.7.34", + "version": "1.7.35", "type": "commonjs", "description": "MCP services for LibreChat", "main": "dist/index.cjs", diff --git a/packages/client/package.json b/packages/client/package.json index 7b04926cab..eb261af52a 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/client", - "version": "0.4.63", + "version": "0.4.64", "description": "React components for LibreChat", "repository": { "type": "git", diff --git a/packages/data-provider/package.json b/packages/data-provider/package.json index a3307a11fa..b825c2e9db 100644 --- a/packages/data-provider/package.json +++ b/packages/data-provider/package.json @@ -1,6 +1,6 @@ { "name": "librechat-data-provider", - "version": "0.8.509", + "version": "0.8.510", "description": "data services for librechat apps", "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index 97607f99c0..e9084da42e 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -902,8 +902,8 @@ export const agentsEndpointSchema = baseEndpointSchema remoteApi: remoteApiSchema.optional(), /** Human-in-the-loop tool approval policy. Off by default. */ toolApproval: toolApprovalPolicySchema, - /** Durable checkpointer backing HITL resume. Defaults to the app's MongoDB - * when `toolApproval.enabled` is set; ignored otherwise. */ + /** Durable checkpointer backing tool-approval and Ask User resume. + * Defaults to the app's MongoDB when either flow needs it. */ checkpointer: checkpointerSchema, }), ) @@ -2699,7 +2699,7 @@ export enum Constants { */ VERSION = '__LIBRECHAT_VERSION__', /** Key for the Custom Config's version (librechat.yaml). */ - CONFIG_VERSION = '1.3.13', + CONFIG_VERSION = '1.3.14', /** Standard value for the first message's `parentMessageId` value, to indicate no parent exists. */ NO_PARENT = '00000000-0000-0000-0000-000000000000', /** Standard value to use whatever the submission prelim. `responseMessageId` is */ diff --git a/packages/data-schemas/package.json b/packages/data-schemas/package.json index 254ac5558f..a0cdbd224c 100644 --- a/packages/data-schemas/package.json +++ b/packages/data-schemas/package.json @@ -1,6 +1,6 @@ { "name": "@librechat/data-schemas", - "version": "0.0.56", + "version": "0.0.57", "description": "Mongoose schemas and models for LibreChat", "type": "module", "main": "dist/index.cjs",