diff --git a/docs/design/mail-fix-design.md b/docs/design/mail-fix-design.md index 349f2d7..85b5c11 100644 --- a/docs/design/mail-fix-design.md +++ b/docs/design/mail-fix-design.md @@ -98,15 +98,25 @@ status="pending", **注意**:inform 类型邮件的 Agent spawn prompt 需要引导 Agent 快速确认(不需要复杂执行),在 spawner 的 spawn message 中根据 task_type 区分。 -### P1-1:Tab badge 改用实际未处理邮件数 +### P1-1:Tab badge + mailUnread 计算逻辑修正 -**问题**:Tab badge 用 `sseEvents`,不是 mail API 的实际未读数。 +**问题**: +- Tab badge 用 `sseEvents`,不是 mail API 的实际未读数 +- `store.ts` 的 `mailUnread` 按 `!m.is_read` 计算,但废弃 is_read 后语义不对 +- failed 的邮件 is_read 仍为 false,会被误计为 unread -**修复**:改用 `useStore.getState().mailUnread`(loadMails 已算出)。 +**修复**: -**文件**:`src/frontend/src/App.tsx` +**文件 1**:`src/frontend/src/store.ts`(mailUnread 计算逻辑) +```typescript +// 之前: +mailUnread: mails.filter(m => !m.is_read).length, -**改动**: +// 之后:按 status 计算,unread = 需要处理的邮件数 +mailUnread: mails.filter(m => !['done', 'failed', 'cancelled'].includes(m.status)).length, +``` + +**文件 2**:`src/frontend/src/App.tsx`(Tab badge 取值) ```typescript // 之前: const unread = ((useStore.getState().sseEvents || []) as any[]) @@ -116,7 +126,7 @@ const unread = ((useStore.getState().sseEvents || []) as any[]) const unread = useStore.getState().mailUnread || 0; ``` -**预估**:1 行 +**预估**:2 行 ### P1-2:废弃 is_read / mark_executed,统一用 done