diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx index c97025aee..2a6af3a5d 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/tool-call/tool-call.tsx @@ -1426,7 +1426,9 @@ function RunSkipButtons({ setButtonsHidden(true) try { // Add to auto-allowed list - this also executes all pending integration tools of this type + console.log('[RunSkipButtons] Always Allow clicked for tool:', toolCall.name) await addAutoAllowedTool(toolCall.name) + console.log('[RunSkipButtons] addAutoAllowedTool completed for:', toolCall.name) // For client tools with interrupts (not integration tools), we still need to call handleRun // since executeIntegrationTool only works for server-side tools if (!isIntegrationTool(toolCall.name)) { @@ -1526,7 +1528,11 @@ export function ToolCall({ toolCall.name === 'user_memory' || toolCall.name === 'edit_respond' || toolCall.name === 'debug_respond' || - toolCall.name === 'plan_respond' + toolCall.name === 'plan_respond' || + toolCall.name === 'research_respond' || + toolCall.name === 'info_respond' || + toolCall.name === 'deploy_respond' || + toolCall.name === 'superagent_respond' ) return null diff --git a/apps/sim/stores/panel/copilot/store.ts b/apps/sim/stores/panel/copilot/store.ts index fd7552e12..3c5cad8c7 100644 --- a/apps/sim/stores/panel/copilot/store.ts +++ b/apps/sim/stores/panel/copilot/store.ts @@ -2116,6 +2116,24 @@ const subAgentSSEHandlers: Record = { }) }) } + } else { + // Check if this is an integration tool (server-side) that should be auto-executed + const isIntegrationTool = !CLASS_TOOL_METADATA[name] + if (isIntegrationTool && isSubAgentAutoAllowed) { + logger.info('[SubAgent] Auto-executing integration tool (auto-allowed)', { + id, + name, + }) + // Execute integration tool via the store method + const { executeIntegrationTool } = get() + executeIntegrationTool(id).catch((err) => { + logger.error('[SubAgent] Integration tool auto-execution failed', { + id, + name, + error: err?.message || err, + }) + }) + } } } } catch (e: any) { @@ -3923,11 +3941,16 @@ export const useCopilotStore = create()( loadAutoAllowedTools: async () => { try { + logger.info('[AutoAllowedTools] Loading from API...') const res = await fetch('/api/copilot/auto-allowed-tools') + logger.info('[AutoAllowedTools] Load response', { status: res.status, ok: res.ok }) if (res.ok) { const data = await res.json() - set({ autoAllowedTools: data.autoAllowedTools || [] }) - logger.info('[AutoAllowedTools] Loaded', { tools: data.autoAllowedTools }) + const tools = data.autoAllowedTools || [] + set({ autoAllowedTools: tools }) + logger.info('[AutoAllowedTools] Loaded successfully', { count: tools.length, tools }) + } else { + logger.warn('[AutoAllowedTools] Load failed with status', { status: res.status }) } } catch (err) { logger.error('[AutoAllowedTools] Failed to load', { error: err }) @@ -3936,15 +3959,18 @@ export const useCopilotStore = create()( addAutoAllowedTool: async (toolId: string) => { try { + logger.info('[AutoAllowedTools] Adding tool...', { toolId }) const res = await fetch('/api/copilot/auto-allowed-tools', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ toolId }), }) + logger.info('[AutoAllowedTools] API response', { toolId, status: res.status, ok: res.ok }) if (res.ok) { const data = await res.json() + logger.info('[AutoAllowedTools] API returned', { toolId, tools: data.autoAllowedTools }) set({ autoAllowedTools: data.autoAllowedTools || [] }) - logger.info('[AutoAllowedTools] Added tool', { toolId }) + logger.info('[AutoAllowedTools] Added tool to store', { toolId }) // Auto-execute all pending tools of the same type const { toolCallsById, executeIntegrationTool } = get()