화면과 설치된 앱
화면 한 장
섹션 제목: “화면 한 장”curl -s "$OS/api/v1/devices/$DEV/screen?max_age_ms=1000" \ -H "Authorization: Bearer $TOKEN" -o screen.png -D - | grep -i x-frame-atGET /devices/{id}/screen— chrome·android 기기만 돼요 (actual·virtual 모두). 다른 kind 는 422SCREEN_UNSUPPORTED.- 응답 본문은 이미지 바이트(
image/png·image/jpeg·image/webp)이고, 찍은 시각이X-Frame-At에 와요. max_age_ms(500~60000, 기본 1000) 안의 화면이 있으면 기기에 다시 묻지 않아요. 동시에 온 요청 여럿은 스크린샷 한 번을 나눠 가져요(single-flight). 기기당 초당 2장까지.- 명령 기록·이벤트를 만들지 않아요 — 화면을 오래 봐도 기록이 쌓이지 않아요.
화면 동기화는 영상이 아니라 스크린샷 반복이에요. 데스크톱 화면은 창이 보이는 동안 이 API 를 반복해 부르고, 포커스를 잃으면 느리게, 숨으면 멈춰요. 그래서 비용은 “보고 있는 화면 수” 에 비례해요. 영상 스트림(WebRTC 등)은 없어요 범위 밖.
설치된 앱 목록 (android)
섹션 제목: “설치된 앱 목록 (android)”curl -s $OS/api/v1/devices/$DEV/installed-apps -H "Authorization: Bearer $TOKEN" \ | jq '.data[] | {package, label, app_id}'GET /devices/{id}/installed-apps— 런처에서 열 수 있는 앱만 와요. 정책에 막힌 앱은 빠져요. 페이지를 나누지 않아요.- 아이콘은
icon_data_url(data:image/png;base64,…, 앱당 8 KiB 까지)로 와요. 없으면 화면이 기본 아이콘을 그려요. - 이미 저장한 앱에는
app_id가 붙어요. 저장과 실행은 Dock 과 앱. - OS 는 설치된 앱을 저장하지 않아요 — 부를 때마다 에이전트에게 물어요. android 가 아니면 422
DEVICE_APPS_UNSUPPORTED, 오프라인이면 409RESOURCE_OFFLINE.