fix: lighten session list payloads (#1538)

* lighten session list

* fetch full session on open

* sanitize session list

* sanitize global sessions

* preserve revert markers in session lists

* fix: preserve session metadata in list sanitizers

---------

Co-authored-by: Bohdan Triapitsyn <artmore@protonmail.com>
This commit is contained in:
Hristo Karamanliev
2026-06-11 23:06:19 +03:00
committed by GitHub
co-authored by Bohdan Triapitsyn
parent 1c274d0a56
commit 9685630436
8 changed files with 701 additions and 39 deletions
@@ -0,0 +1,58 @@
import { describe, expect, test } from 'bun:test'
import type { OpencodeClient } from '@opencode-ai/sdk/v2'
import { listGlobalSessionPages } from './globalSessions'
describe('listGlobalSessionPages', () => {
test('sanitizes session list records before returning them', async () => {
const apiClient = {
experimental: {
session: {
list: async () => ({
data: [
{
id: 'ses_1',
directory: '/repo/app',
title: 'Alpha',
time: { created: 1, updated: 2 },
metadata: {
openchamber: {
kind: 'review',
originalSessionID: 'ses_original',
},
},
permission: [{ permission: 'todowrite' }],
revert: { messageID: 'msg_1', snapshot: 'abc123', diff: 'diff --git a/x b/x' },
summary: {
additions: 5,
deletions: 3,
files: 2,
diffs: [{ patch: '@@ -1 +1 @@', additions: 5, deletions: 3 }],
},
},
],
response: { headers: new Headers() },
}),
},
},
} as unknown as OpencodeClient
const sessions = await listGlobalSessionPages(apiClient, { archived: false, pageSize: 500 })
const session = sessions[0] as typeof sessions[number] & {
metadata?: unknown
permission?: unknown
revert?: { messageID?: string; snapshot?: string; diff?: string }
summary?: { additions?: number; deletions?: number; files?: number; diffs?: unknown[] }
}
expect(session.metadata).toEqual({
openchamber: {
kind: 'review',
originalSessionID: 'ses_original',
},
})
expect(session.permission).toBe(undefined)
expect(session.revert).toEqual({ messageID: 'msg_1' })
expect(session.summary).toEqual({ additions: 5, deletions: 3, files: 2 })
})
})
+3 -1
View File
@@ -1,5 +1,6 @@
import type { OpencodeClient, Session } from "@opencode-ai/sdk/v2";
import { retry } from "@/sync/retry";
import { stripSessionListDetails } from "@/sync/sanitize";
export type GlobalSessionRecord = Session & {
project?: {
@@ -121,7 +122,8 @@ export async function listGlobalSessionPages(
{ attempts: 3, delay: 500, retryIf: () => true },
);
const payload = unwrapSessionList(response, "experimental.session.list");
const payload = unwrapSessionList(response, "experimental.session.list")
.map((session) => stripSessionListDetails(session) as GlobalSessionRecord);
if (payload.length === 0) break;
let appended = 0;