From 57c973bac58911276ff3169f620b93f933182f1b Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 3 Apr 2026 17:06:22 +0900 Subject: [PATCH 1/4] Revert tmux config default isolation to inline Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/config/schema/tmux.test.ts | 25 +++++++++++++++++++++++++ src/config/schema/tmux.ts | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/config/schema/tmux.test.ts diff --git a/src/config/schema/tmux.test.ts b/src/config/schema/tmux.test.ts new file mode 100644 index 000000000..3e039b35e --- /dev/null +++ b/src/config/schema/tmux.test.ts @@ -0,0 +1,25 @@ +/// + +import { describe, expect, test } from "bun:test" + +import { TmuxConfigSchema, TmuxIsolationSchema } from "./tmux" + +describe("TmuxIsolationSchema", () => { + describe('#given all supported isolation values', () => { + test('#when parsed #then it accepts inline, window, and session', () => { + expect(TmuxIsolationSchema.parse("inline")).toBe("inline") + expect(TmuxIsolationSchema.parse("window")).toBe("window") + expect(TmuxIsolationSchema.parse("session")).toBe("session") + }) + }) +}) + +describe("TmuxConfigSchema", () => { + describe('#given tmux isolation is omitted', () => { + test('#when parsed #then default isolation is inline', () => { + const result = TmuxConfigSchema.parse({}) + + expect(result.isolation).toBe("inline") + }) + }) +}) diff --git a/src/config/schema/tmux.ts b/src/config/schema/tmux.ts index 77582cf40..a10edc7f9 100644 --- a/src/config/schema/tmux.ts +++ b/src/config/schema/tmux.ts @@ -20,7 +20,7 @@ export const TmuxConfigSchema = z.object({ main_pane_size: z.number().min(20).max(80).default(60), main_pane_min_width: z.number().min(40).default(120), agent_pane_min_width: z.number().min(20).default(40), - isolation: TmuxIsolationSchema.default("session"), + isolation: TmuxIsolationSchema.default("inline"), }) export type TmuxConfig = z.infer From f950d3d75cb5b7fe37064b6cb2b23f3fe854caec Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 3 Apr 2026 17:06:22 +0900 Subject: [PATCH 2/4] Align tmux plugin fallback with inline isolation Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.ts b/src/index.ts index e6018a22a..5dd44ec04 100644 --- a/src/index.ts +++ b/src/index.ts @@ -51,7 +51,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { main_pane_size: pluginConfig.tmux?.main_pane_size ?? 60, main_pane_min_width: pluginConfig.tmux?.main_pane_min_width ?? 120, agent_pane_min_width: pluginConfig.tmux?.agent_pane_min_width ?? 40, - isolation: pluginConfig.tmux?.isolation ?? "session", + isolation: pluginConfig.tmux?.isolation ?? "inline", } const modelCacheState = createModelCacheState() From f447f96f529ef6a541ee6ebfbedd1189facc016f Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 3 Apr 2026 17:06:22 +0900 Subject: [PATCH 3/4] Regenerate schema for inline tmux isolation default Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- assets/oh-my-opencode.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/oh-my-opencode.schema.json b/assets/oh-my-opencode.schema.json index d76d15299..d43ff4501 100644 --- a/assets/oh-my-opencode.schema.json +++ b/assets/oh-my-opencode.schema.json @@ -6002,7 +6002,7 @@ "minimum": 20 }, "isolation": { - "default": "session", + "default": "inline", "type": "string", "enum": [ "inline", From 6ca046c12b9e10afb0ba93ac0919d60c7c8564e0 Mon Sep 17 00:00:00 2001 From: YeonGyu-Kim Date: Fri, 3 Apr 2026 17:37:51 +0900 Subject: [PATCH 4/4] Derive tmux runtime fallback from schema defaults Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus --- src/create-runtime-tmux-config.test.ts | 17 +++++++++++++++++ src/create-runtime-tmux-config.ts | 6 ++++++ src/index.ts | 10 ++-------- 3 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 src/create-runtime-tmux-config.test.ts create mode 100644 src/create-runtime-tmux-config.ts diff --git a/src/create-runtime-tmux-config.test.ts b/src/create-runtime-tmux-config.test.ts new file mode 100644 index 000000000..efc03fa4a --- /dev/null +++ b/src/create-runtime-tmux-config.test.ts @@ -0,0 +1,17 @@ +/// + +import { describe, expect, test } from "bun:test" + +import { TmuxConfigSchema } from "./config/schema/tmux" +import { createRuntimeTmuxConfig } from "./create-runtime-tmux-config" + +describe("createRuntimeTmuxConfig", () => { + describe("#given tmux isolation is omitted from plugin config", () => { + test("#when runtime tmux config is created #then it matches the schema default", () => { + const runtimeTmuxConfig = createRuntimeTmuxConfig({}) + const schemaDefault = TmuxConfigSchema.parse({}).isolation + + expect(runtimeTmuxConfig.isolation).toBe(schemaDefault) + }) + }) +}) diff --git a/src/create-runtime-tmux-config.ts b/src/create-runtime-tmux-config.ts new file mode 100644 index 000000000..83bc25c83 --- /dev/null +++ b/src/create-runtime-tmux-config.ts @@ -0,0 +1,6 @@ +import type { OhMyOpenCodeConfig, TmuxConfig } from "./config" +import { TmuxConfigSchema } from "./config/schema/tmux" + +export function createRuntimeTmuxConfig(pluginConfig: { tmux?: OhMyOpenCodeConfig["tmux"] }): TmuxConfig { + return TmuxConfigSchema.parse(pluginConfig.tmux ?? {}) +} diff --git a/src/index.ts b/src/index.ts index 5dd44ec04..1e10b1d5a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ import type { HookName } from "./config" import { createHooks } from "./create-hooks" import { createManagers } from "./create-managers" +import { createRuntimeTmuxConfig } from "./create-runtime-tmux-config" import { createTools } from "./create-tools" import { createPluginInterface } from "./plugin-interface" import { createPluginDispose, type PluginDispose } from "./plugin-dispose" @@ -45,14 +46,7 @@ const OhMyOpenCodePlugin: Plugin = async (ctx) => { const firstMessageVariantGate = createFirstMessageVariantGate() - const tmuxConfig = { - enabled: pluginConfig.tmux?.enabled ?? false, - layout: pluginConfig.tmux?.layout ?? "main-vertical", - main_pane_size: pluginConfig.tmux?.main_pane_size ?? 60, - main_pane_min_width: pluginConfig.tmux?.main_pane_min_width ?? 120, - agent_pane_min_width: pluginConfig.tmux?.agent_pane_min_width ?? 40, - isolation: pluginConfig.tmux?.isolation ?? "inline", - } + const tmuxConfig = createRuntimeTmuxConfig(pluginConfig) const modelCacheState = createModelCacheState()