이슈 #239
Ryan Lee이(가) 7달 전에 변경
재시도 로직. 사용자 친화적 에러 메시지
## 완료 내역
- `InterruptReason` 4가지 분류 (`src/types/chat.ts:5`): `background | network | abort | error`
- 사용자 친화 에러 메시지 (`src/components/MessageBubble.tsx:18-23`):
- background: "백그라운드에서 연결이 끊겼어요."
- network: "네트워크 문제로 응답이 중단됐어요."
- abort: "응답을 중단했어요."
- error: "응답을 받지 못했어요."
- 원인별 아이콘 차등 (`MessageBubble.tsx:45-48`): network/background → WifiOff, 그 외 → AlertCircle
- 수동 재시도 버튼 + `retryMessage(conversationId, messageId)` 로직 (`src/stores/chatStore.ts:348-396`)
- 대상 메시지 이후 잘라내기, HTML 첨부 파일 정리, 직전 사용자 메시지 기반 재생성
- 백그라운드 자동 중단 (`App.tsx:14-24`): AppState 'background' 전환 시 `interruptGeneration(..., 'background')`
- 앱 재시작 고아 스트리밍 복구 (`chatStore.ts:403-414`): rehydrate 시 streaming 상태 → interrupted + background 표시
- 오류 타입 감지 (`src/services/api/anthropic.ts:21-32`): AbortError 분리 처리
- SDK 자동 재시도: Anthropic SDK 기본 `maxRetries=2` 활용 (별도 설정 없음)
## 주요 파일
- `src/types/chat.ts` — `InterruptReason` 타입
- `src/components/MessageBubble.tsx` — 에러 메시지/아이콘/재시도 UI
- `src/stores/chatStore.ts` — `retryMessage()`, `interruptGeneration()`, rehydrate 복구
- `src/services/api/anthropic.ts` — AbortError 분리
- `App.tsx` — AppState 백그라운드 감지
## 관련 커밋
- `3b6c46b` (#237) — 콜백 인터페이스 (onError/onAbort 포함)
- 재시도/에러 UI는 동일 커밋 범위에서 함께 추가됨
## 후속 처리 (하위 이슈 분리)
- 네트워크 오류 자동 분류 — fetch 실패 시 `'network'` interruptReason 설정 (`NetInfo` 또는 error.name 기반)
- 스트림 타임아웃 명시 설정 — `client.messages.stream()`에 `timeout` 옵션 지정, 초과 시 사용자 친화 메시지
뒤로