|
1 | 1 | import { VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react" |
2 | 2 | import { useCallback, useState } from "react" |
3 | 3 | import { useExtensionState } from "../../context/ExtensionStateContext" |
| 4 | +import { vscode } from "../../utils/vscode" |
4 | 5 |
|
5 | 6 | interface AutoApproveAction { |
6 | 7 | id: string |
@@ -50,7 +51,7 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { |
50 | 51 | }, |
51 | 52 | { |
52 | 53 | id: "executeCommands", |
53 | | - label: "Execute safe commands", |
| 54 | + label: "Execute approved commands", |
54 | 55 | shortName: "Commands", |
55 | 56 | enabled: alwaysAllowExecute ?? false, |
56 | 57 | description: |
@@ -89,12 +90,41 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { |
89 | 90 | .join(", ") |
90 | 91 |
|
91 | 92 | // Individual checkbox handlers - each one only updates its own state |
92 | | - const handleReadOnlyChange = useCallback(() => setAlwaysAllowReadOnly(!(alwaysAllowReadOnly ?? false)), [alwaysAllowReadOnly, setAlwaysAllowReadOnly]) |
93 | | - const handleWriteChange = useCallback(() => setAlwaysAllowWrite(!(alwaysAllowWrite ?? false)), [alwaysAllowWrite, setAlwaysAllowWrite]) |
94 | | - const handleExecuteChange = useCallback(() => setAlwaysAllowExecute(!(alwaysAllowExecute ?? false)), [alwaysAllowExecute, setAlwaysAllowExecute]) |
95 | | - const handleBrowserChange = useCallback(() => setAlwaysAllowBrowser(!(alwaysAllowBrowser ?? false)), [alwaysAllowBrowser, setAlwaysAllowBrowser]) |
96 | | - const handleMcpChange = useCallback(() => setAlwaysAllowMcp(!(alwaysAllowMcp ?? false)), [alwaysAllowMcp, setAlwaysAllowMcp]) |
97 | | - const handleRetryChange = useCallback(() => setAlwaysApproveResubmit(!(alwaysApproveResubmit ?? false)), [alwaysApproveResubmit, setAlwaysApproveResubmit]) |
| 93 | + const handleReadOnlyChange = useCallback(() => { |
| 94 | + const newValue = !(alwaysAllowReadOnly ?? false) |
| 95 | + setAlwaysAllowReadOnly(newValue) |
| 96 | + vscode.postMessage({ type: "alwaysAllowReadOnly", bool: newValue }) |
| 97 | + }, [alwaysAllowReadOnly, setAlwaysAllowReadOnly]) |
| 98 | + |
| 99 | + const handleWriteChange = useCallback(() => { |
| 100 | + const newValue = !(alwaysAllowWrite ?? false) |
| 101 | + setAlwaysAllowWrite(newValue) |
| 102 | + vscode.postMessage({ type: "alwaysAllowWrite", bool: newValue }) |
| 103 | + }, [alwaysAllowWrite, setAlwaysAllowWrite]) |
| 104 | + |
| 105 | + const handleExecuteChange = useCallback(() => { |
| 106 | + const newValue = !(alwaysAllowExecute ?? false) |
| 107 | + setAlwaysAllowExecute(newValue) |
| 108 | + vscode.postMessage({ type: "alwaysAllowExecute", bool: newValue }) |
| 109 | + }, [alwaysAllowExecute, setAlwaysAllowExecute]) |
| 110 | + |
| 111 | + const handleBrowserChange = useCallback(() => { |
| 112 | + const newValue = !(alwaysAllowBrowser ?? false) |
| 113 | + setAlwaysAllowBrowser(newValue) |
| 114 | + vscode.postMessage({ type: "alwaysAllowBrowser", bool: newValue }) |
| 115 | + }, [alwaysAllowBrowser, setAlwaysAllowBrowser]) |
| 116 | + |
| 117 | + const handleMcpChange = useCallback(() => { |
| 118 | + const newValue = !(alwaysAllowMcp ?? false) |
| 119 | + setAlwaysAllowMcp(newValue) |
| 120 | + vscode.postMessage({ type: "alwaysAllowMcp", bool: newValue }) |
| 121 | + }, [alwaysAllowMcp, setAlwaysAllowMcp]) |
| 122 | + |
| 123 | + const handleRetryChange = useCallback(() => { |
| 124 | + const newValue = !(alwaysApproveResubmit ?? false) |
| 125 | + setAlwaysApproveResubmit(newValue) |
| 126 | + vscode.postMessage({ type: "alwaysApproveResubmit", bool: newValue }) |
| 127 | + }, [alwaysApproveResubmit, setAlwaysApproveResubmit]) |
98 | 128 |
|
99 | 129 | // Map action IDs to their specific handlers |
100 | 130 | const actionHandlers: Record<AutoApproveAction['id'], () => void> = { |
@@ -129,7 +159,11 @@ const AutoApproveMenu = ({ style }: AutoApproveMenuProps) => { |
129 | 159 | <div onClick={(e) => e.stopPropagation()}> |
130 | 160 | <VSCodeCheckbox |
131 | 161 | checked={autoApprovalEnabled ?? false} |
132 | | - onChange={() => setAutoApprovalEnabled(!(autoApprovalEnabled ?? false))} |
| 162 | + onChange={() => { |
| 163 | + const newValue = !(autoApprovalEnabled ?? false) |
| 164 | + setAutoApprovalEnabled(newValue) |
| 165 | + vscode.postMessage({ type: "autoApprovalEnabled", bool: newValue }) |
| 166 | + }} |
133 | 167 | /> |
134 | 168 | </div> |
135 | 169 | <div style={{ |
|
0 commit comments