UI: introduce active minutes constant for chat sessions and enhance session display names

This commit is contained in:
Tyler Yust
2026-01-30 14:59:08 -08:00
parent 0b7aa8cf1d
commit 57c34a324c
3 changed files with 32 additions and 6 deletions

View File

@@ -24,6 +24,8 @@ type ChatHost = {
refreshSessionsAfterChat: Set<string>;
};
export const CHAT_SESSIONS_ACTIVE_MINUTES = 10;
export function isChatBusy(host: ChatHost) {
return host.chatSending || Boolean(host.chatRunId);
}
@@ -180,7 +182,9 @@ export async function handleSendChat(
export async function refreshChat(host: ChatHost) {
await Promise.all([
loadChatHistory(host as unknown as OpenClawApp),
loadSessions(host as unknown as OpenClawApp, { activeMinutes: 0 }),
loadSessions(host as unknown as OpenClawApp, {
activeMinutes: CHAT_SESSIONS_ACTIVE_MINUTES,
}),
refreshChatAvatar(host),
]);
scheduleChatScroll(host as unknown as Parameters<typeof scheduleChatScroll>[0], true);

View File

@@ -9,7 +9,7 @@ import type { AgentsListResult, PresenceEntry, HealthSnapshot, StatusSummary } f
import type { Tab } from "./navigation";
import type { UiSettings } from "./storage";
import { handleAgentEvent, resetToolStream, type AgentEventPayload } from "./app-tool-stream";
import { flushChatQueueForEvent } from "./app-chat";
import { CHAT_SESSIONS_ACTIVE_MINUTES, flushChatQueueForEvent } from "./app-chat";
import {
applySettings,
loadCron,
@@ -200,7 +200,9 @@ function handleGatewayEventUnsafe(host: GatewayHost, evt: GatewayEventFrame) {
if (runId && host.refreshSessionsAfterChat.has(runId)) {
host.refreshSessionsAfterChat.delete(runId);
if (state === "final") {
void loadSessions(host as unknown as OpenClawApp, { activeMinutes: 0 });
void loadSessions(host as unknown as OpenClawApp, {
activeMinutes: CHAT_SESSIONS_ACTIVE_MINUTES,
});
}
}
}

View File

@@ -156,6 +156,17 @@ function resolveMainSessionKey(
return null;
}
function resolveSessionDisplayName(
key: string,
row?: SessionsListResult["sessions"][number],
) {
const label = row?.label?.trim();
if (label) return `${label} (${key})`;
const displayName = row?.displayName?.trim();
if (displayName) return displayName;
return key;
}
function resolveSessionOptions(
sessionKey: string,
sessions: SessionsListResult | null,
@@ -171,13 +182,19 @@ function resolveSessionOptions(
// Add main session key first
if (mainSessionKey) {
seen.add(mainSessionKey);
options.push({ key: mainSessionKey, displayName: resolvedMain?.displayName });
options.push({
key: mainSessionKey,
displayName: resolveSessionDisplayName(mainSessionKey, resolvedMain),
});
}
// Add current session key next
if (!seen.has(sessionKey)) {
seen.add(sessionKey);
options.push({ key: sessionKey, displayName: resolvedCurrent?.displayName });
options.push({
key: sessionKey,
displayName: resolveSessionDisplayName(sessionKey, resolvedCurrent),
});
}
// Add sessions from the result
@@ -185,7 +202,10 @@ function resolveSessionOptions(
for (const s of sessions.sessions) {
if (!seen.has(s.key)) {
seen.add(s.key);
options.push({ key: s.key, displayName: s.displayName });
options.push({
key: s.key,
displayName: resolveSessionDisplayName(s.key, s),
});
}
}
}