@dexto/core 1.7.1 → 1.8.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/dist/agent/DextoAgent.cjs +157 -62
- package/dist/agent/DextoAgent.d.ts +71 -17
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +161 -63
- package/dist/agent/agent-options.d.ts +6 -10
- package/dist/agent/agent-options.d.ts.map +1 -1
- package/dist/agent/agentCard.js +1 -1
- package/dist/agent/error-codes.js +1 -1
- package/dist/agent/errors.js +1 -1
- package/dist/agent/index.d.ts +1 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +1 -1
- package/dist/agent/schemas.d.ts +2 -2
- package/dist/agent/schemas.js +1 -1
- package/dist/agent/state-manager.js +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 +2 -2
- package/dist/approval/errors.cjs +2 -5
- package/dist/approval/errors.d.ts.map +1 -1
- package/dist/approval/errors.js +3 -6
- package/dist/approval/factory.cjs +19 -4
- package/dist/approval/factory.d.ts +4 -1
- package/dist/approval/factory.d.ts.map +1 -1
- package/dist/approval/factory.js +19 -5
- package/dist/approval/index.d.ts +1 -1
- package/dist/approval/index.d.ts.map +1 -1
- package/dist/approval/index.js +1 -1
- package/dist/approval/manager.cjs +168 -26
- package/dist/approval/manager.d.ts +46 -12
- package/dist/approval/manager.d.ts.map +1 -1
- package/dist/approval/manager.js +177 -29
- package/dist/approval/schemas.cjs +26 -26
- package/dist/approval/schemas.d.ts +29 -29
- package/dist/approval/schemas.d.ts.map +1 -1
- package/dist/approval/schemas.js +23 -23
- package/dist/approval/types.cjs +5 -5
- package/dist/approval/types.d.ts +18 -18
- package/dist/approval/types.d.ts.map +1 -1
- package/dist/approval/types.js +6 -6
- package/dist/{chunk-PTJYTZNU.js → chunk-C6A6W6XS.js} +1 -44
- package/dist/config/index.cjs +75 -0
- package/dist/config/index.d.ts +15 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +50 -0
- package/dist/context/compaction/overflow.js +1 -1
- package/dist/context/compaction/strategies/noop.js +1 -1
- package/dist/context/compaction/strategies/reactive-overflow-compaction.js +1 -1
- package/dist/context/content-clone.cjs +131 -0
- package/dist/context/content-clone.d.ts +7 -0
- package/dist/context/content-clone.d.ts.map +1 -0
- package/dist/context/content-clone.js +104 -0
- package/dist/context/error-codes.js +1 -1
- package/dist/context/errors.js +1 -1
- package/dist/context/index.cjs +2 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -1
- package/dist/context/manager.cjs +47 -35
- package/dist/context/manager.d.ts +7 -7
- package/dist/context/manager.d.ts.map +1 -1
- package/dist/context/manager.js +48 -36
- package/dist/context/media-helpers.js +1 -1
- package/dist/context/schemas.cjs +77 -0
- package/dist/context/schemas.d.ts +5 -0
- package/dist/context/schemas.d.ts.map +1 -0
- package/dist/context/schemas.js +53 -0
- package/dist/context/types.js +1 -1
- package/dist/context/utils.cjs +70 -69
- package/dist/context/utils.d.ts +3 -3
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +71 -70
- package/dist/errors/DextoBaseError.js +1 -1
- package/dist/errors/DextoRuntimeError.js +1 -1
- package/dist/errors/DextoValidationError.js +1 -1
- package/dist/errors/index.js +1 -1
- package/dist/errors/result-bridge.js +1 -1
- package/dist/errors/types.js +1 -1
- package/dist/events/index.cjs +9 -1
- package/dist/events/index.d.ts +20 -8
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -2
- package/dist/hooks/builtins/content-policy.js +1 -1
- package/dist/hooks/builtins/response-sanitizer.js +1 -1
- package/dist/hooks/error-codes.js +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/manager.cjs +1 -1
- package/dist/hooks/manager.d.ts +2 -2
- package/dist/hooks/manager.d.ts.map +1 -1
- package/dist/hooks/manager.js +2 -2
- package/dist/hooks/types.d.ts +2 -2
- package/dist/hooks/types.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.cjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/llm/curation-config.js +1 -1
- package/dist/llm/curation.js +1 -1
- package/dist/llm/error-codes.js +1 -1
- package/dist/llm/errors.js +1 -1
- package/dist/llm/executor/index.cjs +32 -0
- package/dist/llm/executor/index.d.ts +2 -0
- package/dist/llm/executor/index.d.ts.map +1 -0
- package/dist/llm/executor/index.js +11 -0
- package/dist/llm/executor/provider-options.js +1 -1
- package/dist/llm/executor/stream-processor.cjs +28 -139
- package/dist/llm/executor/stream-processor.d.ts +2 -13
- package/dist/llm/executor/stream-processor.d.ts.map +1 -1
- package/dist/llm/executor/stream-processor.js +29 -140
- package/dist/{session/history/memory.cjs → llm/executor/tool-definitions.cjs} +21 -33
- package/dist/llm/executor/tool-definitions.d.ts +4 -0
- package/dist/llm/executor/tool-definitions.d.ts.map +1 -0
- package/dist/llm/executor/tool-definitions.js +22 -0
- package/dist/llm/executor/tool-output-truncator.js +1 -1
- package/dist/llm/executor/turn-executor.cjs +1093 -458
- package/dist/llm/executor/turn-executor.d.ts +269 -43
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +1079 -405
- package/dist/llm/executor/types.d.ts +6 -0
- package/dist/llm/executor/types.d.ts.map +1 -1
- package/dist/llm/formatters/vercel.js +1 -1
- package/dist/llm/index.cjs +2 -0
- package/dist/llm/index.d.ts +1 -0
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +2 -1
- package/dist/llm/providers/codex-app-server.cjs +22 -2
- package/dist/llm/providers/codex-app-server.d.ts.map +1 -1
- package/dist/llm/providers/codex-app-server.js +23 -3
- package/dist/llm/providers/codex-base-url.js +1 -1
- package/dist/llm/providers/local/ai-sdk-adapter.js +1 -1
- package/dist/llm/providers/local/downloader.js +1 -1
- package/dist/llm/providers/local/error-codes.js +1 -1
- package/dist/llm/providers/local/errors.js +1 -1
- package/dist/llm/providers/local/gpu-detector.js +1 -1
- package/dist/llm/providers/local/index.js +1 -1
- package/dist/llm/providers/local/node-llama-provider.js +1 -1
- package/dist/llm/providers/local/ollama-provider.js +1 -1
- package/dist/llm/providers/local/registry.js +1 -1
- package/dist/llm/providers/local/schemas.js +1 -1
- package/dist/llm/providers/openrouter-model-registry.js +1 -1
- package/dist/llm/reasoning/anthropic-betas.js +1 -1
- package/dist/llm/reasoning/anthropic-thinking.js +1 -1
- package/dist/llm/reasoning/openai-reasoning-effort.js +1 -1
- package/dist/llm/reasoning/profile.js +1 -1
- package/dist/llm/reasoning/profiles/anthropic.js +1 -1
- package/dist/llm/reasoning/profiles/bedrock.js +1 -1
- package/dist/llm/reasoning/profiles/google.js +1 -1
- package/dist/llm/reasoning/profiles/openai-compatible.js +1 -1
- package/dist/llm/reasoning/profiles/openai.js +1 -1
- package/dist/llm/reasoning/profiles/openrouter.js +1 -1
- package/dist/llm/reasoning/profiles/shared.js +1 -1
- package/dist/llm/reasoning/profiles/vertex.js +1 -1
- package/dist/llm/registry/auto-update.js +1 -1
- package/dist/llm/registry/index.js +1 -1
- package/dist/llm/registry/models.generated.js +1 -1
- package/dist/llm/registry/models.manual.js +1 -1
- package/dist/llm/registry/sync.js +1 -1
- package/dist/llm/resolver.js +1 -1
- package/dist/llm/schemas.js +1 -1
- package/dist/llm/services/factory.cjs +5 -4
- package/dist/llm/services/factory.d.ts +3 -3
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +6 -5
- package/dist/llm/services/types.d.ts +10 -1
- package/dist/llm/services/types.d.ts.map +1 -1
- package/dist/llm/services/vercel.cjs +23 -8
- package/dist/llm/services/vercel.d.ts +11 -7
- package/dist/llm/services/vercel.d.ts.map +1 -1
- package/dist/llm/services/vercel.js +24 -9
- package/dist/llm/types.js +1 -1
- package/dist/llm/usage-metadata.cjs +20 -3
- package/dist/llm/usage-metadata.d.ts +1 -0
- package/dist/llm/usage-metadata.d.ts.map +1 -1
- package/dist/llm/usage-metadata.js +19 -3
- package/dist/llm/usage-scope.js +1 -1
- package/dist/llm/usage-summary.js +1 -1
- package/dist/llm/validation.js +1 -1
- package/dist/logger/browser.js +1 -1
- package/dist/logger/default-logger-factory.js +1 -1
- package/dist/logger/factory.js +1 -1
- package/dist/logger/index.js +1 -1
- package/dist/logger/logger.js +1 -1
- package/dist/logger/v2/dexto-logger.js +1 -1
- package/dist/logger/v2/error-codes.js +1 -1
- package/dist/logger/v2/errors.js +1 -1
- package/dist/logger/v2/schemas.js +1 -1
- package/dist/logger/v2/test-utils.js +1 -1
- package/dist/logger/v2/transport-factory.js +1 -1
- package/dist/logger/v2/transports/console-transport.js +1 -1
- package/dist/logger/v2/transports/file-transport.js +1 -1
- package/dist/logger/v2/transports/silent-transport.js +1 -1
- package/dist/logger/v2/types.js +1 -1
- package/dist/mcp/bundled-config.js +1 -1
- package/dist/mcp/error-codes.js +1 -1
- package/dist/mcp/errors.js +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/manager.js +1 -1
- package/dist/mcp/mcp-client.js +1 -1
- package/dist/mcp/resolver.js +1 -1
- package/dist/mcp/schemas.js +1 -1
- package/dist/memory/error-codes.js +1 -1
- package/dist/memory/errors.js +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/manager.cjs +7 -27
- package/dist/memory/manager.d.ts +4 -12
- package/dist/memory/manager.d.ts.map +1 -1
- package/dist/memory/manager.js +8 -28
- package/dist/memory/schemas.js +1 -1
- package/dist/prompts/error-codes.js +1 -1
- package/dist/prompts/errors.js +1 -1
- package/dist/prompts/index.js +1 -1
- package/dist/prompts/name-validation.js +1 -1
- package/dist/prompts/prompt-manager.cjs +9 -38
- package/dist/prompts/prompt-manager.d.ts +2 -10
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +10 -39
- package/dist/prompts/providers/config-prompt-provider.cjs +8 -87
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +9 -88
- package/dist/prompts/providers/custom-prompt-provider.cjs +21 -22
- package/dist/prompts/providers/custom-prompt-provider.d.ts +19 -4
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +22 -23
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -1
- package/dist/prompts/schemas.cjs +2 -24
- package/dist/prompts/schemas.d.ts +0 -52
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +3 -25
- package/dist/prompts/types.d.ts +5 -32
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/prompts/utils.js +1 -1
- package/dist/resources/agent-resources-provider.js +1 -1
- package/dist/resources/error-codes.js +1 -1
- package/dist/resources/errors.js +1 -1
- package/dist/resources/handlers/blob-handler.cjs +14 -11
- package/dist/resources/handlers/blob-handler.d.ts +4 -4
- package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
- package/dist/resources/handlers/blob-handler.js +15 -12
- package/dist/resources/handlers/factory.cjs +3 -3
- package/dist/resources/handlers/factory.js +4 -4
- package/dist/resources/handlers/filesystem-handler.js +1 -1
- package/dist/resources/handlers/types.d.ts +2 -2
- package/dist/resources/handlers/types.d.ts.map +1 -1
- package/dist/resources/index.js +1 -1
- package/dist/resources/manager.cjs +10 -7
- package/dist/resources/manager.d.ts +4 -4
- package/dist/resources/manager.d.ts.map +1 -1
- package/dist/resources/manager.js +11 -8
- package/dist/resources/reference-parser.js +1 -1
- package/dist/resources/schemas.cjs +1 -1
- package/dist/resources/schemas.d.ts +2 -2
- package/dist/resources/schemas.js +2 -2
- package/dist/runtime/host-runtime.js +1 -1
- package/dist/runtime/index.cjs +3 -0
- package/dist/runtime/index.d.ts +2 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/run-context.js +1 -1
- package/dist/search/index.js +1 -1
- package/dist/search/search-service.cjs +6 -13
- package/dist/search/search-service.d.ts +5 -3
- package/dist/search/search-service.d.ts.map +1 -1
- package/dist/search/search-service.js +7 -14
- package/dist/session/chat-session.cjs +264 -108
- package/dist/session/chat-session.d.ts +75 -21
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/chat-session.js +268 -108
- package/dist/session/error-codes.js +1 -1
- package/dist/session/errors.js +1 -1
- package/dist/session/index.cjs +19 -2
- package/dist/session/index.d.ts +4 -3
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +19 -3
- package/dist/session/message-queue.cjs +82 -51
- package/dist/session/message-queue.d.ts +13 -8
- package/dist/session/message-queue.d.ts.map +1 -1
- package/dist/session/message-queue.js +83 -52
- package/dist/session/queue-clone.cjs +50 -0
- package/dist/session/queue-clone.d.ts +5 -0
- package/dist/session/queue-clone.d.ts.map +1 -0
- package/dist/session/queue-clone.js +25 -0
- package/dist/session/schemas.cjs +74 -2
- package/dist/session/schemas.d.ts +94 -0
- package/dist/session/schemas.d.ts.map +1 -1
- package/dist/session/schemas.js +69 -2
- package/dist/session/session-manager.cjs +107 -123
- package/dist/session/session-manager.d.ts +7 -6
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +108 -124
- package/dist/session/title-generator.cjs +14 -26
- package/dist/session/title-generator.d.ts +4 -6
- package/dist/session/title-generator.d.ts.map +1 -1
- package/dist/session/title-generator.js +16 -28
- package/dist/session/types.cjs +28 -0
- package/dist/session/types.d.ts +5 -1
- package/dist/session/types.d.ts.map +1 -1
- package/dist/session/types.js +19 -0
- package/dist/{session/history/factory.cjs → skills/index.cjs} +9 -9
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +7 -0
- package/dist/skills/skill-manager.cjs +76 -0
- package/dist/skills/skill-manager.d.ts +13 -0
- package/dist/skills/skill-manager.d.ts.map +1 -0
- package/dist/skills/skill-manager.js +53 -0
- package/dist/skills/types.d.ts +24 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/workspace-skill-source.cjs +120 -0
- package/dist/skills/workspace-skill-source.d.ts +16 -0
- package/dist/skills/workspace-skill-source.d.ts.map +1 -0
- package/dist/skills/workspace-skill-source.js +97 -0
- package/dist/storage/approvals/types.cjs +38 -0
- package/dist/storage/approvals/types.d.ts +54 -0
- package/dist/storage/approvals/types.d.ts.map +1 -0
- package/dist/storage/approvals/types.js +14 -0
- package/dist/storage/artifacts/types.d.ts +73 -0
- package/dist/storage/artifacts/types.d.ts.map +1 -0
- package/dist/storage/conversation/database.cjs +233 -0
- package/dist/storage/conversation/database.d.ts +38 -0
- package/dist/storage/conversation/database.d.ts.map +1 -0
- package/dist/storage/conversation/database.js +210 -0
- package/dist/storage/conversation/types.cjs +16 -0
- package/dist/storage/conversation/types.d.ts +21 -0
- package/dist/storage/conversation/types.d.ts.map +1 -0
- package/dist/storage/conversation/types.js +0 -0
- package/dist/storage/database/types.d.ts +4 -0
- package/dist/storage/database/types.d.ts.map +1 -1
- package/dist/storage/error-codes.js +1 -1
- package/dist/storage/errors.cjs +6 -6
- package/dist/storage/errors.d.ts +2 -2
- package/dist/storage/errors.js +7 -7
- package/dist/storage/index.cjs +42 -5
- package/dist/storage/index.d.ts +19 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +39 -4
- package/dist/storage/memories/types.cjs +16 -0
- package/dist/storage/memories/types.d.ts +17 -0
- package/dist/storage/memories/types.d.ts.map +1 -0
- package/dist/storage/memories/types.js +0 -0
- package/dist/storage/message-queue/types.cjs +16 -0
- package/dist/storage/message-queue/types.d.ts +15 -0
- package/dist/storage/message-queue/types.d.ts.map +1 -0
- package/dist/storage/message-queue/types.js +0 -0
- package/dist/storage/prompts/types.cjs +16 -0
- package/dist/storage/prompts/types.d.ts +14 -0
- package/dist/storage/prompts/types.d.ts.map +1 -0
- package/dist/storage/prompts/types.js +0 -0
- package/dist/storage/runtime-events/types.cjs +16 -0
- package/dist/storage/runtime-events/types.d.ts +19 -0
- package/dist/storage/runtime-events/types.d.ts.map +1 -0
- package/dist/storage/runtime-events/types.js +0 -0
- package/dist/storage/sessions/types.cjs +16 -0
- package/dist/storage/sessions/types.d.ts +19 -0
- package/dist/storage/sessions/types.d.ts.map +1 -0
- package/dist/storage/sessions/types.js +0 -0
- package/dist/storage/stores/backend.cjs +702 -0
- package/dist/storage/stores/backend.d.ts +303 -0
- package/dist/storage/stores/backend.d.ts.map +1 -0
- package/dist/storage/stores/backend.js +677 -0
- package/dist/storage/stores/in-memory.cjs +510 -0
- package/dist/storage/stores/in-memory.d.ts +11 -0
- package/dist/storage/stores/in-memory.d.ts.map +1 -0
- package/dist/storage/stores/in-memory.js +487 -0
- package/dist/storage/stores/types.cjs +16 -0
- package/dist/storage/stores/types.d.ts +36 -0
- package/dist/storage/stores/types.d.ts.map +1 -0
- package/dist/storage/stores/types.js +0 -0
- package/dist/storage/tool-executions/types.cjs +127 -0
- package/dist/storage/tool-executions/types.d.ts +193 -0
- package/dist/storage/tool-executions/types.d.ts.map +1 -0
- package/dist/storage/tool-executions/types.js +96 -0
- package/dist/storage/tool-preferences/types.cjs +16 -0
- package/dist/storage/tool-preferences/types.d.ts +29 -0
- package/dist/storage/tool-preferences/types.d.ts.map +1 -0
- package/dist/storage/tool-preferences/types.js +0 -0
- package/dist/storage/tool-state/types.cjs +16 -0
- package/dist/storage/tool-state/types.d.ts +20 -0
- package/dist/storage/tool-state/types.d.ts.map +1 -0
- package/dist/storage/tool-state/types.js +0 -0
- package/dist/storage/workspaces/types.cjs +16 -0
- package/dist/storage/workspaces/types.d.ts +19 -0
- package/dist/storage/workspaces/types.d.ts.map +1 -0
- package/dist/storage/workspaces/types.js +0 -0
- package/dist/systemPrompt/contributors.cjs +10 -14
- package/dist/systemPrompt/contributors.d.ts +3 -3
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.js +11 -15
- package/dist/systemPrompt/error-codes.js +1 -1
- package/dist/systemPrompt/errors.js +1 -1
- package/dist/systemPrompt/in-built-prompts.js +1 -1
- package/dist/systemPrompt/index.js +1 -1
- package/dist/systemPrompt/manager.js +1 -1
- package/dist/systemPrompt/registry.js +1 -1
- package/dist/systemPrompt/schemas.js +1 -1
- package/dist/telemetry/decorators.js +1 -1
- package/dist/telemetry/error-codes.js +1 -1
- package/dist/telemetry/errors.js +1 -1
- package/dist/telemetry/exporters.js +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/schemas.js +1 -1
- package/dist/telemetry/telemetry.js +1 -1
- package/dist/telemetry/utils.js +1 -1
- package/dist/test-utils/in-memory-storage.cjs +9 -17
- package/dist/test-utils/in-memory-storage.js +9 -16
- package/dist/test-utils/session-state-stores.cjs +21 -24
- package/dist/test-utils/session-state-stores.js +22 -24
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.cjs +1 -1
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.d.ts +2 -2
- package/dist/tools/approval/allowed-tools-provider/factory.d.ts.map +1 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/factory.js +2 -2
- package/dist/tools/approval/allowed-tools-provider/in-memory.d.ts.map +1 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.js +1 -1
- package/dist/tools/approval/allowed-tools-provider/storage.cjs +66 -0
- package/dist/tools/{confirmation → approval}/allowed-tools-provider/storage.d.ts +4 -10
- package/dist/tools/approval/allowed-tools-provider/storage.d.ts.map +1 -0
- package/dist/tools/approval/allowed-tools-provider/storage.js +43 -0
- package/dist/tools/approval/allowed-tools-provider/types.cjs +16 -0
- package/dist/tools/approval/allowed-tools-provider/types.d.ts.map +1 -0
- package/dist/tools/approval/allowed-tools-provider/types.js +0 -0
- package/dist/tools/approval/session-tool-policy.cjs +269 -0
- package/dist/tools/approval/session-tool-policy.d.ts +43 -0
- package/dist/tools/approval/session-tool-policy.d.ts.map +1 -0
- package/dist/tools/approval/session-tool-policy.js +245 -0
- package/dist/tools/define-tool.js +1 -1
- package/dist/tools/display-types.js +1 -1
- package/dist/tools/error-codes.cjs +3 -3
- package/dist/tools/error-codes.d.ts +4 -4
- package/dist/tools/error-codes.d.ts.map +1 -1
- package/dist/tools/error-codes.js +4 -4
- package/dist/tools/errors.cjs +12 -12
- package/dist/tools/errors.d.ts +6 -6
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +13 -13
- package/dist/tools/index.cjs +3 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +3 -1
- package/dist/tools/pattern-utils.js +1 -1
- package/dist/tools/presentation/tool-presentation.cjs +182 -0
- package/dist/tools/presentation/tool-presentation.d.ts +51 -0
- package/dist/tools/presentation/tool-presentation.d.ts.map +1 -0
- package/dist/tools/presentation/tool-presentation.js +159 -0
- package/dist/tools/presentation.js +1 -1
- package/dist/tools/schemas.cjs +5 -10
- package/dist/tools/schemas.d.ts +1 -4
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +6 -11
- package/dist/tools/session-tool-preferences-store.cjs +12 -28
- package/dist/tools/session-tool-preferences-store.d.ts +4 -7
- package/dist/tools/session-tool-preferences-store.d.ts.map +1 -1
- package/dist/tools/session-tool-preferences-store.js +12 -29
- package/dist/tools/tool-call-metadata.js +1 -1
- package/dist/tools/tool-manager.cjs +871 -834
- package/dist/tools/tool-manager.d.ts +94 -96
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +876 -833
- package/dist/tools/types.d.ts +10 -14
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +1 -1
- package/dist/utils/async-context.js +1 -1
- package/dist/utils/debug.js +1 -1
- package/dist/utils/defer.js +1 -1
- package/dist/utils/env.js +1 -1
- package/dist/utils/error-conversion.js +1 -1
- package/dist/utils/execution-context.js +1 -1
- package/dist/utils/fs-walk.js +1 -1
- package/dist/utils/path.js +1 -1
- package/dist/utils/redactor.js +1 -1
- package/dist/utils/result.js +1 -1
- package/dist/utils/safe-stringify.js +1 -1
- package/dist/utils/schema.js +1 -1
- package/dist/utils/service-initializer.cjs +37 -33
- package/dist/utils/service-initializer.d.ts +9 -5
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +38 -34
- package/dist/utils/zod-schema-converter.js +1 -1
- package/dist/workspace/error-codes.cjs +5 -1
- package/dist/workspace/error-codes.d.ts +4 -0
- package/dist/workspace/error-codes.d.ts.map +1 -1
- package/dist/workspace/error-codes.js +6 -2
- package/dist/workspace/errors.cjs +43 -0
- package/dist/workspace/errors.d.ts +9 -0
- package/dist/workspace/errors.d.ts.map +1 -1
- package/dist/workspace/errors.js +44 -1
- package/dist/workspace/index.d.ts +1 -1
- package/dist/workspace/index.d.ts.map +1 -1
- package/dist/workspace/index.js +1 -1
- package/dist/workspace/manager.cjs +21 -29
- package/dist/workspace/manager.d.ts +6 -6
- package/dist/workspace/manager.d.ts.map +1 -1
- package/dist/workspace/manager.js +22 -30
- package/dist/workspace/types.d.ts +47 -0
- package/dist/workspace/types.d.ts.map +1 -1
- package/package.json +114 -2
- package/dist/approval/session-approval-store.cjs +0 -91
- package/dist/approval/session-approval-store.d.ts +0 -37
- package/dist/approval/session-approval-store.d.ts.map +0 -1
- package/dist/approval/session-approval-store.js +0 -68
- package/dist/session/history/database.cjs +0 -232
- package/dist/session/history/database.d.ts +0 -41
- package/dist/session/history/database.d.ts.map +0 -1
- package/dist/session/history/database.js +0 -209
- package/dist/session/history/factory.d.ts +0 -11
- package/dist/session/history/factory.d.ts.map +0 -1
- package/dist/session/history/factory.js +0 -8
- package/dist/session/history/memory.d.ts +0 -22
- package/dist/session/history/memory.d.ts.map +0 -1
- package/dist/session/history/memory.js +0 -34
- package/dist/session/history/types.d.ts +0 -26
- package/dist/session/history/types.d.ts.map +0 -1
- package/dist/session/message-queue-store.cjs +0 -75
- package/dist/session/message-queue-store.d.ts +0 -16
- package/dist/session/message-queue-store.d.ts.map +0 -1
- package/dist/session/message-queue-store.js +0 -52
- package/dist/storage/storage-manager.cjs +0 -209
- package/dist/storage/storage-manager.d.ts +0 -77
- package/dist/storage/storage-manager.d.ts.map +0 -1
- package/dist/storage/storage-manager.js +0 -186
- package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.cjs +0 -69
- package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +0 -1
- package/dist/tools/confirmation/allowed-tools-provider/storage.js +0 -46
- package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +0 -1
- /package/dist/{session/history → skills}/types.cjs +0 -0
- /package/dist/{session/history → skills}/types.js +0 -0
- /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.cjs +0 -0
- /package/dist/{tools/confirmation/allowed-tools-provider → storage/artifacts}/types.js +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.cjs +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/in-memory.d.ts +0 -0
- /package/dist/tools/{confirmation → approval}/allowed-tools-provider/types.d.ts +0 -0
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import type { ApprovalHandler, ApprovalRequest, ApprovalResponse, ApprovalRequestDetails, ToolApprovalMetadata,
|
|
1
|
+
import type { ApprovalHandler, ApprovalRequest, ApprovalResponse, ApprovalRequestDetails, ToolApprovalMetadata, CommandApprovalMetadata, ElicitationMetadata, DirectoryAccessMetadata } from './types.js';
|
|
2
|
+
import { ApprovalStatus } from './types.js';
|
|
2
3
|
import type { Logger } from '../logger/v2/types.js';
|
|
3
4
|
import type { PermissionsMode } from '../tools/schemas.js';
|
|
4
|
-
import {
|
|
5
|
+
import type { ApprovalStore } from '../storage/approvals/types.js';
|
|
6
|
+
export type ApprovalRecordIdentity = {
|
|
7
|
+
runId: string;
|
|
8
|
+
turnId: string;
|
|
9
|
+
modelStepId: string;
|
|
10
|
+
toolCallId: string;
|
|
11
|
+
};
|
|
12
|
+
export type ApprovalDecisionInput = {
|
|
13
|
+
approvalId: ApprovalRequest['approvalId'];
|
|
14
|
+
status: typeof ApprovalStatus.APPROVED;
|
|
15
|
+
data?: ApprovalResponse['data'];
|
|
16
|
+
} | {
|
|
17
|
+
approvalId: ApprovalRequest['approvalId'];
|
|
18
|
+
status: typeof ApprovalStatus.DENIED | typeof ApprovalStatus.CANCELLED;
|
|
19
|
+
reason?: ApprovalResponse['reason'];
|
|
20
|
+
message?: string;
|
|
21
|
+
timeoutMs?: number;
|
|
22
|
+
data?: ApprovalResponse['data'];
|
|
23
|
+
};
|
|
24
|
+
export type ApprovalResponseRecord = {
|
|
25
|
+
response: ApprovalResponse;
|
|
26
|
+
status: 'created' | 'replayed';
|
|
27
|
+
};
|
|
5
28
|
/**
|
|
6
29
|
* Configuration for the approval manager
|
|
7
30
|
*/
|
|
@@ -27,7 +50,7 @@ export interface ApprovalManagerConfig {
|
|
|
27
50
|
* - Route approvals to appropriate providers
|
|
28
51
|
* - Provide convenience methods for specific approval types
|
|
29
52
|
* - Handle approval responses and errors
|
|
30
|
-
* - Support multiple approval modes (manual, auto-approve
|
|
53
|
+
* - Support multiple approval modes (manual, auto-approve)
|
|
31
54
|
*
|
|
32
55
|
* @example
|
|
33
56
|
* ```typescript
|
|
@@ -49,22 +72,25 @@ export interface ApprovalManagerConfig {
|
|
|
49
72
|
* ```
|
|
50
73
|
*/
|
|
51
74
|
export declare class ApprovalManager {
|
|
52
|
-
private readonly
|
|
75
|
+
private readonly approvalStore;
|
|
53
76
|
private handler;
|
|
54
77
|
private config;
|
|
55
78
|
private logger;
|
|
56
79
|
private readonly loadedScopes;
|
|
57
80
|
private readonly scopeLocks;
|
|
81
|
+
private readonly approvalRecordLocks;
|
|
58
82
|
private readonly scopes;
|
|
59
|
-
constructor(config: ApprovalManagerConfig, logger: Logger,
|
|
83
|
+
constructor(config: ApprovalManagerConfig, logger: Logger, approvalStore: ApprovalStore);
|
|
60
84
|
private getScopeKey;
|
|
61
85
|
private getScopeLabel;
|
|
86
|
+
private sessionScope;
|
|
62
87
|
private getApprovalTimeout;
|
|
63
88
|
private getDefaultTimeout;
|
|
64
89
|
private createEmptyScopeState;
|
|
65
90
|
private getOrCreateScope;
|
|
66
91
|
private getScope;
|
|
67
92
|
private runWithScopeLock;
|
|
93
|
+
private runWithApprovalRecordLock;
|
|
68
94
|
private snapshotToolPatterns;
|
|
69
95
|
private snapshotApprovedDirectories;
|
|
70
96
|
private persistScope;
|
|
@@ -168,7 +194,11 @@ export declare class ApprovalManager {
|
|
|
168
194
|
*/
|
|
169
195
|
clearSessionApprovals(sessionId?: string): Promise<void>;
|
|
170
196
|
private createApprovalDetails;
|
|
197
|
+
private withDefaultTimeout;
|
|
198
|
+
private approvalIdentityKey;
|
|
199
|
+
private assertMatchingRecordedRequest;
|
|
171
200
|
private createResponse;
|
|
201
|
+
private parseResponseForRequest;
|
|
172
202
|
private getElicitationFormData;
|
|
173
203
|
/**
|
|
174
204
|
* Request directory access approval.
|
|
@@ -194,8 +224,12 @@ export declare class ApprovalManager {
|
|
|
194
224
|
* Request a generic approval
|
|
195
225
|
*/
|
|
196
226
|
requestApproval(details: ApprovalRequestDetails): Promise<ApprovalResponse>;
|
|
227
|
+
recordApprovalRequest(details: ApprovalRequestDetails, identity: ApprovalRecordIdentity): Promise<ApprovalRequest>;
|
|
228
|
+
recordApprovalResponse(decision: ApprovalDecisionInput): Promise<ApprovalResponse>;
|
|
229
|
+
recordApprovalResponseRecord(decision: ApprovalDecisionInput, expectedRequest?: ApprovalRequest): Promise<ApprovalResponseRecord>;
|
|
230
|
+
requestApprovalDecision(request: ApprovalRequest): Promise<ApprovalResponse>;
|
|
197
231
|
/**
|
|
198
|
-
* Handle approval requests (tool approval, elicitation, command
|
|
232
|
+
* Handle approval requests (tool approval, elicitation, command approval, directory access, custom)
|
|
199
233
|
* @private
|
|
200
234
|
*/
|
|
201
235
|
private handleApproval;
|
|
@@ -204,7 +238,7 @@ export declare class ApprovalManager {
|
|
|
204
238
|
* Convenience method for tool execution approval
|
|
205
239
|
*
|
|
206
240
|
* TODO: Make sessionId required once all callers are updated to pass it
|
|
207
|
-
* Tool
|
|
241
|
+
* Tool approvals always happen in session context during LLM execution
|
|
208
242
|
*/
|
|
209
243
|
requestToolApproval(metadata: ToolApprovalMetadata & {
|
|
210
244
|
sessionId?: string;
|
|
@@ -212,19 +246,19 @@ export declare class ApprovalManager {
|
|
|
212
246
|
timeout?: number;
|
|
213
247
|
}): Promise<ApprovalResponse>;
|
|
214
248
|
/**
|
|
215
|
-
* Request command
|
|
249
|
+
* Request command approval
|
|
216
250
|
* Convenience method for dangerous command execution within an already-approved tool
|
|
217
251
|
*
|
|
218
252
|
* This is different from tool approval - it's for per-command approval
|
|
219
253
|
* of dangerous operations (like rm, git push) within tools that are already approved.
|
|
220
254
|
*
|
|
221
255
|
* TODO: Make sessionId required once all callers are updated to pass it
|
|
222
|
-
* Command
|
|
256
|
+
* Command approvals always happen during tool execution which has session context
|
|
223
257
|
*
|
|
224
258
|
* @example
|
|
225
259
|
* ```typescript
|
|
226
260
|
* // bash_exec tool is approved, but dangerous commands still require approval
|
|
227
|
-
* const response = await manager.
|
|
261
|
+
* const response = await manager.requestCommandApproval({
|
|
228
262
|
* toolName: 'bash_exec',
|
|
229
263
|
* command: 'rm -rf /important',
|
|
230
264
|
* originalCommand: 'rm -rf /important',
|
|
@@ -232,7 +266,7 @@ export declare class ApprovalManager {
|
|
|
232
266
|
* });
|
|
233
267
|
* ```
|
|
234
268
|
*/
|
|
235
|
-
|
|
269
|
+
requestCommandApproval(metadata: CommandApprovalMetadata & {
|
|
236
270
|
sessionId?: string;
|
|
237
271
|
hostRuntime?: ApprovalRequestDetails['hostRuntime'];
|
|
238
272
|
timeout?: number;
|
|
@@ -301,7 +335,7 @@ export declare class ApprovalManager {
|
|
|
301
335
|
* Set the approval handler for manual approval mode.
|
|
302
336
|
*
|
|
303
337
|
* The handler will be called for:
|
|
304
|
-
* - Tool
|
|
338
|
+
* - Tool approval requests when permissions.mode is 'manual'
|
|
305
339
|
* - All elicitation requests (when elicitation is enabled, regardless of permissions.mode)
|
|
306
340
|
*
|
|
307
341
|
* A handler must be set before processing requests if:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/approval/manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/approval/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/approval/manager.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
|
-
import "../chunk-
|
|
1
|
+
import "../chunk-C6A6W6XS.js";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { realpathSync } from "node:fs";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { isDeepStrictEqual } from "node:util";
|
|
5
|
+
import { ApprovalType, ApprovalStatus } from "./types.js";
|
|
6
|
+
import {
|
|
7
|
+
CommandApprovalResponseSchema,
|
|
8
|
+
CustomApprovalResponseSchema,
|
|
9
|
+
DirectoryAccessResponseSchema,
|
|
10
|
+
ElicitationResponseSchema,
|
|
11
|
+
ToolApprovalResponseSchema
|
|
12
|
+
} from "./schemas.js";
|
|
13
|
+
import { createApprovalRequest, createDeterministicApprovalId } from "./factory.js";
|
|
6
14
|
import { DextoLogComponent } from "../logger/v2/types.js";
|
|
7
15
|
import { ApprovalError } from "./errors.js";
|
|
8
16
|
import { patternCovers } from "../tools/pattern-utils.js";
|
|
@@ -32,8 +40,8 @@ function tryRealpathSyncWithExistingParent(resolvedPath) {
|
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
class ApprovalManager {
|
|
35
|
-
constructor(config, logger,
|
|
36
|
-
this.
|
|
43
|
+
constructor(config, logger, approvalStore) {
|
|
44
|
+
this.approvalStore = approvalStore;
|
|
37
45
|
this.config = config;
|
|
38
46
|
this.logger = logger.createChild(DextoLogComponent.APPROVAL);
|
|
39
47
|
this.logger.debug(
|
|
@@ -45,6 +53,7 @@ class ApprovalManager {
|
|
|
45
53
|
logger;
|
|
46
54
|
loadedScopes = /* @__PURE__ */ new Set();
|
|
47
55
|
scopeLocks = /* @__PURE__ */ new Map();
|
|
56
|
+
approvalRecordLocks = /* @__PURE__ */ new Map();
|
|
48
57
|
scopes = /* @__PURE__ */ new Map();
|
|
49
58
|
getScopeKey(sessionId) {
|
|
50
59
|
return sessionId ?? GLOBAL_APPROVAL_SCOPE;
|
|
@@ -52,6 +61,9 @@ class ApprovalManager {
|
|
|
52
61
|
getScopeLabel(sessionId) {
|
|
53
62
|
return sessionId ?? "global";
|
|
54
63
|
}
|
|
64
|
+
sessionScope(sessionId) {
|
|
65
|
+
return sessionId === void 0 ? {} : { sessionId };
|
|
66
|
+
}
|
|
55
67
|
getApprovalTimeout(type, timeout) {
|
|
56
68
|
return timeout ?? this.getDefaultTimeout(type);
|
|
57
69
|
}
|
|
@@ -91,6 +103,23 @@ class ApprovalManager {
|
|
|
91
103
|
}
|
|
92
104
|
}
|
|
93
105
|
}
|
|
106
|
+
async runWithApprovalRecordLock(approvalId, fn) {
|
|
107
|
+
const previousLock = this.approvalRecordLocks.get(approvalId) ?? Promise.resolve();
|
|
108
|
+
const currentResult = previousLock.catch(() => {
|
|
109
|
+
}).then(() => fn());
|
|
110
|
+
const currentLock = currentResult.then(
|
|
111
|
+
() => void 0,
|
|
112
|
+
() => void 0
|
|
113
|
+
);
|
|
114
|
+
this.approvalRecordLocks.set(approvalId, currentLock);
|
|
115
|
+
try {
|
|
116
|
+
return await currentResult;
|
|
117
|
+
} finally {
|
|
118
|
+
if (this.approvalRecordLocks.get(approvalId) === currentLock) {
|
|
119
|
+
this.approvalRecordLocks.delete(approvalId);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
94
123
|
snapshotToolPatterns(scopeKey) {
|
|
95
124
|
const snapshot = {};
|
|
96
125
|
for (const [toolName, patterns] of this.getScope(scopeKey).toolPatterns) {
|
|
@@ -112,7 +141,10 @@ class ApprovalManager {
|
|
|
112
141
|
toolPatterns: this.snapshotToolPatterns(scopeKey),
|
|
113
142
|
approvedDirectories: this.snapshotApprovedDirectories(scopeKey)
|
|
114
143
|
};
|
|
115
|
-
await this.
|
|
144
|
+
await this.approvalStore.saveSessionState({
|
|
145
|
+
...this.sessionScope(sessionId),
|
|
146
|
+
state
|
|
147
|
+
});
|
|
116
148
|
}
|
|
117
149
|
hydrateScope(sessionId, state) {
|
|
118
150
|
const scopeKey = this.getScopeKey(sessionId);
|
|
@@ -138,7 +170,7 @@ class ApprovalManager {
|
|
|
138
170
|
if (this.loadedScopes.has(scopeKey)) {
|
|
139
171
|
return;
|
|
140
172
|
}
|
|
141
|
-
const state = await this.
|
|
173
|
+
const state = await this.approvalStore.loadSessionState(this.sessionScope(sessionId));
|
|
142
174
|
this.hydrateScope(sessionId, state);
|
|
143
175
|
this.loadedScopes.add(scopeKey);
|
|
144
176
|
this.logger.debug("Restored persisted approval state", {
|
|
@@ -157,7 +189,7 @@ class ApprovalManager {
|
|
|
157
189
|
const scopeKey = this.getScopeKey(sessionId);
|
|
158
190
|
await this.runWithScopeLock(scopeKey, async () => {
|
|
159
191
|
this.evictSessionState(sessionId);
|
|
160
|
-
await this.
|
|
192
|
+
await this.approvalStore.deleteSessionState(this.sessionScope(sessionId));
|
|
161
193
|
});
|
|
162
194
|
}
|
|
163
195
|
// ==================== Pattern Methods ====================
|
|
@@ -436,14 +468,71 @@ class ApprovalManager {
|
|
|
436
468
|
}
|
|
437
469
|
return details;
|
|
438
470
|
}
|
|
471
|
+
withDefaultTimeout(details) {
|
|
472
|
+
return {
|
|
473
|
+
...details,
|
|
474
|
+
timeout: this.getApprovalTimeout(details.type, details.timeout)
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
approvalIdentityKey(identity) {
|
|
478
|
+
return JSON.stringify([
|
|
479
|
+
identity.runId,
|
|
480
|
+
identity.turnId,
|
|
481
|
+
identity.modelStepId,
|
|
482
|
+
identity.toolCallId
|
|
483
|
+
]);
|
|
484
|
+
}
|
|
485
|
+
assertMatchingRecordedRequest(existing, candidate) {
|
|
486
|
+
const existingComparable = {
|
|
487
|
+
type: existing.type,
|
|
488
|
+
sessionId: existing.sessionId,
|
|
489
|
+
hostRuntime: existing.hostRuntime,
|
|
490
|
+
timeout: existing.timeout,
|
|
491
|
+
metadata: existing.metadata
|
|
492
|
+
};
|
|
493
|
+
const candidateComparable = {
|
|
494
|
+
type: candidate.type,
|
|
495
|
+
sessionId: candidate.sessionId,
|
|
496
|
+
hostRuntime: candidate.hostRuntime,
|
|
497
|
+
timeout: candidate.timeout,
|
|
498
|
+
metadata: candidate.metadata
|
|
499
|
+
};
|
|
500
|
+
if (!isDeepStrictEqual(existingComparable, candidateComparable)) {
|
|
501
|
+
throw ApprovalError.invalidRequest(
|
|
502
|
+
"Approval request conflicts with existing approval request",
|
|
503
|
+
{
|
|
504
|
+
approvalId: existing.approvalId,
|
|
505
|
+
type: existing.type
|
|
506
|
+
}
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
439
510
|
createResponse(request, response) {
|
|
440
511
|
return {
|
|
512
|
+
status: response.status,
|
|
441
513
|
approvalId: request.approvalId,
|
|
442
514
|
...request.sessionId !== void 0 ? { sessionId: request.sessionId } : {},
|
|
443
515
|
...request.hostRuntime !== void 0 ? { hostRuntime: request.hostRuntime } : {},
|
|
444
|
-
...response
|
|
516
|
+
...response.reason !== void 0 ? { reason: response.reason } : {},
|
|
517
|
+
...response.message !== void 0 ? { message: response.message } : {},
|
|
518
|
+
...response.timeoutMs !== void 0 ? { timeoutMs: response.timeoutMs } : {},
|
|
519
|
+
...response.data !== void 0 ? { data: response.data } : {}
|
|
445
520
|
};
|
|
446
521
|
}
|
|
522
|
+
parseResponseForRequest(request, response) {
|
|
523
|
+
switch (request.type) {
|
|
524
|
+
case ApprovalType.TOOL_APPROVAL:
|
|
525
|
+
return ToolApprovalResponseSchema.parse(response);
|
|
526
|
+
case ApprovalType.COMMAND_APPROVAL:
|
|
527
|
+
return CommandApprovalResponseSchema.parse(response);
|
|
528
|
+
case ApprovalType.ELICITATION:
|
|
529
|
+
return ElicitationResponseSchema.parse(response);
|
|
530
|
+
case ApprovalType.CUSTOM:
|
|
531
|
+
return CustomApprovalResponseSchema.parse(response);
|
|
532
|
+
case ApprovalType.DIRECTORY_ACCESS:
|
|
533
|
+
return DirectoryAccessResponseSchema.parse(response);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
447
536
|
getElicitationFormData(response) {
|
|
448
537
|
if (response.data && typeof response.data === "object" && "formData" in response.data && typeof response.data.formData === "object" && response.data.formData !== null) {
|
|
449
538
|
return response.data.formData;
|
|
@@ -488,7 +577,7 @@ class ApprovalManager {
|
|
|
488
577
|
* Request a generic approval
|
|
489
578
|
*/
|
|
490
579
|
async requestApproval(details) {
|
|
491
|
-
const request = createApprovalRequest(details);
|
|
580
|
+
const request = createApprovalRequest(this.withDefaultTimeout(details));
|
|
492
581
|
if (request.type === ApprovalType.ELICITATION && !this.config.elicitation.enabled) {
|
|
493
582
|
throw ApprovalError.invalidConfig(
|
|
494
583
|
"Elicitation is disabled. Enable elicitation in your agent configuration to use the ask_user tool or MCP server elicitations."
|
|
@@ -496,8 +585,77 @@ class ApprovalManager {
|
|
|
496
585
|
}
|
|
497
586
|
return this.handleApproval(request);
|
|
498
587
|
}
|
|
588
|
+
async recordApprovalRequest(details, identity) {
|
|
589
|
+
if (details.type === ApprovalType.ELICITATION && !this.config.elicitation.enabled) {
|
|
590
|
+
throw ApprovalError.invalidConfig(
|
|
591
|
+
"Elicitation is disabled. Enable elicitation in your agent configuration to use the ask_user tool or MCP server elicitations."
|
|
592
|
+
);
|
|
593
|
+
}
|
|
594
|
+
const approvalId = createDeterministicApprovalId(this.approvalIdentityKey(identity));
|
|
595
|
+
const request = createApprovalRequest(this.withDefaultTimeout(details), approvalId);
|
|
596
|
+
return this.runWithApprovalRecordLock(approvalId, async () => {
|
|
597
|
+
const existing = await this.approvalStore.getRequest({ approvalId });
|
|
598
|
+
if (existing) {
|
|
599
|
+
this.assertMatchingRecordedRequest(existing, request);
|
|
600
|
+
return existing;
|
|
601
|
+
}
|
|
602
|
+
const recorded = await this.approvalStore.createRequest({ request });
|
|
603
|
+
this.assertMatchingRecordedRequest(recorded, request);
|
|
604
|
+
return recorded;
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
async recordApprovalResponse(decision) {
|
|
608
|
+
const record = await this.recordApprovalResponseRecord(decision);
|
|
609
|
+
return record.response;
|
|
610
|
+
}
|
|
611
|
+
async recordApprovalResponseRecord(decision, expectedRequest) {
|
|
612
|
+
return this.runWithApprovalRecordLock(decision.approvalId, async () => {
|
|
613
|
+
const request = await this.approvalStore.getRequest({
|
|
614
|
+
approvalId: decision.approvalId
|
|
615
|
+
});
|
|
616
|
+
if (!request) {
|
|
617
|
+
throw ApprovalError.invalidResponse("Approval response has no recorded request", {
|
|
618
|
+
approvalId: decision.approvalId
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
if (expectedRequest !== void 0) {
|
|
622
|
+
this.assertMatchingRecordedRequest(request, expectedRequest);
|
|
623
|
+
}
|
|
624
|
+
const response = this.parseResponseForRequest(
|
|
625
|
+
request,
|
|
626
|
+
this.createResponse(request, decision)
|
|
627
|
+
);
|
|
628
|
+
const existing = await this.approvalStore.getResponse({
|
|
629
|
+
approvalId: decision.approvalId
|
|
630
|
+
});
|
|
631
|
+
if (existing) {
|
|
632
|
+
if (!isDeepStrictEqual(existing, response)) {
|
|
633
|
+
throw ApprovalError.invalidResponse(
|
|
634
|
+
"Approval response conflicts with existing approval response",
|
|
635
|
+
{
|
|
636
|
+
approvalId: decision.approvalId
|
|
637
|
+
}
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
return { response: existing, status: "replayed" };
|
|
641
|
+
}
|
|
642
|
+
const record = await this.approvalStore.saveResponse({ response });
|
|
643
|
+
if (!isDeepStrictEqual(record.response, response)) {
|
|
644
|
+
throw ApprovalError.invalidResponse(
|
|
645
|
+
"Approval response conflicts with existing approval response",
|
|
646
|
+
{
|
|
647
|
+
approvalId: decision.approvalId
|
|
648
|
+
}
|
|
649
|
+
);
|
|
650
|
+
}
|
|
651
|
+
return record;
|
|
652
|
+
});
|
|
653
|
+
}
|
|
654
|
+
async requestApprovalDecision(request) {
|
|
655
|
+
return this.handleApproval(request);
|
|
656
|
+
}
|
|
499
657
|
/**
|
|
500
|
-
* Handle approval requests (tool approval, elicitation, command
|
|
658
|
+
* Handle approval requests (tool approval, elicitation, command approval, directory access, custom)
|
|
501
659
|
* @private
|
|
502
660
|
*/
|
|
503
661
|
async handleApproval(request) {
|
|
@@ -517,16 +675,6 @@ class ApprovalManager {
|
|
|
517
675
|
status: ApprovalStatus.APPROVED
|
|
518
676
|
});
|
|
519
677
|
}
|
|
520
|
-
if (mode === "auto-deny") {
|
|
521
|
-
this.logger.info(
|
|
522
|
-
`Auto-deny approval '${request.type}', approvalId: ${request.approvalId}`
|
|
523
|
-
);
|
|
524
|
-
return this.createResponse(request, {
|
|
525
|
-
status: ApprovalStatus.DENIED,
|
|
526
|
-
reason: DenialReason.SYSTEM_DENIED,
|
|
527
|
-
message: `Approval automatically denied by system policy (auto-deny mode)`
|
|
528
|
-
});
|
|
529
|
-
}
|
|
530
678
|
const handler = this.ensureHandler();
|
|
531
679
|
this.logger.info(
|
|
532
680
|
`Manual approval '${request.type}' requested, approvalId: ${request.approvalId}, sessionId: ${request.sessionId ?? "global"}`
|
|
@@ -538,7 +686,7 @@ class ApprovalManager {
|
|
|
538
686
|
* Convenience method for tool execution approval
|
|
539
687
|
*
|
|
540
688
|
* TODO: Make sessionId required once all callers are updated to pass it
|
|
541
|
-
* Tool
|
|
689
|
+
* Tool approvals always happen in session context during LLM execution
|
|
542
690
|
*/
|
|
543
691
|
async requestToolApproval(metadata) {
|
|
544
692
|
const { sessionId, hostRuntime, timeout, ...toolMetadata } = metadata;
|
|
@@ -553,19 +701,19 @@ class ApprovalManager {
|
|
|
553
701
|
);
|
|
554
702
|
}
|
|
555
703
|
/**
|
|
556
|
-
* Request command
|
|
704
|
+
* Request command approval
|
|
557
705
|
* Convenience method for dangerous command execution within an already-approved tool
|
|
558
706
|
*
|
|
559
707
|
* This is different from tool approval - it's for per-command approval
|
|
560
708
|
* of dangerous operations (like rm, git push) within tools that are already approved.
|
|
561
709
|
*
|
|
562
710
|
* TODO: Make sessionId required once all callers are updated to pass it
|
|
563
|
-
* Command
|
|
711
|
+
* Command approvals always happen during tool execution which has session context
|
|
564
712
|
*
|
|
565
713
|
* @example
|
|
566
714
|
* ```typescript
|
|
567
715
|
* // bash_exec tool is approved, but dangerous commands still require approval
|
|
568
|
-
* const response = await manager.
|
|
716
|
+
* const response = await manager.requestCommandApproval({
|
|
569
717
|
* toolName: 'bash_exec',
|
|
570
718
|
* command: 'rm -rf /important',
|
|
571
719
|
* originalCommand: 'rm -rf /important',
|
|
@@ -573,11 +721,11 @@ class ApprovalManager {
|
|
|
573
721
|
* });
|
|
574
722
|
* ```
|
|
575
723
|
*/
|
|
576
|
-
async
|
|
724
|
+
async requestCommandApproval(metadata) {
|
|
577
725
|
const { sessionId, hostRuntime, timeout, ...commandMetadata } = metadata;
|
|
578
726
|
return this.requestApproval(
|
|
579
727
|
this.createApprovalDetails(
|
|
580
|
-
ApprovalType.
|
|
728
|
+
ApprovalType.COMMAND_APPROVAL,
|
|
581
729
|
commandMetadata,
|
|
582
730
|
sessionId,
|
|
583
731
|
hostRuntime,
|
|
@@ -700,7 +848,7 @@ class ApprovalManager {
|
|
|
700
848
|
* Set the approval handler for manual approval mode.
|
|
701
849
|
*
|
|
702
850
|
* The handler will be called for:
|
|
703
|
-
* - Tool
|
|
851
|
+
* - Tool approval requests when permissions.mode is 'manual'
|
|
704
852
|
* - All elicitation requests (when elicitation is enabled, regardless of permissions.mode)
|
|
705
853
|
*
|
|
706
854
|
* A handler must be set before processing requests if:
|
|
@@ -737,7 +885,7 @@ class ApprovalManager {
|
|
|
737
885
|
ensureHandler() {
|
|
738
886
|
if (!this.handler) {
|
|
739
887
|
throw ApprovalError.invalidConfig(
|
|
740
|
-
'An approval handler is required but not configured.\nHandlers are required for:\n \u2022 manual tool approval mode\n \u2022 all elicitation requests (when elicitation is enabled)\nEither:\n \u2022 set permissions.mode to "auto-approve"
|
|
888
|
+
'An approval handler is required but not configured.\nHandlers are required for:\n \u2022 manual tool approval mode\n \u2022 all elicitation requests (when elicitation is enabled)\nEither:\n \u2022 set permissions.mode to "auto-approve", or\n \u2022 disable elicitation (set elicitation.enabled: false), or\n \u2022 call agent.setApprovalHandler(...) before processing requests.'
|
|
741
889
|
);
|
|
742
890
|
}
|
|
743
891
|
return this.handler;
|
|
@@ -25,10 +25,10 @@ __export(schemas_exports, {
|
|
|
25
25
|
ApprovalTypeSchema: () => ApprovalTypeSchema,
|
|
26
26
|
BaseApprovalRequestSchema: () => BaseApprovalRequestSchema,
|
|
27
27
|
BaseApprovalResponseSchema: () => BaseApprovalResponseSchema,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
CommandApprovalMetadataSchema: () => CommandApprovalMetadataSchema,
|
|
29
|
+
CommandApprovalRequestSchema: () => CommandApprovalRequestSchema,
|
|
30
|
+
CommandApprovalResponseDataSchema: () => CommandApprovalResponseDataSchema,
|
|
31
|
+
CommandApprovalResponseSchema: () => CommandApprovalResponseSchema,
|
|
32
32
|
CustomApprovalMetadataSchema: () => CustomApprovalMetadataSchema,
|
|
33
33
|
CustomApprovalRequestSchema: () => CustomApprovalRequestSchema,
|
|
34
34
|
CustomApprovalResponseDataSchema: () => CustomApprovalResponseDataSchema,
|
|
@@ -72,7 +72,7 @@ const DirectoryAccessMetadataSchema = import_zod.z.object({
|
|
|
72
72
|
toolName: import_zod.z.string().describe("Name of the tool requesting access")
|
|
73
73
|
}).strict().describe("Directory access metadata");
|
|
74
74
|
const ToolApprovalMetadataSchema = import_zod.z.object({
|
|
75
|
-
toolName: import_zod.z.string().describe("Name of the tool to
|
|
75
|
+
toolName: import_zod.z.string().describe("Name of the tool to approve"),
|
|
76
76
|
presentationSnapshot: ToolPresentationSnapshotV1Schema.optional().describe(
|
|
77
77
|
"Optional UI-agnostic presentation snapshot for the tool call. Clients MUST ignore unknown fields."
|
|
78
78
|
),
|
|
@@ -89,11 +89,11 @@ const ToolApprovalMetadataSchema = import_zod.z.object({
|
|
|
89
89
|
'Suggested patterns for session approval. Tools may provide patterns to allow approving a broader subset of future calls (e.g., ["git push *", "git *"]).'
|
|
90
90
|
)
|
|
91
91
|
}).strict().describe("Tool approval metadata");
|
|
92
|
-
const
|
|
92
|
+
const CommandApprovalMetadataSchema = import_zod.z.object({
|
|
93
93
|
toolName: import_zod.z.string().describe("Name of the tool executing the command"),
|
|
94
94
|
command: import_zod.z.string().describe("The normalized command to execute"),
|
|
95
95
|
originalCommand: import_zod.z.string().optional().describe("The original command before normalization")
|
|
96
|
-
}).strict().describe("Command
|
|
96
|
+
}).strict().describe("Command approval metadata");
|
|
97
97
|
const ElicitationMetadataSchema = import_zod.z.object({
|
|
98
98
|
schema: JsonSchema7Schema.describe("JSON Schema for the form"),
|
|
99
99
|
prompt: import_zod.z.string().describe("High-level prompt/context for the form (clients may show it)"),
|
|
@@ -109,15 +109,15 @@ const BaseApprovalRequestSchema = import_zod.z.object({
|
|
|
109
109
|
"Optional host-owned runtime IDs for correlating the approval flow to a single execution."
|
|
110
110
|
),
|
|
111
111
|
timeout: import_zod.z.number().int().positive().optional().describe("Timeout in milliseconds (optional - no timeout if not specified)"),
|
|
112
|
-
timestamp: import_zod.z.date().describe("When the request was created")
|
|
112
|
+
timestamp: import_zod.z.coerce.date().describe("When the request was created")
|
|
113
113
|
}).describe("Base approval request");
|
|
114
114
|
const ToolApprovalRequestSchema = BaseApprovalRequestSchema.extend({
|
|
115
115
|
type: import_zod.z.literal(import_types.ApprovalType.TOOL_APPROVAL),
|
|
116
116
|
metadata: ToolApprovalMetadataSchema
|
|
117
117
|
}).strict();
|
|
118
|
-
const
|
|
119
|
-
type: import_zod.z.literal(import_types.ApprovalType.
|
|
120
|
-
metadata:
|
|
118
|
+
const CommandApprovalRequestSchema = BaseApprovalRequestSchema.extend({
|
|
119
|
+
type: import_zod.z.literal(import_types.ApprovalType.COMMAND_APPROVAL),
|
|
120
|
+
metadata: CommandApprovalMetadataSchema
|
|
121
121
|
}).strict();
|
|
122
122
|
const ElicitationRequestSchema = BaseApprovalRequestSchema.extend({
|
|
123
123
|
type: import_zod.z.literal(import_types.ApprovalType.ELICITATION),
|
|
@@ -133,7 +133,7 @@ const DirectoryAccessRequestSchema = BaseApprovalRequestSchema.extend({
|
|
|
133
133
|
}).strict();
|
|
134
134
|
const ApprovalRequestSchema = import_zod.z.discriminatedUnion("type", [
|
|
135
135
|
ToolApprovalRequestSchema,
|
|
136
|
-
|
|
136
|
+
CommandApprovalRequestSchema,
|
|
137
137
|
ElicitationRequestSchema,
|
|
138
138
|
CustomApprovalRequestSchema,
|
|
139
139
|
DirectoryAccessRequestSchema
|
|
@@ -147,10 +147,10 @@ const ToolApprovalResponseDataSchema = import_zod.z.object({
|
|
|
147
147
|
"Remember this directory for the session (allows future access without prompting again)"
|
|
148
148
|
)
|
|
149
149
|
}).strict().describe("Tool approval response data");
|
|
150
|
-
const
|
|
151
|
-
// Command
|
|
150
|
+
const CommandApprovalResponseDataSchema = import_zod.z.object({
|
|
151
|
+
// Command approvals don't have remember choice - they're per-command
|
|
152
152
|
// Could add command pattern remembering in future (e.g., "remember git push *")
|
|
153
|
-
}).strict().describe("Command
|
|
153
|
+
}).strict().describe("Command approval response data");
|
|
154
154
|
const ElicitationResponseDataSchema = import_zod.z.object({
|
|
155
155
|
formData: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).describe("Form data matching schema")
|
|
156
156
|
}).strict().describe("Elicitation response data");
|
|
@@ -174,8 +174,8 @@ const BaseApprovalResponseSchema = import_zod.z.object({
|
|
|
174
174
|
const ToolApprovalResponseSchema = BaseApprovalResponseSchema.extend({
|
|
175
175
|
data: ToolApprovalResponseDataSchema.optional()
|
|
176
176
|
}).strict();
|
|
177
|
-
const
|
|
178
|
-
data:
|
|
177
|
+
const CommandApprovalResponseSchema = BaseApprovalResponseSchema.extend({
|
|
178
|
+
data: CommandApprovalResponseDataSchema.optional()
|
|
179
179
|
}).strict();
|
|
180
180
|
const ElicitationResponseSchema = BaseApprovalResponseSchema.extend({
|
|
181
181
|
data: ElicitationResponseDataSchema.optional()
|
|
@@ -188,7 +188,7 @@ const DirectoryAccessResponseSchema = BaseApprovalResponseSchema.extend({
|
|
|
188
188
|
}).strict();
|
|
189
189
|
const ApprovalResponseSchema = import_zod.z.union([
|
|
190
190
|
ToolApprovalResponseSchema,
|
|
191
|
-
|
|
191
|
+
CommandApprovalResponseSchema,
|
|
192
192
|
ElicitationResponseSchema,
|
|
193
193
|
CustomApprovalResponseSchema,
|
|
194
194
|
DirectoryAccessResponseSchema
|
|
@@ -202,7 +202,7 @@ const ApprovalRequestDetailsSchema = import_zod.z.object({
|
|
|
202
202
|
timeout: import_zod.z.number().int().positive().optional().describe("Timeout in milliseconds (optional - no timeout if not specified)"),
|
|
203
203
|
metadata: import_zod.z.union([
|
|
204
204
|
ToolApprovalMetadataSchema,
|
|
205
|
-
|
|
205
|
+
CommandApprovalMetadataSchema,
|
|
206
206
|
ElicitationMetadataSchema,
|
|
207
207
|
CustomApprovalMetadataSchema,
|
|
208
208
|
DirectoryAccessMetadataSchema
|
|
@@ -217,12 +217,12 @@ const ApprovalRequestDetailsSchema = import_zod.z.object({
|
|
|
217
217
|
path: ["metadata"]
|
|
218
218
|
});
|
|
219
219
|
}
|
|
220
|
-
} else if (data.type === import_types.ApprovalType.
|
|
221
|
-
const result =
|
|
220
|
+
} else if (data.type === import_types.ApprovalType.COMMAND_APPROVAL) {
|
|
221
|
+
const result = CommandApprovalMetadataSchema.safeParse(data.metadata);
|
|
222
222
|
if (!result.success) {
|
|
223
223
|
ctx.addIssue({
|
|
224
224
|
code: import_zod.z.ZodIssueCode.custom,
|
|
225
|
-
message: "Metadata must match
|
|
225
|
+
message: "Metadata must match CommandApprovalMetadataSchema for COMMAND_APPROVAL type",
|
|
226
226
|
path: ["metadata"]
|
|
227
227
|
});
|
|
228
228
|
}
|
|
@@ -264,10 +264,10 @@ const ApprovalRequestDetailsSchema = import_zod.z.object({
|
|
|
264
264
|
ApprovalTypeSchema,
|
|
265
265
|
BaseApprovalRequestSchema,
|
|
266
266
|
BaseApprovalResponseSchema,
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
267
|
+
CommandApprovalMetadataSchema,
|
|
268
|
+
CommandApprovalRequestSchema,
|
|
269
|
+
CommandApprovalResponseDataSchema,
|
|
270
|
+
CommandApprovalResponseSchema,
|
|
271
271
|
CustomApprovalMetadataSchema,
|
|
272
272
|
CustomApprovalRequestSchema,
|
|
273
273
|
CustomApprovalResponseDataSchema,
|