diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index 1294ab849e9..03c8bd21039 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -155,8 +155,12 @@ export function Session() { if (sidebar() === "auto" && wide()) return true return false }) + const sidebarOverlay = createMemo(() => { + if (sync.data.config.tui?.sidebar_overlay === false) return false + return sidebarVisible() && !wide() + }) const showTimestamps = createMemo(() => timestamps() === "show") - const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() ? 42 : 0) - 4) + const contentWidth = createMemo(() => dimensions().width - (sidebarVisible() && !sidebarOverlay() ? 42 : 0) - 4) const scrollAcceleration = createMemo(() => { const tui = sync.data.config.tui diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index ddb3af4b0a8..350ee582819 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -796,6 +796,12 @@ export namespace Config { .enum(["auto", "stacked"]) .optional() .describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"), + sidebar_overlay: z + .boolean() + .optional() + .describe( + "Enable sidebar overlay mode on narrow screens (default: true). Set to false to always show sidebar side-by-side with content", + ), }) export const Server = z diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 75540f90724..2a781979360 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1608,6 +1608,10 @@ export type Config = { * Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column */ diff_style?: "auto" | "stacked" + /** + * Enable sidebar overlay mode on narrow screens (default: true). Set to false to always show sidebar side-by-side with content + */ + sidebar_overlay?: boolean } server?: ServerConfig /** diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 08dd98fd9bc..1366279a0f5 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -9337,6 +9337,10 @@ "description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column", "type": "string", "enum": ["auto", "stacked"] + }, + "sidebar_overlay": { + "description": "Enable sidebar overlay mode on narrow screens (default: true). Set to false to always show sidebar side-by-side with content", + "type": "boolean" } } },