@dexto/core 1.2.4 → 1.2.5
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 +164 -64
- package/dist/agent/schemas.d.ts +2605 -517
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +167 -64
- 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/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.d.ts +6 -6
- 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/prompt-manager.cjs +25 -18
- 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 -18
- 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/file-prompt-provider.cjs +14 -12
- package/dist/prompts/providers/file-prompt-provider.d.ts +3 -1
- package/dist/prompts/providers/file-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/file-prompt-provider.js +14 -12
- 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/providers/starter-prompt-provider.cjs +7 -5
- package/dist/prompts/providers/starter-prompt-provider.d.ts +3 -1
- package/dist/prompts/providers/starter-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/starter-prompt-provider.js +7 -5
- package/dist/prompts/schemas.d.ts +3 -3
- 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/manager.cjs +11 -8
- package/dist/systemPrompt/manager.d.ts +4 -2
- package/dist/systemPrompt/manager.d.ts.map +1 -1
- package/dist/systemPrompt/manager.js +11 -8
- package/dist/systemPrompt/schemas.cjs +21 -1
- package/dist/systemPrompt/schemas.d.ts +53 -53
- package/dist/systemPrompt/schemas.d.ts.map +1 -1
- package/dist/systemPrompt/schemas.js +11 -1
- 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 +87 -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 +69 -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/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
package/dist/events/index.js
CHANGED
|
@@ -1,40 +1,68 @@
|
|
|
1
1
|
import "../chunk-C6A6W6XS.js";
|
|
2
2
|
import { EventEmitter } from "events";
|
|
3
3
|
const AGENT_EVENT_NAMES = [
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
"
|
|
25
|
-
"dexto:approvalResponse"
|
|
4
|
+
"session:reset",
|
|
5
|
+
"session:created",
|
|
6
|
+
"session:title-updated",
|
|
7
|
+
"session:override-set",
|
|
8
|
+
"session:override-cleared",
|
|
9
|
+
"mcp:server-connected",
|
|
10
|
+
"mcp:server-added",
|
|
11
|
+
"mcp:server-removed",
|
|
12
|
+
"mcp:server-restarted",
|
|
13
|
+
"mcp:server-updated",
|
|
14
|
+
"mcp:resource-updated",
|
|
15
|
+
"mcp:prompts-list-changed",
|
|
16
|
+
"mcp:tools-list-changed",
|
|
17
|
+
"tools:available-updated",
|
|
18
|
+
"llm:switched",
|
|
19
|
+
"state:changed",
|
|
20
|
+
"state:exported",
|
|
21
|
+
"state:reset",
|
|
22
|
+
"resource:cache-invalidated",
|
|
23
|
+
"approval:request",
|
|
24
|
+
"approval:response"
|
|
26
25
|
];
|
|
27
26
|
const SESSION_EVENT_NAMES = [
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
27
|
+
"llm:thinking",
|
|
28
|
+
"llm:chunk",
|
|
29
|
+
"llm:response",
|
|
30
|
+
"llm:tool-call",
|
|
31
|
+
"llm:tool-result",
|
|
32
|
+
"llm:error",
|
|
33
|
+
"llm:switched",
|
|
34
|
+
"llm:unsupported-input"
|
|
36
35
|
];
|
|
37
36
|
const EVENT_NAMES = [...AGENT_EVENT_NAMES, ...SESSION_EVENT_NAMES];
|
|
37
|
+
const STREAMING_EVENTS = [
|
|
38
|
+
// LLM events (session-scoped, forwarded to agent bus with sessionId)
|
|
39
|
+
"llm:thinking",
|
|
40
|
+
"llm:chunk",
|
|
41
|
+
"llm:response",
|
|
42
|
+
"llm:tool-call",
|
|
43
|
+
"llm:tool-result",
|
|
44
|
+
"llm:error",
|
|
45
|
+
"llm:unsupported-input",
|
|
46
|
+
// Session metadata
|
|
47
|
+
"session:title-updated"
|
|
48
|
+
];
|
|
49
|
+
const INTEGRATION_EVENTS = [
|
|
50
|
+
...STREAMING_EVENTS,
|
|
51
|
+
// Session lifecycle
|
|
52
|
+
"session:created",
|
|
53
|
+
"session:reset",
|
|
54
|
+
// MCP lifecycle
|
|
55
|
+
"mcp:server-connected",
|
|
56
|
+
"mcp:server-restarted",
|
|
57
|
+
"mcp:tools-list-changed",
|
|
58
|
+
"mcp:prompts-list-changed",
|
|
59
|
+
// Tools
|
|
60
|
+
"tools:available-updated",
|
|
61
|
+
// LLM provider switching
|
|
62
|
+
"llm:switched",
|
|
63
|
+
// State management
|
|
64
|
+
"state:changed"
|
|
65
|
+
];
|
|
38
66
|
const _checkAgentEventNames = true;
|
|
39
67
|
const _checkSessionEventNames = true;
|
|
40
68
|
const _checkEventNames = true;
|
|
@@ -46,31 +74,48 @@ const SessionEventNames = Object.freeze([
|
|
|
46
74
|
...SESSION_EVENT_NAMES
|
|
47
75
|
]);
|
|
48
76
|
const EventNames = Object.freeze([...EVENT_NAMES]);
|
|
49
|
-
class BaseTypedEventEmitter
|
|
77
|
+
class BaseTypedEventEmitter {
|
|
78
|
+
// Wrapped EventEmitter instance
|
|
79
|
+
_emitter = new EventEmitter();
|
|
50
80
|
// Store listeners with their abort controllers for cleanup
|
|
81
|
+
// Maps AbortSignal -> Event Name -> Set of listener functions
|
|
51
82
|
_abortListeners = /* @__PURE__ */ new WeakMap();
|
|
52
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Emit an event with type-safe payload
|
|
85
|
+
*/
|
|
53
86
|
emit(event, ...args) {
|
|
54
|
-
return
|
|
87
|
+
return this._emitter.emit(event, ...args);
|
|
55
88
|
}
|
|
56
|
-
|
|
89
|
+
/**
|
|
90
|
+
* Subscribe to an event with type-safe listener
|
|
91
|
+
*/
|
|
57
92
|
on(event, listener, options) {
|
|
58
93
|
if (options?.signal?.aborted) {
|
|
59
94
|
return this;
|
|
60
95
|
}
|
|
61
|
-
|
|
96
|
+
this._emitter.on(event, listener);
|
|
62
97
|
if (options?.signal) {
|
|
63
98
|
const signal = options.signal;
|
|
64
99
|
if (!this._abortListeners.has(signal)) {
|
|
65
|
-
this._abortListeners.set(signal, /* @__PURE__ */ new
|
|
100
|
+
this._abortListeners.set(signal, /* @__PURE__ */ new Map());
|
|
66
101
|
}
|
|
67
|
-
this._abortListeners.get(signal)
|
|
102
|
+
const eventMap = this._abortListeners.get(signal);
|
|
103
|
+
if (!eventMap.has(event)) {
|
|
104
|
+
eventMap.set(event, /* @__PURE__ */ new Set());
|
|
105
|
+
}
|
|
106
|
+
eventMap.get(event).add(listener);
|
|
68
107
|
const abortHandler = () => {
|
|
69
108
|
this.off(event, listener);
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
72
|
-
|
|
73
|
-
if (
|
|
109
|
+
const eventMap2 = this._abortListeners.get(signal);
|
|
110
|
+
if (eventMap2) {
|
|
111
|
+
const listenerSet = eventMap2.get(event);
|
|
112
|
+
if (listenerSet) {
|
|
113
|
+
listenerSet.delete(listener);
|
|
114
|
+
if (listenerSet.size === 0) {
|
|
115
|
+
eventMap2.delete(event);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (eventMap2.size === 0) {
|
|
74
119
|
this._abortListeners.delete(signal);
|
|
75
120
|
}
|
|
76
121
|
}
|
|
@@ -79,36 +124,54 @@ class BaseTypedEventEmitter extends EventEmitter {
|
|
|
79
124
|
}
|
|
80
125
|
return this;
|
|
81
126
|
}
|
|
82
|
-
|
|
127
|
+
/**
|
|
128
|
+
* Subscribe to an event once with type-safe listener
|
|
129
|
+
*/
|
|
83
130
|
once(event, listener, options) {
|
|
84
131
|
if (options?.signal?.aborted) {
|
|
85
132
|
return this;
|
|
86
133
|
}
|
|
87
134
|
const onceWrapper = (...args) => {
|
|
88
135
|
if (options?.signal) {
|
|
89
|
-
const
|
|
90
|
-
if (
|
|
91
|
-
|
|
92
|
-
if (
|
|
136
|
+
const eventMap = this._abortListeners.get(options.signal);
|
|
137
|
+
if (eventMap) {
|
|
138
|
+
const listenerSet = eventMap.get(event);
|
|
139
|
+
if (listenerSet) {
|
|
140
|
+
listenerSet.delete(onceWrapper);
|
|
141
|
+
if (listenerSet.size === 0) {
|
|
142
|
+
eventMap.delete(event);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (eventMap.size === 0) {
|
|
93
146
|
this._abortListeners.delete(options.signal);
|
|
94
147
|
}
|
|
95
148
|
}
|
|
96
149
|
}
|
|
97
150
|
listener(...args);
|
|
98
151
|
};
|
|
99
|
-
|
|
152
|
+
this._emitter.once(event, onceWrapper);
|
|
100
153
|
if (options?.signal) {
|
|
101
154
|
const signal = options.signal;
|
|
102
155
|
if (!this._abortListeners.has(signal)) {
|
|
103
|
-
this._abortListeners.set(signal, /* @__PURE__ */ new
|
|
156
|
+
this._abortListeners.set(signal, /* @__PURE__ */ new Map());
|
|
157
|
+
}
|
|
158
|
+
const eventMap = this._abortListeners.get(signal);
|
|
159
|
+
if (!eventMap.has(event)) {
|
|
160
|
+
eventMap.set(event, /* @__PURE__ */ new Set());
|
|
104
161
|
}
|
|
105
|
-
|
|
162
|
+
eventMap.get(event).add(onceWrapper);
|
|
106
163
|
const abortHandler = () => {
|
|
107
164
|
this.off(event, onceWrapper);
|
|
108
|
-
const
|
|
109
|
-
if (
|
|
110
|
-
|
|
111
|
-
if (
|
|
165
|
+
const eventMap2 = this._abortListeners.get(signal);
|
|
166
|
+
if (eventMap2) {
|
|
167
|
+
const listenerSet = eventMap2.get(event);
|
|
168
|
+
if (listenerSet) {
|
|
169
|
+
listenerSet.delete(onceWrapper);
|
|
170
|
+
if (listenerSet.size === 0) {
|
|
171
|
+
eventMap2.delete(event);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (eventMap2.size === 0) {
|
|
112
175
|
this._abortListeners.delete(signal);
|
|
113
176
|
}
|
|
114
177
|
}
|
|
@@ -117,9 +180,12 @@ class BaseTypedEventEmitter extends EventEmitter {
|
|
|
117
180
|
}
|
|
118
181
|
return this;
|
|
119
182
|
}
|
|
120
|
-
|
|
183
|
+
/**
|
|
184
|
+
* Unsubscribe from an event
|
|
185
|
+
*/
|
|
121
186
|
off(event, listener) {
|
|
122
|
-
|
|
187
|
+
this._emitter.off(event, listener);
|
|
188
|
+
return this;
|
|
123
189
|
}
|
|
124
190
|
}
|
|
125
191
|
class AgentEventBus extends BaseTypedEventEmitter {
|
|
@@ -135,7 +201,9 @@ export {
|
|
|
135
201
|
AgentEventNames,
|
|
136
202
|
EVENT_NAMES,
|
|
137
203
|
EventNames,
|
|
204
|
+
INTEGRATION_EVENTS,
|
|
138
205
|
SESSION_EVENT_NAMES,
|
|
206
|
+
STREAMING_EVENTS,
|
|
139
207
|
SessionEventBus,
|
|
140
208
|
SessionEventNames,
|
|
141
209
|
TypedEventEmitter,
|
|
@@ -34,9 +34,10 @@ module.exports = __toCommonJS(filesystem_service_exports);
|
|
|
34
34
|
var fs = __toESM(require("node:fs/promises"), 1);
|
|
35
35
|
var path = __toESM(require("node:path"), 1);
|
|
36
36
|
var import_glob = require("glob");
|
|
37
|
+
var import_path = require("../utils/path.js");
|
|
37
38
|
var import_path_validator = require("./path-validator.js");
|
|
38
39
|
var import_errors = require("./errors.js");
|
|
39
|
-
var
|
|
40
|
+
var import_types2 = require("../logger/v2/types.js");
|
|
40
41
|
const DEFAULT_ENCODING = "utf-8";
|
|
41
42
|
const DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
42
43
|
const DEFAULT_MAX_RESULTS = 1e3;
|
|
@@ -45,43 +46,50 @@ class FileSystemService {
|
|
|
45
46
|
config;
|
|
46
47
|
pathValidator;
|
|
47
48
|
initialized = false;
|
|
48
|
-
|
|
49
|
+
logger;
|
|
50
|
+
constructor(config = {}, logger) {
|
|
49
51
|
this.config = {
|
|
50
52
|
allowedPaths: config.allowedPaths || ["."],
|
|
51
53
|
blockedPaths: config.blockedPaths || [".git", "node_modules/.bin", ".env"],
|
|
52
54
|
blockedExtensions: config.blockedExtensions || [".exe", ".dll", ".so"],
|
|
53
55
|
maxFileSize: config.maxFileSize || DEFAULT_MAX_FILE_SIZE,
|
|
54
56
|
enableBackups: config.enableBackups ?? true,
|
|
55
|
-
backupPath: config.backupPath
|
|
57
|
+
backupPath: config.backupPath,
|
|
58
|
+
// Optional absolute override, defaults handled by getBackupDir()
|
|
56
59
|
backupRetentionDays: config.backupRetentionDays || 7,
|
|
57
60
|
workingDirectory: config.workingDirectory
|
|
58
61
|
};
|
|
59
|
-
this.
|
|
62
|
+
this.logger = logger.createChild(import_types2.DextoLogComponent.FILESYSTEM);
|
|
63
|
+
this.pathValidator = new import_path_validator.PathValidator(this.config, this.logger);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get backup directory path (context-aware with optional override)
|
|
67
|
+
* TODO: Migrate to explicit configuration via CLI enrichment layer (per-agent paths)
|
|
68
|
+
*/
|
|
69
|
+
getBackupDir() {
|
|
70
|
+
return this.config.backupPath || (0, import_path.getDextoPath)("backups");
|
|
60
71
|
}
|
|
61
72
|
/**
|
|
62
73
|
* Initialize the service
|
|
63
74
|
*/
|
|
64
75
|
async initialize() {
|
|
65
76
|
if (this.initialized) {
|
|
66
|
-
|
|
77
|
+
this.logger.debug("FileSystemService already initialized");
|
|
67
78
|
return;
|
|
68
79
|
}
|
|
69
80
|
if (this.config.enableBackups) {
|
|
70
81
|
try {
|
|
71
|
-
const backupDir =
|
|
72
|
-
this.config.workingDirectory || process.cwd(),
|
|
73
|
-
this.config.backupPath
|
|
74
|
-
);
|
|
82
|
+
const backupDir = this.getBackupDir();
|
|
75
83
|
await fs.mkdir(backupDir, { recursive: true });
|
|
76
|
-
|
|
84
|
+
this.logger.debug(`Backup directory created/verified: ${backupDir}`);
|
|
77
85
|
} catch (error) {
|
|
78
|
-
|
|
86
|
+
this.logger.warn(
|
|
79
87
|
`Failed to create backup directory: ${error instanceof Error ? error.message : String(error)}`
|
|
80
88
|
);
|
|
81
89
|
}
|
|
82
90
|
}
|
|
83
91
|
this.initialized = true;
|
|
84
|
-
|
|
92
|
+
this.logger.info("FileSystemService initialized successfully");
|
|
85
93
|
}
|
|
86
94
|
/**
|
|
87
95
|
* Read a file with validation and size limits
|
|
@@ -171,7 +179,7 @@ class FileSystemService {
|
|
|
171
179
|
for (const file of files) {
|
|
172
180
|
const validation = this.pathValidator.validatePath(file);
|
|
173
181
|
if (!validation.isValid || !validation.normalizedPath) {
|
|
174
|
-
|
|
182
|
+
this.logger.debug(`Skipping invalid path: ${file}`);
|
|
175
183
|
continue;
|
|
176
184
|
}
|
|
177
185
|
if (options.includeMetadata !== false) {
|
|
@@ -184,7 +192,7 @@ class FileSystemService {
|
|
|
184
192
|
isDirectory: stats.isDirectory()
|
|
185
193
|
});
|
|
186
194
|
} catch (error) {
|
|
187
|
-
|
|
195
|
+
this.logger.debug(
|
|
188
196
|
`Failed to stat file ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
189
197
|
);
|
|
190
198
|
}
|
|
@@ -272,7 +280,7 @@ class FileSystemService {
|
|
|
272
280
|
}
|
|
273
281
|
}
|
|
274
282
|
} catch (error) {
|
|
275
|
-
|
|
283
|
+
this.logger.debug(
|
|
276
284
|
`Skipping file ${fileInfo.path}: ${error instanceof Error ? error.message : String(error)}`
|
|
277
285
|
);
|
|
278
286
|
}
|
|
@@ -323,7 +331,7 @@ class FileSystemService {
|
|
|
323
331
|
}
|
|
324
332
|
await fs.writeFile(normalizedPath, content, encoding);
|
|
325
333
|
const bytesWritten = Buffer.byteLength(content, encoding);
|
|
326
|
-
|
|
334
|
+
this.logger.debug(`File written: ${normalizedPath} (${bytesWritten} bytes)`);
|
|
327
335
|
return {
|
|
328
336
|
success: true,
|
|
329
337
|
path: normalizedPath,
|
|
@@ -374,7 +382,7 @@ class FileSystemService {
|
|
|
374
382
|
content = content.replace(operation.oldString, operation.newString);
|
|
375
383
|
}
|
|
376
384
|
await fs.writeFile(normalizedPath, content, options.encoding || DEFAULT_ENCODING);
|
|
377
|
-
|
|
385
|
+
this.logger.debug(`File edited: ${normalizedPath} (${occurrences} replacements)`);
|
|
378
386
|
return {
|
|
379
387
|
success: true,
|
|
380
388
|
path: normalizedPath,
|
|
@@ -392,10 +400,7 @@ class FileSystemService {
|
|
|
392
400
|
* Create a backup of a file
|
|
393
401
|
*/
|
|
394
402
|
async createBackup(filePath) {
|
|
395
|
-
const backupDir =
|
|
396
|
-
this.config.workingDirectory || process.cwd(),
|
|
397
|
-
this.config.backupPath
|
|
398
|
-
);
|
|
403
|
+
const backupDir = this.getBackupDir();
|
|
399
404
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
400
405
|
const basename = path.basename(filePath);
|
|
401
406
|
const backupFilename = `${basename}.${timestamp}.backup`;
|
|
@@ -403,7 +408,7 @@ class FileSystemService {
|
|
|
403
408
|
try {
|
|
404
409
|
await fs.mkdir(backupDir, { recursive: true });
|
|
405
410
|
await fs.copyFile(filePath, backupPath);
|
|
406
|
-
|
|
411
|
+
this.logger.debug(`Backup created: ${backupPath}`);
|
|
407
412
|
await this.cleanupOldBackups();
|
|
408
413
|
return backupPath;
|
|
409
414
|
} catch (error) {
|
|
@@ -420,10 +425,15 @@ class FileSystemService {
|
|
|
420
425
|
if (!this.config.enableBackups) {
|
|
421
426
|
return 0;
|
|
422
427
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
this.
|
|
426
|
-
)
|
|
428
|
+
let backupDir;
|
|
429
|
+
try {
|
|
430
|
+
backupDir = this.getBackupDir();
|
|
431
|
+
} catch (error) {
|
|
432
|
+
this.logger.warn(
|
|
433
|
+
`Failed to resolve backup directory: ${error instanceof Error ? error.message : String(error)}`
|
|
434
|
+
);
|
|
435
|
+
return 0;
|
|
436
|
+
}
|
|
427
437
|
try {
|
|
428
438
|
await fs.access(backupDir);
|
|
429
439
|
} catch {
|
|
@@ -443,20 +453,20 @@ class FileSystemService {
|
|
|
443
453
|
if (stats.mtime < cutoffDate) {
|
|
444
454
|
await fs.unlink(filePath);
|
|
445
455
|
deletedCount++;
|
|
446
|
-
|
|
456
|
+
this.logger.debug(`Cleaned up old backup: ${file}`);
|
|
447
457
|
}
|
|
448
458
|
} catch (error) {
|
|
449
|
-
|
|
459
|
+
this.logger.warn(
|
|
450
460
|
`Failed to process backup file ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
451
461
|
);
|
|
452
462
|
}
|
|
453
463
|
}
|
|
454
464
|
if (deletedCount > 0) {
|
|
455
|
-
|
|
465
|
+
this.logger.info(`Backup cleanup: removed ${deletedCount} old backup files`);
|
|
456
466
|
}
|
|
457
467
|
return deletedCount;
|
|
458
468
|
} catch (error) {
|
|
459
|
-
|
|
469
|
+
this.logger.warn(
|
|
460
470
|
`Failed to cleanup backup directory: ${error instanceof Error ? error.message : String(error)}`
|
|
461
471
|
);
|
|
462
472
|
return 0;
|
|
@@ -4,15 +4,23 @@
|
|
|
4
4
|
* Secure file system operations for Dexto internal tools
|
|
5
5
|
*/
|
|
6
6
|
import { FileSystemConfig, FileContent, ReadFileOptions, GlobOptions, GlobResult, GrepOptions, SearchResult, WriteFileOptions, WriteResult, EditFileOptions, EditResult, EditOperation } from './types.js';
|
|
7
|
+
import type { IDextoLogger } from '../logger/v2/types.js';
|
|
7
8
|
/**
|
|
8
9
|
* FileSystemService - Handles all file system operations with security checks
|
|
9
10
|
* TODO: Add tests for this class
|
|
11
|
+
* TODO: instantiate only when internal file tools are enabled to avoid file dependencies which won't work in serverless
|
|
10
12
|
*/
|
|
11
13
|
export declare class FileSystemService {
|
|
12
14
|
private config;
|
|
13
15
|
private pathValidator;
|
|
14
16
|
private initialized;
|
|
15
|
-
|
|
17
|
+
private logger;
|
|
18
|
+
constructor(config: Partial<FileSystemConfig> | undefined, logger: IDextoLogger);
|
|
19
|
+
/**
|
|
20
|
+
* Get backup directory path (context-aware with optional override)
|
|
21
|
+
* TODO: Migrate to explicit configuration via CLI enrichment layer (per-agent paths)
|
|
22
|
+
*/
|
|
23
|
+
private getBackupDir;
|
|
16
24
|
/**
|
|
17
25
|
* Initialize the service
|
|
18
26
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem-service.d.ts","sourceRoot":"","sources":["../../src/filesystem/filesystem-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"filesystem-service.d.ts","sourceRoot":"","sources":["../../src/filesystem/filesystem-service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACH,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,WAAW,EACX,UAAU,EACV,WAAW,EACX,YAAY,EAEZ,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,UAAU,EACV,aAAa,EAGhB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQ1D;;;;GAIG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC,YAAK,EAAE,MAAM,EAAE,YAAY;IAiBxE;;;OAGG;IACH,OAAO,CAAC,YAAY;IAKpB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IA+ErF;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAwEhF;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAqGtF;;OAEG;IACG,SAAS,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC/B,OAAO,CAAC,WAAW,CAAC;IA0DvB;;OAEG;IACG,QAAQ,CACV,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,aAAa,EACxB,OAAO,GAAE,eAAoB,GAC9B,OAAO,CAAC,UAAU,CAAC;IAoEtB;;OAEG;YACW,YAAY;IA0B1B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IA6D1C;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;IAIvC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAI3C"}
|
|
@@ -2,9 +2,10 @@ import "../chunk-C6A6W6XS.js";
|
|
|
2
2
|
import * as fs from "node:fs/promises";
|
|
3
3
|
import * as path from "node:path";
|
|
4
4
|
import { glob } from "glob";
|
|
5
|
+
import { getDextoPath } from "../utils/path.js";
|
|
5
6
|
import { PathValidator } from "./path-validator.js";
|
|
6
7
|
import { FileSystemError } from "./errors.js";
|
|
7
|
-
import {
|
|
8
|
+
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
8
9
|
const DEFAULT_ENCODING = "utf-8";
|
|
9
10
|
const DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
10
11
|
const DEFAULT_MAX_RESULTS = 1e3;
|
|
@@ -13,43 +14,50 @@ class FileSystemService {
|
|
|
13
14
|
config;
|
|
14
15
|
pathValidator;
|
|
15
16
|
initialized = false;
|
|
16
|
-
|
|
17
|
+
logger;
|
|
18
|
+
constructor(config = {}, logger) {
|
|
17
19
|
this.config = {
|
|
18
20
|
allowedPaths: config.allowedPaths || ["."],
|
|
19
21
|
blockedPaths: config.blockedPaths || [".git", "node_modules/.bin", ".env"],
|
|
20
22
|
blockedExtensions: config.blockedExtensions || [".exe", ".dll", ".so"],
|
|
21
23
|
maxFileSize: config.maxFileSize || DEFAULT_MAX_FILE_SIZE,
|
|
22
24
|
enableBackups: config.enableBackups ?? true,
|
|
23
|
-
backupPath: config.backupPath
|
|
25
|
+
backupPath: config.backupPath,
|
|
26
|
+
// Optional absolute override, defaults handled by getBackupDir()
|
|
24
27
|
backupRetentionDays: config.backupRetentionDays || 7,
|
|
25
28
|
workingDirectory: config.workingDirectory
|
|
26
29
|
};
|
|
27
|
-
this.
|
|
30
|
+
this.logger = logger.createChild(DextoLogComponent.FILESYSTEM);
|
|
31
|
+
this.pathValidator = new PathValidator(this.config, this.logger);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get backup directory path (context-aware with optional override)
|
|
35
|
+
* TODO: Migrate to explicit configuration via CLI enrichment layer (per-agent paths)
|
|
36
|
+
*/
|
|
37
|
+
getBackupDir() {
|
|
38
|
+
return this.config.backupPath || getDextoPath("backups");
|
|
28
39
|
}
|
|
29
40
|
/**
|
|
30
41
|
* Initialize the service
|
|
31
42
|
*/
|
|
32
43
|
async initialize() {
|
|
33
44
|
if (this.initialized) {
|
|
34
|
-
logger.debug("FileSystemService already initialized");
|
|
45
|
+
this.logger.debug("FileSystemService already initialized");
|
|
35
46
|
return;
|
|
36
47
|
}
|
|
37
48
|
if (this.config.enableBackups) {
|
|
38
49
|
try {
|
|
39
|
-
const backupDir =
|
|
40
|
-
this.config.workingDirectory || process.cwd(),
|
|
41
|
-
this.config.backupPath
|
|
42
|
-
);
|
|
50
|
+
const backupDir = this.getBackupDir();
|
|
43
51
|
await fs.mkdir(backupDir, { recursive: true });
|
|
44
|
-
logger.debug(`Backup directory created/verified: ${backupDir}`);
|
|
52
|
+
this.logger.debug(`Backup directory created/verified: ${backupDir}`);
|
|
45
53
|
} catch (error) {
|
|
46
|
-
logger.warn(
|
|
54
|
+
this.logger.warn(
|
|
47
55
|
`Failed to create backup directory: ${error instanceof Error ? error.message : String(error)}`
|
|
48
56
|
);
|
|
49
57
|
}
|
|
50
58
|
}
|
|
51
59
|
this.initialized = true;
|
|
52
|
-
logger.info("FileSystemService initialized successfully");
|
|
60
|
+
this.logger.info("FileSystemService initialized successfully");
|
|
53
61
|
}
|
|
54
62
|
/**
|
|
55
63
|
* Read a file with validation and size limits
|
|
@@ -139,7 +147,7 @@ class FileSystemService {
|
|
|
139
147
|
for (const file of files) {
|
|
140
148
|
const validation = this.pathValidator.validatePath(file);
|
|
141
149
|
if (!validation.isValid || !validation.normalizedPath) {
|
|
142
|
-
logger.debug(`Skipping invalid path: ${file}`);
|
|
150
|
+
this.logger.debug(`Skipping invalid path: ${file}`);
|
|
143
151
|
continue;
|
|
144
152
|
}
|
|
145
153
|
if (options.includeMetadata !== false) {
|
|
@@ -152,7 +160,7 @@ class FileSystemService {
|
|
|
152
160
|
isDirectory: stats.isDirectory()
|
|
153
161
|
});
|
|
154
162
|
} catch (error) {
|
|
155
|
-
logger.debug(
|
|
163
|
+
this.logger.debug(
|
|
156
164
|
`Failed to stat file ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
157
165
|
);
|
|
158
166
|
}
|
|
@@ -240,7 +248,7 @@ class FileSystemService {
|
|
|
240
248
|
}
|
|
241
249
|
}
|
|
242
250
|
} catch (error) {
|
|
243
|
-
logger.debug(
|
|
251
|
+
this.logger.debug(
|
|
244
252
|
`Skipping file ${fileInfo.path}: ${error instanceof Error ? error.message : String(error)}`
|
|
245
253
|
);
|
|
246
254
|
}
|
|
@@ -291,7 +299,7 @@ class FileSystemService {
|
|
|
291
299
|
}
|
|
292
300
|
await fs.writeFile(normalizedPath, content, encoding);
|
|
293
301
|
const bytesWritten = Buffer.byteLength(content, encoding);
|
|
294
|
-
logger.debug(`File written: ${normalizedPath} (${bytesWritten} bytes)`);
|
|
302
|
+
this.logger.debug(`File written: ${normalizedPath} (${bytesWritten} bytes)`);
|
|
295
303
|
return {
|
|
296
304
|
success: true,
|
|
297
305
|
path: normalizedPath,
|
|
@@ -342,7 +350,7 @@ class FileSystemService {
|
|
|
342
350
|
content = content.replace(operation.oldString, operation.newString);
|
|
343
351
|
}
|
|
344
352
|
await fs.writeFile(normalizedPath, content, options.encoding || DEFAULT_ENCODING);
|
|
345
|
-
logger.debug(`File edited: ${normalizedPath} (${occurrences} replacements)`);
|
|
353
|
+
this.logger.debug(`File edited: ${normalizedPath} (${occurrences} replacements)`);
|
|
346
354
|
return {
|
|
347
355
|
success: true,
|
|
348
356
|
path: normalizedPath,
|
|
@@ -360,10 +368,7 @@ class FileSystemService {
|
|
|
360
368
|
* Create a backup of a file
|
|
361
369
|
*/
|
|
362
370
|
async createBackup(filePath) {
|
|
363
|
-
const backupDir =
|
|
364
|
-
this.config.workingDirectory || process.cwd(),
|
|
365
|
-
this.config.backupPath
|
|
366
|
-
);
|
|
371
|
+
const backupDir = this.getBackupDir();
|
|
367
372
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
368
373
|
const basename = path.basename(filePath);
|
|
369
374
|
const backupFilename = `${basename}.${timestamp}.backup`;
|
|
@@ -371,7 +376,7 @@ class FileSystemService {
|
|
|
371
376
|
try {
|
|
372
377
|
await fs.mkdir(backupDir, { recursive: true });
|
|
373
378
|
await fs.copyFile(filePath, backupPath);
|
|
374
|
-
logger.debug(`Backup created: ${backupPath}`);
|
|
379
|
+
this.logger.debug(`Backup created: ${backupPath}`);
|
|
375
380
|
await this.cleanupOldBackups();
|
|
376
381
|
return backupPath;
|
|
377
382
|
} catch (error) {
|
|
@@ -388,10 +393,15 @@ class FileSystemService {
|
|
|
388
393
|
if (!this.config.enableBackups) {
|
|
389
394
|
return 0;
|
|
390
395
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
this.
|
|
394
|
-
)
|
|
396
|
+
let backupDir;
|
|
397
|
+
try {
|
|
398
|
+
backupDir = this.getBackupDir();
|
|
399
|
+
} catch (error) {
|
|
400
|
+
this.logger.warn(
|
|
401
|
+
`Failed to resolve backup directory: ${error instanceof Error ? error.message : String(error)}`
|
|
402
|
+
);
|
|
403
|
+
return 0;
|
|
404
|
+
}
|
|
395
405
|
try {
|
|
396
406
|
await fs.access(backupDir);
|
|
397
407
|
} catch {
|
|
@@ -411,20 +421,20 @@ class FileSystemService {
|
|
|
411
421
|
if (stats.mtime < cutoffDate) {
|
|
412
422
|
await fs.unlink(filePath);
|
|
413
423
|
deletedCount++;
|
|
414
|
-
logger.debug(`Cleaned up old backup: ${file}`);
|
|
424
|
+
this.logger.debug(`Cleaned up old backup: ${file}`);
|
|
415
425
|
}
|
|
416
426
|
} catch (error) {
|
|
417
|
-
logger.warn(
|
|
427
|
+
this.logger.warn(
|
|
418
428
|
`Failed to process backup file ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
419
429
|
);
|
|
420
430
|
}
|
|
421
431
|
}
|
|
422
432
|
if (deletedCount > 0) {
|
|
423
|
-
logger.info(`Backup cleanup: removed ${deletedCount} old backup files`);
|
|
433
|
+
this.logger.info(`Backup cleanup: removed ${deletedCount} old backup files`);
|
|
424
434
|
}
|
|
425
435
|
return deletedCount;
|
|
426
436
|
} catch (error) {
|
|
427
|
-
logger.warn(
|
|
437
|
+
this.logger.warn(
|
|
428
438
|
`Failed to cleanup backup directory: ${error instanceof Error ? error.message : String(error)}`
|
|
429
439
|
);
|
|
430
440
|
return 0;
|
|
@@ -33,14 +33,15 @@ __export(path_validator_exports, {
|
|
|
33
33
|
module.exports = __toCommonJS(path_validator_exports);
|
|
34
34
|
var path = __toESM(require("node:path"), 1);
|
|
35
35
|
var import_node_fs = require("node:fs");
|
|
36
|
-
var import_logger = require("../logger/index.js");
|
|
37
36
|
class PathValidator {
|
|
38
37
|
config;
|
|
39
38
|
normalizedAllowedPaths;
|
|
40
39
|
normalizedBlockedPaths;
|
|
41
40
|
normalizedBlockedExtensions;
|
|
42
|
-
|
|
41
|
+
logger;
|
|
42
|
+
constructor(config, logger) {
|
|
43
43
|
this.config = config;
|
|
44
|
+
this.logger = logger;
|
|
44
45
|
const workingDir = config.workingDirectory || process.cwd();
|
|
45
46
|
this.normalizedAllowedPaths = config.allowedPaths.map((p) => path.resolve(workingDir, p));
|
|
46
47
|
this.normalizedBlockedPaths = config.blockedPaths.map((p) => path.normalize(p));
|
|
@@ -48,7 +49,7 @@ class PathValidator {
|
|
|
48
49
|
const e = ext.startsWith(".") ? ext : `.${ext}`;
|
|
49
50
|
return e.toLowerCase();
|
|
50
51
|
});
|
|
51
|
-
|
|
52
|
+
this.logger.debug(
|
|
52
53
|
`PathValidator initialized with ${this.normalizedAllowedPaths.length} allowed paths`
|
|
53
54
|
);
|
|
54
55
|
}
|