diff --git a/packages/tui/src/component/dialog-config.tsx b/packages/tui/src/component/dialog-config.tsx index ee57546c194..56473ba0cdc 100644 --- a/packages/tui/src/component/dialog-config.tsx +++ b/packages/tui/src/component/dialog-config.tsx @@ -51,15 +51,6 @@ export const settings: Setting[] = [ values: ["hide", "auto"], keywords: ["side panel"], }, - { - title: "Terminal", - category: "Session", - path: ["session", "terminal"], - default: process.platform !== "win32", - values: [false, true], - labels: ["off", "on"], - keywords: ["pty", "shell", "terminal pane"], - }, { title: "Scrollbar", category: "Session", diff --git a/packages/tui/src/config/index.tsx b/packages/tui/src/config/index.tsx index e635f403e00..c0a90585acf 100644 --- a/packages/tui/src/config/index.tsx +++ b/packages/tui/src/config/index.tsx @@ -148,7 +148,6 @@ export const Info = Schema.Struct({ sidebar: Schema.optional(Schema.Literals(["auto", "hide"])).annotate({ description: "Session sidebar visibility; 'auto' shows it when space permits", }), - terminal: Schema.optional(Schema.Boolean).annotate({ description: "Enable persistent session terminal panes" }), scrollbar: Schema.optional(Schema.Boolean).annotate({ description: "Show the session transcript scrollbar" }), thinking: Schema.optional(Schema.Literals(["show", "hide"])).annotate({ description: "Show or hide model reasoning by default", @@ -260,6 +259,7 @@ export type Resolved = Omit, "new_location" | "permissions" | "tps"> & { new_location: "launch" | "inherit" permissions: "prompt" | "autoaccept" + terminal: boolean tps: boolean } tabs: { @@ -308,7 +308,7 @@ export function resolve(input: Info, options: { terminalSuspend: boolean }): Res new_location: input.session?.new_location ?? "launch", permissions: input.session?.permissions ?? "prompt", // Persistent terminal panes need the opencode-pty daemon, which does not ship Windows binaries. - terminal: input.session?.terminal ?? process.platform !== "win32", + terminal: process.platform !== "win32", tps: input.session?.tps ?? true, }, tabs: { diff --git a/packages/tui/test/app-lifecycle.test.tsx b/packages/tui/test/app-lifecycle.test.tsx index dc592db9fda..e817c6c2007 100644 --- a/packages/tui/test/app-lifecycle.test.tsx +++ b/packages/tui/test/app-lifecycle.test.tsx @@ -1328,7 +1328,6 @@ test.each(["manual", "select"] as const)( get: async () => ({ animations: false, terminal: { copy }, - session: { terminal: true }, }), update: async () => ({}), }, diff --git a/packages/tui/test/cli/tui/composer-keymap.test.tsx b/packages/tui/test/cli/tui/composer-keymap.test.tsx index 1feb3aa426c..9be0a5d0a3d 100644 --- a/packages/tui/test/cli/tui/composer-keymap.test.tsx +++ b/packages/tui/test/cli/tui/composer-keymap.test.tsx @@ -103,7 +103,7 @@ async function renderComposer( const app = await testRender( () => ( - + diff --git a/packages/tui/test/cli/tui/data.test.tsx b/packages/tui/test/cli/tui/data.test.tsx index c7aa11902b3..a1ce1d6f6f7 100644 --- a/packages/tui/test/cli/tui/data.test.tsx +++ b/packages/tui/test/cli/tui/data.test.tsx @@ -43,7 +43,7 @@ function emitEvent(events: ReturnType, event: OpenCode events.emit({ ...event, location: { directory } }) } -const config = createTuiResolvedConfig({ session: { terminal: false } }) +const config = createTuiResolvedConfig({}, { terminal: false }) function DataProvider(props: ParentProps) { return ( diff --git a/packages/tui/test/component/dialog-shell-output.test.tsx b/packages/tui/test/component/dialog-shell-output.test.tsx index 0da5e3fc84a..5c0691b9d3b 100644 --- a/packages/tui/test/component/dialog-shell-output.test.tsx +++ b/packages/tui/test/component/dialog-shell-output.test.tsx @@ -66,7 +66,7 @@ async function setup(width: number, output = "") { const app = await testRender( () => ( - + diff --git a/packages/tui/test/fixture/tui-runtime.ts b/packages/tui/test/fixture/tui-runtime.ts index 26a5fc8e4f9..a25568cbda3 100644 --- a/packages/tui/test/fixture/tui-runtime.ts +++ b/packages/tui/test/fixture/tui-runtime.ts @@ -7,6 +7,10 @@ type ResolvedInput = Omit & { leader?: { timeout?: number } } -export function createTuiResolvedConfig(input: ResolvedInput = {}) { - return resolve(input, { terminalSuspend: process.platform !== "win32" }) +export function createTuiResolvedConfig(input: ResolvedInput = {}, options?: { terminal?: boolean }) { + const config = resolve(input, { terminalSuspend: process.platform !== "win32" }) + return { + ...config, + session: { ...config.session, terminal: options?.terminal ?? config.session.terminal }, + } } diff --git a/packages/tui/test/session-wheel-focus.test.tsx b/packages/tui/test/session-wheel-focus.test.tsx index 2db240a42f2..9937f8ad422 100644 --- a/packages/tui/test/session-wheel-focus.test.tsx +++ b/packages/tui/test/session-wheel-focus.test.tsx @@ -76,7 +76,7 @@ test.each([80, 120, 180])("session wheel scrolling preserves pane focus at width app: { name: "test", version: "test", channel: "test" }, server: { endpoint: { url: server.url.toString() } }, config: { - get: async () => ({ animations: false, session: { terminal: true }, tabs: { enabled: false } }), + get: async () => ({ animations: false, tabs: { enabled: false } }), update: async () => ({}), }, packages: { prepare: async () => ({ directory: "" }) },