Skip to content

Commit ef4a090

Browse files
feat(tui): add configurable message_limit for session history
Allow users to configure maximum messages loaded per session via tui.message_limit config option (default: 100, max: 10000). Previously hardcoded to 100, which prevented scrolling to earlier messages in long conversations.
1 parent 2284a4e commit ef4a090

File tree

6 files changed

+41
-3
lines changed

6 files changed

+41
-3
lines changed

packages/opencode/src/cli/cmd/tui/component/dialog-session-list.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function DialogSessionList() {
4848
gutter: isWorking ? <spinner frames={spinnerFrames} interval={80} color={theme.primary} /> : undefined,
4949
}
5050
})
51-
.slice(0, 150)
51+
.slice(0, sync.data.config.tui?.session_list_limit ?? 150)
5252
})
5353

5454
createEffect(() => {

packages/opencode/src/cli/cmd/tui/context/sync.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
188188
event.properties.info.sessionID,
189189
produce((draft) => {
190190
draft.splice(result.index, 0, event.properties.info)
191-
if (draft.length > 100) draft.shift()
191+
if (draft.length > (store.config.tui?.message_limit ?? 100)) draft.shift()
192192
}),
193193
)
194194
break
@@ -345,7 +345,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
345345
if (fullSyncedSessions.has(sessionID)) return
346346
const [session, messages, todo, diff] = await Promise.all([
347347
sdk.client.session.get({ sessionID }, { throwOnError: true }),
348-
sdk.client.session.messages({ sessionID, limit: 100 }),
348+
sdk.client.session.messages({ sessionID, limit: store.config.tui?.message_limit ?? 100 }),
349349
sdk.client.session.todo({ sessionID }),
350350
sdk.client.session.diff({ sessionID }),
351351
])

packages/opencode/src/config/config.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,20 @@ export namespace Config {
585585
.enum(["auto", "stacked"])
586586
.optional()
587587
.describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"),
588+
message_limit: z
589+
.number()
590+
.int()
591+
.min(1)
592+
.max(10000)
593+
.optional()
594+
.describe("Maximum number of messages to load per session (default: 100)"),
595+
session_list_limit: z
596+
.number()
597+
.int()
598+
.min(1)
599+
.max(10000)
600+
.optional()
601+
.describe("Maximum number of sessions to display in session list (default: 150)"),
588602
})
589603

590604
export const Layout = z.enum(["auto", "stretch"]).meta({

packages/sdk/js/src/gen/types.gen.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1195,6 +1195,10 @@ export type Config = {
11951195
* Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column
11961196
*/
11971197
diff_style?: "auto" | "stacked"
1198+
/**
1199+
* Maximum number of messages to load per session (default: 100)
1200+
*/
1201+
message_limit?: number
11981202
}
11991203
/**
12001204
* Command configuration, see https://opencode.ai/docs/commands

packages/sdk/js/src/v2/gen/types.gen.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1409,6 +1409,14 @@ export type Config = {
14091409
* Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column
14101410
*/
14111411
diff_style?: "auto" | "stacked"
1412+
/**
1413+
* Maximum number of messages to load per session (default: 100)
1414+
*/
1415+
message_limit?: number
1416+
/**
1417+
* Maximum number of sessions to display in session list (default: 150)
1418+
*/
1419+
session_list_limit?: number
14121420
}
14131421
/**
14141422
* Command configuration, see https://opencode.ai/docs/commands

packages/sdk/openapi.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8167,6 +8167,18 @@
81678167
"description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column",
81688168
"type": "string",
81698169
"enum": ["auto", "stacked"]
8170+
},
8171+
"message_limit": {
8172+
"description": "Maximum number of messages to load per session (default: 100)",
8173+
"type": "integer",
8174+
"minimum": 1,
8175+
"maximum": 10000
8176+
},
8177+
"session_list_limit": {
8178+
"description": "Maximum number of sessions to display in session list (default: 150)",
8179+
"type": "integer",
8180+
"minimum": 1,
8181+
"maximum": 10000
81708182
}
81718183
}
81728184
},

0 commit comments

Comments
 (0)