@dexto/core 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -0
- package/dist/agent/DextoAgent.cjs +793 -0
- package/dist/agent/DextoAgent.d.cts +473 -0
- package/dist/agent/DextoAgent.d.ts +473 -0
- package/dist/agent/DextoAgent.js +774 -0
- package/dist/agent/agentCard.cjs +44 -0
- package/dist/agent/agentCard.d.cts +20 -0
- package/dist/agent/agentCard.d.ts +20 -0
- package/dist/agent/agentCard.js +20 -0
- package/dist/agent/error-codes.cjs +35 -0
- package/dist/agent/error-codes.d.cts +14 -0
- package/dist/agent/error-codes.d.ts +14 -0
- package/dist/agent/error-codes.js +11 -0
- package/dist/agent/errors.cjs +84 -0
- package/dist/agent/errors.d.cts +40 -0
- package/dist/agent/errors.d.ts +40 -0
- package/dist/agent/errors.js +60 -0
- package/dist/agent/index.cjs +44 -0
- package/dist/agent/index.d.cts +60 -0
- package/dist/agent/index.d.ts +60 -0
- package/dist/agent/index.js +13 -0
- package/dist/agent/registry/error-codes.cjs +42 -0
- package/dist/agent/registry/error-codes.d.cts +20 -0
- package/dist/agent/registry/error-codes.d.ts +20 -0
- package/dist/agent/registry/error-codes.js +18 -0
- package/dist/agent/registry/errors.cjs +158 -0
- package/dist/agent/registry/errors.d.cts +67 -0
- package/dist/agent/registry/errors.d.ts +67 -0
- package/dist/{chunk-PI6XFMEW.js → agent/registry/errors.js} +43 -50
- package/dist/agent/registry/registry.cjs +291 -0
- package/dist/agent/registry/registry.d.cts +67 -0
- package/dist/agent/registry/registry.d.ts +67 -0
- package/dist/agent/registry/registry.js +256 -0
- package/dist/agent/registry/types.cjs +41 -0
- package/dist/agent/registry/types.d.cts +100 -0
- package/dist/agent/registry/types.d.ts +100 -0
- package/dist/agent/registry/types.js +16 -0
- package/dist/agent/schemas.cjs +113 -0
- package/dist/agent/schemas.d.cts +1502 -0
- package/dist/agent/schemas.d.ts +1502 -0
- package/dist/agent/schemas.js +88 -0
- package/dist/agent/state-manager.cjs +214 -0
- package/dist/agent/state-manager.d.cts +97 -0
- package/dist/agent/state-manager.d.ts +97 -0
- package/dist/agent/state-manager.js +190 -0
- package/dist/config/agent-resolver.cjs +153 -0
- package/dist/config/agent-resolver.d.cts +15 -0
- package/dist/config/agent-resolver.d.ts +15 -0
- package/dist/config/agent-resolver.js +122 -0
- package/dist/config/error-codes.cjs +39 -0
- package/dist/config/error-codes.d.cts +17 -0
- package/dist/config/error-codes.d.ts +17 -0
- package/dist/config/error-codes.js +15 -0
- package/dist/config/errors.cjs +126 -0
- package/dist/config/errors.d.cts +49 -0
- package/dist/config/errors.d.ts +49 -0
- package/dist/config/errors.js +102 -0
- package/dist/config/index.cjs +26 -0
- package/dist/config/index.d.cts +7 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.js +3 -0
- package/dist/config/loader.cjs +119 -0
- package/dist/config/loader.d.cts +19 -0
- package/dist/config/loader.d.ts +19 -0
- package/dist/config/loader.js +85 -0
- package/dist/config/writer.cjs +182 -0
- package/dist/config/writer.d.cts +38 -0
- package/dist/config/writer.d.ts +38 -0
- package/dist/config/writer.js +146 -0
- package/dist/context/compression/middle-removal.cjs +95 -0
- package/dist/context/compression/middle-removal.d.cts +48 -0
- package/dist/context/compression/middle-removal.d.ts +48 -0
- package/dist/context/compression/middle-removal.js +71 -0
- package/dist/context/compression/oldest-removal.cjs +70 -0
- package/dist/context/compression/oldest-removal.d.cts +43 -0
- package/dist/context/compression/oldest-removal.d.ts +43 -0
- package/dist/context/compression/oldest-removal.js +46 -0
- package/dist/context/compression/types.cjs +16 -0
- package/dist/context/compression/types.d.cts +21 -0
- package/dist/context/compression/types.d.ts +21 -0
- package/dist/context/compression/types.js +0 -0
- package/dist/context/error-codes.cjs +41 -0
- package/dist/context/error-codes.d.cts +19 -0
- package/dist/context/error-codes.d.ts +19 -0
- package/dist/context/error-codes.js +17 -0
- package/dist/context/errors.cjs +146 -0
- package/dist/context/errors.d.cts +36 -0
- package/dist/context/errors.d.ts +36 -0
- package/dist/context/errors.js +122 -0
- package/dist/context/index.cjs +24 -0
- package/dist/context/index.d.cts +19 -0
- package/dist/context/index.d.ts +19 -0
- package/dist/context/index.js +2 -0
- package/dist/context/manager.cjs +516 -0
- package/dist/context/manager.d.cts +254 -0
- package/dist/context/manager.d.ts +254 -0
- package/dist/context/manager.js +492 -0
- package/dist/context/types.cjs +16 -0
- package/dist/context/types.d.cts +113 -0
- package/dist/context/types.d.ts +113 -0
- package/dist/context/types.js +0 -0
- package/dist/context/utils.cjs +406 -0
- package/dist/context/utils.d.cts +79 -0
- package/dist/context/utils.d.ts +79 -0
- package/dist/context/utils.js +374 -0
- package/dist/errors/DextoBaseError.cjs +36 -0
- package/dist/errors/DextoBaseError.d.cts +15 -0
- package/dist/errors/DextoBaseError.d.ts +15 -0
- package/dist/errors/DextoBaseError.js +12 -0
- package/dist/errors/DextoRuntimeError.cjs +50 -0
- package/dist/errors/DextoRuntimeError.d.cts +37 -0
- package/dist/errors/DextoRuntimeError.d.ts +37 -0
- package/dist/errors/DextoRuntimeError.js +26 -0
- package/dist/errors/DextoValidationError.cjs +118 -0
- package/dist/errors/DextoValidationError.d.cts +65 -0
- package/dist/errors/DextoValidationError.d.ts +65 -0
- package/dist/{chunk-XFQLRBHE.js → errors/DextoValidationError.js} +4 -32
- package/dist/errors/index.cjs +42 -0
- package/dist/errors/index.d.cts +18 -0
- package/dist/errors/index.d.ts +18 -0
- package/dist/errors/index.js +13 -0
- package/dist/errors/result-bridge.cjs +38 -0
- package/dist/errors/result-bridge.d.cts +39 -0
- package/dist/errors/result-bridge.d.ts +39 -0
- package/dist/errors/result-bridge.js +14 -0
- package/dist/errors/types.cjs +54 -0
- package/dist/errors/types.d.cts +62 -0
- package/dist/errors/types.d.ts +62 -0
- package/dist/errors/types.js +29 -0
- package/dist/events/index.cjs +169 -0
- package/dist/events/index.d.cts +272 -0
- package/dist/events/index.d.ts +272 -0
- package/dist/events/index.js +136 -0
- package/dist/index.browser.cjs +9 -220
- package/dist/index.browser.d.cts +53 -379
- package/dist/index.browser.d.ts +53 -379
- package/dist/index.browser.js +4 -210
- package/dist/index.cjs +31 -15266
- package/dist/index.d.cts +89 -6842
- package/dist/index.d.ts +89 -6842
- package/dist/index.js +14 -9914
- package/dist/llm/error-codes.cjs +48 -0
- package/dist/llm/error-codes.d.cts +26 -0
- package/dist/llm/error-codes.d.ts +26 -0
- package/dist/llm/error-codes.js +24 -0
- package/dist/llm/errors.cjs +108 -0
- package/dist/llm/errors.d.cts +58 -0
- package/dist/llm/errors.d.ts +58 -0
- package/dist/llm/errors.js +84 -0
- package/dist/llm/formatters/anthropic.cjs +246 -0
- package/dist/llm/formatters/anthropic.d.cts +45 -0
- package/dist/llm/formatters/anthropic.d.ts +45 -0
- package/dist/llm/formatters/anthropic.js +227 -0
- package/dist/llm/formatters/factory.cjs +51 -0
- package/dist/llm/formatters/factory.d.cts +12 -0
- package/dist/llm/formatters/factory.d.ts +12 -0
- package/dist/llm/formatters/factory.js +27 -0
- package/dist/llm/formatters/openai.cjs +167 -0
- package/dist/llm/formatters/openai.d.cts +38 -0
- package/dist/llm/formatters/openai.d.ts +38 -0
- package/dist/llm/formatters/openai.js +147 -0
- package/dist/llm/formatters/types.cjs +16 -0
- package/dist/llm/formatters/types.d.cts +43 -0
- package/dist/llm/formatters/types.d.ts +43 -0
- package/dist/llm/formatters/types.js +0 -0
- package/dist/llm/formatters/vercel.cjs +411 -0
- package/dist/llm/formatters/vercel.d.cts +48 -0
- package/dist/llm/formatters/vercel.d.ts +48 -0
- package/dist/llm/formatters/vercel.js +387 -0
- package/dist/llm/index.cjs +34 -0
- package/dist/llm/index.d.cts +39 -0
- package/dist/llm/index.d.ts +39 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/registry.cjs +881 -0
- package/dist/llm/registry.d.cts +176 -0
- package/dist/llm/registry.d.ts +176 -0
- package/dist/{chunk-J6AXCN3H.js → llm/registry.js} +25 -455
- package/dist/llm/resolver.cjs +154 -0
- package/dist/llm/resolver.d.cts +34 -0
- package/dist/llm/resolver.d.ts +34 -0
- package/dist/llm/resolver.js +136 -0
- package/dist/llm/schemas.cjs +188 -0
- package/dist/llm/schemas.d.cts +111 -0
- package/dist/llm/schemas.d.ts +111 -0
- package/dist/llm/schemas.js +172 -0
- package/dist/llm/services/anthropic.cjs +398 -0
- package/dist/llm/services/anthropic.d.cts +65 -0
- package/dist/llm/services/anthropic.d.ts +65 -0
- package/dist/llm/services/anthropic.js +374 -0
- package/dist/llm/services/factory.cjs +164 -0
- package/dist/llm/services/factory.d.cts +39 -0
- package/dist/llm/services/factory.d.ts +39 -0
- package/dist/llm/services/factory.js +130 -0
- package/dist/llm/services/index.cjs +22 -0
- package/dist/llm/services/index.d.cts +21 -0
- package/dist/llm/services/index.d.ts +21 -0
- package/dist/llm/services/index.js +1 -0
- package/dist/llm/services/openai.cjs +470 -0
- package/dist/llm/services/openai.d.cts +65 -0
- package/dist/llm/services/openai.d.ts +65 -0
- package/dist/llm/services/openai.js +446 -0
- package/dist/llm/services/test-utils.integration.cjs +169 -0
- package/dist/llm/services/test-utils.integration.d.cts +83 -0
- package/dist/llm/services/test-utils.integration.d.ts +83 -0
- package/dist/llm/services/test-utils.integration.js +142 -0
- package/dist/llm/services/types.cjs +16 -0
- package/dist/llm/services/types.d.cts +56 -0
- package/dist/llm/services/types.d.ts +56 -0
- package/dist/llm/services/types.js +0 -0
- package/dist/llm/services/vercel.cjs +525 -0
- package/dist/llm/services/vercel.d.cts +72 -0
- package/dist/llm/services/vercel.d.ts +72 -0
- package/dist/llm/services/vercel.js +506 -0
- package/dist/llm/tokenizer/anthropic.cjs +43 -0
- package/dist/llm/tokenizer/anthropic.d.cts +21 -0
- package/dist/llm/tokenizer/anthropic.d.ts +21 -0
- package/dist/llm/tokenizer/anthropic.js +19 -0
- package/dist/llm/tokenizer/default.cjs +41 -0
- package/dist/llm/tokenizer/default.d.cts +16 -0
- package/dist/llm/tokenizer/default.d.ts +16 -0
- package/dist/llm/tokenizer/default.js +17 -0
- package/dist/llm/tokenizer/factory.cjs +44 -0
- package/dist/llm/tokenizer/factory.d.cts +12 -0
- package/dist/llm/tokenizer/factory.d.ts +12 -0
- package/dist/llm/tokenizer/factory.js +20 -0
- package/dist/llm/tokenizer/google.cjs +52 -0
- package/dist/llm/tokenizer/google.d.cts +31 -0
- package/dist/llm/tokenizer/google.d.ts +31 -0
- package/dist/llm/tokenizer/google.js +28 -0
- package/dist/llm/tokenizer/openai.cjs +108 -0
- package/dist/llm/tokenizer/openai.d.cts +32 -0
- package/dist/llm/tokenizer/openai.d.ts +32 -0
- package/dist/llm/tokenizer/openai.js +83 -0
- package/dist/llm/tokenizer/types.cjs +33 -0
- package/dist/llm/tokenizer/types.d.cts +19 -0
- package/dist/llm/tokenizer/types.d.ts +19 -0
- package/dist/llm/tokenizer/types.js +9 -0
- package/dist/llm/types.cjs +42 -0
- package/dist/llm/types.d.cts +29 -0
- package/dist/llm/types.d.ts +29 -0
- package/dist/llm/types.js +16 -0
- package/dist/llm/validation.cjs +162 -0
- package/dist/llm/validation.d.cts +60 -0
- package/dist/llm/validation.d.ts +60 -0
- package/dist/llm/validation.js +138 -0
- package/dist/logger/browser.cjs +86 -0
- package/dist/logger/browser.d.cts +29 -0
- package/dist/logger/browser.d.ts +29 -0
- package/dist/logger/browser.js +61 -0
- package/dist/logger/index.cjs +22 -0
- package/dist/logger/index.d.cts +1 -0
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.js +1 -0
- package/dist/logger/logger.cjs +362 -0
- package/dist/logger/logger.d.cts +52 -0
- package/dist/logger/logger.d.ts +52 -0
- package/dist/logger/logger.js +327 -0
- package/dist/mcp/error-codes.cjs +38 -0
- package/dist/mcp/error-codes.d.cts +16 -0
- package/dist/mcp/error-codes.d.ts +16 -0
- package/dist/mcp/error-codes.js +14 -0
- package/dist/mcp/errors.cjs +131 -0
- package/dist/mcp/errors.d.cts +72 -0
- package/dist/mcp/errors.d.ts +72 -0
- package/dist/mcp/errors.js +107 -0
- package/dist/mcp/index.cjs +34 -0
- package/dist/mcp/index.d.cts +26 -0
- package/dist/mcp/index.d.ts +26 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/manager.cjs +473 -0
- package/dist/mcp/manager.d.cts +163 -0
- package/dist/mcp/manager.d.ts +163 -0
- package/dist/mcp/manager.js +449 -0
- package/dist/mcp/mcp-client.cjs +420 -0
- package/dist/mcp/mcp-client.d.cts +108 -0
- package/dist/mcp/mcp-client.d.ts +108 -0
- package/dist/mcp/mcp-client.js +396 -0
- package/dist/mcp/resolver.cjs +78 -0
- package/dist/mcp/resolver.d.cts +22 -0
- package/dist/mcp/resolver.d.ts +22 -0
- package/dist/mcp/resolver.js +56 -0
- package/dist/mcp/schemas.cjs +82 -0
- package/dist/mcp/schemas.d.cts +266 -0
- package/dist/mcp/schemas.d.ts +266 -0
- package/dist/mcp/schemas.js +54 -0
- package/dist/mcp/types.cjs +16 -0
- package/dist/mcp/types.d.cts +21 -0
- package/dist/mcp/types.d.ts +21 -0
- package/dist/mcp/types.js +0 -0
- package/dist/preferences/constants.cjs +28 -0
- package/dist/preferences/constants.d.cts +3 -0
- package/dist/preferences/constants.d.ts +3 -0
- package/dist/preferences/constants.js +4 -0
- package/dist/preferences/error-codes.cjs +35 -0
- package/dist/preferences/error-codes.d.cts +9 -0
- package/dist/preferences/error-codes.d.ts +9 -0
- package/dist/preferences/error-codes.js +11 -0
- package/dist/preferences/errors.cjs +75 -0
- package/dist/preferences/errors.d.cts +33 -0
- package/dist/preferences/errors.d.ts +33 -0
- package/dist/preferences/errors.js +50 -0
- package/dist/preferences/index.cjs +55 -0
- package/dist/preferences/index.d.cts +21 -0
- package/dist/preferences/index.d.ts +21 -0
- package/dist/preferences/index.js +31 -0
- package/dist/preferences/loader.cjs +136 -0
- package/dist/preferences/loader.d.cts +45 -0
- package/dist/preferences/loader.d.ts +45 -0
- package/dist/preferences/loader.js +107 -0
- package/dist/preferences/schemas.cjs +74 -0
- package/dist/preferences/schemas.d.cts +104 -0
- package/dist/preferences/schemas.d.ts +104 -0
- package/dist/preferences/schemas.js +47 -0
- package/dist/search/index.cjs +28 -0
- package/dist/search/index.d.cts +5 -0
- package/dist/search/index.d.ts +5 -0
- package/dist/search/index.js +4 -0
- package/dist/search/search-service.cjs +245 -0
- package/dist/search/search-service.d.cts +47 -0
- package/dist/search/search-service.d.ts +47 -0
- package/dist/search/search-service.js +221 -0
- package/dist/search/types.cjs +16 -0
- package/dist/search/types.d.cts +78 -0
- package/dist/search/types.d.ts +78 -0
- package/dist/search/types.js +0 -0
- package/dist/session/chat-session.cjs +354 -0
- package/dist/session/chat-session.d.cts +284 -0
- package/dist/session/chat-session.d.ts +284 -0
- package/dist/session/chat-session.js +333 -0
- package/dist/session/error-codes.cjs +35 -0
- package/dist/session/error-codes.d.cts +13 -0
- package/dist/session/error-codes.d.ts +13 -0
- package/dist/session/error-codes.js +11 -0
- package/dist/session/errors.cjs +93 -0
- package/dist/session/errors.d.cts +58 -0
- package/dist/session/errors.d.ts +58 -0
- package/dist/session/errors.js +69 -0
- package/dist/session/history/database.cjs +95 -0
- package/dist/session/history/database.d.cts +28 -0
- package/dist/session/history/database.d.ts +28 -0
- package/dist/session/history/database.js +71 -0
- package/dist/session/history/factory.cjs +31 -0
- package/dist/session/history/factory.d.cts +11 -0
- package/dist/session/history/factory.d.ts +11 -0
- package/dist/session/history/factory.js +7 -0
- package/dist/session/history/types.cjs +16 -0
- package/dist/session/history/types.d.cts +17 -0
- package/dist/session/history/types.d.ts +17 -0
- package/dist/session/history/types.js +0 -0
- package/dist/session/index.cjs +37 -0
- package/dist/session/index.d.cts +53 -0
- package/dist/session/index.d.ts +53 -0
- package/dist/session/index.js +10 -0
- package/dist/session/schemas.cjs +32 -0
- package/dist/session/schemas.d.cts +16 -0
- package/dist/session/schemas.d.ts +16 -0
- package/dist/session/schemas.js +8 -0
- package/dist/session/session-manager.cjs +481 -0
- package/dist/session/session-manager.d.cts +219 -0
- package/dist/session/session-manager.d.ts +219 -0
- package/dist/session/session-manager.js +457 -0
- package/dist/storage/backend/cache-backend.cjs +16 -0
- package/dist/storage/backend/cache-backend.d.cts +15 -0
- package/dist/storage/backend/cache-backend.d.ts +15 -0
- package/dist/storage/backend/cache-backend.js +0 -0
- package/dist/storage/backend/database-backend.cjs +16 -0
- package/dist/storage/backend/database-backend.d.cts +19 -0
- package/dist/storage/backend/database-backend.d.ts +19 -0
- package/dist/storage/backend/database-backend.js +0 -0
- package/dist/storage/backend/memory-backend.cjs +140 -0
- package/dist/storage/backend/memory-backend.d.cts +34 -0
- package/dist/storage/backend/memory-backend.d.ts +34 -0
- package/dist/storage/backend/memory-backend.js +116 -0
- package/dist/storage/backend/postgres-backend.cjs +231 -0
- package/dist/storage/backend/postgres-backend.d.cts +37 -0
- package/dist/storage/backend/postgres-backend.d.ts +37 -0
- package/dist/{postgres-backend-WMWS7RAT.js → storage/backend/postgres-backend.js} +3 -12
- package/dist/storage/backend/redis-backend.cjs +184 -0
- package/dist/storage/backend/redis-backend.d.cts +36 -0
- package/dist/storage/backend/redis-backend.d.ts +36 -0
- package/dist/{redis-backend-BNLN3XHX.js → storage/backend/redis-backend.js} +3 -12
- package/dist/storage/backend/sqlite-backend.cjs +271 -0
- package/dist/storage/backend/sqlite-backend.d.cts +35 -0
- package/dist/storage/backend/sqlite-backend.d.ts +35 -0
- package/dist/{sqlite-backend-AR6XNK2Q.js → storage/backend/sqlite-backend.js} +6 -17
- package/dist/storage/backend/types.cjs +16 -0
- package/dist/storage/backend/types.d.cts +14 -0
- package/dist/storage/backend/types.d.ts +14 -0
- package/dist/storage/backend/types.js +0 -0
- package/dist/storage/error-codes.cjs +36 -0
- package/dist/storage/error-codes.d.cts +14 -0
- package/dist/storage/error-codes.d.ts +14 -0
- package/dist/storage/error-codes.js +12 -0
- package/dist/storage/errors.cjs +104 -0
- package/dist/storage/errors.d.cts +63 -0
- package/dist/storage/errors.d.ts +63 -0
- package/dist/{chunk-F2QFAECT.js → storage/errors.js} +23 -30
- package/dist/storage/index.cjs +33 -0
- package/dist/storage/index.d.cts +7 -0
- package/dist/storage/index.d.ts +7 -0
- package/dist/storage/index.js +7 -0
- package/dist/storage/schemas.cjs +113 -0
- package/dist/storage/schemas.d.cts +856 -0
- package/dist/storage/schemas.d.ts +856 -0
- package/dist/storage/schemas.js +89 -0
- package/dist/storage/storage-manager.cjs +208 -0
- package/dist/storage/storage-manager.d.cts +52 -0
- package/dist/storage/storage-manager.d.ts +52 -0
- package/dist/storage/storage-manager.js +173 -0
- package/dist/storage/types.cjs +16 -0
- package/dist/storage/types.d.cts +5 -0
- package/dist/storage/types.d.ts +5 -0
- package/dist/storage/types.js +0 -0
- package/dist/systemPrompt/contributors.cjs +146 -0
- package/dist/systemPrompt/contributors.d.cts +44 -0
- package/dist/systemPrompt/contributors.d.ts +44 -0
- package/dist/systemPrompt/contributors.js +120 -0
- package/dist/systemPrompt/error-codes.cjs +35 -0
- package/dist/systemPrompt/error-codes.d.cts +13 -0
- package/dist/systemPrompt/error-codes.d.ts +13 -0
- package/dist/systemPrompt/error-codes.js +11 -0
- package/dist/systemPrompt/errors.cjs +93 -0
- package/dist/systemPrompt/errors.d.cts +55 -0
- package/dist/systemPrompt/errors.d.ts +55 -0
- package/dist/systemPrompt/errors.js +69 -0
- package/dist/systemPrompt/in-built-prompts.cjs +68 -0
- package/dist/systemPrompt/in-built-prompts.d.cts +28 -0
- package/dist/systemPrompt/in-built-prompts.d.ts +28 -0
- package/dist/systemPrompt/in-built-prompts.js +42 -0
- package/dist/systemPrompt/index.cjs +30 -0
- package/dist/systemPrompt/index.d.cts +14 -0
- package/dist/systemPrompt/index.d.ts +14 -0
- package/dist/systemPrompt/index.js +5 -0
- package/dist/systemPrompt/manager.cjs +93 -0
- package/dist/systemPrompt/manager.d.cts +31 -0
- package/dist/systemPrompt/manager.d.ts +31 -0
- package/dist/systemPrompt/manager.js +69 -0
- package/dist/systemPrompt/registry.cjs +51 -0
- package/dist/systemPrompt/registry.d.cts +20 -0
- package/dist/systemPrompt/registry.d.ts +20 -0
- package/dist/systemPrompt/registry.js +15 -0
- package/dist/systemPrompt/schemas.cjs +107 -0
- package/dist/systemPrompt/schemas.d.cts +401 -0
- package/dist/systemPrompt/schemas.d.ts +401 -0
- package/dist/systemPrompt/schemas.js +81 -0
- package/dist/systemPrompt/types.cjs +16 -0
- package/dist/systemPrompt/types.d.cts +19 -0
- package/dist/systemPrompt/types.d.ts +19 -0
- package/dist/systemPrompt/types.js +0 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.cjs +44 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.cts +19 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +19 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +20 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.cjs +62 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.cts +17 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts +17 -0
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +38 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +68 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.cts +26 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +26 -0
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +44 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.cjs +16 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.d.cts +35 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +35 -0
- package/dist/tools/confirmation/allowed-tools-provider/types.js +0 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.cjs +158 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.d.cts +41 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.d.ts +41 -0
- package/dist/tools/confirmation/event-based-confirmation-provider.js +134 -0
- package/dist/tools/confirmation/factory.cjs +52 -0
- package/dist/tools/confirmation/factory.d.cts +37 -0
- package/dist/tools/confirmation/factory.d.ts +37 -0
- package/dist/tools/confirmation/factory.js +28 -0
- package/dist/tools/confirmation/noop-confirmation-provider.cjs +49 -0
- package/dist/tools/confirmation/noop-confirmation-provider.d.cts +22 -0
- package/dist/tools/confirmation/noop-confirmation-provider.d.ts +22 -0
- package/dist/tools/confirmation/noop-confirmation-provider.js +25 -0
- package/dist/tools/confirmation/types.cjs +16 -0
- package/dist/tools/confirmation/types.d.cts +46 -0
- package/dist/tools/confirmation/types.d.ts +46 -0
- package/dist/tools/confirmation/types.js +0 -0
- package/dist/tools/error-codes.cjs +40 -0
- package/dist/tools/error-codes.d.cts +18 -0
- package/dist/tools/error-codes.d.ts +18 -0
- package/dist/tools/error-codes.js +16 -0
- package/dist/tools/errors.cjs +164 -0
- package/dist/tools/errors.d.cts +97 -0
- package/dist/tools/errors.d.ts +97 -0
- package/dist/tools/errors.js +140 -0
- package/dist/tools/index.cjs +37 -0
- package/dist/tools/index.d.cts +19 -0
- package/dist/tools/index.d.ts +19 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.cjs +61 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.d.cts +15 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.d.ts +15 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.js +37 -0
- package/dist/tools/internal-tools/index.cjs +24 -0
- package/dist/tools/internal-tools/index.d.cts +13 -0
- package/dist/tools/internal-tools/index.d.ts +13 -0
- package/dist/tools/internal-tools/index.js +2 -0
- package/dist/tools/internal-tools/provider.cjs +159 -0
- package/dist/tools/internal-tools/provider.d.cts +66 -0
- package/dist/tools/internal-tools/provider.d.ts +66 -0
- package/dist/tools/internal-tools/provider.js +135 -0
- package/dist/tools/internal-tools/registry.cjs +43 -0
- package/dist/tools/internal-tools/registry.d.cts +45 -0
- package/dist/tools/internal-tools/registry.d.ts +45 -0
- package/dist/tools/internal-tools/registry.js +17 -0
- package/dist/tools/schemas.cjs +45 -0
- package/dist/tools/schemas.d.cts +21 -0
- package/dist/tools/schemas.d.ts +21 -0
- package/dist/tools/schemas.js +20 -0
- package/dist/tools/tool-manager.cjs +275 -0
- package/dist/tools/tool-manager.d.cts +106 -0
- package/dist/tools/tool-manager.d.ts +106 -0
- package/dist/tools/tool-manager.js +251 -0
- package/dist/tools/types.cjs +16 -0
- package/dist/tools/types.d.cts +66 -0
- package/dist/tools/types.d.ts +66 -0
- package/dist/tools/types.js +0 -0
- package/dist/utils/api-key-resolver.cjs +62 -0
- package/dist/utils/api-key-resolver.d.cts +23 -0
- package/dist/utils/api-key-resolver.d.ts +23 -0
- package/dist/utils/api-key-resolver.js +36 -0
- package/dist/utils/api-key-store.cjs +56 -0
- package/dist/utils/api-key-store.d.cts +26 -0
- package/dist/utils/api-key-store.d.ts +26 -0
- package/dist/utils/api-key-store.js +30 -0
- package/dist/utils/env.cjs +154 -0
- package/dist/utils/env.d.cts +29 -0
- package/dist/utils/env.d.ts +29 -0
- package/dist/utils/env.js +118 -0
- package/dist/utils/error-conversion.cjs +53 -0
- package/dist/utils/error-conversion.d.cts +13 -0
- package/dist/utils/error-conversion.d.ts +13 -0
- package/dist/utils/error-conversion.js +29 -0
- package/dist/utils/execution-context.cjs +85 -0
- package/dist/utils/execution-context.d.cts +21 -0
- package/dist/utils/execution-context.d.ts +21 -0
- package/dist/utils/execution-context.js +49 -0
- package/dist/{chunk-MVKLS3LM.js → utils/fs-walk.cjs} +27 -18
- package/dist/utils/fs-walk.d.cts +9 -0
- package/dist/utils/fs-walk.d.ts +9 -0
- package/dist/utils/fs-walk.js +18 -0
- package/dist/utils/index.cjs +44 -0
- package/dist/utils/index.d.cts +63 -0
- package/dist/utils/index.d.ts +63 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/path.cjs +197 -0
- package/dist/utils/path.d.cts +54 -0
- package/dist/utils/path.d.ts +54 -0
- package/dist/utils/path.js +159 -0
- package/dist/utils/port-utils.cjs +37 -0
- package/dist/utils/port-utils.d.cts +11 -0
- package/dist/utils/port-utils.d.ts +11 -0
- package/dist/utils/port-utils.js +13 -0
- package/dist/utils/port-utils.spec.cjs +26 -0
- package/dist/utils/port-utils.spec.d.cts +2 -0
- package/dist/utils/port-utils.spec.d.ts +2 -0
- package/dist/utils/port-utils.spec.js +25 -0
- package/dist/utils/redactor.cjs +105 -0
- package/dist/utils/redactor.d.cts +18 -0
- package/dist/utils/redactor.d.ts +18 -0
- package/dist/utils/redactor.js +81 -0
- package/dist/utils/result.cjs +115 -0
- package/dist/utils/result.d.cts +180 -0
- package/dist/utils/result.d.ts +180 -0
- package/dist/utils/result.js +82 -0
- package/dist/utils/safe-stringify.cjs +57 -0
- package/dist/utils/safe-stringify.d.cts +7 -0
- package/dist/utils/safe-stringify.d.ts +7 -0
- package/dist/utils/safe-stringify.js +33 -0
- package/dist/utils/schema.cjs +42 -0
- package/dist/utils/schema.d.cts +6 -0
- package/dist/utils/schema.d.ts +6 -0
- package/dist/utils/schema.js +18 -0
- package/dist/utils/service-initializer.cjs +119 -0
- package/dist/utils/service-initializer.d.cts +63 -0
- package/dist/utils/service-initializer.d.ts +63 -0
- package/dist/utils/service-initializer.js +95 -0
- package/dist/utils/user-info.cjs +30 -0
- package/dist/utils/user-info.d.cts +3 -0
- package/dist/utils/user-info.d.ts +3 -0
- package/dist/utils/user-info.js +6 -0
- package/dist/utils/zod-schema-converter.cjs +112 -0
- package/dist/utils/zod-schema-converter.d.cts +13 -0
- package/dist/utils/zod-schema-converter.d.ts +13 -0
- package/dist/utils/zod-schema-converter.js +87 -0
- package/package.json +2 -2
- package/dist/chunk-D62MHQBE.js +0 -2203
- package/dist/chunk-FCJVTIBV.js +0 -535
- package/dist/chunk-TPERKLLN.js +0 -75
- package/dist/errors-ZZ4Z3FKB.js +0 -10
- package/dist/loader-HBNEYPQZ.js +0 -20
- package/dist/path-TP7WBDED.js +0 -21
- package/dist/registry-Z4DFXODW.js +0 -14
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
import { MCPClient } from "./mcp-client.js";
|
|
2
|
+
import { logger } from "../logger/index.js";
|
|
3
|
+
import { MCPError } from "./errors.js";
|
|
4
|
+
class MCPManager {
|
|
5
|
+
clients = /* @__PURE__ */ new Map();
|
|
6
|
+
connectionErrors = {};
|
|
7
|
+
toolToClientMap = /* @__PURE__ */ new Map();
|
|
8
|
+
serverToolsMap = /* @__PURE__ */ new Map();
|
|
9
|
+
toolConflicts = /* @__PURE__ */ new Set();
|
|
10
|
+
promptToClientMap = /* @__PURE__ */ new Map();
|
|
11
|
+
resourceToClientMap = /* @__PURE__ */ new Map();
|
|
12
|
+
sanitizedNameToServerMap = /* @__PURE__ */ new Map();
|
|
13
|
+
// Use a distinctive delimiter that won't appear in normal server/tool names
|
|
14
|
+
// Using double hyphen as it's allowed in LLM tool name patterns (^[a-zA-Z0-9_-]+$)
|
|
15
|
+
static SERVER_DELIMITER = "--";
|
|
16
|
+
constructor() {
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Register a client that provides tools (and potentially more)
|
|
20
|
+
* @param name Unique name for the client
|
|
21
|
+
* @param client The client instance, expected to be IMCPClient
|
|
22
|
+
*/
|
|
23
|
+
registerClient(name, client) {
|
|
24
|
+
if (this.clients.has(name)) {
|
|
25
|
+
logger.warn(`Client '${name}' already registered. Overwriting.`);
|
|
26
|
+
}
|
|
27
|
+
this.clearClientCache(name);
|
|
28
|
+
const sanitizedName = this.sanitizeServerName(name);
|
|
29
|
+
const existingServerWithSameSanitizedName = this.sanitizedNameToServerMap.get(sanitizedName);
|
|
30
|
+
if (existingServerWithSameSanitizedName && existingServerWithSameSanitizedName !== name) {
|
|
31
|
+
throw MCPError.duplicateName(name, existingServerWithSameSanitizedName);
|
|
32
|
+
}
|
|
33
|
+
this.clients.set(name, client);
|
|
34
|
+
this.sanitizedNameToServerMap.set(sanitizedName, name);
|
|
35
|
+
logger.info(`Registered client: ${name}`);
|
|
36
|
+
delete this.connectionErrors[name];
|
|
37
|
+
}
|
|
38
|
+
clearClientCache(clientName) {
|
|
39
|
+
const client = this.clients.get(clientName);
|
|
40
|
+
if (!client) return;
|
|
41
|
+
const hadServerTools = this.serverToolsMap.has(clientName);
|
|
42
|
+
this.serverToolsMap.delete(clientName);
|
|
43
|
+
const sanitizedName = this.sanitizeServerName(clientName);
|
|
44
|
+
if (this.sanitizedNameToServerMap.get(sanitizedName) === clientName) {
|
|
45
|
+
this.sanitizedNameToServerMap.delete(sanitizedName);
|
|
46
|
+
}
|
|
47
|
+
[this.toolToClientMap, this.promptToClientMap, this.resourceToClientMap].forEach(
|
|
48
|
+
(cacheMap) => {
|
|
49
|
+
for (const [key, mappedClient] of Array.from(cacheMap.entries())) {
|
|
50
|
+
if (mappedClient === client) {
|
|
51
|
+
cacheMap.delete(key);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
if (hadServerTools) {
|
|
57
|
+
this.rebuildToolConflicts();
|
|
58
|
+
}
|
|
59
|
+
logger.debug(`Cleared cache for client: ${clientName}`);
|
|
60
|
+
}
|
|
61
|
+
rebuildToolConflicts() {
|
|
62
|
+
this.toolConflicts.clear();
|
|
63
|
+
const toolCounts = /* @__PURE__ */ new Map();
|
|
64
|
+
for (const serverTools of this.serverToolsMap.values()) {
|
|
65
|
+
for (const toolName of serverTools.keys()) {
|
|
66
|
+
toolCounts.set(toolName, (toolCounts.get(toolName) || 0) + 1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
for (const [toolName, count] of toolCounts.entries()) {
|
|
70
|
+
if (count > 1) {
|
|
71
|
+
this.toolConflicts.add(toolName);
|
|
72
|
+
this.toolToClientMap.delete(toolName);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const [_, serverTools] of this.serverToolsMap.entries()) {
|
|
76
|
+
for (const [toolName, client] of serverTools.entries()) {
|
|
77
|
+
if (!this.toolConflicts.has(toolName)) {
|
|
78
|
+
this.toolToClientMap.set(toolName, client);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Sanitize server name for use in tool prefixing.
|
|
85
|
+
* Ensures the name is safe for LLM provider tool naming constraints.
|
|
86
|
+
*/
|
|
87
|
+
sanitizeServerName(serverName) {
|
|
88
|
+
return serverName.replace(/[^a-zA-Z0-9_-]/g, "_");
|
|
89
|
+
}
|
|
90
|
+
async updateClientCache(clientName, client) {
|
|
91
|
+
const serverTools = /* @__PURE__ */ new Map();
|
|
92
|
+
this.serverToolsMap.set(clientName, serverTools);
|
|
93
|
+
try {
|
|
94
|
+
const tools = await client.getTools();
|
|
95
|
+
logger.debug(
|
|
96
|
+
`\u{1F527} Discovered ${Object.keys(tools).length} tools from server '${clientName}': [${Object.keys(tools).join(", ")}]`
|
|
97
|
+
);
|
|
98
|
+
for (const toolName in tools) {
|
|
99
|
+
serverTools.set(toolName, client);
|
|
100
|
+
const existingClient = this.toolToClientMap.get(toolName);
|
|
101
|
+
if (existingClient && existingClient !== client) {
|
|
102
|
+
this.toolConflicts.add(toolName);
|
|
103
|
+
this.toolToClientMap.delete(toolName);
|
|
104
|
+
logger.warn(
|
|
105
|
+
`\u26A0\uFE0F Tool conflict detected for '${toolName}' - will use server prefix`
|
|
106
|
+
);
|
|
107
|
+
} else if (!this.toolConflicts.has(toolName)) {
|
|
108
|
+
this.toolToClientMap.set(toolName, client);
|
|
109
|
+
logger.debug(`\u2705 Tool '${toolName}' mapped to ${clientName}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
logger.debug(
|
|
113
|
+
`\u2705 Successfully cached ${Object.keys(tools).length} tools for client: ${clientName}`
|
|
114
|
+
);
|
|
115
|
+
} catch (error) {
|
|
116
|
+
logger.error(
|
|
117
|
+
`\u274C Error retrieving tools for client ${clientName}: ${error instanceof Error ? error.message : String(error)}`
|
|
118
|
+
);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const prompts = await client.listPrompts();
|
|
123
|
+
prompts.forEach((promptName) => {
|
|
124
|
+
this.promptToClientMap.set(promptName, client);
|
|
125
|
+
});
|
|
126
|
+
logger.debug(`Cached prompts for client: ${clientName}`);
|
|
127
|
+
} catch (error) {
|
|
128
|
+
logger.debug(`Skipping prompts for client ${clientName}: ${error}`);
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const resources = await client.listResources();
|
|
132
|
+
resources.forEach((resourceUri) => {
|
|
133
|
+
this.resourceToClientMap.set(resourceUri, client);
|
|
134
|
+
});
|
|
135
|
+
logger.debug(`Cached resources for client: ${clientName}`);
|
|
136
|
+
} catch (error) {
|
|
137
|
+
logger.debug(`Skipping resources for client ${clientName}: ${error}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get all available MCP tools from all connected clients, updating the cache.
|
|
142
|
+
* Conflicted tools are prefixed with server name using distinctive delimiter.
|
|
143
|
+
* @returns Promise resolving to a ToolSet mapping tool names to Tool definitions
|
|
144
|
+
*/
|
|
145
|
+
async getAllTools() {
|
|
146
|
+
const allTools = {};
|
|
147
|
+
const clientToolsCache = /* @__PURE__ */ new Map();
|
|
148
|
+
const getClientTools = async (client) => {
|
|
149
|
+
if (!clientToolsCache.has(client)) {
|
|
150
|
+
const tools = await client.getTools();
|
|
151
|
+
clientToolsCache.set(client, tools);
|
|
152
|
+
}
|
|
153
|
+
return clientToolsCache.get(client);
|
|
154
|
+
};
|
|
155
|
+
for (const [toolName, client] of Array.from(this.toolToClientMap.entries())) {
|
|
156
|
+
const clientTools = await getClientTools(client);
|
|
157
|
+
const toolDef = clientTools[toolName];
|
|
158
|
+
if (toolDef) {
|
|
159
|
+
allTools[toolName] = toolDef;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
for (const [serverName, serverTools] of this.serverToolsMap.entries()) {
|
|
163
|
+
for (const [toolName, client] of serverTools.entries()) {
|
|
164
|
+
if (this.toolConflicts.has(toolName)) {
|
|
165
|
+
const sanitizedServerName = this.sanitizeServerName(serverName);
|
|
166
|
+
const qualifiedName = `${sanitizedServerName}${MCPManager.SERVER_DELIMITER}${toolName}`;
|
|
167
|
+
const clientTools = await getClientTools(client);
|
|
168
|
+
const toolDef = clientTools[toolName];
|
|
169
|
+
if (toolDef) {
|
|
170
|
+
allTools[qualifiedName] = {
|
|
171
|
+
...toolDef,
|
|
172
|
+
description: toolDef.description ? `${toolDef.description} (via ${serverName})` : `Tool from ${serverName}`
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
logger.debug(
|
|
179
|
+
`\u{1F527} MCP tool discovery: ${Object.keys(allTools).length} total tools, ${this.toolConflicts.size} conflicts, connected servers: ${Array.from(this.serverToolsMap.keys()).join(", ")}`
|
|
180
|
+
);
|
|
181
|
+
if (logger.getLevel() === "debug") {
|
|
182
|
+
Object.keys(allTools).forEach((toolName) => {
|
|
183
|
+
if (toolName.includes(MCPManager.SERVER_DELIMITER)) {
|
|
184
|
+
logger.debug(` - ${toolName} (qualified)`);
|
|
185
|
+
} else {
|
|
186
|
+
logger.debug(` - ${toolName}`);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
logger.silly(`MCP tools: ${JSON.stringify(allTools, null, 2)}`);
|
|
191
|
+
return allTools;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Parse a qualified tool name to extract server name and actual tool name.
|
|
195
|
+
* Uses distinctive delimiter to avoid ambiguity and splits on last occurrence.
|
|
196
|
+
*/
|
|
197
|
+
parseQualifiedToolName(toolName) {
|
|
198
|
+
const delimiterIndex = toolName.lastIndexOf(MCPManager.SERVER_DELIMITER);
|
|
199
|
+
if (delimiterIndex === -1) {
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
const serverPrefix = toolName.substring(0, delimiterIndex);
|
|
203
|
+
const actualToolName = toolName.substring(
|
|
204
|
+
delimiterIndex + MCPManager.SERVER_DELIMITER.length
|
|
205
|
+
);
|
|
206
|
+
const originalServerName = this.sanitizedNameToServerMap.get(serverPrefix);
|
|
207
|
+
if (originalServerName && this.serverToolsMap.get(originalServerName)?.has(actualToolName)) {
|
|
208
|
+
return { serverName: originalServerName, toolName: actualToolName };
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Get client that provides a specific tool from the cache.
|
|
214
|
+
* Handles both simple tool names and server-prefixed tool names.
|
|
215
|
+
* @param toolName Name of the tool (may include server prefix)
|
|
216
|
+
* @returns The client that provides the tool, or undefined if not found
|
|
217
|
+
*/
|
|
218
|
+
getToolClient(toolName) {
|
|
219
|
+
const parsed = this.parseQualifiedToolName(toolName);
|
|
220
|
+
if (parsed) {
|
|
221
|
+
const serverTools = this.serverToolsMap.get(parsed.serverName);
|
|
222
|
+
return serverTools?.get(parsed.toolName);
|
|
223
|
+
}
|
|
224
|
+
return this.toolToClientMap.get(toolName);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Execute a specific MCP tool with the given arguments.
|
|
228
|
+
* @param toolName Name of the MCP tool to execute (may include server prefix)
|
|
229
|
+
* @param args Arguments to pass to the tool
|
|
230
|
+
* @param sessionId Optional session ID
|
|
231
|
+
* @returns Promise resolving to the tool execution result
|
|
232
|
+
*/
|
|
233
|
+
async executeTool(toolName, args, _sessionId) {
|
|
234
|
+
const client = this.getToolClient(toolName);
|
|
235
|
+
if (!client) {
|
|
236
|
+
logger.error(`\u274C No MCP tool found: ${toolName}`);
|
|
237
|
+
logger.debug(
|
|
238
|
+
`Available MCP tools: ${Array.from(this.toolToClientMap.keys()).join(", ")}`
|
|
239
|
+
);
|
|
240
|
+
logger.debug(`Conflicted tools: ${Array.from(this.toolConflicts).join(", ")}`);
|
|
241
|
+
logger.debug(
|
|
242
|
+
`Server tools map keys: ${Array.from(this.serverToolsMap.keys()).join(", ")}`
|
|
243
|
+
);
|
|
244
|
+
throw MCPError.toolNotFound(toolName);
|
|
245
|
+
}
|
|
246
|
+
const parsed = this.parseQualifiedToolName(toolName);
|
|
247
|
+
const actualToolName = parsed ? parsed.toolName : toolName;
|
|
248
|
+
const serverName = parsed ? parsed.serverName : "direct";
|
|
249
|
+
logger.debug(`\u25B6\uFE0F Executing MCP tool '${actualToolName}' on server '${serverName}'...`);
|
|
250
|
+
try {
|
|
251
|
+
const result = await client.callTool(actualToolName, args);
|
|
252
|
+
return result;
|
|
253
|
+
} catch (error) {
|
|
254
|
+
logger.error(
|
|
255
|
+
`\u274C MCP tool execution failed: '${actualToolName}' - ${error instanceof Error ? error.message : String(error)}`
|
|
256
|
+
);
|
|
257
|
+
throw error;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get all available prompt names from all connected clients, updating the cache.
|
|
262
|
+
* @returns Promise resolving to an array of unique prompt names.
|
|
263
|
+
*/
|
|
264
|
+
async listAllPrompts() {
|
|
265
|
+
return Array.from(this.promptToClientMap.keys());
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get the client that provides a specific prompt from the cache.
|
|
269
|
+
* @param promptName Name of the prompt.
|
|
270
|
+
* @returns The client instance or undefined.
|
|
271
|
+
*/
|
|
272
|
+
getPromptClient(promptName) {
|
|
273
|
+
return this.promptToClientMap.get(promptName);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get a specific prompt definition by name.
|
|
277
|
+
* @param name Name of the prompt.
|
|
278
|
+
* @param args Arguments for the prompt (optional).
|
|
279
|
+
* @returns Promise resolving to the prompt definition.
|
|
280
|
+
*/
|
|
281
|
+
async getPrompt(name, args) {
|
|
282
|
+
const client = this.getPromptClient(name);
|
|
283
|
+
if (!client) {
|
|
284
|
+
throw MCPError.promptNotFound(name);
|
|
285
|
+
}
|
|
286
|
+
return await client.getPrompt(name, args);
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Get all available resource URIs from all connected clients, updating the cache.
|
|
290
|
+
* @returns Promise resolving to an array of unique resource URIs.
|
|
291
|
+
*/
|
|
292
|
+
async listAllResources() {
|
|
293
|
+
return Array.from(this.resourceToClientMap.keys());
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get the client that provides a specific resource from the cache.
|
|
297
|
+
* @param resourceUri URI of the resource.
|
|
298
|
+
* @returns The client instance or undefined.
|
|
299
|
+
*/
|
|
300
|
+
getResourceClient(resourceUri) {
|
|
301
|
+
return this.resourceToClientMap.get(resourceUri);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Read a specific resource by URI.
|
|
305
|
+
* @param uri URI of the resource.
|
|
306
|
+
* @returns Promise resolving to the resource content.
|
|
307
|
+
*/
|
|
308
|
+
async readResource(uri) {
|
|
309
|
+
const client = this.getResourceClient(uri);
|
|
310
|
+
if (!client) {
|
|
311
|
+
throw MCPError.resourceNotFound(uri);
|
|
312
|
+
}
|
|
313
|
+
return await client.readResource(uri);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Initialize clients from server configurations
|
|
317
|
+
* @param serverConfigs Server configurations with individual connection modes
|
|
318
|
+
* @returns Promise resolving when initialization is complete
|
|
319
|
+
*/
|
|
320
|
+
async initializeFromConfig(serverConfigs) {
|
|
321
|
+
if (Object.keys(serverConfigs).length === 0) {
|
|
322
|
+
logger.info("No MCP servers configured - running without external tools");
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
const successfulConnections = [];
|
|
326
|
+
const connectionPromises = [];
|
|
327
|
+
const strictServers = [];
|
|
328
|
+
const lenientServers = [];
|
|
329
|
+
for (const [name, config] of Object.entries(serverConfigs)) {
|
|
330
|
+
const effectiveMode = config.connectionMode || "lenient";
|
|
331
|
+
if (effectiveMode === "strict") {
|
|
332
|
+
strictServers.push(name);
|
|
333
|
+
} else {
|
|
334
|
+
lenientServers.push(name);
|
|
335
|
+
}
|
|
336
|
+
const connectPromise = this.connectServer(name, config).then(() => {
|
|
337
|
+
successfulConnections.push(name);
|
|
338
|
+
}).catch((error) => {
|
|
339
|
+
logger.debug(
|
|
340
|
+
`Handled connection error for '${name}' during initialization: ${error.message}`
|
|
341
|
+
);
|
|
342
|
+
});
|
|
343
|
+
connectionPromises.push(connectPromise);
|
|
344
|
+
}
|
|
345
|
+
await Promise.all(connectionPromises);
|
|
346
|
+
const failedStrictServers = strictServers.filter(
|
|
347
|
+
(name) => !successfulConnections.includes(name)
|
|
348
|
+
);
|
|
349
|
+
if (failedStrictServers.length > 0) {
|
|
350
|
+
const strictErrors = failedStrictServers.map((name) => `${name}: ${this.connectionErrors[name] || "Unknown error"}`).join("; ");
|
|
351
|
+
throw MCPError.connectionFailed("strict servers", strictErrors);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Dynamically connect to a new MCP server.
|
|
356
|
+
* @param name The unique name for the new server connection.
|
|
357
|
+
* @param config The configuration for the server.
|
|
358
|
+
* @returns Promise resolving when the connection attempt is complete.
|
|
359
|
+
* @throws Error if the connection fails.
|
|
360
|
+
*/
|
|
361
|
+
async connectServer(name, config) {
|
|
362
|
+
if (this.clients.has(name)) {
|
|
363
|
+
logger.warn(`Client '${name}' is already connected or registered.`);
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
const client = new MCPClient();
|
|
367
|
+
try {
|
|
368
|
+
logger.info(`Attempting to connect to new server '${name}'...`);
|
|
369
|
+
await client.connect(config, name);
|
|
370
|
+
this.registerClient(name, client);
|
|
371
|
+
await this.updateClientCache(name, client);
|
|
372
|
+
logger.info(`Successfully connected and cached new server '${name}'`);
|
|
373
|
+
} catch (error) {
|
|
374
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
375
|
+
this.connectionErrors[name] = errorMsg;
|
|
376
|
+
logger.error(`Failed to connect to new server '${name}': ${errorMsg}`);
|
|
377
|
+
this.clients.delete(name);
|
|
378
|
+
throw MCPError.connectionFailed(name, errorMsg);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Get all registered clients
|
|
383
|
+
* @returns Map of client names to client instances
|
|
384
|
+
*/
|
|
385
|
+
getClients() {
|
|
386
|
+
return this.clients;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Get the errors from failed connections
|
|
390
|
+
* @returns Map of server names to error messages
|
|
391
|
+
*/
|
|
392
|
+
getFailedConnections() {
|
|
393
|
+
return this.connectionErrors;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Disconnect and remove a specific client by name.
|
|
397
|
+
* @param name The name of the client to remove.
|
|
398
|
+
*/
|
|
399
|
+
async removeClient(name) {
|
|
400
|
+
const client = this.clients.get(name);
|
|
401
|
+
if (client) {
|
|
402
|
+
if (typeof client.disconnect === "function") {
|
|
403
|
+
try {
|
|
404
|
+
await client.disconnect();
|
|
405
|
+
logger.info(`Successfully disconnected client: ${name}`);
|
|
406
|
+
} catch (error) {
|
|
407
|
+
logger.error(
|
|
408
|
+
`Error disconnecting client '${name}': ${error instanceof Error ? error.message : String(error)}`
|
|
409
|
+
);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
this.clearClientCache(name);
|
|
413
|
+
this.clients.delete(name);
|
|
414
|
+
logger.info(`Removed client from manager: ${name}`);
|
|
415
|
+
}
|
|
416
|
+
if (this.connectionErrors[name]) {
|
|
417
|
+
delete this.connectionErrors[name];
|
|
418
|
+
logger.info(`Cleared connection error for removed client: ${name}`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Disconnect all clients and clear caches
|
|
423
|
+
*/
|
|
424
|
+
async disconnectAll() {
|
|
425
|
+
const disconnectPromises = [];
|
|
426
|
+
for (const [name, client] of Array.from(this.clients.entries())) {
|
|
427
|
+
if (client.disconnect) {
|
|
428
|
+
disconnectPromises.push(
|
|
429
|
+
client.disconnect().then(() => logger.info(`Disconnected client: ${name}`)).catch(
|
|
430
|
+
(error) => logger.error(`Failed to disconnect client '${name}': ${error}`)
|
|
431
|
+
)
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
await Promise.all(disconnectPromises);
|
|
436
|
+
this.clients.clear();
|
|
437
|
+
this.connectionErrors = {};
|
|
438
|
+
this.toolToClientMap.clear();
|
|
439
|
+
this.serverToolsMap.clear();
|
|
440
|
+
this.toolConflicts.clear();
|
|
441
|
+
this.promptToClientMap.clear();
|
|
442
|
+
this.resourceToClientMap.clear();
|
|
443
|
+
this.sanitizedNameToServerMap.clear();
|
|
444
|
+
logger.info("Disconnected all clients and cleared caches.");
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
export {
|
|
448
|
+
MCPManager
|
|
449
|
+
};
|