@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,793 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var DextoAgent_exports = {};
|
|
20
|
+
__export(DextoAgent_exports, {
|
|
21
|
+
DextoAgent: () => DextoAgent
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(DextoAgent_exports);
|
|
24
|
+
var import_session = require("../session/index.js");
|
|
25
|
+
var import_logger = require("../logger/index.js");
|
|
26
|
+
var import_schemas = require("../llm/schemas.cjs");
|
|
27
|
+
var import_resolver = require("../llm/resolver.js");
|
|
28
|
+
var import_validation = require("../llm/validation.js");
|
|
29
|
+
var import_errors = require("./errors.js");
|
|
30
|
+
var import_errors2 = require("../mcp/errors.js");
|
|
31
|
+
var import_result_bridge = require("../errors/result-bridge.cjs");
|
|
32
|
+
var import_result = require("../utils/result.cjs");
|
|
33
|
+
var import_resolver2 = require("../mcp/resolver.js");
|
|
34
|
+
var import_registry = require("../llm/registry.js");
|
|
35
|
+
var import_service_initializer2 = require("../utils/service-initializer.js");
|
|
36
|
+
var import_schemas2 = require("./schemas.js");
|
|
37
|
+
var import_path = require("../utils/path.js");
|
|
38
|
+
var import_safe_stringify = require("../utils/safe-stringify.cjs");
|
|
39
|
+
const requiredServices = [
|
|
40
|
+
"mcpManager",
|
|
41
|
+
"toolManager",
|
|
42
|
+
"promptManager",
|
|
43
|
+
"agentEventBus",
|
|
44
|
+
"stateManager",
|
|
45
|
+
"sessionManager",
|
|
46
|
+
"searchService"
|
|
47
|
+
];
|
|
48
|
+
class DextoAgent {
|
|
49
|
+
constructor(config, configPath) {
|
|
50
|
+
this.configPath = configPath;
|
|
51
|
+
this.config = import_schemas2.AgentConfigSchema.parse(config);
|
|
52
|
+
import_logger.logger.info("DextoAgent created.");
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* These services are public for use by the outside world
|
|
56
|
+
* This gives users the option to use methods of the services directly if they know what they are doing
|
|
57
|
+
* But the main recommended entry points/functions would still be the wrapper methods we define below
|
|
58
|
+
*/
|
|
59
|
+
mcpManager;
|
|
60
|
+
promptManager;
|
|
61
|
+
agentEventBus;
|
|
62
|
+
stateManager;
|
|
63
|
+
sessionManager;
|
|
64
|
+
toolManager;
|
|
65
|
+
services;
|
|
66
|
+
// Search service for conversation search
|
|
67
|
+
searchService;
|
|
68
|
+
// Default session for backward compatibility
|
|
69
|
+
defaultSession = null;
|
|
70
|
+
// Current default session ID for loadSession functionality
|
|
71
|
+
currentDefaultSessionId = "default";
|
|
72
|
+
// Track initialization state
|
|
73
|
+
_isStarted = false;
|
|
74
|
+
_isStopped = false;
|
|
75
|
+
// Store config for async initialization
|
|
76
|
+
config;
|
|
77
|
+
/**
|
|
78
|
+
* Starts the agent by initializing all async services.
|
|
79
|
+
* This method handles storage backends, MCP connections, session manager initialization, and other async operations.
|
|
80
|
+
* Must be called before using any agent functionality.
|
|
81
|
+
*
|
|
82
|
+
* @throws Error if agent is already started or initialization fails
|
|
83
|
+
*/
|
|
84
|
+
async start() {
|
|
85
|
+
if (this._isStarted) {
|
|
86
|
+
throw import_errors.AgentError.alreadyStarted();
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
import_logger.logger.info("Starting DextoAgent...");
|
|
90
|
+
const services = await (0, import_service_initializer2.createAgentServices)(this.config, this.configPath);
|
|
91
|
+
for (const service of requiredServices) {
|
|
92
|
+
if (!services[service]) {
|
|
93
|
+
throw import_errors.AgentError.initializationFailed(
|
|
94
|
+
`Required service ${service} is missing during agent start`
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
Object.assign(this, {
|
|
99
|
+
mcpManager: services.mcpManager,
|
|
100
|
+
toolManager: services.toolManager,
|
|
101
|
+
promptManager: services.promptManager,
|
|
102
|
+
agentEventBus: services.agentEventBus,
|
|
103
|
+
stateManager: services.stateManager,
|
|
104
|
+
sessionManager: services.sessionManager,
|
|
105
|
+
services
|
|
106
|
+
});
|
|
107
|
+
this.searchService = services.searchService;
|
|
108
|
+
this._isStarted = true;
|
|
109
|
+
import_logger.logger.info("DextoAgent started successfully.");
|
|
110
|
+
const logPath = (0, import_path.getDextoPath)("logs", "dexto.log");
|
|
111
|
+
console.log(`\u{1F4CB} Logs available at: ${logPath}`);
|
|
112
|
+
} catch (error) {
|
|
113
|
+
import_logger.logger.error("Failed to start DextoAgent", error);
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Stops the agent and gracefully shuts down all services.
|
|
119
|
+
* This method handles disconnecting MCP clients, cleaning up sessions, closing storage connections,
|
|
120
|
+
* and releasing all resources. The agent cannot be restarted after being stopped.
|
|
121
|
+
*
|
|
122
|
+
* @throws Error if agent has not been started or shutdown fails
|
|
123
|
+
*/
|
|
124
|
+
async stop() {
|
|
125
|
+
if (this._isStopped) {
|
|
126
|
+
import_logger.logger.warn("Agent is already stopped");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (!this._isStarted) {
|
|
130
|
+
throw import_errors.AgentError.notStarted();
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
import_logger.logger.info("Stopping DextoAgent...");
|
|
134
|
+
const shutdownErrors = [];
|
|
135
|
+
try {
|
|
136
|
+
if (this.sessionManager) {
|
|
137
|
+
await this.sessionManager.cleanup();
|
|
138
|
+
import_logger.logger.debug("SessionManager cleaned up successfully");
|
|
139
|
+
}
|
|
140
|
+
} catch (error) {
|
|
141
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
142
|
+
shutdownErrors.push(new Error(`SessionManager cleanup failed: ${err.message}`));
|
|
143
|
+
}
|
|
144
|
+
try {
|
|
145
|
+
if (this.mcpManager) {
|
|
146
|
+
await this.mcpManager.disconnectAll();
|
|
147
|
+
import_logger.logger.debug("MCPManager disconnected all clients successfully");
|
|
148
|
+
}
|
|
149
|
+
} catch (error) {
|
|
150
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
151
|
+
shutdownErrors.push(new Error(`MCPManager disconnect failed: ${err.message}`));
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
if (this.services?.storageManager) {
|
|
155
|
+
await this.services.storageManager.disconnect();
|
|
156
|
+
import_logger.logger.debug("Storage manager disconnected successfully");
|
|
157
|
+
}
|
|
158
|
+
} catch (error) {
|
|
159
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
160
|
+
shutdownErrors.push(new Error(`Storage disconnect failed: ${err.message}`));
|
|
161
|
+
}
|
|
162
|
+
this._isStopped = true;
|
|
163
|
+
this._isStarted = false;
|
|
164
|
+
if (shutdownErrors.length > 0) {
|
|
165
|
+
const errorMessages = shutdownErrors.map((e) => e.message).join("; ");
|
|
166
|
+
import_logger.logger.warn(`DextoAgent stopped with some errors: ${errorMessages}`);
|
|
167
|
+
} else {
|
|
168
|
+
import_logger.logger.info("DextoAgent stopped successfully.");
|
|
169
|
+
}
|
|
170
|
+
} catch (error) {
|
|
171
|
+
import_logger.logger.error("Failed to stop DextoAgent", error);
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Checks if the agent has been started.
|
|
177
|
+
* @returns true if agent is started, false otherwise
|
|
178
|
+
*/
|
|
179
|
+
isStarted() {
|
|
180
|
+
return this._isStarted;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Checks if the agent has been stopped.
|
|
184
|
+
* @returns true if agent is stopped, false otherwise
|
|
185
|
+
*/
|
|
186
|
+
isStopped() {
|
|
187
|
+
return this._isStopped;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Ensures the agent is started before executing operations.
|
|
191
|
+
* @throws Error if agent is not started or has been stopped
|
|
192
|
+
*/
|
|
193
|
+
ensureStarted() {
|
|
194
|
+
if (this._isStopped) {
|
|
195
|
+
import_logger.logger.warn("Agent is stopped");
|
|
196
|
+
throw import_errors.AgentError.stopped();
|
|
197
|
+
}
|
|
198
|
+
if (!this._isStarted) {
|
|
199
|
+
import_logger.logger.warn("Agent is not started");
|
|
200
|
+
throw import_errors.AgentError.notStarted();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// ============= CORE AGENT FUNCTIONALITY =============
|
|
204
|
+
/**
|
|
205
|
+
* Main method for processing user input.
|
|
206
|
+
* Processes user input through the agent's LLM service and returns the response.
|
|
207
|
+
*
|
|
208
|
+
* @param textInput - The user's text message or query to process
|
|
209
|
+
* @param imageDataInput - Optional image data and MIME type for multimodal input
|
|
210
|
+
* @param fileDataInput - Optional file data and MIME type for file input
|
|
211
|
+
* @param sessionId - Optional session ID for multi-session scenarios
|
|
212
|
+
* @returns Promise that resolves to the AI's response text, or null if no significant response
|
|
213
|
+
* @throws Error if processing fails
|
|
214
|
+
*/
|
|
215
|
+
async run(textInput, imageDataInput, fileDataInput, sessionId, stream = false) {
|
|
216
|
+
this.ensureStarted();
|
|
217
|
+
try {
|
|
218
|
+
const targetSessionId = sessionId || this.currentDefaultSessionId;
|
|
219
|
+
const llmConfig = this.stateManager.getLLMConfig(targetSessionId);
|
|
220
|
+
const validation = (0, import_validation.validateInputForLLM)(
|
|
221
|
+
{
|
|
222
|
+
text: textInput,
|
|
223
|
+
...imageDataInput && { imageData: imageDataInput },
|
|
224
|
+
...fileDataInput && { fileData: fileDataInput }
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
provider: llmConfig.provider,
|
|
228
|
+
model: llmConfig.model
|
|
229
|
+
}
|
|
230
|
+
);
|
|
231
|
+
(0, import_result_bridge.ensureOk)(validation);
|
|
232
|
+
const existingSession = await this.sessionManager.getSession(targetSessionId);
|
|
233
|
+
const session = existingSession || await this.sessionManager.createSession(targetSessionId);
|
|
234
|
+
import_logger.logger.debug(
|
|
235
|
+
`DextoAgent.run: sessionId=${targetSessionId}, textLength=${textInput?.length ?? 0}, hasImage=${Boolean(
|
|
236
|
+
imageDataInput
|
|
237
|
+
)}, hasFile=${Boolean(fileDataInput)}`
|
|
238
|
+
);
|
|
239
|
+
const response = await session.run(textInput, imageDataInput, fileDataInput, stream);
|
|
240
|
+
this.sessionManager.incrementMessageCount(session.id).catch(
|
|
241
|
+
(error) => import_logger.logger.warn(
|
|
242
|
+
`Failed to increment message count: ${error instanceof Error ? error.message : String(error)}`
|
|
243
|
+
)
|
|
244
|
+
);
|
|
245
|
+
return response;
|
|
246
|
+
} catch (error) {
|
|
247
|
+
import_logger.logger.error(
|
|
248
|
+
`Error during DextoAgent.run: ${error instanceof Error ? error.message : JSON.stringify(error)}`
|
|
249
|
+
);
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Cancels the currently running turn for a session (or the default session).
|
|
255
|
+
* Safe to call even if no run is in progress.
|
|
256
|
+
* @param sessionId Optional session id; defaults to current default session
|
|
257
|
+
* @returns true if a run was in progress and was signaled to abort; false otherwise
|
|
258
|
+
*/
|
|
259
|
+
async cancel(sessionId) {
|
|
260
|
+
this.ensureStarted();
|
|
261
|
+
const targetSessionId = sessionId || this.currentDefaultSessionId;
|
|
262
|
+
if (!sessionId && this.defaultSession && this.defaultSession.id === targetSessionId) {
|
|
263
|
+
return this.defaultSession.cancel();
|
|
264
|
+
}
|
|
265
|
+
const existing = await this.sessionManager.getSession(targetSessionId, false);
|
|
266
|
+
if (existing) {
|
|
267
|
+
return existing.cancel();
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
// ============= SESSION MANAGEMENT =============
|
|
272
|
+
/**
|
|
273
|
+
* Creates a new chat session or returns an existing one.
|
|
274
|
+
* @param sessionId Optional session ID. If not provided, a UUID will be generated.
|
|
275
|
+
* @returns The created or existing ChatSession
|
|
276
|
+
*/
|
|
277
|
+
async createSession(sessionId) {
|
|
278
|
+
this.ensureStarted();
|
|
279
|
+
return await this.sessionManager.createSession(sessionId);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Retrieves an existing session by ID.
|
|
283
|
+
* @param sessionId The session ID to retrieve
|
|
284
|
+
* @returns The ChatSession if found, undefined otherwise
|
|
285
|
+
*/
|
|
286
|
+
async getSession(sessionId) {
|
|
287
|
+
this.ensureStarted();
|
|
288
|
+
return await this.sessionManager.getSession(sessionId);
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Lists all active session IDs.
|
|
292
|
+
* @returns Array of session IDs
|
|
293
|
+
*/
|
|
294
|
+
async listSessions() {
|
|
295
|
+
this.ensureStarted();
|
|
296
|
+
return await this.sessionManager.listSessions();
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Ends a session by removing it from memory without deleting conversation history.
|
|
300
|
+
* Used for cleanup, agent shutdown, and session expiry.
|
|
301
|
+
* @param sessionId The session ID to end
|
|
302
|
+
*/
|
|
303
|
+
async endSession(sessionId) {
|
|
304
|
+
this.ensureStarted();
|
|
305
|
+
if (sessionId === this.currentDefaultSessionId) {
|
|
306
|
+
this.defaultSession = null;
|
|
307
|
+
}
|
|
308
|
+
return this.sessionManager.endSession(sessionId);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Deletes a session and its conversation history permanently.
|
|
312
|
+
* Used for user-initiated permanent deletion.
|
|
313
|
+
* @param sessionId The session ID to delete
|
|
314
|
+
*/
|
|
315
|
+
async deleteSession(sessionId) {
|
|
316
|
+
this.ensureStarted();
|
|
317
|
+
if (sessionId === this.currentDefaultSessionId) {
|
|
318
|
+
this.defaultSession = null;
|
|
319
|
+
}
|
|
320
|
+
return this.sessionManager.deleteSession(sessionId);
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Gets metadata for a specific session.
|
|
324
|
+
* @param sessionId The session ID
|
|
325
|
+
* @returns The session metadata if found, undefined otherwise
|
|
326
|
+
*/
|
|
327
|
+
async getSessionMetadata(sessionId) {
|
|
328
|
+
this.ensureStarted();
|
|
329
|
+
return await this.sessionManager.getSessionMetadata(sessionId);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Gets the conversation history for a specific session.
|
|
333
|
+
* @param sessionId The session ID
|
|
334
|
+
* @returns Promise that resolves to the session's conversation history
|
|
335
|
+
* @throws Error if session doesn't exist
|
|
336
|
+
*/
|
|
337
|
+
async getSessionHistory(sessionId) {
|
|
338
|
+
this.ensureStarted();
|
|
339
|
+
const session = await this.sessionManager.getSession(sessionId);
|
|
340
|
+
if (!session) {
|
|
341
|
+
throw import_session.SessionError.notFound(sessionId);
|
|
342
|
+
}
|
|
343
|
+
return await session.getHistory();
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Search for messages across all sessions or within a specific session
|
|
347
|
+
*
|
|
348
|
+
* @param query The search query string
|
|
349
|
+
* @param options Search options including session filter, role filter, and pagination
|
|
350
|
+
* @returns Promise that resolves to search results
|
|
351
|
+
*/
|
|
352
|
+
async searchMessages(query, options = {}) {
|
|
353
|
+
this.ensureStarted();
|
|
354
|
+
return await this.searchService.searchMessages(query, options);
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Search for sessions that contain the specified query
|
|
358
|
+
*
|
|
359
|
+
* @param query The search query string
|
|
360
|
+
* @returns Promise that resolves to session search results
|
|
361
|
+
*/
|
|
362
|
+
async searchSessions(query) {
|
|
363
|
+
this.ensureStarted();
|
|
364
|
+
return await this.searchService.searchSessions(query);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Loads a session as the new "default" session for this agent.
|
|
368
|
+
* All subsequent operations that don't specify a session ID will use this session.
|
|
369
|
+
* This provides a clean "current working session" pattern for API users.
|
|
370
|
+
*
|
|
371
|
+
* @param sessionId The session ID to load as default, or null to reset to original default
|
|
372
|
+
* @throws Error if session doesn't exist
|
|
373
|
+
*
|
|
374
|
+
* @example
|
|
375
|
+
* ```typescript
|
|
376
|
+
* // Load a specific session as default
|
|
377
|
+
* await agent.loadSessionAsDefault('project-alpha');
|
|
378
|
+
* await agent.run("What's the status?"); // Uses project-alpha session
|
|
379
|
+
*
|
|
380
|
+
* // Reset to original default
|
|
381
|
+
* await agent.loadSessionAsDefault(null);
|
|
382
|
+
* await agent.run("Hello"); // Uses 'default' session
|
|
383
|
+
* ```
|
|
384
|
+
*/
|
|
385
|
+
async loadSessionAsDefault(sessionId = null) {
|
|
386
|
+
this.ensureStarted();
|
|
387
|
+
if (sessionId === null) {
|
|
388
|
+
this.currentDefaultSessionId = "default";
|
|
389
|
+
this.defaultSession = null;
|
|
390
|
+
import_logger.logger.debug("Agent default session reset to original default");
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
const session = await this.sessionManager.getSession(sessionId);
|
|
394
|
+
if (!session) {
|
|
395
|
+
throw import_session.SessionError.notFound(sessionId);
|
|
396
|
+
}
|
|
397
|
+
this.currentDefaultSessionId = sessionId;
|
|
398
|
+
this.defaultSession = null;
|
|
399
|
+
import_logger.logger.info(`Agent default session changed to: ${sessionId}`);
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Gets the currently loaded default session ID.
|
|
403
|
+
* This reflects the session loaded via loadSession().
|
|
404
|
+
*
|
|
405
|
+
* @returns The current default session ID
|
|
406
|
+
*/
|
|
407
|
+
getCurrentSessionId() {
|
|
408
|
+
this.ensureStarted();
|
|
409
|
+
return this.currentDefaultSessionId;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Gets the currently loaded default session.
|
|
413
|
+
* This respects the session loaded via loadSession().
|
|
414
|
+
*
|
|
415
|
+
* @returns The current default ChatSession
|
|
416
|
+
*/
|
|
417
|
+
async getDefaultSession() {
|
|
418
|
+
this.ensureStarted();
|
|
419
|
+
if (!this.defaultSession || this.defaultSession.id !== this.currentDefaultSessionId) {
|
|
420
|
+
this.defaultSession = await this.sessionManager.createSession(
|
|
421
|
+
this.currentDefaultSessionId
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
return this.defaultSession;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Resets the conversation history for a specific session or the default session.
|
|
428
|
+
* Keeps the session alive but the conversation history is cleared.
|
|
429
|
+
* @param sessionId Optional session ID. If not provided, resets the currently loaded default session.
|
|
430
|
+
*/
|
|
431
|
+
async resetConversation(sessionId) {
|
|
432
|
+
this.ensureStarted();
|
|
433
|
+
try {
|
|
434
|
+
const targetSessionId = sessionId || this.currentDefaultSessionId;
|
|
435
|
+
if (!sessionId) {
|
|
436
|
+
if (!this.defaultSession || this.defaultSession.id !== this.currentDefaultSessionId) {
|
|
437
|
+
this.defaultSession = await this.sessionManager.createSession(
|
|
438
|
+
this.currentDefaultSessionId
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
await this.sessionManager.resetSession(targetSessionId);
|
|
443
|
+
import_logger.logger.info(`DextoAgent conversation reset for session: ${targetSessionId}`);
|
|
444
|
+
this.agentEventBus.emit("dexto:conversationReset", {
|
|
445
|
+
sessionId: targetSessionId
|
|
446
|
+
});
|
|
447
|
+
} catch (error) {
|
|
448
|
+
import_logger.logger.error(
|
|
449
|
+
`Error during DextoAgent.resetConversation: ${error instanceof Error ? error.message : String(error)}`
|
|
450
|
+
);
|
|
451
|
+
throw error;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// ============= LLM MANAGEMENT =============
|
|
455
|
+
/**
|
|
456
|
+
* Gets the current LLM configuration with all defaults applied.
|
|
457
|
+
* @returns Current LLM configuration
|
|
458
|
+
*/
|
|
459
|
+
getCurrentLLMConfig() {
|
|
460
|
+
this.ensureStarted();
|
|
461
|
+
return structuredClone(this.stateManager.getLLMConfig());
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Switches the LLM service while preserving conversation history.
|
|
465
|
+
* This is a comprehensive method that handles ALL validation, configuration building, and switching internally.
|
|
466
|
+
*
|
|
467
|
+
* Design:
|
|
468
|
+
* - Input: Partial<LLMConfig> (allows optional fields like maxIterations?, router?)
|
|
469
|
+
* - Output: LLMConfig (user-friendly type with all defaults applied)
|
|
470
|
+
*
|
|
471
|
+
* Key features:
|
|
472
|
+
* - Accepts partial LLM configuration object
|
|
473
|
+
* - Extracts and validates parameters internally
|
|
474
|
+
* - Infers provider from model if not provided
|
|
475
|
+
* - Automatically resolves API keys from environment variables
|
|
476
|
+
* - Uses LLMConfigSchema for comprehensive validation
|
|
477
|
+
* - Prevents inconsistent partial updates
|
|
478
|
+
* - Smart defaults for missing configuration values
|
|
479
|
+
*
|
|
480
|
+
* @param llmUpdates Partial LLM configuration object containing the updates to apply
|
|
481
|
+
* @param sessionId Session ID to switch LLM for. If not provided, switches for default session. Use '*' for all sessions
|
|
482
|
+
* @returns Promise that resolves with the validated LLM configuration
|
|
483
|
+
* @throws DextoLLMError if validation fails or switching fails
|
|
484
|
+
*
|
|
485
|
+
* @example
|
|
486
|
+
* ```typescript
|
|
487
|
+
* // Switch to a different model (provider will be inferred, API key auto-resolved)
|
|
488
|
+
* await agent.switchLLM({ model: 'gpt-4o' });
|
|
489
|
+
*
|
|
490
|
+
* // Switch to a different provider with explicit API key
|
|
491
|
+
* await agent.switchLLM({ provider: 'anthropic', model: 'claude-4-sonnet-20250514', apiKey: 'sk-ant-...' });
|
|
492
|
+
*
|
|
493
|
+
* // Switch with router and session options
|
|
494
|
+
* await agent.switchLLM({ provider: 'anthropic', model: 'claude-4-sonnet-20250514', router: 'in-built' }, 'user-123');
|
|
495
|
+
*
|
|
496
|
+
* // Switch for all sessions
|
|
497
|
+
* await agent.switchLLM({ model: 'gpt-4o' }, '*');
|
|
498
|
+
* ```
|
|
499
|
+
*/
|
|
500
|
+
async switchLLM(llmUpdates, sessionId) {
|
|
501
|
+
this.ensureStarted();
|
|
502
|
+
import_logger.logger.debug(`DextoAgent.switchLLM: llmUpdates: ${(0, import_safe_stringify.safeStringify)(llmUpdates)}`);
|
|
503
|
+
const parseResult = import_schemas.LLMUpdatesSchema.safeParse(llmUpdates);
|
|
504
|
+
if (!parseResult.success) {
|
|
505
|
+
const validation = (0, import_result.fail)((0, import_result.zodToIssues)(parseResult.error, "error"));
|
|
506
|
+
(0, import_result_bridge.ensureOk)(validation);
|
|
507
|
+
throw new Error("Unreachable");
|
|
508
|
+
}
|
|
509
|
+
const validatedUpdates = parseResult.data;
|
|
510
|
+
const currentLLMConfig = sessionId ? this.stateManager.getRuntimeConfig(sessionId).llm : this.stateManager.getRuntimeConfig().llm;
|
|
511
|
+
const result = (0, import_resolver.resolveAndValidateLLMConfig)(currentLLMConfig, validatedUpdates);
|
|
512
|
+
const validatedConfig = (0, import_result_bridge.ensureOk)(result);
|
|
513
|
+
await this.performLLMSwitch(validatedConfig, sessionId);
|
|
514
|
+
import_logger.logger.info(`DextoAgent.switchLLM: LLM switched to: ${(0, import_safe_stringify.safeStringify)(validatedConfig)}`);
|
|
515
|
+
const warnings = result.issues.filter((issue) => issue.severity === "warning");
|
|
516
|
+
if (warnings.length > 0) {
|
|
517
|
+
import_logger.logger.warn(
|
|
518
|
+
`LLM switch completed with warnings: ${warnings.map((w) => w.message).join(", ")}`
|
|
519
|
+
);
|
|
520
|
+
}
|
|
521
|
+
return validatedConfig;
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Performs the actual LLM switch with a validated configuration.
|
|
525
|
+
* This is a helper method that handles state management and session switching.
|
|
526
|
+
*
|
|
527
|
+
* @param validatedConfig - The validated LLM configuration to apply
|
|
528
|
+
* @param sessionScope - Session ID, '*' for all sessions, or undefined for default session
|
|
529
|
+
*/
|
|
530
|
+
async performLLMSwitch(validatedConfig, sessionScope) {
|
|
531
|
+
this.stateManager.updateLLM(validatedConfig, sessionScope);
|
|
532
|
+
if (sessionScope === "*") {
|
|
533
|
+
await this.sessionManager.switchLLMForAllSessions(validatedConfig);
|
|
534
|
+
} else if (sessionScope) {
|
|
535
|
+
const session = await this.sessionManager.getSession(sessionScope);
|
|
536
|
+
if (!session) {
|
|
537
|
+
throw import_session.SessionError.notFound(sessionScope);
|
|
538
|
+
}
|
|
539
|
+
await this.sessionManager.switchLLMForSpecificSession(validatedConfig, sessionScope);
|
|
540
|
+
} else {
|
|
541
|
+
await this.sessionManager.switchLLMForDefaultSession(validatedConfig);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
/**
|
|
545
|
+
* Gets all supported LLM providers.
|
|
546
|
+
* Returns a strongly-typed array of valid provider names that can be used with the agent.
|
|
547
|
+
*
|
|
548
|
+
* @returns Array of supported provider names
|
|
549
|
+
*
|
|
550
|
+
* @example
|
|
551
|
+
* ```typescript
|
|
552
|
+
* const providers = agent.getSupportedProviders();
|
|
553
|
+
* console.log(providers); // ['openai', 'anthropic', 'google', 'groq']
|
|
554
|
+
* ```
|
|
555
|
+
*/
|
|
556
|
+
getSupportedProviders() {
|
|
557
|
+
return (0, import_registry.getSupportedProviders)();
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Gets all supported models grouped by provider with detailed information.
|
|
561
|
+
* Returns a strongly-typed object mapping each provider to its available models,
|
|
562
|
+
* including model metadata such as token limits and default status.
|
|
563
|
+
*
|
|
564
|
+
* @returns Object mapping provider names to their model information
|
|
565
|
+
*
|
|
566
|
+
* @example
|
|
567
|
+
* ```typescript
|
|
568
|
+
* const models = agent.getSupportedModels();
|
|
569
|
+
* console.log(models.openai); // Array of OpenAI models with metadata
|
|
570
|
+
* console.log(models.anthropic[0].maxInputTokens); // Token limit for first Anthropic model
|
|
571
|
+
*
|
|
572
|
+
* // Check if a model is the default for its provider
|
|
573
|
+
* const hasDefault = models.google.some(model => model.isDefault);
|
|
574
|
+
* ```
|
|
575
|
+
*/
|
|
576
|
+
getSupportedModels() {
|
|
577
|
+
const result = {};
|
|
578
|
+
const providers = (0, import_registry.getSupportedProviders)();
|
|
579
|
+
for (const provider of providers) {
|
|
580
|
+
const defaultModel = (0, import_registry.getDefaultModelForProvider)(provider);
|
|
581
|
+
const providerInfo = import_registry.LLM_REGISTRY[provider];
|
|
582
|
+
result[provider] = providerInfo.models.map((model) => ({
|
|
583
|
+
...model,
|
|
584
|
+
isDefault: model.name === defaultModel
|
|
585
|
+
}));
|
|
586
|
+
}
|
|
587
|
+
return result;
|
|
588
|
+
}
|
|
589
|
+
/**
|
|
590
|
+
* Gets supported models for a specific provider.
|
|
591
|
+
* Returns model information including metadata for the specified provider only.
|
|
592
|
+
*
|
|
593
|
+
* @param provider The provider to get models for
|
|
594
|
+
* @returns Array of model information for the specified provider
|
|
595
|
+
* @throws Error if provider is not supported
|
|
596
|
+
*
|
|
597
|
+
* @example
|
|
598
|
+
* ```typescript
|
|
599
|
+
* try {
|
|
600
|
+
* const openaiModels = agent.getSupportedModelsForProvider('openai');
|
|
601
|
+
* const defaultModel = openaiModels.find(model => model.isDefault);
|
|
602
|
+
* console.log(`Default OpenAI model: ${defaultModel?.name}`);
|
|
603
|
+
* } catch (error) {
|
|
604
|
+
* console.error('Unsupported provider');
|
|
605
|
+
* }
|
|
606
|
+
* ```
|
|
607
|
+
*/
|
|
608
|
+
getSupportedModelsForProvider(provider) {
|
|
609
|
+
const defaultModel = (0, import_registry.getDefaultModelForProvider)(provider);
|
|
610
|
+
const providerInfo = import_registry.LLM_REGISTRY[provider];
|
|
611
|
+
return providerInfo.models.map((model) => ({
|
|
612
|
+
...model,
|
|
613
|
+
isDefault: model.name === defaultModel
|
|
614
|
+
}));
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Infers the provider from a model name.
|
|
618
|
+
* Searches through all supported providers to find which one supports the given model.
|
|
619
|
+
*
|
|
620
|
+
* @param modelName The model name to search for
|
|
621
|
+
* @returns The provider name if found, null if the model is not supported
|
|
622
|
+
*
|
|
623
|
+
* @example
|
|
624
|
+
* ```typescript
|
|
625
|
+
* const provider = agent.inferProviderFromModel('gpt-4o');
|
|
626
|
+
* console.log(provider); // 'openai'
|
|
627
|
+
*
|
|
628
|
+
* const provider2 = agent.inferProviderFromModel('claude-4-sonnet-20250514');
|
|
629
|
+
* console.log(provider2); // 'anthropic'
|
|
630
|
+
*
|
|
631
|
+
* const provider3 = agent.inferProviderFromModel('unknown-model');
|
|
632
|
+
* console.log(provider3); // null
|
|
633
|
+
* ```
|
|
634
|
+
*/
|
|
635
|
+
inferProviderFromModel(modelName) {
|
|
636
|
+
try {
|
|
637
|
+
return (0, import_registry.getProviderFromModel)(modelName);
|
|
638
|
+
} catch {
|
|
639
|
+
return null;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
// ============= MCP SERVER MANAGEMENT =============
|
|
643
|
+
/**
|
|
644
|
+
* Connects a new MCP server and adds it to the runtime configuration.
|
|
645
|
+
* This method handles validation, state management, and establishing the connection.
|
|
646
|
+
*
|
|
647
|
+
* @param name The name of the server to connect.
|
|
648
|
+
* @param config The configuration object for the server.
|
|
649
|
+
* @throws DextoError if validation fails or connection fails
|
|
650
|
+
*/
|
|
651
|
+
async connectMcpServer(name, config) {
|
|
652
|
+
this.ensureStarted();
|
|
653
|
+
const existingServerNames = Object.keys(this.stateManager.getRuntimeConfig().mcpServers);
|
|
654
|
+
const validation = (0, import_resolver2.resolveAndValidateMcpServerConfig)(name, config, existingServerNames);
|
|
655
|
+
const validatedConfig = (0, import_result_bridge.ensureOk)(validation);
|
|
656
|
+
this.stateManager.addMcpServer(name, validatedConfig);
|
|
657
|
+
try {
|
|
658
|
+
await this.mcpManager.connectServer(name, validatedConfig);
|
|
659
|
+
this.agentEventBus.emit("dexto:mcpServerConnected", {
|
|
660
|
+
name,
|
|
661
|
+
success: true
|
|
662
|
+
});
|
|
663
|
+
this.agentEventBus.emit("dexto:availableToolsUpdated", {
|
|
664
|
+
tools: Object.keys(await this.toolManager.getAllTools()),
|
|
665
|
+
source: "mcp"
|
|
666
|
+
});
|
|
667
|
+
import_logger.logger.info(`DextoAgent: Successfully added and connected to MCP server '${name}'.`);
|
|
668
|
+
const warnings = validation.issues.filter((i) => i.severity === "warning");
|
|
669
|
+
if (warnings.length > 0) {
|
|
670
|
+
import_logger.logger.warn(
|
|
671
|
+
`MCP server connected with warnings: ${warnings.map((w) => w.message).join(", ")}`
|
|
672
|
+
);
|
|
673
|
+
}
|
|
674
|
+
} catch (error) {
|
|
675
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
676
|
+
import_logger.logger.error(`DextoAgent: Failed to connect to MCP server '${name}': ${errorMessage}`);
|
|
677
|
+
this.stateManager.removeMcpServer(name);
|
|
678
|
+
this.agentEventBus.emit("dexto:mcpServerConnected", {
|
|
679
|
+
name,
|
|
680
|
+
success: false,
|
|
681
|
+
error: errorMessage
|
|
682
|
+
});
|
|
683
|
+
throw import_errors2.MCPError.connectionFailed(name, errorMessage);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* Removes and disconnects an MCP server.
|
|
688
|
+
* @param name The name of the server to remove.
|
|
689
|
+
*/
|
|
690
|
+
async removeMcpServer(name) {
|
|
691
|
+
this.ensureStarted();
|
|
692
|
+
await this.mcpManager.removeClient(name);
|
|
693
|
+
this.stateManager.removeMcpServer(name);
|
|
694
|
+
}
|
|
695
|
+
/**
|
|
696
|
+
* Executes a tool from any source (MCP servers, custom tools, or internal tools).
|
|
697
|
+
* This is the unified interface for tool execution that can handle all tool types.
|
|
698
|
+
* @param toolName The name of the tool to execute
|
|
699
|
+
* @param args The arguments to pass to the tool
|
|
700
|
+
* @returns The result of the tool execution
|
|
701
|
+
*/
|
|
702
|
+
async executeTool(toolName, args) {
|
|
703
|
+
this.ensureStarted();
|
|
704
|
+
return await this.toolManager.executeTool(toolName, args);
|
|
705
|
+
}
|
|
706
|
+
/**
|
|
707
|
+
* Gets all available tools from all connected MCP servers.
|
|
708
|
+
* Useful for users to discover what tools are available.
|
|
709
|
+
* @returns Promise resolving to a map of tool names to tool definitions
|
|
710
|
+
*/
|
|
711
|
+
async getAllMcpTools() {
|
|
712
|
+
this.ensureStarted();
|
|
713
|
+
return await this.mcpManager.getAllTools();
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Gets all available tools from all sources (MCP servers and custom tools).
|
|
717
|
+
* This is the unified interface for tool discovery that includes both MCP and custom tools.
|
|
718
|
+
* @returns Promise resolving to a map of tool names to tool definitions
|
|
719
|
+
*/
|
|
720
|
+
async getAllTools() {
|
|
721
|
+
this.ensureStarted();
|
|
722
|
+
return await this.toolManager.getAllTools();
|
|
723
|
+
}
|
|
724
|
+
/**
|
|
725
|
+
* Gets all connected MCP clients.
|
|
726
|
+
* Used by the API layer to inspect client status.
|
|
727
|
+
* @returns Map of client names to client instances
|
|
728
|
+
*/
|
|
729
|
+
getMcpClients() {
|
|
730
|
+
this.ensureStarted();
|
|
731
|
+
return this.mcpManager.getClients();
|
|
732
|
+
}
|
|
733
|
+
/**
|
|
734
|
+
* Gets all failed MCP connections.
|
|
735
|
+
* Used by the API layer to report connection errors.
|
|
736
|
+
* @returns Record of failed connection names to error messages
|
|
737
|
+
*/
|
|
738
|
+
getMcpFailedConnections() {
|
|
739
|
+
this.ensureStarted();
|
|
740
|
+
return this.mcpManager.getFailedConnections();
|
|
741
|
+
}
|
|
742
|
+
// ============= PROMPT MANAGEMENT =============
|
|
743
|
+
/**
|
|
744
|
+
* Gets the current system prompt with all dynamic content resolved.
|
|
745
|
+
* This method builds the complete prompt by invoking all configured prompt contributors
|
|
746
|
+
* (static content, dynamic placeholders, MCP resources, etc.) and returns the final
|
|
747
|
+
* prompt string that will be sent to the LLM.
|
|
748
|
+
*
|
|
749
|
+
* Useful for debugging prompt issues, inspecting what context the AI receives,
|
|
750
|
+
* and understanding how dynamic content is being incorporated.
|
|
751
|
+
*
|
|
752
|
+
* @returns Promise resolving to the complete system prompt string
|
|
753
|
+
*
|
|
754
|
+
* @example
|
|
755
|
+
* ```typescript
|
|
756
|
+
* // Get the current system prompt for inspection
|
|
757
|
+
* const prompt = await agent.getSystemPrompt();
|
|
758
|
+
* console.log('Current system prompt:', prompt);
|
|
759
|
+
*
|
|
760
|
+
* // Useful for debugging prompt-related issues
|
|
761
|
+
* if (response.quality === 'poor') {
|
|
762
|
+
* const prompt = await agent.getSystemPrompt();
|
|
763
|
+
* console.log('Check if prompt includes expected context:', prompt);
|
|
764
|
+
* }
|
|
765
|
+
* ```
|
|
766
|
+
*/
|
|
767
|
+
async getSystemPrompt() {
|
|
768
|
+
this.ensureStarted();
|
|
769
|
+
const context = {
|
|
770
|
+
mcpManager: this.mcpManager
|
|
771
|
+
};
|
|
772
|
+
return await this.promptManager.build(context);
|
|
773
|
+
}
|
|
774
|
+
// ============= CONFIGURATION ACCESS =============
|
|
775
|
+
/**
|
|
776
|
+
* Gets the effective configuration for a session or the default configuration.
|
|
777
|
+
* @param sessionId Optional session ID. If not provided, returns default config.
|
|
778
|
+
* @returns The effective configuration object
|
|
779
|
+
*/
|
|
780
|
+
getEffectiveConfig(sessionId) {
|
|
781
|
+
this.ensureStarted();
|
|
782
|
+
return sessionId ? this.stateManager.getRuntimeConfig(sessionId) : this.stateManager.getRuntimeConfig();
|
|
783
|
+
}
|
|
784
|
+
// Future methods could encapsulate more complex agent behaviors:
|
|
785
|
+
// - Multi-step task execution with progress tracking
|
|
786
|
+
// - Memory and context management across sessions
|
|
787
|
+
// - Tool chaining and workflow automation
|
|
788
|
+
// - Agent collaboration and delegation
|
|
789
|
+
}
|
|
790
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
791
|
+
0 && (module.exports = {
|
|
792
|
+
DextoAgent
|
|
793
|
+
});
|