@dexto/core 1.3.0 → 1.4.0
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 +17 -9
- package/dist/agent/DextoAgent.cjs +548 -207
- package/dist/agent/DextoAgent.d.ts +156 -33
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +545 -204
- package/dist/agent/agentCard.js +1 -1
- package/dist/agent/error-codes.cjs +1 -0
- package/dist/agent/error-codes.d.ts +2 -1
- package/dist/agent/error-codes.d.ts.map +1 -1
- package/dist/agent/error-codes.js +2 -1
- package/dist/agent/errors.cjs +13 -0
- package/dist/agent/errors.d.ts +4 -0
- package/dist/agent/errors.d.ts.map +1 -1
- package/dist/agent/errors.js +14 -1
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/schemas.cjs +3 -0
- package/dist/agent/schemas.d.ts +92 -55
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +6 -2
- package/dist/agent/state-manager.cjs +5 -5
- package/dist/agent/state-manager.d.ts +4 -4
- package/dist/agent/state-manager.js +6 -6
- package/dist/agent/types.d.ts +24 -10
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/approval/error-codes.js +1 -1
- package/dist/approval/errors.js +1 -1
- package/dist/approval/factory.js +1 -1
- package/dist/approval/index.js +1 -1
- package/dist/approval/manager.cjs +69 -3
- package/dist/approval/manager.d.ts +41 -3
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +70 -4
- package/dist/approval/schemas.cjs +18 -4
- package/dist/approval/schemas.d.ts +106 -32
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +19 -5
- package/dist/approval/types.d.ts +6 -0
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +1 -1
- package/dist/{chunk-C6A6W6XS.js → chunk-PTJYTZNU.js} +44 -1
- package/dist/{llm/tokenizer/default.cjs → context/compression/overflow.cjs} +20 -18
- package/dist/context/compression/overflow.d.ts +33 -0
- package/dist/context/compression/overflow.d.ts.map +1 -0
- package/dist/context/compression/overflow.js +19 -0
- package/dist/context/compression/reactive-overflow.cjs +201 -0
- package/dist/context/compression/reactive-overflow.d.ts +81 -0
- package/dist/context/compression/reactive-overflow.d.ts.map +1 -0
- package/dist/context/compression/reactive-overflow.js +178 -0
- package/dist/context/compression/types.d.ts +9 -7
- package/dist/context/compression/types.d.ts.map +1 -1
- package/dist/context/error-codes.cjs +3 -0
- package/dist/context/error-codes.d.ts +4 -1
- package/dist/context/error-codes.d.ts.map +1 -1
- package/dist/context/error-codes.js +4 -1
- package/dist/context/errors.cjs +28 -0
- package/dist/context/errors.d.ts +7 -0
- package/dist/context/errors.d.ts.map +1 -1
- package/dist/context/errors.js +29 -1
- package/dist/context/index.js +1 -1
- package/dist/context/manager.cjs +280 -323
- package/dist/context/manager.d.ts +65 -111
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +280 -328
- package/dist/context/media-helpers.js +1 -1
- package/dist/context/types.cjs +49 -0
- package/dist/context/types.d.ts +181 -72
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +35 -0
- package/dist/context/utils.cjs +266 -283
- package/dist/context/utils.d.ts +32 -18
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +266 -283
- package/dist/errors/DextoBaseError.js +1 -1
- package/dist/errors/DextoRuntimeError.js +1 -1
- package/dist/errors/DextoValidationError.js +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/result-bridge.js +1 -1
- package/dist/errors/types.js +1 -1
- package/dist/events/index.cjs +18 -1
- package/dist/events/index.d.ts +149 -12
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +19 -2
- package/dist/filesystem/error-codes.js +1 -1
- package/dist/filesystem/errors.js +1 -1
- package/dist/filesystem/filesystem-service.js +1 -1
- package/dist/filesystem/index.js +1 -1
- package/dist/filesystem/path-validator.js +1 -1
- package/dist/index.browser.cjs +23 -8
- package/dist/index.browser.d.ts +4 -3
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +20 -3
- package/dist/index.js +1 -1
- package/dist/llm/error-codes.cjs +0 -1
- package/dist/llm/error-codes.d.ts +0 -1
- package/dist/llm/error-codes.d.ts.map +1 -1
- package/dist/llm/error-codes.js +1 -2
- package/dist/llm/errors.cjs +10 -10
- package/dist/llm/errors.d.ts +5 -6
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +12 -12
- package/dist/llm/executor/stream-processor.cjs +367 -0
- package/dist/llm/executor/stream-processor.d.ts +55 -0
- package/dist/llm/executor/stream-processor.d.ts.map +1 -0
- package/dist/llm/executor/stream-processor.js +344 -0
- package/dist/llm/executor/tool-output-truncator.cjs +75 -0
- package/dist/llm/executor/tool-output-truncator.d.ts +27 -0
- package/dist/llm/executor/tool-output-truncator.d.ts.map +1 -0
- package/dist/llm/executor/tool-output-truncator.js +48 -0
- package/dist/llm/executor/turn-executor.cjs +753 -0
- package/dist/llm/executor/turn-executor.d.ts +166 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -0
- package/dist/llm/executor/turn-executor.js +684 -0
- package/dist/llm/executor/types.d.ts +27 -0
- package/dist/llm/executor/types.d.ts.map +1 -0
- package/dist/llm/formatters/vercel.cjs +20 -186
- package/dist/llm/formatters/vercel.d.ts +2 -14
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +19 -185
- package/dist/llm/registry.cjs +36 -45
- package/dist/llm/registry.d.ts +53 -39
- package/dist/llm/registry.d.ts.map +1 -1
- package/dist/llm/registry.js +34 -42
- package/dist/llm/resolver.cjs +1 -31
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +2 -34
- package/dist/llm/schemas.cjs +2 -17
- package/dist/llm/schemas.d.ts +10 -23
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +5 -22
- package/dist/llm/services/factory.cjs +3 -92
- package/dist/llm/services/factory.d.ts +14 -4
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +4 -83
- package/dist/llm/services/test-utils.integration.cjs +6 -8
- package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
- package/dist/llm/services/test-utils.integration.js +7 -9
- package/dist/llm/services/types.d.ts +1 -28
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +54 -468
- package/dist/llm/services/vercel.d.ts +38 -21
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +56 -475
- package/dist/llm/types.cjs +0 -3
- package/dist/llm/types.d.ts +8 -8
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +1 -3
- package/dist/llm/validation.js +1 -1
- package/dist/logger/browser.js +1 -1
- package/dist/logger/factory.js +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/logger.js +1 -1
- package/dist/logger/v2/dexto-logger.cjs +34 -6
- package/dist/logger/v2/dexto-logger.d.ts +20 -2
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
- package/dist/logger/v2/dexto-logger.js +35 -7
- package/dist/logger/v2/error-codes.js +1 -1
- package/dist/logger/v2/errors.js +1 -1
- package/dist/logger/v2/schemas.js +1 -1
- package/dist/logger/v2/test-utils.cjs +70 -0
- package/dist/logger/v2/test-utils.d.ts +17 -0
- package/dist/logger/v2/test-utils.d.ts.map +1 -0
- package/dist/logger/v2/test-utils.js +46 -0
- package/dist/logger/v2/transport-factory.js +1 -1
- package/dist/logger/v2/transports/console-transport.js +1 -1
- package/dist/logger/v2/transports/file-transport.cjs +6 -0
- package/dist/logger/v2/transports/file-transport.d.ts +4 -0
- package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
- package/dist/logger/v2/transports/file-transport.js +7 -1
- package/dist/logger/v2/types.cjs +1 -0
- package/dist/logger/v2/types.d.ts +18 -2
- package/dist/logger/v2/types.d.ts.map +1 -1
- package/dist/logger/v2/types.js +2 -1
- package/dist/mcp/error-codes.cjs +1 -0
- package/dist/mcp/error-codes.d.ts +1 -0
- package/dist/mcp/error-codes.d.ts.map +1 -1
- package/dist/mcp/error-codes.js +2 -1
- package/dist/mcp/errors.cjs +13 -0
- package/dist/mcp/errors.d.ts +7 -0
- package/dist/mcp/errors.d.ts.map +1 -1
- package/dist/mcp/errors.js +14 -1
- package/dist/mcp/manager.cjs +4 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +5 -1
- package/dist/mcp/mcp-client.js +1 -1
- package/dist/mcp/resolver.js +1 -1
- package/dist/mcp/schemas.cjs +6 -0
- package/dist/mcp/schemas.d.ts +52 -0
- package/dist/mcp/schemas.d.ts.map +1 -1
- package/dist/mcp/schemas.js +6 -1
- package/dist/memory/error-codes.js +1 -1
- package/dist/memory/errors.js +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/manager.js +1 -1
- package/dist/memory/schemas.d.ts +2 -2
- package/dist/memory/schemas.js +1 -1
- package/dist/plugins/builtins/content-policy.js +1 -1
- package/dist/plugins/builtins/response-sanitizer.js +1 -1
- package/dist/plugins/error-codes.js +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/loader.js +1 -1
- package/dist/plugins/manager.js +1 -1
- package/dist/plugins/registrations/builtins.js +1 -1
- package/dist/plugins/schemas.d.ts +3 -3
- package/dist/plugins/schemas.js +1 -1
- package/dist/plugins/types.d.ts +0 -1
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/process/command-validator.js +1 -1
- package/dist/process/error-codes.js +1 -1
- package/dist/process/errors.js +1 -1
- package/dist/process/index.js +1 -1
- package/dist/process/process-service.cjs +78 -26
- package/dist/process/process-service.d.ts +6 -1
- package/dist/process/process-service.d.ts.map +1 -1
- package/dist/process/process-service.js +79 -27
- package/dist/process/types.d.ts +2 -2
- package/dist/process/types.d.ts.map +1 -1
- package/dist/prompts/error-codes.cjs +1 -0
- package/dist/prompts/error-codes.d.ts +2 -1
- package/dist/prompts/error-codes.d.ts.map +1 -1
- package/dist/prompts/error-codes.js +2 -1
- package/dist/prompts/errors.cjs +15 -0
- package/dist/prompts/errors.d.ts +4 -0
- package/dist/prompts/errors.d.ts.map +1 -1
- package/dist/prompts/errors.js +16 -1
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/name-validation.js +1 -1
- package/dist/prompts/prompt-manager.cjs +13 -2
- package/dist/prompts/prompt-manager.d.ts +7 -0
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +14 -3
- package/dist/prompts/providers/config-prompt-provider.cjs +12 -3
- package/dist/prompts/providers/config-prompt-provider.d.ts +2 -1
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +13 -4
- package/dist/prompts/providers/custom-prompt-provider.js +1 -1
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
- package/dist/prompts/schemas.d.ts +12 -0
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +1 -1
- package/dist/prompts/types.d.ts +2 -0
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/utils.js +1 -1
- package/dist/resources/error-codes.js +1 -1
- package/dist/resources/errors.js +1 -1
- package/dist/resources/handlers/blob-handler.js +1 -1
- package/dist/resources/handlers/factory.js +1 -1
- package/dist/resources/handlers/filesystem-handler.js +1 -1
- package/dist/resources/index.js +1 -1
- package/dist/resources/internal-provider.js +1 -1
- package/dist/resources/manager.js +1 -1
- package/dist/resources/reference-parser.js +1 -1
- package/dist/resources/schemas.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/search/search-service.js +1 -1
- package/dist/session/chat-session.cjs +149 -51
- package/dist/session/chat-session.d.ts +69 -29
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +150 -52
- package/dist/session/error-codes.js +1 -1
- package/dist/session/errors.js +1 -1
- package/dist/session/history/database.cjs +134 -21
- package/dist/session/history/database.d.ts +37 -8
- package/dist/session/history/database.d.ts.map +1 -1
- package/dist/session/history/database.js +135 -22
- package/dist/session/history/factory.js +1 -1
- package/dist/session/history/memory.cjs +18 -0
- package/dist/session/history/memory.d.ts +8 -0
- package/dist/session/history/memory.d.ts.map +1 -1
- package/dist/session/history/memory.js +19 -1
- package/dist/session/history/types.d.ts +13 -1
- package/dist/session/history/types.d.ts.map +1 -1
- package/dist/session/index.cjs +3 -0
- package/dist/session/index.d.ts +3 -0
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +3 -1
- package/dist/session/message-queue.cjs +201 -0
- package/dist/session/message-queue.d.ts +114 -0
- package/dist/session/message-queue.d.ts.map +1 -0
- package/dist/session/message-queue.js +178 -0
- package/dist/session/schemas.js +1 -1
- package/dist/session/session-manager.cjs +57 -7
- package/dist/session/session-manager.d.ts +18 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +58 -8
- package/dist/session/title-generator.cjs +4 -8
- package/dist/session/title-generator.d.ts +1 -2
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +5 -9
- package/dist/session/types.cjs +16 -0
- package/dist/session/types.d.ts +14 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +0 -0
- package/dist/storage/blob/factory.js +1 -1
- package/dist/storage/blob/local-blob-store.js +1 -1
- package/dist/storage/blob/memory-blob-store.js +1 -1
- package/dist/storage/blob/schemas.js +1 -1
- package/dist/storage/cache/factory.js +1 -1
- package/dist/storage/cache/memory-cache-store.js +1 -1
- package/dist/storage/cache/redis-store.js +1 -1
- package/dist/storage/cache/schemas.js +1 -1
- package/dist/storage/database/factory.js +1 -1
- package/dist/storage/database/memory-database-store.js +1 -1
- package/dist/storage/database/postgres-store.cjs +12 -0
- package/dist/storage/database/postgres-store.d.ts.map +1 -1
- package/dist/storage/database/postgres-store.js +13 -1
- package/dist/storage/database/schemas.js +1 -1
- package/dist/storage/database/sqlite-store.js +1 -1
- package/dist/storage/error-codes.js +1 -1
- package/dist/storage/errors.js +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/schemas.js +1 -1
- package/dist/storage/storage-manager.js +1 -1
- package/dist/systemPrompt/contributors.js +1 -1
- package/dist/systemPrompt/error-codes.js +1 -1
- package/dist/systemPrompt/errors.js +1 -1
- package/dist/systemPrompt/in-built-prompts.js +1 -1
- package/dist/systemPrompt/index.js +1 -1
- package/dist/systemPrompt/manager.js +1 -1
- package/dist/systemPrompt/registry.js +1 -1
- package/dist/systemPrompt/schemas.d.ts +5 -5
- package/dist/systemPrompt/schemas.js +1 -1
- package/dist/telemetry/decorators.js +1 -1
- package/dist/telemetry/error-codes.js +1 -1
- package/dist/telemetry/errors.js +1 -1
- package/dist/telemetry/exporters.js +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/schemas.js +1 -1
- package/dist/telemetry/telemetry.js +1 -1
- package/dist/telemetry/utils.js +1 -1
- package/dist/tools/bash-pattern-utils.cjs +91 -0
- package/dist/tools/bash-pattern-utils.d.ts +58 -0
- package/dist/tools/bash-pattern-utils.d.ts.map +1 -0
- package/dist/tools/bash-pattern-utils.js +64 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.js +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +1 -1
- package/dist/tools/display-types.cjs +60 -0
- package/dist/tools/display-types.d.ts +133 -0
- package/dist/tools/display-types.d.ts.map +1 -0
- package/dist/tools/display-types.js +32 -0
- package/dist/tools/error-codes.cjs +2 -0
- package/dist/tools/error-codes.d.ts +3 -1
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +3 -1
- package/dist/tools/errors.cjs +30 -0
- package/dist/tools/errors.d.ts +16 -0
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +31 -1
- package/dist/tools/index.cjs +2 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -1
- package/dist/tools/internal-tools/constants.js +1 -1
- package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +1 -1
- package/dist/tools/internal-tools/implementations/ask-user-tool.js +2 -2
- package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +42 -18
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +3 -3
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/bash-exec-tool.js +43 -19
- package/dist/tools/internal-tools/implementations/bash-output-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +66 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.js +67 -2
- package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +14 -1
- package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/glob-files-tool.js +15 -2
- package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +16 -1
- package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/grep-content-tool.js +17 -2
- package/dist/tools/internal-tools/implementations/kill-process-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.cjs +9 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.js +10 -2
- package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.cjs +69 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +1 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.js +72 -2
- package/dist/tools/internal-tools/provider.cjs +27 -10
- package/dist/tools/internal-tools/provider.d.ts +8 -5
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +28 -11
- package/dist/tools/internal-tools/registry.cjs +4 -3
- package/dist/tools/internal-tools/registry.d.ts +28 -7
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +5 -4
- package/dist/tools/schemas.cjs +16 -6
- package/dist/tools/schemas.d.ts +31 -4
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +14 -6
- package/dist/tools/tool-manager.cjs +140 -18
- package/dist/tools/tool-manager.d.ts +23 -1
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +145 -19
- package/dist/tools/types.d.ts +20 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +1 -1
- package/dist/utils/async-context.js +1 -1
- package/dist/utils/debug.js +1 -1
- package/dist/{llm/tokenizer/types.cjs → utils/defer.cjs} +19 -10
- package/dist/utils/defer.d.ts +63 -0
- package/dist/utils/defer.d.ts.map +1 -0
- package/dist/utils/defer.js +19 -0
- package/dist/utils/env-file.js +1 -1
- package/dist/utils/error-conversion.js +1 -1
- package/dist/utils/execution-context.js +1 -1
- package/dist/utils/fs-walk.js +1 -1
- package/dist/utils/index.cjs +3 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/path.js +1 -1
- package/dist/utils/redactor.js +1 -1
- package/dist/utils/result.js +1 -1
- package/dist/utils/safe-stringify.js +1 -1
- package/dist/utils/schema-metadata.js +1 -1
- package/dist/utils/schema.js +1 -1
- package/dist/utils/service-initializer.cjs +6 -2
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +7 -3
- package/dist/utils/user-info.js +1 -1
- package/dist/utils/zod-schema-converter.js +1 -1
- package/package.json +6 -7
- package/dist/context/compression/middle-removal.cjs +0 -95
- package/dist/context/compression/middle-removal.d.ts +0 -47
- package/dist/context/compression/middle-removal.d.ts.map +0 -1
- package/dist/context/compression/middle-removal.js +0 -72
- package/dist/context/compression/oldest-removal.cjs +0 -83
- package/dist/context/compression/oldest-removal.d.ts +0 -42
- package/dist/context/compression/oldest-removal.d.ts.map +0 -1
- package/dist/context/compression/oldest-removal.js +0 -60
- package/dist/llm/formatters/anthropic.cjs +0 -257
- package/dist/llm/formatters/anthropic.d.ts +0 -46
- package/dist/llm/formatters/anthropic.d.ts.map +0 -1
- package/dist/llm/formatters/anthropic.js +0 -239
- package/dist/llm/formatters/factory.cjs +0 -50
- package/dist/llm/formatters/factory.d.ts +0 -10
- package/dist/llm/formatters/factory.d.ts.map +0 -1
- package/dist/llm/formatters/factory.js +0 -27
- package/dist/llm/formatters/openai.cjs +0 -203
- package/dist/llm/formatters/openai.d.ts +0 -39
- package/dist/llm/formatters/openai.d.ts.map +0 -1
- package/dist/llm/formatters/openai.js +0 -184
- package/dist/llm/formatters/types.d.ts +0 -41
- package/dist/llm/formatters/types.d.ts.map +0 -1
- package/dist/llm/services/anthropic.cjs +0 -511
- package/dist/llm/services/anthropic.d.ts +0 -48
- package/dist/llm/services/anthropic.d.ts.map +0 -1
- package/dist/llm/services/anthropic.js +0 -447
- package/dist/llm/services/openai.cjs +0 -611
- package/dist/llm/services/openai.d.ts +0 -48
- package/dist/llm/services/openai.d.ts.map +0 -1
- package/dist/llm/services/openai.js +0 -547
- package/dist/llm/tokenizer/anthropic.cjs +0 -43
- package/dist/llm/tokenizer/anthropic.d.ts +0 -19
- package/dist/llm/tokenizer/anthropic.d.ts.map +0 -1
- package/dist/llm/tokenizer/anthropic.js +0 -20
- package/dist/llm/tokenizer/default.d.ts +0 -14
- package/dist/llm/tokenizer/default.d.ts.map +0 -1
- package/dist/llm/tokenizer/default.js +0 -18
- package/dist/llm/tokenizer/factory.cjs +0 -44
- package/dist/llm/tokenizer/factory.d.ts +0 -12
- package/dist/llm/tokenizer/factory.d.ts.map +0 -1
- package/dist/llm/tokenizer/factory.js +0 -21
- package/dist/llm/tokenizer/google.cjs +0 -52
- package/dist/llm/tokenizer/google.d.ts +0 -29
- package/dist/llm/tokenizer/google.d.ts.map +0 -1
- package/dist/llm/tokenizer/google.js +0 -29
- package/dist/llm/tokenizer/openai.cjs +0 -115
- package/dist/llm/tokenizer/openai.d.ts +0 -41
- package/dist/llm/tokenizer/openai.d.ts.map +0 -1
- package/dist/llm/tokenizer/openai.js +0 -91
- package/dist/llm/tokenizer/types.d.ts +0 -18
- package/dist/llm/tokenizer/types.d.ts.map +0 -1
- package/dist/llm/tokenizer/types.js +0 -10
- /package/dist/llm/{formatters → executor}/types.cjs +0 -0
- /package/dist/llm/{formatters → executor}/types.js +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ContextManager } from '../context/index.js';
|
|
2
|
-
import type {
|
|
2
|
+
import type { VercelLLMService } from '../llm/services/vercel.js';
|
|
3
3
|
import type { SystemPromptManager } from '../systemPrompt/manager.js';
|
|
4
4
|
import type { ToolManager } from '../tools/tool-manager.js';
|
|
5
5
|
import type { ValidatedLLMConfig } from '../llm/schemas.js';
|
|
@@ -10,6 +10,8 @@ import type { MCPManager } from '../mcp/manager.js';
|
|
|
10
10
|
import { SessionEventBus, AgentEventBus } from '../events/index.js';
|
|
11
11
|
import type { IDextoLogger } from '../logger/v2/types.js';
|
|
12
12
|
import type { InternalMessage } from '../context/types.js';
|
|
13
|
+
import type { UserMessageInput } from './message-queue.js';
|
|
14
|
+
import type { ContentInput } from '../agent/types.js';
|
|
13
15
|
/**
|
|
14
16
|
* Represents an isolated conversation session within a Dexto agent.
|
|
15
17
|
*
|
|
@@ -52,7 +54,7 @@ import type { InternalMessage } from '../context/types.js';
|
|
|
52
54
|
*
|
|
53
55
|
* @see {@link SessionManager} for session lifecycle management
|
|
54
56
|
* @see {@link ContextManager} for conversation history management
|
|
55
|
-
* @see {@link
|
|
57
|
+
* @see {@link VercelLLMService} for AI model interaction
|
|
56
58
|
*/
|
|
57
59
|
export declare class ChatSession {
|
|
58
60
|
private services;
|
|
@@ -86,6 +88,10 @@ export declare class ChatSession {
|
|
|
86
88
|
* Stores the bound functions so they can be removed from the event bus.
|
|
87
89
|
*/
|
|
88
90
|
private forwarders;
|
|
91
|
+
/**
|
|
92
|
+
* Token accumulator listener for cleanup.
|
|
93
|
+
*/
|
|
94
|
+
private tokenAccumulatorListener;
|
|
89
95
|
/**
|
|
90
96
|
* AbortController for the currently running turn, if any.
|
|
91
97
|
* Calling cancel() aborts the in-flight LLM request and tool execution checks.
|
|
@@ -129,6 +135,11 @@ export declare class ChatSession {
|
|
|
129
135
|
* information when needed.
|
|
130
136
|
*/
|
|
131
137
|
private setupEventForwarding;
|
|
138
|
+
/**
|
|
139
|
+
* Sets up token usage accumulation by listening to llm:response events.
|
|
140
|
+
* Accumulates token usage and cost to session metadata for /stats tracking.
|
|
141
|
+
*/
|
|
142
|
+
private setupTokenAccumulation;
|
|
132
143
|
/**
|
|
133
144
|
* Initializes session-specific services.
|
|
134
145
|
*/
|
|
@@ -146,36 +157,33 @@ export declare class ChatSession {
|
|
|
146
157
|
*/
|
|
147
158
|
private saveBlockedInteraction;
|
|
148
159
|
/**
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
* This method:
|
|
152
|
-
* 1. Takes user input (text, optionally with image or file data)
|
|
153
|
-
* 2. Passes it to the LLM service for processing
|
|
154
|
-
* 3. Returns the AI's response text
|
|
160
|
+
* Stream a response for the given content.
|
|
161
|
+
* Primary method for running conversations with multi-image support.
|
|
155
162
|
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
* @param input - The user's text input
|
|
160
|
-
* @param imageDataInput - Optional image data for multimodal input
|
|
161
|
-
* @param fileDataInput - Optional file data for file input
|
|
162
|
-
* @param stream - Optional flag to enable streaming responses
|
|
163
|
+
* @param content - String or ContentPart[] (text, images, files)
|
|
164
|
+
* @param options - { signal?: AbortSignal }
|
|
163
165
|
* @returns Promise that resolves to the AI's response text
|
|
164
166
|
*
|
|
165
167
|
* @example
|
|
166
168
|
* ```typescript
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
+
* // Text only
|
|
170
|
+
* const response = await session.stream('What is the weather?');
|
|
171
|
+
*
|
|
172
|
+
* // Multiple images
|
|
173
|
+
* const response = await session.stream([
|
|
174
|
+
* { type: 'text', text: 'Compare these images' },
|
|
175
|
+
* { type: 'image', image: base64Data1, mimeType: 'image/png' },
|
|
176
|
+
* { type: 'image', image: base64Data2, mimeType: 'image/png' }
|
|
177
|
+
* ]);
|
|
169
178
|
* ```
|
|
170
179
|
*/
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
}, stream?: boolean): Promise<string>;
|
|
180
|
+
stream(content: ContentInput, options?: {
|
|
181
|
+
signal?: AbortSignal;
|
|
182
|
+
}): Promise<string>;
|
|
183
|
+
/**
|
|
184
|
+
* Combine multiple abort signals into one.
|
|
185
|
+
*/
|
|
186
|
+
private combineSignals;
|
|
179
187
|
/**
|
|
180
188
|
* Retrieves the complete conversation history for this session.
|
|
181
189
|
*
|
|
@@ -231,15 +239,15 @@ export declare class ChatSession {
|
|
|
231
239
|
*
|
|
232
240
|
* @returns The LLMService for this session
|
|
233
241
|
*/
|
|
234
|
-
getLLMService():
|
|
242
|
+
getLLMService(): VercelLLMService;
|
|
235
243
|
/**
|
|
236
244
|
* Switches the LLM service for this session while preserving conversation history.
|
|
237
245
|
*
|
|
238
|
-
* This method creates a new LLM service with the specified configuration
|
|
246
|
+
* This method creates a new LLM service with the specified configuration,
|
|
239
247
|
* while maintaining the existing ContextManager and conversation history. This allows
|
|
240
248
|
* users to change AI models mid-conversation without losing context.
|
|
241
249
|
*
|
|
242
|
-
* @param newLLMConfig The new LLM configuration to use
|
|
250
|
+
* @param newLLMConfig The new LLM configuration to use
|
|
243
251
|
*
|
|
244
252
|
* @example
|
|
245
253
|
* ```typescript
|
|
@@ -248,7 +256,6 @@ export declare class ChatSession {
|
|
|
248
256
|
* provider: 'openai',
|
|
249
257
|
* model: 'gpt-5',
|
|
250
258
|
* apiKey: process.env.OPENAI_API_KEY,
|
|
251
|
-
* router: 'in-built'
|
|
252
259
|
* });
|
|
253
260
|
* ```
|
|
254
261
|
*/
|
|
@@ -267,6 +274,39 @@ export declare class ChatSession {
|
|
|
267
274
|
* Without this cleanup, sessions would remain in memory due to listener references.
|
|
268
275
|
*/
|
|
269
276
|
dispose(): void;
|
|
277
|
+
/**
|
|
278
|
+
* Check if this session is currently processing a message.
|
|
279
|
+
* Returns true if a run is in progress and has not been aborted.
|
|
280
|
+
*/
|
|
281
|
+
isBusy(): boolean;
|
|
282
|
+
/**
|
|
283
|
+
* Queue a message for processing when the session is busy.
|
|
284
|
+
* The message will be injected into the conversation when the current turn completes.
|
|
285
|
+
*
|
|
286
|
+
* @param message The user message to queue
|
|
287
|
+
* @returns Queue position and message ID
|
|
288
|
+
*/
|
|
289
|
+
queueMessage(message: UserMessageInput): {
|
|
290
|
+
queued: true;
|
|
291
|
+
position: number;
|
|
292
|
+
id: string;
|
|
293
|
+
};
|
|
294
|
+
/**
|
|
295
|
+
* Get all messages currently in the queue.
|
|
296
|
+
* @returns Array of queued messages
|
|
297
|
+
*/
|
|
298
|
+
getQueuedMessages(): import('./types.js').QueuedMessage[];
|
|
299
|
+
/**
|
|
300
|
+
* Remove a queued message.
|
|
301
|
+
* @param id Message ID to remove
|
|
302
|
+
* @returns true if message was found and removed; false otherwise
|
|
303
|
+
*/
|
|
304
|
+
removeQueuedMessage(id: string): boolean;
|
|
305
|
+
/**
|
|
306
|
+
* Clear all queued messages.
|
|
307
|
+
* @returns Number of messages that were cleared
|
|
308
|
+
*/
|
|
309
|
+
clearMessageQueue(): number;
|
|
270
310
|
/**
|
|
271
311
|
* Cancel the currently running turn for this session, if any.
|
|
272
312
|
* Returns true if a run was in progress and was signaled to abort.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"chat-session.d.ts","sourceRoot":"","sources":["../../src/session/chat-session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACH,eAAe,EACf,aAAa,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,KAAK,EAAE,eAAe,EAAe,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,WAAW;IA6DhB,OAAO,CAAC,QAAQ;aAWA,EAAE,EAAE,MAAM;IAvE9B;;;;;;;;;;OAUG;IACH,SAAgB,QAAQ,EAAE,eAAe,CAAC;IAE1C;;;OAGG;IACH,OAAO,CAAC,eAAe,CAAgC;IAEvD;;;;;OAKG;IACH,OAAO,CAAC,UAAU,CAAoB;IAEtC;;;OAGG;IACH,OAAO,CAAC,UAAU,CAA6D;IAE/E;;OAEG;IACH,OAAO,CAAC,wBAAwB,CACvB;IAET;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAgC;IAE5D,OAAO,CAAC,MAAM,CAAe;IAE7B;;;;;;;;;;;OAWG;gBAES,QAAQ,EAAE;QACd,YAAY,EAAE,iBAAiB,CAAC;QAChC,mBAAmB,EAAE,mBAAmB,CAAC;QACzC,WAAW,EAAE,WAAW,CAAC;QACzB,aAAa,EAAE,aAAa,CAAC;QAC7B,cAAc,EAAE,cAAc,CAAC;QAC/B,eAAe,EAAE,OAAO,uBAAuB,EAAE,eAAe,CAAC;QACjE,aAAa,EAAE,aAAa,CAAC;QAC7B,UAAU,EAAE,UAAU,CAAC;QACvB,cAAc,EAAE,OAAO,sBAAsB,EAAE,cAAc,CAAC;KACjE,EACe,EAAE,EAAE,MAAM,EAC1B,MAAM,EAAE,YAAY;IAaxB;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IA4B5B;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;OAEG;YACW,kBAAkB;IA4BhC;;;;;;;;;;OAUG;YACW,sBAAsB;IAoCpC;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,MAAM,CACf,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACnC,OAAO,CAAC,MAAM,CAAC;IAgKlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,UAAU;IAIvB;;;;;;;;;;;;;;;;;;;;OAoBG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUnC;;;;OAIG;IACI,iBAAiB,IAAI,cAAc,CAAC,OAAO,CAAC;IAInD;;;;OAIG;IACI,aAAa,IAAI,gBAAgB;IAIxC;;;;;;;;;;;;;;;;;;OAkBG;IACU,SAAS,CAAC,YAAY,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCvE;;;;OAIG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrC;;;;;;OAMG;IACI,OAAO,IAAI,IAAI;IAoBtB;;;OAGG;IACI,MAAM,IAAI,OAAO;IAIxB;;;;;;OAMG;IACI,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE;IAI9F;;;OAGG;IACI,iBAAiB,IAAI,OAAO,YAAY,EAAE,aAAa,EAAE;IAIhE;;;;OAIG;IACI,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAI/C;;;OAGG;IACI,iBAAiB,IAAI,MAAM;IAOlC;;;OAGG;IACI,MAAM,IAAI,OAAO;CAa3B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
2
|
import { createDatabaseHistoryProvider } from "./history/factory.js";
|
|
3
3
|
import { createLLMService } from "../llm/services/factory.js";
|
|
4
4
|
import {
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
9
9
|
import { DextoRuntimeError, ErrorScope, ErrorType } from "../errors/index.js";
|
|
10
10
|
import { PluginErrorCode } from "../plugins/error-codes.js";
|
|
11
|
+
import { getModelPricing, calculateCost } from "../llm/registry.js";
|
|
11
12
|
class ChatSession {
|
|
12
13
|
/**
|
|
13
14
|
* Creates a new ChatSession instance.
|
|
@@ -58,6 +59,10 @@ class ChatSession {
|
|
|
58
59
|
* Stores the bound functions so they can be removed from the event bus.
|
|
59
60
|
*/
|
|
60
61
|
forwarders = /* @__PURE__ */ new Map();
|
|
62
|
+
/**
|
|
63
|
+
* Token accumulator listener for cleanup.
|
|
64
|
+
*/
|
|
65
|
+
tokenAccumulatorListener = null;
|
|
61
66
|
/**
|
|
62
67
|
* AbortController for the currently running turn, if any.
|
|
63
68
|
* Calling cancel() aborts the in-flight LLM request and tool execution checks.
|
|
@@ -88,10 +93,33 @@ class ChatSession {
|
|
|
88
93
|
this.forwarders.set(eventName, forwarder);
|
|
89
94
|
this.eventBus.on(eventName, forwarder);
|
|
90
95
|
});
|
|
96
|
+
this.setupTokenAccumulation();
|
|
91
97
|
this.logger.debug(
|
|
92
98
|
`[setupEventForwarding] Event forwarding setup complete for session=${this.id}`
|
|
93
99
|
);
|
|
94
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Sets up token usage accumulation by listening to llm:response events.
|
|
103
|
+
* Accumulates token usage and cost to session metadata for /stats tracking.
|
|
104
|
+
*/
|
|
105
|
+
setupTokenAccumulation() {
|
|
106
|
+
this.tokenAccumulatorListener = (payload) => {
|
|
107
|
+
if (payload.tokenUsage) {
|
|
108
|
+
let cost;
|
|
109
|
+
const llmConfig = this.services.stateManager.getLLMConfig(this.id);
|
|
110
|
+
const pricing = getModelPricing(llmConfig.provider, llmConfig.model);
|
|
111
|
+
if (pricing) {
|
|
112
|
+
cost = calculateCost(payload.tokenUsage, pricing);
|
|
113
|
+
}
|
|
114
|
+
this.services.sessionManager.accumulateTokenUsage(this.id, payload.tokenUsage, cost).catch((err) => {
|
|
115
|
+
this.logger.warn(
|
|
116
|
+
`Failed to accumulate token usage: ${err instanceof Error ? err.message : String(err)}`
|
|
117
|
+
);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
this.eventBus.on("llm:response", this.tokenAccumulatorListener);
|
|
122
|
+
}
|
|
95
123
|
/**
|
|
96
124
|
* Initializes session-specific services.
|
|
97
125
|
*/
|
|
@@ -104,7 +132,6 @@ class ChatSession {
|
|
|
104
132
|
);
|
|
105
133
|
this.llmService = createLLMService(
|
|
106
134
|
llmConfig,
|
|
107
|
-
llmConfig.router,
|
|
108
135
|
this.services.toolManager,
|
|
109
136
|
this.services.systemPromptManager,
|
|
110
137
|
this.historyProvider,
|
|
@@ -133,12 +160,12 @@ class ChatSession {
|
|
|
133
160
|
async saveBlockedInteraction(userInput, errorMessage, _imageData, _fileData) {
|
|
134
161
|
const userMessage = {
|
|
135
162
|
role: "user",
|
|
136
|
-
content: "[Blocked by content policy: input redacted]"
|
|
163
|
+
content: [{ type: "text", text: "[Blocked by content policy: input redacted]" }]
|
|
137
164
|
};
|
|
138
165
|
const errorContent = `Error: ${errorMessage}`;
|
|
139
166
|
const assistantMessage = {
|
|
140
167
|
role: "assistant",
|
|
141
|
-
content: errorContent
|
|
168
|
+
content: [{ type: "text", text: errorContent }]
|
|
142
169
|
};
|
|
143
170
|
await this.historyProvider.saveMessage(userMessage);
|
|
144
171
|
await this.historyProvider.saveMessage(assistantMessage);
|
|
@@ -146,44 +173,61 @@ class ChatSession {
|
|
|
146
173
|
this.eventBus.emit("llm:response", {
|
|
147
174
|
content: errorContent,
|
|
148
175
|
provider: llmConfig.provider,
|
|
149
|
-
model: llmConfig.model
|
|
150
|
-
router: llmConfig.router
|
|
176
|
+
model: llmConfig.model
|
|
151
177
|
});
|
|
152
178
|
}
|
|
153
179
|
/**
|
|
154
|
-
*
|
|
180
|
+
* Stream a response for the given content.
|
|
181
|
+
* Primary method for running conversations with multi-image support.
|
|
155
182
|
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
* 2. Passes it to the LLM service for processing
|
|
159
|
-
* 3. Returns the AI's response text
|
|
160
|
-
*
|
|
161
|
-
* The method handles both text-only and multimodal input (text + images/files).
|
|
162
|
-
* Tool calls and conversation management are handled internally by the LLM service.
|
|
163
|
-
*
|
|
164
|
-
* @param input - The user's text input
|
|
165
|
-
* @param imageDataInput - Optional image data for multimodal input
|
|
166
|
-
* @param fileDataInput - Optional file data for file input
|
|
167
|
-
* @param stream - Optional flag to enable streaming responses
|
|
183
|
+
* @param content - String or ContentPart[] (text, images, files)
|
|
184
|
+
* @param options - { signal?: AbortSignal }
|
|
168
185
|
* @returns Promise that resolves to the AI's response text
|
|
169
186
|
*
|
|
170
187
|
* @example
|
|
171
188
|
* ```typescript
|
|
172
|
-
*
|
|
173
|
-
*
|
|
189
|
+
* // Text only
|
|
190
|
+
* const response = await session.stream('What is the weather?');
|
|
191
|
+
*
|
|
192
|
+
* // Multiple images
|
|
193
|
+
* const response = await session.stream([
|
|
194
|
+
* { type: 'text', text: 'Compare these images' },
|
|
195
|
+
* { type: 'image', image: base64Data1, mimeType: 'image/png' },
|
|
196
|
+
* { type: 'image', image: base64Data2, mimeType: 'image/png' }
|
|
197
|
+
* ]);
|
|
174
198
|
* ```
|
|
175
199
|
*/
|
|
176
|
-
async
|
|
200
|
+
async stream(content, options) {
|
|
201
|
+
const parts = typeof content === "string" ? [{ type: "text", text: content }] : content;
|
|
202
|
+
const textParts = parts.filter(
|
|
203
|
+
(p) => p.type === "text"
|
|
204
|
+
);
|
|
205
|
+
const imageParts = parts.filter((p) => p.type === "image");
|
|
206
|
+
const fileParts = parts.filter((p) => p.type === "file");
|
|
177
207
|
this.logger.debug(
|
|
178
|
-
`
|
|
208
|
+
`Streaming session ${this.id} | textParts=${textParts.length} | images=${imageParts.length} | files=${fileParts.length}`
|
|
179
209
|
);
|
|
180
210
|
this.currentRunController = new AbortController();
|
|
181
|
-
const signal = this.currentRunController.signal;
|
|
211
|
+
const signal = options?.signal ? this.combineSignals(options.signal, this.currentRunController.signal) : this.currentRunController.signal;
|
|
182
212
|
try {
|
|
213
|
+
const textContent = textParts.map((p) => p.text).join("\n");
|
|
214
|
+
const firstImage = imageParts[0];
|
|
215
|
+
const firstFile = fileParts[0];
|
|
183
216
|
const beforeLLMPayload = {
|
|
184
|
-
text:
|
|
185
|
-
...
|
|
186
|
-
|
|
217
|
+
text: textContent,
|
|
218
|
+
...firstImage && {
|
|
219
|
+
imageData: {
|
|
220
|
+
image: typeof firstImage.image === "string" ? firstImage.image : "[binary]",
|
|
221
|
+
mimeType: firstImage.mimeType || "image/jpeg"
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
...firstFile && {
|
|
225
|
+
fileData: {
|
|
226
|
+
data: typeof firstFile.data === "string" ? firstFile.data : "[binary]",
|
|
227
|
+
mimeType: firstFile.mimeType,
|
|
228
|
+
...firstFile.filename && { filename: firstFile.filename }
|
|
229
|
+
}
|
|
230
|
+
},
|
|
187
231
|
sessionId: this.id
|
|
188
232
|
};
|
|
189
233
|
const modifiedBeforePayload = await this.services.pluginManager.executePlugins(
|
|
@@ -198,22 +242,17 @@ class ChatSession {
|
|
|
198
242
|
abortSignal: signal
|
|
199
243
|
}
|
|
200
244
|
);
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
finalImageData,
|
|
208
|
-
finalFileData,
|
|
209
|
-
stream
|
|
210
|
-
);
|
|
245
|
+
let modifiedParts = [...parts];
|
|
246
|
+
if (modifiedBeforePayload.text !== textContent && textParts.length > 0) {
|
|
247
|
+
modifiedParts = modifiedParts.filter((p) => p.type !== "text");
|
|
248
|
+
modifiedParts.unshift({ type: "text", text: modifiedBeforePayload.text });
|
|
249
|
+
}
|
|
250
|
+
const response = await this.llmService.stream(modifiedParts, { signal });
|
|
211
251
|
const llmConfig = this.services.stateManager.getLLMConfig(this.id);
|
|
212
252
|
const beforeResponsePayload = {
|
|
213
253
|
content: response,
|
|
214
254
|
provider: llmConfig.provider,
|
|
215
255
|
model: llmConfig.model,
|
|
216
|
-
router: llmConfig.router,
|
|
217
256
|
sessionId: this.id
|
|
218
257
|
};
|
|
219
258
|
const modifiedResponsePayload = await this.services.pluginManager.executePlugins(
|
|
@@ -237,16 +276,21 @@ class ChatSession {
|
|
|
237
276
|
context: "user_cancelled",
|
|
238
277
|
recoverable: true
|
|
239
278
|
});
|
|
279
|
+
try {
|
|
280
|
+
const history = await this.getHistory();
|
|
281
|
+
const lastAssistant = history.filter((m) => m.role === "assistant").pop();
|
|
282
|
+
if (lastAssistant && typeof lastAssistant.content === "string") {
|
|
283
|
+
return lastAssistant.content;
|
|
284
|
+
}
|
|
285
|
+
} catch {
|
|
286
|
+
this.logger.debug("Failed to retrieve partial response from history on cancel");
|
|
287
|
+
}
|
|
240
288
|
return "";
|
|
241
289
|
}
|
|
242
290
|
if (error instanceof DextoRuntimeError && error.code === PluginErrorCode.PLUGIN_BLOCKED_EXECUTION && error.scope === ErrorScope.PLUGIN && error.type === ErrorType.FORBIDDEN) {
|
|
291
|
+
const textContent = parts.filter((p) => p.type === "text").map((p) => p.text).join("\n");
|
|
243
292
|
try {
|
|
244
|
-
await this.saveBlockedInteraction(
|
|
245
|
-
input,
|
|
246
|
-
error.message,
|
|
247
|
-
imageDataInput,
|
|
248
|
-
fileDataInput
|
|
249
|
-
);
|
|
293
|
+
await this.saveBlockedInteraction(textContent, error.message);
|
|
250
294
|
this.logger.debug(
|
|
251
295
|
`ChatSession ${this.id}: Saved blocked interaction to history`
|
|
252
296
|
);
|
|
@@ -257,15 +301,27 @@ class ChatSession {
|
|
|
257
301
|
}
|
|
258
302
|
return error.message;
|
|
259
303
|
}
|
|
260
|
-
const errortype = error instanceof Error ? "object" : "string";
|
|
261
304
|
this.logger.error(
|
|
262
|
-
`Error in ChatSession.
|
|
305
|
+
`Error in ChatSession.stream: ${error instanceof Error ? error.message : String(error)}`
|
|
263
306
|
);
|
|
264
307
|
throw error;
|
|
265
308
|
} finally {
|
|
266
309
|
this.currentRunController = null;
|
|
267
310
|
}
|
|
268
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Combine multiple abort signals into one.
|
|
314
|
+
*/
|
|
315
|
+
combineSignals(signal1, signal2) {
|
|
316
|
+
const controller = new AbortController();
|
|
317
|
+
const onAbort = () => controller.abort();
|
|
318
|
+
signal1.addEventListener("abort", onAbort);
|
|
319
|
+
signal2.addEventListener("abort", onAbort);
|
|
320
|
+
if (signal1.aborted || signal2.aborted) {
|
|
321
|
+
controller.abort();
|
|
322
|
+
}
|
|
323
|
+
return controller.signal;
|
|
324
|
+
}
|
|
269
325
|
/**
|
|
270
326
|
* Retrieves the complete conversation history for this session.
|
|
271
327
|
*
|
|
@@ -336,11 +392,11 @@ class ChatSession {
|
|
|
336
392
|
/**
|
|
337
393
|
* Switches the LLM service for this session while preserving conversation history.
|
|
338
394
|
*
|
|
339
|
-
* This method creates a new LLM service with the specified configuration
|
|
395
|
+
* This method creates a new LLM service with the specified configuration,
|
|
340
396
|
* while maintaining the existing ContextManager and conversation history. This allows
|
|
341
397
|
* users to change AI models mid-conversation without losing context.
|
|
342
398
|
*
|
|
343
|
-
* @param newLLMConfig The new LLM configuration to use
|
|
399
|
+
* @param newLLMConfig The new LLM configuration to use
|
|
344
400
|
*
|
|
345
401
|
* @example
|
|
346
402
|
* ```typescript
|
|
@@ -349,16 +405,13 @@ class ChatSession {
|
|
|
349
405
|
* provider: 'openai',
|
|
350
406
|
* model: 'gpt-5',
|
|
351
407
|
* apiKey: process.env.OPENAI_API_KEY,
|
|
352
|
-
* router: 'in-built'
|
|
353
408
|
* });
|
|
354
409
|
* ```
|
|
355
410
|
*/
|
|
356
411
|
async switchLLM(newLLMConfig) {
|
|
357
412
|
try {
|
|
358
|
-
const router = newLLMConfig.router;
|
|
359
413
|
const newLLMService = createLLMService(
|
|
360
414
|
newLLMConfig,
|
|
361
|
-
router,
|
|
362
415
|
this.services.toolManager,
|
|
363
416
|
this.services.systemPromptManager,
|
|
364
417
|
this.historyProvider,
|
|
@@ -375,7 +428,6 @@ class ChatSession {
|
|
|
375
428
|
);
|
|
376
429
|
this.eventBus.emit("llm:switched", {
|
|
377
430
|
newConfig: newLLMConfig,
|
|
378
|
-
router,
|
|
379
431
|
historyRetained: true
|
|
380
432
|
});
|
|
381
433
|
} catch (error) {
|
|
@@ -416,8 +468,54 @@ class ChatSession {
|
|
|
416
468
|
this.eventBus.off(eventName, forwarder);
|
|
417
469
|
});
|
|
418
470
|
this.forwarders.clear();
|
|
471
|
+
if (this.tokenAccumulatorListener) {
|
|
472
|
+
this.eventBus.off("llm:response", this.tokenAccumulatorListener);
|
|
473
|
+
this.tokenAccumulatorListener = null;
|
|
474
|
+
}
|
|
419
475
|
this.logger.debug(`Session ${this.id} disposed successfully`);
|
|
420
476
|
}
|
|
477
|
+
/**
|
|
478
|
+
* Check if this session is currently processing a message.
|
|
479
|
+
* Returns true if a run is in progress and has not been aborted.
|
|
480
|
+
*/
|
|
481
|
+
isBusy() {
|
|
482
|
+
return this.currentRunController !== null && !this.currentRunController.signal.aborted;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Queue a message for processing when the session is busy.
|
|
486
|
+
* The message will be injected into the conversation when the current turn completes.
|
|
487
|
+
*
|
|
488
|
+
* @param message The user message to queue
|
|
489
|
+
* @returns Queue position and message ID
|
|
490
|
+
*/
|
|
491
|
+
queueMessage(message) {
|
|
492
|
+
return this.llmService.getMessageQueue().enqueue(message);
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Get all messages currently in the queue.
|
|
496
|
+
* @returns Array of queued messages
|
|
497
|
+
*/
|
|
498
|
+
getQueuedMessages() {
|
|
499
|
+
return this.llmService.getMessageQueue().getAll();
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Remove a queued message.
|
|
503
|
+
* @param id Message ID to remove
|
|
504
|
+
* @returns true if message was found and removed; false otherwise
|
|
505
|
+
*/
|
|
506
|
+
removeQueuedMessage(id) {
|
|
507
|
+
return this.llmService.getMessageQueue().remove(id);
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* Clear all queued messages.
|
|
511
|
+
* @returns Number of messages that were cleared
|
|
512
|
+
*/
|
|
513
|
+
clearMessageQueue() {
|
|
514
|
+
const queue = this.llmService.getMessageQueue();
|
|
515
|
+
const count = queue.pendingCount();
|
|
516
|
+
queue.clear();
|
|
517
|
+
return count;
|
|
518
|
+
}
|
|
421
519
|
/**
|
|
422
520
|
* Cancel the currently running turn for this session, if any.
|
|
423
521
|
* Returns true if a run was in progress and was signaled to abort.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
2
|
var SessionErrorCode = /* @__PURE__ */ ((SessionErrorCode2) => {
|
|
3
3
|
SessionErrorCode2["SESSION_NOT_FOUND"] = "session_not_found";
|
|
4
4
|
SessionErrorCode2["SESSION_INITIALIZATION_FAILED"] = "session_initialization_failed";
|
package/dist/session/errors.js
CHANGED