2.1 KiB
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·무효선택) → 아무 상태 변화 없음.