v0.1.38
v0.1.38 — 크래시/freeze 자동 리포트 (Discord webhook · 사용자 동의 기반)
요청
- "앱의 작동이상, freeze 등등의 문제발생시 사용자 동의하에 오류 로그 및 관련 정보를 위 웹훅으로 전송"
목적
- production NSIS 빌드의 freeze/uncaughtException 정보를 익명으로 자동 수집해 개발자가 빠르게 대응. **사용자 동의 없이는 절대 전송 안 함.**
변경 파일
electron/utils/crashReporter.ts(신규):sendCrashReport({ trigger, errorMessage, stackTrace, attachLog, userNote })— Discord webhook 으로 embed + (선택)scan-diagnostics.log최근 1MB tail 첨부 전송.detectAbnormalShutdown()—<userData>/clean-shutdown.flag부재 여부 검사 (있으면 정상 종료, 없으면 이전 세션 crash/kill).markCleanShutdown()—will-quit에서 flag 파일 작성.getCrashConsent()/setCrashConsent()—<userData>/crash-consent.json파일 동의 상태 (main process 가 IPC 없이도 즉시 확인).electron/ipc/handlers.ts:- IPC 채널 추가:
crashReport:send,crashReport:detectAbnormal,crashReport:setConsent,crashReport:getConsent. electron/preload.ts:viewworkApi.sendCrashReport(payload),detectAbnormalShutdown(),setCrashReportConsent(status),getCrashReportConsent()브리지 +CrashTrigger/CrashConsentStatusDto타입 export.electron/main.ts:process.on('uncaughtException')/process.on('unhandledRejection')등록 — consent='allowed' 일 때만 자동 전송.app.whenReady직후maybeSendPreviousSessionReport()— 이전 세션 abnormal & consent='allowed' 면previous-session-abnormal트리거로 자동 전송.will-quit에서markCleanShutdown()호출.src/store/viewStore.ts:crashReportConsent: 'unknown'|'allowed'|'denied'state +setCrashReportConsent액션. localStorage persist + 변경 시 main IPC 로 disk sync.src/App.tsx:- 시작 시 disk consent 와 store 동기화 (disk 우선).
CrashReportConsentBanner컴포넌트 — consent='unknown' 일 때만 우하단 표시. 허용/거부 응답 시 사라짐.src/components/Layout/SettingsModal.tsx:- 일반 탭에
CrashReportSection추가 — 동의 라디오 + 메모 textarea + "지금 진단 정보 보내기" 버튼.
개인정보 / 보안
- 전송 내용: app version, OS, memory, error message, stack trace,
scan-diagnostics.log(최근 1MB). - 전송 안 함: 사용자 코드, 파일 내용, 식별 정보 (익명).
- 동의가 'allowed' 가 아닌 모든 경우 자동 전송 안 함 — 수동 "지금 보내기" 버튼만 가능.
트리거 5종
manual: 사용자가 설정 패널에서 직접 클릭.uncaught-exception: main process 동기 예외.unhandled-rejection: main process Promise rejection.previous-session-abnormal: 다음 시작 시 flag 부재로 감지.freeze-detected: (예약 — 후속 release 에서 renderer watchdog 추가 예정).
검증
npm run build성공 (out/main/main.js 345.11 kB,out/renderer/index-BO0Y0Hrf.js 3,035.57 kB).npx tsc --noEmit통과.
📦 GitHub 릴리스 노트: v0.1.38