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:
committed by
GitHub
co-authored by
Bohdan Triapitsyn
parent
1c274d0a56
commit
9685630436
@@ -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 })
|
||||
})
|
||||
})
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user