@dexto/core 1.3.0 → 1.5.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 +53 -9
- package/dist/agent/DextoAgent.cjs +570 -210
- package/dist/agent/DextoAgent.d.ts +175 -35
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +568 -208
- 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.cjs +4 -1
- package/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +6 -2
- package/dist/agent/schemas.cjs +90 -68
- package/dist/agent/schemas.d.ts +5998 -146
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +90 -65
- 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 +234 -4
- package/dist/approval/manager.d.ts +131 -4
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +225 -5
- package/dist/approval/schemas.cjs +57 -7
- package/dist/approval/schemas.d.ts +344 -33
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +54 -8
- package/dist/approval/types.cjs +1 -0
- package/dist/approval/types.d.ts +32 -1
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +2 -1
- package/dist/{chunk-C6A6W6XS.js → chunk-PTJYTZNU.js} +44 -1
- package/dist/context/compaction/factory.cjs +57 -0
- package/dist/context/compaction/factory.d.ts +17 -0
- package/dist/context/compaction/factory.d.ts.map +1 -0
- package/dist/context/compaction/factory.js +34 -0
- package/dist/context/compaction/index.cjs +49 -0
- package/dist/context/compaction/index.d.ts +11 -0
- package/dist/context/compaction/index.d.ts.map +1 -0
- package/dist/context/compaction/index.js +19 -0
- package/dist/context/compaction/overflow.cjs +43 -0
- package/dist/context/compaction/overflow.d.ts +33 -0
- package/dist/context/compaction/overflow.d.ts.map +1 -0
- package/dist/context/compaction/overflow.js +19 -0
- package/dist/context/compaction/provider.cjs +16 -0
- package/dist/context/compaction/provider.d.ts +48 -0
- package/dist/context/compaction/provider.d.ts.map +1 -0
- package/dist/context/compaction/providers/noop-provider.cjs +48 -0
- package/dist/context/compaction/providers/noop-provider.d.ts +24 -0
- package/dist/context/compaction/providers/noop-provider.d.ts.map +1 -0
- package/dist/context/compaction/providers/noop-provider.js +24 -0
- package/dist/context/compaction/providers/reactive-overflow-provider.cjs +61 -0
- package/dist/context/compaction/providers/reactive-overflow-provider.d.ts +36 -0
- package/dist/context/compaction/providers/reactive-overflow-provider.d.ts.map +1 -0
- package/dist/context/compaction/providers/reactive-overflow-provider.js +37 -0
- package/dist/{llm/tokenizer/factory.cjs → context/compaction/registry.cjs} +15 -20
- package/dist/context/compaction/registry.d.ts +19 -0
- package/dist/context/compaction/registry.d.ts.map +1 -0
- package/dist/context/compaction/registry.js +16 -0
- package/dist/context/compaction/schemas.cjs +38 -0
- package/dist/context/compaction/schemas.d.ts +24 -0
- package/dist/context/compaction/schemas.d.ts.map +1 -0
- package/dist/context/compaction/schemas.js +14 -0
- package/dist/{llm/tokenizer/types.cjs → context/compaction/strategies/noop.cjs} +12 -9
- package/dist/context/compaction/strategies/noop.d.ts +18 -0
- package/dist/context/compaction/strategies/noop.d.ts.map +1 -0
- package/dist/context/compaction/strategies/noop.js +13 -0
- package/dist/context/compaction/strategies/reactive-overflow.cjs +201 -0
- package/dist/context/compaction/strategies/reactive-overflow.d.ts +81 -0
- package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +1 -0
- package/dist/context/compaction/strategies/reactive-overflow.js +178 -0
- package/dist/context/compaction/types.d.ts +20 -0
- package/dist/context/compaction/types.d.ts.map +1 -0
- package/dist/context/error-codes.cjs +7 -0
- package/dist/context/error-codes.d.ts +8 -1
- package/dist/context/error-codes.d.ts.map +1 -1
- package/dist/context/error-codes.js +8 -1
- package/dist/context/errors.cjs +68 -0
- package/dist/context/errors.d.ts +21 -0
- package/dist/context/errors.d.ts.map +1 -1
- package/dist/context/errors.js +69 -1
- package/dist/context/index.cjs +3 -1
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -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 +187 -72
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/types.js +35 -0
- package/dist/context/utils.cjs +293 -290
- package/dist/context/utils.d.ts +32 -18
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +293 -290
- 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.cjs +2 -3
- package/dist/errors/result-bridge.d.ts.map +1 -1
- package/dist/errors/result-bridge.js +3 -4
- 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.cjs +39 -0
- package/dist/filesystem/filesystem-service.d.ts +32 -0
- package/dist/filesystem/filesystem-service.d.ts.map +1 -1
- package/dist/filesystem/filesystem-service.js +40 -1
- package/dist/filesystem/index.d.ts +1 -1
- package/dist/filesystem/index.d.ts.map +1 -1
- package/dist/filesystem/index.js +1 -1
- package/dist/filesystem/path-validator.cjs +69 -1
- package/dist/filesystem/path-validator.d.ts +43 -2
- package/dist/filesystem/path-validator.d.ts.map +1 -1
- package/dist/filesystem/path-validator.js +70 -2
- package/dist/image/define-image.cjs +146 -0
- package/dist/image/define-image.d.ts +71 -0
- package/dist/image/define-image.d.ts.map +1 -0
- package/dist/image/define-image.js +121 -0
- package/dist/{llm/tokenizer/default.cjs → image/index.cjs} +10 -19
- package/dist/image/index.d.ts +53 -0
- package/dist/image/index.d.ts.map +1 -0
- package/dist/image/index.js +7 -0
- package/dist/image/types.d.ts +231 -0
- package/dist/image/types.d.ts.map +1 -0
- package/dist/image/types.js +0 -0
- 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.cjs +5 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/llm/error-codes.cjs +1 -1
- package/dist/llm/error-codes.d.ts +1 -1
- package/dist/llm/error-codes.d.ts.map +1 -1
- package/dist/llm/error-codes.js +2 -2
- package/dist/llm/errors.cjs +34 -10
- package/dist/llm/errors.d.ts +23 -11
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +36 -12
- package/dist/llm/executor/stream-processor.cjs +375 -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 +352 -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 +780 -0
- package/dist/llm/executor/turn-executor.d.ts +167 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -0
- package/dist/llm/executor/turn-executor.js +711 -0
- package/dist/llm/executor/types.cjs +16 -0
- package/dist/llm/executor/types.d.ts +27 -0
- package/dist/llm/executor/types.d.ts.map +1 -0
- package/dist/llm/executor/types.js +0 -0
- package/dist/llm/formatters/vercel.cjs +26 -188
- 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 +25 -187
- package/dist/llm/index.cjs +18 -1
- package/dist/llm/index.d.ts +2 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +14 -0
- package/dist/llm/providers/local/ai-sdk-adapter.cjs +308 -0
- package/dist/llm/providers/local/ai-sdk-adapter.d.ts +29 -0
- package/dist/llm/providers/local/ai-sdk-adapter.d.ts.map +1 -0
- package/dist/llm/providers/local/ai-sdk-adapter.js +278 -0
- package/dist/llm/providers/local/downloader.cjs +291 -0
- package/dist/llm/providers/local/downloader.d.ts +82 -0
- package/dist/llm/providers/local/downloader.d.ts.map +1 -0
- package/dist/llm/providers/local/downloader.js +251 -0
- package/dist/llm/providers/local/error-codes.cjs +57 -0
- package/dist/llm/providers/local/error-codes.d.ts +66 -0
- package/dist/llm/providers/local/error-codes.d.ts.map +1 -0
- package/dist/llm/providers/local/error-codes.js +34 -0
- package/dist/llm/providers/local/errors.cjs +240 -0
- package/dist/llm/providers/local/errors.d.ts +31 -0
- package/dist/llm/providers/local/errors.d.ts.map +1 -0
- package/dist/llm/providers/local/errors.js +217 -0
- package/dist/llm/providers/local/gpu-detector.cjs +214 -0
- package/dist/llm/providers/local/gpu-detector.d.ts +28 -0
- package/dist/llm/providers/local/gpu-detector.d.ts.map +1 -0
- package/dist/llm/providers/local/gpu-detector.js +178 -0
- package/dist/llm/providers/local/index.cjs +147 -0
- package/dist/llm/providers/local/index.d.ts +21 -0
- package/dist/llm/providers/local/index.d.ts.map +1 -0
- package/dist/llm/providers/local/index.js +126 -0
- package/dist/llm/providers/local/node-llama-provider.cjs +216 -0
- package/dist/llm/providers/local/node-llama-provider.d.ts +90 -0
- package/dist/llm/providers/local/node-llama-provider.d.ts.map +1 -0
- package/dist/llm/providers/local/node-llama-provider.js +176 -0
- package/dist/llm/providers/local/ollama-provider.cjs +230 -0
- package/dist/llm/providers/local/ollama-provider.d.ts +70 -0
- package/dist/llm/providers/local/ollama-provider.d.ts.map +1 -0
- package/dist/llm/providers/local/ollama-provider.js +198 -0
- package/dist/llm/providers/local/registry.cjs +343 -0
- package/dist/llm/providers/local/registry.d.ts +51 -0
- package/dist/llm/providers/local/registry.d.ts.map +1 -0
- package/dist/llm/providers/local/registry.js +312 -0
- package/dist/llm/providers/local/schemas.cjs +169 -0
- package/dist/llm/providers/local/schemas.d.ts +395 -0
- package/dist/llm/providers/local/schemas.d.ts.map +1 -0
- package/dist/llm/providers/local/schemas.js +133 -0
- package/dist/llm/providers/local/types.cjs +16 -0
- package/dist/llm/providers/local/types.d.ts +219 -0
- package/dist/llm/providers/local/types.d.ts.map +1 -0
- package/dist/llm/providers/local/types.js +0 -0
- package/dist/llm/providers/openrouter-model-registry.cjs +350 -0
- package/dist/llm/providers/openrouter-model-registry.d.ts +120 -0
- package/dist/llm/providers/openrouter-model-registry.d.ts.map +1 -0
- package/dist/llm/providers/openrouter-model-registry.js +309 -0
- package/dist/llm/registry.cjs +569 -52
- package/dist/llm/registry.d.ts +79 -39
- package/dist/llm/registry.d.ts.map +1 -1
- package/dist/llm/registry.js +564 -49
- package/dist/llm/resolver.cjs +62 -34
- package/dist/llm/resolver.d.ts +3 -3
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +69 -38
- package/dist/llm/schemas.cjs +92 -97
- package/dist/llm/schemas.d.ts +162 -39
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +93 -100
- package/dist/llm/services/factory.cjs +88 -103
- package/dist/llm/services/factory.d.ts +17 -4
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +87 -93
- package/dist/llm/services/test-utils.integration.cjs +28 -10
- package/dist/llm/services/test-utils.integration.d.ts +7 -1
- package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
- package/dist/llm/services/test-utils.integration.js +33 -12
- 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 +58 -469
- package/dist/llm/services/vercel.d.ts +39 -21
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +60 -476
- package/dist/llm/types.cjs +11 -4
- package/dist/llm/types.d.ts +9 -9
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +12 -4
- 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 +12 -0
- package/dist/mcp/manager.d.ts +17 -0
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +13 -1
- package/dist/mcp/mcp-client.cjs +0 -3
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +1 -4
- 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 +3 -3
- 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.cjs +3 -0
- package/dist/plugins/error-codes.d.ts +7 -1
- package/dist/plugins/error-codes.d.ts.map +1 -1
- package/dist/plugins/error-codes.js +4 -1
- package/dist/plugins/index.cjs +7 -0
- package/dist/plugins/index.d.ts +4 -2
- package/dist/plugins/index.d.ts.map +1 -1
- package/dist/plugins/index.js +7 -2
- package/dist/plugins/loader.js +1 -1
- package/dist/plugins/manager.cjs +92 -7
- package/dist/plugins/manager.d.ts +10 -3
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +93 -8
- package/dist/plugins/registrations/builtins.js +1 -1
- package/dist/plugins/registry.cjs +63 -0
- package/dist/plugins/registry.d.ts +101 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +39 -0
- package/dist/plugins/schemas.cjs +17 -5
- package/dist/plugins/schemas.d.ts +65 -8
- package/dist/plugins/schemas.d.ts.map +1 -1
- package/dist/plugins/schemas.js +16 -5
- 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/providers/base-registry.cjs +147 -0
- package/dist/providers/base-registry.d.ts +147 -0
- package/dist/providers/base-registry.d.ts.map +1 -0
- package/dist/providers/base-registry.js +123 -0
- package/dist/providers/discovery.cjs +95 -0
- package/dist/providers/discovery.d.ts +94 -0
- package/dist/providers/discovery.d.ts.map +1 -0
- package/dist/providers/discovery.js +70 -0
- package/dist/providers/index.cjs +24 -0
- package/dist/providers/index.d.ts +32 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +2 -0
- 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.cjs +3 -3
- package/dist/resources/reference-parser.d.ts.map +1 -1
- package/dist/resources/reference-parser.js +4 -4
- 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 +169 -54
- 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 +171 -56
- 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.cjs +8 -11
- package/dist/storage/blob/factory.d.ts +32 -6
- package/dist/storage/blob/factory.d.ts.map +1 -1
- package/dist/storage/blob/factory.js +9 -12
- package/dist/storage/blob/index.cjs +56 -0
- package/dist/storage/blob/index.d.ts +45 -0
- package/dist/storage/blob/index.d.ts.map +1 -0
- package/dist/storage/blob/index.js +30 -0
- package/dist/storage/blob/local-blob-store.js +1 -1
- package/dist/storage/blob/memory-blob-store.js +1 -1
- package/dist/storage/blob/provider.cjs +16 -0
- package/dist/storage/blob/provider.d.ts +50 -0
- package/dist/storage/blob/provider.d.ts.map +1 -0
- package/dist/storage/blob/provider.js +0 -0
- package/dist/storage/blob/providers/index.cjs +31 -0
- package/dist/storage/blob/providers/index.d.ts +8 -0
- package/dist/storage/blob/providers/index.d.ts.map +1 -0
- package/dist/storage/blob/providers/index.js +7 -0
- package/dist/storage/blob/providers/local.cjs +39 -0
- package/dist/storage/blob/providers/local.d.ts +17 -0
- package/dist/storage/blob/providers/local.d.ts.map +1 -0
- package/dist/storage/blob/providers/local.js +16 -0
- package/dist/storage/blob/providers/memory.cjs +39 -0
- package/dist/storage/blob/providers/memory.d.ts +17 -0
- package/dist/storage/blob/providers/memory.d.ts.map +1 -0
- package/dist/storage/blob/providers/memory.js +16 -0
- package/dist/storage/blob/registry.cjs +50 -0
- package/dist/storage/blob/registry.d.ts +42 -0
- package/dist/storage/blob/registry.d.ts.map +1 -0
- package/dist/storage/blob/registry.js +26 -0
- package/dist/storage/blob/schemas.cjs +9 -12
- package/dist/storage/blob/schemas.d.ts +39 -34
- package/dist/storage/blob/schemas.d.ts.map +1 -1
- package/dist/storage/blob/schemas.js +7 -12
- package/dist/storage/cache/factory.cjs +8 -36
- package/dist/storage/cache/factory.d.ts +32 -7
- package/dist/storage/cache/factory.d.ts.map +1 -1
- package/dist/storage/cache/factory.js +9 -27
- package/dist/storage/cache/index.cjs +53 -0
- package/dist/storage/cache/index.d.ts +44 -0
- package/dist/storage/cache/index.d.ts.map +1 -0
- package/dist/storage/cache/index.js +28 -0
- package/dist/storage/cache/memory-cache-store.js +1 -1
- package/dist/storage/cache/provider.cjs +16 -0
- package/dist/storage/cache/provider.d.ts +56 -0
- package/dist/storage/cache/provider.d.ts.map +1 -0
- package/dist/storage/cache/provider.js +0 -0
- package/dist/storage/cache/providers/index.cjs +31 -0
- package/dist/storage/cache/providers/index.d.ts +8 -0
- package/dist/storage/cache/providers/index.d.ts.map +1 -0
- package/dist/storage/cache/providers/index.js +7 -0
- package/dist/storage/cache/providers/memory.cjs +40 -0
- package/dist/storage/cache/providers/memory.d.ts +17 -0
- package/dist/storage/cache/providers/memory.d.ts.map +1 -0
- package/dist/storage/cache/providers/memory.js +17 -0
- package/dist/storage/cache/providers/redis.cjs +66 -0
- package/dist/storage/cache/providers/redis.d.ts +20 -0
- package/dist/storage/cache/providers/redis.d.ts.map +1 -0
- package/dist/storage/cache/providers/redis.js +33 -0
- package/dist/storage/cache/redis-store.js +1 -1
- package/dist/{llm/tokenizer/google.cjs → storage/cache/registry.cjs} +23 -25
- package/dist/storage/cache/registry.d.ts +42 -0
- package/dist/storage/cache/registry.d.ts.map +1 -0
- package/dist/storage/cache/registry.js +26 -0
- package/dist/storage/cache/schemas.cjs +6 -2
- package/dist/storage/cache/schemas.d.ts +2 -3
- package/dist/storage/cache/schemas.d.ts.map +1 -1
- package/dist/storage/cache/schemas.js +4 -2
- package/dist/storage/database/factory.cjs +8 -47
- package/dist/storage/database/factory.d.ts +34 -8
- package/dist/storage/database/factory.d.ts.map +1 -1
- package/dist/storage/database/factory.js +9 -38
- package/dist/storage/database/index.cjs +58 -0
- package/dist/storage/database/index.d.ts +45 -0
- package/dist/storage/database/index.d.ts.map +1 -0
- package/dist/storage/database/index.js +37 -0
- 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/provider.cjs +16 -0
- package/dist/storage/database/provider.d.ts +56 -0
- package/dist/storage/database/provider.d.ts.map +1 -0
- package/dist/storage/database/provider.js +0 -0
- package/dist/storage/database/providers/index.cjs +34 -0
- package/dist/storage/database/providers/index.d.ts +9 -0
- package/dist/storage/database/providers/index.d.ts.map +1 -0
- package/dist/storage/database/providers/index.js +9 -0
- package/dist/storage/database/providers/memory.cjs +40 -0
- package/dist/storage/database/providers/memory.d.ts +16 -0
- package/dist/storage/database/providers/memory.d.ts.map +1 -0
- package/dist/storage/database/providers/memory.js +17 -0
- package/dist/storage/database/providers/postgres.cjs +62 -0
- package/dist/storage/database/providers/postgres.d.ts +19 -0
- package/dist/storage/database/providers/postgres.d.ts.map +1 -0
- package/dist/storage/database/providers/postgres.js +29 -0
- package/dist/storage/database/providers/sqlite.cjs +66 -0
- package/dist/storage/database/providers/sqlite.d.ts +20 -0
- package/dist/storage/database/providers/sqlite.d.ts.map +1 -0
- package/dist/storage/database/providers/sqlite.js +33 -0
- package/dist/storage/database/registry.cjs +50 -0
- package/dist/storage/database/registry.d.ts +42 -0
- package/dist/storage/database/registry.d.ts.map +1 -0
- package/dist/storage/database/registry.js +26 -0
- package/dist/storage/database/schemas.cjs +8 -2
- package/dist/storage/database/schemas.d.ts +3 -4
- package/dist/storage/database/schemas.d.ts.map +1 -1
- package/dist/storage/database/schemas.js +5 -2
- package/dist/storage/database/sqlite-store.js +1 -1
- package/dist/storage/error-codes.cjs +6 -0
- package/dist/storage/error-codes.d.ts +7 -1
- package/dist/storage/error-codes.d.ts.map +1 -1
- package/dist/storage/error-codes.js +7 -1
- package/dist/storage/errors.cjs +80 -0
- package/dist/storage/errors.d.ts +24 -0
- package/dist/storage/errors.d.ts.map +1 -1
- package/dist/storage/errors.js +81 -1
- package/dist/storage/index.cjs +47 -4
- package/dist/storage/index.d.ts +34 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +33 -4
- package/dist/storage/schemas.cjs +4 -0
- package/dist/storage/schemas.d.ts +17 -50
- package/dist/storage/schemas.d.ts.map +1 -1
- package/dist/storage/schemas.js +6 -2
- package/dist/storage/storage-manager.cjs +6 -6
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +4 -4
- 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.cjs +7 -6
- package/dist/systemPrompt/in-built-prompts.d.ts +2 -2
- package/dist/systemPrompt/in-built-prompts.d.ts.map +1 -1
- package/dist/systemPrompt/in-built-prompts.js +7 -6
- package/dist/systemPrompt/index.js +1 -1
- package/dist/systemPrompt/manager.js +1 -1
- package/dist/systemPrompt/registry.cjs +2 -2
- package/dist/systemPrompt/registry.d.ts +1 -1
- package/dist/systemPrompt/registry.d.ts.map +1 -1
- package/dist/systemPrompt/registry.js +3 -3
- package/dist/systemPrompt/schemas.cjs +2 -2
- package/dist/systemPrompt/schemas.d.ts +18 -18
- package/dist/systemPrompt/schemas.js +3 -3
- 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/custom-tool-registry.cjs +64 -0
- package/dist/tools/custom-tool-registry.d.ts +120 -0
- package/dist/tools/custom-tool-registry.d.ts.map +1 -0
- package/dist/tools/custom-tool-registry.js +40 -0
- package/dist/tools/custom-tool-schema-registry.cjs +164 -0
- package/dist/tools/custom-tool-schema-registry.d.ts +86 -0
- package/dist/tools/custom-tool-schema-registry.d.ts.map +1 -0
- package/dist/tools/custom-tool-schema-registry.js +140 -0
- 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 +5 -0
- package/dist/tools/error-codes.d.ts +6 -1
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +6 -1
- package/dist/tools/errors.cjs +71 -0
- package/dist/tools/errors.d.ts +33 -0
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +72 -1
- package/dist/tools/index.cjs +15 -1
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +13 -2
- package/dist/tools/internal-tools/constants.cjs +3 -9
- package/dist/tools/internal-tools/constants.d.ts +1 -1
- package/dist/tools/internal-tools/constants.d.ts.map +1 -1
- package/dist/tools/internal-tools/constants.js +4 -10
- 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/delegate-to-url-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/get-resource-tool.cjs +113 -0
- package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts +30 -0
- package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/get-resource-tool.js +90 -0
- package/dist/tools/internal-tools/implementations/list-resources-tool.cjs +91 -0
- package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts +24 -0
- package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/list-resources-tool.js +68 -0
- package/dist/tools/internal-tools/implementations/search-history-tool.js +1 -1
- package/dist/tools/internal-tools/provider.cjs +175 -31
- package/dist/tools/internal-tools/provider.d.ts +62 -14
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +176 -32
- package/dist/tools/internal-tools/registry.cjs +19 -43
- package/dist/tools/internal-tools/registry.d.ts +32 -11
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +20 -44
- package/dist/tools/schemas.cjs +36 -6
- package/dist/tools/schemas.d.ts +74 -5
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +30 -6
- package/dist/tools/tool-manager.cjs +279 -30
- package/dist/tools/tool-manager.d.ts +45 -4
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +284 -31
- package/dist/tools/types.d.ts +63 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.cjs +19 -1
- package/dist/utils/api-key-resolver.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +20 -2
- package/dist/utils/async-context.js +1 -1
- package/dist/utils/debug.js +1 -1
- package/dist/{llm/tokenizer/anthropic.cjs → utils/defer.cjs} +19 -20
- 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/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 -3
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/path.js +1 -1
- package/dist/utils/redactor.cjs +18 -3
- package/dist/utils/redactor.d.ts +0 -7
- package/dist/utils/redactor.d.ts.map +1 -1
- package/dist/utils/redactor.js +19 -4
- 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 +15 -37
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +16 -38
- package/dist/utils/user-info.js +1 -1
- package/dist/utils/zod-schema-converter.js +1 -1
- package/package.json +10 -8
- 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/context/compression/types.d.ts +0 -18
- package/dist/context/compression/types.d.ts.map +0 -1
- 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.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.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.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/tools/internal-tools/implementations/bash-exec-tool.cjs +0 -106
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts +0 -13
- package/dist/tools/internal-tools/implementations/bash-exec-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/bash-exec-tool.js +0 -73
- package/dist/tools/internal-tools/implementations/bash-output-tool.cjs +0 -49
- package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/bash-output-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/bash-output-tool.js +0 -26
- package/dist/tools/internal-tools/implementations/edit-file-tool.cjs +0 -62
- package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/edit-file-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/edit-file-tool.js +0 -39
- package/dist/tools/internal-tools/implementations/glob-files-tool.cjs +0 -57
- package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/glob-files-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/glob-files-tool.js +0 -34
- package/dist/tools/internal-tools/implementations/grep-content-tool.cjs +0 -71
- package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/grep-content-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/grep-content-tool.js +0 -48
- package/dist/tools/internal-tools/implementations/kill-process-tool.cjs +0 -47
- package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/kill-process-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/kill-process-tool.js +0 -24
- package/dist/tools/internal-tools/implementations/read-file-tool.cjs +0 -55
- package/dist/tools/internal-tools/implementations/read-file-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/read-file-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/read-file-tool.js +0 -32
- package/dist/tools/internal-tools/implementations/write-file-tool.cjs +0 -56
- package/dist/tools/internal-tools/implementations/write-file-tool.d.ts +0 -12
- package/dist/tools/internal-tools/implementations/write-file-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/write-file-tool.js +0 -33
- package/dist/utils/env-file.cjs +0 -118
- package/dist/utils/env-file.d.ts +0 -5
- package/dist/utils/env-file.d.ts.map +0 -1
- package/dist/utils/env-file.js +0 -85
- /package/dist/context/{compression/types.js → compaction/provider.js} +0 -0
- /package/dist/context/{compression → compaction}/types.cjs +0 -0
- /package/dist/{llm/formatters → context/compaction}/types.js +0 -0
- /package/dist/{llm/formatters → image}/types.cjs +0 -0
package/dist/context/manager.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
2
|
import { randomUUID } from "crypto";
|
|
3
|
-
import {
|
|
4
|
-
import { OldestRemovalStrategy } from "./compression/oldest-removal.js";
|
|
3
|
+
import { isSystemMessage, isUserMessage, isAssistantMessage, isToolMessage } from "./types.js";
|
|
5
4
|
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
6
5
|
import { eventBus } from "../events/index.js";
|
|
7
|
-
import {
|
|
8
|
-
countMessagesTokens,
|
|
9
|
-
sanitizeToolResult,
|
|
10
|
-
expandBlobReferences,
|
|
11
|
-
isLikelyBase64String
|
|
12
|
-
} from "./utils.js";
|
|
6
|
+
import { expandBlobReferences, isLikelyBase64String, filterCompacted } from "./utils.js";
|
|
13
7
|
import { ContextError } from "./errors.js";
|
|
14
8
|
class ContextManager {
|
|
15
9
|
/**
|
|
@@ -28,27 +22,6 @@ class ContextManager {
|
|
|
28
22
|
* Maximum number of tokens allowed in the conversation (if specified)
|
|
29
23
|
*/
|
|
30
24
|
maxInputTokens;
|
|
31
|
-
/**
|
|
32
|
-
* Actual token count from the last LLM response.
|
|
33
|
-
* Used for more accurate token estimation in hybrid approach.
|
|
34
|
-
*/
|
|
35
|
-
lastActualTokenCount = 0;
|
|
36
|
-
/**
|
|
37
|
-
* Compression threshold as a percentage of maxInputTokens.
|
|
38
|
-
* When estimated tokens exceed (maxInputTokens * threshold), compression is triggered.
|
|
39
|
-
*/
|
|
40
|
-
compressionThreshold = 0.8;
|
|
41
|
-
// 80% threshold
|
|
42
|
-
/**
|
|
43
|
-
* Tokenizer used for counting tokens and enabling compression (if specified)
|
|
44
|
-
*/
|
|
45
|
-
tokenizer;
|
|
46
|
-
/**
|
|
47
|
-
* The sequence of compression strategies to apply when maxInputTokens is exceeded.
|
|
48
|
-
* The order in this array matters, as strategies are applied sequentially until
|
|
49
|
-
* the token count is within the limit.
|
|
50
|
-
*/
|
|
51
|
-
compressionStrategies;
|
|
52
25
|
historyProvider;
|
|
53
26
|
sessionId;
|
|
54
27
|
/**
|
|
@@ -63,26 +36,19 @@ class ContextManager {
|
|
|
63
36
|
* @param llmConfig The validated LLM configuration.
|
|
64
37
|
* @param formatter Formatter implementation for the target LLM provider
|
|
65
38
|
* @param systemPromptManager SystemPromptManager instance for the conversation
|
|
66
|
-
* @param maxInputTokens Maximum token limit for the conversation history.
|
|
67
|
-
* @param tokenizer Tokenizer implementation used for counting tokens and enabling compression.
|
|
39
|
+
* @param maxInputTokens Maximum token limit for the conversation history.
|
|
68
40
|
* @param historyProvider Session-scoped ConversationHistoryProvider instance for managing conversation history
|
|
69
41
|
* @param sessionId Unique identifier for the conversation session (readonly, for debugging)
|
|
70
|
-
* @param
|
|
71
|
-
* @param resourceManager Optional ResourceManager for resolving blob references in messages
|
|
42
|
+
* @param resourceManager ResourceManager for resolving blob references in messages
|
|
72
43
|
* @param logger Logger instance for logging
|
|
73
44
|
*/
|
|
74
|
-
constructor(llmConfig, formatter, systemPromptManager, maxInputTokens,
|
|
75
|
-
new MiddleRemovalStrategy({}, logger),
|
|
76
|
-
new OldestRemovalStrategy({}, logger)
|
|
77
|
-
]) {
|
|
45
|
+
constructor(llmConfig, formatter, systemPromptManager, maxInputTokens, historyProvider, sessionId, resourceManager, logger) {
|
|
78
46
|
this.llmConfig = llmConfig;
|
|
79
47
|
this.formatter = formatter;
|
|
80
48
|
this.systemPromptManager = systemPromptManager;
|
|
81
49
|
this.maxInputTokens = maxInputTokens;
|
|
82
|
-
this.tokenizer = tokenizer;
|
|
83
50
|
this.historyProvider = historyProvider;
|
|
84
51
|
this.sessionId = sessionId;
|
|
85
|
-
this.compressionStrategies = compressionStrategies;
|
|
86
52
|
this.resourceManager = resourceManager;
|
|
87
53
|
this.logger = logger.createChild(DextoLogComponent.CONTEXT);
|
|
88
54
|
this.logger.debug(
|
|
@@ -149,117 +115,177 @@ class ContextManager {
|
|
|
149
115
|
return data;
|
|
150
116
|
}
|
|
151
117
|
/**
|
|
152
|
-
* Returns the
|
|
153
|
-
* @returns Promise that resolves to the number of tokens in the current history
|
|
118
|
+
* Returns the configured maximum number of input tokens for the conversation.
|
|
154
119
|
*/
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
120
|
+
getMaxInputTokens() {
|
|
121
|
+
return this.maxInputTokens;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Assembles and returns the current system prompt by invoking the SystemPromptManager.
|
|
125
|
+
*/
|
|
126
|
+
async getSystemPrompt(context) {
|
|
127
|
+
const prompt = await this.systemPromptManager.build(context);
|
|
128
|
+
this.logger.debug(`[SystemPrompt] Built system prompt:
|
|
129
|
+
${prompt}`);
|
|
130
|
+
return prompt;
|
|
158
131
|
}
|
|
159
132
|
/**
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* This provides a more accurate estimate than getTokenCount() alone.
|
|
133
|
+
* Gets the raw conversation history
|
|
134
|
+
* Returns a defensive copy to prevent modification
|
|
163
135
|
*
|
|
164
|
-
* @
|
|
165
|
-
* @returns Promise that resolves to the total number of tokens that will be sent to the provider
|
|
136
|
+
* @returns Promise that resolves to a read-only copy of the conversation history
|
|
166
137
|
*/
|
|
167
|
-
async
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
let history = await this.historyProvider.getHistory();
|
|
171
|
-
const systemPromptTokens = this.tokenizer.countTokens(systemPrompt);
|
|
172
|
-
history = await this.compressHistoryIfNeeded(history, systemPromptTokens);
|
|
173
|
-
const historyTokens = countMessagesTokens(
|
|
174
|
-
history,
|
|
175
|
-
this.tokenizer,
|
|
176
|
-
void 0,
|
|
177
|
-
this.logger
|
|
178
|
-
);
|
|
179
|
-
const formattingOverhead = Math.ceil((systemPromptTokens + historyTokens) * 0.05);
|
|
180
|
-
const totalTokens = systemPromptTokens + historyTokens + formattingOverhead;
|
|
181
|
-
this.logger.debug(
|
|
182
|
-
`Token breakdown - System: ${systemPromptTokens}, History: ${historyTokens}, Overhead: ${formattingOverhead}, Total: ${totalTokens}`
|
|
183
|
-
);
|
|
184
|
-
return totalTokens;
|
|
185
|
-
} catch (error) {
|
|
186
|
-
this.logger.error(
|
|
187
|
-
`Error calculating total token count: ${error instanceof Error ? error.message : String(error)}`,
|
|
188
|
-
{ error }
|
|
189
|
-
);
|
|
190
|
-
return this.getTokenCount();
|
|
191
|
-
}
|
|
138
|
+
async getHistory() {
|
|
139
|
+
const history = await this.historyProvider.getHistory();
|
|
140
|
+
return [...history];
|
|
192
141
|
}
|
|
193
142
|
/**
|
|
194
|
-
*
|
|
143
|
+
* Flush any pending history updates to durable storage.
|
|
144
|
+
* Should be called at turn boundaries (after streaming completes, on cancel, on error).
|
|
145
|
+
* This ensures all message updates are persisted before returning control to the caller.
|
|
195
146
|
*/
|
|
196
|
-
|
|
197
|
-
|
|
147
|
+
async flush() {
|
|
148
|
+
await this.historyProvider.flush();
|
|
198
149
|
}
|
|
199
150
|
/**
|
|
200
|
-
*
|
|
201
|
-
* This is called when DextoAgent.switchLLM() updates the LLM configuration.
|
|
151
|
+
* Clears the context window without deleting history.
|
|
202
152
|
*
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
153
|
+
* This adds a "context clear" marker to the conversation history. When the
|
|
154
|
+
* context is loaded for LLM via getFormattedMessagesWithCompression(),
|
|
155
|
+
* filterCompacted() excludes all messages before this marker.
|
|
156
|
+
*
|
|
157
|
+
* The full history remains in the database for review via /resume or session history.
|
|
206
158
|
*/
|
|
207
|
-
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
);
|
|
159
|
+
async clearContext() {
|
|
160
|
+
const clearMarker = {
|
|
161
|
+
id: `clear-${Date.now()}`,
|
|
162
|
+
role: "assistant",
|
|
163
|
+
content: [{ type: "text", text: "[Context cleared]" }],
|
|
164
|
+
timestamp: Date.now(),
|
|
165
|
+
metadata: {
|
|
166
|
+
isSummary: true,
|
|
167
|
+
clearedAt: Date.now()
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
await this.addMessage(clearMarker);
|
|
171
|
+
this.logger.debug(`Context cleared for session: ${this.sessionId}`);
|
|
219
172
|
}
|
|
220
173
|
/**
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
* @param actualTokens The actual token count reported by the LLM provider
|
|
174
|
+
* Appends text to an existing assistant message.
|
|
175
|
+
* Used for streaming responses.
|
|
225
176
|
*/
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
177
|
+
async appendAssistantText(messageId, text) {
|
|
178
|
+
const history = await this.historyProvider.getHistory();
|
|
179
|
+
const messageIndex = history.findIndex((m) => m.id === messageId);
|
|
180
|
+
if (messageIndex === -1) {
|
|
181
|
+
throw ContextError.messageNotFound(messageId);
|
|
182
|
+
}
|
|
183
|
+
const message = history[messageIndex];
|
|
184
|
+
if (!message) {
|
|
185
|
+
throw ContextError.messageNotFound(messageId);
|
|
186
|
+
}
|
|
187
|
+
if (message.role !== "assistant") {
|
|
188
|
+
throw ContextError.messageNotAssistant(messageId);
|
|
189
|
+
}
|
|
190
|
+
if (message.content === null) {
|
|
191
|
+
message.content = [{ type: "text", text }];
|
|
192
|
+
} else if (Array.isArray(message.content)) {
|
|
193
|
+
const lastPart = message.content[message.content.length - 1];
|
|
194
|
+
if (lastPart && lastPart.type === "text") {
|
|
195
|
+
lastPart.text += text;
|
|
196
|
+
} else {
|
|
197
|
+
message.content.push({ type: "text", text });
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
await this.historyProvider.updateMessage(message);
|
|
229
201
|
}
|
|
230
202
|
/**
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
* @param newInputTokens Estimated tokens for the new user input
|
|
235
|
-
* @returns True if compression should be triggered
|
|
203
|
+
* Adds a tool call to an existing assistant message.
|
|
204
|
+
* Used for streaming responses.
|
|
236
205
|
*/
|
|
237
|
-
|
|
238
|
-
const
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
206
|
+
async addToolCall(messageId, toolCall) {
|
|
207
|
+
const history = await this.historyProvider.getHistory();
|
|
208
|
+
const messageIndex = history.findIndex((m) => m.id === messageId);
|
|
209
|
+
if (messageIndex === -1) {
|
|
210
|
+
throw ContextError.messageNotFound(messageId);
|
|
211
|
+
}
|
|
212
|
+
const message = history[messageIndex];
|
|
213
|
+
if (!message) {
|
|
214
|
+
throw ContextError.messageNotFound(messageId);
|
|
215
|
+
}
|
|
216
|
+
if (message.role !== "assistant") {
|
|
217
|
+
throw ContextError.messageNotAssistant(messageId);
|
|
218
|
+
}
|
|
219
|
+
if (!message.toolCalls) {
|
|
220
|
+
message.toolCalls = [];
|
|
221
|
+
}
|
|
222
|
+
message.toolCalls.push(toolCall);
|
|
223
|
+
await this.historyProvider.updateMessage(message);
|
|
244
224
|
}
|
|
245
225
|
/**
|
|
246
|
-
*
|
|
226
|
+
* Updates an existing assistant message with new properties.
|
|
227
|
+
* Used for finalizing streaming responses (e.g. adding token usage).
|
|
247
228
|
*/
|
|
248
|
-
async
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
229
|
+
async updateAssistantMessage(messageId, updates) {
|
|
230
|
+
const history = await this.historyProvider.getHistory();
|
|
231
|
+
const messageIndex = history.findIndex((m) => m.id === messageId);
|
|
232
|
+
if (messageIndex === -1) {
|
|
233
|
+
throw ContextError.messageNotFound(messageId);
|
|
234
|
+
}
|
|
235
|
+
const message = history[messageIndex];
|
|
236
|
+
if (!message) {
|
|
237
|
+
throw ContextError.messageNotFound(messageId);
|
|
238
|
+
}
|
|
239
|
+
if (message.role !== "assistant") {
|
|
240
|
+
throw ContextError.messageNotAssistant(messageId);
|
|
241
|
+
}
|
|
242
|
+
Object.assign(message, updates);
|
|
243
|
+
await this.historyProvider.updateMessage(message);
|
|
253
244
|
}
|
|
254
245
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
246
|
+
* Marks tool messages as compacted (pruned).
|
|
247
|
+
* Sets the compactedAt timestamp - content transformation happens at format time
|
|
248
|
+
* in getFormattedMessagesWithCompression(). Original content is preserved in
|
|
249
|
+
* storage for debugging/audit.
|
|
257
250
|
*
|
|
258
|
-
*
|
|
251
|
+
* Used by TurnExecutor's pruneOldToolOutputs() to reclaim token space
|
|
252
|
+
* by marking old tool outputs that are no longer needed for context.
|
|
253
|
+
*
|
|
254
|
+
* @param messageIds Array of message IDs to mark as compacted
|
|
255
|
+
* @returns Number of messages successfully marked
|
|
259
256
|
*/
|
|
260
|
-
async
|
|
257
|
+
async markMessagesAsCompacted(messageIds) {
|
|
258
|
+
if (messageIds.length === 0) {
|
|
259
|
+
return 0;
|
|
260
|
+
}
|
|
261
261
|
const history = await this.historyProvider.getHistory();
|
|
262
|
-
|
|
262
|
+
const timestamp = Date.now();
|
|
263
|
+
let markedCount = 0;
|
|
264
|
+
for (const messageId of messageIds) {
|
|
265
|
+
const message = history.find((m) => m.id === messageId);
|
|
266
|
+
if (!message) {
|
|
267
|
+
this.logger.warn(`markMessagesAsCompacted: Message ${messageId} not found`);
|
|
268
|
+
continue;
|
|
269
|
+
}
|
|
270
|
+
if (message.role !== "tool") {
|
|
271
|
+
this.logger.warn(
|
|
272
|
+
`markMessagesAsCompacted: Message ${messageId} is not a tool message (role=${message.role})`
|
|
273
|
+
);
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
if (message.compactedAt) {
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
279
|
+
message.compactedAt = timestamp;
|
|
280
|
+
await this.historyProvider.updateMessage(message);
|
|
281
|
+
markedCount++;
|
|
282
|
+
}
|
|
283
|
+
if (markedCount > 0) {
|
|
284
|
+
this.logger.debug(
|
|
285
|
+
`markMessagesAsCompacted: Marked ${markedCount} messages as compacted`
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
return markedCount;
|
|
263
289
|
}
|
|
264
290
|
/**
|
|
265
291
|
* Adds a message to the conversation history.
|
|
@@ -272,10 +298,7 @@ ${prompt}`);
|
|
|
272
298
|
async addMessage(message) {
|
|
273
299
|
switch (message.role) {
|
|
274
300
|
case "user":
|
|
275
|
-
if (
|
|
276
|
-
// Allow array content for user messages
|
|
277
|
-
!(Array.isArray(message.content) && message.content.length > 0) && (typeof message.content !== "string" || message.content.trim() === "")
|
|
278
|
-
) {
|
|
301
|
+
if (!Array.isArray(message.content) || message.content.length === 0) {
|
|
279
302
|
throw ContextError.userMessageContentInvalid();
|
|
280
303
|
}
|
|
281
304
|
break;
|
|
@@ -291,7 +314,6 @@ ${prompt}`);
|
|
|
291
314
|
}
|
|
292
315
|
}
|
|
293
316
|
message.provider = this.llmConfig.provider;
|
|
294
|
-
message.router = this.llmConfig.router;
|
|
295
317
|
message.model = this.llmConfig.model;
|
|
296
318
|
break;
|
|
297
319
|
case "tool":
|
|
@@ -299,14 +321,16 @@ ${prompt}`);
|
|
|
299
321
|
throw ContextError.toolMessageFieldsMissing();
|
|
300
322
|
}
|
|
301
323
|
break;
|
|
302
|
-
case "system":
|
|
324
|
+
case "system": {
|
|
303
325
|
this.logger.warn(
|
|
304
|
-
"ContextManager: Adding system message directly to history. Use
|
|
326
|
+
"ContextManager: Adding system message directly to history. Use SystemPromptManager instead."
|
|
305
327
|
);
|
|
306
|
-
|
|
328
|
+
const textContent = message.content?.filter((p) => p.type === "text").map((p) => p.text).join("");
|
|
329
|
+
if (!textContent || textContent.trim() === "") {
|
|
307
330
|
throw ContextError.systemMessageContentInvalid();
|
|
308
331
|
}
|
|
309
332
|
break;
|
|
333
|
+
}
|
|
310
334
|
}
|
|
311
335
|
if (!message.id) {
|
|
312
336
|
message.id = randomUUID();
|
|
@@ -322,57 +346,64 @@ ${prompt}`);
|
|
|
322
346
|
this.logger.debug(`ContextManager: History now contains ${history.length} messages`);
|
|
323
347
|
}
|
|
324
348
|
/**
|
|
325
|
-
* Adds a user message to the conversation
|
|
326
|
-
*
|
|
349
|
+
* Adds a user message to the conversation.
|
|
350
|
+
* Supports multiple images and files via ContentPart[].
|
|
327
351
|
*
|
|
328
|
-
* @param
|
|
329
|
-
* @
|
|
330
|
-
* @param fileData Optional file data for file input
|
|
331
|
-
* @throws Error if content is empty or not a string
|
|
352
|
+
* @param content Array of content parts (text, images, files)
|
|
353
|
+
* @throws Error if content is empty or invalid
|
|
332
354
|
*/
|
|
333
|
-
async addUserMessage(
|
|
334
|
-
if (
|
|
355
|
+
async addUserMessage(content) {
|
|
356
|
+
if (!Array.isArray(content) || content.length === 0) {
|
|
335
357
|
throw ContextError.userMessageContentEmpty();
|
|
336
358
|
}
|
|
337
|
-
const
|
|
338
|
-
const
|
|
339
|
-
if (
|
|
340
|
-
|
|
341
|
-
}
|
|
342
|
-
if (imageData) {
|
|
343
|
-
const processedImage = await this.processUserInput(imageData.image, {
|
|
344
|
-
mimeType: imageData.mimeType || "image/jpeg",
|
|
345
|
-
source: "user"
|
|
346
|
-
});
|
|
347
|
-
messageParts.push({
|
|
348
|
-
type: "image",
|
|
349
|
-
image: processedImage,
|
|
350
|
-
mimeType: imageData.mimeType || "image/jpeg"
|
|
351
|
-
});
|
|
359
|
+
const hasText = content.some((p) => p.type === "text" && p.text.trim() !== "");
|
|
360
|
+
const hasAttachment = content.some((p) => p.type === "image" || p.type === "file");
|
|
361
|
+
if (!hasText && !hasAttachment) {
|
|
362
|
+
throw ContextError.userMessageContentEmpty();
|
|
352
363
|
}
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
364
|
+
const processedParts = [];
|
|
365
|
+
for (const part of content) {
|
|
366
|
+
if (part.type === "text") {
|
|
367
|
+
if (part.text.trim()) {
|
|
368
|
+
processedParts.push({ type: "text", text: part.text });
|
|
369
|
+
}
|
|
370
|
+
} else if (part.type === "image") {
|
|
371
|
+
const processedImage = await this.processUserInput(part.image, {
|
|
372
|
+
mimeType: part.mimeType || "image/jpeg",
|
|
373
|
+
source: "user"
|
|
374
|
+
});
|
|
375
|
+
processedParts.push({
|
|
376
|
+
type: "image",
|
|
377
|
+
image: processedImage,
|
|
378
|
+
mimeType: part.mimeType || "image/jpeg"
|
|
379
|
+
});
|
|
380
|
+
} else if (part.type === "file") {
|
|
381
|
+
const metadata = {
|
|
382
|
+
mimeType: part.mimeType,
|
|
383
|
+
source: "user"
|
|
384
|
+
};
|
|
385
|
+
if (part.filename) {
|
|
386
|
+
metadata.originalName = part.filename;
|
|
387
|
+
}
|
|
388
|
+
const processedData = await this.processUserInput(part.data, metadata);
|
|
389
|
+
processedParts.push({
|
|
390
|
+
type: "file",
|
|
391
|
+
data: processedData,
|
|
392
|
+
mimeType: part.mimeType,
|
|
393
|
+
...part.filename && { filename: part.filename }
|
|
394
|
+
});
|
|
360
395
|
}
|
|
361
|
-
const processedData = await this.processUserInput(fileData.data, metadata);
|
|
362
|
-
messageParts.push({
|
|
363
|
-
type: "file",
|
|
364
|
-
data: processedData,
|
|
365
|
-
mimeType: fileData.mimeType,
|
|
366
|
-
...fileData.filename && { filename: fileData.filename }
|
|
367
|
-
});
|
|
368
|
-
}
|
|
369
|
-
if (messageParts.length === 0) {
|
|
370
|
-
messageParts.push({ type: "text", text: finalTextContent });
|
|
371
396
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
);
|
|
375
|
-
|
|
397
|
+
const textParts = processedParts.filter((p) => p.type === "text");
|
|
398
|
+
const imageParts = processedParts.filter((p) => p.type === "image");
|
|
399
|
+
const fileParts = processedParts.filter((p) => p.type === "file");
|
|
400
|
+
this.logger.info("User message received", {
|
|
401
|
+
textParts: textParts.length,
|
|
402
|
+
imageParts: imageParts.length,
|
|
403
|
+
fileParts: fileParts.length,
|
|
404
|
+
totalParts: processedParts.length
|
|
405
|
+
});
|
|
406
|
+
await this.addMessage({ role: "user", content: processedParts });
|
|
376
407
|
}
|
|
377
408
|
/**
|
|
378
409
|
* Adds an assistant message to the conversation
|
|
@@ -387,54 +418,50 @@ ${prompt}`);
|
|
|
387
418
|
if (content === null && (!toolCalls || toolCalls.length === 0)) {
|
|
388
419
|
throw ContextError.assistantMessageContentOrToolsRequired();
|
|
389
420
|
}
|
|
421
|
+
const contentArray = content !== null ? [{ type: "text", text: content }] : null;
|
|
390
422
|
await this.addMessage({
|
|
391
423
|
role: "assistant",
|
|
392
|
-
content,
|
|
424
|
+
content: contentArray,
|
|
393
425
|
...toolCalls && toolCalls.length > 0 && { toolCalls },
|
|
394
426
|
...metadata?.tokenUsage && { tokenUsage: metadata.tokenUsage },
|
|
395
427
|
...metadata?.reasoning && { reasoning: metadata.reasoning }
|
|
396
428
|
});
|
|
397
429
|
}
|
|
398
430
|
/**
|
|
399
|
-
* Adds a tool result message to the conversation
|
|
431
|
+
* Adds a tool result message to the conversation.
|
|
432
|
+
* The result must already be sanitized - this method only persists it.
|
|
433
|
+
*
|
|
434
|
+
* Success status is read from sanitizedResult.meta.success (single source of truth).
|
|
400
435
|
*
|
|
401
436
|
* @param toolCallId ID of the tool call this result is responding to
|
|
402
437
|
* @param name Name of the tool that executed
|
|
403
|
-
* @param
|
|
438
|
+
* @param sanitizedResult The already-sanitized result to store (includes success in meta)
|
|
439
|
+
* @param metadata Optional approval-related metadata
|
|
404
440
|
* @throws Error if required parameters are missing
|
|
405
441
|
*/
|
|
406
|
-
async addToolResult(toolCallId, name,
|
|
442
|
+
async addToolResult(toolCallId, name, sanitizedResult, metadata) {
|
|
407
443
|
if (!toolCallId || !name) {
|
|
408
444
|
throw ContextError.toolCallIdNameRequired();
|
|
409
445
|
}
|
|
410
|
-
const
|
|
411
|
-
|
|
412
|
-
blobStore: blobService,
|
|
413
|
-
toolName: name,
|
|
414
|
-
toolCallId
|
|
415
|
-
};
|
|
416
|
-
if (options?.success !== void 0) {
|
|
417
|
-
sanitizeOptions.success = options.success;
|
|
418
|
-
}
|
|
419
|
-
const sanitized = await sanitizeToolResult(result, sanitizeOptions, this.logger);
|
|
420
|
-
const summary = sanitized.content.map(
|
|
421
|
-
(p) => p.type === "text" ? `text(${p.text.length})` : p.type === "image" ? `image(${p.mimeType || "image"})` : `file(${p.mimeType || "file"})`
|
|
446
|
+
const summary = sanitizedResult.content.map(
|
|
447
|
+
(p) => p.type === "text" ? `text(${p.text.length})` : p.type === "image" ? `image(${p.mimeType || "image"})` : p.type === "ui-resource" ? `ui-resource(${p.uri})` : `file(${p.mimeType || "file"})`
|
|
422
448
|
).join(", ");
|
|
423
449
|
this.logger.debug(`ContextManager: Storing tool result (parts) for ${name}: [${summary}]`);
|
|
424
450
|
await this.addMessage({
|
|
425
451
|
role: "tool",
|
|
426
|
-
content:
|
|
452
|
+
content: sanitizedResult.content,
|
|
427
453
|
toolCallId,
|
|
428
|
-
name
|
|
454
|
+
name,
|
|
455
|
+
// Success status comes from sanitizedResult.meta (single source of truth)
|
|
456
|
+
success: sanitizedResult.meta.success,
|
|
457
|
+
// Persist approval metadata for frontend display after reload
|
|
458
|
+
...metadata?.requireApproval !== void 0 && {
|
|
459
|
+
requireApproval: metadata.requireApproval
|
|
460
|
+
},
|
|
461
|
+
...metadata?.approvalStatus !== void 0 && {
|
|
462
|
+
approvalStatus: metadata.approvalStatus
|
|
463
|
+
}
|
|
429
464
|
});
|
|
430
|
-
return sanitized;
|
|
431
|
-
}
|
|
432
|
-
/**
|
|
433
|
-
* Sets the system prompt for the conversation
|
|
434
|
-
*
|
|
435
|
-
* @param prompt The system prompt text
|
|
436
|
-
*/
|
|
437
|
-
setSystemPrompt(_prompt) {
|
|
438
465
|
}
|
|
439
466
|
/**
|
|
440
467
|
* Gets the conversation history formatted for the target LLM provider.
|
|
@@ -478,13 +505,28 @@ ${prompt}`);
|
|
|
478
505
|
this.logger.debug("Resolving blob references in message history before formatting");
|
|
479
506
|
messageHistory = await Promise.all(
|
|
480
507
|
messageHistory.map(async (message) => {
|
|
481
|
-
|
|
482
|
-
message
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
508
|
+
if (isSystemMessage(message) || isAssistantMessage(message)) {
|
|
509
|
+
return message;
|
|
510
|
+
}
|
|
511
|
+
if (isUserMessage(message)) {
|
|
512
|
+
const expandedContent = await expandBlobReferences(
|
|
513
|
+
message.content,
|
|
514
|
+
this.resourceManager,
|
|
515
|
+
this.logger,
|
|
516
|
+
allowedMediaTypes
|
|
517
|
+
);
|
|
518
|
+
return { ...message, content: expandedContent };
|
|
519
|
+
}
|
|
520
|
+
if (isToolMessage(message)) {
|
|
521
|
+
const expandedContent = await expandBlobReferences(
|
|
522
|
+
message.content,
|
|
523
|
+
this.resourceManager,
|
|
524
|
+
this.logger,
|
|
525
|
+
allowedMediaTypes
|
|
526
|
+
);
|
|
527
|
+
return { ...message, content: expandedContent };
|
|
528
|
+
}
|
|
529
|
+
return message;
|
|
488
530
|
})
|
|
489
531
|
);
|
|
490
532
|
const prompt = systemPrompt ?? await this.getSystemPrompt(contributorContext);
|
|
@@ -493,7 +535,7 @@ ${prompt}`);
|
|
|
493
535
|
/**
|
|
494
536
|
* Gets the conversation ready for LLM consumption with proper flow:
|
|
495
537
|
* 1. Get system prompt
|
|
496
|
-
* 2. Get history and
|
|
538
|
+
* 2. Get history and filter (exclude pre-summary messages)
|
|
497
539
|
* 3. Format messages
|
|
498
540
|
* This method implements the correct ordering to avoid circular dependencies.
|
|
499
541
|
*
|
|
@@ -503,25 +545,39 @@ ${prompt}`);
|
|
|
503
545
|
*/
|
|
504
546
|
async getFormattedMessagesWithCompression(contributorContext, llmContext) {
|
|
505
547
|
const systemPrompt = await this.getSystemPrompt(contributorContext);
|
|
506
|
-
const
|
|
507
|
-
let history =
|
|
508
|
-
history
|
|
548
|
+
const fullHistory = await this.historyProvider.getHistory();
|
|
549
|
+
let history = filterCompacted(fullHistory);
|
|
550
|
+
if (history.length < fullHistory.length) {
|
|
551
|
+
this.logger.debug(
|
|
552
|
+
`filterCompacted: Reduced history from ${fullHistory.length} to ${history.length} messages (summary present)`
|
|
553
|
+
);
|
|
554
|
+
}
|
|
555
|
+
const compactedCount = history.filter((m) => m.role === "tool" && m.compactedAt).length;
|
|
556
|
+
if (compactedCount > 0) {
|
|
557
|
+
history = history.map((msg) => {
|
|
558
|
+
if (msg.role === "tool" && msg.compactedAt) {
|
|
559
|
+
return {
|
|
560
|
+
...msg,
|
|
561
|
+
content: [
|
|
562
|
+
{ type: "text", text: "[Old tool result content cleared]" }
|
|
563
|
+
]
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
return msg;
|
|
567
|
+
});
|
|
568
|
+
this.logger.debug(
|
|
569
|
+
`Transformed ${compactedCount} compacted tool messages to placeholders`
|
|
570
|
+
);
|
|
571
|
+
}
|
|
509
572
|
const formattedMessages = await this.getFormattedMessages(
|
|
510
573
|
contributorContext,
|
|
511
574
|
llmContext,
|
|
512
575
|
systemPrompt,
|
|
513
576
|
history
|
|
514
577
|
);
|
|
515
|
-
const historyTokens = countMessagesTokens(history, this.tokenizer, void 0, this.logger);
|
|
516
|
-
const formattingOverhead = Math.ceil((systemPromptTokens + historyTokens) * 0.05);
|
|
517
|
-
const tokensUsed = systemPromptTokens + historyTokens + formattingOverhead;
|
|
518
|
-
this.logger.debug(
|
|
519
|
-
`Final token breakdown - System: ${systemPromptTokens}, History: ${historyTokens}, Overhead: ${formattingOverhead}, Total: ${tokensUsed}`
|
|
520
|
-
);
|
|
521
578
|
return {
|
|
522
579
|
formattedMessages,
|
|
523
|
-
systemPrompt
|
|
524
|
-
tokensUsed
|
|
580
|
+
systemPrompt
|
|
525
581
|
};
|
|
526
582
|
}
|
|
527
583
|
/**
|
|
@@ -531,9 +587,8 @@ ${prompt}`);
|
|
|
531
587
|
* @returns Formatted system prompt or null/undefined based on formatter implementation
|
|
532
588
|
* @throws Error if formatting fails
|
|
533
589
|
*/
|
|
534
|
-
async getFormattedSystemPrompt(
|
|
535
|
-
|
|
536
|
-
return this.formatter.formatSystemPrompt?.(systemPrompt);
|
|
590
|
+
async getFormattedSystemPrompt(_context) {
|
|
591
|
+
return this.formatter.formatSystemPrompt?.();
|
|
537
592
|
}
|
|
538
593
|
/**
|
|
539
594
|
* Resets the conversation history
|
|
@@ -545,109 +600,6 @@ ${prompt}`);
|
|
|
545
600
|
`ContextManager: Conversation history cleared for session ${this.sessionId}`
|
|
546
601
|
);
|
|
547
602
|
}
|
|
548
|
-
/**
|
|
549
|
-
* Checks if history compression is needed based on token count and applies strategies.
|
|
550
|
-
*
|
|
551
|
-
* @param history The conversation history to potentially compress
|
|
552
|
-
* @param systemPromptTokens The actual token count of the system prompt
|
|
553
|
-
* @returns The potentially compressed history
|
|
554
|
-
*/
|
|
555
|
-
async compressHistoryIfNeeded(history, systemPromptTokens) {
|
|
556
|
-
let currentTotalTokens = countMessagesTokens(
|
|
557
|
-
history,
|
|
558
|
-
this.tokenizer,
|
|
559
|
-
void 0,
|
|
560
|
-
this.logger
|
|
561
|
-
);
|
|
562
|
-
currentTotalTokens += systemPromptTokens;
|
|
563
|
-
this.logger.debug(`ContextManager: Checking if history compression is needed.`);
|
|
564
|
-
this.logger.debug(
|
|
565
|
-
`History tokens: ${countMessagesTokens(history, this.tokenizer, void 0, this.logger)}, System prompt tokens: ${systemPromptTokens}, Total: ${currentTotalTokens}`
|
|
566
|
-
);
|
|
567
|
-
if (currentTotalTokens <= this.maxInputTokens) {
|
|
568
|
-
this.logger.debug(
|
|
569
|
-
`ContextManager: History compression not needed. Total token count: ${currentTotalTokens}, Max tokens: ${this.maxInputTokens}`
|
|
570
|
-
);
|
|
571
|
-
return history;
|
|
572
|
-
}
|
|
573
|
-
this.logger.info(
|
|
574
|
-
`ContextManager: History exceeds token limit (${currentTotalTokens} > ${this.maxInputTokens}). Applying compression strategies sequentially.`
|
|
575
|
-
);
|
|
576
|
-
const initialLength = history.length;
|
|
577
|
-
let workingHistory = [...history];
|
|
578
|
-
const targetHistoryTokens = this.maxInputTokens - systemPromptTokens;
|
|
579
|
-
for (const strategy of this.compressionStrategies) {
|
|
580
|
-
const strategyName = strategy.constructor.name;
|
|
581
|
-
this.logger.debug(`ContextManager: Applying ${strategyName}...`);
|
|
582
|
-
try {
|
|
583
|
-
workingHistory = strategy.compress(
|
|
584
|
-
[...workingHistory],
|
|
585
|
-
this.tokenizer,
|
|
586
|
-
targetHistoryTokens
|
|
587
|
-
// Use target tokens that account for system prompt
|
|
588
|
-
);
|
|
589
|
-
} catch (error) {
|
|
590
|
-
this.logger.error(
|
|
591
|
-
`ContextManager: Error applying ${strategyName}: ${error instanceof Error ? error.message : String(error)}`,
|
|
592
|
-
{ error }
|
|
593
|
-
);
|
|
594
|
-
break;
|
|
595
|
-
}
|
|
596
|
-
const historyTokens = countMessagesTokens(
|
|
597
|
-
workingHistory,
|
|
598
|
-
this.tokenizer,
|
|
599
|
-
void 0,
|
|
600
|
-
this.logger
|
|
601
|
-
);
|
|
602
|
-
currentTotalTokens = historyTokens + systemPromptTokens;
|
|
603
|
-
const messagesRemoved = initialLength - workingHistory.length;
|
|
604
|
-
if (currentTotalTokens <= this.maxInputTokens) {
|
|
605
|
-
this.logger.debug(
|
|
606
|
-
`ContextManager: Compression successful after ${strategyName}. New total count: ${currentTotalTokens}, messages removed: ${messagesRemoved}`
|
|
607
|
-
);
|
|
608
|
-
break;
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
return workingHistory;
|
|
612
|
-
}
|
|
613
|
-
/**
|
|
614
|
-
* Parses a raw LLM stream response, converts it into internal messages and adds them to the history.
|
|
615
|
-
*
|
|
616
|
-
* @param response The stream response from the LLM provider
|
|
617
|
-
*/
|
|
618
|
-
async processLLMStreamResponse(response) {
|
|
619
|
-
if (this.formatter.parseStreamResponse) {
|
|
620
|
-
const msgs = await this.formatter.parseStreamResponse(response) ?? [];
|
|
621
|
-
for (const msg of msgs) {
|
|
622
|
-
try {
|
|
623
|
-
await this.addMessage(msg);
|
|
624
|
-
} catch (error) {
|
|
625
|
-
this.logger.error(
|
|
626
|
-
`ContextManager: Failed to process LLM stream response message for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
627
|
-
);
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
} else {
|
|
631
|
-
await this.processLLMResponse(response);
|
|
632
|
-
}
|
|
633
|
-
}
|
|
634
|
-
/**
|
|
635
|
-
* Parses a raw LLM response, converts it into internal messages and adds them to the history.
|
|
636
|
-
*
|
|
637
|
-
* @param response The response from the LLM provider
|
|
638
|
-
*/
|
|
639
|
-
async processLLMResponse(response) {
|
|
640
|
-
const msgs = this.formatter.parseResponse(response) ?? [];
|
|
641
|
-
for (const msg of msgs) {
|
|
642
|
-
try {
|
|
643
|
-
await this.addMessage(msg);
|
|
644
|
-
} catch (error) {
|
|
645
|
-
this.logger.error(
|
|
646
|
-
`ContextManager: Failed to process LLM response message for session ${this.sessionId}: ${error instanceof Error ? error.message : String(error)}`
|
|
647
|
-
);
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
603
|
}
|
|
652
604
|
export {
|
|
653
605
|
ContextManager
|