Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
172 commits
Select commit Hold shift + click to select a range
72af583
feat: add messages_limit and sessions_list_limit configuration with p…
ariane-emory Nov 30, 2025
e03641d
tidy: for consistency sessions_list_limit->session_list_limit.
ariane-emory Nov 30, 2025
8254075
fix: same as last, missed one.
ariane-emory Nov 30, 2025
ed1228f
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Nov 30, 2025
77dc72f
wip: hammer on messages_limit a bit
ariane-emory Nov 30, 2025
5f73f7f
wip: fiddle with messages_limit..
ariane-emory Dec 1, 2025
53ca8ac
Update generated SDK types: change 'messages' to 'message parts' in c…
ariane-emory Dec 1, 2025
cc07c5b
...
ariane-emory Dec 1, 2025
8427c2f
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 1, 2025
91f7268
chore: format code
actions-user Dec 1, 2025
5b2d15c
Update Nix flake.lock and hashes
actions-user Dec 1, 2025
8fd74a4
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 1, 2025
8ca0e64
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 1, 2025
3510660
Merge upstream/dev into feat/configurable-message-limit-wip
ariane-emory Dec 1, 2025
ccc190a
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 2, 2025
eaa4278
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 2, 2025
9b56593
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 2, 2025
39c217f
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 2, 2025
4fc0f37
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 3, 2025
4655aa0
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 3, 2025
5a35662
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 3, 2025
a947313
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 3, 2025
e2cca9c
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 4, 2025
2019039
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 4, 2025
914d438
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 4, 2025
feced37
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 5, 2025
1bb8d5a
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 5, 2025
62fb053
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 5, 2025
f5453a3
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 6, 2025
16bb14c
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 6, 2025
de001ec
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 7, 2025
651f131
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 7, 2025
a48f174
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 7, 2025
b3de056
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 7, 2025
67684c0
Merge upstream/dev into feat/configurable-message-limit-wip
ariane-emory Dec 8, 2025
814d149
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 8, 2025
1016f8f
Fix TypeScript error: remove cacheKey from FileContents interface usage
ariane-emory Dec 8, 2025
80fc280
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 9, 2025
60e758a
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 9, 2025
c320245
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 9, 2025
3fd408c
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 10, 2025
2b771ef
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 10, 2025
0b0096b
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 10, 2025
7a585d3
Merge remote-tracking branch 'upstream/dev' into feat/configurable-me…
ariane-emory Dec 10, 2025
8d87097
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 10, 2025
c02ff3d
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 11, 2025
7c9552b
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 11, 2025
8135d31
Merge remote-tracking branch 'origin/dev' into feat/configurable-mess…
ariane-emory Dec 13, 2025
9668d5a
merge dev
ariane-emory Dec 17, 2025
c0f5fc5
merge dev
ariane-emory Dec 17, 2025
6881285
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 17, 2025
5af168d
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 18, 2025
31d6bfa
Merge remote-tracking branch 'origin/dev' into feat/configurable-mess…
ariane-emory Dec 19, 2025
8169a84
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 19, 2025
f5fb036
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 20, 2025
50d7911
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 20, 2025
f994a48
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 21, 2025
9b0d64b
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 21, 2025
6d9c4d3
Merge branch 'feat/configurable-message-limit-wip' of github.com:aria…
ariane-emory Dec 21, 2025
93071c8
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 21, 2025
c060436
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 22, 2025
a0d1faf
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 23, 2025
0ca319d
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 23, 2025
62db0c2
Merge branch 'feat/configurable-message-limit-wip' of github.com:aria…
ariane-emory Dec 23, 2025
0a9a219
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 23, 2025
18d7b88
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 23, 2025
7e8baa6
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 23, 2025
03e48de
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 23, 2025
9c46cf3
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 24, 2025
79e3a45
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 24, 2025
fbaaa28
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 24, 2025
261ef77
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 24, 2025
d5fa2bd
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 24, 2025
25bb116
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 25, 2025
c03f682
fix: resolve TypeScript type mismatch for AI SDK providers
ariane-emory Dec 25, 2025
26163c2
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 25, 2025
e67aef2
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 25, 2025
9307480
Merge dev into feat/configurable-message-limit-wip - resolved conflicts
ariane-emory Dec 27, 2025
6648899
Fix merge conflict - properly resolve TUI and compaction config tests
ariane-emory Dec 27, 2025
914c2d3
revert a file
ariane-emory Dec 27, 2025
b4c3115
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 27, 2025
a36a828
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 27, 2025
24390b1
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 28, 2025
ce7f460
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 28, 2025
0c84594
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 28, 2025
25e5b84
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 29, 2025
79d40be
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 29, 2025
cf4bf1e
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 29, 2025
9bc69cb
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 29, 2025
0750e99
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 29, 2025
0db8adb
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
5cf692e
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
cf1bfa1
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
b89c7c2
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
fc8a180
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
f1e9551
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
5198f14
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 30, 2025
e3eeba8
Merge branch 'feat/configurable-message-limit-wip' of github.com:aria…
ariane-emory Dec 30, 2025
c73cff6
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Dec 31, 2025
7f76935
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 1, 2026
17d877e
fix: resolve merge conflicts from dev
ariane-emory Jan 1, 2026
1a08a63
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 1, 2026
fbcfbbb
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 1, 2026
d93946c
revert a file
ariane-emory Jan 1, 2026
e9c719a
Merge dev into feat/configurable-message-limit-wip
ariane-emory Jan 2, 2026
058706f
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 3, 2026
5db0295
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 3, 2026
7b4f58d
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 4, 2026
f195011
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 4, 2026
8960218
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 4, 2026
414efad
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 5, 2026
cc37578
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 5, 2026
27ae2bf
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 5, 2026
edd74ff
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 5, 2026
0997e4c
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 6, 2026
927bb97
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 6, 2026
3202cf6
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 6, 2026
13e35d3
Merge remote-tracking branch 'origin/dev' into feat/configurable-mess…
ariane-emory Jan 6, 2026
43e28f6
Add working directory restoration code for wrapper script
ariane-emory Jan 6, 2026
7b57a1d
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 6, 2026
1f18cf7
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 7, 2026
a6946ca
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 7, 2026
341fd72
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 7, 2026
485bdce
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 7, 2026
d392209
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 8, 2026
07e1195
tidy: unwanted change
ariane-emory Jan 11, 2026
f9cc9ea
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 11, 2026
6dd7a5c
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 11, 2026
35d78c0
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 13, 2026
cd08a41
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 13, 2026
3051faf
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 13, 2026
d9a3b0c
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 15, 2026
559e835
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 20, 2026
9bad4a0
Merge dev into feat/configurable-message-limit-wip
ariane-emory Jan 22, 2026
66973b0
Add missing @solid-primitives/i18n dependency for app package
ariane-emory Jan 22, 2026
2b30e1c
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 23, 2026
7438291
unslop
ariane-emory Jan 23, 2026
390dd75
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 25, 2026
eeb3915
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 25, 2026
215bb47
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 26, 2026
045f8a7
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 27, 2026
4058e93
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 29, 2026
fa6dfac
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 29, 2026
80405ae
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 29, 2026
6dfdc55
Merge branch 'feat/configurable-message-limit-wip' of github.com:aria…
ariane-emory Jan 29, 2026
4ddbd68
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Jan 30, 2026
6bfa253
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 1, 2026
ade1716
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 2, 2026
23dd667
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 3, 2026
cd089c0
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 4, 2026
556ab51
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 5, 2026
80cef0e
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 5, 2026
202d44b
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 6, 2026
8f80168
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 7, 2026
2c0cf3b
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 10, 2026
0a6c52b
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 11, 2026
80be592
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 12, 2026
4087740
Merge dev into feat/configurable-message-limit-wip
ariane-emory Feb 13, 2026
54cb83a
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 14, 2026
48d3fd7
Merge dev into feat/configurable-message-limit-wip
ariane-emory Feb 15, 2026
f59a397
Merge branch 'dev' into feat/configurable-message-limit-wip
ariane-emory Feb 15, 2026
c6adb61
fix(tui): wait for config before syncing session messages
ariane-emory Feb 16, 2026
b2bd15d
fix(tui): wait for config before computing session list options
ariane-emory Feb 16, 2026
785cd9b
fix(tui): pass session_list_limit to session.list() API call
ariane-emory Feb 16, 2026
e2f6999
fix(tui): omit start date filter when session_list_limit is none
ariane-emory Feb 16, 2026
d7cf086
fix(session): only apply limit when explicitly provided
ariane-emory Feb 16, 2026
a291ef2
Merge branch 'dev' into feat/configurable-message-and-session-limit
ariane-emory Feb 17, 2026
a7c7b54
Merge branch 'dev' into feat/configurable-message-and-session-limit
ariane-emory Feb 19, 2026
67e8ea1
Merge branch 'dev' into feat/configurable-message-and-session-limit
ariane-emory Feb 19, 2026
a05d066
Merge branch 'dev' into feat/configurable-message-and-session-limit
ariane-emory Feb 20, 2026
a61cb85
Merge branch 'dev' into feat/configurable-message-and-session-limit
ariane-emory Feb 20, 2026
517a283
Merge branch 'dev' into feat/configurable-message-and-session-limit
ariane-emory Feb 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { useDialog } from "@tui/ui/dialog"
import { DialogSelect } from "@tui/ui/dialog-select"
import { useRoute } from "@tui/context/route"
import { useSync } from "@tui/context/sync"
import { createMemo, createSignal, createResource, onMount, Show } from "solid-js"
import { createMemo, createSignal, createResource, onMount, Show, createEffect } from "solid-js"
import { Locale } from "@/util/locale"
import { useKeybind } from "../context/keybind"
import { useTheme } from "../context/theme"
Expand Down Expand Up @@ -35,7 +35,11 @@ export function DialogSessionList() {
const sessions = createMemo(() => searchResults() ?? sync.data.session)

const options = createMemo(() => {
if (!sync.ready) return []
const today = new Date().toDateString()
const sessionsListLimit = (sync.data.config.tui as any)?.session_list_limit
const limit = sessionsListLimit === "none" ? undefined : sessionsListLimit || 150

return sessions()
.filter((x) => x.parentID === undefined)
.toSorted((a, b) => b.time.updated - a.time.updated)
Expand All @@ -57,6 +61,11 @@ export function DialogSessionList() {
gutter: isWorking ? <Spinner /> : undefined,
}
})
.slice(0, limit)
})

