@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
|
@@ -24,47 +24,58 @@ module.exports = __toCommonJS(database_exports);
|
|
|
24
24
|
var import_types = require("../../logger/v2/types.cjs");
|
|
25
25
|
var import_errors = require("../errors.js");
|
|
26
26
|
class DatabaseHistoryProvider {
|
|
27
|
+
// Debounce window for batching updates
|
|
27
28
|
constructor(sessionId, database, logger) {
|
|
28
29
|
this.sessionId = sessionId;
|
|
29
30
|
this.database = database;
|
|
30
31
|
this.logger = logger.createChild(import_types.DextoLogComponent.SESSION);
|
|
31
32
|
}
|
|
32
33
|
logger;
|
|
34
|
+
// Cache state
|
|
35
|
+
cache = null;
|
|
36
|
+
dirty = false;
|
|
37
|
+
flushTimer = null;
|
|
38
|
+
flushPromise = null;
|
|
39
|
+
// Flush configuration
|
|
40
|
+
static FLUSH_DELAY_MS = 100;
|
|
33
41
|
async getHistory() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
if (this.cache === null) {
|
|
43
|
+
const key = this.getMessagesKey();
|
|
44
|
+
try {
|
|
45
|
+
this.cache = await this.database.getRange(key, 0, 1e4);
|
|
46
|
+
this.logger.debug(
|
|
47
|
+
`DatabaseHistoryProvider: Loaded ${this.cache.length} messages from DB for session ${this.sessionId}`
|
|
48
|
+
);
|
|
49
|
+
} catch (error) {
|
|
50
|
+
this.logger.error(
|
|
51
|
+
`DatabaseHistoryProvider: Error loading messages for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
52
|
+
);
|
|
53
|
+
throw import_errors.SessionError.storageFailed(
|
|
54
|
+
this.sessionId,
|
|
55
|
+
"load history",
|
|
56
|
+
error instanceof Error ? error.message : String(error)
|
|
57
|
+
);
|
|
58
|
+
}
|
|
46
59
|
}
|
|
60
|
+
return [...this.cache];
|
|
47
61
|
}
|
|
48
62
|
async saveMessage(message) {
|
|
49
63
|
const key = this.getMessagesKey();
|
|
64
|
+
if (this.cache === null) {
|
|
65
|
+
await this.getHistory();
|
|
66
|
+
}
|
|
67
|
+
this.cache.push(message);
|
|
50
68
|
try {
|
|
51
69
|
await this.database.append(key, message);
|
|
52
|
-
let contentPreview = "[no content]";
|
|
53
|
-
if (message.content) {
|
|
54
|
-
if (typeof message.content === "string") {
|
|
55
|
-
contentPreview = message.content.length > 100 ? `${message.content.substring(0, 100)}...` : message.content;
|
|
56
|
-
} else if (Array.isArray(message.content)) {
|
|
57
|
-
contentPreview = `[${message.content.length} parts]`;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
70
|
this.logger.debug(
|
|
61
71
|
`DatabaseHistoryProvider: Saved message for session ${this.sessionId}`,
|
|
62
72
|
{
|
|
63
73
|
role: message.role,
|
|
64
|
-
|
|
74
|
+
id: message.id
|
|
65
75
|
}
|
|
66
76
|
);
|
|
67
77
|
} catch (error) {
|
|
78
|
+
this.cache.pop();
|
|
68
79
|
this.logger.error(
|
|
69
80
|
`DatabaseHistoryProvider: Error saving message for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
70
81
|
);
|
|
@@ -75,7 +86,34 @@ class DatabaseHistoryProvider {
|
|
|
75
86
|
);
|
|
76
87
|
}
|
|
77
88
|
}
|
|
89
|
+
async updateMessage(message) {
|
|
90
|
+
if (!message.id) {
|
|
91
|
+
this.logger.warn(
|
|
92
|
+
`DatabaseHistoryProvider: Ignoring update for message without id in session ${this.sessionId}`
|
|
93
|
+
);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (this.cache === null) {
|
|
97
|
+
await this.getHistory();
|
|
98
|
+
}
|
|
99
|
+
const index = this.cache.findIndex((m) => m.id === message.id);
|
|
100
|
+
if (index !== -1) {
|
|
101
|
+
this.cache[index] = message;
|
|
102
|
+
this.dirty = true;
|
|
103
|
+
this.scheduleFlush();
|
|
104
|
+
this.logger.debug(
|
|
105
|
+
`DatabaseHistoryProvider: Updated message ${message.id} in cache for session ${this.sessionId}`
|
|
106
|
+
);
|
|
107
|
+
} else {
|
|
108
|
+
this.logger.warn(
|
|
109
|
+
`DatabaseHistoryProvider: Message ${message.id} not found for update in session ${this.sessionId}`
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
78
113
|
async clearHistory() {
|
|
114
|
+
this.cancelPendingFlush();
|
|
115
|
+
this.cache = [];
|
|
116
|
+
this.dirty = false;
|
|
79
117
|
const key = this.getMessagesKey();
|
|
80
118
|
try {
|
|
81
119
|
await this.database.delete(key);
|
|
@@ -92,6 +130,81 @@ class DatabaseHistoryProvider {
|
|
|
92
130
|
);
|
|
93
131
|
}
|
|
94
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Flush any pending updates to the database.
|
|
135
|
+
* Should be called at turn boundaries to ensure durability.
|
|
136
|
+
*/
|
|
137
|
+
async flush() {
|
|
138
|
+
if (this.flushPromise) {
|
|
139
|
+
await this.flushPromise;
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
this.cancelPendingFlush();
|
|
143
|
+
if (!this.dirty || !this.cache) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
this.flushPromise = this.doFlush();
|
|
147
|
+
try {
|
|
148
|
+
await this.flushPromise;
|
|
149
|
+
} finally {
|
|
150
|
+
this.flushPromise = null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Internal flush implementation.
|
|
155
|
+
* Writes entire cache to DB (delete + re-append all).
|
|
156
|
+
*/
|
|
157
|
+
async doFlush() {
|
|
158
|
+
if (!this.dirty || !this.cache) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const key = this.getMessagesKey();
|
|
162
|
+
const messageCount = this.cache.length;
|
|
163
|
+
try {
|
|
164
|
+
await this.database.delete(key);
|
|
165
|
+
for (const msg of this.cache) {
|
|
166
|
+
await this.database.append(key, msg);
|
|
167
|
+
}
|
|
168
|
+
if (!this.flushTimer) {
|
|
169
|
+
this.dirty = false;
|
|
170
|
+
}
|
|
171
|
+
this.logger.debug(
|
|
172
|
+
`DatabaseHistoryProvider: Flushed ${messageCount} messages to DB for session ${this.sessionId}`
|
|
173
|
+
);
|
|
174
|
+
} catch (error) {
|
|
175
|
+
this.logger.error(
|
|
176
|
+
`DatabaseHistoryProvider: Error flushing messages for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
177
|
+
);
|
|
178
|
+
throw import_errors.SessionError.storageFailed(
|
|
179
|
+
this.sessionId,
|
|
180
|
+
"flush messages",
|
|
181
|
+
error instanceof Error ? error.message : String(error)
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Schedule a debounced flush.
|
|
187
|
+
* Batches rapid updateMessage() calls into a single DB write.
|
|
188
|
+
*/
|
|
189
|
+
scheduleFlush() {
|
|
190
|
+
if (this.flushTimer) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
this.flushTimer = setTimeout(() => {
|
|
194
|
+
this.flushTimer = null;
|
|
195
|
+
this.doFlush().catch(() => {
|
|
196
|
+
});
|
|
197
|
+
}, DatabaseHistoryProvider.FLUSH_DELAY_MS);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Cancel any pending scheduled flush.
|
|
201
|
+
*/
|
|
202
|
+
cancelPendingFlush() {
|
|
203
|
+
if (this.flushTimer) {
|
|
204
|
+
clearTimeout(this.flushTimer);
|
|
205
|
+
this.flushTimer = null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
95
208
|
getMessagesKey() {
|
|
96
209
|
return `messages:${this.sessionId}`;
|
|
97
210
|
}
|
|
@@ -4,24 +4,53 @@ import type { InternalMessage } from '../../context/types.js';
|
|
|
4
4
|
import type { IConversationHistoryProvider } from './types.js';
|
|
5
5
|
/**
|
|
6
6
|
* History provider that works directly with DatabaseBackend.
|
|
7
|
-
*
|
|
7
|
+
* Uses write-through caching for read performance while maintaining durability.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
14
|
-
* -
|
|
15
|
-
*
|
|
9
|
+
* Caching strategy:
|
|
10
|
+
* - getHistory(): Returns cached messages after first load (eliminates repeated DB reads)
|
|
11
|
+
* - saveMessage(): Updates cache AND writes to DB immediately (new messages are critical)
|
|
12
|
+
* - updateMessage(): Updates cache immediately, debounces DB writes (batches rapid updates)
|
|
13
|
+
* - flush(): Forces all pending updates to DB (called at turn boundaries)
|
|
14
|
+
* - clearHistory(): Clears cache and DB immediately
|
|
15
|
+
*
|
|
16
|
+
* Durability guarantees:
|
|
17
|
+
* - New messages (saveMessage) are always immediately durable
|
|
18
|
+
* - Updates (updateMessage) are durable within flush interval or on explicit flush()
|
|
19
|
+
* - Worst case on crash: lose updates from last flush interval (typically <100ms)
|
|
16
20
|
*/
|
|
17
21
|
export declare class DatabaseHistoryProvider implements IConversationHistoryProvider {
|
|
18
22
|
private sessionId;
|
|
19
23
|
private database;
|
|
20
24
|
private logger;
|
|
25
|
+
private cache;
|
|
26
|
+
private dirty;
|
|
27
|
+
private flushTimer;
|
|
28
|
+
private flushPromise;
|
|
29
|
+
private static readonly FLUSH_DELAY_MS;
|
|
21
30
|
constructor(sessionId: string, database: Database, logger: IDextoLogger);
|
|
22
31
|
getHistory(): Promise<InternalMessage[]>;
|
|
23
32
|
saveMessage(message: InternalMessage): Promise<void>;
|
|
33
|
+
updateMessage(message: InternalMessage): Promise<void>;
|
|
24
34
|
clearHistory(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Flush any pending updates to the database.
|
|
37
|
+
* Should be called at turn boundaries to ensure durability.
|
|
38
|
+
*/
|
|
39
|
+
flush(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Internal flush implementation.
|
|
42
|
+
* Writes entire cache to DB (delete + re-append all).
|
|
43
|
+
*/
|
|
44
|
+
private doFlush;
|
|
45
|
+
/**
|
|
46
|
+
* Schedule a debounced flush.
|
|
47
|
+
* Batches rapid updateMessage() calls into a single DB write.
|
|
48
|
+
*/
|
|
49
|
+
private scheduleFlush;
|
|
50
|
+
/**
|
|
51
|
+
* Cancel any pending scheduled flush.
|
|
52
|
+
*/
|
|
53
|
+
private cancelPendingFlush;
|
|
25
54
|
private getMessagesKey;
|
|
26
55
|
}
|
|
27
56
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/session/history/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE/D
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/session/history/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,uBAAwB,YAAW,4BAA4B;IAapE,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAbpB,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,YAAY,CAA8B;IAGlD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAO;gBAGjC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,QAAQ,EAC1B,MAAM,EAAE,YAAY;IAKlB,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAyBxC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCpD,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCtD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BnC;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B;;;OAGG;YACW,OAAO;IAoCrB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,cAAc;CAGzB"}
|
|
@@ -1,48 +1,59 @@
|
|
|
1
|
-
import "../../chunk-
|
|
1
|
+
import "../../chunk-PTJYTZNU.js";
|
|
2
2
|
import { DextoLogComponent } from "../../logger/v2/types.js";
|
|
3
3
|
import { SessionError } from "../errors.js";
|
|
4
4
|
class DatabaseHistoryProvider {
|
|
5
|
+
// Debounce window for batching updates
|
|
5
6
|
constructor(sessionId, database, logger) {
|
|
6
7
|
this.sessionId = sessionId;
|
|
7
8
|
this.database = database;
|
|
8
9
|
this.logger = logger.createChild(DextoLogComponent.SESSION);
|
|
9
10
|
}
|
|
10
11
|
logger;
|
|
12
|
+
// Cache state
|
|
13
|
+
cache = null;
|
|
14
|
+
dirty = false;
|
|
15
|
+
flushTimer = null;
|
|
16
|
+
flushPromise = null;
|
|
17
|
+
// Flush configuration
|
|
18
|
+
static FLUSH_DELAY_MS = 100;
|
|
11
19
|
async getHistory() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
if (this.cache === null) {
|
|
21
|
+
const key = this.getMessagesKey();
|
|
22
|
+
try {
|
|
23
|
+
this.cache = await this.database.getRange(key, 0, 1e4);
|
|
24
|
+
this.logger.debug(
|
|
25
|
+
`DatabaseHistoryProvider: Loaded ${this.cache.length} messages from DB for session ${this.sessionId}`
|
|
26
|
+
);
|
|
27
|
+
} catch (error) {
|
|
28
|
+
this.logger.error(
|
|
29
|
+
`DatabaseHistoryProvider: Error loading messages for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
30
|
+
);
|
|
31
|
+
throw SessionError.storageFailed(
|
|
32
|
+
this.sessionId,
|
|
33
|
+
"load history",
|
|
34
|
+
error instanceof Error ? error.message : String(error)
|
|
35
|
+
);
|
|
36
|
+
}
|
|
24
37
|
}
|
|
38
|
+
return [...this.cache];
|
|
25
39
|
}
|
|
26
40
|
async saveMessage(message) {
|
|
27
41
|
const key = this.getMessagesKey();
|
|
42
|
+
if (this.cache === null) {
|
|
43
|
+
await this.getHistory();
|
|
44
|
+
}
|
|
45
|
+
this.cache.push(message);
|
|
28
46
|
try {
|
|
29
47
|
await this.database.append(key, message);
|
|
30
|
-
let contentPreview = "[no content]";
|
|
31
|
-
if (message.content) {
|
|
32
|
-
if (typeof message.content === "string") {
|
|
33
|
-
contentPreview = message.content.length > 100 ? `${message.content.substring(0, 100)}...` : message.content;
|
|
34
|
-
} else if (Array.isArray(message.content)) {
|
|
35
|
-
contentPreview = `[${message.content.length} parts]`;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
48
|
this.logger.debug(
|
|
39
49
|
`DatabaseHistoryProvider: Saved message for session ${this.sessionId}`,
|
|
40
50
|
{
|
|
41
51
|
role: message.role,
|
|
42
|
-
|
|
52
|
+
id: message.id
|
|
43
53
|
}
|
|
44
54
|
);
|
|
45
55
|
} catch (error) {
|
|
56
|
+
this.cache.pop();
|
|
46
57
|
this.logger.error(
|
|
47
58
|
`DatabaseHistoryProvider: Error saving message for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
48
59
|
);
|
|
@@ -53,7 +64,34 @@ class DatabaseHistoryProvider {
|
|
|
53
64
|
);
|
|
54
65
|
}
|
|
55
66
|
}
|
|
67
|
+
async updateMessage(message) {
|
|
68
|
+
if (!message.id) {
|
|
69
|
+
this.logger.warn(
|
|
70
|
+
`DatabaseHistoryProvider: Ignoring update for message without id in session ${this.sessionId}`
|
|
71
|
+
);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (this.cache === null) {
|
|
75
|
+
await this.getHistory();
|
|
76
|
+
}
|
|
77
|
+
const index = this.cache.findIndex((m) => m.id === message.id);
|
|
78
|
+
if (index !== -1) {
|
|
79
|
+
this.cache[index] = message;
|
|
80
|
+
this.dirty = true;
|
|
81
|
+
this.scheduleFlush();
|
|
82
|
+
this.logger.debug(
|
|
83
|
+
`DatabaseHistoryProvider: Updated message ${message.id} in cache for session ${this.sessionId}`
|
|
84
|
+
);
|
|
85
|
+
} else {
|
|
86
|
+
this.logger.warn(
|
|
87
|
+
`DatabaseHistoryProvider: Message ${message.id} not found for update in session ${this.sessionId}`
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
56
91
|
async clearHistory() {
|
|
92
|
+
this.cancelPendingFlush();
|
|
93
|
+
this.cache = [];
|
|
94
|
+
this.dirty = false;
|
|
57
95
|
const key = this.getMessagesKey();
|
|
58
96
|
try {
|
|
59
97
|
await this.database.delete(key);
|
|
@@ -70,6 +108,81 @@ class DatabaseHistoryProvider {
|
|
|
70
108
|
);
|
|
71
109
|
}
|
|
72
110
|
}
|
|
111
|
+
/**
|
|
112
|
+
* Flush any pending updates to the database.
|
|
113
|
+
* Should be called at turn boundaries to ensure durability.
|
|
114
|
+
*/
|
|
115
|
+
async flush() {
|
|
116
|
+
if (this.flushPromise) {
|
|
117
|
+
await this.flushPromise;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.cancelPendingFlush();
|
|
121
|
+
if (!this.dirty || !this.cache) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
this.flushPromise = this.doFlush();
|
|
125
|
+
try {
|
|
126
|
+
await this.flushPromise;
|
|
127
|
+
} finally {
|
|
128
|
+
this.flushPromise = null;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Internal flush implementation.
|
|
133
|
+
* Writes entire cache to DB (delete + re-append all).
|
|
134
|
+
*/
|
|
135
|
+
async doFlush() {
|
|
136
|
+
if (!this.dirty || !this.cache) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const key = this.getMessagesKey();
|
|
140
|
+
const messageCount = this.cache.length;
|
|
141
|
+
try {
|
|
142
|
+
await this.database.delete(key);
|
|
143
|
+
for (const msg of this.cache) {
|
|
144
|
+
await this.database.append(key, msg);
|
|
145
|
+
}
|
|
146
|
+
if (!this.flushTimer) {
|
|
147
|
+
this.dirty = false;
|
|
148
|
+
}
|
|
149
|
+
this.logger.debug(
|
|
150
|
+
`DatabaseHistoryProvider: Flushed ${messageCount} messages to DB for session ${this.sessionId}`
|
|
151
|
+
);
|
|
152
|
+
} catch (error) {
|
|
153
|
+
this.logger.error(
|
|
154
|
+
`DatabaseHistoryProvider: Error flushing messages for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
155
|
+
);
|
|
156
|
+
throw SessionError.storageFailed(
|
|
157
|
+
this.sessionId,
|
|
158
|
+
"flush messages",
|
|
159
|
+
error instanceof Error ? error.message : String(error)
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Schedule a debounced flush.
|
|
165
|
+
* Batches rapid updateMessage() calls into a single DB write.
|
|
166
|
+
*/
|
|
167
|
+
scheduleFlush() {
|
|
168
|
+
if (this.flushTimer) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
this.flushTimer = setTimeout(() => {
|
|
172
|
+
this.flushTimer = null;
|
|
173
|
+
this.doFlush().catch(() => {
|
|
174
|
+
});
|
|
175
|
+
}, DatabaseHistoryProvider.FLUSH_DELAY_MS);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Cancel any pending scheduled flush.
|
|
179
|
+
*/
|
|
180
|
+
cancelPendingFlush() {
|
|
181
|
+
if (this.flushTimer) {
|
|
182
|
+
clearTimeout(this.flushTimer);
|
|
183
|
+
this.flushTimer = null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
73
186
|
getMessagesKey() {
|
|
74
187
|
return `messages:${this.sessionId}`;
|
|
75
188
|
}
|
|
@@ -22,6 +22,9 @@ __export(memory_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(memory_exports);
|
|
24
24
|
class MemoryHistoryProvider {
|
|
25
|
+
constructor(logger) {
|
|
26
|
+
this.logger = logger;
|
|
27
|
+
}
|
|
25
28
|
messages = [];
|
|
26
29
|
async getHistory() {
|
|
27
30
|
return [...this.messages];
|
|
@@ -29,9 +32,24 @@ class MemoryHistoryProvider {
|
|
|
29
32
|
async saveMessage(message) {
|
|
30
33
|
this.messages.push(message);
|
|
31
34
|
}
|
|
35
|
+
async updateMessage(message) {
|
|
36
|
+
if (!message.id) {
|
|
37
|
+
this.logger.warn("MemoryHistoryProvider: Ignoring update for message without id");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const index = this.messages.findIndex((m) => m.id === message.id);
|
|
41
|
+
if (index !== -1) {
|
|
42
|
+
this.messages[index] = message;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
32
45
|
async clearHistory() {
|
|
33
46
|
this.messages = [];
|
|
34
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* No-op for in-memory provider - all operations are already "flushed".
|
|
50
|
+
*/
|
|
51
|
+
async flush() {
|
|
52
|
+
}
|
|
35
53
|
}
|
|
36
54
|
// Annotate the CommonJS export names for ESM import in node:
|
|
37
55
|
0 && (module.exports = {
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import type { InternalMessage } from '../../context/types.js';
|
|
2
2
|
import type { IConversationHistoryProvider } from './types.js';
|
|
3
|
+
import type { IDextoLogger } from '../../logger/v2/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Lightweight in-memory history provider for ephemeral, isolated LLM calls.
|
|
5
6
|
* Used to run background tasks (e.g., title generation) without touching
|
|
6
7
|
* the real session history or emitting history-related side effects.
|
|
7
8
|
*/
|
|
8
9
|
export declare class MemoryHistoryProvider implements IConversationHistoryProvider {
|
|
10
|
+
private logger;
|
|
9
11
|
private messages;
|
|
12
|
+
constructor(logger: IDextoLogger);
|
|
10
13
|
getHistory(): Promise<InternalMessage[]>;
|
|
11
14
|
saveMessage(message: InternalMessage): Promise<void>;
|
|
15
|
+
updateMessage(message: InternalMessage): Promise<void>;
|
|
12
16
|
clearHistory(): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* No-op for in-memory provider - all operations are already "flushed".
|
|
19
|
+
*/
|
|
20
|
+
flush(): Promise<void>;
|
|
13
21
|
}
|
|
14
22
|
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/session/history/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/session/history/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;GAIG;AACH,qBAAa,qBAAsB,YAAW,4BAA4B;IAG1D,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAyB;gBAErB,MAAM,EAAE,YAAY;IAElC,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAKxC,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import "../../chunk-
|
|
1
|
+
import "../../chunk-PTJYTZNU.js";
|
|
2
2
|
class MemoryHistoryProvider {
|
|
3
|
+
constructor(logger) {
|
|
4
|
+
this.logger = logger;
|
|
5
|
+
}
|
|
3
6
|
messages = [];
|
|
4
7
|
async getHistory() {
|
|
5
8
|
return [...this.messages];
|
|
@@ -7,9 +10,24 @@ class MemoryHistoryProvider {
|
|
|
7
10
|
async saveMessage(message) {
|
|
8
11
|
this.messages.push(message);
|
|
9
12
|
}
|
|
13
|
+
async updateMessage(message) {
|
|
14
|
+
if (!message.id) {
|
|
15
|
+
this.logger.warn("MemoryHistoryProvider: Ignoring update for message without id");
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const index = this.messages.findIndex((m) => m.id === message.id);
|
|
19
|
+
if (index !== -1) {
|
|
20
|
+
this.messages[index] = message;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
10
23
|
async clearHistory() {
|
|
11
24
|
this.messages = [];
|
|
12
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* No-op for in-memory provider - all operations are already "flushed".
|
|
28
|
+
*/
|
|
29
|
+
async flush() {
|
|
30
|
+
}
|
|
13
31
|
}
|
|
14
32
|
export {
|
|
15
33
|
MemoryHistoryProvider
|
|
@@ -2,13 +2,25 @@ import type { InternalMessage } from '../../context/types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Session-scoped conversation history provider.
|
|
4
4
|
* Each instance is tied to a specific session and manages only that session's messages.
|
|
5
|
+
*
|
|
6
|
+
* Implementations may use caching to optimize read performance. If caching is used,
|
|
7
|
+
* the flush() method should be called at turn boundaries to ensure all updates
|
|
8
|
+
* are persisted to durable storage.
|
|
5
9
|
*/
|
|
6
10
|
export interface IConversationHistoryProvider {
|
|
7
11
|
/** Load the full message history for this session */
|
|
8
12
|
getHistory(): Promise<InternalMessage[]>;
|
|
9
|
-
/** Append a message to this session's history */
|
|
13
|
+
/** Append a message to this session's history (must be durable immediately) */
|
|
10
14
|
saveMessage(message: InternalMessage): Promise<void>;
|
|
15
|
+
/** Update an existing message in this session's history (may be cached/batched) */
|
|
16
|
+
updateMessage(message: InternalMessage): Promise<void>;
|
|
11
17
|
/** Clear all messages for this session */
|
|
12
18
|
clearHistory(): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Flush any pending updates to durable storage.
|
|
21
|
+
* Called at turn boundaries to ensure data durability.
|
|
22
|
+
* Implementations without caching can make this a no-op.
|
|
23
|
+
*/
|
|
24
|
+
flush(): Promise<void>;
|
|
13
25
|
}
|
|
14
26
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/session/history/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/session/history/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;GAOG;AACH,MAAM,WAAW,4BAA4B;IACzC,qDAAqD;IACrD,UAAU,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAEzC,+EAA+E;IAC/E,WAAW,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,mFAAmF;IACnF,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD,0CAA0C;IAC1C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
package/dist/session/index.cjs
CHANGED
|
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
19
19
|
var session_exports = {};
|
|
20
20
|
__export(session_exports, {
|
|
21
21
|
ChatSession: () => import_chat_session.ChatSession,
|
|
22
|
+
MessageQueueService: () => import_message_queue.MessageQueueService,
|
|
22
23
|
SessionError: () => import_errors.SessionError,
|
|
23
24
|
SessionErrorCode: () => import_error_codes.SessionErrorCode,
|
|
24
25
|
SessionManager: () => import_session_manager.SessionManager
|
|
@@ -28,9 +29,11 @@ var import_chat_session = require("./chat-session.js");
|
|
|
28
29
|
var import_session_manager = require("./session-manager.js");
|
|
29
30
|
var import_error_codes = require("./error-codes.js");
|
|
30
31
|
var import_errors = require("./errors.js");
|
|
32
|
+
var import_message_queue = require("./message-queue.js");
|
|
31
33
|
// Annotate the CommonJS export names for ESM import in node:
|
|
32
34
|
0 && (module.exports = {
|
|
33
35
|
ChatSession,
|
|
36
|
+
MessageQueueService,
|
|
34
37
|
SessionError,
|
|
35
38
|
SessionErrorCode,
|
|
36
39
|
SessionManager
|
package/dist/session/index.d.ts
CHANGED
|
@@ -3,4 +3,7 @@ export { SessionManager } from './session-manager.js';
|
|
|
3
3
|
export type { SessionMetadata } from './session-manager.js';
|
|
4
4
|
export { SessionErrorCode } from './error-codes.js';
|
|
5
5
|
export { SessionError } from './errors.js';
|
|
6
|
+
export { MessageQueueService } from './message-queue.js';
|
|
7
|
+
export type { UserMessageInput } from './message-queue.js';
|
|
8
|
+
export type { QueuedMessage, CoalescedMessage } from './types.js';
|
|
6
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/session/index.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
2
|
import { ChatSession } from "./chat-session.js";
|
|
3
3
|
import { SessionManager } from "./session-manager.js";
|
|
4
4
|
import { SessionErrorCode } from "./error-codes.js";
|
|
5
5
|
import { SessionError } from "./errors.js";
|
|
6
|
+
import { MessageQueueService } from "./message-queue.js";
|
|
6
7
|
export {
|
|
7
8
|
ChatSession,
|
|
9
|
+
MessageQueueService,
|
|
8
10
|
SessionError,
|
|
9
11
|
SessionErrorCode,
|
|
10
12
|
SessionManager
|