@dexto/core 1.2.4 → 1.2.6
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 +60 -0
- package/dist/agent/DextoAgent.cjs +579 -345
- package/dist/agent/DextoAgent.d.ts +131 -83
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +573 -336
- package/dist/agent/agentCard.cjs +4 -2
- package/dist/agent/agentCard.d.ts +0 -1
- package/dist/agent/agentCard.d.ts.map +1 -1
- package/dist/agent/agentCard.js +4 -2
- package/dist/agent/index.cjs +3 -7
- package/dist/agent/index.d.ts +3 -3
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +7 -6
- package/dist/agent/schemas.cjs +179 -75
- package/dist/agent/schemas.d.ts +2678 -586
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +172 -65
- package/dist/agent/state-manager.cjs +28 -23
- package/dist/agent/state-manager.d.ts +4 -1
- package/dist/agent/state-manager.d.ts.map +1 -1
- package/dist/agent/state-manager.js +28 -23
- package/dist/{preferences/constants.cjs → agent/types.cjs} +2 -14
- package/dist/agent/types.d.ts +54 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +0 -0
- package/dist/approval/errors.cjs +89 -8
- package/dist/approval/errors.d.ts +5 -3
- package/dist/approval/errors.d.ts.map +1 -1
- package/dist/approval/errors.js +89 -8
- package/dist/approval/{providers/factory.d.ts → factory.d.ts} +2 -2
- package/dist/approval/factory.d.ts.map +1 -0
- package/dist/approval/{providers/factory.js → factory.js} +1 -1
- package/dist/approval/index.cjs +4 -6
- package/dist/approval/index.d.ts +3 -5
- package/dist/approval/index.d.ts.map +1 -1
- package/dist/approval/index.js +4 -5
- package/dist/approval/manager.cjs +140 -37
- package/dist/approval/manager.d.ts +56 -17
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +141 -38
- package/dist/approval/schemas.cjs +9 -1
- package/dist/approval/schemas.d.ts +120 -35
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +9 -2
- package/dist/approval/types.cjs +14 -2
- package/dist/approval/types.d.ts +64 -12
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +12 -1
- package/dist/context/compression/middle-removal.cjs +11 -11
- package/dist/context/compression/middle-removal.d.ts +3 -1
- package/dist/context/compression/middle-removal.d.ts.map +1 -1
- package/dist/context/compression/middle-removal.js +11 -11
- package/dist/context/compression/oldest-removal.cjs +18 -5
- package/dist/context/compression/oldest-removal.d.ts +3 -1
- package/dist/context/compression/oldest-removal.d.ts.map +1 -1
- package/dist/context/compression/oldest-removal.js +18 -5
- package/dist/context/manager.cjs +94 -67
- package/dist/context/manager.d.ts +13 -10
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +94 -67
- package/dist/context/utils.cjs +79 -65
- package/dist/context/utils.d.ts +15 -12
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +45 -31
- package/dist/errors/DextoRuntimeError.d.ts +5 -5
- package/dist/errors/DextoRuntimeError.d.ts.map +1 -1
- package/dist/errors/result-bridge.cjs +2 -3
- package/dist/errors/result-bridge.d.ts +5 -3
- package/dist/errors/result-bridge.d.ts.map +1 -1
- package/dist/errors/result-bridge.js +1 -2
- package/dist/errors/types.cjs +1 -2
- package/dist/errors/types.d.ts +5 -8
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/errors/types.js +1 -2
- package/dist/events/index.cjs +125 -55
- package/dist/events/index.d.ts +204 -97
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +123 -55
- package/dist/filesystem/filesystem-service.cjs +40 -30
- package/dist/filesystem/filesystem-service.d.ts +9 -1
- package/dist/filesystem/filesystem-service.d.ts.map +1 -1
- package/dist/filesystem/filesystem-service.js +40 -30
- package/dist/filesystem/path-validator.cjs +4 -3
- package/dist/filesystem/path-validator.d.ts +3 -1
- package/dist/filesystem/path-validator.d.ts.map +1 -1
- package/dist/filesystem/path-validator.js +4 -3
- package/dist/filesystem/types.d.ts +3 -3
- package/dist/filesystem/types.d.ts.map +1 -1
- package/dist/index.browser.cjs +7 -0
- package/dist/index.browser.d.ts +2 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +4 -0
- package/dist/index.cjs +0 -7
- package/dist/index.d.ts +12 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/llm/formatters/anthropic.cjs +32 -21
- package/dist/llm/formatters/anthropic.d.ts +3 -0
- package/dist/llm/formatters/anthropic.d.ts.map +1 -1
- package/dist/llm/formatters/anthropic.js +32 -21
- package/dist/llm/formatters/factory.cjs +6 -7
- package/dist/llm/formatters/factory.d.ts +2 -1
- package/dist/llm/formatters/factory.d.ts.map +1 -1
- package/dist/llm/formatters/factory.js +4 -5
- package/dist/llm/formatters/openai.cjs +38 -9
- package/dist/llm/formatters/openai.d.ts +3 -0
- package/dist/llm/formatters/openai.d.ts.map +1 -1
- package/dist/llm/formatters/openai.js +38 -9
- package/dist/llm/formatters/vercel.cjs +49 -8
- package/dist/llm/formatters/vercel.d.ts +3 -0
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +49 -8
- package/dist/llm/registry.cjs +153 -17
- package/dist/llm/registry.d.ts +5 -2
- package/dist/llm/registry.d.ts.map +1 -1
- package/dist/llm/registry.js +143 -7
- package/dist/llm/resolver.cjs +4 -4
- package/dist/llm/resolver.d.ts +3 -2
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +4 -4
- package/dist/llm/schemas.cjs +6 -3
- package/dist/llm/schemas.d.ts +51 -17
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +5 -3
- package/dist/llm/services/anthropic.cjs +216 -183
- package/dist/llm/services/anthropic.d.ts +3 -1
- package/dist/llm/services/anthropic.d.ts.map +1 -1
- package/dist/llm/services/anthropic.js +217 -184
- package/dist/llm/services/factory.cjs +15 -9
- package/dist/llm/services/factory.d.ts +2 -1
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +15 -9
- package/dist/llm/services/openai.cjs +262 -225
- package/dist/llm/services/openai.d.ts +3 -1
- package/dist/llm/services/openai.d.ts.map +1 -1
- package/dist/llm/services/openai.js +263 -226
- package/dist/llm/services/test-utils.integration.cjs +58 -12
- package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
- package/dist/llm/services/test-utils.integration.js +58 -12
- package/dist/llm/services/types.d.ts +9 -0
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +163 -111
- package/dist/llm/services/vercel.d.ts +3 -1
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +157 -105
- package/dist/llm/tokenizer/factory.cjs +2 -2
- package/dist/llm/tokenizer/factory.d.ts +3 -1
- package/dist/llm/tokenizer/factory.d.ts.map +1 -1
- package/dist/llm/tokenizer/factory.js +2 -2
- package/dist/llm/tokenizer/openai.cjs +16 -9
- package/dist/llm/tokenizer/openai.d.ts +4 -1
- package/dist/llm/tokenizer/openai.d.ts.map +1 -1
- package/dist/llm/tokenizer/openai.js +16 -9
- package/dist/llm/validation.cjs +8 -9
- package/dist/llm/validation.d.ts +3 -1
- package/dist/llm/validation.d.ts.map +1 -1
- package/dist/llm/validation.js +5 -6
- package/dist/logger/factory.cjs +54 -0
- package/dist/logger/factory.d.ts +36 -0
- package/dist/logger/factory.d.ts.map +1 -0
- package/dist/logger/factory.js +31 -0
- package/dist/logger/index.cjs +42 -3
- package/dist/logger/index.d.ts +17 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +26 -1
- package/dist/logger/logger.cjs +30 -17
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.js +30 -17
- package/dist/logger/v2/dexto-logger.cjs +141 -0
- package/dist/logger/v2/dexto-logger.d.ts +54 -0
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -0
- package/dist/logger/v2/dexto-logger.js +118 -0
- package/dist/{preferences → logger/v2}/error-codes.cjs +11 -10
- package/dist/logger/v2/error-codes.d.ts +13 -0
- package/dist/logger/v2/error-codes.d.ts.map +1 -0
- package/dist/logger/v2/error-codes.js +13 -0
- package/dist/logger/v2/errors.cjs +107 -0
- package/dist/logger/v2/errors.d.ts +32 -0
- package/dist/logger/v2/errors.d.ts.map +1 -0
- package/dist/logger/v2/errors.js +84 -0
- package/dist/logger/v2/schemas.cjs +57 -0
- package/dist/logger/v2/schemas.d.ts +147 -0
- package/dist/logger/v2/schemas.d.ts.map +1 -0
- package/dist/logger/v2/schemas.js +33 -0
- package/dist/logger/v2/transport-factory.cjs +53 -0
- package/dist/logger/v2/transport-factory.d.ts +21 -0
- package/dist/logger/v2/transport-factory.d.ts.map +1 -0
- package/dist/logger/v2/transport-factory.js +29 -0
- package/dist/logger/v2/transports/console-transport.cjs +79 -0
- package/dist/logger/v2/transports/console-transport.d.ts +23 -0
- package/dist/logger/v2/transports/console-transport.d.ts.map +1 -0
- package/dist/logger/v2/transports/console-transport.js +46 -0
- package/dist/logger/v2/transports/file-transport.cjs +161 -0
- package/dist/logger/v2/transports/file-transport.d.ts +46 -0
- package/dist/logger/v2/transports/file-transport.d.ts.map +1 -0
- package/dist/logger/v2/transports/file-transport.js +128 -0
- package/dist/logger/v2/types.cjs +49 -0
- package/dist/logger/v2/types.d.ts +123 -0
- package/dist/logger/v2/types.d.ts.map +1 -0
- package/dist/logger/v2/types.js +26 -0
- package/dist/mcp/manager.cjs +88 -78
- package/dist/mcp/manager.d.ts +3 -1
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +88 -78
- package/dist/mcp/mcp-client.cjs +109 -79
- package/dist/mcp/mcp-client.d.ts +3 -0
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +102 -72
- package/dist/memory/index.cjs +2 -0
- package/dist/memory/index.d.ts +1 -1
- package/dist/memory/index.d.ts.map +1 -1
- package/dist/memory/index.js +3 -1
- package/dist/memory/manager.cjs +9 -7
- package/dist/memory/manager.d.ts +3 -1
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +9 -7
- package/dist/memory/schemas.cjs +10 -0
- package/dist/memory/schemas.d.ts +37 -8
- package/dist/memory/schemas.d.ts.map +1 -1
- package/dist/memory/schemas.js +9 -0
- package/dist/plugins/manager.cjs +21 -19
- package/dist/plugins/manager.d.ts +3 -1
- package/dist/plugins/manager.d.ts.map +1 -1
- package/dist/plugins/manager.js +21 -19
- package/dist/plugins/schemas.d.ts +9 -9
- package/dist/plugins/types.d.ts +2 -2
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/process/command-validator.cjs +30 -20
- package/dist/process/command-validator.d.ts +4 -1
- package/dist/process/command-validator.d.ts.map +1 -1
- package/dist/process/command-validator.js +30 -20
- package/dist/process/process-service.cjs +23 -21
- package/dist/process/process-service.d.ts +3 -1
- package/dist/process/process-service.d.ts.map +1 -1
- package/dist/process/process-service.js +23 -21
- package/dist/prompts/index.cjs +6 -8
- package/dist/prompts/index.d.ts +2 -4
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +4 -6
- package/dist/prompts/prompt-manager.cjs +25 -20
- package/dist/prompts/prompt-manager.d.ts +3 -1
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +25 -20
- package/dist/prompts/providers/config-prompt-provider.cjs +331 -0
- package/dist/prompts/providers/config-prompt-provider.d.ts +34 -0
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -0
- package/dist/prompts/providers/config-prompt-provider.js +308 -0
- package/dist/prompts/providers/custom-prompt-provider.cjs +11 -7
- package/dist/prompts/providers/custom-prompt-provider.d.ts +3 -1
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +11 -7
- package/dist/prompts/providers/mcp-prompt-provider.cjs +7 -6
- package/dist/prompts/providers/mcp-prompt-provider.d.ts +3 -1
- package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/mcp-prompt-provider.js +7 -6
- package/dist/prompts/schemas.cjs +42 -23
- package/dist/prompts/schemas.d.ts +123 -14
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +39 -22
- package/dist/prompts/types.d.ts +1 -1
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/resources/handlers/blob-handler.cjs +15 -11
- package/dist/resources/handlers/blob-handler.d.ts +3 -1
- package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
- package/dist/resources/handlers/blob-handler.js +15 -11
- package/dist/resources/handlers/factory.cjs +3 -3
- package/dist/resources/handlers/factory.d.ts +2 -1
- package/dist/resources/handlers/factory.d.ts.map +1 -1
- package/dist/resources/handlers/factory.js +3 -3
- package/dist/resources/handlers/filesystem-handler.cjs +10 -8
- package/dist/resources/handlers/filesystem-handler.d.ts +3 -1
- package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
- package/dist/resources/handlers/filesystem-handler.js +10 -8
- package/dist/resources/internal-provider.cjs +28 -20
- package/dist/resources/internal-provider.d.ts +3 -1
- package/dist/resources/internal-provider.d.ts.map +1 -1
- package/dist/resources/internal-provider.js +28 -20
- package/dist/resources/manager.cjs +34 -25
- package/dist/resources/manager.d.ts +3 -1
- package/dist/resources/manager.d.ts.map +1 -1
- package/dist/resources/manager.js +34 -25
- package/dist/resources/schemas.d.ts +6 -6
- package/dist/search/search-service.cjs +8 -6
- package/dist/search/search-service.d.ts +3 -1
- package/dist/search/search-service.d.ts.map +1 -1
- package/dist/search/search-service.js +8 -6
- package/dist/session/chat-session.cjs +40 -27
- package/dist/session/chat-session.d.ts +10 -7
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +40 -27
- package/dist/session/history/database.cjs +18 -11
- package/dist/session/history/database.d.ts +3 -1
- package/dist/session/history/database.d.ts.map +1 -1
- package/dist/session/history/database.js +18 -11
- package/dist/session/history/factory.cjs +2 -2
- package/dist/session/history/factory.d.ts +5 -1
- package/dist/session/history/factory.d.ts.map +1 -1
- package/dist/session/history/factory.js +2 -2
- package/dist/session/session-manager.cjs +37 -53
- package/dist/session/session-manager.d.ts +3 -17
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +37 -53
- package/dist/session/title-generator.cjs +3 -2
- package/dist/session/title-generator.d.ts +2 -1
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +3 -2
- package/dist/storage/blob/factory.cjs +9 -18
- package/dist/storage/blob/factory.d.ts +5 -4
- package/dist/storage/blob/factory.d.ts.map +1 -1
- package/dist/storage/blob/factory.js +8 -17
- package/dist/storage/blob/local-blob-store.cjs +25 -32
- package/dist/storage/blob/local-blob-store.d.ts +3 -2
- package/dist/storage/blob/local-blob-store.d.ts.map +1 -1
- package/dist/storage/blob/local-blob-store.js +25 -32
- package/dist/storage/blob/memory-blob-store.cjs +326 -0
- package/dist/storage/blob/memory-blob-store.d.ts +66 -0
- package/dist/storage/blob/memory-blob-store.d.ts.map +1 -0
- package/dist/storage/blob/memory-blob-store.js +303 -0
- package/dist/storage/blob/schemas.cjs +3 -1
- package/dist/storage/blob/schemas.d.ts +6 -6
- package/dist/storage/blob/schemas.d.ts.map +1 -1
- package/dist/storage/blob/schemas.js +3 -1
- package/dist/storage/cache/factory.cjs +7 -8
- package/dist/storage/cache/factory.d.ts +4 -1
- package/dist/storage/cache/factory.d.ts.map +1 -1
- package/dist/storage/cache/factory.js +4 -5
- package/dist/storage/cache/redis-store.cjs +4 -1
- package/dist/storage/cache/redis-store.d.ts +3 -1
- package/dist/storage/cache/redis-store.d.ts.map +1 -1
- package/dist/storage/cache/redis-store.js +4 -1
- package/dist/storage/database/factory.cjs +13 -16
- package/dist/storage/database/factory.d.ts +5 -3
- package/dist/storage/database/factory.d.ts.map +1 -1
- package/dist/storage/database/factory.js +9 -12
- package/dist/storage/database/postgres-store.cjs +4 -1
- package/dist/storage/database/postgres-store.d.ts +3 -1
- package/dist/storage/database/postgres-store.d.ts.map +1 -1
- package/dist/storage/database/postgres-store.js +4 -1
- package/dist/storage/database/schemas.cjs +3 -4
- package/dist/storage/database/schemas.d.ts +8 -16
- package/dist/storage/database/schemas.d.ts.map +1 -1
- package/dist/storage/database/schemas.js +3 -4
- package/dist/storage/database/sqlite-store.cjs +17 -45
- package/dist/storage/database/sqlite-store.d.ts +3 -3
- package/dist/storage/database/sqlite-store.d.ts.map +1 -1
- package/dist/storage/database/sqlite-store.js +17 -45
- package/dist/storage/schemas.cjs +3 -1
- package/dist/storage/schemas.d.ts +16 -23
- package/dist/storage/schemas.d.ts.map +1 -1
- package/dist/storage/schemas.js +3 -1
- package/dist/storage/storage-manager.cjs +15 -15
- package/dist/storage/storage-manager.d.ts +6 -6
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +15 -15
- package/dist/systemPrompt/contributors.cjs +15 -15
- package/dist/systemPrompt/contributors.d.ts +5 -3
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.js +15 -15
- package/dist/systemPrompt/in-built-prompts.cjs +0 -5
- package/dist/systemPrompt/in-built-prompts.d.ts +1 -2
- package/dist/systemPrompt/in-built-prompts.d.ts.map +1 -1
- package/dist/systemPrompt/in-built-prompts.js +0 -4
- package/dist/systemPrompt/manager.cjs +31 -23
- package/dist/systemPrompt/manager.d.ts +5 -3
- package/dist/systemPrompt/manager.d.ts.map +1 -1
- package/dist/systemPrompt/manager.js +31 -23
- package/dist/systemPrompt/registry.cjs +1 -2
- package/dist/systemPrompt/registry.d.ts +1 -1
- package/dist/systemPrompt/registry.d.ts.map +1 -1
- package/dist/systemPrompt/registry.js +1 -2
- package/dist/systemPrompt/schemas.cjs +24 -18
- package/dist/systemPrompt/schemas.d.ts +46 -222
- package/dist/systemPrompt/schemas.d.ts.map +1 -1
- package/dist/systemPrompt/schemas.js +14 -18
- package/dist/telemetry/decorators.cjs +54 -15
- package/dist/telemetry/decorators.d.ts.map +1 -1
- package/dist/telemetry/decorators.js +54 -15
- package/dist/telemetry/utils.cjs +21 -14
- package/dist/telemetry/utils.d.ts +7 -3
- package/dist/telemetry/utils.d.ts.map +1 -1
- package/dist/telemetry/utils.js +21 -14
- package/dist/tools/confirmation/allowed-tools-provider/factory.cjs +2 -2
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +2 -1
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/factory.js +2 -2
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +7 -6
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +3 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +7 -6
- package/dist/tools/errors.cjs +2 -1
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +2 -1
- package/dist/tools/internal-tools/constants.cjs +2 -1
- package/dist/tools/internal-tools/constants.d.ts +1 -1
- package/dist/tools/internal-tools/constants.d.ts.map +1 -1
- package/dist/tools/internal-tools/constants.js +2 -1
- package/dist/tools/internal-tools/implementations/bash-exec-tool.cjs +1 -1
- package/dist/tools/internal-tools/implementations/bash-exec-tool.js +1 -1
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.cjs +192 -0
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.d.ts +33 -0
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +169 -0
- package/dist/tools/internal-tools/provider.cjs +21 -17
- package/dist/tools/internal-tools/provider.d.ts +3 -1
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +21 -17
- package/dist/tools/internal-tools/registry.cjs +5 -0
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +5 -0
- package/dist/tools/schemas.cjs +16 -4
- package/dist/tools/schemas.d.ts +21 -9
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +15 -4
- package/dist/tools/tool-manager.cjs +64 -47
- package/dist/tools/tool-manager.d.ts +4 -2
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +61 -44
- package/dist/tools/types.d.ts +0 -4
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/env-file.cjs +118 -0
- package/dist/utils/env-file.d.ts +5 -0
- package/dist/utils/env-file.d.ts.map +1 -0
- package/dist/utils/env-file.js +85 -0
- package/dist/utils/error-conversion.cjs +23 -1
- package/dist/utils/error-conversion.d.ts +2 -1
- package/dist/utils/error-conversion.d.ts.map +1 -1
- package/dist/utils/error-conversion.js +23 -1
- package/dist/utils/execution-context.d.ts.map +1 -1
- package/dist/utils/fs-walk.d.ts.map +1 -1
- package/dist/utils/index.cjs +7 -9
- package/dist/utils/index.d.ts +3 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +3 -4
- package/dist/utils/path.cjs +22 -57
- package/dist/utils/path.d.ts +8 -7
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/path.js +21 -54
- package/dist/utils/result.cjs +37 -14
- package/dist/utils/result.d.ts.map +1 -1
- package/dist/utils/result.js +37 -14
- package/dist/utils/schema.cjs +2 -3
- package/dist/utils/schema.d.ts +2 -1
- package/dist/utils/schema.d.ts.map +1 -1
- package/dist/utils/schema.js +1 -2
- package/dist/utils/service-initializer.cjs +88 -61
- package/dist/utils/service-initializer.d.ts +4 -2
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +70 -43
- package/package.json +7 -3
- package/dist/Dexto.cjs +0 -251
- package/dist/Dexto.d.ts +0 -191
- package/dist/Dexto.d.ts.map +0 -1
- package/dist/Dexto.js +0 -228
- package/dist/agent/registry/error-codes.cjs +0 -44
- package/dist/agent/registry/error-codes.d.ts +0 -21
- package/dist/agent/registry/error-codes.d.ts.map +0 -1
- package/dist/agent/registry/error-codes.js +0 -21
- package/dist/agent/registry/errors.cjs +0 -188
- package/dist/agent/registry/errors.d.ts +0 -63
- package/dist/agent/registry/errors.d.ts.map +0 -1
- package/dist/agent/registry/errors.js +0 -165
- package/dist/agent/registry/registry.cjs +0 -479
- package/dist/agent/registry/registry.d.ts +0 -130
- package/dist/agent/registry/registry.d.ts.map +0 -1
- package/dist/agent/registry/registry.js +0 -453
- package/dist/agent/registry/types.cjs +0 -74
- package/dist/agent/registry/types.d.ts +0 -142
- package/dist/agent/registry/types.d.ts.map +0 -1
- package/dist/agent/registry/types.js +0 -48
- package/dist/agent/registry/user-registry.cjs +0 -140
- package/dist/agent/registry/user-registry.d.ts +0 -34
- package/dist/agent/registry/user-registry.d.ts.map +0 -1
- package/dist/agent/registry/user-registry.js +0 -105
- package/dist/approval/providers/event-based-approval-provider.cjs +0 -156
- package/dist/approval/providers/event-based-approval-provider.d.ts +0 -39
- package/dist/approval/providers/event-based-approval-provider.d.ts.map +0 -1
- package/dist/approval/providers/event-based-approval-provider.js +0 -133
- package/dist/approval/providers/factory.d.ts.map +0 -1
- package/dist/approval/providers/noop-approval-provider.cjs +0 -54
- package/dist/approval/providers/noop-approval-provider.d.ts +0 -18
- package/dist/approval/providers/noop-approval-provider.d.ts.map +0 -1
- package/dist/approval/providers/noop-approval-provider.js +0 -31
- package/dist/config/agent-resolver.cjs +0 -153
- package/dist/config/agent-resolver.d.ts +0 -14
- package/dist/config/agent-resolver.d.ts.map +0 -1
- package/dist/config/agent-resolver.js +0 -123
- package/dist/config/error-codes.cjs +0 -39
- package/dist/config/error-codes.d.ts +0 -16
- package/dist/config/error-codes.d.ts.map +0 -1
- package/dist/config/error-codes.js +0 -16
- package/dist/config/errors.cjs +0 -126
- package/dist/config/errors.d.ts +0 -34
- package/dist/config/errors.d.ts.map +0 -1
- package/dist/config/errors.js +0 -103
- package/dist/config/index.cjs +0 -26
- package/dist/config/index.d.ts +0 -4
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -3
- package/dist/config/loader.cjs +0 -119
- package/dist/config/loader.d.ts +0 -16
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -86
- package/dist/config/writer.cjs +0 -182
- package/dist/config/writer.d.ts +0 -35
- package/dist/config/writer.d.ts.map +0 -1
- package/dist/config/writer.js +0 -147
- package/dist/preferences/constants.d.ts +0 -2
- package/dist/preferences/constants.d.ts.map +0 -1
- package/dist/preferences/constants.js +0 -5
- package/dist/preferences/error-codes.d.ts +0 -8
- package/dist/preferences/error-codes.d.ts.map +0 -1
- package/dist/preferences/error-codes.js +0 -12
- package/dist/preferences/errors.cjs +0 -75
- package/dist/preferences/errors.d.ts +0 -18
- package/dist/preferences/errors.d.ts.map +0 -1
- package/dist/preferences/errors.js +0 -51
- package/dist/preferences/index.cjs +0 -55
- package/dist/preferences/index.d.ts +0 -6
- package/dist/preferences/index.d.ts.map +0 -1
- package/dist/preferences/index.js +0 -32
- package/dist/preferences/loader.cjs +0 -138
- package/dist/preferences/loader.d.ts +0 -51
- package/dist/preferences/loader.d.ts.map +0 -1
- package/dist/preferences/loader.js +0 -110
- package/dist/preferences/schemas.cjs +0 -75
- package/dist/preferences/schemas.d.ts +0 -110
- package/dist/preferences/schemas.d.ts.map +0 -1
- package/dist/preferences/schemas.js +0 -49
- package/dist/prompts/providers/file-prompt-provider.cjs +0 -399
- package/dist/prompts/providers/file-prompt-provider.d.ts +0 -47
- package/dist/prompts/providers/file-prompt-provider.d.ts.map +0 -1
- package/dist/prompts/providers/file-prompt-provider.js +0 -376
- package/dist/prompts/providers/starter-prompt-provider.cjs +0 -170
- package/dist/prompts/providers/starter-prompt-provider.d.ts +0 -45
- package/dist/prompts/providers/starter-prompt-provider.d.ts.map +0 -1
- package/dist/prompts/providers/starter-prompt-provider.js +0 -147
- package/dist/utils/api-key-store.cjs +0 -56
- package/dist/utils/api-key-store.d.ts +0 -24
- package/dist/utils/api-key-store.d.ts.map +0 -1
- package/dist/utils/api-key-store.js +0 -31
- package/dist/utils/env.cjs +0 -154
- package/dist/utils/env.d.ts +0 -28
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -119
- package/dist/utils/port-utils.cjs +0 -37
- package/dist/utils/port-utils.d.ts +0 -10
- package/dist/utils/port-utils.d.ts.map +0 -1
- package/dist/utils/port-utils.js +0 -14
- package/dist/utils/port-utils.spec.cjs +0 -26
- package/dist/utils/port-utils.spec.js +0 -25
- /package/dist/approval/{providers/factory.cjs → factory.cjs} +0 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import "../../chunk-C6A6W6XS.js";
|
|
2
|
+
import { createHash } from "crypto";
|
|
3
|
+
import { Readable } from "stream";
|
|
4
|
+
import { DextoLogComponent } from "../../logger/v2/types.js";
|
|
5
|
+
import { StorageError } from "../errors.js";
|
|
6
|
+
class InMemoryBlobStore {
|
|
7
|
+
config;
|
|
8
|
+
blobs = /* @__PURE__ */ new Map();
|
|
9
|
+
connected = false;
|
|
10
|
+
logger;
|
|
11
|
+
constructor(config, logger) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.logger = logger.createChild(DextoLogComponent.STORAGE);
|
|
14
|
+
}
|
|
15
|
+
async connect() {
|
|
16
|
+
if (this.connected) return;
|
|
17
|
+
this.connected = true;
|
|
18
|
+
this.logger.debug("InMemoryBlobStore connected");
|
|
19
|
+
}
|
|
20
|
+
async disconnect() {
|
|
21
|
+
this.blobs.clear();
|
|
22
|
+
this.connected = false;
|
|
23
|
+
this.logger.debug("InMemoryBlobStore disconnected");
|
|
24
|
+
}
|
|
25
|
+
isConnected() {
|
|
26
|
+
return this.connected;
|
|
27
|
+
}
|
|
28
|
+
getStoreType() {
|
|
29
|
+
return "in-memory";
|
|
30
|
+
}
|
|
31
|
+
async store(input, metadata = {}) {
|
|
32
|
+
if (!this.connected) {
|
|
33
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
34
|
+
}
|
|
35
|
+
const buffer = await this.inputToBuffer(input);
|
|
36
|
+
if (buffer.length > this.config.maxBlobSize) {
|
|
37
|
+
throw StorageError.blobSizeExceeded(buffer.length, this.config.maxBlobSize);
|
|
38
|
+
}
|
|
39
|
+
const hash = createHash("sha256").update(buffer).digest("hex").substring(0, 16);
|
|
40
|
+
const id = hash;
|
|
41
|
+
const existing = this.blobs.get(id);
|
|
42
|
+
if (existing) {
|
|
43
|
+
this.logger.debug(
|
|
44
|
+
`Blob ${id} already exists, returning existing reference (deduplication)`
|
|
45
|
+
);
|
|
46
|
+
return {
|
|
47
|
+
id,
|
|
48
|
+
uri: `blob:${id}`,
|
|
49
|
+
metadata: existing.metadata
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const currentSize = this.getTotalSize();
|
|
53
|
+
if (currentSize + buffer.length > this.config.maxTotalSize) {
|
|
54
|
+
throw StorageError.blobTotalSizeExceeded(
|
|
55
|
+
currentSize + buffer.length,
|
|
56
|
+
this.config.maxTotalSize
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
const storedMetadata = {
|
|
60
|
+
id,
|
|
61
|
+
mimeType: metadata.mimeType || this.detectMimeType(buffer, metadata.originalName),
|
|
62
|
+
originalName: metadata.originalName,
|
|
63
|
+
createdAt: metadata.createdAt || /* @__PURE__ */ new Date(),
|
|
64
|
+
source: metadata.source || "system",
|
|
65
|
+
size: buffer.length,
|
|
66
|
+
hash
|
|
67
|
+
};
|
|
68
|
+
this.blobs.set(id, { data: buffer, metadata: storedMetadata });
|
|
69
|
+
this.logger.debug(`Stored blob ${id} (${buffer.length} bytes, ${storedMetadata.mimeType})`);
|
|
70
|
+
return {
|
|
71
|
+
id,
|
|
72
|
+
uri: `blob:${id}`,
|
|
73
|
+
metadata: storedMetadata
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
async retrieve(reference, format = "base64") {
|
|
77
|
+
if (!this.connected) {
|
|
78
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
79
|
+
}
|
|
80
|
+
const id = this.parseReference(reference);
|
|
81
|
+
const blob = this.blobs.get(id);
|
|
82
|
+
if (!blob) {
|
|
83
|
+
throw StorageError.blobNotFound(reference);
|
|
84
|
+
}
|
|
85
|
+
switch (format) {
|
|
86
|
+
case "base64":
|
|
87
|
+
return {
|
|
88
|
+
format: "base64",
|
|
89
|
+
data: blob.data.toString("base64"),
|
|
90
|
+
metadata: blob.metadata
|
|
91
|
+
};
|
|
92
|
+
case "buffer":
|
|
93
|
+
return {
|
|
94
|
+
format: "buffer",
|
|
95
|
+
data: Buffer.from(blob.data),
|
|
96
|
+
metadata: { ...blob.metadata }
|
|
97
|
+
};
|
|
98
|
+
case "path":
|
|
99
|
+
throw new Error(
|
|
100
|
+
"Path format not supported for in-memory blobs. Use local blob storage for filesystem paths."
|
|
101
|
+
);
|
|
102
|
+
case "stream": {
|
|
103
|
+
const stream = Readable.from(blob.data);
|
|
104
|
+
return {
|
|
105
|
+
format: "stream",
|
|
106
|
+
data: stream,
|
|
107
|
+
metadata: blob.metadata
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
case "url": {
|
|
111
|
+
const base64 = blob.data.toString("base64");
|
|
112
|
+
const mimeType = blob.metadata.mimeType || "application/octet-stream";
|
|
113
|
+
const dataUrl = `data:${mimeType};base64,${base64}`;
|
|
114
|
+
return {
|
|
115
|
+
format: "url",
|
|
116
|
+
data: dataUrl,
|
|
117
|
+
metadata: blob.metadata
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
default:
|
|
121
|
+
throw StorageError.blobInvalidInput(format, `Unsupported format: ${format}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async exists(reference) {
|
|
125
|
+
if (!this.connected) {
|
|
126
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
127
|
+
}
|
|
128
|
+
const id = this.parseReference(reference);
|
|
129
|
+
return this.blobs.has(id);
|
|
130
|
+
}
|
|
131
|
+
async delete(reference) {
|
|
132
|
+
if (!this.connected) {
|
|
133
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
134
|
+
}
|
|
135
|
+
const id = this.parseReference(reference);
|
|
136
|
+
if (!this.blobs.has(id)) {
|
|
137
|
+
throw StorageError.blobNotFound(reference);
|
|
138
|
+
}
|
|
139
|
+
this.blobs.delete(id);
|
|
140
|
+
this.logger.debug(`Deleted blob: ${id}`);
|
|
141
|
+
}
|
|
142
|
+
async cleanup(olderThan) {
|
|
143
|
+
if (!this.connected) {
|
|
144
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
145
|
+
}
|
|
146
|
+
const cutoffDate = olderThan || new Date(Date.now() - 30 * 24 * 60 * 60 * 1e3);
|
|
147
|
+
let deletedCount = 0;
|
|
148
|
+
for (const [id, { metadata }] of this.blobs.entries()) {
|
|
149
|
+
if (metadata.createdAt < cutoffDate) {
|
|
150
|
+
this.blobs.delete(id);
|
|
151
|
+
deletedCount++;
|
|
152
|
+
this.logger.debug(`Cleaned up old blob: ${id}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (deletedCount > 0) {
|
|
156
|
+
this.logger.info(`Blob cleanup: removed ${deletedCount} old blobs from memory`);
|
|
157
|
+
}
|
|
158
|
+
return deletedCount;
|
|
159
|
+
}
|
|
160
|
+
async getStats() {
|
|
161
|
+
if (!this.connected) {
|
|
162
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
count: this.blobs.size,
|
|
166
|
+
totalSize: this.getTotalSize(),
|
|
167
|
+
backendType: "in-memory",
|
|
168
|
+
storePath: "memory://"
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
async listBlobs() {
|
|
172
|
+
if (!this.connected) {
|
|
173
|
+
throw StorageError.blobBackendNotConnected("in-memory");
|
|
174
|
+
}
|
|
175
|
+
return Array.from(this.blobs.entries()).map(([id, { metadata }]) => ({
|
|
176
|
+
id,
|
|
177
|
+
uri: `blob:${id}`,
|
|
178
|
+
metadata
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
getStoragePath() {
|
|
182
|
+
return void 0;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Calculate total size of all blobs in memory
|
|
186
|
+
*/
|
|
187
|
+
getTotalSize() {
|
|
188
|
+
return Array.from(this.blobs.values()).reduce((sum, { data }) => sum + data.length, 0);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Convert various input types to Buffer.
|
|
192
|
+
* Copied from LocalBlobStore with minor adaptations.
|
|
193
|
+
*/
|
|
194
|
+
async inputToBuffer(input) {
|
|
195
|
+
if (Buffer.isBuffer(input)) {
|
|
196
|
+
return input;
|
|
197
|
+
}
|
|
198
|
+
if (input instanceof Uint8Array) {
|
|
199
|
+
return Buffer.from(input);
|
|
200
|
+
}
|
|
201
|
+
if (input instanceof ArrayBuffer) {
|
|
202
|
+
return Buffer.from(new Uint8Array(input));
|
|
203
|
+
}
|
|
204
|
+
if (typeof input === "string") {
|
|
205
|
+
if (input.startsWith("data:")) {
|
|
206
|
+
const commaIndex = input.indexOf(",");
|
|
207
|
+
if (commaIndex !== -1 && input.includes(";base64,")) {
|
|
208
|
+
const base64Data = input.substring(commaIndex + 1);
|
|
209
|
+
return Buffer.from(base64Data, "base64");
|
|
210
|
+
}
|
|
211
|
+
throw StorageError.blobEncodingError(
|
|
212
|
+
"inputToBuffer",
|
|
213
|
+
"Unsupported data URI format"
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
return Buffer.from(input, "base64");
|
|
218
|
+
} catch {
|
|
219
|
+
throw StorageError.blobEncodingError("inputToBuffer", "Invalid base64 string");
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
throw StorageError.blobInvalidInput(input, `Unsupported input type: ${typeof input}`);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Parse blob reference to extract ID.
|
|
226
|
+
* Copied from LocalBlobStore.
|
|
227
|
+
*/
|
|
228
|
+
parseReference(reference) {
|
|
229
|
+
if (!reference) {
|
|
230
|
+
throw StorageError.blobInvalidReference(reference, "Empty reference");
|
|
231
|
+
}
|
|
232
|
+
if (reference.startsWith("blob:")) {
|
|
233
|
+
const id = reference.substring(5);
|
|
234
|
+
if (!id) {
|
|
235
|
+
throw StorageError.blobInvalidReference(reference, "Empty blob ID after prefix");
|
|
236
|
+
}
|
|
237
|
+
return id;
|
|
238
|
+
}
|
|
239
|
+
return reference;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Detect MIME type from buffer content and/or filename.
|
|
243
|
+
* Copied from LocalBlobStore.
|
|
244
|
+
*/
|
|
245
|
+
detectMimeType(buffer, filename) {
|
|
246
|
+
const header = buffer.subarray(0, 16);
|
|
247
|
+
if (header.length >= 3) {
|
|
248
|
+
const jpegSignature = header.subarray(0, 3);
|
|
249
|
+
if (jpegSignature.equals(Buffer.from([255, 216, 255]))) {
|
|
250
|
+
return "image/jpeg";
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (header.length >= 4) {
|
|
254
|
+
const signature = header.subarray(0, 4);
|
|
255
|
+
if (signature.equals(Buffer.from([137, 80, 78, 71]))) return "image/png";
|
|
256
|
+
if (signature.equals(Buffer.from([71, 73, 70, 56]))) return "image/gif";
|
|
257
|
+
if (signature.equals(Buffer.from([37, 80, 68, 70]))) return "application/pdf";
|
|
258
|
+
}
|
|
259
|
+
if (filename) {
|
|
260
|
+
const ext = filename.split(".").pop()?.toLowerCase();
|
|
261
|
+
const mimeTypes = {
|
|
262
|
+
jpg: "image/jpeg",
|
|
263
|
+
jpeg: "image/jpeg",
|
|
264
|
+
png: "image/png",
|
|
265
|
+
gif: "image/gif",
|
|
266
|
+
pdf: "application/pdf",
|
|
267
|
+
txt: "text/plain",
|
|
268
|
+
json: "application/json",
|
|
269
|
+
xml: "text/xml",
|
|
270
|
+
html: "text/html",
|
|
271
|
+
css: "text/css",
|
|
272
|
+
js: "text/javascript",
|
|
273
|
+
md: "text/markdown",
|
|
274
|
+
mp3: "audio/mpeg",
|
|
275
|
+
mp4: "video/mp4",
|
|
276
|
+
wav: "audio/wav"
|
|
277
|
+
};
|
|
278
|
+
if (ext && mimeTypes[ext]) return mimeTypes[ext];
|
|
279
|
+
}
|
|
280
|
+
if (this.isTextBuffer(buffer)) {
|
|
281
|
+
return "text/plain";
|
|
282
|
+
}
|
|
283
|
+
return "application/octet-stream";
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Check if buffer contains text content.
|
|
287
|
+
* Copied from LocalBlobStore.
|
|
288
|
+
*/
|
|
289
|
+
isTextBuffer(buffer) {
|
|
290
|
+
let printableCount = 0;
|
|
291
|
+
const sampleSize = Math.min(512, buffer.length);
|
|
292
|
+
for (let i = 0; i < sampleSize; i++) {
|
|
293
|
+
const byte = buffer[i];
|
|
294
|
+
if (byte !== void 0 && (byte >= 32 && byte <= 126 || byte === 9 || byte === 10 || byte === 13)) {
|
|
295
|
+
printableCount++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return printableCount / sampleSize > 0.7;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
export {
|
|
302
|
+
InMemoryBlobStore
|
|
303
|
+
};
|
|
@@ -31,7 +31,9 @@ const InMemoryBlobStoreSchema = import_zod.z.object({
|
|
|
31
31
|
}).strict();
|
|
32
32
|
const LocalBlobStoreSchema = import_zod.z.object({
|
|
33
33
|
type: import_zod.z.literal("local").describe("Blob store type identifier"),
|
|
34
|
-
storePath: import_zod.z.string().
|
|
34
|
+
storePath: import_zod.z.string().describe(
|
|
35
|
+
"Blob storage directory path (required for local storage - CLI enrichment provides per-agent default)"
|
|
36
|
+
),
|
|
35
37
|
maxBlobSize: import_zod.z.number().int().positive().optional().default(50 * 1024 * 1024).describe("Maximum size per blob in bytes"),
|
|
36
38
|
maxTotalSize: import_zod.z.number().int().positive().optional().default(1024 * 1024 * 1024).describe("Maximum total storage size in bytes"),
|
|
37
39
|
cleanupAfterDays: import_zod.z.number().int().positive().optional().default(30).describe("Auto-cleanup blobs older than N days")
|
|
@@ -23,7 +23,7 @@ export type InMemoryBlobStoreConfig = z.output<typeof InMemoryBlobStoreSchema>;
|
|
|
23
23
|
*/
|
|
24
24
|
declare const LocalBlobStoreSchema: z.ZodObject<{
|
|
25
25
|
type: z.ZodLiteral<"local">;
|
|
26
|
-
storePath: z.
|
|
26
|
+
storePath: z.ZodString;
|
|
27
27
|
maxBlobSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
28
28
|
maxTotalSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
29
29
|
cleanupAfterDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -31,13 +31,13 @@ declare const LocalBlobStoreSchema: z.ZodObject<{
|
|
|
31
31
|
type: "local";
|
|
32
32
|
maxBlobSize: number;
|
|
33
33
|
maxTotalSize: number;
|
|
34
|
+
storePath: string;
|
|
34
35
|
cleanupAfterDays: number;
|
|
35
|
-
storePath?: string | undefined;
|
|
36
36
|
}, {
|
|
37
37
|
type: "local";
|
|
38
|
+
storePath: string;
|
|
38
39
|
maxBlobSize?: number | undefined;
|
|
39
40
|
maxTotalSize?: number | undefined;
|
|
40
|
-
storePath?: string | undefined;
|
|
41
41
|
cleanupAfterDays?: number | undefined;
|
|
42
42
|
}>;
|
|
43
43
|
export type LocalBlobStoreConfig = z.output<typeof LocalBlobStoreSchema>;
|
|
@@ -58,7 +58,7 @@ export declare const BlobStoreConfigSchema: z.ZodDiscriminatedUnion<"type", [z.Z
|
|
|
58
58
|
maxTotalSize?: number | undefined;
|
|
59
59
|
}>, z.ZodObject<{
|
|
60
60
|
type: z.ZodLiteral<"local">;
|
|
61
|
-
storePath: z.
|
|
61
|
+
storePath: z.ZodString;
|
|
62
62
|
maxBlobSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
63
63
|
maxTotalSize: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
64
64
|
cleanupAfterDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -66,13 +66,13 @@ export declare const BlobStoreConfigSchema: z.ZodDiscriminatedUnion<"type", [z.Z
|
|
|
66
66
|
type: "local";
|
|
67
67
|
maxBlobSize: number;
|
|
68
68
|
maxTotalSize: number;
|
|
69
|
+
storePath: string;
|
|
69
70
|
cleanupAfterDays: number;
|
|
70
|
-
storePath?: string | undefined;
|
|
71
71
|
}, {
|
|
72
72
|
type: "local";
|
|
73
|
+
storePath: string;
|
|
73
74
|
maxBlobSize?: number | undefined;
|
|
74
75
|
maxTotalSize?: number | undefined;
|
|
75
|
-
storePath?: string | undefined;
|
|
76
76
|
cleanupAfterDays?: number | undefined;
|
|
77
77
|
}>]>;
|
|
78
78
|
export type BlobStoreConfig = z.output<typeof BlobStoreConfigSchema>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/storage/blob/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,iCAAkC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D;;GAEG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;;EAkBhB,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE/E;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/storage/blob/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gBAAgB,iCAAkC,CAAC;AAChE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D;;GAEG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;;;;;EAkBhB,CAAC;AAEd,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE/E;;GAEG;AACH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EA8Bb,CAAC;AAEd,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAWO,CAAC;AAE1C,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC"}
|
|
@@ -8,7 +8,9 @@ const InMemoryBlobStoreSchema = z.object({
|
|
|
8
8
|
}).strict();
|
|
9
9
|
const LocalBlobStoreSchema = z.object({
|
|
10
10
|
type: z.literal("local").describe("Blob store type identifier"),
|
|
11
|
-
storePath: z.string().
|
|
11
|
+
storePath: z.string().describe(
|
|
12
|
+
"Blob storage directory path (required for local storage - CLI enrichment provides per-agent default)"
|
|
13
|
+
),
|
|
12
14
|
maxBlobSize: z.number().int().positive().optional().default(50 * 1024 * 1024).describe("Maximum size per blob in bytes"),
|
|
13
15
|
maxTotalSize: z.number().int().positive().optional().default(1024 * 1024 * 1024).describe("Maximum total storage size in bytes"),
|
|
14
16
|
cleanupAfterDays: z.number().int().positive().optional().default(30).describe("Auto-cleanup blobs older than N days")
|
|
@@ -32,28 +32,27 @@ __export(factory_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(factory_exports);
|
|
34
34
|
var import_memory_cache_store = require("./memory-cache-store.js");
|
|
35
|
-
var import_logger = require("../../logger/index.js");
|
|
36
35
|
let RedisStore = null;
|
|
37
|
-
async function createCache(config) {
|
|
36
|
+
async function createCache(config, logger) {
|
|
38
37
|
switch (config.type) {
|
|
39
38
|
case "redis":
|
|
40
|
-
return createRedisStore(config);
|
|
39
|
+
return createRedisStore(config, logger);
|
|
41
40
|
case "in-memory":
|
|
42
41
|
default:
|
|
43
|
-
|
|
42
|
+
logger.info("Using in-memory cache store");
|
|
44
43
|
return new import_memory_cache_store.MemoryCacheStore();
|
|
45
44
|
}
|
|
46
45
|
}
|
|
47
|
-
async function createRedisStore(config) {
|
|
46
|
+
async function createRedisStore(config, logger) {
|
|
48
47
|
try {
|
|
49
48
|
if (!RedisStore) {
|
|
50
49
|
const module2 = await import("./redis-store.js");
|
|
51
50
|
RedisStore = module2.RedisStore;
|
|
52
51
|
}
|
|
53
|
-
|
|
54
|
-
return new RedisStore(config);
|
|
52
|
+
logger.info(`Connecting to Redis at ${config.host}:${config.port}`);
|
|
53
|
+
return new RedisStore(config, logger);
|
|
55
54
|
} catch (error) {
|
|
56
|
-
|
|
55
|
+
logger.warn(`Redis not available, falling back to in-memory cache: ${error}`);
|
|
57
56
|
return new import_memory_cache_store.MemoryCacheStore();
|
|
58
57
|
}
|
|
59
58
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { Cache } from './types.js';
|
|
2
2
|
import type { CacheConfig } from '../schemas.js';
|
|
3
|
+
import type { IDextoLogger } from '../../logger/v2/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Create a cache store based on configuration.
|
|
5
6
|
* Handles lazy loading of optional dependencies with automatic fallback.
|
|
7
|
+
* @param config Cache configuration
|
|
8
|
+
* @param logger Logger instance for logging
|
|
6
9
|
*/
|
|
7
|
-
export declare function createCache(config: CacheConfig): Promise<Cache>;
|
|
10
|
+
export declare function createCache(config: CacheConfig, logger: IDextoLogger): Promise<Cache>;
|
|
8
11
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/storage/cache/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/storage/cache/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAoB,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAU7D;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAU3F"}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
1
|
import "../../chunk-C6A6W6XS.js";
|
|
2
2
|
import { MemoryCacheStore } from "./memory-cache-store.js";
|
|
3
|
-
import { logger } from "../../logger/index.js";
|
|
4
3
|
let RedisStore = null;
|
|
5
|
-
async function createCache(config) {
|
|
4
|
+
async function createCache(config, logger) {
|
|
6
5
|
switch (config.type) {
|
|
7
6
|
case "redis":
|
|
8
|
-
return createRedisStore(config);
|
|
7
|
+
return createRedisStore(config, logger);
|
|
9
8
|
case "in-memory":
|
|
10
9
|
default:
|
|
11
10
|
logger.info("Using in-memory cache store");
|
|
12
11
|
return new MemoryCacheStore();
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
|
-
async function createRedisStore(config) {
|
|
14
|
+
async function createRedisStore(config, logger) {
|
|
16
15
|
try {
|
|
17
16
|
if (!RedisStore) {
|
|
18
17
|
const module = await import("./redis-store.js");
|
|
19
18
|
RedisStore = module.RedisStore;
|
|
20
19
|
}
|
|
21
20
|
logger.info(`Connecting to Redis at ${config.host}:${config.port}`);
|
|
22
|
-
return new RedisStore(config);
|
|
21
|
+
return new RedisStore(config, logger);
|
|
23
22
|
} catch (error) {
|
|
24
23
|
logger.warn(`Redis not available, falling back to in-memory cache: ${error}`);
|
|
25
24
|
return new MemoryCacheStore();
|
|
@@ -22,13 +22,16 @@ __export(redis_store_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(redis_store_exports);
|
|
24
24
|
var import_ioredis = require("ioredis");
|
|
25
|
+
var import_types = require("../../logger/v2/types.js");
|
|
25
26
|
var import_errors = require("../errors.js");
|
|
26
27
|
class RedisStore {
|
|
27
|
-
constructor(config) {
|
|
28
|
+
constructor(config, logger) {
|
|
28
29
|
this.config = config;
|
|
30
|
+
this.logger = logger.createChild(import_types.DextoLogComponent.STORAGE);
|
|
29
31
|
}
|
|
30
32
|
redis = null;
|
|
31
33
|
connected = false;
|
|
34
|
+
logger;
|
|
32
35
|
async connect() {
|
|
33
36
|
if (this.connected) return;
|
|
34
37
|
this.redis = new import_ioredis.Redis({
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Cache } from './types.js';
|
|
2
2
|
import type { RedisCacheConfig } from './schemas.js';
|
|
3
|
+
import type { IDextoLogger } from '../../logger/v2/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Redis cache store for production cache operations.
|
|
5
6
|
* Implements the Cache interface with connection pooling and optimizations.
|
|
@@ -9,7 +10,8 @@ export declare class RedisStore implements Cache {
|
|
|
9
10
|
private config;
|
|
10
11
|
private redis;
|
|
11
12
|
private connected;
|
|
12
|
-
|
|
13
|
+
private logger;
|
|
14
|
+
constructor(config: RedisCacheConfig, logger: IDextoLogger);
|
|
13
15
|
connect(): Promise<void>;
|
|
14
16
|
disconnect(): Promise<void>;
|
|
15
17
|
isConnected(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-store.d.ts","sourceRoot":"","sources":["../../../src/storage/cache/redis-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"redis-store.d.ts","sourceRoot":"","sources":["../../../src/storage/cache/redis-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAI7D;;;;GAIG;AACH,qBAAa,UAAW,YAAW,KAAK;IAMhC,OAAO,CAAC,MAAM;IALlB,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAe;gBAGjB,MAAM,EAAE,gBAAgB,EAChC,MAAM,EAAE,YAAY;IAKlB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoCxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,WAAW,IAAI,OAAO;IAItB,YAAY,IAAI,MAAM;IAKhB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAc3C,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBjE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IAQnD,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAKvD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7D,OAAO,CAAC,eAAe;IAOjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAKxB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAIhC"}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import "../../chunk-C6A6W6XS.js";
|
|
2
2
|
import { Redis } from "ioredis";
|
|
3
|
+
import { DextoLogComponent } from "../../logger/v2/types.js";
|
|
3
4
|
import { StorageError } from "../errors.js";
|
|
4
5
|
class RedisStore {
|
|
5
|
-
constructor(config) {
|
|
6
|
+
constructor(config, logger) {
|
|
6
7
|
this.config = config;
|
|
8
|
+
this.logger = logger.createChild(DextoLogComponent.STORAGE);
|
|
7
9
|
}
|
|
8
10
|
redis = null;
|
|
9
11
|
connected = false;
|
|
12
|
+
logger;
|
|
10
13
|
async connect() {
|
|
11
14
|
if (this.connected) return;
|
|
12
15
|
this.redis = new Redis({
|
|
@@ -32,51 +32,48 @@ __export(factory_exports, {
|
|
|
32
32
|
});
|
|
33
33
|
module.exports = __toCommonJS(factory_exports);
|
|
34
34
|
var import_memory_database_store = require("./memory-database-store.js");
|
|
35
|
-
var import_logger = require("../../logger/index.js");
|
|
36
35
|
let SQLiteStore = null;
|
|
37
36
|
let PostgresStore = null;
|
|
38
|
-
async function createDatabase(config,
|
|
37
|
+
async function createDatabase(config, logger) {
|
|
39
38
|
switch (config.type) {
|
|
40
39
|
case "postgres":
|
|
41
|
-
return createPostgresStore(config);
|
|
40
|
+
return createPostgresStore(config, logger);
|
|
42
41
|
case "sqlite":
|
|
43
|
-
return createSQLiteStore(config,
|
|
42
|
+
return createSQLiteStore(config, logger);
|
|
44
43
|
case "in-memory":
|
|
45
44
|
default:
|
|
46
|
-
|
|
45
|
+
logger.info("Using in-memory database store");
|
|
47
46
|
return new import_memory_database_store.MemoryDatabaseStore();
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
|
-
async function createPostgresStore(config) {
|
|
49
|
+
async function createPostgresStore(config, logger) {
|
|
51
50
|
try {
|
|
52
51
|
if (!PostgresStore) {
|
|
53
52
|
const module2 = await import("./postgres-store.js");
|
|
54
53
|
PostgresStore = module2.PostgresStore;
|
|
55
54
|
}
|
|
56
|
-
|
|
57
|
-
return new PostgresStore(config);
|
|
55
|
+
logger.info("Connecting to PostgreSQL database");
|
|
56
|
+
return new PostgresStore(config, logger);
|
|
58
57
|
} catch (error) {
|
|
59
58
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
-
|
|
59
|
+
logger.warn(
|
|
61
60
|
`PostgreSQL not available, falling back to in-memory database: ${errorMessage}`
|
|
62
61
|
);
|
|
63
62
|
return new import_memory_database_store.MemoryDatabaseStore();
|
|
64
63
|
}
|
|
65
64
|
}
|
|
66
|
-
async function createSQLiteStore(config,
|
|
65
|
+
async function createSQLiteStore(config, logger) {
|
|
67
66
|
try {
|
|
68
67
|
if (!SQLiteStore) {
|
|
69
68
|
const module2 = await import("./sqlite-store.js");
|
|
70
69
|
SQLiteStore = module2.SQLiteStore;
|
|
71
70
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
import_logger.logger.info(`Creating SQLite database store: ${effectivePath}`);
|
|
75
|
-
return new SQLiteStore(config, agentId);
|
|
71
|
+
logger.info(`Creating SQLite database store: ${config.path}`);
|
|
72
|
+
return new SQLiteStore(config, logger);
|
|
76
73
|
} catch (error) {
|
|
77
74
|
const err = error instanceof Error ? error : new Error(String(error));
|
|
78
|
-
|
|
79
|
-
|
|
75
|
+
logger.error(`SQLite store failed to load: ${err.message}`, { error: err.message });
|
|
76
|
+
logger.warn("Falling back to in-memory database store");
|
|
80
77
|
return new import_memory_database_store.MemoryDatabaseStore();
|
|
81
78
|
}
|
|
82
79
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { Database } from './types.js';
|
|
2
2
|
import type { DatabaseConfig } from '../schemas.js';
|
|
3
|
+
import type { IDextoLogger } from '../../logger/v2/types.js';
|
|
3
4
|
/**
|
|
4
5
|
* Create a database store based on configuration.
|
|
5
6
|
* Handles lazy loading of optional dependencies with automatic fallback.
|
|
6
|
-
*
|
|
7
|
-
* @param
|
|
7
|
+
* Database paths are provided via CLI enrichment layer.
|
|
8
|
+
* @param config Database configuration with explicit paths
|
|
9
|
+
* @param logger Logger instance for logging
|
|
8
10
|
*/
|
|
9
|
-
export declare function createDatabase(config: DatabaseConfig,
|
|
11
|
+
export declare function createDatabase(config: DatabaseConfig, logger: IDextoLogger): Promise<Database>;
|
|
10
12
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/storage/database/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAgD,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/storage/database/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAgD,MAAM,eAAe,CAAC;AAElG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAe7D;;;;;;GAMG;AACH,wBAAsB,cAAc,CAChC,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,YAAY,GACrB,OAAO,CAAC,QAAQ,CAAC,CAanB"}
|