02-types-thread
Dec 7, 2025
ThreadNode
📁 관련 코드:
lib/types/nodes/thread.ts
이메일 **스레드(대화)**를 나타냅니다. 관련된 이메일들을 그룹화합니다.
핵심 개념: Thread vs Email vs Memory
계층 구조
레벨 | 설명 | 예시 |
|---|---|---|
Thread | 대화 컨테이너 | "프로젝트 일정 논의" |
개별 메시지 | "1월 22일에 미팅하죠" | |
Memory | 추출된 정보 | "1/22 미팅" |
Gmail의 threadId
Gmail이 Thread를 결정하는 방식
Subject 기반: "Re:", "Fwd:" 제거 후 같은 제목
References 헤더: 이메일 헤더의 In-Reply-To, References
시간 제한: 일정 기간 내의 관련 이메일만
왜 Gmail threadId를 그대로 사용하는가?
대안 | 문제점 |
|---|---|
자체 스레드 ID 생성 | Gmail과 매핑 필요, 복잡성 증가 |
Subject로 그룹화 | "Re: Re: Re:" 처리, 동일 제목 다른 대화 |
Gmail threadId 사용 | Gmail과 1:1 매핑, 신뢰성 높음 |
ThreadStatus
상태 전이
isResolved vs status
필드 | 용도 |
|---|---|
| 빠른 boolean 체크 |
| 상세 상태 (ARCHIVED 등) |
시간 필드
왜 둘 다 필요한가?
시나리오 1: "오래된 대화 정리하기"
시나리오 2: "이번 달 시작된 대화"
Helper Functions
addMessageToThread
새 이메일이 기존 스레드에 추가될 때:
shouldArchiveThread
비활성 스레드 자동 감지:
그래프에서의 관계
암시적 관계 (Implicit)
Thread를 통해 자동으로 추론되는 관계:
Factory 사용 예시
다음 문서
→ EntityNode: 회사/제품 엔티티 스키마
→ MemoryNode: Memory와 Thread의 관계