From 717284a9799f99247ff9aa4bab77e414267cfc41 Mon Sep 17 00:00:00 2001 From: andrepimenta Date: Wed, 9 Jul 2025 01:59:39 +0100 Subject: [PATCH] Let user chose yolo mode when there is an error with permissions --- src/extension.ts | 2 -- src/ui-styles.ts | 35 ++++++++++++++++++++++++++ src/ui.ts | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 26f98ca..792752d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -430,8 +430,6 @@ class ClaudeChatProvider { args.push('--mcp-config', mcpConfigPath); args.push('--allowedTools', 'mcp__permissions__approval_prompt'); args.push('--permission-prompt-tool', 'mcp__permissions__approval_prompt'); - } else { - args.push('--dangerously-skip-permissions'); } } diff --git a/src/ui-styles.ts b/src/ui-styles.ts index c36d9da..f62171d 100644 --- a/src/ui-styles.ts +++ b/src/ui-styles.ts @@ -1366,6 +1366,41 @@ const styles = ` animation: slideDown 0.3s ease; } + .yolo-suggestion { + margin-top: 12px; + padding: 12px; + background-color: rgba(0, 122, 204, 0.1); + border: 1px solid rgba(0, 122, 204, 0.3); + border-radius: 6px; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + } + + .yolo-suggestion-text { + font-size: 12px; + color: var(--vscode-foreground); + flex-grow: 1; + } + + .yolo-suggestion-btn { + background-color: var(--vscode-button-background); + color: var(--vscode-button-foreground); + border: none; + border-radius: 4px; + padding: 6px 12px; + font-size: 11px; + cursor: pointer; + transition: background-color 0.2s ease; + font-weight: 500; + flex-shrink: 0; + } + + .yolo-suggestion-btn:hover { + background-color: var(--vscode-button-hoverBackground); + } + .file-picker-modal { position: fixed; top: 0; diff --git a/src/ui.ts b/src/ui.ts index 8912e3b..5c192f6 100644 --- a/src/ui.ts +++ b/src/ui.ts @@ -639,6 +639,20 @@ const html = ` } messageDiv.appendChild(contentDiv); + + // Check if this is a permission-related error and add yolo mode button + if (type === 'error' && isPermissionError(content)) { + const yoloSuggestion = document.createElement('div'); + yoloSuggestion.className = 'yolo-suggestion'; + yoloSuggestion.innerHTML = \` +
+ 💡 This looks like a permission issue. You can enable Yolo Mode to skip all permission checks. +
+ + \`; + messageDiv.appendChild(yoloSuggestion); + } + messagesDiv.appendChild(messageDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; } @@ -823,6 +837,20 @@ const html = ` } messageDiv.appendChild(contentDiv); + + // Check if this is a permission-related error and add yolo mode button + if (data.isError && isPermissionError(content)) { + const yoloSuggestion = document.createElement('div'); + yoloSuggestion.className = 'yolo-suggestion'; + yoloSuggestion.innerHTML = \` +
+ 💡 This looks like a permission issue. You can enable Yolo Mode to skip all permission checks. +
+ + \`; + messageDiv.appendChild(yoloSuggestion); + } + messagesDiv.appendChild(messageDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; } @@ -1481,6 +1509,42 @@ const html = ` const yoloMode = yoloModeCheckbox.checked; warning.style.display = yoloMode ? 'block' : 'none'; } + + function isPermissionError(content) { + const permissionErrorPatterns = [ + 'Error: MCP config file not found', + 'Error: MCP tool', + 'Claude requested permissions to use', + 'permission denied', + 'Permission denied', + 'permission request', + 'Permission request', + 'EACCES', + 'permission error', + 'Permission error' + ]; + + return permissionErrorPatterns.some(pattern => + content.toLowerCase().includes(pattern.toLowerCase()) + ); + } + + function enableYoloMode() { + // Update the checkbox + const yoloModeCheckbox = document.getElementById('yolo-mode'); + if (yoloModeCheckbox) { + yoloModeCheckbox.checked = true; + + // Trigger the settings update + updateSettings(); + + // Show confirmation message + addMessage('✅ Yolo Mode enabled! All permission checks will be bypassed for future commands.', 'system'); + + // Update the warning banner + updateYoloWarning(); + } + } function hideToolsModal() { document.getElementById('toolsModal').style.display = 'none';