@dexto/core 1.2.3 → 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
|
@@ -22,55 +22,91 @@ __export(manager_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(manager_exports);
|
|
24
24
|
var import_types = require("./types.js");
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var import_factory = require("./providers/factory.js");
|
|
28
|
-
var import_logger = require("../logger/index.js");
|
|
25
|
+
var import_factory = require("./factory.js");
|
|
26
|
+
var import_types2 = require("../logger/v2/types.js");
|
|
29
27
|
var import_errors = require("./errors.js");
|
|
30
28
|
class ApprovalManager {
|
|
31
|
-
|
|
29
|
+
handler;
|
|
32
30
|
config;
|
|
33
|
-
|
|
31
|
+
logger;
|
|
32
|
+
constructor(config, logger) {
|
|
34
33
|
this.config = config;
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
`ApprovalManager initialized with mode: ${config.mode},
|
|
34
|
+
this.logger = logger.createChild(import_types2.DextoLogComponent.APPROVAL);
|
|
35
|
+
this.logger.debug(
|
|
36
|
+
`ApprovalManager initialized with toolConfirmation.mode: ${config.toolConfirmation.mode}, elicitation.enabled: ${config.elicitation.enabled}`
|
|
38
37
|
);
|
|
39
38
|
}
|
|
40
39
|
/**
|
|
41
|
-
*
|
|
42
|
-
* TODO: Move this into factory.ts
|
|
40
|
+
* Request a generic approval
|
|
43
41
|
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
case "auto-approve":
|
|
51
|
-
return new import_noop_approval_provider.NoOpApprovalProvider({ defaultStatus: import_types.ApprovalStatus.APPROVED });
|
|
52
|
-
case "auto-deny":
|
|
53
|
-
return new import_noop_approval_provider.NoOpApprovalProvider({ defaultStatus: import_types.ApprovalStatus.DENIED });
|
|
54
|
-
default:
|
|
55
|
-
throw import_errors.ApprovalError.invalidConfig(`Unknown approval mode: ${config.mode}`);
|
|
42
|
+
async requestApproval(details) {
|
|
43
|
+
const request = (0, import_factory.createApprovalRequest)(details);
|
|
44
|
+
if (request.type === import_types.ApprovalType.ELICITATION && !this.config.elicitation.enabled) {
|
|
45
|
+
throw import_errors.ApprovalError.invalidConfig(
|
|
46
|
+
"Elicitation is disabled. Enable elicitation in your agent configuration to use the ask_user tool or MCP server elicitations."
|
|
47
|
+
);
|
|
56
48
|
}
|
|
49
|
+
return this.handleApproval(request);
|
|
57
50
|
}
|
|
58
51
|
/**
|
|
59
|
-
*
|
|
52
|
+
* Handle approval requests (tool confirmation, elicitation, command confirmation, custom)
|
|
53
|
+
* @private
|
|
60
54
|
*/
|
|
61
|
-
async
|
|
62
|
-
|
|
63
|
-
|
|
55
|
+
async handleApproval(request) {
|
|
56
|
+
if (request.type === import_types.ApprovalType.ELICITATION) {
|
|
57
|
+
const handler2 = this.ensureHandler();
|
|
58
|
+
this.logger.info(
|
|
59
|
+
`Elicitation requested, approvalId: ${request.approvalId}, sessionId: ${request.sessionId ?? "global"}`
|
|
60
|
+
);
|
|
61
|
+
return handler2(request);
|
|
62
|
+
}
|
|
63
|
+
const mode = this.config.toolConfirmation.mode;
|
|
64
|
+
if (mode === "auto-approve") {
|
|
65
|
+
this.logger.info(
|
|
66
|
+
`Auto-approve approval '${request.type}', approvalId: ${request.approvalId}`
|
|
67
|
+
);
|
|
68
|
+
const response = {
|
|
69
|
+
approvalId: request.approvalId,
|
|
70
|
+
status: import_types.ApprovalStatus.APPROVED
|
|
71
|
+
};
|
|
72
|
+
if (request.sessionId !== void 0) {
|
|
73
|
+
response.sessionId = request.sessionId;
|
|
74
|
+
}
|
|
75
|
+
return response;
|
|
76
|
+
}
|
|
77
|
+
if (mode === "auto-deny") {
|
|
78
|
+
this.logger.info(
|
|
79
|
+
`Auto-deny approval '${request.type}', approvalId: ${request.approvalId}`
|
|
80
|
+
);
|
|
81
|
+
const response = {
|
|
82
|
+
approvalId: request.approvalId,
|
|
83
|
+
status: import_types.ApprovalStatus.DENIED,
|
|
84
|
+
reason: import_types.DenialReason.SYSTEM_DENIED,
|
|
85
|
+
message: `Approval automatically denied by system policy (auto-deny mode)`
|
|
86
|
+
};
|
|
87
|
+
if (request.sessionId !== void 0) {
|
|
88
|
+
response.sessionId = request.sessionId;
|
|
89
|
+
}
|
|
90
|
+
return response;
|
|
91
|
+
}
|
|
92
|
+
const handler = this.ensureHandler();
|
|
93
|
+
this.logger.info(
|
|
94
|
+
`Manual approval '${request.type}' requested, approvalId: ${request.approvalId}, sessionId: ${request.sessionId ?? "global"}`
|
|
95
|
+
);
|
|
96
|
+
return handler(request);
|
|
64
97
|
}
|
|
65
98
|
/**
|
|
66
99
|
* Request tool confirmation approval
|
|
67
100
|
* Convenience method for tool execution confirmation
|
|
101
|
+
*
|
|
102
|
+
* TODO: Make sessionId required once all callers are updated to pass it
|
|
103
|
+
* Tool confirmations always happen in session context during LLM execution
|
|
68
104
|
*/
|
|
69
105
|
async requestToolConfirmation(metadata) {
|
|
70
106
|
const { sessionId, timeout, ...toolMetadata } = metadata;
|
|
71
107
|
const details = {
|
|
72
108
|
type: import_types.ApprovalType.TOOL_CONFIRMATION,
|
|
73
|
-
timeout: timeout ?? this.config.timeout,
|
|
109
|
+
timeout: timeout ?? this.config.toolConfirmation.timeout,
|
|
74
110
|
metadata: toolMetadata
|
|
75
111
|
};
|
|
76
112
|
if (sessionId !== void 0) {
|
|
@@ -85,6 +121,9 @@ class ApprovalManager {
|
|
|
85
121
|
* This is different from tool confirmation - it's for per-command approval
|
|
86
122
|
* of dangerous operations (like rm, git push) within tools that are already approved.
|
|
87
123
|
*
|
|
124
|
+
* TODO: Make sessionId required once all callers are updated to pass it
|
|
125
|
+
* Command confirmations always happen during tool execution which has session context
|
|
126
|
+
*
|
|
88
127
|
* @example
|
|
89
128
|
* ```typescript
|
|
90
129
|
* // bash_exec tool is approved, but dangerous commands still require approval
|
|
@@ -100,7 +139,7 @@ class ApprovalManager {
|
|
|
100
139
|
const { sessionId, timeout, ...commandMetadata } = metadata;
|
|
101
140
|
const details = {
|
|
102
141
|
type: import_types.ApprovalType.COMMAND_CONFIRMATION,
|
|
103
|
-
timeout: timeout ?? this.config.timeout,
|
|
142
|
+
timeout: timeout ?? this.config.toolConfirmation.timeout,
|
|
104
143
|
metadata: commandMetadata
|
|
105
144
|
};
|
|
106
145
|
if (sessionId !== void 0) {
|
|
@@ -119,7 +158,7 @@ class ApprovalManager {
|
|
|
119
158
|
const { sessionId, timeout, ...elicitationMetadata } = metadata;
|
|
120
159
|
const details = {
|
|
121
160
|
type: import_types.ApprovalType.ELICITATION,
|
|
122
|
-
timeout: timeout ?? this.config.timeout,
|
|
161
|
+
timeout: timeout ?? this.config.elicitation.timeout,
|
|
123
162
|
metadata: elicitationMetadata
|
|
124
163
|
};
|
|
125
164
|
if (sessionId !== void 0) {
|
|
@@ -136,9 +175,18 @@ class ApprovalManager {
|
|
|
136
175
|
if (response.status === import_types.ApprovalStatus.APPROVED) {
|
|
137
176
|
return true;
|
|
138
177
|
} else if (response.status === import_types.ApprovalStatus.DENIED) {
|
|
139
|
-
throw import_errors.ApprovalError.toolConfirmationDenied(
|
|
178
|
+
throw import_errors.ApprovalError.toolConfirmationDenied(
|
|
179
|
+
metadata.toolName,
|
|
180
|
+
response.reason,
|
|
181
|
+
response.message,
|
|
182
|
+
metadata.sessionId
|
|
183
|
+
);
|
|
140
184
|
} else {
|
|
141
|
-
throw import_errors.ApprovalError.cancelled(
|
|
185
|
+
throw import_errors.ApprovalError.cancelled(
|
|
186
|
+
response.approvalId,
|
|
187
|
+
import_types.ApprovalType.TOOL_CONFIRMATION,
|
|
188
|
+
response.message ?? response.reason
|
|
189
|
+
);
|
|
142
190
|
}
|
|
143
191
|
}
|
|
144
192
|
/**
|
|
@@ -153,28 +201,37 @@ class ApprovalManager {
|
|
|
153
201
|
}
|
|
154
202
|
return {};
|
|
155
203
|
} else if (response.status === import_types.ApprovalStatus.DENIED) {
|
|
156
|
-
throw import_errors.ApprovalError.elicitationDenied(
|
|
204
|
+
throw import_errors.ApprovalError.elicitationDenied(
|
|
205
|
+
metadata.serverName,
|
|
206
|
+
response.reason,
|
|
207
|
+
response.message,
|
|
208
|
+
metadata.sessionId
|
|
209
|
+
);
|
|
157
210
|
} else {
|
|
158
|
-
throw import_errors.ApprovalError.cancelled(
|
|
211
|
+
throw import_errors.ApprovalError.cancelled(
|
|
212
|
+
response.approvalId,
|
|
213
|
+
import_types.ApprovalType.ELICITATION,
|
|
214
|
+
response.message ?? response.reason
|
|
215
|
+
);
|
|
159
216
|
}
|
|
160
217
|
}
|
|
161
218
|
/**
|
|
162
219
|
* Cancel a specific approval request
|
|
163
220
|
*/
|
|
164
221
|
cancelApproval(approvalId) {
|
|
165
|
-
this.
|
|
222
|
+
this.handler?.cancel?.(approvalId);
|
|
166
223
|
}
|
|
167
224
|
/**
|
|
168
225
|
* Cancel all pending approval requests
|
|
169
226
|
*/
|
|
170
227
|
cancelAllApprovals() {
|
|
171
|
-
this.
|
|
228
|
+
this.handler?.cancelAll?.();
|
|
172
229
|
}
|
|
173
230
|
/**
|
|
174
231
|
* Get list of pending approval IDs
|
|
175
232
|
*/
|
|
176
233
|
getPendingApprovals() {
|
|
177
|
-
return this.
|
|
234
|
+
return this.handler?.getPending?.() ?? [];
|
|
178
235
|
}
|
|
179
236
|
/**
|
|
180
237
|
* Get current configuration
|
|
@@ -182,6 +239,52 @@ class ApprovalManager {
|
|
|
182
239
|
getConfig() {
|
|
183
240
|
return { ...this.config };
|
|
184
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Set the approval handler for manual approval mode.
|
|
244
|
+
*
|
|
245
|
+
* The handler will be called for:
|
|
246
|
+
* - Tool confirmation requests when toolConfirmation.mode is 'manual'
|
|
247
|
+
* - All elicitation requests (when elicitation is enabled, regardless of toolConfirmation.mode)
|
|
248
|
+
*
|
|
249
|
+
* A handler must be set before processing requests if:
|
|
250
|
+
* - toolConfirmation.mode is 'manual', or
|
|
251
|
+
* - elicitation is enabled (elicitation.enabled is true)
|
|
252
|
+
*
|
|
253
|
+
* @param handler The approval handler function, or null to clear
|
|
254
|
+
*/
|
|
255
|
+
setHandler(handler) {
|
|
256
|
+
if (handler === null) {
|
|
257
|
+
this.handler = void 0;
|
|
258
|
+
} else {
|
|
259
|
+
this.handler = handler;
|
|
260
|
+
}
|
|
261
|
+
this.logger.debug(`Approval handler ${handler ? "registered" : "cleared"}`);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Clear the current approval handler
|
|
265
|
+
*/
|
|
266
|
+
clearHandler() {
|
|
267
|
+
this.handler = void 0;
|
|
268
|
+
this.logger.debug("Approval handler cleared");
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Check if an approval handler is registered
|
|
272
|
+
*/
|
|
273
|
+
hasHandler() {
|
|
274
|
+
return this.handler !== void 0;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Get the approval handler, throwing if not set
|
|
278
|
+
* @private
|
|
279
|
+
*/
|
|
280
|
+
ensureHandler() {
|
|
281
|
+
if (!this.handler) {
|
|
282
|
+
throw import_errors.ApprovalError.invalidConfig(
|
|
283
|
+
'An approval handler is required but not configured.\nHandlers are required for:\n \u2022 manual tool confirmation mode\n \u2022 all elicitation requests (when elicitation is enabled)\nEither:\n \u2022 set toolConfirmation.mode to "auto-approve" or "auto-deny", or\n \u2022 disable elicitation (set elicitation.enabled: false), or\n \u2022 call agent.setApprovalHandler(...) before processing requests.'
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
return this.handler;
|
|
287
|
+
}
|
|
185
288
|
}
|
|
186
289
|
// Annotate the CommonJS export names for ESM import in node:
|
|
187
290
|
0 && (module.exports = {
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import type { ApprovalResponse, ApprovalRequestDetails, ToolConfirmationMetadata, CommandConfirmationMetadata, ElicitationMetadata } from './types.js';
|
|
2
|
-
import type {
|
|
1
|
+
import type { ApprovalHandler, ApprovalResponse, ApprovalRequestDetails, ToolConfirmationMetadata, CommandConfirmationMetadata, ElicitationMetadata } from './types.js';
|
|
2
|
+
import type { IDextoLogger } from '../logger/v2/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Configuration for the approval manager
|
|
5
5
|
*/
|
|
6
6
|
export interface ApprovalManagerConfig {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
toolConfirmation: {
|
|
8
|
+
mode: 'manual' | 'auto-approve' | 'auto-deny';
|
|
9
|
+
timeout: number;
|
|
10
|
+
};
|
|
11
|
+
elicitation: {
|
|
12
|
+
enabled: boolean;
|
|
13
|
+
timeout: number;
|
|
14
|
+
};
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* ApprovalManager orchestrates all user approval flows in Dexto.
|
|
@@ -23,11 +25,14 @@ export interface ApprovalManagerConfig {
|
|
|
23
25
|
* - Route approvals to appropriate providers
|
|
24
26
|
* - Provide convenience methods for specific approval types
|
|
25
27
|
* - Handle approval responses and errors
|
|
26
|
-
* - Support multiple approval modes (
|
|
28
|
+
* - Support multiple approval modes (manual, auto-approve, auto-deny)
|
|
27
29
|
*
|
|
28
30
|
* @example
|
|
29
31
|
* ```typescript
|
|
30
|
-
* const manager = new ApprovalManager(
|
|
32
|
+
* const manager = new ApprovalManager(
|
|
33
|
+
* { toolConfirmation: { mode: 'manual', timeout: 60000 }, elicitation: { enabled: true, timeout: 60000 } },
|
|
34
|
+
* logger
|
|
35
|
+
* );
|
|
31
36
|
*
|
|
32
37
|
* // Request tool confirmation
|
|
33
38
|
* const response = await manager.requestToolConfirmation({
|
|
@@ -42,21 +47,25 @@ export interface ApprovalManagerConfig {
|
|
|
42
47
|
* ```
|
|
43
48
|
*/
|
|
44
49
|
export declare class ApprovalManager {
|
|
45
|
-
private
|
|
50
|
+
private handler;
|
|
46
51
|
private config;
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
* Create appropriate approval provider based on configuration
|
|
50
|
-
* TODO: Move this into factory.ts
|
|
51
|
-
*/
|
|
52
|
-
private createProvider;
|
|
52
|
+
private logger;
|
|
53
|
+
constructor(config: ApprovalManagerConfig, logger: IDextoLogger);
|
|
53
54
|
/**
|
|
54
55
|
* Request a generic approval
|
|
55
56
|
*/
|
|
56
57
|
requestApproval(details: ApprovalRequestDetails): Promise<ApprovalResponse>;
|
|
58
|
+
/**
|
|
59
|
+
* Handle approval requests (tool confirmation, elicitation, command confirmation, custom)
|
|
60
|
+
* @private
|
|
61
|
+
*/
|
|
62
|
+
private handleApproval;
|
|
57
63
|
/**
|
|
58
64
|
* Request tool confirmation approval
|
|
59
65
|
* Convenience method for tool execution confirmation
|
|
66
|
+
*
|
|
67
|
+
* TODO: Make sessionId required once all callers are updated to pass it
|
|
68
|
+
* Tool confirmations always happen in session context during LLM execution
|
|
60
69
|
*/
|
|
61
70
|
requestToolConfirmation(metadata: ToolConfirmationMetadata & {
|
|
62
71
|
sessionId?: string;
|
|
@@ -69,6 +78,9 @@ export declare class ApprovalManager {
|
|
|
69
78
|
* This is different from tool confirmation - it's for per-command approval
|
|
70
79
|
* of dangerous operations (like rm, git push) within tools that are already approved.
|
|
71
80
|
*
|
|
81
|
+
* TODO: Make sessionId required once all callers are updated to pass it
|
|
82
|
+
* Command confirmations always happen during tool execution which has session context
|
|
83
|
+
*
|
|
72
84
|
* @example
|
|
73
85
|
* ```typescript
|
|
74
86
|
* // bash_exec tool is approved, but dangerous commands still require approval
|
|
@@ -127,5 +139,32 @@ export declare class ApprovalManager {
|
|
|
127
139
|
* Get current configuration
|
|
128
140
|
*/
|
|
129
141
|
getConfig(): ApprovalManagerConfig;
|
|
142
|
+
/**
|
|
143
|
+
* Set the approval handler for manual approval mode.
|
|
144
|
+
*
|
|
145
|
+
* The handler will be called for:
|
|
146
|
+
* - Tool confirmation requests when toolConfirmation.mode is 'manual'
|
|
147
|
+
* - All elicitation requests (when elicitation is enabled, regardless of toolConfirmation.mode)
|
|
148
|
+
*
|
|
149
|
+
* A handler must be set before processing requests if:
|
|
150
|
+
* - toolConfirmation.mode is 'manual', or
|
|
151
|
+
* - elicitation is enabled (elicitation.enabled is true)
|
|
152
|
+
*
|
|
153
|
+
* @param handler The approval handler function, or null to clear
|
|
154
|
+
*/
|
|
155
|
+
setHandler(handler: ApprovalHandler | null): void;
|
|
156
|
+
/**
|
|
157
|
+
* Clear the current approval handler
|
|
158
|
+
*/
|
|
159
|
+
clearHandler(): void;
|
|
160
|
+
/**
|
|
161
|
+
* Check if an approval handler is registered
|
|
162
|
+
*/
|
|
163
|
+
hasHandler(): boolean;
|
|
164
|
+
/**
|
|
165
|
+
* Get the approval handler, throwing if not set
|
|
166
|
+
* @private
|
|
167
|
+
*/
|
|
168
|
+
private ensureHandler;
|
|
130
169
|
}
|
|
131
170
|
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/approval/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/approval/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,eAAe,EAEf,gBAAgB,EAChB,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,EAC3B,mBAAmB,EACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,gBAAgB,EAAE;QACd,IAAI,EAAE,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAC;QAC9C,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,WAAW,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,YAAY;IAS/D;;OAEG;IACG,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAcjF;;;OAGG;YACW,cAAc;IAqD5B;;;;;;OAMG;IACG,uBAAuB,CACzB,QAAQ,EAAE,wBAAwB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,gBAAgB,CAAC;IAgB5B;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,0BAA0B,CAC5B,QAAQ,EAAE,2BAA2B,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACjF,OAAO,CAAC,gBAAgB,CAAC;IAgB5B;;;;;;OAMG;IACG,kBAAkB,CACpB,QAAQ,EAAE,mBAAmB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE,OAAO,CAAC,gBAAgB,CAAC;IAgB5B;;;OAGG;IACG,qBAAqB,CACvB,QAAQ,EAAE,wBAAwB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAC9E,OAAO,CAAC,OAAO,CAAC;IAqBnB;;;OAGG;IACG,kBAAkB,CACpB,QAAQ,EAAE,mBAAmB,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GACzE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAgCnC;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,SAAS,IAAI,qBAAqB;IAIlC;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IASjD;;OAEG;IACH,YAAY,IAAI,IAAI;IAKpB;;OAEG;IACI,UAAU,IAAI,OAAO;IAI5B;;;OAGG;IACH,OAAO,CAAC,aAAa;CAgBxB"}
|
package/dist/approval/manager.js
CHANGED
|
@@ -1,54 +1,90 @@
|
|
|
1
1
|
import "../chunk-C6A6W6XS.js";
|
|
2
|
-
import { ApprovalType, ApprovalStatus } from "./types.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { createApprovalRequest } from "./providers/factory.js";
|
|
6
|
-
import { logger } from "../logger/index.js";
|
|
2
|
+
import { ApprovalType, ApprovalStatus, DenialReason } from "./types.js";
|
|
3
|
+
import { createApprovalRequest } from "./factory.js";
|
|
4
|
+
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
7
5
|
import { ApprovalError } from "./errors.js";
|
|
8
6
|
class ApprovalManager {
|
|
9
|
-
|
|
7
|
+
handler;
|
|
10
8
|
config;
|
|
11
|
-
|
|
9
|
+
logger;
|
|
10
|
+
constructor(config, logger) {
|
|
12
11
|
this.config = config;
|
|
13
|
-
this.
|
|
14
|
-
logger.debug(
|
|
15
|
-
`ApprovalManager initialized with mode: ${config.mode},
|
|
12
|
+
this.logger = logger.createChild(DextoLogComponent.APPROVAL);
|
|
13
|
+
this.logger.debug(
|
|
14
|
+
`ApprovalManager initialized with toolConfirmation.mode: ${config.toolConfirmation.mode}, elicitation.enabled: ${config.elicitation.enabled}`
|
|
16
15
|
);
|
|
17
16
|
}
|
|
18
17
|
/**
|
|
19
|
-
*
|
|
20
|
-
* TODO: Move this into factory.ts
|
|
18
|
+
* Request a generic approval
|
|
21
19
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
case "auto-approve":
|
|
29
|
-
return new NoOpApprovalProvider({ defaultStatus: ApprovalStatus.APPROVED });
|
|
30
|
-
case "auto-deny":
|
|
31
|
-
return new NoOpApprovalProvider({ defaultStatus: ApprovalStatus.DENIED });
|
|
32
|
-
default:
|
|
33
|
-
throw ApprovalError.invalidConfig(`Unknown approval mode: ${config.mode}`);
|
|
20
|
+
async requestApproval(details) {
|
|
21
|
+
const request = createApprovalRequest(details);
|
|
22
|
+
if (request.type === ApprovalType.ELICITATION && !this.config.elicitation.enabled) {
|
|
23
|
+
throw ApprovalError.invalidConfig(
|
|
24
|
+
"Elicitation is disabled. Enable elicitation in your agent configuration to use the ask_user tool or MCP server elicitations."
|
|
25
|
+
);
|
|
34
26
|
}
|
|
27
|
+
return this.handleApproval(request);
|
|
35
28
|
}
|
|
36
29
|
/**
|
|
37
|
-
*
|
|
30
|
+
* Handle approval requests (tool confirmation, elicitation, command confirmation, custom)
|
|
31
|
+
* @private
|
|
38
32
|
*/
|
|
39
|
-
async
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
async handleApproval(request) {
|
|
34
|
+
if (request.type === ApprovalType.ELICITATION) {
|
|
35
|
+
const handler2 = this.ensureHandler();
|
|
36
|
+
this.logger.info(
|
|
37
|
+
`Elicitation requested, approvalId: ${request.approvalId}, sessionId: ${request.sessionId ?? "global"}`
|
|
38
|
+
);
|
|
39
|
+
return handler2(request);
|
|
40
|
+
}
|
|
41
|
+
const mode = this.config.toolConfirmation.mode;
|
|
42
|
+
if (mode === "auto-approve") {
|
|
43
|
+
this.logger.info(
|
|
44
|
+
`Auto-approve approval '${request.type}', approvalId: ${request.approvalId}`
|
|
45
|
+
);
|
|
46
|
+
const response = {
|
|
47
|
+
approvalId: request.approvalId,
|
|
48
|
+
status: ApprovalStatus.APPROVED
|
|
49
|
+
};
|
|
50
|
+
if (request.sessionId !== void 0) {
|
|
51
|
+
response.sessionId = request.sessionId;
|
|
52
|
+
}
|
|
53
|
+
return response;
|
|
54
|
+
}
|
|
55
|
+
if (mode === "auto-deny") {
|
|
56
|
+
this.logger.info(
|
|
57
|
+
`Auto-deny approval '${request.type}', approvalId: ${request.approvalId}`
|
|
58
|
+
);
|
|
59
|
+
const response = {
|
|
60
|
+
approvalId: request.approvalId,
|
|
61
|
+
status: ApprovalStatus.DENIED,
|
|
62
|
+
reason: DenialReason.SYSTEM_DENIED,
|
|
63
|
+
message: `Approval automatically denied by system policy (auto-deny mode)`
|
|
64
|
+
};
|
|
65
|
+
if (request.sessionId !== void 0) {
|
|
66
|
+
response.sessionId = request.sessionId;
|
|
67
|
+
}
|
|
68
|
+
return response;
|
|
69
|
+
}
|
|
70
|
+
const handler = this.ensureHandler();
|
|
71
|
+
this.logger.info(
|
|
72
|
+
`Manual approval '${request.type}' requested, approvalId: ${request.approvalId}, sessionId: ${request.sessionId ?? "global"}`
|
|
73
|
+
);
|
|
74
|
+
return handler(request);
|
|
42
75
|
}
|
|
43
76
|
/**
|
|
44
77
|
* Request tool confirmation approval
|
|
45
78
|
* Convenience method for tool execution confirmation
|
|
79
|
+
*
|
|
80
|
+
* TODO: Make sessionId required once all callers are updated to pass it
|
|
81
|
+
* Tool confirmations always happen in session context during LLM execution
|
|
46
82
|
*/
|
|
47
83
|
async requestToolConfirmation(metadata) {
|
|
48
84
|
const { sessionId, timeout, ...toolMetadata } = metadata;
|
|
49
85
|
const details = {
|
|
50
86
|
type: ApprovalType.TOOL_CONFIRMATION,
|
|
51
|
-
timeout: timeout ?? this.config.timeout,
|
|
87
|
+
timeout: timeout ?? this.config.toolConfirmation.timeout,
|
|
52
88
|
metadata: toolMetadata
|
|
53
89
|
};
|
|
54
90
|
if (sessionId !== void 0) {
|
|
@@ -63,6 +99,9 @@ class ApprovalManager {
|
|
|
63
99
|
* This is different from tool confirmation - it's for per-command approval
|
|
64
100
|
* of dangerous operations (like rm, git push) within tools that are already approved.
|
|
65
101
|
*
|
|
102
|
+
* TODO: Make sessionId required once all callers are updated to pass it
|
|
103
|
+
* Command confirmations always happen during tool execution which has session context
|
|
104
|
+
*
|
|
66
105
|
* @example
|
|
67
106
|
* ```typescript
|
|
68
107
|
* // bash_exec tool is approved, but dangerous commands still require approval
|
|
@@ -78,7 +117,7 @@ class ApprovalManager {
|
|
|
78
117
|
const { sessionId, timeout, ...commandMetadata } = metadata;
|
|
79
118
|
const details = {
|
|
80
119
|
type: ApprovalType.COMMAND_CONFIRMATION,
|
|
81
|
-
timeout: timeout ?? this.config.timeout,
|
|
120
|
+
timeout: timeout ?? this.config.toolConfirmation.timeout,
|
|
82
121
|
metadata: commandMetadata
|
|
83
122
|
};
|
|
84
123
|
if (sessionId !== void 0) {
|
|
@@ -97,7 +136,7 @@ class ApprovalManager {
|
|
|
97
136
|
const { sessionId, timeout, ...elicitationMetadata } = metadata;
|
|
98
137
|
const details = {
|
|
99
138
|
type: ApprovalType.ELICITATION,
|
|
100
|
-
timeout: timeout ?? this.config.timeout,
|
|
139
|
+
timeout: timeout ?? this.config.elicitation.timeout,
|
|
101
140
|
metadata: elicitationMetadata
|
|
102
141
|
};
|
|
103
142
|
if (sessionId !== void 0) {
|
|
@@ -114,9 +153,18 @@ class ApprovalManager {
|
|
|
114
153
|
if (response.status === ApprovalStatus.APPROVED) {
|
|
115
154
|
return true;
|
|
116
155
|
} else if (response.status === ApprovalStatus.DENIED) {
|
|
117
|
-
throw ApprovalError.toolConfirmationDenied(
|
|
156
|
+
throw ApprovalError.toolConfirmationDenied(
|
|
157
|
+
metadata.toolName,
|
|
158
|
+
response.reason,
|
|
159
|
+
response.message,
|
|
160
|
+
metadata.sessionId
|
|
161
|
+
);
|
|
118
162
|
} else {
|
|
119
|
-
throw ApprovalError.cancelled(
|
|
163
|
+
throw ApprovalError.cancelled(
|
|
164
|
+
response.approvalId,
|
|
165
|
+
ApprovalType.TOOL_CONFIRMATION,
|
|
166
|
+
response.message ?? response.reason
|
|
167
|
+
);
|
|
120
168
|
}
|
|
121
169
|
}
|
|
122
170
|
/**
|
|
@@ -131,28 +179,37 @@ class ApprovalManager {
|
|
|
131
179
|
}
|
|
132
180
|
return {};
|
|
133
181
|
} else if (response.status === ApprovalStatus.DENIED) {
|
|
134
|
-
throw ApprovalError.elicitationDenied(
|
|
182
|
+
throw ApprovalError.elicitationDenied(
|
|
183
|
+
metadata.serverName,
|
|
184
|
+
response.reason,
|
|
185
|
+
response.message,
|
|
186
|
+
metadata.sessionId
|
|
187
|
+
);
|
|
135
188
|
} else {
|
|
136
|
-
throw ApprovalError.cancelled(
|
|
189
|
+
throw ApprovalError.cancelled(
|
|
190
|
+
response.approvalId,
|
|
191
|
+
ApprovalType.ELICITATION,
|
|
192
|
+
response.message ?? response.reason
|
|
193
|
+
);
|
|
137
194
|
}
|
|
138
195
|
}
|
|
139
196
|
/**
|
|
140
197
|
* Cancel a specific approval request
|
|
141
198
|
*/
|
|
142
199
|
cancelApproval(approvalId) {
|
|
143
|
-
this.
|
|
200
|
+
this.handler?.cancel?.(approvalId);
|
|
144
201
|
}
|
|
145
202
|
/**
|
|
146
203
|
* Cancel all pending approval requests
|
|
147
204
|
*/
|
|
148
205
|
cancelAllApprovals() {
|
|
149
|
-
this.
|
|
206
|
+
this.handler?.cancelAll?.();
|
|
150
207
|
}
|
|
151
208
|
/**
|
|
152
209
|
* Get list of pending approval IDs
|
|
153
210
|
*/
|
|
154
211
|
getPendingApprovals() {
|
|
155
|
-
return this.
|
|
212
|
+
return this.handler?.getPending?.() ?? [];
|
|
156
213
|
}
|
|
157
214
|
/**
|
|
158
215
|
* Get current configuration
|
|
@@ -160,6 +217,52 @@ class ApprovalManager {
|
|
|
160
217
|
getConfig() {
|
|
161
218
|
return { ...this.config };
|
|
162
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* Set the approval handler for manual approval mode.
|
|
222
|
+
*
|
|
223
|
+
* The handler will be called for:
|
|
224
|
+
* - Tool confirmation requests when toolConfirmation.mode is 'manual'
|
|
225
|
+
* - All elicitation requests (when elicitation is enabled, regardless of toolConfirmation.mode)
|
|
226
|
+
*
|
|
227
|
+
* A handler must be set before processing requests if:
|
|
228
|
+
* - toolConfirmation.mode is 'manual', or
|
|
229
|
+
* - elicitation is enabled (elicitation.enabled is true)
|
|
230
|
+
*
|
|
231
|
+
* @param handler The approval handler function, or null to clear
|
|
232
|
+
*/
|
|
233
|
+
setHandler(handler) {
|
|
234
|
+
if (handler === null) {
|
|
235
|
+
this.handler = void 0;
|
|
236
|
+
} else {
|
|
237
|
+
this.handler = handler;
|
|
238
|
+
}
|
|
239
|
+
this.logger.debug(`Approval handler ${handler ? "registered" : "cleared"}`);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Clear the current approval handler
|
|
243
|
+
*/
|
|
244
|
+
clearHandler() {
|
|
245
|
+
this.handler = void 0;
|
|
246
|
+
this.logger.debug("Approval handler cleared");
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check if an approval handler is registered
|
|
250
|
+
*/
|
|
251
|
+
hasHandler() {
|
|
252
|
+
return this.handler !== void 0;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get the approval handler, throwing if not set
|
|
256
|
+
* @private
|
|
257
|
+
*/
|
|
258
|
+
ensureHandler() {
|
|
259
|
+
if (!this.handler) {
|
|
260
|
+
throw ApprovalError.invalidConfig(
|
|
261
|
+
'An approval handler is required but not configured.\nHandlers are required for:\n \u2022 manual tool confirmation mode\n \u2022 all elicitation requests (when elicitation is enabled)\nEither:\n \u2022 set toolConfirmation.mode to "auto-approve" or "auto-deny", or\n \u2022 disable elicitation (set elicitation.enabled: false), or\n \u2022 call agent.setApprovalHandler(...) before processing requests.'
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
return this.handler;
|
|
265
|
+
}
|
|
163
266
|
}
|
|
164
267
|
export {
|
|
165
268
|
ApprovalManager
|