createEffect(() => {
console.log("session count", sync.data.session.length)
})

onMount(() => {
Expand Down
33 changes: 23 additions & 10 deletions packages/opencode/src/cli/cmd/tui/context/sync.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -241,10 +241,17 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
event.properties.info.sessionID,
produce((draft) => {
draft.splice(result.index, 0, event.properties.info)
const maxMessages = (store.config.tui as any)?.messages_limit
const maxMessagesCount = maxMessages === "none" ? Infinity : maxMessages || 100
if (draft.length > maxMessagesCount) {
draft.shift()
}
}),
)
const updated = store.message[event.properties.info.sessionID]
if (updated.length > 100) {
const maxMessages = (store.config.tui as any)?.messages_limit
const maxMessagesCount = maxMessages === "none" ? Infinity : maxMessages || 100
if (updated.length > maxMessagesCount) {
const oldest = updated[0]
batch(() => {
setStore(
Expand Down Expand Up @@ -348,21 +355,27 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({

async function bootstrap() {
console.log("bootstrapping")
const start = Date.now() - 30 * 24 * 60 * 60 * 1000

// Fetch config first to get session_list_limit
const configResponse = await sdk.client.config.get({}, { throwOnError: true })
const config = configResponse.data!
const sessionsListLimit = (config.tui as any)?.session_list_limit
const unlimited = sessionsListLimit === "none"
const sessionsLimit = unlimited ? undefined : sessionsListLimit || 150

const start = unlimited ? undefined : Date.now() - 30 * 24 * 60 * 60 * 1000
const sessionListPromise = sdk.client.session
.list({ start: start })
.list({ start, limit: sessionsLimit })
.then((x) => (x.data ?? []).toSorted((a, b) => a.id.localeCompare(b.id)))

// blocking - include session.list when continuing a session
const providersPromise = sdk.client.config.providers({}, { throwOnError: true })
const providerListPromise = sdk.client.provider.list({}, { throwOnError: true })
const agentsPromise = sdk.client.app.agents({}, { throwOnError: true })
const configPromise = sdk.client.config.get({}, { throwOnError: true })
const blockingRequests: Promise<unknown>[] = [
providersPromise,
providerListPromise,
agentsPromise,
configPromise,
...(args.continue ? [sessionListPromise] : []),
]

Expand All @@ -371,21 +384,18 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
const providersResponse = providersPromise.then((x) => x.data!)
const providerListResponse = providerListPromise.then((x) => x.data!)
const agentsResponse = agentsPromise.then((x) => x.data ?? [])
const configResponse = configPromise.then((x) => x.data!)
const sessionListResponse = args.continue ? sessionListPromise : undefined

return Promise.all([
providersResponse,
providerListResponse,
agentsResponse,
configResponse,
...(sessionListResponse ? [sessionListResponse] : []),
]).then((responses) => {
const providers = responses[0]
const providerList = responses[1]
const agents = responses[2]
const config = responses[3]
const sessions = responses[4]
const sessions = responses[3]

batch(() => {
setStore("provider", reconcile(providers.providers))
Expand Down Expand Up @@ -459,9 +469,11 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
},
async sync(sessionID: string) {
if (fullSyncedSessions.has(sessionID)) return
const messagesLimit = (store.config.tui as any)?.messages_limit
const limit = messagesLimit === "none" ? undefined : messagesLimit || 100
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 }),
sdk.client.session.todo({ sessionID }),
sdk.client.session.diff({ sessionID }),
])
Expand All @@ -475,6 +487,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
for (const message of messages.data!) {
draft.part[message.info.id] = message.parts
}

draft.session_diff[sessionID] = diff.data ?? []
}),
)
Expand Down
7 changes: 5 additions & 2 deletions packages/opencode/src/cli/cmd/tui/routes/session/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,18 @@ export function Session() {
})

createEffect(async () => {
const sessionID = route.sessionID
const ready = sync.ready
if (!ready) return
await sync.session
.sync(route.sessionID)
.sync(sessionID)
.then(() => {
if (scroll) scroll.scrollBy(100_000)
})
.catch((e) => {
console.error(e)
toast.show({
message: `Session not found: ${route.sessionID}`,
message: `Session not found: ${sessionID}`,
variant: "error",
})
return navigate({ type: "home" })
Expand Down
11 changes: 11 additions & 0 deletions packages/opencode/src/config/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -941,7 +941,18 @@ export namespace Config {
.enum(["auto", "stacked"])
.optional()
.describe("Control diff rendering style: 'auto' adapts to terminal width, 'stacked' always shows single column"),
session_list_limit: z
.union([z.number().min(1), z.literal("none")])
.optional()
.default(150)
.describe("Maximum number of sessions to display in session list, or 'none' to show all sessions"),
messages_limit: z
.union([z.number().min(1), z.literal("none")])
.optional()
.default(100)
.describe("Maximum number of message parts to load per session when syncing, or 'none' to load all messages"),
})
export type TUI = z.infer<typeof TUI>

export const Server = z
.object({
Expand Down
28 changes: 20 additions & 8 deletions packages/opencode/src/session/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -516,11 +516,23 @@ export namespace Session {
}),
async (input) => {
const result = [] as MessageV2.WithParts[]
let totalParts = 0

for await (const msg of MessageV2.stream(input.sessionID)) {
if (input.limit && result.length >= input.limit) break
if (input.limit && totalParts + msg.parts.length > input.limit) {
// If adding this message would exceed the limit, check if we can fit a partial message
if (totalParts < input.limit) {
// We have room for some parts of this message, but this would be complex to implement
// For now, just break to stay within the limit
break
}
break
}
result.push(msg)
totalParts += msg.parts.length
}
result.reverse()

return result
},
)
Expand Down Expand Up @@ -548,17 +560,17 @@ export namespace Session {
conditions.push(like(SessionTable.title, `%${input.search}%`))
}

const limit = input?.limit ?? 100

const rows = Database.use((db) =>
db
const rows = Database.use((db) => {
const baseQuery = db
.select()
.from(SessionTable)
.where(and(...conditions))
.orderBy(desc(SessionTable.time_updated))
.limit(limit)
.all(),
)

const query = input?.limit !== undefined ? baseQuery.limit(input.limit) : baseQuery

return query.all()
})
for (const row of rows) {
yield fromRow(row)
}
Expand Down
Loading