Files
2026-09-16 17:22:14 +09:00

2.1 KiB

Data Model: 화면 캡쳐 → 챗 첨부 (Phase 1)

캡쳐 이미지는 저장소 없이 메모리→data URL로만 흐른다. v1 영속 없음.

엔티티

캡쳐 이미지 (Capture Image)

선택 영역의 화면 스냅샷 한 장.

표현 형태 설명
C# 내부 Bitmap → PNG byte[] CopyFromScreen 결과
전달 dataUrl: string data:image/png;base64,...
프론트 첨부 string(dataUrl) Composer imageAttachments 배열의 한 항목
  • v1엔 파일/DB 영속 없음. 챗 첨부 상태로만 존재.

프론트 상태

Composer 이미지 첨부 (Composer.tsx)

  • 신규 상태: imageAttachments: string[] — 각 항목은 PNG data URL. 텍스트 첨부(attachments)와 별개.
  • 렌더: 썸네일 <img> + 제거 X 버튼(칩). 텍스트 첨부 칩 옆/위.
  • 추가 규칙:
    • 마운트 시 consumePendingCaptureImage() 값 있으면 push(누락 방지).
    • bridge:captureImage 이벤트 수신 시 push(누적 — 여러 번 캡쳐 = 여러 첨부, FR-008).
    • X → 해당 항목 제거(FR-007).
  • 전송 시(v1): 텍스트만 전송(기존 그대로). 이미지 첨부는 전송하지 않고, 전송 후 imageAttachments는 비운다(텍스트 첨부와 동일하게 정리 — 안 쓰지만 쌓이지 않게). ← FR-009. 백엔드 붙으면 이 지점에서 payload에 실어 보내도록 확장.

브릿지 모듈 상태 (bridgeNavigate.ts)

  • pendingCaptureImage: string("" = 없음) — 마지막 수신 캡쳐 dataUrl(마운트 레이스 대비).
  • consumePendingCaptureImage(): string — 값 반환 후 ""로 비움(read-once).
  • capture.image 수신 시: pendingCaptureImage = dataUrl + bridge:captureImage(detail: {dataUrl}) 발생.
  • (참고) pasteTarget은 "지속 표시"라 get, 캡쳐는 "1회 소비"라 consume — 세만틱만 다름.

상태 전이

캡쳐 없음 → (핫키·드래그·확정) → dataUrl 생성/전달 → Composer 이미지 첨부 1개 추가 → (X 제거 | 전송 시 정리) → 없음. 취소(Esc·무효선택) → 아무 상태 변화 없음.