@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
package/dist/context/utils.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-PTJYTZNU.js";
|
|
2
|
+
import {
|
|
3
|
+
isToolMessage
|
|
4
|
+
} from "./types.js";
|
|
5
|
+
import { isValidDisplayData } from "../tools/display-types.js";
|
|
2
6
|
import { validateModelFileSupport } from "../llm/registry.js";
|
|
3
|
-
import { ContextError } from "./errors.js";
|
|
4
7
|
import { safeStringify } from "../utils/safe-stringify.js";
|
|
5
8
|
import { getFileMediaKind, getResourceKind } from "./media-helpers.js";
|
|
6
|
-
const DEFAULT_OVERHEAD_PER_MESSAGE = 4;
|
|
7
9
|
const MIN_BASE64_HEURISTIC_LENGTH = 512;
|
|
8
10
|
const MAX_TOOL_TEXT_CHARS = 8e3;
|
|
9
11
|
const MIN_TOOL_INLINE_MEDIA_BYTES = 1024;
|
|
@@ -51,60 +53,38 @@ function clonePart(part) {
|
|
|
51
53
|
return cloned;
|
|
52
54
|
}
|
|
53
55
|
function coerceContentToParts(content) {
|
|
54
|
-
if (
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
if (content == null) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
const normalized = [];
|
|
60
|
+
for (const item of content) {
|
|
61
|
+
if (item.type === "ui-resource") {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (item.type === "text") {
|
|
65
|
+
normalized.push({ type: "text", text: item.text });
|
|
66
|
+
} else if (item.type === "image") {
|
|
67
|
+
const cloned = {
|
|
68
|
+
type: "image",
|
|
69
|
+
image: item.image
|
|
70
|
+
};
|
|
71
|
+
if (item.mimeType) {
|
|
72
|
+
cloned.mimeType = item.mimeType;
|
|
61
73
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const cloned = {
|
|
72
|
-
type: "image",
|
|
73
|
-
image: imagePart.image
|
|
74
|
-
};
|
|
75
|
-
if (imagePart.mimeType) {
|
|
76
|
-
cloned.mimeType = imagePart.mimeType;
|
|
77
|
-
}
|
|
78
|
-
normalized.push(cloned);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (type === "file") {
|
|
82
|
-
const filePart = item;
|
|
83
|
-
const cloned = {
|
|
84
|
-
type: "file",
|
|
85
|
-
data: filePart.data,
|
|
86
|
-
mimeType: filePart.mimeType ?? "application/octet-stream"
|
|
87
|
-
};
|
|
88
|
-
if (filePart.filename) {
|
|
89
|
-
cloned.filename = filePart.filename;
|
|
90
|
-
}
|
|
91
|
-
normalized.push(cloned);
|
|
92
|
-
continue;
|
|
93
|
-
}
|
|
74
|
+
normalized.push(cloned);
|
|
75
|
+
} else if (item.type === "file") {
|
|
76
|
+
const cloned = {
|
|
77
|
+
type: "file",
|
|
78
|
+
data: item.data,
|
|
79
|
+
mimeType: item.mimeType ?? "application/octet-stream"
|
|
80
|
+
};
|
|
81
|
+
if (item.filename) {
|
|
82
|
+
cloned.filename = item.filename;
|
|
94
83
|
}
|
|
84
|
+
normalized.push(cloned);
|
|
95
85
|
}
|
|
96
|
-
return normalized;
|
|
97
|
-
}
|
|
98
|
-
if (typeof content === "string") {
|
|
99
|
-
if (content.length === 0) {
|
|
100
|
-
return [];
|
|
101
|
-
}
|
|
102
|
-
return [{ type: "text", text: content }];
|
|
103
86
|
}
|
|
104
|
-
|
|
105
|
-
return [];
|
|
106
|
-
}
|
|
107
|
-
return [{ type: "text", text: safeStringify(content) }];
|
|
87
|
+
return normalized;
|
|
108
88
|
}
|
|
109
89
|
function detectInlineMedia(part, index) {
|
|
110
90
|
if (part.type === "text") {
|
|
@@ -270,10 +250,9 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
|
|
|
270
250
|
}
|
|
271
251
|
const resolvedMime = mimeType ?? "application/octet-stream";
|
|
272
252
|
if (resolvedMime.startsWith("image/")) {
|
|
273
|
-
const dataUri = `data:${resolvedMime};base64,${base64Data}`;
|
|
274
253
|
const imagePart = {
|
|
275
254
|
type: "image",
|
|
276
|
-
image:
|
|
255
|
+
image: base64Data,
|
|
277
256
|
mimeType: resolvedMime
|
|
278
257
|
};
|
|
279
258
|
parts.push(imagePart);
|
|
@@ -281,7 +260,7 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
|
|
|
281
260
|
}
|
|
282
261
|
const filePart = {
|
|
283
262
|
type: "file",
|
|
284
|
-
data:
|
|
263
|
+
data: base64Data,
|
|
285
264
|
mimeType: resolvedMime
|
|
286
265
|
};
|
|
287
266
|
if (typeof item.filename === "string" && item.filename.length > 0) {
|
|
@@ -301,67 +280,17 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
|
|
|
301
280
|
return [{ type: "text", text: `[Attachment unavailable: ${resourceUri}]` }];
|
|
302
281
|
}
|
|
303
282
|
}
|
|
304
|
-
function
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
} else if (Array.isArray(message.content)) {
|
|
313
|
-
message.content.forEach((part) => {
|
|
314
|
-
if (part.type === "text" && typeof part.text === "string") {
|
|
315
|
-
total += tokenizer.countTokens(part.text);
|
|
316
|
-
} else if (part.type === "image") {
|
|
317
|
-
if (typeof part.image === "string") {
|
|
318
|
-
if (isDataUri(part.image)) {
|
|
319
|
-
const base64Payload = extractBase64FromDataUri(part.image);
|
|
320
|
-
const byteLength = base64LengthToBytes(base64Payload.length);
|
|
321
|
-
total += Math.ceil(byteLength / 1024);
|
|
322
|
-
} else {
|
|
323
|
-
total += estimateTextTokens(part.image);
|
|
324
|
-
}
|
|
325
|
-
} else if (part.image instanceof Uint8Array || part.image instanceof Buffer || part.image instanceof ArrayBuffer) {
|
|
326
|
-
const bytes = part.image instanceof ArrayBuffer ? part.image.byteLength : part.image.length;
|
|
327
|
-
total += Math.ceil(bytes / 1024);
|
|
328
|
-
}
|
|
329
|
-
} else if (part.type === "file") {
|
|
330
|
-
if (typeof part.data === "string") {
|
|
331
|
-
if (isDataUri(part.data)) {
|
|
332
|
-
const base64Payload = extractBase64FromDataUri(part.data);
|
|
333
|
-
const byteLength = base64LengthToBytes(base64Payload.length);
|
|
334
|
-
total += Math.ceil(byteLength / 1024);
|
|
335
|
-
} else {
|
|
336
|
-
total += estimateTextTokens(part.data);
|
|
337
|
-
}
|
|
338
|
-
} else if (part.data instanceof Uint8Array || part.data instanceof Buffer || part.data instanceof ArrayBuffer) {
|
|
339
|
-
const bytes = part.data instanceof ArrayBuffer ? part.data.byteLength : part.data.length;
|
|
340
|
-
total += Math.ceil(bytes / 1024);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
if (message.toolCalls) {
|
|
347
|
-
for (const call of message.toolCalls) {
|
|
348
|
-
if (call.function?.name) {
|
|
349
|
-
total += tokenizer.countTokens(call.function.name);
|
|
350
|
-
}
|
|
351
|
-
if (call.function?.arguments) {
|
|
352
|
-
total += tokenizer.countTokens(call.function.arguments);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
total += overheadPerMessage;
|
|
283
|
+
function estimateMessagesTokens(messages) {
|
|
284
|
+
return messages.reduce((sum, msg) => {
|
|
285
|
+
if (Array.isArray(msg.content)) {
|
|
286
|
+
return sum + msg.content.reduce((partSum, part) => {
|
|
287
|
+
if (part.type === "text") return partSum + Math.ceil(part.text.length / 4);
|
|
288
|
+
if (part.type === "image" || part.type === "file") return partSum + 1e3;
|
|
289
|
+
return partSum;
|
|
290
|
+
}, 0);
|
|
357
291
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
`countMessagesTokens failed: ${error instanceof Error ? error.message : String(error)}`
|
|
361
|
-
);
|
|
362
|
-
throw ContextError.tokenCountFailed(error instanceof Error ? error.message : String(error));
|
|
363
|
-
}
|
|
364
|
-
return total;
|
|
292
|
+
return sum;
|
|
293
|
+
}, 0);
|
|
365
294
|
}
|
|
366
295
|
function getImageData(imagePart, logger) {
|
|
367
296
|
const { image } = imagePart;
|
|
@@ -429,122 +358,119 @@ async function getFileDataWithBlobSupport(filePart, resourceManager, logger) {
|
|
|
429
358
|
}
|
|
430
359
|
return getFileData(filePart, logger);
|
|
431
360
|
}
|
|
432
|
-
async function
|
|
433
|
-
if (
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
const uri = token.substring(1);
|
|
452
|
-
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
453
|
-
let resolvedParts = resolvedCache.get(resourceUri);
|
|
454
|
-
if (!resolvedParts) {
|
|
455
|
-
resolvedParts = await resolveBlobReferenceToParts(
|
|
456
|
-
resourceUri,
|
|
457
|
-
resourceManager,
|
|
458
|
-
logger,
|
|
459
|
-
allowedMediaTypes
|
|
460
|
-
);
|
|
461
|
-
resolvedCache.set(resourceUri, resolvedParts);
|
|
462
|
-
}
|
|
463
|
-
if (resolvedParts.length > 0) {
|
|
464
|
-
parts.push(...resolvedParts.map((part) => ({ ...part })));
|
|
465
|
-
} else {
|
|
466
|
-
parts.push({ type: "text", text: token });
|
|
361
|
+
async function expandBlobsInText(text, resourceManager, logger, allowedMediaTypes) {
|
|
362
|
+
if (!text.includes("@blob:")) {
|
|
363
|
+
return [{ type: "text", text }];
|
|
364
|
+
}
|
|
365
|
+
const blobRefPattern = /@blob:[a-f0-9]+/g;
|
|
366
|
+
const matches = [...text.matchAll(blobRefPattern)];
|
|
367
|
+
if (matches.length === 0) {
|
|
368
|
+
return [{ type: "text", text }];
|
|
369
|
+
}
|
|
370
|
+
const resolvedCache = /* @__PURE__ */ new Map();
|
|
371
|
+
const parts = [];
|
|
372
|
+
let lastIndex = 0;
|
|
373
|
+
for (const match of matches) {
|
|
374
|
+
const matchIndex = match.index ?? 0;
|
|
375
|
+
const token = match[0];
|
|
376
|
+
if (matchIndex > lastIndex) {
|
|
377
|
+
const segment = text.slice(lastIndex, matchIndex);
|
|
378
|
+
if (segment.length > 0) {
|
|
379
|
+
parts.push({ type: "text", text: segment });
|
|
467
380
|
}
|
|
468
|
-
lastIndex = matchIndex + token.length;
|
|
469
381
|
}
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
382
|
+
const uri = token.substring(1);
|
|
383
|
+
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
384
|
+
let resolvedParts = resolvedCache.get(resourceUri);
|
|
385
|
+
if (!resolvedParts) {
|
|
386
|
+
resolvedParts = await resolveBlobReferenceToParts(
|
|
387
|
+
resourceUri,
|
|
388
|
+
resourceManager,
|
|
389
|
+
logger,
|
|
390
|
+
allowedMediaTypes
|
|
391
|
+
);
|
|
392
|
+
resolvedCache.set(resourceUri, resolvedParts);
|
|
475
393
|
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
394
|
+
if (resolvedParts.length > 0) {
|
|
395
|
+
parts.push(...resolvedParts.map((p) => ({ ...p })));
|
|
396
|
+
} else {
|
|
397
|
+
parts.push({ type: "text", text: token });
|
|
479
398
|
}
|
|
480
|
-
|
|
399
|
+
lastIndex = matchIndex + token.length;
|
|
481
400
|
}
|
|
482
|
-
if (
|
|
483
|
-
const
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
try {
|
|
514
|
-
const resolvedData = await getFileDataWithBlobSupport(
|
|
515
|
-
part,
|
|
516
|
-
resourceManager,
|
|
517
|
-
logger
|
|
518
|
-
);
|
|
519
|
-
expandedParts.push({ ...part, data: resolvedData });
|
|
520
|
-
} catch (error) {
|
|
521
|
-
logger.warn(`Failed to resolve file blob reference: ${String(error)}`);
|
|
522
|
-
expandedParts.push(part);
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
continue;
|
|
401
|
+
if (lastIndex < text.length) {
|
|
402
|
+
const trailing = text.slice(lastIndex);
|
|
403
|
+
if (trailing.length > 0) {
|
|
404
|
+
parts.push({ type: "text", text: trailing });
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return parts.filter((p) => p.type !== "text" || p.text.length > 0);
|
|
408
|
+
}
|
|
409
|
+
async function expandBlobReferences(content, resourceManager, logger, allowedMediaTypes) {
|
|
410
|
+
if (content == null || !Array.isArray(content)) {
|
|
411
|
+
return [];
|
|
412
|
+
}
|
|
413
|
+
const expandedParts = [];
|
|
414
|
+
for (const part of content) {
|
|
415
|
+
if (part.type === "ui-resource") {
|
|
416
|
+
expandedParts.push(part);
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
if (part.type === "image" && typeof part.image === "string" && part.image.startsWith("@blob:")) {
|
|
420
|
+
const uri = part.image.substring(1);
|
|
421
|
+
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
422
|
+
const resolved = await resolveBlobReferenceToParts(
|
|
423
|
+
resourceUri,
|
|
424
|
+
resourceManager,
|
|
425
|
+
logger,
|
|
426
|
+
allowedMediaTypes
|
|
427
|
+
);
|
|
428
|
+
if (resolved.length > 0) {
|
|
429
|
+
expandedParts.push(...resolved.map((p) => ({ ...p })));
|
|
430
|
+
} else {
|
|
431
|
+
expandedParts.push(part);
|
|
526
432
|
}
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
433
|
+
continue;
|
|
434
|
+
}
|
|
435
|
+
if (part.type === "file" && typeof part.data === "string" && part.data.startsWith("@blob:")) {
|
|
436
|
+
const uri = part.data.substring(1);
|
|
437
|
+
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
438
|
+
const resolved = await resolveBlobReferenceToParts(
|
|
439
|
+
resourceUri,
|
|
440
|
+
resourceManager,
|
|
441
|
+
logger,
|
|
442
|
+
allowedMediaTypes
|
|
443
|
+
);
|
|
444
|
+
if (resolved.length > 0) {
|
|
445
|
+
expandedParts.push(...resolved.map((p) => ({ ...p })));
|
|
446
|
+
} else {
|
|
447
|
+
try {
|
|
448
|
+
const resolvedData = await getFileDataWithBlobSupport(
|
|
449
|
+
part,
|
|
450
|
+
resourceManager,
|
|
451
|
+
logger
|
|
452
|
+
);
|
|
453
|
+
expandedParts.push({ ...part, data: resolvedData });
|
|
454
|
+
} catch (error) {
|
|
455
|
+
logger.warn(`Failed to resolve file blob reference: ${String(error)}`);
|
|
539
456
|
expandedParts.push(part);
|
|
540
457
|
}
|
|
541
|
-
continue;
|
|
542
458
|
}
|
|
543
|
-
|
|
459
|
+
continue;
|
|
460
|
+
}
|
|
461
|
+
if (part.type === "text" && part.text.includes("@blob:")) {
|
|
462
|
+
const expanded = await expandBlobsInText(
|
|
463
|
+
part.text,
|
|
464
|
+
resourceManager,
|
|
465
|
+
logger,
|
|
466
|
+
allowedMediaTypes
|
|
467
|
+
);
|
|
468
|
+
expandedParts.push(...expanded);
|
|
469
|
+
continue;
|
|
544
470
|
}
|
|
545
|
-
|
|
471
|
+
expandedParts.push(part);
|
|
546
472
|
}
|
|
547
|
-
return
|
|
473
|
+
return expandedParts;
|
|
548
474
|
}
|
|
549
475
|
function filterMessagesByLLMCapabilities(messages, config, logger) {
|
|
550
476
|
try {
|
|
@@ -688,7 +614,25 @@ async function normalizeToolResult(result, logger) {
|
|
|
688
614
|
void 0,
|
|
689
615
|
void 0
|
|
690
616
|
);
|
|
691
|
-
const
|
|
617
|
+
const uiResources = [];
|
|
618
|
+
const otherContent = [];
|
|
619
|
+
if (Array.isArray(content)) {
|
|
620
|
+
for (const item of content) {
|
|
621
|
+
if (item && typeof item === "object" && "type" in item && item.type === "ui-resource") {
|
|
622
|
+
uiResources.push(item);
|
|
623
|
+
} else {
|
|
624
|
+
otherContent.push(item);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
} else {
|
|
628
|
+
otherContent.push(content);
|
|
629
|
+
}
|
|
630
|
+
if (uiResources.length > 0) {
|
|
631
|
+
logger.debug(
|
|
632
|
+
`normalizeToolResult: extracted ${uiResources.length} UI resource(s): ${uiResources.map((r) => r.uri).join(", ")}`
|
|
633
|
+
);
|
|
634
|
+
}
|
|
635
|
+
const parts = coerceContentToParts(otherContent);
|
|
692
636
|
const inlineMedia = [];
|
|
693
637
|
parts.forEach((part, index) => {
|
|
694
638
|
const hint = detectInlineMedia(part, index);
|
|
@@ -698,6 +642,7 @@ async function normalizeToolResult(result, logger) {
|
|
|
698
642
|
});
|
|
699
643
|
return {
|
|
700
644
|
parts,
|
|
645
|
+
uiResources,
|
|
701
646
|
inlineMedia
|
|
702
647
|
};
|
|
703
648
|
}
|
|
@@ -749,6 +694,7 @@ async function persistToolMedia(normalized, options, logger) {
|
|
|
749
694
|
const resources = extractResourceDescriptors(parts);
|
|
750
695
|
return {
|
|
751
696
|
parts,
|
|
697
|
+
uiResources: normalized.uiResources,
|
|
752
698
|
...resources ? { resources } : {}
|
|
753
699
|
};
|
|
754
700
|
}
|
|
@@ -795,53 +741,22 @@ async function sanitizeToolResultToContentWithBlobs(result, logger, blobStore, n
|
|
|
795
741
|
}
|
|
796
742
|
];
|
|
797
743
|
}
|
|
798
|
-
if (isLikelyBase64String(result)) {
|
|
799
|
-
logger.debug("sanitizeToolResultToContentWithBlobs: detected base64-like string");
|
|
800
|
-
const approxSize = Math.floor(result.length * 3 / 4);
|
|
801
|
-
const shouldStoreAsBlob = blobStore && approxSize > 1024;
|
|
802
|
-
if (shouldStoreAsBlob) {
|
|
803
|
-
try {
|
|
804
|
-
const blobRef = await blobStore.store(result, {
|
|
805
|
-
mimeType: "application/octet-stream",
|
|
806
|
-
source: "tool",
|
|
807
|
-
originalName: buildToolBlobName("output", void 0, namingOptions)
|
|
808
|
-
});
|
|
809
|
-
logger.debug(
|
|
810
|
-
`Stored tool result as blob: ${blobRef.uri} (${approxSize} bytes)`
|
|
811
|
-
);
|
|
812
|
-
return [
|
|
813
|
-
createBlobFilePart(
|
|
814
|
-
blobRef.uri,
|
|
815
|
-
"application/octet-stream",
|
|
816
|
-
"tool-output.bin"
|
|
817
|
-
)
|
|
818
|
-
];
|
|
819
|
-
} catch (error) {
|
|
820
|
-
logger.warn(
|
|
821
|
-
`Failed to store blob, falling back to inline: ${String(error)}`
|
|
822
|
-
);
|
|
823
|
-
}
|
|
824
|
-
}
|
|
825
|
-
return [
|
|
826
|
-
{
|
|
827
|
-
type: "file",
|
|
828
|
-
data: result,
|
|
829
|
-
mimeType: "application/octet-stream",
|
|
830
|
-
filename: "tool-output.bin"
|
|
831
|
-
}
|
|
832
|
-
];
|
|
833
|
-
}
|
|
834
744
|
if (result.length > MAX_TOOL_TEXT_CHARS) {
|
|
835
745
|
const head = result.slice(0, 4e3);
|
|
836
746
|
const tail = result.slice(-1e3);
|
|
837
747
|
logger.debug(
|
|
838
748
|
`sanitizeToolResultToContentWithBlobs: truncating long text tool output (len=${result.length})`
|
|
839
749
|
);
|
|
840
|
-
return
|
|
750
|
+
return [
|
|
751
|
+
{
|
|
752
|
+
type: "text",
|
|
753
|
+
text: `${head}
|
|
841
754
|
... [${result.length - 5e3} chars omitted] ...
|
|
842
|
-
${tail}
|
|
755
|
+
${tail}`
|
|
756
|
+
}
|
|
757
|
+
];
|
|
843
758
|
}
|
|
844
|
-
return result;
|
|
759
|
+
return [{ type: "text", text: result }];
|
|
845
760
|
}
|
|
846
761
|
if (Array.isArray(result)) {
|
|
847
762
|
const parts = [];
|
|
@@ -853,10 +768,10 @@ ${tail}`;
|
|
|
853
768
|
blobStore,
|
|
854
769
|
namingOptions
|
|
855
770
|
);
|
|
856
|
-
if (
|
|
857
|
-
parts.push(
|
|
858
|
-
|
|
859
|
-
|
|
771
|
+
if (Array.isArray(processedItem)) {
|
|
772
|
+
parts.push(
|
|
773
|
+
...processedItem
|
|
774
|
+
);
|
|
860
775
|
}
|
|
861
776
|
}
|
|
862
777
|
return parts;
|
|
@@ -870,6 +785,34 @@ ${tail}`;
|
|
|
870
785
|
const processedContent = [];
|
|
871
786
|
for (const item of anyObj.content) {
|
|
872
787
|
if (item && typeof item === "object") {
|
|
788
|
+
if (item.type === "resource" && item.resource) {
|
|
789
|
+
const resource = item.resource;
|
|
790
|
+
const resourceUri = resource.uri;
|
|
791
|
+
if (resourceUri && resourceUri.startsWith("ui://")) {
|
|
792
|
+
logger.debug(
|
|
793
|
+
`Detected MCP-UI resource: ${resourceUri} (${resource.mimeType})`
|
|
794
|
+
);
|
|
795
|
+
const resourceMeta = resource._meta || {};
|
|
796
|
+
const title = resourceMeta.title || resource.title;
|
|
797
|
+
const preferredSize = resourceMeta.preferredSize || resource.preferredSize;
|
|
798
|
+
const uiPart = {
|
|
799
|
+
type: "ui-resource",
|
|
800
|
+
uri: resourceUri,
|
|
801
|
+
mimeType: resource.mimeType || "text/html",
|
|
802
|
+
content: resource.text,
|
|
803
|
+
blob: resource.blob,
|
|
804
|
+
metadata: {
|
|
805
|
+
title,
|
|
806
|
+
preferredSize
|
|
807
|
+
}
|
|
808
|
+
};
|
|
809
|
+
if (!uiPart.metadata?.title && !uiPart.metadata?.preferredSize) {
|
|
810
|
+
delete uiPart.metadata;
|
|
811
|
+
}
|
|
812
|
+
processedContent.push(uiPart);
|
|
813
|
+
continue;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
873
816
|
if (item.type === "resource" && item.resource) {
|
|
874
817
|
const resource = item.resource;
|
|
875
818
|
if (resource.text && resource.mimeType) {
|
|
@@ -1066,17 +1009,17 @@ ${tail}`;
|
|
|
1066
1009
|
];
|
|
1067
1010
|
}
|
|
1068
1011
|
const cleaned = sanitizeDeepObject(anyObj, logger);
|
|
1069
|
-
return safeStringify(cleaned);
|
|
1012
|
+
return [{ type: "text", text: safeStringify(cleaned) }];
|
|
1070
1013
|
}
|
|
1071
|
-
return safeStringify(result ?? "");
|
|
1014
|
+
return [{ type: "text", text: safeStringify(result ?? "") }];
|
|
1072
1015
|
} catch (err) {
|
|
1073
1016
|
logger.warn(
|
|
1074
1017
|
`sanitizeToolResultToContentWithBlobs failed, falling back to string: ${String(err)}`
|
|
1075
1018
|
);
|
|
1076
1019
|
try {
|
|
1077
|
-
return safeStringify(result ?? "");
|
|
1020
|
+
return [{ type: "text", text: safeStringify(result ?? "") }];
|
|
1078
1021
|
} catch {
|
|
1079
|
-
return String(result ?? "");
|
|
1022
|
+
return [{ type: "text", text: String(result ?? "") }];
|
|
1080
1023
|
}
|
|
1081
1024
|
}
|
|
1082
1025
|
}
|
|
@@ -1120,7 +1063,19 @@ function extractResourceDescriptors(parts) {
|
|
|
1120
1063
|
return resources.length > 0 ? resources : void 0;
|
|
1121
1064
|
}
|
|
1122
1065
|
async function sanitizeToolResult(result, options, logger) {
|
|
1123
|
-
|
|
1066
|
+
let display;
|
|
1067
|
+
let resultForNormalization = result;
|
|
1068
|
+
if (result && typeof result === "object" && "_display" in result) {
|
|
1069
|
+
const { _display: rawDisplay, ...rest } = result;
|
|
1070
|
+
if (isValidDisplayData(rawDisplay)) {
|
|
1071
|
+
display = rawDisplay;
|
|
1072
|
+
logger.debug(
|
|
1073
|
+
`sanitizeToolResult: extracted display data (type=${display.type}) for ${options.toolName}`
|
|
1074
|
+
);
|
|
1075
|
+
}
|
|
1076
|
+
resultForNormalization = rest;
|
|
1077
|
+
}
|
|
1078
|
+
const normalized = await normalizeToolResult(resultForNormalization, logger);
|
|
1124
1079
|
const persisted = await persistToolMedia(
|
|
1125
1080
|
normalized,
|
|
1126
1081
|
{
|
|
@@ -1131,14 +1086,24 @@ async function sanitizeToolResult(result, options, logger) {
|
|
|
1131
1086
|
logger
|
|
1132
1087
|
);
|
|
1133
1088
|
const fallbackContent = [{ type: "text", text: "" }];
|
|
1134
|
-
const
|
|
1089
|
+
const allContent = [
|
|
1090
|
+
...persisted.parts,
|
|
1091
|
+
...persisted.uiResources
|
|
1092
|
+
];
|
|
1093
|
+
const content = allContent.length > 0 ? allContent : fallbackContent;
|
|
1094
|
+
if (persisted.uiResources.length > 0) {
|
|
1095
|
+
logger.debug(
|
|
1096
|
+
`sanitizeToolResult: including ${persisted.uiResources.length} UI resource(s) in final content for ${options.toolName}`
|
|
1097
|
+
);
|
|
1098
|
+
}
|
|
1135
1099
|
return {
|
|
1136
1100
|
content,
|
|
1137
1101
|
...persisted.resources ? { resources: persisted.resources } : {},
|
|
1138
1102
|
meta: {
|
|
1139
1103
|
toolName: options.toolName,
|
|
1140
1104
|
toolCallId: options.toolCallId,
|
|
1141
|
-
|
|
1105
|
+
success: options.success,
|
|
1106
|
+
...display ? { display } : {}
|
|
1142
1107
|
}
|
|
1143
1108
|
};
|
|
1144
1109
|
}
|
|
@@ -1171,16 +1136,6 @@ function summarizeToolContentForText(content) {
|
|
|
1171
1136
|
function base64LengthToBytes(charLength) {
|
|
1172
1137
|
return Math.floor(charLength * 3 / 4);
|
|
1173
1138
|
}
|
|
1174
|
-
function isDataUri(str) {
|
|
1175
|
-
return str.startsWith("data:") && str.includes(";base64,");
|
|
1176
|
-
}
|
|
1177
|
-
function extractBase64FromDataUri(dataUri) {
|
|
1178
|
-
const commaIndex = dataUri.indexOf(",");
|
|
1179
|
-
return commaIndex !== -1 ? dataUri.substring(commaIndex + 1) : "";
|
|
1180
|
-
}
|
|
1181
|
-
function estimateTextTokens(text) {
|
|
1182
|
-
return Math.ceil(text.length / 4);
|
|
1183
|
-
}
|
|
1184
1139
|
function toTextForToolMessage(content) {
|
|
1185
1140
|
if (Array.isArray(content)) {
|
|
1186
1141
|
return summarizeToolContentForText(content);
|
|
@@ -1190,11 +1145,39 @@ function toTextForToolMessage(content) {
|
|
|
1190
1145
|
}
|
|
1191
1146
|
return String(content ?? "");
|
|
1192
1147
|
}
|
|
1148
|
+
function filterCompacted(history) {
|
|
1149
|
+
let summaryIndex = -1;
|
|
1150
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
1151
|
+
const msg = history[i];
|
|
1152
|
+
if (msg?.metadata?.isSummary === true) {
|
|
1153
|
+
summaryIndex = i;
|
|
1154
|
+
break;
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
if (summaryIndex === -1) {
|
|
1158
|
+
return history.slice();
|
|
1159
|
+
}
|
|
1160
|
+
return history.slice(summaryIndex);
|
|
1161
|
+
}
|
|
1162
|
+
function formatToolOutputForDisplay(message) {
|
|
1163
|
+
if (isToolMessage(message) && message.compactedAt) {
|
|
1164
|
+
return "[Old tool result content cleared]";
|
|
1165
|
+
}
|
|
1166
|
+
if (typeof message.content === "string") {
|
|
1167
|
+
return message.content;
|
|
1168
|
+
}
|
|
1169
|
+
if (Array.isArray(message.content)) {
|
|
1170
|
+
return message.content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
|
|
1171
|
+
}
|
|
1172
|
+
return "[no content]";
|
|
1173
|
+
}
|
|
1193
1174
|
export {
|
|
1194
|
-
|
|
1175
|
+
estimateMessagesTokens,
|
|
1195
1176
|
expandBlobReferences,
|
|
1196
1177
|
fileTypesToMimePatterns,
|
|
1178
|
+
filterCompacted,
|
|
1197
1179
|
filterMessagesByLLMCapabilities,
|
|
1180
|
+
formatToolOutputForDisplay,
|
|
1198
1181
|
getFileData,
|
|
1199
1182
|
getFileDataWithBlobSupport,
|
|
1200
1183
|
getFileMediaKind,
|