fix: prefer fresh codex activity in conversation timestamps

This commit is contained in:
kris
2026-04-04 09:25:28 +08:00
parent 22406ed587
commit 4e78fb0a34
2 changed files with 62 additions and 2 deletions

View File

@@ -355,6 +355,7 @@ function buildConversationItem(state: BossState, project: Project): Conversation
const folderLabel = project.threadMeta?.folderName ?? "";
const activityIconCount = deriveConversationActivityIconCount(state, project);
const topPinnedLabel = isTopPinnedConversation(project) ? "置顶" : undefined;
const latestConversationActivityAt = deriveLatestConversationActivityAt(project);
const groupMembers = project.isGroup
? project.groupMembers.map((member) => ({
threadId: member.threadId,
@@ -379,8 +380,8 @@ function buildConversationItem(state: BossState, project: Project): Conversation
activityIconCount,
topPinnedLabel,
manualPinned: Boolean(project.pinned && !project.systemPinned),
latestReplyAt: project.lastMessageAt,
latestReplyLabel: formatTimestampLabel(project.lastMessageAt),
latestReplyAt: latestConversationActivityAt,
latestReplyLabel: formatTimestampLabel(latestConversationActivityAt),
unreadCount: project.unreadCount,
riskLevel: project.riskLevel,
activeDeviceCount: devices.length,
@@ -403,6 +404,31 @@ function buildConversationItem(state: BossState, project: Project): Conversation
} satisfies ConversationItem;
}
function deriveLatestConversationActivityAt(project: Project) {
const candidates = [
project.lastMessageAt,
project.threadMeta?.lastObservedCodexActivityAt,
project.projectUnderstanding?.updatedAt,
project.updatedAt,
].filter(Boolean) as string[];
let latest = candidates[0];
let latestTs = latest ? Date.parse(latest) : Number.NEGATIVE_INFINITY;
for (const candidate of candidates.slice(1)) {
const candidateTs = Date.parse(candidate);
if (!Number.isFinite(candidateTs)) {
continue;
}
if (!Number.isFinite(latestTs) || candidateTs > latestTs) {
latest = candidate;
latestTs = candidateTs;
}
}
return latest ?? project.lastMessageAt;
}
function deriveConversationActivityIconCount(state: BossState, project: Project): number {
let count = 0;