Files
CODE_ASSISTANT/specs/002-capture-to-chat/contracts/bridge-capture.md
T
2026-09-16 17:22:14 +09:00

2.1 KiB

Contract: 캡쳐 이미지 브릿지 + 챗 첨부

C#→JS 메시지 (신규)

기존 SendToWeb(CoreWebView2.PostWebMessageAsJson) 채널 재사용.

방향 메시지 처리
C#→JS {type:"capture.image", dataUrl} 프론트가 캡쳐 이미지를 챗 입력창 첨부로 받음
  • dataUrl: data:image/png;base64,... (PNG).
  • App 캡쳐 완료 순서: ShowPalette()NavigateApp("/snap/new")SendCaptureImage(dataUrl). (navigate·소환은 기존 배선.)
  • 기존 메시지(navigate·paste.target·window.·snippets. 등)와 같은 리스너 허브에서 type으로 분기.

C# 표면 (신규/확장)

  • Shell/Platform/ScreenCapture.csstatic byte[] CapturePng(int x, int y, int width, int height): 물리 좌표 영역을 CopyFromScreen으로 PNG 바이트. (좌표 변환은 호출측=오버레이 몫.)
  • Views/CaptureOverlayWindow — 드래그 선택 + DIP→물리 변환 + ScreenCapture.CapturePng 호출 → event Action<string> Captured(base64 dataUrl) / event Action Cancelled.
  • App.xaml.cs — 핫키 id 0x1002(Ctrl+Shift+9) → 오버레이 표시. Captured → 위 순서 실행. Cancelled → 무시.
  • PaletteWindow.SendCaptureImage(string dataUrl) => Web.SendToWeb(new { type = "capture.image", dataUrl });

프론트 계약 (bridgeNavigate.ts)

// 마지막 캡쳐 이미지 dataUrl 을 1회 소비(마운트 레이스 대비). 없으면 "".
export function consumePendingCaptureImage(): string
// capture.image 수신 → pendingCaptureImage 갱신 + window.dispatchEvent(new CustomEvent("bridge:captureImage", { detail: { dataUrl } }))

프론트 계약 (Composer.tsx)

  • 상태 imageAttachments: string[](dataUrl). 마운트 시 consumePendingCaptureImage() push + bridge:captureImage 구독 push. X 제거. (data-model.md 규칙.)
  • v1 전송: 텍스트만. 이미지 첨부는 미전송 + 전송 후 정리.

순수 브라우저(dev)

SendToWeb/chrome.webview 없음 → capture.image 안 옴, 캡쳐 기능 비활성(데스크톱 전용). 기존 챗은 그대로.