fix(webui): polish session titles and status

This commit is contained in:
Xubin Ren
2026-05-17 23:52:50 +08:00
parent 361f31c0e4
commit 2f323e24c1
10 changed files with 134 additions and 27 deletions
+25
View File
@@ -1,10 +1,35 @@
import i18n, { currentLocale } from "@/i18n";
const LOW_INFORMATION_TITLE_PREVIEWS = new Set([
"hi",
"hello",
"hey",
"hello nano",
"hello nanobot",
"hi nano",
"hi nanobot",
"你好",
"您好",
"嗨",
"哈喽",
"哈啰",
"在吗",
]);
function isLowInformationTitlePreview(text: string): boolean {
const normalized = text.toLowerCase().replace(/[.!?。!?~\s]+$/g, "").trim();
return (
normalized.startsWith("/") ||
LOW_INFORMATION_TITLE_PREVIEWS.has(normalized)
);
}
/** Truncate the first user message into a chat title. */
export function deriveTitle(preview: string | undefined, fallback: string): string {
if (!preview) return fallback;
const oneLine = preview.replace(/\s+/g, " ").trim();
if (!oneLine) return fallback;
if (isLowInformationTitlePreview(oneLine)) return fallback;
return oneLine.length > 60 ? `${oneLine.slice(0, 57)}` : oneLine;
}
+5 -4
View File
@@ -54,7 +54,8 @@ type Unsubscribe = () => void;
type EventHandler = (ev: InboundEvent) => void;
type StatusHandler = (status: ConnectionStatus) => void;
type RuntimeModelHandler = (modelName: string | null, modelPreset?: string | null) => void;
type SessionUpdateHandler = (chatId: string) => void;
type SessionUpdateScope = "metadata" | "thread" | string;
type SessionUpdateHandler = (chatId: string, scope?: SessionUpdateScope) => void;
/** Structured connection-level errors surfaced to the UI.
*
@@ -364,7 +365,7 @@ export class NanobotClient {
}
if (parsed.event === "session_updated") {
this.emitSessionUpdate(parsed.chat_id);
this.emitSessionUpdate(parsed.chat_id, parsed.scope);
return;
}
@@ -382,9 +383,9 @@ export class NanobotClient {
}
}
private emitSessionUpdate(chatId: string): void {
private emitSessionUpdate(chatId: string, scope?: SessionUpdateScope): void {
for (const handler of this.sessionUpdateHandlers) {
handler(chatId);
handler(chatId, scope);
}
}