@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.cjs
CHANGED
|
@@ -18,10 +18,12 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var utils_exports = {};
|
|
20
20
|
__export(utils_exports, {
|
|
21
|
-
|
|
21
|
+
estimateMessagesTokens: () => estimateMessagesTokens,
|
|
22
22
|
expandBlobReferences: () => expandBlobReferences,
|
|
23
23
|
fileTypesToMimePatterns: () => fileTypesToMimePatterns,
|
|
24
|
+
filterCompacted: () => filterCompacted,
|
|
24
25
|
filterMessagesByLLMCapabilities: () => filterMessagesByLLMCapabilities,
|
|
26
|
+
formatToolOutputForDisplay: () => formatToolOutputForDisplay,
|
|
25
27
|
getFileData: () => getFileData,
|
|
26
28
|
getFileDataWithBlobSupport: () => getFileDataWithBlobSupport,
|
|
27
29
|
getFileMediaKind: () => import_media_helpers.getFileMediaKind,
|
|
@@ -40,11 +42,11 @@ __export(utils_exports, {
|
|
|
40
42
|
toTextForToolMessage: () => toTextForToolMessage
|
|
41
43
|
});
|
|
42
44
|
module.exports = __toCommonJS(utils_exports);
|
|
45
|
+
var import_types = require("./types.js");
|
|
46
|
+
var import_display_types = require("../tools/display-types.js");
|
|
43
47
|
var import_registry = require("../llm/registry.cjs");
|
|
44
|
-
var import_errors = require("./errors.js");
|
|
45
48
|
var import_safe_stringify = require("../utils/safe-stringify.cjs");
|
|
46
49
|
var import_media_helpers = require("./media-helpers.js");
|
|
47
|
-
const DEFAULT_OVERHEAD_PER_MESSAGE = 4;
|
|
48
50
|
const MIN_BASE64_HEURISTIC_LENGTH = 512;
|
|
49
51
|
const MAX_TOOL_TEXT_CHARS = 8e3;
|
|
50
52
|
const MIN_TOOL_INLINE_MEDIA_BYTES = 1024;
|
|
@@ -92,60 +94,38 @@ function clonePart(part) {
|
|
|
92
94
|
return cloned;
|
|
93
95
|
}
|
|
94
96
|
function coerceContentToParts(content) {
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
97
|
+
if (content == null) {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
const normalized = [];
|
|
101
|
+
for (const item of content) {
|
|
102
|
+
if (item.type === "ui-resource") {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (item.type === "text") {
|
|
106
|
+
normalized.push({ type: "text", text: item.text });
|
|
107
|
+
} else if (item.type === "image") {
|
|
108
|
+
const cloned = {
|
|
109
|
+
type: "image",
|
|
110
|
+
image: item.image
|
|
111
|
+
};
|
|
112
|
+
if (item.mimeType) {
|
|
113
|
+
cloned.mimeType = item.mimeType;
|
|
102
114
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
const cloned = {
|
|
113
|
-
type: "image",
|
|
114
|
-
image: imagePart.image
|
|
115
|
-
};
|
|
116
|
-
if (imagePart.mimeType) {
|
|
117
|
-
cloned.mimeType = imagePart.mimeType;
|
|
118
|
-
}
|
|
119
|
-
normalized.push(cloned);
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
if (type === "file") {
|
|
123
|
-
const filePart = item;
|
|
124
|
-
const cloned = {
|
|
125
|
-
type: "file",
|
|
126
|
-
data: filePart.data,
|
|
127
|
-
mimeType: filePart.mimeType ?? "application/octet-stream"
|
|
128
|
-
};
|
|
129
|
-
if (filePart.filename) {
|
|
130
|
-
cloned.filename = filePart.filename;
|
|
131
|
-
}
|
|
132
|
-
normalized.push(cloned);
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
115
|
+
normalized.push(cloned);
|
|
116
|
+
} else if (item.type === "file") {
|
|
117
|
+
const cloned = {
|
|
118
|
+
type: "file",
|
|
119
|
+
data: item.data,
|
|
120
|
+
mimeType: item.mimeType ?? "application/octet-stream"
|
|
121
|
+
};
|
|
122
|
+
if (item.filename) {
|
|
123
|
+
cloned.filename = item.filename;
|
|
135
124
|
}
|
|
125
|
+
normalized.push(cloned);
|
|
136
126
|
}
|
|
137
|
-
return normalized;
|
|
138
|
-
}
|
|
139
|
-
if (typeof content === "string") {
|
|
140
|
-
if (content.length === 0) {
|
|
141
|
-
return [];
|
|
142
|
-
}
|
|
143
|
-
return [{ type: "text", text: content }];
|
|
144
127
|
}
|
|
145
|
-
|
|
146
|
-
return [];
|
|
147
|
-
}
|
|
148
|
-
return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(content) }];
|
|
128
|
+
return normalized;
|
|
149
129
|
}
|
|
150
130
|
function detectInlineMedia(part, index) {
|
|
151
131
|
if (part.type === "text") {
|
|
@@ -311,10 +291,9 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
|
|
|
311
291
|
}
|
|
312
292
|
const resolvedMime = mimeType ?? "application/octet-stream";
|
|
313
293
|
if (resolvedMime.startsWith("image/")) {
|
|
314
|
-
const dataUri = `data:${resolvedMime};base64,${base64Data}`;
|
|
315
294
|
const imagePart = {
|
|
316
295
|
type: "image",
|
|
317
|
-
image:
|
|
296
|
+
image: base64Data,
|
|
318
297
|
mimeType: resolvedMime
|
|
319
298
|
};
|
|
320
299
|
parts.push(imagePart);
|
|
@@ -322,7 +301,7 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
|
|
|
322
301
|
}
|
|
323
302
|
const filePart = {
|
|
324
303
|
type: "file",
|
|
325
|
-
data:
|
|
304
|
+
data: base64Data,
|
|
326
305
|
mimeType: resolvedMime
|
|
327
306
|
};
|
|
328
307
|
if (typeof item.filename === "string" && item.filename.length > 0) {
|
|
@@ -342,67 +321,17 @@ async function resolveBlobReferenceToParts(resourceUri, resourceManager, logger,
|
|
|
342
321
|
return [{ type: "text", text: `[Attachment unavailable: ${resourceUri}]` }];
|
|
343
322
|
}
|
|
344
323
|
}
|
|
345
|
-
function
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
} else if (Array.isArray(message.content)) {
|
|
354
|
-
message.content.forEach((part) => {
|
|
355
|
-
if (part.type === "text" && typeof part.text === "string") {
|
|
356
|
-
total += tokenizer.countTokens(part.text);
|
|
357
|
-
} else if (part.type === "image") {
|
|
358
|
-
if (typeof part.image === "string") {
|
|
359
|
-
if (isDataUri(part.image)) {
|
|
360
|
-
const base64Payload = extractBase64FromDataUri(part.image);
|
|
361
|
-
const byteLength = base64LengthToBytes(base64Payload.length);
|
|
362
|
-
total += Math.ceil(byteLength / 1024);
|
|
363
|
-
} else {
|
|
364
|
-
total += estimateTextTokens(part.image);
|
|
365
|
-
}
|
|
366
|
-
} else if (part.image instanceof Uint8Array || part.image instanceof Buffer || part.image instanceof ArrayBuffer) {
|
|
367
|
-
const bytes = part.image instanceof ArrayBuffer ? part.image.byteLength : part.image.length;
|
|
368
|
-
total += Math.ceil(bytes / 1024);
|
|
369
|
-
}
|
|
370
|
-
} else if (part.type === "file") {
|
|
371
|
-
if (typeof part.data === "string") {
|
|
372
|
-
if (isDataUri(part.data)) {
|
|
373
|
-
const base64Payload = extractBase64FromDataUri(part.data);
|
|
374
|
-
const byteLength = base64LengthToBytes(base64Payload.length);
|
|
375
|
-
total += Math.ceil(byteLength / 1024);
|
|
376
|
-
} else {
|
|
377
|
-
total += estimateTextTokens(part.data);
|
|
378
|
-
}
|
|
379
|
-
} else if (part.data instanceof Uint8Array || part.data instanceof Buffer || part.data instanceof ArrayBuffer) {
|
|
380
|
-
const bytes = part.data instanceof ArrayBuffer ? part.data.byteLength : part.data.length;
|
|
381
|
-
total += Math.ceil(bytes / 1024);
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
});
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
if (message.toolCalls) {
|
|
388
|
-
for (const call of message.toolCalls) {
|
|
389
|
-
if (call.function?.name) {
|
|
390
|
-
total += tokenizer.countTokens(call.function.name);
|
|
391
|
-
}
|
|
392
|
-
if (call.function?.arguments) {
|
|
393
|
-
total += tokenizer.countTokens(call.function.arguments);
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
total += overheadPerMessage;
|
|
324
|
+
function estimateMessagesTokens(messages) {
|
|
325
|
+
return messages.reduce((sum, msg) => {
|
|
326
|
+
if (Array.isArray(msg.content)) {
|
|
327
|
+
return sum + msg.content.reduce((partSum, part) => {
|
|
328
|
+
if (part.type === "text") return partSum + Math.ceil(part.text.length / 4);
|
|
329
|
+
if (part.type === "image" || part.type === "file") return partSum + 1e3;
|
|
330
|
+
return partSum;
|
|
331
|
+
}, 0);
|
|
398
332
|
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
`countMessagesTokens failed: ${error instanceof Error ? error.message : String(error)}`
|
|
402
|
-
);
|
|
403
|
-
throw import_errors.ContextError.tokenCountFailed(error instanceof Error ? error.message : String(error));
|
|
404
|
-
}
|
|
405
|
-
return total;
|
|
333
|
+
return sum;
|
|
334
|
+
}, 0);
|
|
406
335
|
}
|
|
407
336
|
function getImageData(imagePart, logger) {
|
|
408
337
|
const { image } = imagePart;
|
|
@@ -470,122 +399,119 @@ async function getFileDataWithBlobSupport(filePart, resourceManager, logger) {
|
|
|
470
399
|
}
|
|
471
400
|
return getFileData(filePart, logger);
|
|
472
401
|
}
|
|
473
|
-
async function
|
|
474
|
-
if (
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
const uri = token.substring(1);
|
|
493
|
-
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
494
|
-
let resolvedParts = resolvedCache.get(resourceUri);
|
|
495
|
-
if (!resolvedParts) {
|
|
496
|
-
resolvedParts = await resolveBlobReferenceToParts(
|
|
497
|
-
resourceUri,
|
|
498
|
-
resourceManager,
|
|
499
|
-
logger,
|
|
500
|
-
allowedMediaTypes
|
|
501
|
-
);
|
|
502
|
-
resolvedCache.set(resourceUri, resolvedParts);
|
|
503
|
-
}
|
|
504
|
-
if (resolvedParts.length > 0) {
|
|
505
|
-
parts.push(...resolvedParts.map((part) => ({ ...part })));
|
|
506
|
-
} else {
|
|
507
|
-
parts.push({ type: "text", text: token });
|
|
402
|
+
async function expandBlobsInText(text, resourceManager, logger, allowedMediaTypes) {
|
|
403
|
+
if (!text.includes("@blob:")) {
|
|
404
|
+
return [{ type: "text", text }];
|
|
405
|
+
}
|
|
406
|
+
const blobRefPattern = /@blob:[a-f0-9]+/g;
|
|
407
|
+
const matches = [...text.matchAll(blobRefPattern)];
|
|
408
|
+
if (matches.length === 0) {
|
|
409
|
+
return [{ type: "text", text }];
|
|
410
|
+
}
|
|
411
|
+
const resolvedCache = /* @__PURE__ */ new Map();
|
|
412
|
+
const parts = [];
|
|
413
|
+
let lastIndex = 0;
|
|
414
|
+
for (const match of matches) {
|
|
415
|
+
const matchIndex = match.index ?? 0;
|
|
416
|
+
const token = match[0];
|
|
417
|
+
if (matchIndex > lastIndex) {
|
|
418
|
+
const segment = text.slice(lastIndex, matchIndex);
|
|
419
|
+
if (segment.length > 0) {
|
|
420
|
+
parts.push({ type: "text", text: segment });
|
|
508
421
|
}
|
|
509
|
-
lastIndex = matchIndex + token.length;
|
|
510
422
|
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
423
|
+
const uri = token.substring(1);
|
|
424
|
+
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
425
|
+
let resolvedParts = resolvedCache.get(resourceUri);
|
|
426
|
+
if (!resolvedParts) {
|
|
427
|
+
resolvedParts = await resolveBlobReferenceToParts(
|
|
428
|
+
resourceUri,
|
|
429
|
+
resourceManager,
|
|
430
|
+
logger,
|
|
431
|
+
allowedMediaTypes
|
|
432
|
+
);
|
|
433
|
+
resolvedCache.set(resourceUri, resolvedParts);
|
|
516
434
|
}
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
435
|
+
if (resolvedParts.length > 0) {
|
|
436
|
+
parts.push(...resolvedParts.map((p) => ({ ...p })));
|
|
437
|
+
} else {
|
|
438
|
+
parts.push({ type: "text", text: token });
|
|
520
439
|
}
|
|
521
|
-
|
|
440
|
+
lastIndex = matchIndex + token.length;
|
|
522
441
|
}
|
|
523
|
-
if (
|
|
524
|
-
const
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
try {
|
|
555
|
-
const resolvedData = await getFileDataWithBlobSupport(
|
|
556
|
-
part,
|
|
557
|
-
resourceManager,
|
|
558
|
-
logger
|
|
559
|
-
);
|
|
560
|
-
expandedParts.push({ ...part, data: resolvedData });
|
|
561
|
-
} catch (error) {
|
|
562
|
-
logger.warn(`Failed to resolve file blob reference: ${String(error)}`);
|
|
563
|
-
expandedParts.push(part);
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
continue;
|
|
442
|
+
if (lastIndex < text.length) {
|
|
443
|
+
const trailing = text.slice(lastIndex);
|
|
444
|
+
if (trailing.length > 0) {
|
|
445
|
+
parts.push({ type: "text", text: trailing });
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
return parts.filter((p) => p.type !== "text" || p.text.length > 0);
|
|
449
|
+
}
|
|
450
|
+
async function expandBlobReferences(content, resourceManager, logger, allowedMediaTypes) {
|
|
451
|
+
if (content == null || !Array.isArray(content)) {
|
|
452
|
+
return [];
|
|
453
|
+
}
|
|
454
|
+
const expandedParts = [];
|
|
455
|
+
for (const part of content) {
|
|
456
|
+
if (part.type === "ui-resource") {
|
|
457
|
+
expandedParts.push(part);
|
|
458
|
+
continue;
|
|
459
|
+
}
|
|
460
|
+
if (part.type === "image" && typeof part.image === "string" && part.image.startsWith("@blob:")) {
|
|
461
|
+
const uri = part.image.substring(1);
|
|
462
|
+
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
463
|
+
const resolved = await resolveBlobReferenceToParts(
|
|
464
|
+
resourceUri,
|
|
465
|
+
resourceManager,
|
|
466
|
+
logger,
|
|
467
|
+
allowedMediaTypes
|
|
468
|
+
);
|
|
469
|
+
if (resolved.length > 0) {
|
|
470
|
+
expandedParts.push(...resolved.map((p) => ({ ...p })));
|
|
471
|
+
} else {
|
|
472
|
+
expandedParts.push(part);
|
|
567
473
|
}
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
474
|
+
continue;
|
|
475
|
+
}
|
|
476
|
+
if (part.type === "file" && typeof part.data === "string" && part.data.startsWith("@blob:")) {
|
|
477
|
+
const uri = part.data.substring(1);
|
|
478
|
+
const resourceUri = uri.startsWith("blob:") ? uri : `blob:${uri}`;
|
|
479
|
+
const resolved = await resolveBlobReferenceToParts(
|
|
480
|
+
resourceUri,
|
|
481
|
+
resourceManager,
|
|
482
|
+
logger,
|
|
483
|
+
allowedMediaTypes
|
|
484
|
+
);
|
|
485
|
+
if (resolved.length > 0) {
|
|
486
|
+
expandedParts.push(...resolved.map((p) => ({ ...p })));
|
|
487
|
+
} else {
|
|
488
|
+
try {
|
|
489
|
+
const resolvedData = await getFileDataWithBlobSupport(
|
|
490
|
+
part,
|
|
491
|
+
resourceManager,
|
|
492
|
+
logger
|
|
493
|
+
);
|
|
494
|
+
expandedParts.push({ ...part, data: resolvedData });
|
|
495
|
+
} catch (error) {
|
|
496
|
+
logger.warn(`Failed to resolve file blob reference: ${String(error)}`);
|
|
580
497
|
expandedParts.push(part);
|
|
581
498
|
}
|
|
582
|
-
continue;
|
|
583
499
|
}
|
|
584
|
-
|
|
500
|
+
continue;
|
|
501
|
+
}
|
|
502
|
+
if (part.type === "text" && part.text.includes("@blob:")) {
|
|
503
|
+
const expanded = await expandBlobsInText(
|
|
504
|
+
part.text,
|
|
505
|
+
resourceManager,
|
|
506
|
+
logger,
|
|
507
|
+
allowedMediaTypes
|
|
508
|
+
);
|
|
509
|
+
expandedParts.push(...expanded);
|
|
510
|
+
continue;
|
|
585
511
|
}
|
|
586
|
-
|
|
512
|
+
expandedParts.push(part);
|
|
587
513
|
}
|
|
588
|
-
return
|
|
514
|
+
return expandedParts;
|
|
589
515
|
}
|
|
590
516
|
function filterMessagesByLLMCapabilities(messages, config, logger) {
|
|
591
517
|
try {
|
|
@@ -729,7 +655,25 @@ async function normalizeToolResult(result, logger) {
|
|
|
729
655
|
void 0,
|
|
730
656
|
void 0
|
|
731
657
|
);
|
|
732
|
-
const
|
|
658
|
+
const uiResources = [];
|
|
659
|
+
const otherContent = [];
|
|
660
|
+
if (Array.isArray(content)) {
|
|
661
|
+
for (const item of content) {
|
|
662
|
+
if (item && typeof item === "object" && "type" in item && item.type === "ui-resource") {
|
|
663
|
+
uiResources.push(item);
|
|
664
|
+
} else {
|
|
665
|
+
otherContent.push(item);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
} else {
|
|
669
|
+
otherContent.push(content);
|
|
670
|
+
}
|
|
671
|
+
if (uiResources.length > 0) {
|
|
672
|
+
logger.debug(
|
|
673
|
+
`normalizeToolResult: extracted ${uiResources.length} UI resource(s): ${uiResources.map((r) => r.uri).join(", ")}`
|
|
674
|
+
);
|
|
675
|
+
}
|
|
676
|
+
const parts = coerceContentToParts(otherContent);
|
|
733
677
|
const inlineMedia = [];
|
|
734
678
|
parts.forEach((part, index) => {
|
|
735
679
|
const hint = detectInlineMedia(part, index);
|
|
@@ -739,6 +683,7 @@ async function normalizeToolResult(result, logger) {
|
|
|
739
683
|
});
|
|
740
684
|
return {
|
|
741
685
|
parts,
|
|
686
|
+
uiResources,
|
|
742
687
|
inlineMedia
|
|
743
688
|
};
|
|
744
689
|
}
|
|
@@ -790,6 +735,7 @@ async function persistToolMedia(normalized, options, logger) {
|
|
|
790
735
|
const resources = extractResourceDescriptors(parts);
|
|
791
736
|
return {
|
|
792
737
|
parts,
|
|
738
|
+
uiResources: normalized.uiResources,
|
|
793
739
|
...resources ? { resources } : {}
|
|
794
740
|
};
|
|
795
741
|
}
|
|
@@ -836,53 +782,22 @@ async function sanitizeToolResultToContentWithBlobs(result, logger, blobStore, n
|
|
|
836
782
|
}
|
|
837
783
|
];
|
|
838
784
|
}
|
|
839
|
-
if (isLikelyBase64String(result)) {
|
|
840
|
-
logger.debug("sanitizeToolResultToContentWithBlobs: detected base64-like string");
|
|
841
|
-
const approxSize = Math.floor(result.length * 3 / 4);
|
|
842
|
-
const shouldStoreAsBlob = blobStore && approxSize > 1024;
|
|
843
|
-
if (shouldStoreAsBlob) {
|
|
844
|
-
try {
|
|
845
|
-
const blobRef = await blobStore.store(result, {
|
|
846
|
-
mimeType: "application/octet-stream",
|
|
847
|
-
source: "tool",
|
|
848
|
-
originalName: buildToolBlobName("output", void 0, namingOptions)
|
|
849
|
-
});
|
|
850
|
-
logger.debug(
|
|
851
|
-
`Stored tool result as blob: ${blobRef.uri} (${approxSize} bytes)`
|
|
852
|
-
);
|
|
853
|
-
return [
|
|
854
|
-
createBlobFilePart(
|
|
855
|
-
blobRef.uri,
|
|
856
|
-
"application/octet-stream",
|
|
857
|
-
"tool-output.bin"
|
|
858
|
-
)
|
|
859
|
-
];
|
|
860
|
-
} catch (error) {
|
|
861
|
-
logger.warn(
|
|
862
|
-
`Failed to store blob, falling back to inline: ${String(error)}`
|
|
863
|
-
);
|
|
864
|
-
}
|
|
865
|
-
}
|
|
866
|
-
return [
|
|
867
|
-
{
|
|
868
|
-
type: "file",
|
|
869
|
-
data: result,
|
|
870
|
-
mimeType: "application/octet-stream",
|
|
871
|
-
filename: "tool-output.bin"
|
|
872
|
-
}
|
|
873
|
-
];
|
|
874
|
-
}
|
|
875
785
|
if (result.length > MAX_TOOL_TEXT_CHARS) {
|
|
876
786
|
const head = result.slice(0, 4e3);
|
|
877
787
|
const tail = result.slice(-1e3);
|
|
878
788
|
logger.debug(
|
|
879
789
|
`sanitizeToolResultToContentWithBlobs: truncating long text tool output (len=${result.length})`
|
|
880
790
|
);
|
|
881
|
-
return
|
|
791
|
+
return [
|
|
792
|
+
{
|
|
793
|
+
type: "text",
|
|
794
|
+
text: `${head}
|
|
882
795
|
... [${result.length - 5e3} chars omitted] ...
|
|
883
|
-
${tail}
|
|
796
|
+
${tail}`
|
|
797
|
+
}
|
|
798
|
+
];
|
|
884
799
|
}
|
|
885
|
-
return result;
|
|
800
|
+
return [{ type: "text", text: result }];
|
|
886
801
|
}
|
|
887
802
|
if (Array.isArray(result)) {
|
|
888
803
|
const parts = [];
|
|
@@ -894,10 +809,10 @@ ${tail}`;
|
|
|
894
809
|
blobStore,
|
|
895
810
|
namingOptions
|
|
896
811
|
);
|
|
897
|
-
if (
|
|
898
|
-
parts.push(
|
|
899
|
-
|
|
900
|
-
|
|
812
|
+
if (Array.isArray(processedItem)) {
|
|
813
|
+
parts.push(
|
|
814
|
+
...processedItem
|
|
815
|
+
);
|
|
901
816
|
}
|
|
902
817
|
}
|
|
903
818
|
return parts;
|
|
@@ -911,6 +826,34 @@ ${tail}`;
|
|
|
911
826
|
const processedContent = [];
|
|
912
827
|
for (const item of anyObj.content) {
|
|
913
828
|
if (item && typeof item === "object") {
|
|
829
|
+
if (item.type === "resource" && item.resource) {
|
|
830
|
+
const resource = item.resource;
|
|
831
|
+
const resourceUri = resource.uri;
|
|
832
|
+
if (resourceUri && resourceUri.startsWith("ui://")) {
|
|
833
|
+
logger.debug(
|
|
834
|
+
`Detected MCP-UI resource: ${resourceUri} (${resource.mimeType})`
|
|
835
|
+
);
|
|
836
|
+
const resourceMeta = resource._meta || {};
|
|
837
|
+
const title = resourceMeta.title || resource.title;
|
|
838
|
+
const preferredSize = resourceMeta.preferredSize || resource.preferredSize;
|
|
839
|
+
const uiPart = {
|
|
840
|
+
type: "ui-resource",
|
|
841
|
+
uri: resourceUri,
|
|
842
|
+
mimeType: resource.mimeType || "text/html",
|
|
843
|
+
content: resource.text,
|
|
844
|
+
blob: resource.blob,
|
|
845
|
+
metadata: {
|
|
846
|
+
title,
|
|
847
|
+
preferredSize
|
|
848
|
+
}
|
|
849
|
+
};
|
|
850
|
+
if (!uiPart.metadata?.title && !uiPart.metadata?.preferredSize) {
|
|
851
|
+
delete uiPart.metadata;
|
|
852
|
+
}
|
|
853
|
+
processedContent.push(uiPart);
|
|
854
|
+
continue;
|
|
855
|
+
}
|
|
856
|
+
}
|
|
914
857
|
if (item.type === "resource" && item.resource) {
|
|
915
858
|
const resource = item.resource;
|
|
916
859
|
if (resource.text && resource.mimeType) {
|
|
@@ -1107,17 +1050,17 @@ ${tail}`;
|
|
|
1107
1050
|
];
|
|
1108
1051
|
}
|
|
1109
1052
|
const cleaned = sanitizeDeepObject(anyObj, logger);
|
|
1110
|
-
return (0, import_safe_stringify.safeStringify)(cleaned);
|
|
1053
|
+
return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(cleaned) }];
|
|
1111
1054
|
}
|
|
1112
|
-
return (0, import_safe_stringify.safeStringify)(result ?? "");
|
|
1055
|
+
return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(result ?? "") }];
|
|
1113
1056
|
} catch (err) {
|
|
1114
1057
|
logger.warn(
|
|
1115
1058
|
`sanitizeToolResultToContentWithBlobs failed, falling back to string: ${String(err)}`
|
|
1116
1059
|
);
|
|
1117
1060
|
try {
|
|
1118
|
-
return (0, import_safe_stringify.safeStringify)(result ?? "");
|
|
1061
|
+
return [{ type: "text", text: (0, import_safe_stringify.safeStringify)(result ?? "") }];
|
|
1119
1062
|
} catch {
|
|
1120
|
-
return String(result ?? "");
|
|
1063
|
+
return [{ type: "text", text: String(result ?? "") }];
|
|
1121
1064
|
}
|
|
1122
1065
|
}
|
|
1123
1066
|
}
|
|
@@ -1161,7 +1104,19 @@ function extractResourceDescriptors(parts) {
|
|
|
1161
1104
|
return resources.length > 0 ? resources : void 0;
|
|
1162
1105
|
}
|
|
1163
1106
|
async function sanitizeToolResult(result, options, logger) {
|
|
1164
|
-
|
|
1107
|
+
let display;
|
|
1108
|
+
let resultForNormalization = result;
|
|
1109
|
+
if (result && typeof result === "object" && "_display" in result) {
|
|
1110
|
+
const { _display: rawDisplay, ...rest } = result;
|
|
1111
|
+
if ((0, import_display_types.isValidDisplayData)(rawDisplay)) {
|
|
1112
|
+
display = rawDisplay;
|
|
1113
|
+
logger.debug(
|
|
1114
|
+
`sanitizeToolResult: extracted display data (type=${display.type}) for ${options.toolName}`
|
|
1115
|
+
);
|
|
1116
|
+
}
|
|
1117
|
+
resultForNormalization = rest;
|
|
1118
|
+
}
|
|
1119
|
+
const normalized = await normalizeToolResult(resultForNormalization, logger);
|
|
1165
1120
|
const persisted = await persistToolMedia(
|
|
1166
1121
|
normalized,
|
|
1167
1122
|
{
|
|
@@ -1172,14 +1127,24 @@ async function sanitizeToolResult(result, options, logger) {
|
|
|
1172
1127
|
logger
|
|
1173
1128
|
);
|
|
1174
1129
|
const fallbackContent = [{ type: "text", text: "" }];
|
|
1175
|
-
const
|
|
1130
|
+
const allContent = [
|
|
1131
|
+
...persisted.parts,
|
|
1132
|
+
...persisted.uiResources
|
|
1133
|
+
];
|
|
1134
|
+
const content = allContent.length > 0 ? allContent : fallbackContent;
|
|
1135
|
+
if (persisted.uiResources.length > 0) {
|
|
1136
|
+
logger.debug(
|
|
1137
|
+
`sanitizeToolResult: including ${persisted.uiResources.length} UI resource(s) in final content for ${options.toolName}`
|
|
1138
|
+
);
|
|
1139
|
+
}
|
|
1176
1140
|
return {
|
|
1177
1141
|
content,
|
|
1178
1142
|
...persisted.resources ? { resources: persisted.resources } : {},
|
|
1179
1143
|
meta: {
|
|
1180
1144
|
toolName: options.toolName,
|
|
1181
1145
|
toolCallId: options.toolCallId,
|
|
1182
|
-
|
|
1146
|
+
success: options.success,
|
|
1147
|
+
...display ? { display } : {}
|
|
1183
1148
|
}
|
|
1184
1149
|
};
|
|
1185
1150
|
}
|
|
@@ -1212,16 +1177,6 @@ function summarizeToolContentForText(content) {
|
|
|
1212
1177
|
function base64LengthToBytes(charLength) {
|
|
1213
1178
|
return Math.floor(charLength * 3 / 4);
|
|
1214
1179
|
}
|
|
1215
|
-
function isDataUri(str) {
|
|
1216
|
-
return str.startsWith("data:") && str.includes(";base64,");
|
|
1217
|
-
}
|
|
1218
|
-
function extractBase64FromDataUri(dataUri) {
|
|
1219
|
-
const commaIndex = dataUri.indexOf(",");
|
|
1220
|
-
return commaIndex !== -1 ? dataUri.substring(commaIndex + 1) : "";
|
|
1221
|
-
}
|
|
1222
|
-
function estimateTextTokens(text) {
|
|
1223
|
-
return Math.ceil(text.length / 4);
|
|
1224
|
-
}
|
|
1225
1180
|
function toTextForToolMessage(content) {
|
|
1226
1181
|
if (Array.isArray(content)) {
|
|
1227
1182
|
return summarizeToolContentForText(content);
|
|
@@ -1231,12 +1186,40 @@ function toTextForToolMessage(content) {
|
|
|
1231
1186
|
}
|
|
1232
1187
|
return String(content ?? "");
|
|
1233
1188
|
}
|
|
1189
|
+
function filterCompacted(history) {
|
|
1190
|
+
let summaryIndex = -1;
|
|
1191
|
+
for (let i = history.length - 1; i >= 0; i--) {
|
|
1192
|
+
const msg = history[i];
|
|
1193
|
+
if (msg?.metadata?.isSummary === true) {
|
|
1194
|
+
summaryIndex = i;
|
|
1195
|
+
break;
|
|
1196
|
+
}
|
|
1197
|
+
}
|
|
1198
|
+
if (summaryIndex === -1) {
|
|
1199
|
+
return history.slice();
|
|
1200
|
+
}
|
|
1201
|
+
return history.slice(summaryIndex);
|
|
1202
|
+
}
|
|
1203
|
+
function formatToolOutputForDisplay(message) {
|
|
1204
|
+
if ((0, import_types.isToolMessage)(message) && message.compactedAt) {
|
|
1205
|
+
return "[Old tool result content cleared]";
|
|
1206
|
+
}
|
|
1207
|
+
if (typeof message.content === "string") {
|
|
1208
|
+
return message.content;
|
|
1209
|
+
}
|
|
1210
|
+
if (Array.isArray(message.content)) {
|
|
1211
|
+
return message.content.filter((part) => part.type === "text").map((part) => part.text).join("\n");
|
|
1212
|
+
}
|
|
1213
|
+
return "[no content]";
|
|
1214
|
+
}
|
|
1234
1215
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1235
1216
|
0 && (module.exports = {
|
|
1236
|
-
|
|
1217
|
+
estimateMessagesTokens,
|
|
1237
1218
|
expandBlobReferences,
|
|
1238
1219
|
fileTypesToMimePatterns,
|
|
1220
|
+
filterCompacted,
|
|
1239
1221
|
filterMessagesByLLMCapabilities,
|
|
1222
|
+
formatToolOutputForDisplay,
|
|
1240
1223
|
getFileData,
|
|
1241
1224
|
getFileDataWithBlobSupport,
|
|
1242
1225
|
getFileMediaKind,
|