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",
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
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 e6018a22a..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 ?? "session",
- }
+ const tmuxConfig = createRuntimeTmuxConfig(pluginConfig)
const modelCacheState = createModelCacheState()