























@@ -1795,18 +1795,25 @@ export function loadGatewaySessionRow(
17951795 */
17961796const SESSIONS_LIST_YIELD_BATCH_SIZE = 10;
17971797const SESSIONS_LIST_TOP_N_LIMIT = 200;
1798+const SESSIONS_LIST_DEFAULT_LIMIT = 100;
1798179917991800type SessionEntryPair = [string, SessionEntry];
1801+type SessionEntrySelection = {
1802+entries: SessionEntryPair[];
1803+totalCount: number;
1804+limitApplied?: number;
1805+};
1800180618011807function compareSessionEntryPairsByUpdatedAt(a: SessionEntryPair, b: SessionEntryPair): number {
18021808return (b[1]?.updatedAt ?? 0) - (a[1]?.updatedAt ?? 0);
18031809}
1804181018051811function resolveSessionsListLimit(
18061812opts: import("./protocol/index.js").SessionsListParams,
1813+defaultLimit?: number,
18071814): number | undefined {
18081815if (typeof opts.limit !== "number" || !Number.isFinite(opts.limit)) {
1809-return undefined;
1816+return defaultLimit;
18101817}
18111818return Math.max(1, Math.floor(opts.limit));
18121819}
@@ -1843,12 +1850,12 @@ function sortAndLimitSessionEntries(
18431850return limit === undefined ? sorted : sorted.slice(0, limit);
18441851}
184518521846-export function filterAndSortSessionEntries(params: {
1853+function filterSessionEntries(params: {
18471854store: Record<string, SessionEntry>;
18481855opts: import("./protocol/index.js").SessionsListParams;
18491856now: number;
18501857rowContext?: SessionListRowContext;
1851-}): [string, SessionEntry][] {
1858+}): SessionEntryPair[] {
18521859const { store, opts, now } = params;
18531860const rowContext = params.rowContext;
18541861const includeGlobal = opts.includeGlobal === true;
@@ -1941,7 +1948,33 @@ export function filterAndSortSessionEntries(params: {
19411948entries = entries.filter(([, entry]) => (entry?.updatedAt ?? 0) >= cutoff);
19421949}
194319501944-return sortAndLimitSessionEntries(entries, resolveSessionsListLimit(opts));
1951+return entries;
1952+}
1953+1954+function selectSessionEntries(params: {
1955+store: Record<string, SessionEntry>;
1956+opts: import("./protocol/index.js").SessionsListParams;
1957+now: number;
1958+rowContext?: SessionListRowContext;
1959+defaultLimit?: number;
1960+}): SessionEntrySelection {
1961+const filtered = filterSessionEntries(params);
1962+const limit = resolveSessionsListLimit(params.opts, params.defaultLimit);
1963+const entries = sortAndLimitSessionEntries(filtered, limit);
1964+return {
1965+ entries,
1966+totalCount: filtered.length,
1967+limitApplied: limit,
1968+};
1969+}
1970+1971+export function filterAndSortSessionEntries(params: {
1972+store: Record<string, SessionEntry>;
1973+opts: import("./protocol/index.js").SessionsListParams;
1974+now: number;
1975+rowContext?: SessionListRowContext;
1976+}): [string, SessionEntry][] {
1977+return selectSessionEntries(params).entries;
19451978}
1946197919471980export function listSessionsFromStore(params: {
@@ -1964,12 +1997,14 @@ export function listSessionsFromStore(params: {
19641997const includeLastMessage = opts.includeLastMessage === true;
19651998const hasSpawnedByFilter = typeof opts.spawnedBy === "string" && opts.spawnedBy.length > 0;
196619991967-const entries = filterAndSortSessionEntries({
2000+const selection = selectSessionEntries({
19682001 store,
19692002 opts,
19702003 now,
19712004rowContext: hasSpawnedByFilter ? getRowContext() : undefined,
2005+defaultLimit: SESSIONS_LIST_DEFAULT_LIMIT,
19722006});
2007+const { entries, totalCount, limitApplied } = selection;
1973200819742009const sessions = entries.map(([key, entry], index) => {
19752010const includeTranscriptFields = index < sessionListTranscriptFieldRows;
@@ -1993,6 +2028,9 @@ export function listSessionsFromStore(params: {
19932028ts: now,
19942029path: storePath,
19952030count: sessions.length,
2031+ totalCount,
2032+ limitApplied,
2033+hasMore: sessions.length < totalCount,
19962034defaults: getSessionDefaults(cfg, params.modelCatalog),
19972035 sessions,
19982036};
@@ -2028,12 +2066,14 @@ export async function listSessionsFromStoreAsync(params: {
20282066const includeLastMessage = opts.includeLastMessage === true;
20292067const hasSpawnedByFilter = typeof opts.spawnedBy === "string" && opts.spawnedBy.length > 0;
203020682031-const entries = filterAndSortSessionEntries({
2069+const selection = selectSessionEntries({
20322070 store,
20332071 opts,
20342072 now,
20352073rowContext: hasSpawnedByFilter ? getRowContext() : undefined,
2074+defaultLimit: SESSIONS_LIST_DEFAULT_LIMIT,
20362075});
2076+const { entries, totalCount, limitApplied } = selection;
2037207720382078const sessions: GatewaySessionRow[] = [];
20392079for (let i = 0; i < entries.length; i++) {
@@ -2089,6 +2129,9 @@ export async function listSessionsFromStoreAsync(params: {
20892129ts: now,
20902130path: storePath,
20912131count: sessions.length,
2132+ totalCount,
2133+ limitApplied,
2134+hasMore: sessions.length < totalCount,
20922135defaults: getSessionDefaults(cfg, params.modelCatalog),
20932136 sessions,
20942137};
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。