Initial Commit
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
# 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·무효선택) → 아무 상태 변화 없음.
|
||||
Reference in New Issue
Block a user