@dexto/core 1.5.6 → 1.5.7
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 +94 -26
- package/dist/agent/DextoAgent.d.ts +17 -7
- package/dist/agent/DextoAgent.d.ts.map +1 -1
- package/dist/agent/DextoAgent.js +95 -27
- package/dist/agent/schemas.d.ts +417 -66
- package/dist/agent/schemas.d.ts.map +1 -1
- package/dist/context/utils.cjs +49 -3
- package/dist/context/utils.d.ts.map +1 -1
- package/dist/context/utils.js +49 -3
- package/dist/errors/types.cjs +2 -1
- package/dist/errors/types.d.ts +2 -1
- package/dist/errors/types.d.ts.map +1 -1
- package/dist/errors/types.js +2 -1
- package/dist/image/types.d.ts +15 -0
- package/dist/image/types.d.ts.map +1 -1
- package/dist/llm/error-codes.cjs +1 -0
- package/dist/llm/error-codes.d.ts +1 -0
- package/dist/llm/error-codes.d.ts.map +1 -1
- package/dist/llm/error-codes.js +1 -0
- package/dist/llm/errors.cjs +15 -0
- package/dist/llm/errors.d.ts +15 -8
- package/dist/llm/errors.d.ts.map +1 -1
- package/dist/llm/errors.js +15 -0
- package/dist/llm/executor/turn-executor.cjs +27 -0
- package/dist/llm/executor/turn-executor.d.ts.map +1 -1
- package/dist/llm/executor/turn-executor.js +27 -0
- package/dist/llm/registry.cjs +472 -28
- package/dist/llm/registry.d.ts +80 -4
- package/dist/llm/registry.d.ts.map +1 -1
- package/dist/llm/registry.js +464 -25
- package/dist/llm/resolver.cjs +13 -0
- package/dist/llm/resolver.d.ts.map +1 -1
- package/dist/llm/resolver.js +16 -1
- package/dist/llm/schemas.d.ts +59 -59
- package/dist/llm/services/factory.cjs +41 -25
- package/dist/llm/services/factory.d.ts +20 -1
- package/dist/llm/services/factory.d.ts.map +1 -1
- package/dist/llm/services/factory.js +42 -26
- package/dist/llm/services/test-utils.integration.cjs +5 -1
- package/dist/llm/services/test-utils.integration.d.ts.map +1 -1
- package/dist/llm/services/test-utils.integration.js +5 -1
- package/dist/llm/types.cjs +5 -2
- package/dist/llm/types.d.ts +1 -1
- package/dist/llm/types.d.ts.map +1 -1
- package/dist/llm/types.js +5 -2
- package/dist/logger/v2/dexto-logger.cjs +4 -0
- package/dist/logger/v2/dexto-logger.d.ts +3 -0
- package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
- package/dist/logger/v2/dexto-logger.js +4 -0
- package/dist/logger/v2/types.d.ts +2 -0
- package/dist/logger/v2/types.d.ts.map +1 -1
- package/dist/mcp/error-codes.cjs +1 -0
- package/dist/mcp/error-codes.d.ts +1 -0
- package/dist/mcp/error-codes.d.ts.map +1 -1
- package/dist/mcp/error-codes.js +1 -0
- package/dist/mcp/errors.cjs +13 -0
- package/dist/mcp/errors.d.ts +7 -0
- package/dist/mcp/errors.d.ts.map +1 -1
- package/dist/mcp/errors.js +13 -0
- package/dist/mcp/manager.cjs +46 -4
- package/dist/mcp/manager.d.ts +10 -2
- package/dist/mcp/manager.d.ts.map +1 -1
- package/dist/mcp/manager.js +46 -4
- package/dist/mcp/mcp-client.cjs +89 -5
- package/dist/mcp/mcp-client.d.ts +5 -1
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +89 -5
- package/dist/mcp/schemas.cjs +6 -1
- package/dist/mcp/schemas.d.ts +1 -1
- package/dist/mcp/schemas.d.ts.map +1 -1
- package/dist/mcp/schemas.js +6 -1
- package/dist/mcp/types.d.ts +5 -0
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/prompts/index.d.ts +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.cjs +90 -4
- package/dist/prompts/prompt-manager.d.ts +16 -6
- package/dist/prompts/prompt-manager.d.ts.map +1 -1
- package/dist/prompts/prompt-manager.js +90 -4
- package/dist/prompts/providers/config-prompt-provider.cjs +104 -10
- package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/config-prompt-provider.js +105 -11
- package/dist/prompts/providers/custom-prompt-provider.cjs +1 -0
- package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/custom-prompt-provider.js +1 -0
- package/dist/prompts/providers/mcp-prompt-provider.cjs +1 -0
- package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
- package/dist/prompts/providers/mcp-prompt-provider.js +1 -0
- package/dist/prompts/schemas.cjs +28 -2
- package/dist/prompts/schemas.d.ts +130 -0
- package/dist/prompts/schemas.d.ts.map +1 -1
- package/dist/prompts/schemas.js +28 -2
- package/dist/prompts/types.d.ts +55 -3
- package/dist/prompts/types.d.ts.map +1 -1
- package/dist/session/chat-session.d.ts +1 -1
- package/dist/session/chat-session.d.ts.map +1 -1
- package/dist/session/index.d.ts +1 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/session-manager.cjs +47 -3
- package/dist/session/session-manager.d.ts +10 -0
- package/dist/session/session-manager.d.ts.map +1 -1
- package/dist/session/session-manager.js +47 -3
- package/dist/systemPrompt/contributors.cjs +42 -0
- package/dist/systemPrompt/contributors.d.ts +13 -0
- package/dist/systemPrompt/contributors.d.ts.map +1 -1
- package/dist/systemPrompt/contributors.js +41 -0
- package/dist/tools/errors.cjs +7 -3
- package/dist/tools/errors.d.ts +5 -1
- package/dist/tools/errors.d.ts.map +1 -1
- package/dist/tools/errors.js +7 -3
- package/dist/tools/internal-tools/constants.cjs +2 -1
- package/dist/tools/internal-tools/constants.d.ts +1 -1
- package/dist/tools/internal-tools/constants.d.ts.map +1 -1
- package/dist/tools/internal-tools/constants.js +2 -1
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.cjs +140 -0
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts +24 -0
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts.map +1 -0
- package/dist/tools/internal-tools/implementations/invoke-skill-tool.js +117 -0
- package/dist/tools/internal-tools/provider.cjs +15 -0
- package/dist/tools/internal-tools/provider.d.ts +12 -0
- package/dist/tools/internal-tools/provider.d.ts.map +1 -1
- package/dist/tools/internal-tools/provider.js +15 -0
- package/dist/tools/internal-tools/registry.cjs +6 -0
- package/dist/tools/internal-tools/registry.d.ts +34 -0
- package/dist/tools/internal-tools/registry.d.ts.map +1 -1
- package/dist/tools/internal-tools/registry.js +6 -0
- package/dist/tools/schemas.d.ts +1 -1
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/tool-manager.cjs +230 -79
- package/dist/tools/tool-manager.d.ts +89 -8
- package/dist/tools/tool-manager.d.ts.map +1 -1
- package/dist/tools/tool-manager.js +231 -80
- package/dist/utils/api-key-resolver.cjs +5 -2
- package/dist/utils/api-key-resolver.d.ts.map +1 -1
- package/dist/utils/api-key-resolver.js +5 -2
- package/dist/utils/service-initializer.cjs +8 -2
- package/dist/utils/service-initializer.d.ts +5 -1
- package/dist/utils/service-initializer.d.ts.map +1 -1
- package/dist/utils/service-initializer.js +8 -2
- package/package.json +1 -1
|
@@ -104,6 +104,10 @@ let _ToolManager = class _ToolManager {
|
|
|
104
104
|
toolsCache = {};
|
|
105
105
|
cacheValid = false;
|
|
106
106
|
logger;
|
|
107
|
+
// Session-level auto-approve tools for skills
|
|
108
|
+
// When a skill with allowedTools is invoked, those tools are auto-approved (skip confirmation)
|
|
109
|
+
// This is ADDITIVE - other tools are NOT blocked, they just go through normal approval flow
|
|
110
|
+
sessionAutoApproveTools = /* @__PURE__ */ new Map();
|
|
107
111
|
constructor(mcpManager, approvalManager, allowedToolsProvider, approvalMode, agentEventBus, toolPolicies, options, logger) {
|
|
108
112
|
this.mcpManager = mcpManager;
|
|
109
113
|
this.approvalManager = approvalManager;
|
|
@@ -155,6 +159,95 @@ let _ToolManager = class _ToolManager {
|
|
|
155
159
|
this.logger.debug("Agent reference configured for custom tools");
|
|
156
160
|
}
|
|
157
161
|
}
|
|
162
|
+
/**
|
|
163
|
+
* Set prompt manager for invoke_skill tool (called after construction to avoid circular dependencies)
|
|
164
|
+
* Must be called before initialize() if invoke_skill tool is enabled
|
|
165
|
+
*/
|
|
166
|
+
setPromptManager(promptManager) {
|
|
167
|
+
if (this.internalToolsProvider) {
|
|
168
|
+
this.internalToolsProvider.setPromptManager(promptManager);
|
|
169
|
+
this.logger.debug("PromptManager reference configured for invoke_skill tool");
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Set task forker for context:fork skill execution (late-binding)
|
|
174
|
+
* Called by agent-spawner custom tool provider after RuntimeService is created.
|
|
175
|
+
* This enables invoke_skill to fork execution to an isolated subagent.
|
|
176
|
+
*/
|
|
177
|
+
setTaskForker(taskForker) {
|
|
178
|
+
if (this.internalToolsProvider) {
|
|
179
|
+
this.internalToolsProvider.setTaskForker(taskForker);
|
|
180
|
+
this.logger.debug(
|
|
181
|
+
"TaskForker reference configured for invoke_skill (context:fork support)"
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// ============= SESSION AUTO-APPROVE TOOLS =============
|
|
186
|
+
/**
|
|
187
|
+
* Set session-level auto-approve tools.
|
|
188
|
+
* When set, these tools will skip confirmation prompts for this session.
|
|
189
|
+
* This is ADDITIVE - other tools are NOT blocked, they just go through normal approval flow.
|
|
190
|
+
*
|
|
191
|
+
* @param sessionId The session ID
|
|
192
|
+
* @param autoApproveTools Array of tool names to auto-approve (e.g., ['custom--bash_exec', 'custom--read_file'])
|
|
193
|
+
*/
|
|
194
|
+
setSessionAutoApproveTools(sessionId, autoApproveTools) {
|
|
195
|
+
if (autoApproveTools.length === 0) {
|
|
196
|
+
this.clearSessionAutoApproveTools(sessionId);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.sessionAutoApproveTools.set(sessionId, autoApproveTools);
|
|
200
|
+
this.logger.info(
|
|
201
|
+
`Session auto-approve tools set for '${sessionId}': ${autoApproveTools.length} tools`
|
|
202
|
+
);
|
|
203
|
+
this.logger.debug(`Auto-approve tools: ${autoApproveTools.join(", ")}`);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear session-level auto-approve tools.
|
|
207
|
+
* Call this when the session ends or when the skill completes.
|
|
208
|
+
*
|
|
209
|
+
* @param sessionId The session ID to clear auto-approve tools for
|
|
210
|
+
*/
|
|
211
|
+
clearSessionAutoApproveTools(sessionId) {
|
|
212
|
+
const hadAutoApprove = this.sessionAutoApproveTools.has(sessionId);
|
|
213
|
+
this.sessionAutoApproveTools.delete(sessionId);
|
|
214
|
+
if (hadAutoApprove) {
|
|
215
|
+
this.logger.info(`Session auto-approve tools cleared for '${sessionId}'`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if a session has auto-approve tools set.
|
|
220
|
+
*
|
|
221
|
+
* @param sessionId The session ID to check
|
|
222
|
+
* @returns true if the session has auto-approve tools
|
|
223
|
+
*/
|
|
224
|
+
hasSessionAutoApproveTools(sessionId) {
|
|
225
|
+
return this.sessionAutoApproveTools.has(sessionId);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get the auto-approve tools for a session.
|
|
229
|
+
*
|
|
230
|
+
* @param sessionId The session ID to check
|
|
231
|
+
* @returns Array of auto-approve tool names, or undefined if none set
|
|
232
|
+
*/
|
|
233
|
+
getSessionAutoApproveTools(sessionId) {
|
|
234
|
+
return this.sessionAutoApproveTools.get(sessionId);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Check if a tool should be auto-approved for a session.
|
|
238
|
+
* Returns true if the tool is in the session's auto-approve list.
|
|
239
|
+
*
|
|
240
|
+
* @param sessionId The session ID
|
|
241
|
+
* @param toolName The tool name to check
|
|
242
|
+
* @returns true if the tool should be auto-approved
|
|
243
|
+
*/
|
|
244
|
+
isToolAutoApprovedForSession(sessionId, toolName) {
|
|
245
|
+
const autoApproveTools = this.sessionAutoApproveTools.get(sessionId);
|
|
246
|
+
if (!autoApproveTools) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
return autoApproveTools.some((pattern) => this.matchesToolPolicy(toolName, pattern));
|
|
250
|
+
}
|
|
158
251
|
/**
|
|
159
252
|
* Invalidate the tools cache when tool sources change
|
|
160
253
|
*/
|
|
@@ -180,6 +273,14 @@ let _ToolManager = class _ToolManager {
|
|
|
180
273
|
);
|
|
181
274
|
this.invalidateCache();
|
|
182
275
|
});
|
|
276
|
+
this.agentEventBus.on("run:complete", (payload) => {
|
|
277
|
+
if (this.hasSessionAutoApproveTools(payload.sessionId)) {
|
|
278
|
+
this.logger.debug(
|
|
279
|
+
`\u{1F513} Run complete, clearing session auto-approve tools for '${payload.sessionId}'`
|
|
280
|
+
);
|
|
281
|
+
this.clearSessionAutoApproveTools(payload.sessionId);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
183
284
|
}
|
|
184
285
|
// ==================== Bash Pattern Approval Helpers ====================
|
|
185
286
|
/**
|
|
@@ -731,21 +832,34 @@ let _ToolManager = class _ToolManager {
|
|
|
731
832
|
throw import_errors.ToolError.executionDenied(toolName, sessionId);
|
|
732
833
|
}
|
|
733
834
|
/**
|
|
734
|
-
* Handle tool approval
|
|
735
|
-
*
|
|
736
|
-
* and handles remember choice logic
|
|
737
|
-
*
|
|
738
|
-
* @param toolName The fully qualified tool name
|
|
739
|
-
* @param args The arguments for the tool
|
|
740
|
-
* @param toolCallId The unique tool call ID for tracking parallel tool calls
|
|
741
|
-
* @param sessionId Optional session ID for context
|
|
835
|
+
* Handle tool approval flow. Checks various precedence levels to determine
|
|
836
|
+
* if a tool should be auto-approved, denied, or requires manual approval.
|
|
742
837
|
*/
|
|
743
838
|
async handleToolApproval(toolName, args, toolCallId, sessionId) {
|
|
839
|
+
const quickResult = await this.tryQuickApprovalResolution(toolName, args, sessionId);
|
|
840
|
+
if (quickResult !== null) {
|
|
841
|
+
return quickResult;
|
|
842
|
+
}
|
|
843
|
+
return this.requestManualApproval(toolName, args, toolCallId, sessionId);
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Try to resolve tool approval quickly based on policies and cached permissions.
|
|
847
|
+
* Returns null if manual approval is needed.
|
|
848
|
+
*
|
|
849
|
+
* Precedence order (highest to lowest):
|
|
850
|
+
* 1. Static deny list (security - always blocks)
|
|
851
|
+
* 2. Custom approval override (tool-specific approval flows)
|
|
852
|
+
* 3. Session auto-approve (skill allowed-tools)
|
|
853
|
+
* 4. Static allow list
|
|
854
|
+
* 5. Dynamic "remembered" allowed list
|
|
855
|
+
* 6. Bash command patterns
|
|
856
|
+
* 7. Approval mode (auto-approve/auto-deny)
|
|
857
|
+
*/
|
|
858
|
+
async tryQuickApprovalResolution(toolName, args, sessionId) {
|
|
744
859
|
if (this.isInAlwaysDenyList(toolName)) {
|
|
745
860
|
this.logger.info(
|
|
746
861
|
`Tool '${toolName}' is in static deny list \u2013 blocking execution (session: ${sessionId ?? "global"})`
|
|
747
862
|
);
|
|
748
|
-
this.logger.debug(`\u{1F6AB} Tool execution blocked by policy: ${toolName}`);
|
|
749
863
|
throw import_errors.ToolError.executionDenied(toolName, sessionId);
|
|
750
864
|
}
|
|
751
865
|
const customApprovalResult = await this.checkCustomApprovalOverride(
|
|
@@ -756,25 +870,29 @@ let _ToolManager = class _ToolManager {
|
|
|
756
870
|
if (customApprovalResult.handled) {
|
|
757
871
|
return { requireApproval: true, approvalStatus: "approved" };
|
|
758
872
|
}
|
|
873
|
+
if (sessionId && this.isToolAutoApprovedForSession(sessionId, toolName)) {
|
|
874
|
+
this.logger.info(
|
|
875
|
+
`Tool '${toolName}' is in session's auto-approve list \u2013 skipping confirmation (session: ${sessionId})`
|
|
876
|
+
);
|
|
877
|
+
return { requireApproval: false };
|
|
878
|
+
}
|
|
759
879
|
if (this.isInAlwaysAllowList(toolName)) {
|
|
760
880
|
this.logger.info(
|
|
761
881
|
`Tool '${toolName}' is in static allow list \u2013 skipping confirmation (session: ${sessionId ?? "global"})`
|
|
762
882
|
);
|
|
763
883
|
return { requireApproval: false };
|
|
764
884
|
}
|
|
765
|
-
|
|
766
|
-
if (isAllowed) {
|
|
885
|
+
if (await this.allowedToolsProvider.isToolAllowed(toolName, sessionId)) {
|
|
767
886
|
this.logger.info(
|
|
768
887
|
`Tool '${toolName}' already allowed for session '${sessionId ?? "global"}' \u2013 skipping confirmation.`
|
|
769
888
|
);
|
|
770
889
|
return { requireApproval: false };
|
|
771
890
|
}
|
|
772
|
-
let bashPatternResult;
|
|
773
891
|
if (this.isBashTool(toolName)) {
|
|
774
892
|
const command = args.command;
|
|
775
893
|
if (command) {
|
|
776
|
-
|
|
777
|
-
if (
|
|
894
|
+
const bashResult = this.checkBashPatternApproval(command);
|
|
895
|
+
if (bashResult.approved) {
|
|
778
896
|
this.logger.info(
|
|
779
897
|
`Bash command '${command}' matched approved pattern \u2013 skipping confirmation.`
|
|
780
898
|
);
|
|
@@ -790,79 +908,37 @@ let _ToolManager = class _ToolManager {
|
|
|
790
908
|
this.logger.debug(`\u{1F6AB} Auto-denying tool execution: ${toolName}`);
|
|
791
909
|
throw import_errors.ToolError.executionDenied(toolName, sessionId);
|
|
792
910
|
}
|
|
911
|
+
return null;
|
|
912
|
+
}
|
|
913
|
+
/**
|
|
914
|
+
* Request manual approval from the user for a tool execution.
|
|
915
|
+
* Generates preview, sends approval request, and handles the response.
|
|
916
|
+
*/
|
|
917
|
+
async requestManualApproval(toolName, args, toolCallId, sessionId) {
|
|
793
918
|
this.logger.info(
|
|
794
919
|
`Tool confirmation requested for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
795
920
|
);
|
|
796
921
|
try {
|
|
797
|
-
|
|
798
|
-
const actualToolName = toolName.replace(/^internal--/, "").replace(/^custom--/, "");
|
|
799
|
-
const internalTool = this.internalToolsProvider?.getTool(actualToolName);
|
|
800
|
-
if (internalTool?.generatePreview) {
|
|
801
|
-
try {
|
|
802
|
-
const context = { sessionId, toolCallId };
|
|
803
|
-
const preview = await internalTool.generatePreview(args, context);
|
|
804
|
-
displayPreview = preview ?? void 0;
|
|
805
|
-
this.logger.debug(`Generated preview for ${toolName}`);
|
|
806
|
-
} catch (previewError) {
|
|
807
|
-
if (previewError instanceof import_errors2.DextoRuntimeError && previewError.code === import_error_codes.ToolErrorCode.VALIDATION_FAILED) {
|
|
808
|
-
this.logger.debug(
|
|
809
|
-
`Validation failed for ${toolName}: ${previewError.message}`
|
|
810
|
-
);
|
|
811
|
-
throw previewError;
|
|
812
|
-
}
|
|
813
|
-
this.logger.debug(
|
|
814
|
-
`Preview generation failed for ${toolName}: ${previewError instanceof Error ? previewError.message : String(previewError)}`
|
|
815
|
-
);
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
const requestData = {
|
|
922
|
+
const displayPreview = await this.generateToolPreview(
|
|
819
923
|
toolName,
|
|
924
|
+
args,
|
|
820
925
|
toolCallId,
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
}
|
|
832
|
-
const response = await this.approvalManager.requestToolConfirmation(requestData);
|
|
926
|
+
sessionId
|
|
927
|
+
);
|
|
928
|
+
const suggestedPatterns = this.getBashSuggestedPatterns(toolName, args);
|
|
929
|
+
const response = await this.approvalManager.requestToolConfirmation({
|
|
930
|
+
toolName,
|
|
931
|
+
toolCallId,
|
|
932
|
+
args,
|
|
933
|
+
...sessionId !== void 0 && { sessionId },
|
|
934
|
+
...displayPreview !== void 0 && { displayPreview },
|
|
935
|
+
...suggestedPatterns !== void 0 && { suggestedPatterns }
|
|
936
|
+
});
|
|
833
937
|
if (response.status === import_types3.ApprovalStatus.APPROVED && response.data) {
|
|
834
|
-
|
|
835
|
-
const rememberPattern = "rememberPattern" in response.data ? response.data.rememberPattern : void 0;
|
|
836
|
-
if (rememberChoice) {
|
|
837
|
-
const allowSessionId = sessionId ?? response.sessionId;
|
|
838
|
-
await this.allowedToolsProvider.allowTool(toolName, allowSessionId);
|
|
839
|
-
this.logger.info(
|
|
840
|
-
`Tool '${toolName}' added to allowed tools for session '${allowSessionId ?? "global"}' (remember choice selected)`
|
|
841
|
-
);
|
|
842
|
-
this.autoApprovePendingToolRequests(toolName, allowSessionId);
|
|
843
|
-
} else if (rememberPattern && typeof rememberPattern === "string" && this.isBashTool(toolName)) {
|
|
844
|
-
this.approvalManager.addBashPattern(rememberPattern);
|
|
845
|
-
this.logger.info(
|
|
846
|
-
`Bash pattern '${rememberPattern}' added for session approval`
|
|
847
|
-
);
|
|
848
|
-
this.autoApprovePendingBashRequests(rememberPattern, sessionId);
|
|
849
|
-
}
|
|
938
|
+
await this.handleRememberChoice(toolName, response, sessionId);
|
|
850
939
|
}
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
if (response.status === import_types3.ApprovalStatus.CANCELLED && response.reason === "timeout") {
|
|
854
|
-
this.logger.info(
|
|
855
|
-
`Tool confirmation timed out for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
856
|
-
);
|
|
857
|
-
this.logger.debug(`\u23F1\uFE0F Tool execution timed out: ${toolName}`);
|
|
858
|
-
const timeoutMs = response.timeoutMs ?? 0;
|
|
859
|
-
throw import_errors.ToolError.executionTimeout(toolName, timeoutMs, sessionId);
|
|
860
|
-
}
|
|
861
|
-
this.logger.info(
|
|
862
|
-
`Tool confirmation denied for ${toolName}, sessionId: ${sessionId ?? "global"}, reason: ${response.reason ?? "unknown"}`
|
|
863
|
-
);
|
|
864
|
-
this.logger.debug(`\u{1F6AB} Tool execution denied: ${toolName}`);
|
|
865
|
-
throw import_errors.ToolError.executionDenied(toolName, sessionId);
|
|
940
|
+
if (response.status !== import_types3.ApprovalStatus.APPROVED) {
|
|
941
|
+
this.handleApprovalDenied(toolName, response, sessionId);
|
|
866
942
|
}
|
|
867
943
|
this.logger.info(
|
|
868
944
|
`Tool confirmation approved for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
@@ -875,6 +951,81 @@ let _ToolManager = class _ToolManager {
|
|
|
875
951
|
throw error;
|
|
876
952
|
}
|
|
877
953
|
}
|
|
954
|
+
/**
|
|
955
|
+
* Generate a preview for the tool approval UI if the tool supports it.
|
|
956
|
+
*/
|
|
957
|
+
async generateToolPreview(toolName, args, toolCallId, sessionId) {
|
|
958
|
+
const actualToolName = toolName.replace(/^internal--/, "").replace(/^custom--/, "");
|
|
959
|
+
const internalTool = this.internalToolsProvider?.getTool(actualToolName);
|
|
960
|
+
if (!internalTool?.generatePreview) {
|
|
961
|
+
return void 0;
|
|
962
|
+
}
|
|
963
|
+
try {
|
|
964
|
+
const context = { sessionId, toolCallId };
|
|
965
|
+
const preview = await internalTool.generatePreview(args, context);
|
|
966
|
+
this.logger.debug(`Generated preview for ${toolName}`);
|
|
967
|
+
return preview ?? void 0;
|
|
968
|
+
} catch (previewError) {
|
|
969
|
+
if (previewError instanceof import_errors2.DextoRuntimeError && previewError.code === import_error_codes.ToolErrorCode.VALIDATION_FAILED) {
|
|
970
|
+
this.logger.debug(`Validation failed for ${toolName}: ${previewError.message}`);
|
|
971
|
+
throw previewError;
|
|
972
|
+
}
|
|
973
|
+
this.logger.debug(
|
|
974
|
+
`Preview generation failed for ${toolName}: ${previewError instanceof Error ? previewError.message : String(previewError)}`
|
|
975
|
+
);
|
|
976
|
+
return void 0;
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
/**
|
|
980
|
+
* Get suggested bash patterns for the approval UI.
|
|
981
|
+
*/
|
|
982
|
+
getBashSuggestedPatterns(toolName, args) {
|
|
983
|
+
if (!this.isBashTool(toolName)) {
|
|
984
|
+
return void 0;
|
|
985
|
+
}
|
|
986
|
+
const command = args.command;
|
|
987
|
+
if (!command) {
|
|
988
|
+
return void 0;
|
|
989
|
+
}
|
|
990
|
+
const result = this.checkBashPatternApproval(command);
|
|
991
|
+
return result.suggestedPatterns?.length ? result.suggestedPatterns : void 0;
|
|
992
|
+
}
|
|
993
|
+
/**
|
|
994
|
+
* Handle "remember choice" or "remember pattern" when user approves a tool.
|
|
995
|
+
*/
|
|
996
|
+
async handleRememberChoice(toolName, response, sessionId) {
|
|
997
|
+
const data = response.data;
|
|
998
|
+
if (!data) return;
|
|
999
|
+
const rememberChoice = data.rememberChoice;
|
|
1000
|
+
const rememberPattern = data.rememberPattern;
|
|
1001
|
+
if (rememberChoice) {
|
|
1002
|
+
const allowSessionId = sessionId ?? response.sessionId;
|
|
1003
|
+
await this.allowedToolsProvider.allowTool(toolName, allowSessionId);
|
|
1004
|
+
this.logger.info(
|
|
1005
|
+
`Tool '${toolName}' added to allowed tools for session '${allowSessionId ?? "global"}' (remember choice selected)`
|
|
1006
|
+
);
|
|
1007
|
+
this.autoApprovePendingToolRequests(toolName, allowSessionId);
|
|
1008
|
+
} else if (rememberPattern && this.isBashTool(toolName)) {
|
|
1009
|
+
this.approvalManager.addBashPattern(rememberPattern);
|
|
1010
|
+
this.logger.info(`Bash pattern '${rememberPattern}' added for session approval`);
|
|
1011
|
+
this.autoApprovePendingBashRequests(rememberPattern, sessionId);
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
/**
|
|
1015
|
+
* Handle approval denied/timeout - throws appropriate error.
|
|
1016
|
+
*/
|
|
1017
|
+
handleApprovalDenied(toolName, response, sessionId) {
|
|
1018
|
+
if (response.status === import_types3.ApprovalStatus.CANCELLED && response.reason === import_types3.DenialReason.TIMEOUT) {
|
|
1019
|
+
this.logger.info(
|
|
1020
|
+
`Tool confirmation timed out for ${toolName}, sessionId: ${sessionId ?? "global"}`
|
|
1021
|
+
);
|
|
1022
|
+
throw import_errors.ToolError.executionTimeout(toolName, response.timeoutMs ?? 0, sessionId);
|
|
1023
|
+
}
|
|
1024
|
+
this.logger.info(
|
|
1025
|
+
`Tool confirmation denied for ${toolName}, sessionId: ${sessionId ?? "global"}, reason: ${response.reason ?? "unknown"}`
|
|
1026
|
+
);
|
|
1027
|
+
throw import_errors.ToolError.executionDenied(toolName, sessionId, response.message);
|
|
1028
|
+
}
|
|
878
1029
|
/**
|
|
879
1030
|
* Refresh tool discovery (call when MCP servers change)
|
|
880
1031
|
* Refreshes both MCPManager's cache (server capabilities) and ToolManager's cache (combined tools)
|
|
@@ -7,6 +7,7 @@ import type { AgentEventBus } from '../events/index.js';
|
|
|
7
7
|
import type { ApprovalManager } from '../approval/manager.js';
|
|
8
8
|
import type { IAllowedToolsProvider } from './confirmation/allowed-tools-provider/types.js';
|
|
9
9
|
import type { PluginManager } from '../plugins/manager.js';
|
|
10
|
+
import type { PromptManager } from '../prompts/prompt-manager.js';
|
|
10
11
|
import type { SessionManager } from '../session/index.js';
|
|
11
12
|
import type { AgentStateManager } from '../agent/state-manager.js';
|
|
12
13
|
/**
|
|
@@ -60,6 +61,7 @@ export declare class ToolManager {
|
|
|
60
61
|
private toolsCache;
|
|
61
62
|
private cacheValid;
|
|
62
63
|
private logger;
|
|
64
|
+
private sessionAutoApproveTools;
|
|
63
65
|
constructor(mcpManager: MCPManager, approvalManager: ApprovalManager, allowedToolsProvider: IAllowedToolsProvider, approvalMode: 'manual' | 'auto-approve' | 'auto-deny', agentEventBus: AgentEventBus, toolPolicies: ToolPolicies, options: InternalToolsOptions, logger: IDextoLogger);
|
|
64
66
|
/**
|
|
65
67
|
* Initialize the ToolManager and its components
|
|
@@ -74,6 +76,56 @@ export declare class ToolManager {
|
|
|
74
76
|
* Must be called before initialize() if custom tools are configured
|
|
75
77
|
*/
|
|
76
78
|
setAgent(agent: any): void;
|
|
79
|
+
/**
|
|
80
|
+
* Set prompt manager for invoke_skill tool (called after construction to avoid circular dependencies)
|
|
81
|
+
* Must be called before initialize() if invoke_skill tool is enabled
|
|
82
|
+
*/
|
|
83
|
+
setPromptManager(promptManager: PromptManager): void;
|
|
84
|
+
/**
|
|
85
|
+
* Set task forker for context:fork skill execution (late-binding)
|
|
86
|
+
* Called by agent-spawner custom tool provider after RuntimeService is created.
|
|
87
|
+
* This enables invoke_skill to fork execution to an isolated subagent.
|
|
88
|
+
*/
|
|
89
|
+
setTaskForker(taskForker: import('./internal-tools/registry.js').TaskForker): void;
|
|
90
|
+
/**
|
|
91
|
+
* Set session-level auto-approve tools.
|
|
92
|
+
* When set, these tools will skip confirmation prompts for this session.
|
|
93
|
+
* This is ADDITIVE - other tools are NOT blocked, they just go through normal approval flow.
|
|
94
|
+
*
|
|
95
|
+
* @param sessionId The session ID
|
|
96
|
+
* @param autoApproveTools Array of tool names to auto-approve (e.g., ['custom--bash_exec', 'custom--read_file'])
|
|
97
|
+
*/
|
|
98
|
+
setSessionAutoApproveTools(sessionId: string, autoApproveTools: string[]): void;
|
|
99
|
+
/**
|
|
100
|
+
* Clear session-level auto-approve tools.
|
|
101
|
+
* Call this when the session ends or when the skill completes.
|
|
102
|
+
*
|
|
103
|
+
* @param sessionId The session ID to clear auto-approve tools for
|
|
104
|
+
*/
|
|
105
|
+
clearSessionAutoApproveTools(sessionId: string): void;
|
|
106
|
+
/**
|
|
107
|
+
* Check if a session has auto-approve tools set.
|
|
108
|
+
*
|
|
109
|
+
* @param sessionId The session ID to check
|
|
110
|
+
* @returns true if the session has auto-approve tools
|
|
111
|
+
*/
|
|
112
|
+
hasSessionAutoApproveTools(sessionId: string): boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Get the auto-approve tools for a session.
|
|
115
|
+
*
|
|
116
|
+
* @param sessionId The session ID to check
|
|
117
|
+
* @returns Array of auto-approve tool names, or undefined if none set
|
|
118
|
+
*/
|
|
119
|
+
getSessionAutoApproveTools(sessionId: string): string[] | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Check if a tool should be auto-approved for a session.
|
|
122
|
+
* Returns true if the tool is in the session's auto-approve list.
|
|
123
|
+
*
|
|
124
|
+
* @param sessionId The session ID
|
|
125
|
+
* @param toolName The tool name to check
|
|
126
|
+
* @returns true if the tool should be auto-approved
|
|
127
|
+
*/
|
|
128
|
+
private isToolAutoApprovedForSession;
|
|
77
129
|
/**
|
|
78
130
|
* Invalidate the tools cache when tool sources change
|
|
79
131
|
*/
|
|
@@ -208,16 +260,45 @@ export declare class ToolManager {
|
|
|
208
260
|
*/
|
|
209
261
|
private checkCustomApprovalOverride;
|
|
210
262
|
/**
|
|
211
|
-
* Handle tool approval
|
|
212
|
-
*
|
|
213
|
-
* and handles remember choice logic
|
|
214
|
-
*
|
|
215
|
-
* @param toolName The fully qualified tool name
|
|
216
|
-
* @param args The arguments for the tool
|
|
217
|
-
* @param toolCallId The unique tool call ID for tracking parallel tool calls
|
|
218
|
-
* @param sessionId Optional session ID for context
|
|
263
|
+
* Handle tool approval flow. Checks various precedence levels to determine
|
|
264
|
+
* if a tool should be auto-approved, denied, or requires manual approval.
|
|
219
265
|
*/
|
|
220
266
|
private handleToolApproval;
|
|
267
|
+
/**
|
|
268
|
+
* Try to resolve tool approval quickly based on policies and cached permissions.
|
|
269
|
+
* Returns null if manual approval is needed.
|
|
270
|
+
*
|
|
271
|
+
* Precedence order (highest to lowest):
|
|
272
|
+
* 1. Static deny list (security - always blocks)
|
|
273
|
+
* 2. Custom approval override (tool-specific approval flows)
|
|
274
|
+
* 3. Session auto-approve (skill allowed-tools)
|
|
275
|
+
* 4. Static allow list
|
|
276
|
+
* 5. Dynamic "remembered" allowed list
|
|
277
|
+
* 6. Bash command patterns
|
|
278
|
+
* 7. Approval mode (auto-approve/auto-deny)
|
|
279
|
+
*/
|
|
280
|
+
private tryQuickApprovalResolution;
|
|
281
|
+
/**
|
|
282
|
+
* Request manual approval from the user for a tool execution.
|
|
283
|
+
* Generates preview, sends approval request, and handles the response.
|
|
284
|
+
*/
|
|
285
|
+
private requestManualApproval;
|
|
286
|
+
/**
|
|
287
|
+
* Generate a preview for the tool approval UI if the tool supports it.
|
|
288
|
+
*/
|
|
289
|
+
private generateToolPreview;
|
|
290
|
+
/**
|
|
291
|
+
* Get suggested bash patterns for the approval UI.
|
|
292
|
+
*/
|
|
293
|
+
private getBashSuggestedPatterns;
|
|
294
|
+
/**
|
|
295
|
+
* Handle "remember choice" or "remember pattern" when user approves a tool.
|
|
296
|
+
*/
|
|
297
|
+
private handleRememberChoice;
|
|
298
|
+
/**
|
|
299
|
+
* Handle approval denied/timeout - throws appropriate error.
|
|
300
|
+
*/
|
|
301
|
+
private handleApprovalDenied;
|
|
221
302
|
/**
|
|
222
303
|
* Refresh tool discovery (call when MCP servers change)
|
|
223
304
|
* Refreshes both MCPManager's cache (server capabilities) and ToolManager's cache (combined tools)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-manager.d.ts","sourceRoot":"","sources":["../../src/tools/tool-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,OAAO,EAAwB,MAAM,YAAY,CAAC;AAK3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQnE;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBASa,WAAW;IACpB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAwB;IACpD,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,YAAY,CAA2B;IAG/C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,YAAY,CAAC,CAAoB;IAGzC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAW;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAc;IAGxD,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,MAAM,CAAe;
|
|
1
|
+
{"version":3,"file":"tool-manager.d.ts","sourceRoot":"","sources":["../../src/tools/tool-manager.ts"],"names":[],"mappings":"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"}
|