mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-21 21:50:49 +02:00
♻️ refactor: MCPManager for Scalability, Fix App-Level Detection, Add Lazy Connections (#8930)
* feat: MCP Connection management overhaul - Making MCPManager manageable Refactor the monolithic MCPManager into focused, single-responsibility classes: • MCPServersRegistry: Server configuration discovery and metadata management • UserConnectionManager: Manages user-level connections • ConnectionsRepository: Low-level connection pool with lazy loading • MCPConnectionFactory: Handles MCP connection creation with OAuth support New Features: • Lazy loading of app-level connections for horizontal scaling • Automatic reconnection for app-level connections • Enhanced OAuth detection with explicit requiresOAuth flag • Centralized MCP configuration management Bug Fixes: • App-level connection detection in MCPManager.callTool • MCP Connection Reinitialization route behavior Optimizations: • MCPConnection.isConnected() caching to reduce overhead • Concurrent server metadata retrieval instead of sequential This refactoring addresses scalability bottlenecks and improves reliability while maintaining backward compatibility with existing configurations. * feat: Enabled import order in eslint. * # Moved tests to __tests__ folder # added tests for MCPServersRegistry.ts * # Add unit tests for ConnectionsRepository functionality * # Add unit tests for MCPConnectionFactory functionality * # Reorganize MCP connection tests and improve error handling * # reordering imports * # Update testPathIgnorePatterns in jest.config.mjs to exclude development TypeScript files * # removed mcp/manager.ts
This commit is contained in:
parent
9dbf153489
commit
8780a78165
32 changed files with 2571 additions and 1468 deletions
|
@ -2,11 +2,11 @@ import { fileURLToPath } from 'node:url';
|
|||
import path from 'node:path';
|
||||
import typescriptEslintEslintPlugin from '@typescript-eslint/eslint-plugin';
|
||||
import { fixupConfigRules, fixupPluginRules } from '@eslint/compat';
|
||||
// import perfectionist from 'eslint-plugin-perfectionist';
|
||||
import perfectionist from 'eslint-plugin-perfectionist';
|
||||
import reactHooks from 'eslint-plugin-react-hooks';
|
||||
import prettier from 'eslint-plugin-prettier';
|
||||
import tsParser from '@typescript-eslint/parser';
|
||||
import importPlugin from 'eslint-plugin-import';
|
||||
import prettier from 'eslint-plugin-prettier';
|
||||
import { FlatCompat } from '@eslint/eslintrc';
|
||||
import jsxA11Y from 'eslint-plugin-jsx-a11y';
|
||||
import i18next from 'eslint-plugin-i18next';
|
||||
|
@ -62,7 +62,7 @@ export default [
|
|||
'jsx-a11y': fixupPluginRules(jsxA11Y),
|
||||
'import/parsers': tsParser,
|
||||
i18next,
|
||||
// perfectionist,
|
||||
perfectionist,
|
||||
prettier: fixupPluginRules(prettier),
|
||||
},
|
||||
|
||||
|
@ -140,32 +140,31 @@ export default [
|
|||
'react/prop-types': 'off',
|
||||
'react/display-name': 'off',
|
||||
|
||||
// 'perfectionist/sort-imports': [
|
||||
// 'error',
|
||||
// {
|
||||
// type: 'line-length',
|
||||
// order: 'desc',
|
||||
// newlinesBetween: 'never',
|
||||
// customGroups: {
|
||||
// value: {
|
||||
// react: ['^react$'],
|
||||
// // react: ['^react$', '^fs', '^zod', '^path'],
|
||||
// local: ['^(\\.{1,2}|~)/', '^librechat-data-provider'],
|
||||
// },
|
||||
// },
|
||||
// groups: [
|
||||
// 'react',
|
||||
// 'builtin',
|
||||
// 'external',
|
||||
// ['builtin-type', 'external-type'],
|
||||
// ['internal-type'],
|
||||
// 'local',
|
||||
// ['parent', 'sibling', 'index'],
|
||||
// 'object',
|
||||
// 'unknown',
|
||||
// ],
|
||||
// },
|
||||
// ],
|
||||
'perfectionist/sort-imports': [
|
||||
'error',
|
||||
{
|
||||
type: 'line-length',
|
||||
order: 'desc',
|
||||
newlinesBetween: 'never',
|
||||
customGroups: {
|
||||
value: {
|
||||
react: ['^react$'],
|
||||
local: ['^(\\.{1,2}|~)/', '^librechat-data-provider'],
|
||||
},
|
||||
},
|
||||
groups: [
|
||||
'react',
|
||||
'builtin',
|
||||
'external',
|
||||
['builtin-type', 'external-type'],
|
||||
['internal-type'],
|
||||
'local',
|
||||
['parent', 'sibling', 'index'],
|
||||
'object',
|
||||
'unknown',
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
// 'perfectionist/sort-named-imports': [
|
||||
// 'error',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue