Skip to content

Commit 0414034

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 2039c69 commit 0414034

File tree

8 files changed

+43
-5
lines changed

8 files changed

+43
-5
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
@@ -54,7 +54,7 @@ export function DialogSessionList() {
5454
) : undefined,
5555
}
5656
})
57-
.slice(0, 150)
57+
.slice(0, sync.data.config.tui?.session_list_limit ?? 150)
5858
})
5959

6060
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
@@ -598,6 +598,20 @@ export namespace Config {
598598
.enum(["auto", "stacked"])
599599
.optional()
600600
.describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"),
601+
message_limit: z
602+
.number()
603+
.int()
604+
.min(1)
605+
.max(10000)
606+
.optional()
607+
.describe("Maximum number of messages to load per session (default: 100)"),
608+
session_list_limit: z
609+
.number()
610+
.int()
611+
.min(1)
612+
.max(10000)
613+
.optional()
614+
.describe("Maximum number of sessions to display in session list (default: 150)"),
601615
})
602616

603617
export const Server = z

packages/plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@
2424
"typescript": "catalog:",
2525
"@typescript/native-preview": "catalog:"
2626
}
27-
}
27+
}

packages/sdk/js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,4 @@
2929
"publishConfig": {
3030
"directory": "dist"
3131
}
32-
}
32+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1199,6 +1199,10 @@ export type Config = {
11991199
* Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column
12001200
*/
12011201
diff_style?: "auto" | "stacked"
1202+
/**
1203+
* Maximum number of messages to load per session (default: 100)
1204+
*/
1205+
message_limit?: number
12021206
}
12031207
/**
12041208
* 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
@@ -1438,6 +1438,14 @@ export type Config = {
14381438
* Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column
14391439
*/
14401440
diff_style?: "auto" | "stacked"
1441+
/**
1442+
* Maximum number of messages to load per session (default: 100)
1443+
*/
1444+
message_limit?: number
1445+
/**
1446+
* Maximum number of sessions to display in session list (default: 150)
1447+
*/
1448+
session_list_limit?: number
14411449
}
14421450
server?: ServerConfig
14431451
/**

packages/sdk/openapi.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8267,6 +8267,18 @@
82678267
"description": "Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column",
82688268
"type": "string",
82698269
"enum": ["auto", "stacked"]
8270+
},
8271+
"message_limit": {
8272+
"description": "Maximum number of messages to load per session (default: 100)",
8273+
"type": "integer",
8274+
"minimum": 1,
8275+
"maximum": 10000
8276+
},
8277+
"session_list_limit": {
8278+
"description": "Maximum number of sessions to display in session list (default: 150)",
8279+
"type": "integer",
8280+
"minimum": 1,
8281+
"maximum": 10000
82708282
}
82718283
}
82728284
},

0 commit comments

Comments
 (0)