@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,219 @@
|
|
|
1
|
+
import { ChatSession } from './chat-session.js';
|
|
2
|
+
import { PromptManager } from '../systemPrompt/manager.js';
|
|
3
|
+
import { ToolManager } from '../tools/tool-manager.js';
|
|
4
|
+
import { AgentEventBus } from '../events/index.js';
|
|
5
|
+
import { AgentStateManager } from '../agent/state-manager.js';
|
|
6
|
+
import { ValidatedLLMConfig } from '../llm/schemas.js';
|
|
7
|
+
import { StorageBackends } from '../storage/backend/types.js';
|
|
8
|
+
import '../context/manager.js';
|
|
9
|
+
import '../llm/formatters/types.js';
|
|
10
|
+
import '../context/types.js';
|
|
11
|
+
import '../llm/types.js';
|
|
12
|
+
import '../llm/tokenizer/types.js';
|
|
13
|
+
import '../context/compression/types.js';
|
|
14
|
+
import '../systemPrompt/types.js';
|
|
15
|
+
import '../mcp/manager.js';
|
|
16
|
+
import '../mcp/schemas.js';
|
|
17
|
+
import 'zod';
|
|
18
|
+
import '../mcp/types.js';
|
|
19
|
+
import '@modelcontextprotocol/sdk/client/index.js';
|
|
20
|
+
import '../tools/types.js';
|
|
21
|
+
import 'json-schema';
|
|
22
|
+
import '@modelcontextprotocol/sdk/types.js';
|
|
23
|
+
import './history/types.js';
|
|
24
|
+
import '../llm/services/types.js';
|
|
25
|
+
import 'ai';
|
|
26
|
+
import '../systemPrompt/schemas.js';
|
|
27
|
+
import '../tools/internal-tools/registry.js';
|
|
28
|
+
import '../search/search-service.js';
|
|
29
|
+
import '../storage/backend/database-backend.js';
|
|
30
|
+
import '../search/types.js';
|
|
31
|
+
import '../tools/schemas.js';
|
|
32
|
+
import '../tools/confirmation/types.js';
|
|
33
|
+
import '../tools/confirmation/allowed-tools-provider/types.js';
|
|
34
|
+
import 'events';
|
|
35
|
+
import '../agent/schemas.js';
|
|
36
|
+
import '../storage/backend/cache-backend.js';
|
|
37
|
+
import '../storage/schemas.js';
|
|
38
|
+
|
|
39
|
+
interface SessionMetadata {
|
|
40
|
+
createdAt: number;
|
|
41
|
+
lastActivity: number;
|
|
42
|
+
messageCount: number;
|
|
43
|
+
}
|
|
44
|
+
interface SessionManagerConfig {
|
|
45
|
+
maxSessions?: number;
|
|
46
|
+
sessionTTL?: number;
|
|
47
|
+
}
|
|
48
|
+
interface SessionData {
|
|
49
|
+
id: string;
|
|
50
|
+
userId?: string;
|
|
51
|
+
createdAt: number;
|
|
52
|
+
lastActivity: number;
|
|
53
|
+
messageCount: number;
|
|
54
|
+
metadata?: Record<string, any>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Manages multiple chat sessions within a Dexto agent.
|
|
58
|
+
*
|
|
59
|
+
* The SessionManager is responsible for:
|
|
60
|
+
* - Creating and managing multiple isolated chat sessions
|
|
61
|
+
* - Enforcing session limits and TTL policies
|
|
62
|
+
* - Cleaning up expired sessions
|
|
63
|
+
* - Providing session lifecycle management
|
|
64
|
+
* - Persisting session data using the simplified storage backends
|
|
65
|
+
*/
|
|
66
|
+
declare class SessionManager {
|
|
67
|
+
private services;
|
|
68
|
+
private sessions;
|
|
69
|
+
private readonly maxSessions;
|
|
70
|
+
private readonly sessionTTL;
|
|
71
|
+
private initialized;
|
|
72
|
+
private cleanupInterval?;
|
|
73
|
+
private initializationPromise;
|
|
74
|
+
private readonly pendingCreations;
|
|
75
|
+
constructor(services: {
|
|
76
|
+
stateManager: AgentStateManager;
|
|
77
|
+
promptManager: PromptManager;
|
|
78
|
+
toolManager: ToolManager;
|
|
79
|
+
agentEventBus: AgentEventBus;
|
|
80
|
+
storage: StorageBackends;
|
|
81
|
+
}, config?: SessionManagerConfig);
|
|
82
|
+
/**
|
|
83
|
+
* Initialize the SessionManager with persistent storage.
|
|
84
|
+
* This must be called before using any session operations.
|
|
85
|
+
*/
|
|
86
|
+
init(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Restore sessions from persistent storage on startup.
|
|
89
|
+
* This allows sessions to survive application restarts.
|
|
90
|
+
*/
|
|
91
|
+
private restoreSessionsFromStorage;
|
|
92
|
+
/**
|
|
93
|
+
* Ensures the SessionManager is initialized before operations.
|
|
94
|
+
*/
|
|
95
|
+
private ensureInitialized;
|
|
96
|
+
/**
|
|
97
|
+
* Creates a new chat session or returns an existing one.
|
|
98
|
+
*
|
|
99
|
+
* @param sessionId Optional session ID. If not provided, a UUID will be generated.
|
|
100
|
+
* @returns The created or existing ChatSession
|
|
101
|
+
* @throws Error if maximum sessions limit is reached
|
|
102
|
+
*/
|
|
103
|
+
createSession(sessionId?: string): Promise<ChatSession>;
|
|
104
|
+
/**
|
|
105
|
+
* Internal method that handles the actual session creation logic.
|
|
106
|
+
* This method implements atomic session creation to prevent race conditions.
|
|
107
|
+
*/
|
|
108
|
+
private createSessionInternal;
|
|
109
|
+
/**
|
|
110
|
+
* Gets or creates the default session.
|
|
111
|
+
* This is used for backward compatibility with single-session operations.
|
|
112
|
+
*
|
|
113
|
+
* @returns The default ChatSession (creates one if it doesn't exist)
|
|
114
|
+
*/
|
|
115
|
+
getDefaultSession(): Promise<ChatSession>;
|
|
116
|
+
/**
|
|
117
|
+
* Retrieves an existing session by ID.
|
|
118
|
+
*
|
|
119
|
+
* @param sessionId The session ID to retrieve
|
|
120
|
+
* @param restoreFromStorage Whether to restore from storage if not in memory (default: true)
|
|
121
|
+
* @returns The ChatSession if found, undefined otherwise
|
|
122
|
+
*/
|
|
123
|
+
getSession(sessionId: string, restoreFromStorage?: boolean): Promise<ChatSession | undefined>;
|
|
124
|
+
/**
|
|
125
|
+
* Ends a session by removing it from memory without deleting conversation history.
|
|
126
|
+
* Used for cleanup, agent shutdown, and session expiry.
|
|
127
|
+
*
|
|
128
|
+
* @param sessionId The session ID to end
|
|
129
|
+
*/
|
|
130
|
+
endSession(sessionId: string): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Deletes a session and its conversation history, removing everything from memory and storage.
|
|
133
|
+
* Used for user-initiated permanent deletion.
|
|
134
|
+
*
|
|
135
|
+
* @param sessionId The session ID to delete
|
|
136
|
+
*/
|
|
137
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Resets the conversation history for a session while keeping the session alive.
|
|
140
|
+
*
|
|
141
|
+
* @param sessionId The session ID to reset
|
|
142
|
+
* @throws Error if session doesn't exist
|
|
143
|
+
*/
|
|
144
|
+
resetSession(sessionId: string): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Lists all active session IDs.
|
|
147
|
+
*
|
|
148
|
+
* @returns Array of active session IDs
|
|
149
|
+
*/
|
|
150
|
+
listSessions(): Promise<string[]>;
|
|
151
|
+
/**
|
|
152
|
+
* Gets metadata for a specific session.
|
|
153
|
+
*
|
|
154
|
+
* @param sessionId The session ID
|
|
155
|
+
* @returns Session metadata if found, undefined otherwise
|
|
156
|
+
*/
|
|
157
|
+
getSessionMetadata(sessionId: string): Promise<SessionMetadata | undefined>;
|
|
158
|
+
/**
|
|
159
|
+
* Get the global session manager configuration.
|
|
160
|
+
*/
|
|
161
|
+
getConfig(): SessionManagerConfig;
|
|
162
|
+
/**
|
|
163
|
+
* Updates the last activity timestamp for a session.
|
|
164
|
+
*/
|
|
165
|
+
private updateSessionActivity;
|
|
166
|
+
/**
|
|
167
|
+
* Increments the message count for a session.
|
|
168
|
+
*/
|
|
169
|
+
incrementMessageCount(sessionId: string): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Cleans up expired sessions from memory only, preserving chat history in storage.
|
|
172
|
+
* This allows inactive sessions to be garbage collected while keeping conversations restorable.
|
|
173
|
+
*/
|
|
174
|
+
private cleanupExpiredSessions;
|
|
175
|
+
/**
|
|
176
|
+
* Switch LLM for all sessions.
|
|
177
|
+
* @param newLLMConfig The new LLM configuration to apply
|
|
178
|
+
* @returns Result object with success message and any warnings
|
|
179
|
+
*/
|
|
180
|
+
switchLLMForAllSessions(newLLMConfig: ValidatedLLMConfig): Promise<{
|
|
181
|
+
message: string;
|
|
182
|
+
warnings: string[];
|
|
183
|
+
}>;
|
|
184
|
+
/**
|
|
185
|
+
* Switch LLM for a specific session.
|
|
186
|
+
* @param newLLMConfig The new LLM configuration to apply
|
|
187
|
+
* @param sessionId The session ID to switch LLM for
|
|
188
|
+
* @returns Result object with success message and any warnings
|
|
189
|
+
*/
|
|
190
|
+
switchLLMForSpecificSession(newLLMConfig: ValidatedLLMConfig, sessionId: string): Promise<{
|
|
191
|
+
message: string;
|
|
192
|
+
warnings: string[];
|
|
193
|
+
}>;
|
|
194
|
+
/**
|
|
195
|
+
* Switch LLM for the default session.
|
|
196
|
+
* @param newLLMConfig The new LLM configuration to apply
|
|
197
|
+
* @returns Result object with success message and any warnings
|
|
198
|
+
*/
|
|
199
|
+
switchLLMForDefaultSession(newLLMConfig: ValidatedLLMConfig): Promise<{
|
|
200
|
+
message: string;
|
|
201
|
+
warnings: string[];
|
|
202
|
+
}>;
|
|
203
|
+
/**
|
|
204
|
+
* Get session statistics for monitoring and debugging.
|
|
205
|
+
*/
|
|
206
|
+
getSessionStats(): Promise<{
|
|
207
|
+
totalSessions: number;
|
|
208
|
+
inMemorySessions: number;
|
|
209
|
+
maxSessions: number;
|
|
210
|
+
sessionTTL: number;
|
|
211
|
+
}>;
|
|
212
|
+
/**
|
|
213
|
+
* Cleanup all sessions and resources.
|
|
214
|
+
* This should be called when shutting down the application.
|
|
215
|
+
*/
|
|
216
|
+
cleanup(): Promise<void>;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
export { type SessionData, SessionManager, type SessionManagerConfig, type SessionMetadata };
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { ChatSession } from "./chat-session.js";
|
|
3
|
+
import { logger } from "../logger/index.js";
|
|
4
|
+
import { SessionError } from "./errors.js";
|
|
5
|
+
class SessionManager {
|
|
6
|
+
constructor(services, config = {}) {
|
|
7
|
+
this.services = services;
|
|
8
|
+
this.maxSessions = config.maxSessions ?? 100;
|
|
9
|
+
this.sessionTTL = config.sessionTTL ?? 36e5;
|
|
10
|
+
}
|
|
11
|
+
sessions = /* @__PURE__ */ new Map();
|
|
12
|
+
maxSessions;
|
|
13
|
+
sessionTTL;
|
|
14
|
+
initialized = false;
|
|
15
|
+
cleanupInterval;
|
|
16
|
+
initializationPromise;
|
|
17
|
+
// Add a Map to track ongoing session creation operations to prevent race conditions
|
|
18
|
+
pendingCreations = /* @__PURE__ */ new Map();
|
|
19
|
+
/**
|
|
20
|
+
* Initialize the SessionManager with persistent storage.
|
|
21
|
+
* This must be called before using any session operations.
|
|
22
|
+
*/
|
|
23
|
+
async init() {
|
|
24
|
+
if (this.initialized) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
await this.restoreSessionsFromStorage();
|
|
28
|
+
const cleanupIntervalMs = Math.min(this.sessionTTL / 4, 15 * 60 * 1e3);
|
|
29
|
+
this.cleanupInterval = setInterval(
|
|
30
|
+
() => this.cleanupExpiredSessions().catch(
|
|
31
|
+
(err) => logger.error(`Periodic session cleanup failed: ${err}`)
|
|
32
|
+
),
|
|
33
|
+
cleanupIntervalMs
|
|
34
|
+
);
|
|
35
|
+
this.initialized = true;
|
|
36
|
+
logger.debug(
|
|
37
|
+
`SessionManager initialized with periodic cleanup every ${Math.round(cleanupIntervalMs / 1e3 / 60)} minutes`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Restore sessions from persistent storage on startup.
|
|
42
|
+
* This allows sessions to survive application restarts.
|
|
43
|
+
*/
|
|
44
|
+
async restoreSessionsFromStorage() {
|
|
45
|
+
try {
|
|
46
|
+
const sessionKeys = await this.services.storage.database.list("session:");
|
|
47
|
+
logger.debug(`Found ${sessionKeys.length} persisted sessions to restore`);
|
|
48
|
+
for (const sessionKey of sessionKeys) {
|
|
49
|
+
const sessionId = sessionKey.replace("session:", "");
|
|
50
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
51
|
+
if (sessionData) {
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
const lastActivity = sessionData.lastActivity;
|
|
54
|
+
if (now - lastActivity <= this.sessionTTL) {
|
|
55
|
+
logger.debug(`Session ${sessionId} restored from storage`);
|
|
56
|
+
} else {
|
|
57
|
+
await this.services.storage.database.delete(sessionKey);
|
|
58
|
+
logger.debug(`Expired session ${sessionId} cleaned up during restore`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} catch (error) {
|
|
63
|
+
logger.error(
|
|
64
|
+
`Failed to restore sessions from storage: ${error instanceof Error ? error.message : String(error)}`
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Ensures the SessionManager is initialized before operations.
|
|
70
|
+
*/
|
|
71
|
+
async ensureInitialized() {
|
|
72
|
+
if (!this.initialized) {
|
|
73
|
+
if (!this.initializationPromise) {
|
|
74
|
+
this.initializationPromise = this.init();
|
|
75
|
+
}
|
|
76
|
+
await this.initializationPromise;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Creates a new chat session or returns an existing one.
|
|
81
|
+
*
|
|
82
|
+
* @param sessionId Optional session ID. If not provided, a UUID will be generated.
|
|
83
|
+
* @returns The created or existing ChatSession
|
|
84
|
+
* @throws Error if maximum sessions limit is reached
|
|
85
|
+
*/
|
|
86
|
+
async createSession(sessionId) {
|
|
87
|
+
await this.ensureInitialized();
|
|
88
|
+
const id = sessionId ?? randomUUID();
|
|
89
|
+
if (this.pendingCreations.has(id)) {
|
|
90
|
+
return await this.pendingCreations.get(id);
|
|
91
|
+
}
|
|
92
|
+
if (this.sessions.has(id)) {
|
|
93
|
+
await this.updateSessionActivity(id);
|
|
94
|
+
return this.sessions.get(id);
|
|
95
|
+
}
|
|
96
|
+
const creationPromise = this.createSessionInternal(id);
|
|
97
|
+
this.pendingCreations.set(id, creationPromise);
|
|
98
|
+
try {
|
|
99
|
+
const session = await creationPromise;
|
|
100
|
+
return session;
|
|
101
|
+
} finally {
|
|
102
|
+
this.pendingCreations.delete(id);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Internal method that handles the actual session creation logic.
|
|
107
|
+
* This method implements atomic session creation to prevent race conditions.
|
|
108
|
+
*/
|
|
109
|
+
async createSessionInternal(id) {
|
|
110
|
+
await this.cleanupExpiredSessions();
|
|
111
|
+
const sessionKey = `session:${id}`;
|
|
112
|
+
const existingMetadata = await this.services.storage.database.get(sessionKey);
|
|
113
|
+
if (existingMetadata) {
|
|
114
|
+
await this.updateSessionActivity(id);
|
|
115
|
+
const session2 = new ChatSession(this.services, id);
|
|
116
|
+
await session2.init();
|
|
117
|
+
this.sessions.set(id, session2);
|
|
118
|
+
logger.info(`Restored session from storage: ${id}`, null, "cyan");
|
|
119
|
+
return session2;
|
|
120
|
+
}
|
|
121
|
+
const activeSessionKeys = await this.services.storage.database.list("session:");
|
|
122
|
+
if (activeSessionKeys.length >= this.maxSessions) {
|
|
123
|
+
throw SessionError.maxSessionsExceeded(activeSessionKeys.length, this.maxSessions);
|
|
124
|
+
}
|
|
125
|
+
const sessionData = {
|
|
126
|
+
id,
|
|
127
|
+
createdAt: Date.now(),
|
|
128
|
+
lastActivity: Date.now(),
|
|
129
|
+
messageCount: 0
|
|
130
|
+
};
|
|
131
|
+
try {
|
|
132
|
+
await this.services.storage.database.set(sessionKey, sessionData);
|
|
133
|
+
} catch (error) {
|
|
134
|
+
logger.error(`Failed to store session metadata for ${id}:`, error);
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
let session;
|
|
138
|
+
try {
|
|
139
|
+
session = new ChatSession(this.services, id);
|
|
140
|
+
await session.init();
|
|
141
|
+
this.sessions.set(id, session);
|
|
142
|
+
await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
143
|
+
logger.info(`Created new session: ${id}`, null, "green");
|
|
144
|
+
return session;
|
|
145
|
+
} catch (error) {
|
|
146
|
+
logger.error(
|
|
147
|
+
`Failed to initialize session ${id}: ${error instanceof Error ? error.message : String(error)}`
|
|
148
|
+
);
|
|
149
|
+
await this.services.storage.database.delete(sessionKey);
|
|
150
|
+
await this.services.storage.cache.delete(sessionKey);
|
|
151
|
+
const reason = error instanceof Error ? error.message : "unknown error";
|
|
152
|
+
throw SessionError.initializationFailed(id, reason);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Gets or creates the default session.
|
|
157
|
+
* This is used for backward compatibility with single-session operations.
|
|
158
|
+
*
|
|
159
|
+
* @returns The default ChatSession (creates one if it doesn't exist)
|
|
160
|
+
*/
|
|
161
|
+
async getDefaultSession() {
|
|
162
|
+
const defaultSessionId = "default";
|
|
163
|
+
return await this.createSession(defaultSessionId);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Retrieves an existing session by ID.
|
|
167
|
+
*
|
|
168
|
+
* @param sessionId The session ID to retrieve
|
|
169
|
+
* @param restoreFromStorage Whether to restore from storage if not in memory (default: true)
|
|
170
|
+
* @returns The ChatSession if found, undefined otherwise
|
|
171
|
+
*/
|
|
172
|
+
async getSession(sessionId, restoreFromStorage = true) {
|
|
173
|
+
await this.ensureInitialized();
|
|
174
|
+
if (this.pendingCreations.has(sessionId)) {
|
|
175
|
+
return await this.pendingCreations.get(sessionId);
|
|
176
|
+
}
|
|
177
|
+
if (this.sessions.has(sessionId)) {
|
|
178
|
+
return this.sessions.get(sessionId);
|
|
179
|
+
}
|
|
180
|
+
if (restoreFromStorage) {
|
|
181
|
+
const sessionKey = `session:${sessionId}`;
|
|
182
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
183
|
+
if (sessionData) {
|
|
184
|
+
const session = new ChatSession(this.services, sessionId);
|
|
185
|
+
await session.init();
|
|
186
|
+
this.sessions.set(sessionId, session);
|
|
187
|
+
return session;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return void 0;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Ends a session by removing it from memory without deleting conversation history.
|
|
194
|
+
* Used for cleanup, agent shutdown, and session expiry.
|
|
195
|
+
*
|
|
196
|
+
* @param sessionId The session ID to end
|
|
197
|
+
*/
|
|
198
|
+
async endSession(sessionId) {
|
|
199
|
+
await this.ensureInitialized();
|
|
200
|
+
const session = this.sessions.get(sessionId);
|
|
201
|
+
if (session) {
|
|
202
|
+
await session.cleanup();
|
|
203
|
+
this.sessions.delete(sessionId);
|
|
204
|
+
}
|
|
205
|
+
const sessionKey = `session:${sessionId}`;
|
|
206
|
+
await this.services.storage.cache.delete(sessionKey);
|
|
207
|
+
logger.debug(`Ended session (removed from memory, chat history preserved): ${sessionId}`);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Deletes a session and its conversation history, removing everything from memory and storage.
|
|
211
|
+
* Used for user-initiated permanent deletion.
|
|
212
|
+
*
|
|
213
|
+
* @param sessionId The session ID to delete
|
|
214
|
+
*/
|
|
215
|
+
async deleteSession(sessionId) {
|
|
216
|
+
await this.ensureInitialized();
|
|
217
|
+
const session = await this.getSession(sessionId);
|
|
218
|
+
if (session) {
|
|
219
|
+
await session.reset();
|
|
220
|
+
await session.cleanup();
|
|
221
|
+
this.sessions.delete(sessionId);
|
|
222
|
+
}
|
|
223
|
+
const sessionKey = `session:${sessionId}`;
|
|
224
|
+
await this.services.storage.database.delete(sessionKey);
|
|
225
|
+
await this.services.storage.cache.delete(sessionKey);
|
|
226
|
+
logger.debug(`Deleted session and conversation history: ${sessionId}`);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Resets the conversation history for a session while keeping the session alive.
|
|
230
|
+
*
|
|
231
|
+
* @param sessionId The session ID to reset
|
|
232
|
+
* @throws Error if session doesn't exist
|
|
233
|
+
*/
|
|
234
|
+
async resetSession(sessionId) {
|
|
235
|
+
await this.ensureInitialized();
|
|
236
|
+
const session = await this.getSession(sessionId);
|
|
237
|
+
if (!session) {
|
|
238
|
+
throw SessionError.notFound(sessionId);
|
|
239
|
+
}
|
|
240
|
+
await session.reset();
|
|
241
|
+
const sessionKey = `session:${sessionId}`;
|
|
242
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
243
|
+
if (sessionData) {
|
|
244
|
+
sessionData.messageCount = 0;
|
|
245
|
+
sessionData.lastActivity = Date.now();
|
|
246
|
+
await this.services.storage.database.set(sessionKey, sessionData);
|
|
247
|
+
await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
248
|
+
}
|
|
249
|
+
logger.debug(`Reset session conversation: ${sessionId}`);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Lists all active session IDs.
|
|
253
|
+
*
|
|
254
|
+
* @returns Array of active session IDs
|
|
255
|
+
*/
|
|
256
|
+
async listSessions() {
|
|
257
|
+
await this.ensureInitialized();
|
|
258
|
+
const sessionKeys = await this.services.storage.database.list("session:");
|
|
259
|
+
return sessionKeys.map((key) => key.replace("session:", ""));
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Gets metadata for a specific session.
|
|
263
|
+
*
|
|
264
|
+
* @param sessionId The session ID
|
|
265
|
+
* @returns Session metadata if found, undefined otherwise
|
|
266
|
+
*/
|
|
267
|
+
async getSessionMetadata(sessionId) {
|
|
268
|
+
await this.ensureInitialized();
|
|
269
|
+
const sessionKey = `session:${sessionId}`;
|
|
270
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
271
|
+
return sessionData ? {
|
|
272
|
+
createdAt: sessionData.createdAt,
|
|
273
|
+
lastActivity: sessionData.lastActivity,
|
|
274
|
+
messageCount: sessionData.messageCount
|
|
275
|
+
} : void 0;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get the global session manager configuration.
|
|
279
|
+
*/
|
|
280
|
+
getConfig() {
|
|
281
|
+
return {
|
|
282
|
+
maxSessions: this.maxSessions,
|
|
283
|
+
sessionTTL: this.sessionTTL
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Updates the last activity timestamp for a session.
|
|
288
|
+
*/
|
|
289
|
+
async updateSessionActivity(sessionId) {
|
|
290
|
+
const sessionKey = `session:${sessionId}`;
|
|
291
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
292
|
+
if (sessionData) {
|
|
293
|
+
sessionData.lastActivity = Date.now();
|
|
294
|
+
await this.services.storage.database.set(sessionKey, sessionData);
|
|
295
|
+
await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Increments the message count for a session.
|
|
300
|
+
*/
|
|
301
|
+
async incrementMessageCount(sessionId) {
|
|
302
|
+
await this.ensureInitialized();
|
|
303
|
+
const sessionKey = `session:${sessionId}`;
|
|
304
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
305
|
+
if (sessionData) {
|
|
306
|
+
sessionData.messageCount++;
|
|
307
|
+
sessionData.lastActivity = Date.now();
|
|
308
|
+
await this.services.storage.database.set(sessionKey, sessionData);
|
|
309
|
+
await this.services.storage.cache.set(sessionKey, sessionData, this.sessionTTL / 1e3);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Cleans up expired sessions from memory only, preserving chat history in storage.
|
|
314
|
+
* This allows inactive sessions to be garbage collected while keeping conversations restorable.
|
|
315
|
+
*/
|
|
316
|
+
async cleanupExpiredSessions() {
|
|
317
|
+
const now = Date.now();
|
|
318
|
+
const expiredSessions = [];
|
|
319
|
+
for (const [sessionId, _session] of this.sessions.entries()) {
|
|
320
|
+
const sessionKey = `session:${sessionId}`;
|
|
321
|
+
const sessionData = await this.services.storage.database.get(sessionKey);
|
|
322
|
+
if (sessionData && now - sessionData.lastActivity > this.sessionTTL) {
|
|
323
|
+
expiredSessions.push(sessionId);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
for (const sessionId of expiredSessions) {
|
|
327
|
+
const session = this.sessions.get(sessionId);
|
|
328
|
+
if (session) {
|
|
329
|
+
session.dispose();
|
|
330
|
+
this.sessions.delete(sessionId);
|
|
331
|
+
logger.debug(
|
|
332
|
+
`Removed expired session from memory: ${sessionId} (chat history preserved)`
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (expiredSessions.length > 0) {
|
|
337
|
+
logger.debug(
|
|
338
|
+
`Memory cleanup: removed ${expiredSessions.length} inactive sessions, chat history preserved`
|
|
339
|
+
);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Switch LLM for all sessions.
|
|
344
|
+
* @param newLLMConfig The new LLM configuration to apply
|
|
345
|
+
* @returns Result object with success message and any warnings
|
|
346
|
+
*/
|
|
347
|
+
async switchLLMForAllSessions(newLLMConfig) {
|
|
348
|
+
await this.ensureInitialized();
|
|
349
|
+
const sessionIds = await this.listSessions();
|
|
350
|
+
const failedSessions = [];
|
|
351
|
+
for (const sId of sessionIds) {
|
|
352
|
+
const session = await this.getSession(sId);
|
|
353
|
+
if (session) {
|
|
354
|
+
try {
|
|
355
|
+
this.services.stateManager.updateLLM(newLLMConfig, sId);
|
|
356
|
+
await session.switchLLM(newLLMConfig);
|
|
357
|
+
} catch (error) {
|
|
358
|
+
failedSessions.push(sId);
|
|
359
|
+
logger.warn(
|
|
360
|
+
`Error switching LLM for session ${sId}: ${error instanceof Error ? error.message : String(error)}`
|
|
361
|
+
);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
this.services.agentEventBus.emit("dexto:llmSwitched", {
|
|
366
|
+
newConfig: newLLMConfig,
|
|
367
|
+
router: newLLMConfig.router,
|
|
368
|
+
historyRetained: true,
|
|
369
|
+
sessionIds: sessionIds.filter((id) => !failedSessions.includes(id))
|
|
370
|
+
});
|
|
371
|
+
const message = failedSessions.length > 0 ? `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router (${failedSessions.length} sessions failed)` : `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router for all sessions`;
|
|
372
|
+
const warnings = failedSessions.length > 0 ? [`Failed to switch LLM for sessions: ${failedSessions.join(", ")}`] : [];
|
|
373
|
+
return { message, warnings };
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Switch LLM for a specific session.
|
|
377
|
+
* @param newLLMConfig The new LLM configuration to apply
|
|
378
|
+
* @param sessionId The session ID to switch LLM for
|
|
379
|
+
* @returns Result object with success message and any warnings
|
|
380
|
+
*/
|
|
381
|
+
async switchLLMForSpecificSession(newLLMConfig, sessionId) {
|
|
382
|
+
const session = await this.getSession(sessionId);
|
|
383
|
+
if (!session) {
|
|
384
|
+
throw SessionError.notFound(sessionId);
|
|
385
|
+
}
|
|
386
|
+
await session.switchLLM(newLLMConfig);
|
|
387
|
+
this.services.agentEventBus.emit("dexto:llmSwitched", {
|
|
388
|
+
newConfig: newLLMConfig,
|
|
389
|
+
router: newLLMConfig.router,
|
|
390
|
+
historyRetained: true,
|
|
391
|
+
sessionIds: [sessionId]
|
|
392
|
+
});
|
|
393
|
+
const message = `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router for session ${sessionId}`;
|
|
394
|
+
return { message, warnings: [] };
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Switch LLM for the default session.
|
|
398
|
+
* @param newLLMConfig The new LLM configuration to apply
|
|
399
|
+
* @returns Result object with success message and any warnings
|
|
400
|
+
*/
|
|
401
|
+
async switchLLMForDefaultSession(newLLMConfig) {
|
|
402
|
+
const defaultSession = await this.getDefaultSession();
|
|
403
|
+
await defaultSession.switchLLM(newLLMConfig);
|
|
404
|
+
this.services.agentEventBus.emit("dexto:llmSwitched", {
|
|
405
|
+
newConfig: newLLMConfig,
|
|
406
|
+
router: newLLMConfig.router,
|
|
407
|
+
historyRetained: true,
|
|
408
|
+
sessionIds: [defaultSession.id]
|
|
409
|
+
});
|
|
410
|
+
const message = `Successfully switched to ${newLLMConfig.provider}/${newLLMConfig.model} using ${newLLMConfig.router} router`;
|
|
411
|
+
return { message, warnings: [] };
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Get session statistics for monitoring and debugging.
|
|
415
|
+
*/
|
|
416
|
+
async getSessionStats() {
|
|
417
|
+
await this.ensureInitialized();
|
|
418
|
+
const totalSessions = (await this.listSessions()).length;
|
|
419
|
+
const inMemorySessions = this.sessions.size;
|
|
420
|
+
return {
|
|
421
|
+
totalSessions,
|
|
422
|
+
inMemorySessions,
|
|
423
|
+
maxSessions: this.maxSessions,
|
|
424
|
+
sessionTTL: this.sessionTTL
|
|
425
|
+
};
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Cleanup all sessions and resources.
|
|
429
|
+
* This should be called when shutting down the application.
|
|
430
|
+
*/
|
|
431
|
+
async cleanup() {
|
|
432
|
+
if (!this.initialized) {
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
if (this.cleanupInterval) {
|
|
436
|
+
clearInterval(this.cleanupInterval);
|
|
437
|
+
delete this.cleanupInterval;
|
|
438
|
+
logger.debug("Periodic session cleanup stopped");
|
|
439
|
+
}
|
|
440
|
+
const sessionIds = Array.from(this.sessions.keys());
|
|
441
|
+
for (const sessionId of sessionIds) {
|
|
442
|
+
try {
|
|
443
|
+
await this.endSession(sessionId);
|
|
444
|
+
} catch (error) {
|
|
445
|
+
logger.error(
|
|
446
|
+
`Failed to cleanup session ${sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
this.sessions.clear();
|
|
451
|
+
this.initialized = false;
|
|
452
|
+
logger.debug("SessionManager cleanup completed");
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
export {
|
|
456
|
+
SessionManager
|
|
457
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var cache_backend_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(cache_backend_exports);
|