summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authorShoubhit Dash <[email protected]>2026-04-07 16:30:13 +0530
committerGitHub <[email protected]>2026-04-07 11:00:13 +0000
commit41612b3dbea7b4e30a5a83678d2526dbeae9b61a (patch)
tree503fcb2bce0be0bb945f7572e3edb2859263145e /packages/app/src/components
parentc2d2ca352252a922354c89bfbdb135cf1abfe1b6 (diff)
downloadopencode-41612b3dbea7b4e30a5a83678d2526dbeae9b61a.tar.gz
opencode-41612b3dbea7b4e30a5a83678d2526dbeae9b61a.zip
Move auto-accept permissions to settings (#21308)
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/prompt-input.tsx39
-rw-r--r--packages/app/src/components/settings-general.tsx39
2 files changed, 40 insertions, 38 deletions
diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx
index e9049ae7e..eedbc91cf 100644
--- a/packages/app/src/components/prompt-input.tsx
+++ b/packages/app/src/components/prompt-input.tsx
@@ -1079,17 +1079,6 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
if (!id) return permission.isAutoAcceptingDirectory(sdk.directory)
return permission.isAutoAccepting(id, sdk.directory)
})
- const acceptLabel = createMemo(() =>
- language.t(accepting() ? "command.permissions.autoaccept.disable" : "command.permissions.autoaccept.enable"),
- )
- const toggleAccept = () => {
- if (!params.id) {
- permission.toggleAutoAcceptDirectory(sdk.directory)
- return
- }
-
- permission.toggleAutoAccept(params.id, sdk.directory)
- }
const { abort, handleSubmit } = createPromptSubmit({
info,
@@ -1333,11 +1322,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
onMouseDown={(e) => {
const target = e.target
if (!(target instanceof HTMLElement)) return
- if (
- target.closest(
- '[data-action="prompt-attach"], [data-action="prompt-submit"], [data-action="prompt-permissions"]',
- )
- ) {
+ if (target.closest('[data-action="prompt-attach"], [data-action="prompt-submit"]')) {
return
}
editorRef?.focus()
@@ -1597,28 +1582,6 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
</TooltipKeybind>
</div>
</Show>
- <TooltipKeybind
- placement="top"
- gutter={8}
- title={acceptLabel()}
- keybind={command.keybind("permissions.autoaccept")}
- >
- <Button
- data-action="prompt-permissions"
- variant="ghost"
- onClick={toggleAccept}
- classList={{
- "h-7 w-7 p-0 shrink-0 flex items-center justify-center": true,
- "text-text-base": !accepting(),
- "hover:bg-surface-success-base": accepting(),
- }}
- style={control()}
- aria-label={acceptLabel()}
- aria-pressed={accepting()}
- >
- <Icon name="shield" size="small" classList={{ "text-icon-success-base": accepting() }} />
- </Button>
- </TooltipKeybind>
</div>
</div>
</div>
diff --git a/packages/app/src/components/settings-general.tsx b/packages/app/src/components/settings-general.tsx
index 8a4d49886..b4ac061df 100644
--- a/packages/app/src/components/settings-general.tsx
+++ b/packages/app/src/components/settings-general.tsx
@@ -8,7 +8,9 @@ import { TextField } from "@opencode-ai/ui/text-field"
import { Tooltip } from "@opencode-ai/ui/tooltip"
import { useTheme, type ColorScheme } from "@opencode-ai/ui/theme/context"
import { showToast } from "@opencode-ai/ui/toast"
+import { useParams } from "@solidjs/router"
import { useLanguage } from "@/context/language"
+import { usePermission } from "@/context/permission"
import { usePlatform } from "@/context/platform"
import {
monoDefault,
@@ -19,6 +21,7 @@ import {
sansInput,
useSettings,
} from "@/context/settings"
+import { decode64 } from "@/utils/base64"
import { playSoundById, SOUND_OPTIONS } from "@/utils/sound"
import { Link } from "./link"
import { SettingsList } from "./settings-list"
@@ -64,7 +67,9 @@ const playDemoSound = (id: string | undefined) => {
export const SettingsGeneral: Component = () => {
const theme = useTheme()
const language = useLanguage()
+ const permission = usePermission()
const platform = usePlatform()
+ const params = useParams()
const settings = useSettings()
onMount(() => {
@@ -76,6 +81,31 @@ export const SettingsGeneral: Component = () => {
})
const linux = createMemo(() => platform.platform === "desktop" && platform.os === "linux")
+ const dir = createMemo(() => decode64(params.dir))
+ const accepting = createMemo(() => {
+ const value = dir()
+ if (!value) return false
+ if (!params.id) return permission.isAutoAcceptingDirectory(value)
+ return permission.isAutoAccepting(params.id, value)
+ })
+
+ const toggleAccept = (checked: boolean) => {
+ const value = dir()
+ if (!value) return
+
+ if (!params.id) {
+ if (permission.isAutoAcceptingDirectory(value) === checked) return
+ permission.toggleAutoAcceptDirectory(value)
+ return
+ }
+
+ if (checked) {
+ permission.enableAutoAccept(params.id, value)
+ return
+ }
+
+ permission.disableAutoAccept(params.id, value)
+ }
const check = () => {
if (!platform.checkUpdate) return
@@ -202,6 +232,15 @@ export const SettingsGeneral: Component = () => {
</SettingsRow>
<SettingsRow
+ title={language.t("command.permissions.autoaccept.enable")}
+ description={language.t("toast.permissions.autoaccept.on.description")}
+ >
+ <div data-action="settings-auto-accept-permissions">
+ <Switch checked={accepting()} disabled={!dir()} onChange={toggleAccept} />
+ </div>
+ </SettingsRow>
+
+ <SettingsRow
title={language.t("settings.general.row.reasoningSummaries.title")}
description={language.t("settings.general.row.reasoningSummaries.description")}
>