diff --git a/packages/core/src/v1/config/config.ts b/packages/core/src/v1/config/config.ts index f85175cb7909..5e9d22b5b671 100644 --- a/packages/core/src/v1/config/config.ts +++ b/packages/core/src/v1/config/config.ts @@ -176,6 +176,10 @@ export const Info = Schema.Struct({ mcp_timeout: Schema.optional(PositiveInt).annotate({ description: "Timeout in milliseconds for model context protocol (MCP) requests", }), + dialog_background_overlay: Schema.optional(Schema.Literals(["full", "limited", "none"])).annotate({ + description: + "Control dialog background overlay: 'full' = semi-transparent overlay (default), 'limited' = overlay only within dialog bounds, 'none' = no overlay", + }), policies: Schema.optional(Schema.mutable(Schema.Array(ConfigExperimental.Policy))).annotate({ description: "Policy statements applied to supported resources, such as provider access", }), diff --git a/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx b/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx index 73d61c3ba66f..6b8c42196c6a 100644 --- a/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx +++ b/packages/opencode/src/cli/cmd/tui/ui/dialog.tsx @@ -6,6 +6,7 @@ import { createStore } from "solid-js/store" import { useToast } from "./toast" import { Flag } from "@opencode-ai/core/flag/flag" import * as Selection from "@tui/util/selection" +import { useSync } from "@tui/context/sync" import { useBindings, useOpencodeModeStack } from "../keymap" export function Dialog( @@ -17,6 +18,10 @@ export function Dialog( const dimensions = useTerminalDimensions() const { theme } = useTheme() const renderer = useRenderer() + const sync = useSync() + + const overlayMode = () => sync.data.config.experimental?.dialog_background_overlay ?? "full" + const showOverlay = () => overlayMode() === "full" let dismiss = false const width = () => { @@ -45,7 +50,7 @@ export function Dialog( paddingTop={dimensions().height / 4} left={0} top={0} - backgroundColor={RGBA.fromInts(0, 0, 0, 150)} + backgroundColor={showOverlay() ? RGBA.fromInts(0, 0, 0, 150) : undefined} > { diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 158d93cf77f9..b75dc3dc307f 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1975,6 +1975,10 @@ export type Config = { primary_tools?: Array continue_loop_on_deny?: boolean mcp_timeout?: number + /** + * Control dialog background overlay: 'full' = semi-transparent overlay (default), 'limited' = overlay only within dialog bounds, 'none' = no overlay + */ + dialog_background_overlay?: 'full' | 'limited' | 'none' policies?: Array } }