diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx index 1217bb54ae0..418857e42ee 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx @@ -48,7 +48,7 @@ export function DialogSessionList() { gutter: isWorking ? : undefined, } }) - .slice(0, 150) + .slice(0, sync.data.config.tui?.session_list_limit ?? 150) }) createEffect(() => { diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index 2528a499896..961ae59fe43 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -188,7 +188,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ event.properties.info.sessionID, produce((draft) => { draft.splice(result.index, 0, event.properties.info) - if (draft.length > 100) draft.shift() + if (draft.length > (store.config.tui?.message_limit ?? 100)) draft.shift() }), ) break @@ -345,7 +345,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ if (fullSyncedSessions.has(sessionID)) return const [session, messages, todo, diff] = await Promise.all([ sdk.client.session.get({ sessionID }, { throwOnError: true }), - sdk.client.session.messages({ sessionID, limit: 100 }), + sdk.client.session.messages({ sessionID, limit: store.config.tui?.message_limit ?? 100 }), sdk.client.session.todo({ sessionID }), sdk.client.session.diff({ sessionID }), ]) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index ba9d1973025..1628b35f239 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -585,6 +585,20 @@ export namespace Config { .enum(["auto", "stacked"]) .optional() .describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"), + message_limit: z + .number() + .int() + .min(1) + .max(10000) + .optional() + .describe("Maximum number of messages to load per session (default: 100)"), + session_list_limit: z + .number() + .int() + .min(1) + .max(10000) + .optional() + .describe("Maximum number of sessions to display in session list (default: 150)"), }) export const Layout = z.enum(["auto", "stretch"]).meta({ diff --git a/packages/sdk/js/src/gen/types.gen.ts b/packages/sdk/js/src/gen/types.gen.ts index 06993d3f930..eabd545e7df 100644 --- a/packages/sdk/js/src/gen/types.gen.ts +++ b/packages/sdk/js/src/gen/types.gen.ts @@ -1195,6 +1195,10 @@ export type Config = { * Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column */ diff_style?: "auto" | "stacked" + /** + * Maximum number of messages to load per session (default: 100) + */ + message_limit?: number } /** * Command configuration, see https://opencode.ai/docs/commands diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts index 0a31394ed9c..fa30cb2c619 100644 --- a/packages/sdk/js/src/v2/gen/types.gen.ts +++ b/packages/sdk/js/src/v2/gen/types.gen.ts @@ -1409,6 +1409,14 @@ export type Config = { * Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column */ diff_style?: "auto" | "stacked" + /** + * Maximum number of messages to load per session (default: 100) + */ + message_limit?: number + /** + * Maximum number of sessions to display in session list (default: 150) + */ + session_list_limit?: number } /** * Command configuration, see https://opencode.ai/docs/commands diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index 96ba0720c73..8c97a59b970 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -8167,6 +8167,18 @@ "description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column", "type": "string", "enum": ["auto", "stacked"] + }, + "message_limit": { + "description": "Maximum number of messages to load per session (default: 100)", + "type": "integer", + "minimum": 1, + "maximum": 10000 + }, + "session_list_limit": { + "description": "Maximum number of sessions to display in session list (default: 150)", + "type": "integer", + "minimum": 1, + "maximum": 10000 } } },