@dexto/core 1.5.8 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -8
- package/dist/agent/DextoAgent.cjs +293 -154
- package/dist/agent/DextoAgent.d.ts +83 -56
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +290 -151
- package/dist/{context/compaction/provider.cjs → agent/agent-options.cjs} +2 -2
- package/dist/agent/agent-options.d.ts +53 -0
- package/dist/agent/agent-options.d.ts.map +1 -0
- package/dist/agent/agentCard.cjs +1 -1
- package/dist/agent/errors.cjs +2 -2
- package/dist/agent/errors.d.ts.map +1 -1
- package/dist/agent/index.cjs +1 -6
- package/dist/agent/index.d.ts +3 -2
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -7
- package/dist/{storage/blob/provider.cjs → agent/runtime-config.cjs} +2 -2
- package/dist/agent/runtime-config.d.ts +53 -0
- package/dist/agent/runtime-config.d.ts.map +1 -0
- package/dist/agent/schemas.cjs +2 -104
- package/dist/agent/schemas.d.ts +10 -9199
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/agent/schemas.js +1 -109
- package/dist/agent/state-manager.d.ts +5 -5
- package/dist/agent/state-manager.d.ts.map +1 -1
- package/dist/approval/error-codes.cjs +1 -1
- package/dist/approval/error-codes.d.ts +1 -1
- package/dist/approval/error-codes.d.ts.map +1 -1
- package/dist/approval/error-codes.js +1 -1
- package/dist/approval/errors.cjs +5 -5
- package/dist/approval/errors.d.ts +2 -2
- package/dist/approval/errors.d.ts.map +1 -1
- package/dist/approval/errors.js +5 -5
- package/dist/approval/index.cjs +8 -8
- package/dist/approval/index.d.ts +2 -2
- package/dist/approval/index.d.ts.map +1 -1
- package/dist/approval/index.js +8 -8
- package/dist/approval/manager.cjs +77 -57
- package/dist/approval/manager.d.ts +41 -43
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +75 -55
- package/dist/approval/schemas.cjs +26 -25
- package/dist/approval/schemas.d.ts +35 -15
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +22 -21
- package/dist/approval/types.cjs +1 -1
- package/dist/approval/types.d.ts +14 -14
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +1 -1
- package/dist/context/compaction/index.cjs +2 -23
- package/dist/context/compaction/index.d.ts +1 -7
- package/dist/context/compaction/index.d.ts.map +1 -1
- package/dist/context/compaction/index.js +1 -16
- package/dist/context/compaction/strategies/noop.cjs +19 -1
- package/dist/context/compaction/strategies/noop.d.ts +13 -3
- package/dist/context/compaction/strategies/noop.d.ts.map +1 -1
- package/dist/context/compaction/strategies/noop.js +19 -1
- package/dist/context/compaction/strategies/{reactive-overflow.cjs → reactive-overflow-compaction.cjs} +67 -64
- package/dist/context/compaction/strategies/{reactive-overflow.d.ts → reactive-overflow-compaction.d.ts} +19 -36
- package/dist/context/compaction/strategies/reactive-overflow-compaction.d.ts.map +1 -0
- package/dist/context/compaction/strategies/{reactive-overflow.js → reactive-overflow-compaction.js} +63 -60
- package/dist/context/compaction/types.d.ts +40 -8
- package/dist/context/compaction/types.d.ts.map +1 -1
- package/dist/context/manager.cjs +4 -2
- package/dist/context/manager.d.ts +4 -3
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +4 -2
- package/dist/context/types.d.ts +2 -0
- package/dist/context/types.d.ts.map +1 -1
- package/dist/context/utils.cjs +2 -2
- package/dist/context/utils.d.ts +14 -14
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/errors/result-bridge.d.ts +2 -2
- package/dist/errors/result-bridge.d.ts.map +1 -1
- package/dist/errors/types.cjs +1 -1
- package/dist/errors/types.d.ts +3 -3
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/errors/types.js +1 -1
- package/dist/events/index.cjs +11 -1
- package/dist/events/index.d.ts +43 -7
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +11 -1
- package/dist/{plugins → hooks}/builtins/content-policy.cjs +7 -6
- package/dist/hooks/builtins/content-policy.d.ts +24 -0
- package/dist/hooks/builtins/content-policy.d.ts.map +1 -0
- package/dist/{plugins → hooks}/builtins/content-policy.js +6 -5
- package/dist/{plugins → hooks}/builtins/response-sanitizer.cjs +3 -3
- package/dist/hooks/builtins/response-sanitizer.d.ts +22 -0
- package/dist/hooks/builtins/response-sanitizer.d.ts.map +1 -0
- package/dist/{plugins → hooks}/builtins/response-sanitizer.js +2 -2
- package/dist/hooks/error-codes.cjs +43 -0
- package/dist/hooks/error-codes.d.ts +34 -0
- package/dist/hooks/error-codes.d.ts.map +1 -0
- package/dist/hooks/error-codes.js +20 -0
- package/dist/{storage/cache/providers/memory.cjs → hooks/index.cjs} +15 -18
- package/dist/hooks/index.d.ts +14 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +11 -0
- package/dist/hooks/manager.cjs +354 -0
- package/dist/hooks/manager.d.ts +103 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +331 -0
- package/dist/{plugins → hooks}/types.d.ts +36 -34
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/index.browser.cjs +13 -12
- package/dist/index.browser.d.ts +5 -5
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +8 -7
- package/dist/index.cjs +5 -7
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/llm/errors.cjs +1 -1
- package/dist/llm/executor/stream-processor.cjs +131 -11
- package/dist/llm/executor/stream-processor.d.ts +7 -5
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +131 -11
- package/dist/llm/executor/turn-executor.cjs +49 -54
- package/dist/llm/executor/turn-executor.d.ts +7 -8
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +49 -54
- package/dist/llm/formatters/vercel.cjs +2 -2
- package/dist/llm/formatters/vercel.d.ts +2 -2
- package/dist/llm/formatters/vercel.d.ts.map +1 -1
- package/dist/llm/providers/local/schemas.d.ts +10 -10
- package/dist/llm/registry/auto-update.d.ts +2 -2
- package/dist/llm/registry/auto-update.d.ts.map +1 -1
- package/dist/llm/registry/index.d.ts +3 -3
- package/dist/llm/registry/index.d.ts.map +1 -1
- package/dist/llm/resolver.cjs +2 -2
- package/dist/llm/resolver.d.ts +4 -4
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/schemas.cjs +67 -104
- package/dist/llm/schemas.d.ts +6 -145
- package/dist/llm/schemas.d.ts.map +1 -1
- package/dist/llm/schemas.js +64 -101
- package/dist/llm/services/factory.cjs +2 -3
- package/dist/llm/services/factory.d.ts +3 -4
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +2 -3
- package/dist/llm/services/vercel.cjs +7 -14
- package/dist/llm/services/vercel.d.ts +6 -7
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +7 -14
- package/dist/llm/validation.cjs +1 -1
- package/dist/llm/validation.d.ts +2 -2
- package/dist/llm/validation.d.ts.map +1 -1
- package/dist/logger/browser.cjs +4 -4
- package/dist/logger/browser.d.ts +4 -4
- package/dist/logger/browser.d.ts.map +1 -1
- package/dist/logger/browser.js +3 -3
- package/dist/{context/compaction/providers/noop-provider.cjs → logger/default-logger-factory.cjs} +16 -22
- package/dist/logger/default-logger-factory.d.ts +301 -0
- package/dist/logger/default-logger-factory.d.ts.map +1 -0
- package/dist/logger/default-logger-factory.js +18 -0
- package/dist/logger/factory.d.ts +2 -2
- package/dist/logger/factory.d.ts.map +1 -1
- package/dist/logger/index.cjs +7 -2
- package/dist/logger/index.d.ts +5 -3
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +8 -2
- package/dist/logger/logger.cjs +4 -4
- package/dist/logger/logger.d.ts +4 -4
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.js +3 -3
- package/dist/logger/v2/dexto-logger.d.ts +3 -3
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
- package/dist/logger/v2/schemas.d.ts +12 -12
- package/dist/logger/v2/test-utils.d.ts +5 -5
- package/dist/logger/v2/test-utils.d.ts.map +1 -1
- package/dist/logger/v2/transport-factory.d.ts +3 -3
- package/dist/logger/v2/transport-factory.d.ts.map +1 -1
- package/dist/logger/v2/transports/console-transport.d.ts +2 -2
- package/dist/logger/v2/transports/console-transport.d.ts.map +1 -1
- package/dist/logger/v2/transports/file-transport.d.ts +2 -2
- package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
- package/dist/logger/v2/transports/silent-transport.d.ts +2 -2
- package/dist/logger/v2/transports/silent-transport.d.ts.map +1 -1
- package/dist/logger/v2/types.cjs +1 -1
- package/dist/logger/v2/types.d.ts +8 -8
- package/dist/logger/v2/types.d.ts.map +1 -1
- package/dist/logger/v2/types.js +1 -1
- package/dist/mcp/errors.cjs +2 -2
- package/dist/mcp/errors.d.ts.map +1 -1
- package/dist/mcp/manager.cjs +16 -11
- package/dist/mcp/manager.d.ts +16 -13
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +17 -12
- package/dist/mcp/mcp-client.cjs +25 -20
- package/dist/mcp/mcp-client.d.ts +5 -5
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +20 -15
- package/dist/mcp/resolver.cjs +1 -1
- package/dist/mcp/schemas.cjs +5 -5
- package/dist/mcp/schemas.d.ts +4 -4
- package/dist/mcp/schemas.js +2 -2
- package/dist/mcp/types.d.ts +7 -7
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/memory/manager.d.ts +2 -2
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/schemas.d.ts +2 -2
- package/dist/prompts/errors.cjs +3 -3
- package/dist/prompts/errors.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.d.ts +3 -3
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.cjs +15 -29
- package/dist/prompts/providers/config-prompt-provider.d.ts +3 -3
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +15 -29
- package/dist/prompts/providers/custom-prompt-provider.d.ts +2 -2
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/mcp-prompt-provider.d.ts +2 -2
- package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/schemas.d.ts +4 -4
- package/dist/resources/{internal-provider.cjs → agent-resources-provider.cjs} +16 -16
- package/dist/resources/{internal-provider.d.ts → agent-resources-provider.d.ts} +6 -6
- package/dist/resources/agent-resources-provider.d.ts.map +1 -0
- package/dist/resources/{internal-provider.js → agent-resources-provider.js} +13 -13
- package/dist/resources/errors.cjs +2 -2
- package/dist/resources/errors.d.ts.map +1 -1
- package/dist/resources/handlers/blob-handler.d.ts +2 -2
- package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
- package/dist/resources/handlers/factory.d.ts +3 -3
- package/dist/resources/handlers/factory.d.ts.map +1 -1
- package/dist/resources/handlers/filesystem-handler.d.ts +2 -2
- package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
- package/dist/resources/index.cjs +7 -9
- package/dist/resources/index.d.ts +3 -3
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +5 -10
- package/dist/resources/manager.cjs +77 -74
- package/dist/resources/manager.d.ts +16 -7
- package/dist/resources/manager.d.ts.map +1 -1
- package/dist/resources/manager.js +77 -74
- package/dist/resources/schemas.cjs +6 -26
- package/dist/resources/schemas.d.ts +8 -100
- package/dist/resources/schemas.d.ts.map +1 -1
- package/dist/resources/schemas.js +4 -23
- package/dist/search/search-service.d.ts +2 -2
- package/dist/search/search-service.d.ts.map +1 -1
- package/dist/session/chat-session.cjs +15 -25
- package/dist/session/chat-session.d.ts +7 -5
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +16 -26
- package/dist/session/errors.cjs +2 -2
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/history/database.cjs +1 -1
- package/dist/session/history/database.d.ts +4 -4
- package/dist/session/history/database.d.ts.map +1 -1
- package/dist/session/history/factory.d.ts +3 -3
- package/dist/session/history/factory.d.ts.map +1 -1
- package/dist/session/history/memory.d.ts +4 -4
- package/dist/session/history/memory.d.ts.map +1 -1
- package/dist/session/history/types.d.ts +2 -2
- package/dist/session/history/types.d.ts.map +1 -1
- package/dist/session/index.cjs +3 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +2 -0
- package/dist/session/message-queue.d.ts +2 -2
- package/dist/session/message-queue.d.ts.map +1 -1
- package/dist/session/session-manager.cjs +67 -9
- package/dist/session/session-manager.d.ts +46 -7
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +67 -9
- package/dist/session/title-generator.cjs +2 -2
- package/dist/session/title-generator.d.ts +2 -2
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/storage/blob/index.cjs +0 -40
- package/dist/storage/blob/index.d.ts +2 -44
- package/dist/storage/blob/index.d.ts.map +1 -1
- package/dist/storage/blob/index.js +0 -30
- package/dist/storage/cache/index.cjs +0 -37
- package/dist/storage/cache/index.d.ts +0 -42
- package/dist/storage/cache/index.d.ts.map +1 -1
- package/dist/storage/cache/index.js +0 -28
- package/dist/storage/database/index.cjs +0 -42
- package/dist/storage/database/index.d.ts +0 -43
- package/dist/storage/database/index.d.ts.map +1 -1
- package/dist/storage/database/index.js +0 -37
- package/dist/storage/error-codes.cjs +1 -6
- package/dist/storage/error-codes.d.ts +2 -7
- package/dist/storage/error-codes.d.ts.map +1 -1
- package/dist/storage/error-codes.js +1 -6
- package/dist/storage/errors.cjs +18 -82
- package/dist/storage/errors.d.ts +4 -24
- package/dist/storage/errors.d.ts.map +1 -1
- package/dist/storage/errors.js +16 -80
- package/dist/storage/index.cjs +8 -69
- package/dist/storage/index.d.ts +11 -66
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +6 -50
- package/dist/storage/storage-manager.cjs +9 -25
- package/dist/storage/storage-manager.d.ts +11 -15
- package/dist/storage/storage-manager.d.ts.map +1 -1
- package/dist/storage/storage-manager.js +8 -23
- package/dist/storage/types.d.ts +0 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.d.ts +4 -4
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/errors.cjs +2 -2
- package/dist/systemPrompt/errors.d.ts.map +1 -1
- package/dist/systemPrompt/manager.cjs +1 -5
- package/dist/systemPrompt/manager.d.ts +2 -3
- package/dist/systemPrompt/manager.d.ts.map +1 -1
- package/dist/systemPrompt/manager.js +1 -5
- package/dist/telemetry/index.cjs +3 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +2 -0
- package/dist/telemetry/utils.d.ts +4 -4
- package/dist/telemetry/utils.d.ts.map +1 -1
- package/dist/test-utils/in-memory-storage.cjs +288 -0
- package/dist/test-utils/in-memory-storage.js +252 -0
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +3 -3
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts +2 -2
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +4 -4
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +1 -1
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +2 -2
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +1 -1
- package/dist/tools/{internal-tools/constants.cjs → define-tool.cjs} +8 -13
- package/dist/tools/define-tool.d.ts +11 -0
- package/dist/tools/define-tool.d.ts.map +1 -0
- package/dist/tools/define-tool.js +7 -0
- package/dist/tools/error-codes.cjs +2 -2
- package/dist/tools/error-codes.d.ts +2 -2
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +2 -2
- package/dist/tools/errors.cjs +11 -23
- package/dist/tools/errors.d.ts +4 -10
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +9 -21
- package/dist/tools/index.cjs +3 -8
- package/dist/tools/index.d.ts +2 -4
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -7
- package/dist/{storage/blob/providers/index.cjs → tools/pattern-utils.cjs} +11 -9
- package/dist/tools/pattern-utils.d.ts +20 -0
- package/dist/tools/pattern-utils.d.ts.map +1 -0
- package/dist/tools/pattern-utils.js +10 -0
- package/dist/tools/schemas.cjs +14 -40
- package/dist/tools/schemas.d.ts +6 -50
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +11 -32
- package/dist/tools/tool-call-metadata.cjs +3 -3
- package/dist/tools/tool-call-metadata.d.ts +1 -1
- package/dist/tools/tool-call-metadata.d.ts.map +1 -1
- package/dist/tools/tool-call-metadata.js +3 -3
- package/dist/tools/tool-manager.cjs +376 -327
- package/dist/tools/tool-manager.d.ts +63 -80
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +376 -331
- package/dist/tools/types.d.ts +112 -13
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/error-conversion.d.ts +2 -2
- package/dist/utils/error-conversion.d.ts.map +1 -1
- package/dist/utils/path.d.ts +2 -2
- package/dist/utils/path.d.ts.map +1 -1
- package/dist/utils/result.cjs +1 -1
- package/dist/utils/result.d.ts.map +1 -1
- package/dist/utils/schema.cjs +9 -5
- package/dist/utils/schema.d.ts +4 -2
- package/dist/utils/schema.d.ts.map +1 -1
- package/dist/utils/schema.js +9 -5
- package/dist/utils/service-initializer.cjs +51 -56
- package/dist/utils/service-initializer.d.ts +17 -14
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +51 -56
- package/dist/{storage/cache/providers/index.cjs → workspace/error-codes.cjs} +8 -9
- package/dist/workspace/error-codes.d.ts +5 -0
- package/dist/workspace/error-codes.d.ts.map +1 -0
- package/dist/workspace/error-codes.js +7 -0
- package/dist/{storage/blob/factory.cjs → workspace/errors.cjs} +20 -14
- package/dist/workspace/errors.d.ts +5 -0
- package/dist/workspace/errors.d.ts.map +1 -0
- package/dist/workspace/errors.js +21 -0
- package/dist/{image → workspace}/index.cjs +12 -10
- package/dist/workspace/index.d.ts +5 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +9 -0
- package/dist/workspace/manager.cjs +113 -0
- package/dist/workspace/manager.d.ts +18 -0
- package/dist/workspace/manager.d.ts.map +1 -0
- package/dist/workspace/manager.js +90 -0
- package/dist/workspace/types.d.ts +14 -0
- package/dist/workspace/types.d.ts.map +1 -0
- package/package.json +2 -2
- package/dist/context/compaction/factory.cjs +0 -57
- package/dist/context/compaction/factory.d.ts +0 -17
- package/dist/context/compaction/factory.d.ts.map +0 -1
- package/dist/context/compaction/factory.js +0 -34
- package/dist/context/compaction/provider.d.ts +0 -48
- package/dist/context/compaction/provider.d.ts.map +0 -1
- package/dist/context/compaction/providers/noop-provider.d.ts +0 -24
- package/dist/context/compaction/providers/noop-provider.d.ts.map +0 -1
- package/dist/context/compaction/providers/noop-provider.js +0 -24
- package/dist/context/compaction/providers/reactive-overflow-provider.cjs +0 -76
- package/dist/context/compaction/providers/reactive-overflow-provider.d.ts +0 -51
- package/dist/context/compaction/providers/reactive-overflow-provider.d.ts.map +0 -1
- package/dist/context/compaction/providers/reactive-overflow-provider.js +0 -52
- package/dist/context/compaction/registry.cjs +0 -39
- package/dist/context/compaction/registry.d.ts +0 -19
- package/dist/context/compaction/registry.d.ts.map +0 -1
- package/dist/context/compaction/registry.js +0 -16
- package/dist/context/compaction/schemas.cjs +0 -58
- package/dist/context/compaction/schemas.d.ts +0 -69
- package/dist/context/compaction/schemas.d.ts.map +0 -1
- package/dist/context/compaction/schemas.js +0 -34
- package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +0 -1
- package/dist/image/define-image.cjs +0 -146
- package/dist/image/define-image.d.ts +0 -71
- package/dist/image/define-image.d.ts.map +0 -1
- package/dist/image/define-image.js +0 -121
- package/dist/image/index.d.ts +0 -53
- package/dist/image/index.d.ts.map +0 -1
- package/dist/image/index.js +0 -7
- package/dist/image/types.d.ts +0 -246
- package/dist/image/types.d.ts.map +0 -1
- package/dist/llm/services/test-utils.integration.cjs +0 -237
- package/dist/llm/services/test-utils.integration.d.ts +0 -48
- package/dist/llm/services/test-utils.integration.d.ts.map +0 -1
- package/dist/llm/services/test-utils.integration.js +0 -214
- package/dist/plugins/builtins/content-policy.d.ts +0 -26
- package/dist/plugins/builtins/content-policy.d.ts.map +0 -1
- package/dist/plugins/builtins/response-sanitizer.d.ts +0 -25
- package/dist/plugins/builtins/response-sanitizer.d.ts.map +0 -1
- package/dist/plugins/error-codes.cjs +0 -43
- package/dist/plugins/error-codes.d.ts +0 -34
- package/dist/plugins/error-codes.d.ts.map +0 -1
- package/dist/plugins/error-codes.js +0 -20
- package/dist/plugins/index.cjs +0 -61
- package/dist/plugins/index.d.ts +0 -21
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -30
- package/dist/plugins/loader.cjs +0 -171
- package/dist/plugins/loader.d.ts +0 -30
- package/dist/plugins/loader.d.ts.map +0 -1
- package/dist/plugins/loader.js +0 -145
- package/dist/plugins/manager.cjs +0 -473
- package/dist/plugins/manager.d.ts +0 -106
- package/dist/plugins/manager.d.ts.map +0 -1
- package/dist/plugins/manager.js +0 -450
- package/dist/plugins/registrations/builtins.cjs +0 -51
- package/dist/plugins/registrations/builtins.d.ts +0 -17
- package/dist/plugins/registrations/builtins.d.ts.map +0 -1
- package/dist/plugins/registrations/builtins.js +0 -28
- package/dist/plugins/registry.cjs +0 -63
- package/dist/plugins/registry.d.ts +0 -101
- package/dist/plugins/registry.d.ts.map +0 -1
- package/dist/plugins/registry.js +0 -39
- package/dist/plugins/schemas.cjs +0 -73
- package/dist/plugins/schemas.d.ts +0 -195
- package/dist/plugins/schemas.d.ts.map +0 -1
- package/dist/plugins/schemas.js +0 -47
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/providers/base-registry.cjs +0 -147
- package/dist/providers/base-registry.d.ts +0 -147
- package/dist/providers/base-registry.d.ts.map +0 -1
- package/dist/providers/base-registry.js +0 -123
- package/dist/providers/discovery.cjs +0 -109
- package/dist/providers/discovery.d.ts +0 -96
- package/dist/providers/discovery.d.ts.map +0 -1
- package/dist/providers/discovery.js +0 -84
- package/dist/providers/index.cjs +0 -24
- package/dist/providers/index.d.ts +0 -32
- package/dist/providers/index.d.ts.map +0 -1
- package/dist/providers/index.js +0 -2
- package/dist/resources/internal-provider.d.ts.map +0 -1
- package/dist/storage/blob/factory.d.ts +0 -37
- package/dist/storage/blob/factory.d.ts.map +0 -1
- package/dist/storage/blob/factory.js +0 -15
- package/dist/storage/blob/local-blob-store.cjs +0 -496
- package/dist/storage/blob/local-blob-store.d.ts +0 -58
- package/dist/storage/blob/local-blob-store.d.ts.map +0 -1
- package/dist/storage/blob/local-blob-store.js +0 -463
- package/dist/storage/blob/memory-blob-store.cjs +0 -326
- package/dist/storage/blob/memory-blob-store.d.ts +0 -66
- package/dist/storage/blob/memory-blob-store.d.ts.map +0 -1
- package/dist/storage/blob/memory-blob-store.js +0 -303
- package/dist/storage/blob/provider.d.ts +0 -50
- package/dist/storage/blob/provider.d.ts.map +0 -1
- package/dist/storage/blob/providers/index.d.ts +0 -8
- package/dist/storage/blob/providers/index.d.ts.map +0 -1
- package/dist/storage/blob/providers/index.js +0 -7
- package/dist/storage/blob/providers/local.cjs +0 -39
- package/dist/storage/blob/providers/local.d.ts +0 -17
- package/dist/storage/blob/providers/local.d.ts.map +0 -1
- package/dist/storage/blob/providers/local.js +0 -16
- package/dist/storage/blob/providers/memory.cjs +0 -39
- package/dist/storage/blob/providers/memory.d.ts +0 -17
- package/dist/storage/blob/providers/memory.d.ts.map +0 -1
- package/dist/storage/blob/providers/memory.js +0 -16
- package/dist/storage/blob/registry.cjs +0 -50
- package/dist/storage/blob/registry.d.ts +0 -42
- package/dist/storage/blob/registry.d.ts.map +0 -1
- package/dist/storage/blob/registry.js +0 -26
- package/dist/storage/blob/schemas.cjs +0 -52
- package/dist/storage/blob/schemas.d.ts +0 -85
- package/dist/storage/blob/schemas.d.ts.map +0 -1
- package/dist/storage/blob/schemas.js +0 -26
- package/dist/storage/cache/factory.cjs +0 -38
- package/dist/storage/cache/factory.d.ts +0 -37
- package/dist/storage/cache/factory.d.ts.map +0 -1
- package/dist/storage/cache/factory.js +0 -15
- package/dist/storage/cache/memory-cache-store.cjs +0 -107
- package/dist/storage/cache/memory-cache-store.d.ts +0 -26
- package/dist/storage/cache/memory-cache-store.d.ts.map +0 -1
- package/dist/storage/cache/memory-cache-store.js +0 -84
- package/dist/storage/cache/provider.cjs +0 -16
- package/dist/storage/cache/provider.d.ts +0 -56
- package/dist/storage/cache/provider.d.ts.map +0 -1
- package/dist/storage/cache/provider.js +0 -0
- package/dist/storage/cache/providers/index.d.ts +0 -8
- package/dist/storage/cache/providers/index.d.ts.map +0 -1
- package/dist/storage/cache/providers/index.js +0 -7
- package/dist/storage/cache/providers/memory.d.ts +0 -17
- package/dist/storage/cache/providers/memory.d.ts.map +0 -1
- package/dist/storage/cache/providers/memory.js +0 -17
- package/dist/storage/cache/providers/redis.cjs +0 -66
- package/dist/storage/cache/providers/redis.d.ts +0 -20
- package/dist/storage/cache/providers/redis.d.ts.map +0 -1
- package/dist/storage/cache/providers/redis.js +0 -33
- package/dist/storage/cache/redis-store.cjs +0 -173
- package/dist/storage/cache/redis-store.d.ts +0 -32
- package/dist/storage/cache/redis-store.d.ts.map +0 -1
- package/dist/storage/cache/redis-store.js +0 -150
- package/dist/storage/cache/registry.cjs +0 -50
- package/dist/storage/cache/registry.d.ts +0 -42
- package/dist/storage/cache/registry.d.ts.map +0 -1
- package/dist/storage/cache/registry.js +0 -26
- package/dist/storage/cache/schemas.cjs +0 -81
- package/dist/storage/cache/schemas.d.ts +0 -150
- package/dist/storage/cache/schemas.d.ts.map +0 -1
- package/dist/storage/cache/schemas.js +0 -55
- package/dist/storage/database/factory.cjs +0 -38
- package/dist/storage/database/factory.d.ts +0 -39
- package/dist/storage/database/factory.d.ts.map +0 -1
- package/dist/storage/database/factory.js +0 -15
- package/dist/storage/database/memory-database-store.cjs +0 -122
- package/dist/storage/database/memory-database-store.d.ts +0 -29
- package/dist/storage/database/memory-database-store.d.ts.map +0 -1
- package/dist/storage/database/memory-database-store.js +0 -99
- package/dist/storage/database/postgres-store.cjs +0 -342
- package/dist/storage/database/postgres-store.d.ts +0 -55
- package/dist/storage/database/postgres-store.d.ts.map +0 -1
- package/dist/storage/database/postgres-store.js +0 -319
- package/dist/storage/database/provider.cjs +0 -16
- package/dist/storage/database/provider.d.ts +0 -56
- package/dist/storage/database/provider.d.ts.map +0 -1
- package/dist/storage/database/provider.js +0 -0
- package/dist/storage/database/providers/index.cjs +0 -34
- package/dist/storage/database/providers/index.d.ts +0 -9
- package/dist/storage/database/providers/index.d.ts.map +0 -1
- package/dist/storage/database/providers/index.js +0 -9
- package/dist/storage/database/providers/memory.cjs +0 -40
- package/dist/storage/database/providers/memory.d.ts +0 -16
- package/dist/storage/database/providers/memory.d.ts.map +0 -1
- package/dist/storage/database/providers/memory.js +0 -17
- package/dist/storage/database/providers/postgres.cjs +0 -62
- package/dist/storage/database/providers/postgres.d.ts +0 -19
- package/dist/storage/database/providers/postgres.d.ts.map +0 -1
- package/dist/storage/database/providers/postgres.js +0 -29
- package/dist/storage/database/providers/sqlite.cjs +0 -66
- package/dist/storage/database/providers/sqlite.d.ts +0 -20
- package/dist/storage/database/providers/sqlite.d.ts.map +0 -1
- package/dist/storage/database/providers/sqlite.js +0 -33
- package/dist/storage/database/registry.cjs +0 -50
- package/dist/storage/database/registry.d.ts +0 -42
- package/dist/storage/database/registry.d.ts.map +0 -1
- package/dist/storage/database/registry.js +0 -26
- package/dist/storage/database/schemas.cjs +0 -97
- package/dist/storage/database/schemas.d.ts +0 -226
- package/dist/storage/database/schemas.d.ts.map +0 -1
- package/dist/storage/database/schemas.js +0 -70
- package/dist/storage/database/sqlite-store.cjs +0 -270
- package/dist/storage/database/sqlite-store.d.ts +0 -33
- package/dist/storage/database/sqlite-store.d.ts.map +0 -1
- package/dist/storage/database/sqlite-store.js +0 -237
- package/dist/storage/schemas.cjs +0 -57
- package/dist/storage/schemas.d.ts +0 -347
- package/dist/storage/schemas.d.ts.map +0 -1
- package/dist/storage/schemas.js +0 -37
- package/dist/tools/bash-pattern-utils.cjs +0 -91
- package/dist/tools/bash-pattern-utils.d.ts +0 -58
- package/dist/tools/bash-pattern-utils.d.ts.map +0 -1
- package/dist/tools/bash-pattern-utils.js +0 -64
- package/dist/tools/custom-tool-registry.cjs +0 -64
- package/dist/tools/custom-tool-registry.d.ts +0 -126
- package/dist/tools/custom-tool-registry.d.ts.map +0 -1
- package/dist/tools/custom-tool-registry.js +0 -40
- package/dist/tools/custom-tool-schema-registry.cjs +0 -164
- package/dist/tools/custom-tool-schema-registry.d.ts +0 -86
- package/dist/tools/custom-tool-schema-registry.d.ts.map +0 -1
- package/dist/tools/custom-tool-schema-registry.js +0 -140
- package/dist/tools/internal-tools/constants.d.ts +0 -12
- package/dist/tools/internal-tools/constants.d.ts.map +0 -1
- package/dist/tools/internal-tools/constants.js +0 -12
- package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +0 -57
- package/dist/tools/internal-tools/implementations/ask-user-tool.d.ts +0 -18
- package/dist/tools/internal-tools/implementations/ask-user-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/ask-user-tool.js +0 -34
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.cjs +0 -192
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.d.ts +0 -33
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +0 -169
- package/dist/tools/internal-tools/implementations/get-resource-tool.cjs +0 -113
- package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts +0 -30
- package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/get-resource-tool.js +0 -90
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.cjs +0 -140
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts +0 -24
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.js +0 -117
- package/dist/tools/internal-tools/implementations/list-resources-tool.cjs +0 -91
- package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts +0 -24
- package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/list-resources-tool.js +0 -68
- package/dist/tools/internal-tools/implementations/search-history-tool.cjs +0 -61
- package/dist/tools/internal-tools/implementations/search-history-tool.d.ts +0 -7
- package/dist/tools/internal-tools/implementations/search-history-tool.d.ts.map +0 -1
- package/dist/tools/internal-tools/implementations/search-history-tool.js +0 -38
- package/dist/tools/internal-tools/index.cjs +0 -26
- package/dist/tools/internal-tools/index.d.ts +0 -4
- package/dist/tools/internal-tools/index.d.ts.map +0 -1
- package/dist/tools/internal-tools/index.js +0 -3
- package/dist/tools/internal-tools/provider.cjs +0 -324
- package/dist/tools/internal-tools/provider.d.ts +0 -116
- package/dist/tools/internal-tools/provider.d.ts.map +0 -1
- package/dist/tools/internal-tools/provider.js +0 -301
- package/dist/tools/internal-tools/registry.cjs +0 -71
- package/dist/tools/internal-tools/registry.d.ts +0 -91
- package/dist/tools/internal-tools/registry.d.ts.map +0 -1
- package/dist/tools/internal-tools/registry.js +0 -47
- /package/dist/{context/compaction/provider.js → agent/agent-options.js} +0 -0
- /package/dist/{image/types.js → agent/runtime-config.js} +0 -0
- /package/dist/{image → hooks}/types.cjs +0 -0
- /package/dist/{plugins → hooks}/types.js +0 -0
- /package/dist/{plugins → workspace}/types.cjs +0 -0
- /package/dist/{storage/blob/provider.js → workspace/types.js} +0 -0
|
@@ -66,42 +66,41 @@ __export(tool_manager_exports, {
|
|
|
66
66
|
ToolManager: () => ToolManager
|
|
67
67
|
});
|
|
68
68
|
module.exports = __toCommonJS(tool_manager_exports);
|
|
69
|
-
var import_provider = require("./internal-tools/provider.js");
|
|
70
69
|
var import_errors = require("./errors.js");
|
|
71
70
|
var import_error_codes = require("./error-codes.js");
|
|
72
71
|
var import_errors2 = require("../errors/index.js");
|
|
73
72
|
var import_types2 = require("../logger/v2/types.js");
|
|
73
|
+
var import_schema = require("../utils/schema.js");
|
|
74
74
|
var import_types3 = require("../approval/types.js");
|
|
75
75
|
var import_decorators = require("../telemetry/decorators.js");
|
|
76
76
|
var import_tool_call_metadata = require("./tool-call-metadata.js");
|
|
77
|
-
var import_bash_pattern_utils = require("./bash-pattern-utils.js");
|
|
78
77
|
var import_env = require("../utils/env.js");
|
|
79
78
|
var _ToolManager_decorators, _init;
|
|
80
79
|
_ToolManager_decorators = [(0, import_decorators.InstrumentClass)({
|
|
81
80
|
prefix: "tool",
|
|
82
|
-
excludeMethods: [
|
|
83
|
-
"setPluginManager",
|
|
84
|
-
"setStateManager",
|
|
85
|
-
"getApprovalManager",
|
|
86
|
-
"getAllowedToolsProvider"
|
|
87
|
-
]
|
|
81
|
+
excludeMethods: ["setHookSupport", "getApprovalManager", "getAllowedToolsProvider"]
|
|
88
82
|
})];
|
|
89
83
|
let _ToolManager = class _ToolManager {
|
|
90
84
|
mcpManager;
|
|
91
|
-
|
|
85
|
+
agentTools = /* @__PURE__ */ new Map();
|
|
92
86
|
approvalManager;
|
|
93
87
|
allowedToolsProvider;
|
|
94
88
|
approvalMode;
|
|
95
89
|
agentEventBus;
|
|
96
90
|
toolPolicies;
|
|
97
|
-
|
|
98
|
-
|
|
91
|
+
toolExecutionContextFactory;
|
|
92
|
+
// Hook support - set after construction to avoid circular dependencies
|
|
93
|
+
hookManager;
|
|
99
94
|
sessionManager;
|
|
100
95
|
stateManager;
|
|
101
|
-
|
|
96
|
+
workspaceManager;
|
|
97
|
+
currentWorkspace;
|
|
98
|
+
workspaceListenerAttached = false;
|
|
99
|
+
workspaceListenerAbort = new AbortController();
|
|
100
|
+
// Tool naming:
|
|
101
|
+
// - MCP tools are prefixed with `mcp--` for disambiguation.
|
|
102
|
+
// - Local tools use their `Tool.id` as-is (no internal/custom prefixing).
|
|
102
103
|
static MCP_TOOL_PREFIX = "mcp--";
|
|
103
|
-
static INTERNAL_TOOL_PREFIX = "internal--";
|
|
104
|
-
static CUSTOM_TOOL_PREFIX = "custom--";
|
|
105
104
|
// Tool caching for performance
|
|
106
105
|
toolsCache = {};
|
|
107
106
|
cacheValid = false;
|
|
@@ -114,7 +113,29 @@ let _ToolManager = class _ToolManager {
|
|
|
114
113
|
sessionUserAutoApproveTools = /* @__PURE__ */ new Map();
|
|
115
114
|
sessionDisabledTools = /* @__PURE__ */ new Map();
|
|
116
115
|
globalDisabledTools = [];
|
|
117
|
-
|
|
116
|
+
cleanupHandlers = /* @__PURE__ */ new Set();
|
|
117
|
+
cleanupStarted = false;
|
|
118
|
+
resolveLocalToolIdOrAlias(name) {
|
|
119
|
+
const direct = this.agentTools.get(name);
|
|
120
|
+
if (direct) return direct.id;
|
|
121
|
+
const lower = name.toLowerCase();
|
|
122
|
+
for (const tool of this.agentTools.values()) {
|
|
123
|
+
if (tool.id.toLowerCase() === lower) {
|
|
124
|
+
return tool.id;
|
|
125
|
+
}
|
|
126
|
+
if (tool.aliases?.some((alias) => alias.toLowerCase() === lower)) {
|
|
127
|
+
return tool.id;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
normalizeToolPolicyPattern(pattern) {
|
|
133
|
+
if (pattern.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
134
|
+
return pattern;
|
|
135
|
+
}
|
|
136
|
+
return this.resolveLocalToolIdOrAlias(pattern) ?? pattern;
|
|
137
|
+
}
|
|
138
|
+
constructor(mcpManager, approvalManager, allowedToolsProvider, approvalMode, agentEventBus, toolPolicies, tools, logger) {
|
|
118
139
|
this.mcpManager = mcpManager;
|
|
119
140
|
this.approvalManager = approvalManager;
|
|
120
141
|
this.allowedToolsProvider = allowedToolsProvider;
|
|
@@ -122,18 +143,12 @@ let _ToolManager = class _ToolManager {
|
|
|
122
143
|
this.agentEventBus = agentEventBus;
|
|
123
144
|
this.toolPolicies = toolPolicies;
|
|
124
145
|
this.logger = logger.createChild(import_types2.DextoLogComponent.TOOLS);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
};
|
|
130
|
-
this.internalToolsProvider = new import_provider.InternalToolsProvider(
|
|
131
|
-
internalToolsServices,
|
|
132
|
-
options.internalToolsConfig || [],
|
|
133
|
-
options.customToolsConfig || [],
|
|
134
|
-
this.logger
|
|
146
|
+
this.setTools(tools);
|
|
147
|
+
this.toolExecutionContextFactory = () => {
|
|
148
|
+
throw import_errors.ToolError.configInvalid(
|
|
149
|
+
"ToolExecutionContextFactory not configured. DextoAgent.start() must configure tool execution context before tools can run."
|
|
135
150
|
);
|
|
136
|
-
}
|
|
151
|
+
};
|
|
137
152
|
this.setupNotificationListeners();
|
|
138
153
|
this.logger.debug("ToolManager initialized");
|
|
139
154
|
}
|
|
@@ -141,50 +156,78 @@ let _ToolManager = class _ToolManager {
|
|
|
141
156
|
* Initialize the ToolManager and its components
|
|
142
157
|
*/
|
|
143
158
|
async initialize() {
|
|
144
|
-
if (this.internalToolsProvider) {
|
|
145
|
-
await this.internalToolsProvider.initialize();
|
|
146
|
-
}
|
|
147
159
|
this.logger.debug("ToolManager initialization complete");
|
|
148
160
|
}
|
|
161
|
+
setTools(tools) {
|
|
162
|
+
this.agentTools.clear();
|
|
163
|
+
for (const tool of tools) {
|
|
164
|
+
this.agentTools.set(tool.id, tool);
|
|
165
|
+
}
|
|
166
|
+
this.invalidateCache();
|
|
167
|
+
}
|
|
168
|
+
setToolExecutionContextFactory(factory) {
|
|
169
|
+
this.toolExecutionContextFactory = factory;
|
|
170
|
+
}
|
|
171
|
+
registerCleanup(handler) {
|
|
172
|
+
this.cleanupHandlers.add(handler);
|
|
173
|
+
}
|
|
174
|
+
async cleanup() {
|
|
175
|
+
if (this.cleanupStarted) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
this.cleanupStarted = true;
|
|
179
|
+
for (const handler of this.cleanupHandlers) {
|
|
180
|
+
try {
|
|
181
|
+
await handler();
|
|
182
|
+
} catch (error) {
|
|
183
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
184
|
+
this.logger.warn(`ToolManager cleanup handler failed: ${err.message}`, {
|
|
185
|
+
color: "yellow"
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
149
190
|
/**
|
|
150
|
-
* Set
|
|
191
|
+
* Set hook support services (called after construction to avoid circular dependencies)
|
|
151
192
|
*/
|
|
152
|
-
|
|
153
|
-
this.
|
|
193
|
+
setHookSupport(hookManager, sessionManager, stateManager) {
|
|
194
|
+
this.hookManager = hookManager;
|
|
154
195
|
this.sessionManager = sessionManager;
|
|
155
196
|
this.stateManager = stateManager;
|
|
156
|
-
this.logger.debug("
|
|
197
|
+
this.logger.debug("Hook support configured for ToolManager");
|
|
157
198
|
}
|
|
158
199
|
/**
|
|
159
|
-
* Set
|
|
160
|
-
* Must be called before initialize() if custom tools are configured
|
|
200
|
+
* Set workspace manager for tool execution context propagation.
|
|
161
201
|
*/
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
202
|
+
setWorkspaceManager(workspaceManager) {
|
|
203
|
+
this.workspaceManager = workspaceManager;
|
|
204
|
+
void this.refreshWorkspace();
|
|
205
|
+
if (!this.workspaceListenerAttached) {
|
|
206
|
+
this.workspaceListenerAttached = true;
|
|
207
|
+
this.agentEventBus.on(
|
|
208
|
+
"workspace:changed",
|
|
209
|
+
(payload) => {
|
|
210
|
+
this.currentWorkspace = payload.workspace ?? void 0;
|
|
211
|
+
},
|
|
212
|
+
{ signal: this.workspaceListenerAbort.signal }
|
|
213
|
+
);
|
|
214
|
+
this.registerCleanup(() => {
|
|
215
|
+
if (!this.workspaceListenerAbort.signal.aborted) {
|
|
216
|
+
this.workspaceListenerAbort.abort();
|
|
217
|
+
}
|
|
218
|
+
});
|
|
166
219
|
}
|
|
220
|
+
this.logger.debug("WorkspaceManager reference configured for ToolManager");
|
|
167
221
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
*/
|
|
172
|
-
setPromptManager(promptManager) {
|
|
173
|
-
if (this.internalToolsProvider) {
|
|
174
|
-
this.internalToolsProvider.setPromptManager(promptManager);
|
|
175
|
-
this.logger.debug("PromptManager reference configured for invoke_skill tool");
|
|
222
|
+
async refreshWorkspace() {
|
|
223
|
+
if (!this.workspaceManager) {
|
|
224
|
+
return;
|
|
176
225
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
* Called by agent-spawner custom tool provider after RuntimeService is created.
|
|
181
|
-
* This enables invoke_skill to fork execution to an isolated subagent.
|
|
182
|
-
*/
|
|
183
|
-
setTaskForker(taskForker) {
|
|
184
|
-
if (this.internalToolsProvider) {
|
|
185
|
-
this.internalToolsProvider.setTaskForker(taskForker);
|
|
226
|
+
try {
|
|
227
|
+
this.currentWorkspace = await this.workspaceManager.getWorkspace();
|
|
228
|
+
} catch (error) {
|
|
186
229
|
this.logger.debug(
|
|
187
|
-
|
|
230
|
+
`Failed to refresh workspace context: ${error instanceof Error ? error.message : String(error)}`
|
|
188
231
|
);
|
|
189
232
|
}
|
|
190
233
|
}
|
|
@@ -195,18 +238,21 @@ let _ToolManager = class _ToolManager {
|
|
|
195
238
|
* This is ADDITIVE - other tools are NOT blocked, they just go through normal approval flow.
|
|
196
239
|
*
|
|
197
240
|
* @param sessionId The session ID
|
|
198
|
-
* @param autoApproveTools Array of tool names to auto-approve (e.g., ['
|
|
241
|
+
* @param autoApproveTools Array of tool names to auto-approve (e.g., ['bash_exec', 'mcp--read_file'])
|
|
199
242
|
*/
|
|
200
243
|
setSessionAutoApproveTools(sessionId, autoApproveTools) {
|
|
201
244
|
if (autoApproveTools.length === 0) {
|
|
202
245
|
this.clearSessionAutoApproveTools(sessionId);
|
|
203
246
|
return;
|
|
204
247
|
}
|
|
205
|
-
|
|
248
|
+
const normalized = autoApproveTools.map(
|
|
249
|
+
(pattern) => this.normalizeToolPolicyPattern(pattern)
|
|
250
|
+
);
|
|
251
|
+
this.sessionAutoApproveTools.set(sessionId, normalized);
|
|
206
252
|
this.logger.info(
|
|
207
253
|
`Session auto-approve tools set for '${sessionId}': ${autoApproveTools.length} tools`
|
|
208
254
|
);
|
|
209
|
-
this.logger.debug(`Auto-approve tools: ${
|
|
255
|
+
this.logger.debug(`Auto-approve tools: ${normalized.join(", ")}`);
|
|
210
256
|
}
|
|
211
257
|
/**
|
|
212
258
|
* Set session-level auto-approve tools chosen by the user.
|
|
@@ -216,11 +262,14 @@ let _ToolManager = class _ToolManager {
|
|
|
216
262
|
this.clearSessionUserAutoApproveTools(sessionId);
|
|
217
263
|
return;
|
|
218
264
|
}
|
|
219
|
-
|
|
265
|
+
const normalized = autoApproveTools.map(
|
|
266
|
+
(pattern) => this.normalizeToolPolicyPattern(pattern)
|
|
267
|
+
);
|
|
268
|
+
this.sessionUserAutoApproveTools.set(sessionId, normalized);
|
|
220
269
|
this.logger.info(
|
|
221
270
|
`Session user auto-approve tools set for '${sessionId}': ${autoApproveTools.length} tools`
|
|
222
271
|
);
|
|
223
|
-
this.logger.debug(`User auto-approve tools: ${
|
|
272
|
+
this.logger.debug(`User auto-approve tools: ${normalized.join(", ")}`);
|
|
224
273
|
}
|
|
225
274
|
/**
|
|
226
275
|
* Clear session-level auto-approve tools chosen by the user.
|
|
@@ -397,39 +446,44 @@ let _ToolManager = class _ToolManager {
|
|
|
397
446
|
}
|
|
398
447
|
});
|
|
399
448
|
}
|
|
400
|
-
// ====================
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
449
|
+
// ==================== Pattern Approval Helpers ====================
|
|
450
|
+
getToolPatternKey(toolName, args) {
|
|
451
|
+
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
const tool = this.agentTools.get(toolName);
|
|
455
|
+
if (!tool?.getApprovalPatternKey) {
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
try {
|
|
459
|
+
return tool.getApprovalPatternKey(args);
|
|
460
|
+
} catch (error) {
|
|
461
|
+
this.logger.debug(
|
|
462
|
+
`Pattern key generation failed for '${toolName}': ${error instanceof Error ? error.message : String(error)}`
|
|
463
|
+
);
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
406
466
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
*
|
|
411
|
-
* Returns approval info if covered, or pattern suggestions if not.
|
|
412
|
-
*/
|
|
413
|
-
checkBashPatternApproval(command) {
|
|
414
|
-
const patternKey = (0, import_bash_pattern_utils.generateBashPatternKey)(command);
|
|
415
|
-
if (!patternKey) {
|
|
416
|
-
if ((0, import_bash_pattern_utils.isDangerousCommand)(command)) {
|
|
417
|
-
this.logger.debug(
|
|
418
|
-
`Skipping pattern generation for dangerous command: ${command.split(/\s+/)[0]}`
|
|
419
|
-
);
|
|
420
|
-
}
|
|
421
|
-
return { approved: false, suggestedPatterns: [] };
|
|
467
|
+
getToolSuggestedPatterns(toolName, args) {
|
|
468
|
+
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
469
|
+
return void 0;
|
|
422
470
|
}
|
|
423
|
-
|
|
424
|
-
|
|
471
|
+
const tool = this.agentTools.get(toolName);
|
|
472
|
+
if (!tool?.suggestApprovalPatterns) {
|
|
473
|
+
return void 0;
|
|
474
|
+
}
|
|
475
|
+
try {
|
|
476
|
+
const patterns = tool.suggestApprovalPatterns(args);
|
|
477
|
+
return patterns.length > 0 ? patterns : void 0;
|
|
478
|
+
} catch (error) {
|
|
479
|
+
this.logger.debug(
|
|
480
|
+
`Pattern suggestion failed for '${toolName}': ${error instanceof Error ? error.message : String(error)}`
|
|
481
|
+
);
|
|
482
|
+
return void 0;
|
|
425
483
|
}
|
|
426
|
-
return {
|
|
427
|
-
approved: false,
|
|
428
|
-
suggestedPatterns: (0, import_bash_pattern_utils.generateBashPatternSuggestions)(command)
|
|
429
|
-
};
|
|
430
484
|
}
|
|
431
485
|
/**
|
|
432
|
-
* Auto-approve pending tool
|
|
486
|
+
* Auto-approve pending tool approval requests for the same tool.
|
|
433
487
|
* Called after a user selects "remember choice" for a tool.
|
|
434
488
|
* This handles the case where parallel tool calls come in before the first one is approved.
|
|
435
489
|
*
|
|
@@ -439,7 +493,7 @@ let _ToolManager = class _ToolManager {
|
|
|
439
493
|
autoApprovePendingToolRequests(toolName, sessionId) {
|
|
440
494
|
const count = this.approvalManager.autoApprovePendingRequests(
|
|
441
495
|
(request) => {
|
|
442
|
-
if (request.type !== import_types3.ApprovalType.
|
|
496
|
+
if (request.type !== import_types3.ApprovalType.TOOL_APPROVAL) {
|
|
443
497
|
return false;
|
|
444
498
|
}
|
|
445
499
|
if (request.sessionId !== sessionId) {
|
|
@@ -458,42 +512,86 @@ let _ToolManager = class _ToolManager {
|
|
|
458
512
|
}
|
|
459
513
|
}
|
|
460
514
|
/**
|
|
461
|
-
* Auto-approve pending
|
|
462
|
-
* Called after a user selects "remember pattern" for a
|
|
463
|
-
* This handles the case where parallel bash commands come in before the first one is approved.
|
|
464
|
-
*
|
|
465
|
-
* @param pattern The bash pattern that was just remembered
|
|
466
|
-
* @param sessionId The session ID for context
|
|
515
|
+
* Auto-approve pending tool approval requests that are now covered by a remembered pattern.
|
|
516
|
+
* Called after a user selects "remember pattern" for a tool.
|
|
467
517
|
*/
|
|
468
|
-
|
|
518
|
+
autoApprovePendingPatternRequests(toolName, sessionId) {
|
|
519
|
+
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
const tool = this.agentTools.get(toolName);
|
|
523
|
+
const getPatternKey = tool?.getApprovalPatternKey;
|
|
524
|
+
if (!getPatternKey) {
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
469
527
|
const count = this.approvalManager.autoApprovePendingRequests(
|
|
470
528
|
(request) => {
|
|
471
|
-
if (request.type !== import_types3.ApprovalType.
|
|
529
|
+
if (request.type !== import_types3.ApprovalType.TOOL_APPROVAL) {
|
|
472
530
|
return false;
|
|
473
531
|
}
|
|
474
532
|
if (request.sessionId !== sessionId) {
|
|
475
533
|
return false;
|
|
476
534
|
}
|
|
477
535
|
const metadata = request.metadata;
|
|
478
|
-
if (
|
|
536
|
+
if (metadata.toolName !== toolName) {
|
|
479
537
|
return false;
|
|
480
538
|
}
|
|
481
|
-
const
|
|
482
|
-
if (
|
|
539
|
+
const args = metadata.args;
|
|
540
|
+
if (typeof args !== "object" || args === null) {
|
|
483
541
|
return false;
|
|
484
542
|
}
|
|
485
|
-
|
|
486
|
-
|
|
543
|
+
let patternKey;
|
|
544
|
+
try {
|
|
545
|
+
patternKey = getPatternKey(args);
|
|
546
|
+
} catch (error) {
|
|
547
|
+
this.logger.debug(
|
|
548
|
+
`Pattern key generation failed for '${toolName}': ${error instanceof Error ? error.message : String(error)}`
|
|
549
|
+
);
|
|
487
550
|
return false;
|
|
488
551
|
}
|
|
489
|
-
|
|
552
|
+
if (!patternKey) return false;
|
|
553
|
+
return this.approvalManager.matchesPattern(toolName, patternKey);
|
|
490
554
|
},
|
|
491
555
|
{ rememberPattern: void 0 }
|
|
492
|
-
// Don't propagate pattern to auto-approved requests
|
|
556
|
+
// Don't propagate pattern choice to auto-approved requests
|
|
557
|
+
);
|
|
558
|
+
if (count > 0) {
|
|
559
|
+
this.logger.info(
|
|
560
|
+
`Auto-approved ${count} parallel request(s) for tool '${toolName}' after user selected "remember pattern"`
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Auto-approve pending directory access requests that match a newly approved directory access request.
|
|
566
|
+
*
|
|
567
|
+
* This handles the case where parallel file operations request directory approval concurrently.
|
|
568
|
+
*/
|
|
569
|
+
autoApprovePendingDirectoryAccessRequests(options) {
|
|
570
|
+
const count = this.approvalManager.autoApprovePendingRequests(
|
|
571
|
+
(request) => {
|
|
572
|
+
if (request.type !== import_types3.ApprovalType.DIRECTORY_ACCESS) {
|
|
573
|
+
return false;
|
|
574
|
+
}
|
|
575
|
+
if (request.sessionId !== options.sessionId) {
|
|
576
|
+
return false;
|
|
577
|
+
}
|
|
578
|
+
const metadata = request.metadata;
|
|
579
|
+
if (typeof metadata?.parentDir !== "string" || metadata.parentDir !== options.parentDir) {
|
|
580
|
+
return false;
|
|
581
|
+
}
|
|
582
|
+
if (options.rememberDirectory) {
|
|
583
|
+
return true;
|
|
584
|
+
}
|
|
585
|
+
if (typeof metadata?.operation !== "string" || typeof metadata?.toolName !== "string") {
|
|
586
|
+
return false;
|
|
587
|
+
}
|
|
588
|
+
return metadata.operation === options.operation && metadata.toolName === options.toolName;
|
|
589
|
+
},
|
|
590
|
+
{ rememberDirectory: false }
|
|
493
591
|
);
|
|
494
592
|
if (count > 0) {
|
|
495
593
|
this.logger.info(
|
|
496
|
-
`Auto-approved ${count} parallel
|
|
594
|
+
`Auto-approved ${count} parallel request(s) for directory '${options.parentDir}' after directory access was approved`
|
|
497
595
|
);
|
|
498
596
|
}
|
|
499
597
|
}
|
|
@@ -507,11 +605,66 @@ let _ToolManager = class _ToolManager {
|
|
|
507
605
|
async getMcpTools() {
|
|
508
606
|
return await this.mcpManager.getAllTools();
|
|
509
607
|
}
|
|
608
|
+
buildToolExecutionContext(options) {
|
|
609
|
+
const workspace = this.currentWorkspace;
|
|
610
|
+
const baseContext = {
|
|
611
|
+
sessionId: options.sessionId,
|
|
612
|
+
workspaceId: workspace?.id,
|
|
613
|
+
workspace,
|
|
614
|
+
abortSignal: options.abortSignal,
|
|
615
|
+
toolCallId: options.toolCallId,
|
|
616
|
+
logger: this.logger
|
|
617
|
+
};
|
|
618
|
+
return this.toolExecutionContextFactory(baseContext);
|
|
619
|
+
}
|
|
620
|
+
validateLocalToolArgsOrThrow(toolName, args) {
|
|
621
|
+
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
622
|
+
return args;
|
|
623
|
+
}
|
|
624
|
+
const tool = this.agentTools.get(toolName);
|
|
625
|
+
if (!tool) {
|
|
626
|
+
return args;
|
|
627
|
+
}
|
|
628
|
+
const validationResult = tool.inputSchema.safeParse(args);
|
|
629
|
+
if (!validationResult.success) {
|
|
630
|
+
this.logger.error(
|
|
631
|
+
`\u274C Invalid arguments for tool ${toolName}: ${validationResult.error.message}`
|
|
632
|
+
);
|
|
633
|
+
throw import_errors.ToolError.validationFailed(
|
|
634
|
+
toolName,
|
|
635
|
+
`Invalid arguments: ${validationResult.error.message}`
|
|
636
|
+
);
|
|
637
|
+
}
|
|
638
|
+
const validated = validationResult.data;
|
|
639
|
+
if (typeof validated !== "object" || validated === null || Array.isArray(validated)) {
|
|
640
|
+
throw import_errors.ToolError.validationFailed(toolName, "Invalid arguments: expected an object");
|
|
641
|
+
}
|
|
642
|
+
return validated;
|
|
643
|
+
}
|
|
644
|
+
async executeLocalTool(toolName, args, sessionId, abortSignal, toolCallId) {
|
|
645
|
+
const tool = this.agentTools.get(toolName);
|
|
646
|
+
if (!tool) {
|
|
647
|
+
this.logger.error(`\u274C No local tool found: ${toolName}`);
|
|
648
|
+
this.logger.debug(
|
|
649
|
+
`Available local tools: ${Array.from(this.agentTools.keys()).join(", ")}`
|
|
650
|
+
);
|
|
651
|
+
throw import_errors.ToolError.notFound(toolName);
|
|
652
|
+
}
|
|
653
|
+
try {
|
|
654
|
+
const context = this.buildToolExecutionContext({ sessionId, abortSignal, toolCallId });
|
|
655
|
+
const result = await tool.execute(args, context);
|
|
656
|
+
return result;
|
|
657
|
+
} catch (error) {
|
|
658
|
+
this.logger.error(`\u274C Local tool execution failed: ${toolName}`, {
|
|
659
|
+
error: error instanceof Error ? error.message : String(error)
|
|
660
|
+
});
|
|
661
|
+
throw error;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
510
664
|
/**
|
|
511
|
-
* Build all tools from sources
|
|
512
|
-
* ALL tools get prefixed by their source - no exceptions
|
|
665
|
+
* Build all tools from sources.
|
|
513
666
|
*
|
|
514
|
-
* TODO: Rethink tool naming convention for more consistency
|
|
667
|
+
* TODO: Rethink MCP tool naming convention for more consistency.
|
|
515
668
|
* Current issue: MCP tools have dynamic naming based on conflicts:
|
|
516
669
|
* - No conflict: mcp--toolName
|
|
517
670
|
* - With conflict: mcp--serverName--toolName
|
|
@@ -524,8 +677,6 @@ let _ToolManager = class _ToolManager {
|
|
|
524
677
|
async buildAllTools() {
|
|
525
678
|
const allTools = {};
|
|
526
679
|
let mcpTools = {};
|
|
527
|
-
let internalTools = {};
|
|
528
|
-
let customTools = {};
|
|
529
680
|
try {
|
|
530
681
|
mcpTools = await this.mcpManager.getAllTools();
|
|
531
682
|
} catch (error) {
|
|
@@ -534,38 +685,13 @@ let _ToolManager = class _ToolManager {
|
|
|
534
685
|
);
|
|
535
686
|
mcpTools = {};
|
|
536
687
|
}
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
}
|
|
545
|
-
try {
|
|
546
|
-
customTools = this.internalToolsProvider?.getCustomTools() || {};
|
|
547
|
-
} catch (error) {
|
|
548
|
-
this.logger.error(
|
|
549
|
-
`Failed to get custom tools: ${error instanceof Error ? error.message : String(error)}`
|
|
550
|
-
);
|
|
551
|
-
customTools = {};
|
|
552
|
-
}
|
|
553
|
-
for (const [toolName, toolDef] of Object.entries(internalTools)) {
|
|
554
|
-
const qualifiedName = `${_ToolManager.INTERNAL_TOOL_PREFIX}${toolName}`;
|
|
555
|
-
allTools[qualifiedName] = {
|
|
556
|
-
...toolDef,
|
|
557
|
-
name: qualifiedName,
|
|
558
|
-
description: `${toolDef.description || "No description provided"} (internal tool)`,
|
|
559
|
-
parameters: (0, import_tool_call_metadata.wrapToolParametersSchema)(toolDef.parameters)
|
|
560
|
-
};
|
|
561
|
-
}
|
|
562
|
-
for (const [toolName, toolDef] of Object.entries(customTools)) {
|
|
563
|
-
const qualifiedName = `${_ToolManager.CUSTOM_TOOL_PREFIX}${toolName}`;
|
|
564
|
-
allTools[qualifiedName] = {
|
|
565
|
-
...toolDef,
|
|
566
|
-
name: qualifiedName,
|
|
567
|
-
description: `${toolDef.description || "No description provided"} (custom tool)`,
|
|
568
|
-
parameters: (0, import_tool_call_metadata.wrapToolParametersSchema)(toolDef.parameters)
|
|
688
|
+
for (const [toolName, tool] of this.agentTools) {
|
|
689
|
+
allTools[toolName] = {
|
|
690
|
+
name: toolName,
|
|
691
|
+
description: tool.description || "No description provided",
|
|
692
|
+
parameters: (0, import_tool_call_metadata.wrapToolParametersSchema)(
|
|
693
|
+
(0, import_schema.convertZodSchemaToJsonSchema)(tool.inputSchema, this.logger)
|
|
694
|
+
)
|
|
569
695
|
};
|
|
570
696
|
}
|
|
571
697
|
for (const [toolName, toolDef] of Object.entries(mcpTools)) {
|
|
@@ -579,10 +705,9 @@ let _ToolManager = class _ToolManager {
|
|
|
579
705
|
}
|
|
580
706
|
const totalTools = Object.keys(allTools).length;
|
|
581
707
|
const mcpCount = Object.keys(mcpTools).length;
|
|
582
|
-
const
|
|
583
|
-
const customCount = Object.keys(customTools).length;
|
|
708
|
+
const localCount = this.agentTools.size;
|
|
584
709
|
this.logger.debug(
|
|
585
|
-
`\u{1F527} Unified tool discovery: ${totalTools} total tools (${mcpCount} MCP, ${
|
|
710
|
+
`\u{1F527} Unified tool discovery: ${totalTools} total tools (${mcpCount} MCP, ${localCount} local)`
|
|
586
711
|
);
|
|
587
712
|
return allTools;
|
|
588
713
|
}
|
|
@@ -600,10 +725,11 @@ let _ToolManager = class _ToolManager {
|
|
|
600
725
|
return this.toolsCache;
|
|
601
726
|
}
|
|
602
727
|
/**
|
|
603
|
-
* Execute a tool by routing based on
|
|
604
|
-
*
|
|
728
|
+
* Execute a tool by routing based on prefix:
|
|
729
|
+
* - MCP tools: `mcp--...`
|
|
730
|
+
* - Local tools: `Tool.id`
|
|
605
731
|
*
|
|
606
|
-
* @param toolName
|
|
732
|
+
* @param toolName Tool name (e.g., "edit_file", "mcp--filesystem--read_file")
|
|
607
733
|
* @param args The arguments for the tool
|
|
608
734
|
* @param toolCallId The unique tool call ID for tracking (from LLM or generated for direct calls)
|
|
609
735
|
* @param sessionId Optional session ID for context
|
|
@@ -613,23 +739,30 @@ let _ToolManager = class _ToolManager {
|
|
|
613
739
|
const { toolArgs: rawToolArgs, meta } = (0, import_tool_call_metadata.extractToolCallMeta)(args);
|
|
614
740
|
let toolArgs = rawToolArgs;
|
|
615
741
|
const backgroundTasksEnabled = (0, import_env.isBackgroundTasksEnabled)();
|
|
742
|
+
const toolDisplayName = this.agentTools.get(toolName)?.displayName;
|
|
616
743
|
this.logger.debug(`\u{1F527} Tool execution requested: '${toolName}' (toolCallId: ${toolCallId})`);
|
|
617
744
|
this.logger.debug(`Tool args: ${JSON.stringify(toolArgs, null, 2)}`);
|
|
618
745
|
if (sessionId) {
|
|
619
746
|
this.agentEventBus.emit("llm:tool-call", {
|
|
620
747
|
toolName,
|
|
748
|
+
...toolDisplayName !== void 0 && { toolDisplayName },
|
|
621
749
|
args: toolArgs,
|
|
622
750
|
callId: toolCallId,
|
|
623
751
|
sessionId
|
|
624
752
|
});
|
|
625
753
|
}
|
|
626
|
-
const {
|
|
754
|
+
const {
|
|
755
|
+
requireApproval,
|
|
756
|
+
approvalStatus,
|
|
757
|
+
args: validatedToolArgs
|
|
758
|
+
} = await this.handleToolApproval(
|
|
627
759
|
toolName,
|
|
628
760
|
toolArgs,
|
|
629
761
|
toolCallId,
|
|
630
762
|
sessionId,
|
|
631
763
|
meta.callDescription
|
|
632
764
|
);
|
|
765
|
+
toolArgs = validatedToolArgs;
|
|
633
766
|
this.logger.debug(`\u2705 Tool execution approved: ${toolName}`);
|
|
634
767
|
this.logger.info(
|
|
635
768
|
`\u{1F527} Tool execution started for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
@@ -642,13 +775,13 @@ let _ToolManager = class _ToolManager {
|
|
|
642
775
|
});
|
|
643
776
|
}
|
|
644
777
|
const startTime = Date.now();
|
|
645
|
-
if (this.
|
|
778
|
+
if (this.hookManager && this.sessionManager && this.stateManager) {
|
|
646
779
|
const beforePayload = {
|
|
647
780
|
toolName,
|
|
648
781
|
args: toolArgs,
|
|
649
782
|
...sessionId !== void 0 && { sessionId }
|
|
650
783
|
};
|
|
651
|
-
const modifiedPayload = await this.
|
|
784
|
+
const modifiedPayload = await this.hookManager.executeHooks(
|
|
652
785
|
"beforeToolCall",
|
|
653
786
|
beforePayload,
|
|
654
787
|
{
|
|
@@ -660,6 +793,14 @@ let _ToolManager = class _ToolManager {
|
|
|
660
793
|
}
|
|
661
794
|
);
|
|
662
795
|
toolArgs = modifiedPayload.args;
|
|
796
|
+
try {
|
|
797
|
+
toolArgs = this.validateLocalToolArgsOrThrow(toolName, toolArgs);
|
|
798
|
+
} catch (error) {
|
|
799
|
+
this.logger.error(
|
|
800
|
+
`Post-hook validation failed for tool '${toolName}': a beforeToolCall hook may have set invalid args`
|
|
801
|
+
);
|
|
802
|
+
throw error;
|
|
803
|
+
}
|
|
663
804
|
}
|
|
664
805
|
try {
|
|
665
806
|
let result;
|
|
@@ -709,16 +850,7 @@ let _ToolManager = class _ToolManager {
|
|
|
709
850
|
} else {
|
|
710
851
|
result = await this.mcpManager.executeTool(actualToolName, toolArgs, sessionId);
|
|
711
852
|
}
|
|
712
|
-
} else
|
|
713
|
-
this.logger.debug(`\u{1F527} Detected internal tool: '${toolName}'`);
|
|
714
|
-
const actualToolName = toolName.substring(_ToolManager.INTERNAL_TOOL_PREFIX.length);
|
|
715
|
-
if (actualToolName.length === 0) {
|
|
716
|
-
throw import_errors.ToolError.invalidName(toolName, "tool name cannot be empty after prefix");
|
|
717
|
-
}
|
|
718
|
-
if (!this.internalToolsProvider) {
|
|
719
|
-
throw import_errors.ToolError.internalToolsNotInitialized(toolName);
|
|
720
|
-
}
|
|
721
|
-
this.logger.debug(`\u{1F3AF} Internal routing: '${toolName}' -> '${actualToolName}'`);
|
|
853
|
+
} else {
|
|
722
854
|
const runInBackground = backgroundTasksEnabled && meta.runInBackground === true && sessionId !== void 0;
|
|
723
855
|
if (meta.runInBackground === true && !backgroundTasksEnabled) {
|
|
724
856
|
this.logger.debug(
|
|
@@ -729,14 +861,14 @@ let _ToolManager = class _ToolManager {
|
|
|
729
861
|
if (runInBackground) {
|
|
730
862
|
const backgroundSessionId = sessionId;
|
|
731
863
|
const { result: backgroundResult, promise } = registerBackgroundTask(
|
|
732
|
-
this.
|
|
733
|
-
|
|
864
|
+
this.executeLocalTool(
|
|
865
|
+
toolName,
|
|
734
866
|
toolArgs,
|
|
735
867
|
backgroundSessionId,
|
|
736
868
|
abortSignal,
|
|
737
869
|
toolCallId
|
|
738
870
|
),
|
|
739
|
-
`
|
|
871
|
+
`Tool ${toolName}`
|
|
740
872
|
);
|
|
741
873
|
this.agentEventBus.emit("tool:background", {
|
|
742
874
|
toolName,
|
|
@@ -751,88 +883,28 @@ let _ToolManager = class _ToolManager {
|
|
|
751
883
|
});
|
|
752
884
|
result = backgroundResult;
|
|
753
885
|
} else {
|
|
754
|
-
result = await this.
|
|
755
|
-
actualToolName,
|
|
756
|
-
toolArgs,
|
|
757
|
-
sessionId,
|
|
758
|
-
abortSignal,
|
|
759
|
-
toolCallId
|
|
760
|
-
);
|
|
761
|
-
}
|
|
762
|
-
} else if (toolName.startsWith(_ToolManager.CUSTOM_TOOL_PREFIX)) {
|
|
763
|
-
this.logger.debug(`\u{1F527} Detected custom tool: '${toolName}'`);
|
|
764
|
-
const actualToolName = toolName.substring(_ToolManager.CUSTOM_TOOL_PREFIX.length);
|
|
765
|
-
if (actualToolName.length === 0) {
|
|
766
|
-
throw import_errors.ToolError.invalidName(toolName, "tool name cannot be empty after prefix");
|
|
767
|
-
}
|
|
768
|
-
if (!this.internalToolsProvider) {
|
|
769
|
-
throw import_errors.ToolError.internalToolsNotInitialized(toolName);
|
|
770
|
-
}
|
|
771
|
-
this.logger.debug(`\u{1F3AF} Custom routing: '${toolName}' -> '${actualToolName}'`);
|
|
772
|
-
const runInBackground = backgroundTasksEnabled && meta.runInBackground === true && sessionId !== void 0;
|
|
773
|
-
if (meta.runInBackground === true && !backgroundTasksEnabled) {
|
|
774
|
-
this.logger.debug(
|
|
775
|
-
"Background tool execution disabled; running synchronously instead.",
|
|
776
|
-
{ toolName }
|
|
777
|
-
);
|
|
778
|
-
}
|
|
779
|
-
if (runInBackground) {
|
|
780
|
-
const backgroundSessionId = sessionId;
|
|
781
|
-
const { result: backgroundResult, promise } = registerBackgroundTask(
|
|
782
|
-
this.internalToolsProvider.executeTool(
|
|
783
|
-
actualToolName,
|
|
784
|
-
toolArgs,
|
|
785
|
-
backgroundSessionId,
|
|
786
|
-
abortSignal,
|
|
787
|
-
toolCallId
|
|
788
|
-
),
|
|
789
|
-
`Custom tool ${actualToolName}`
|
|
790
|
-
);
|
|
791
|
-
this.agentEventBus.emit("tool:background", {
|
|
886
|
+
result = await this.executeLocalTool(
|
|
792
887
|
toolName,
|
|
793
|
-
toolCallId: backgroundResult.taskId,
|
|
794
|
-
sessionId: backgroundSessionId,
|
|
795
|
-
description: backgroundResult.description,
|
|
796
|
-
promise,
|
|
797
|
-
...meta.timeoutMs !== void 0 && { timeoutMs: meta.timeoutMs },
|
|
798
|
-
...meta.notifyOnComplete !== void 0 && {
|
|
799
|
-
notifyOnComplete: meta.notifyOnComplete
|
|
800
|
-
}
|
|
801
|
-
});
|
|
802
|
-
result = backgroundResult;
|
|
803
|
-
} else {
|
|
804
|
-
result = await this.internalToolsProvider.executeTool(
|
|
805
|
-
actualToolName,
|
|
806
888
|
toolArgs,
|
|
807
889
|
sessionId,
|
|
808
890
|
abortSignal,
|
|
809
891
|
toolCallId
|
|
810
892
|
);
|
|
811
893
|
}
|
|
812
|
-
} else {
|
|
813
|
-
this.logger.debug(`\u{1F527} Detected tool without proper prefix: '${toolName}'`);
|
|
814
|
-
const stats = await this.getToolStats();
|
|
815
|
-
this.logger.error(
|
|
816
|
-
`\u274C Tool missing source prefix: '${toolName}' (expected '${_ToolManager.MCP_TOOL_PREFIX}*', '${_ToolManager.INTERNAL_TOOL_PREFIX}*', or '${_ToolManager.CUSTOM_TOOL_PREFIX}*')`
|
|
817
|
-
);
|
|
818
|
-
this.logger.debug(
|
|
819
|
-
`Available: ${stats.mcp} MCP, ${stats.internal} internal, ${stats.custom} custom tools`
|
|
820
|
-
);
|
|
821
|
-
throw import_errors.ToolError.notFound(toolName);
|
|
822
894
|
}
|
|
823
895
|
const duration = Date.now() - startTime;
|
|
824
896
|
this.logger.debug(`\u{1F3AF} Tool execution completed in ${duration}ms: '${toolName}'`);
|
|
825
897
|
this.logger.info(
|
|
826
898
|
`\u2705 Tool execution completed successfully for ${toolName} in ${duration}ms, sessionId: ${sessionId ?? "global"}`
|
|
827
899
|
);
|
|
828
|
-
if (this.
|
|
900
|
+
if (this.hookManager && this.sessionManager && this.stateManager) {
|
|
829
901
|
const afterPayload = {
|
|
830
902
|
toolName,
|
|
831
903
|
result,
|
|
832
904
|
success: true,
|
|
833
905
|
...sessionId !== void 0 && { sessionId }
|
|
834
906
|
};
|
|
835
|
-
const modifiedPayload = await this.
|
|
907
|
+
const modifiedPayload = await this.hookManager.executeHooks(
|
|
836
908
|
"afterToolResult",
|
|
837
909
|
afterPayload,
|
|
838
910
|
{
|
|
@@ -847,6 +919,7 @@ let _ToolManager = class _ToolManager {
|
|
|
847
919
|
}
|
|
848
920
|
return {
|
|
849
921
|
result,
|
|
922
|
+
...toolDisplayName !== void 0 && { toolDisplayName },
|
|
850
923
|
...requireApproval && { requireApproval, approvalStatus }
|
|
851
924
|
};
|
|
852
925
|
} catch (error) {
|
|
@@ -854,14 +927,14 @@ let _ToolManager = class _ToolManager {
|
|
|
854
927
|
this.logger.error(
|
|
855
928
|
`\u274C Tool execution failed for ${toolName} after ${duration}ms, sessionId: ${sessionId ?? "global"}: ${error instanceof Error ? error.message : String(error)}`
|
|
856
929
|
);
|
|
857
|
-
if (this.
|
|
930
|
+
if (this.hookManager && this.sessionManager && this.stateManager) {
|
|
858
931
|
const afterPayload = {
|
|
859
932
|
toolName,
|
|
860
933
|
result: error instanceof Error ? error.message : String(error),
|
|
861
934
|
success: false,
|
|
862
935
|
...sessionId !== void 0 && { sessionId }
|
|
863
936
|
};
|
|
864
|
-
await this.
|
|
937
|
+
await this.hookManager.executeHooks("afterToolResult", afterPayload, {
|
|
865
938
|
sessionManager: this.sessionManager,
|
|
866
939
|
mcpManager: this.mcpManager,
|
|
867
940
|
toolManager: this,
|
|
@@ -873,30 +946,20 @@ let _ToolManager = class _ToolManager {
|
|
|
873
946
|
}
|
|
874
947
|
}
|
|
875
948
|
/**
|
|
876
|
-
* Check if a tool exists
|
|
949
|
+
* Check if a tool exists.
|
|
877
950
|
*/
|
|
878
951
|
async hasTool(toolName) {
|
|
879
952
|
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
880
953
|
const actualToolName = toolName.substring(_ToolManager.MCP_TOOL_PREFIX.length);
|
|
881
954
|
return this.mcpManager.getToolClient(actualToolName) !== void 0;
|
|
882
955
|
}
|
|
883
|
-
|
|
884
|
-
const actualToolName = toolName.substring(_ToolManager.INTERNAL_TOOL_PREFIX.length);
|
|
885
|
-
return this.internalToolsProvider?.hasInternalTool(actualToolName) ?? false;
|
|
886
|
-
}
|
|
887
|
-
if (toolName.startsWith(_ToolManager.CUSTOM_TOOL_PREFIX)) {
|
|
888
|
-
const actualToolName = toolName.substring(_ToolManager.CUSTOM_TOOL_PREFIX.length);
|
|
889
|
-
return this.internalToolsProvider?.hasCustomTool(actualToolName) ?? false;
|
|
890
|
-
}
|
|
891
|
-
return false;
|
|
956
|
+
return this.agentTools.has(toolName);
|
|
892
957
|
}
|
|
893
958
|
/**
|
|
894
959
|
* Get tool statistics across all sources
|
|
895
960
|
*/
|
|
896
961
|
async getToolStats() {
|
|
897
962
|
let mcpTools = {};
|
|
898
|
-
let internalTools = {};
|
|
899
|
-
let customTools = {};
|
|
900
963
|
try {
|
|
901
964
|
mcpTools = await this.mcpManager.getAllTools();
|
|
902
965
|
} catch (error) {
|
|
@@ -905,34 +968,16 @@ let _ToolManager = class _ToolManager {
|
|
|
905
968
|
);
|
|
906
969
|
mcpTools = {};
|
|
907
970
|
}
|
|
908
|
-
try {
|
|
909
|
-
internalTools = this.internalToolsProvider?.getInternalTools() || {};
|
|
910
|
-
} catch (error) {
|
|
911
|
-
this.logger.error(
|
|
912
|
-
`Failed to get internal tools for stats: ${error instanceof Error ? error.message : String(error)}`
|
|
913
|
-
);
|
|
914
|
-
internalTools = {};
|
|
915
|
-
}
|
|
916
|
-
try {
|
|
917
|
-
customTools = this.internalToolsProvider?.getCustomTools() || {};
|
|
918
|
-
} catch (error) {
|
|
919
|
-
this.logger.error(
|
|
920
|
-
`Failed to get custom tools for stats: ${error instanceof Error ? error.message : String(error)}`
|
|
921
|
-
);
|
|
922
|
-
customTools = {};
|
|
923
|
-
}
|
|
924
971
|
const mcpCount = Object.keys(mcpTools).length;
|
|
925
|
-
const
|
|
926
|
-
const customCount = Object.keys(customTools).length;
|
|
972
|
+
const localCount = this.agentTools.size;
|
|
927
973
|
return {
|
|
928
|
-
total: mcpCount +
|
|
974
|
+
total: mcpCount + localCount,
|
|
929
975
|
mcp: mcpCount,
|
|
930
|
-
|
|
931
|
-
custom: customCount
|
|
976
|
+
local: localCount
|
|
932
977
|
};
|
|
933
978
|
}
|
|
934
979
|
/**
|
|
935
|
-
* Get the source of a tool (mcp,
|
|
980
|
+
* Get the source of a tool (mcp, local, or unknown).
|
|
936
981
|
* @param toolName The name of the tool to check
|
|
937
982
|
* @returns The source of the tool
|
|
938
983
|
*/
|
|
@@ -940,11 +985,8 @@ let _ToolManager = class _ToolManager {
|
|
|
940
985
|
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX) && toolName.length > _ToolManager.MCP_TOOL_PREFIX.length) {
|
|
941
986
|
return "mcp";
|
|
942
987
|
}
|
|
943
|
-
if (
|
|
944
|
-
return "
|
|
945
|
-
}
|
|
946
|
-
if (toolName.startsWith(_ToolManager.CUSTOM_TOOL_PREFIX) && toolName.length > _ToolManager.CUSTOM_TOOL_PREFIX.length) {
|
|
947
|
-
return "custom";
|
|
988
|
+
if (this.agentTools.has(toolName)) {
|
|
989
|
+
return "local";
|
|
948
990
|
}
|
|
949
991
|
return "unknown";
|
|
950
992
|
}
|
|
@@ -955,7 +997,7 @@ let _ToolManager = class _ToolManager {
|
|
|
955
997
|
* Examples:
|
|
956
998
|
* - Policy "mcp--read_file" matches "mcp--read_file" (exact)
|
|
957
999
|
* - Policy "mcp--read_file" matches "mcp--filesystem--read_file" (suffix)
|
|
958
|
-
* - Policy "
|
|
1000
|
+
* - Policy "read_file" matches "read_file" (local tool exact only)
|
|
959
1001
|
*
|
|
960
1002
|
* @param toolName The fully qualified tool name (e.g., "mcp--filesystem--read_file")
|
|
961
1003
|
* @param policyPattern The policy pattern to match against (e.g., "mcp--read_file")
|
|
@@ -1006,26 +1048,21 @@ let _ToolManager = class _ToolManager {
|
|
|
1006
1048
|
* Tools can implement getApprovalOverride() to request specialized approval flows
|
|
1007
1049
|
* (e.g., directory access approval for file tools) instead of default tool confirmation.
|
|
1008
1050
|
*
|
|
1009
|
-
* @param toolName
|
|
1051
|
+
* @param toolName Tool name
|
|
1010
1052
|
* @param args The tool arguments
|
|
1011
1053
|
* @param sessionId Optional session ID
|
|
1012
1054
|
* @returns { handled: true } if custom approval was processed, { handled: false } to continue normal flow
|
|
1013
1055
|
*/
|
|
1014
|
-
async checkCustomApprovalOverride(toolName, args, sessionId) {
|
|
1015
|
-
|
|
1016
|
-
if (toolName.startsWith(_ToolManager.INTERNAL_TOOL_PREFIX)) {
|
|
1017
|
-
actualToolName = toolName.substring(_ToolManager.INTERNAL_TOOL_PREFIX.length);
|
|
1018
|
-
} else if (toolName.startsWith(_ToolManager.CUSTOM_TOOL_PREFIX)) {
|
|
1019
|
-
actualToolName = toolName.substring(_ToolManager.CUSTOM_TOOL_PREFIX.length);
|
|
1020
|
-
}
|
|
1021
|
-
if (!actualToolName || !this.internalToolsProvider) {
|
|
1056
|
+
async checkCustomApprovalOverride(toolName, args, toolCallId, sessionId) {
|
|
1057
|
+
if (toolName.startsWith(_ToolManager.MCP_TOOL_PREFIX)) {
|
|
1022
1058
|
return { handled: false };
|
|
1023
1059
|
}
|
|
1024
|
-
const tool = this.
|
|
1060
|
+
const tool = this.agentTools.get(toolName);
|
|
1025
1061
|
if (!tool?.getApprovalOverride) {
|
|
1026
1062
|
return { handled: false };
|
|
1027
1063
|
}
|
|
1028
|
-
const
|
|
1064
|
+
const context = this.buildToolExecutionContext({ sessionId, toolCallId });
|
|
1065
|
+
const approvalRequest = await tool.getApprovalOverride(args, context);
|
|
1029
1066
|
if (!approvalRequest) {
|
|
1030
1067
|
return { handled: false };
|
|
1031
1068
|
}
|
|
@@ -1038,7 +1075,23 @@ let _ToolManager = class _ToolManager {
|
|
|
1038
1075
|
const response = await this.approvalManager.requestApproval(approvalRequest);
|
|
1039
1076
|
if (response.status === import_types3.ApprovalStatus.APPROVED) {
|
|
1040
1077
|
if (tool.onApprovalGranted) {
|
|
1041
|
-
tool.onApprovalGranted(response);
|
|
1078
|
+
tool.onApprovalGranted(response, context, approvalRequest);
|
|
1079
|
+
}
|
|
1080
|
+
if (approvalRequest.type === import_types3.ApprovalType.DIRECTORY_ACCESS) {
|
|
1081
|
+
const metadata = approvalRequest.metadata;
|
|
1082
|
+
const parentDir = typeof metadata?.parentDir === "string" ? metadata.parentDir : null;
|
|
1083
|
+
const operation = typeof metadata?.operation === "string" ? metadata.operation : null;
|
|
1084
|
+
if (parentDir && operation) {
|
|
1085
|
+
const data = response.data;
|
|
1086
|
+
const rememberDirectory = data?.rememberDirectory ?? false;
|
|
1087
|
+
this.autoApprovePendingDirectoryAccessRequests({
|
|
1088
|
+
parentDir,
|
|
1089
|
+
operation,
|
|
1090
|
+
sessionId,
|
|
1091
|
+
toolName,
|
|
1092
|
+
rememberDirectory
|
|
1093
|
+
});
|
|
1094
|
+
}
|
|
1042
1095
|
}
|
|
1043
1096
|
this.logger.info(
|
|
1044
1097
|
`Custom approval granted for '${toolName}', type=${approvalRequest.type}, session=${sessionId ?? "global"}`
|
|
@@ -1062,11 +1115,24 @@ let _ToolManager = class _ToolManager {
|
|
|
1062
1115
|
* if a tool should be auto-approved, denied, or requires manual approval.
|
|
1063
1116
|
*/
|
|
1064
1117
|
async handleToolApproval(toolName, args, toolCallId, sessionId, callDescription) {
|
|
1065
|
-
const
|
|
1118
|
+
const validatedArgs = this.validateLocalToolArgsOrThrow(toolName, args);
|
|
1119
|
+
const quickResult = await this.tryQuickApprovalResolution(
|
|
1120
|
+
toolName,
|
|
1121
|
+
validatedArgs,
|
|
1122
|
+
toolCallId,
|
|
1123
|
+
sessionId
|
|
1124
|
+
);
|
|
1066
1125
|
if (quickResult !== null) {
|
|
1067
|
-
return quickResult;
|
|
1126
|
+
return { ...quickResult, args: validatedArgs };
|
|
1068
1127
|
}
|
|
1069
|
-
|
|
1128
|
+
const manualResult = await this.requestManualApproval(
|
|
1129
|
+
toolName,
|
|
1130
|
+
validatedArgs,
|
|
1131
|
+
toolCallId,
|
|
1132
|
+
sessionId,
|
|
1133
|
+
callDescription
|
|
1134
|
+
);
|
|
1135
|
+
return { ...manualResult, args: validatedArgs };
|
|
1070
1136
|
}
|
|
1071
1137
|
/**
|
|
1072
1138
|
* Try to resolve tool approval quickly based on policies and cached permissions.
|
|
@@ -1078,10 +1144,10 @@ let _ToolManager = class _ToolManager {
|
|
|
1078
1144
|
* 3. Session auto-approve (skill allowed-tools)
|
|
1079
1145
|
* 4. Static allow list
|
|
1080
1146
|
* 5. Dynamic "remembered" allowed list
|
|
1081
|
-
* 6.
|
|
1147
|
+
* 6. Tool approval patterns
|
|
1082
1148
|
* 7. Approval mode (auto-approve/auto-deny)
|
|
1083
1149
|
*/
|
|
1084
|
-
async tryQuickApprovalResolution(toolName, args, sessionId) {
|
|
1150
|
+
async tryQuickApprovalResolution(toolName, args, toolCallId, sessionId) {
|
|
1085
1151
|
if (this.isInAlwaysDenyList(toolName)) {
|
|
1086
1152
|
this.logger.info(
|
|
1087
1153
|
`Tool '${toolName}' is in static deny list \u2013 blocking execution (session: ${sessionId ?? "global"})`
|
|
@@ -1091,6 +1157,7 @@ let _ToolManager = class _ToolManager {
|
|
|
1091
1157
|
const customApprovalResult = await this.checkCustomApprovalOverride(
|
|
1092
1158
|
toolName,
|
|
1093
1159
|
args,
|
|
1160
|
+
toolCallId,
|
|
1094
1161
|
sessionId
|
|
1095
1162
|
);
|
|
1096
1163
|
if (customApprovalResult.handled) {
|
|
@@ -1114,17 +1181,12 @@ let _ToolManager = class _ToolManager {
|
|
|
1114
1181
|
);
|
|
1115
1182
|
return { requireApproval: false };
|
|
1116
1183
|
}
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
`Bash command '${command}' matched approved pattern \u2013 skipping confirmation.`
|
|
1124
|
-
);
|
|
1125
|
-
return { requireApproval: false };
|
|
1126
|
-
}
|
|
1127
|
-
}
|
|
1184
|
+
const patternKey = this.getToolPatternKey(toolName, args);
|
|
1185
|
+
if (patternKey && this.approvalManager.matchesPattern(toolName, patternKey)) {
|
|
1186
|
+
this.logger.info(
|
|
1187
|
+
`Tool '${toolName}' matched approved pattern key '${patternKey}' \u2013 skipping confirmation.`
|
|
1188
|
+
);
|
|
1189
|
+
return { requireApproval: false };
|
|
1128
1190
|
}
|
|
1129
1191
|
if (this.approvalMode === "auto-approve") {
|
|
1130
1192
|
this.logger.debug(`\u{1F7E2} Auto-approving tool execution: ${toolName}`);
|
|
@@ -1142,18 +1204,20 @@ let _ToolManager = class _ToolManager {
|
|
|
1142
1204
|
*/
|
|
1143
1205
|
async requestManualApproval(toolName, args, toolCallId, sessionId, callDescription) {
|
|
1144
1206
|
this.logger.info(
|
|
1145
|
-
`Tool
|
|
1207
|
+
`Tool approval requested for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
1146
1208
|
);
|
|
1147
1209
|
try {
|
|
1210
|
+
const toolDisplayName = this.agentTools.get(toolName)?.displayName;
|
|
1148
1211
|
const displayPreview = await this.generateToolPreview(
|
|
1149
1212
|
toolName,
|
|
1150
1213
|
args,
|
|
1151
1214
|
toolCallId,
|
|
1152
1215
|
sessionId
|
|
1153
1216
|
);
|
|
1154
|
-
const suggestedPatterns = this.
|
|
1155
|
-
const response = await this.approvalManager.
|
|
1217
|
+
const suggestedPatterns = this.getToolSuggestedPatterns(toolName, args);
|
|
1218
|
+
const response = await this.approvalManager.requestToolApproval({
|
|
1156
1219
|
toolName,
|
|
1220
|
+
...toolDisplayName !== void 0 && { toolDisplayName },
|
|
1157
1221
|
toolCallId,
|
|
1158
1222
|
args,
|
|
1159
1223
|
...callDescription !== void 0 && { description: callDescription },
|
|
@@ -1168,12 +1232,12 @@ let _ToolManager = class _ToolManager {
|
|
|
1168
1232
|
this.handleApprovalDenied(toolName, response, sessionId);
|
|
1169
1233
|
}
|
|
1170
1234
|
this.logger.info(
|
|
1171
|
-
`Tool
|
|
1235
|
+
`Tool approval approved for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
1172
1236
|
);
|
|
1173
1237
|
return { requireApproval: true, approvalStatus: "approved" };
|
|
1174
1238
|
} catch (error) {
|
|
1175
1239
|
this.logger.error(
|
|
1176
|
-
`Tool
|
|
1240
|
+
`Tool approval error for ${toolName}: ${error instanceof Error ? error.message : String(error)}`
|
|
1177
1241
|
);
|
|
1178
1242
|
throw error;
|
|
1179
1243
|
}
|
|
@@ -1182,14 +1246,13 @@ let _ToolManager = class _ToolManager {
|
|
|
1182
1246
|
* Generate a preview for the tool approval UI if the tool supports it.
|
|
1183
1247
|
*/
|
|
1184
1248
|
async generateToolPreview(toolName, args, toolCallId, sessionId) {
|
|
1185
|
-
const
|
|
1186
|
-
|
|
1187
|
-
if (!internalTool?.generatePreview) {
|
|
1249
|
+
const tool = this.agentTools.get(toolName);
|
|
1250
|
+
if (!tool?.generatePreview) {
|
|
1188
1251
|
return void 0;
|
|
1189
1252
|
}
|
|
1190
1253
|
try {
|
|
1191
|
-
const context = { sessionId, toolCallId };
|
|
1192
|
-
const preview = await
|
|
1254
|
+
const context = this.buildToolExecutionContext({ sessionId, toolCallId });
|
|
1255
|
+
const preview = await tool.generatePreview(args, context);
|
|
1193
1256
|
this.logger.debug(`Generated preview for ${toolName}`);
|
|
1194
1257
|
return preview ?? void 0;
|
|
1195
1258
|
} catch (previewError) {
|
|
@@ -1203,20 +1266,6 @@ let _ToolManager = class _ToolManager {
|
|
|
1203
1266
|
return void 0;
|
|
1204
1267
|
}
|
|
1205
1268
|
}
|
|
1206
|
-
/**
|
|
1207
|
-
* Get suggested bash patterns for the approval UI.
|
|
1208
|
-
*/
|
|
1209
|
-
getBashSuggestedPatterns(toolName, args) {
|
|
1210
|
-
if (!this.isBashTool(toolName)) {
|
|
1211
|
-
return void 0;
|
|
1212
|
-
}
|
|
1213
|
-
const command = args.command;
|
|
1214
|
-
if (!command) {
|
|
1215
|
-
return void 0;
|
|
1216
|
-
}
|
|
1217
|
-
const result = this.checkBashPatternApproval(command);
|
|
1218
|
-
return result.suggestedPatterns?.length ? result.suggestedPatterns : void 0;
|
|
1219
|
-
}
|
|
1220
1269
|
/**
|
|
1221
1270
|
* Handle "remember choice" or "remember pattern" when user approves a tool.
|
|
1222
1271
|
*/
|
|
@@ -1232,10 +1281,10 @@ let _ToolManager = class _ToolManager {
|
|
|
1232
1281
|
`Tool '${toolName}' added to allowed tools for session '${allowSessionId ?? "global"}' (remember choice selected)`
|
|
1233
1282
|
);
|
|
1234
1283
|
this.autoApprovePendingToolRequests(toolName, allowSessionId);
|
|
1235
|
-
} else if (rememberPattern && this.
|
|
1236
|
-
this.approvalManager.
|
|
1237
|
-
this.logger.info(`
|
|
1238
|
-
this.
|
|
1284
|
+
} else if (rememberPattern && this.agentTools.get(toolName)?.getApprovalPatternKey) {
|
|
1285
|
+
this.approvalManager.addPattern(toolName, rememberPattern);
|
|
1286
|
+
this.logger.info(`Pattern '${rememberPattern}' added for tool '${toolName}' approval`);
|
|
1287
|
+
this.autoApprovePendingPatternRequests(toolName, sessionId);
|
|
1239
1288
|
}
|
|
1240
1289
|
}
|
|
1241
1290
|
/**
|