mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2025 Qwen Code
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
import type { SessionListItem } from '@qwen-code/qwen-code-core';
|
|
|
|
/**
|
|
* State for managing loaded sessions in the session picker.
|
|
*/
|
|
export interface SessionState {
|
|
sessions: SessionListItem[];
|
|
hasMore: boolean;
|
|
nextCursor?: number;
|
|
}
|
|
|
|
/**
|
|
* Page size for loading sessions.
|
|
*/
|
|
export const SESSION_PAGE_SIZE = 20;
|
|
|
|
/**
|
|
* Truncates text to fit within a given width, adding ellipsis if needed.
|
|
*/
|
|
export function truncateText(text: string, maxWidth: number): string {
|
|
const firstLine = text.split(/\r?\n/, 1)[0];
|
|
if (firstLine.length <= maxWidth) {
|
|
return firstLine;
|
|
}
|
|
if (maxWidth <= 3) {
|
|
return firstLine.slice(0, maxWidth);
|
|
}
|
|
return firstLine.slice(0, maxWidth - 3) + '...';
|
|
}
|
|
|
|
/**
|
|
* Filters sessions optionally by branch.
|
|
*/
|
|
export function filterSessions(
|
|
sessions: SessionListItem[],
|
|
filterByBranch: boolean,
|
|
currentBranch?: string,
|
|
): SessionListItem[] {
|
|
return sessions.filter((session) => {
|
|
// Apply branch filter if enabled
|
|
if (filterByBranch && currentBranch) {
|
|
return session.gitBranch === currentBranch;
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Formats message count for display with proper pluralization.
|
|
*/
|
|
export function formatMessageCount(count: number): string {
|
|
return count === 1 ? '1 message' : `${count} messages`;
|
|
}
|