Skip to content
Closed
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
b2b8711
perf(backend): has_sent_message를 딕셔너리에서 set으로 변경
seonghobae Aug 2, 2026
befb887
Merge b2b8711cb1d1b336330b793658c33a8514906d91 into d6359b2447a493f35…
seonghobae Aug 3, 2026
1a6ecc0
Merge branch 'develop' into bolt/optimize-has-sent-message-1619297502…
opencode-agent[bot] Aug 3, 2026
c15aaab
perf(backend): has_sent_message를 딕셔너리에서 set으로 변경
seonghobae Aug 3, 2026
4810c45
Merge branch 'develop' into bolt/optimize-has-sent-message-1619297502…
opencode-agent[bot] Aug 3, 2026
00e7af6
chore(ci): add one-shot PR 1214 scope repair
seonghobae Aug 3, 2026
0daf30c
fix(scope): retain current develop governance and calendar behavior
github-actions[bot] Aug 3, 2026
fc70205
chore(ci): refresh PR 1214 checks after scope repair
seonghobae Aug 3, 2026
d5d56fd
chore(ci): remove PR 1214 refresh marker
seonghobae Aug 3, 2026
004808f
merge(develop): refresh sent-grouping performance branch
seonghobae Aug 3, 2026
b005e9c
Merge branch 'develop' into bolt/optimize-has-sent-message-1619297502…
opencode-agent[bot] Aug 3, 2026
58b62d5
Merge branch 'develop' into bolt/optimize-has-sent-message-1619297502…
opencode-agent[bot] Aug 3, 2026
515c089
chore(frontend): update postcss to 8.5.25 to fix CVE-2026-69153
seonghobae Aug 3, 2026
ce09cb3
fix(scope): restore sent-grouping performance changes on current develop
seonghobae Aug 3, 2026
0ed4afb
Merge branch 'develop' into bolt/optimize-has-sent-message-1619297502…
opencode-agent[bot] Aug 4, 2026
956e080
🛡️ Sentinel: [CRITICAL/HIGH] Fix Strix Security Findings
seonghobae Aug 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions backend/api/emails.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,8 @@ async def get_emails(

reply_counts = defaultdict(int)
thread_messages = defaultdict(list)
has_sent_message = {}
# ⚡ Bolt: Use a set instead of a dict for boolean tracking to improve semantics and reduce memory.
has_sent_message = set()

if grouped:
thread_lookup: set[str] = set()
Expand All @@ -347,13 +348,13 @@ async def get_emails(
reply_counts[group_key] += 1
if is_sent_folder and group_key not in has_sent_message:
if message_is_from_user(email, user_addresses):
has_sent_message[group_key] = True
has_sent_message.add(group_key)

if is_sent_folder:
visible_groups = [
email
for group_key, email in grouped.items()
if has_sent_message.get(group_key, False)
if group_key in has_sent_message
]
else:
visible_groups = list(grouped.values())
Expand Down
61 changes: 0 additions & 61 deletions frontend/dev.log

This file was deleted.

20 changes: 11 additions & 9 deletions frontend/src/components/EmailList.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useCallback, useEffect, useRef, useState, memo } from 'react';
import React, { useCallback, useEffect, useRef, useState, memo, useMemo } from 'react';
import { apiClient } from '@/lib/api-client';
import { ScrollArea } from "@/components/ui/scroll-area";
import { Avatar, AvatarFallback } from "@/components/ui/avatar";
Expand Down Expand Up @@ -173,6 +173,15 @@ export function EmailList({
};
const searchBusy = isSearching || loading;

const emailListContent = useMemo(() => emails.map((email: EmailItem) => (
<EmailListItemComponent
key={email.id}
email={email}
selected={selectedEmailId === email.id}
onSelectEmail={onSelectEmail}
/>
)), [emails, selectedEmailId, onSelectEmail]);

return (
<div className="flex h-full min-h-0 w-full flex-col border-r border-border/80 bg-card/95">
<div className="border-b border-border/80 bg-gradient-to-br from-card via-card to-primary/5 p-4">
Expand Down Expand Up @@ -259,14 +268,7 @@ export function EmailList({
<p className="mt-1 text-xs leading-5">{folderCopy.emptyBody}</p>
</div>
) : (
emails.map((email: EmailItem) => (
<EmailListItemComponent
key={email.id}
email={email}
selected={selectedEmailId === email.id}
onSelectEmail={onSelectEmail}
/>
))
emailListContent
)}
</div>
</ScrollArea>
Expand Down
12 changes: 0 additions & 12 deletions screenshot.mjs

This file was deleted.

Loading