fix: prefer fresh codex activity in conversation timestamps
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user