VisionAgent·EventAssetAgent·LLMAgent 상세
기준:
1398d109c391c4044cae26d0e9aea4d3f08d9670. 지정 커밋의 추적 파일을 직접 확인한 정적 구조 분석이며, 현재 HEAD·후속 TaskManager·SKIX 구현을 포함하지 않는다.
VisionAgent: 시각 상태 중계와 얼굴 검증의 두 서비스
기준 루트 V/는 apps/VisionAgent/java/com/sk/airbot/visionagent/다. Manifest에는 IVisionControl의 VisionAgent와 IFaceControl의 FaceVerifyService가 별도로 있다.
| 구성 | 입구와 내부 흐름 | 반환 |
|---|---|---|
| VisionAgent | IVisionControl Stub → executeMethod → set/getVisionEnable | out Bundle 또는 IVisionControlCallback |
| vision-data 연결 | 명시적 broadcast action/package로 시각 데이터·상태 연결 | sendReport·sendVisionStatus가 Bundle report 생성 |
| FaceVerifyService | IFaceControl.startRecognition → SDK 초기화·인식 요청 | SDK listener → callbackToClient → IFaceEventCallback |
근거: V/VisionAgent.java:68–149, :248–338, V/FaceVerifyService.java:30–117, :129–281.
VisionAgent executeMethod의 핵심 분기는 setVisionEnable·getVisionEnable이고, 나머지는 오류 결과로 처리한다. 실제 vision-data 프로세스·모델 내부 구현은 이 Service의 broadcast 호출만으로 설명할 수 없다.
FaceVerifyService는 SDK 이벤트를 Bundle로 변환하고 WssIpcThread HandlerThread와 RemoteCallbackList로 client에게 전달한다. WSS의 얼굴 확인은 이 IPC 결과를 소비한다. SDK callback 도착, 본인 확인 성공, 이후 WSS 상태 변경은 구분해서 추적해야 한다.
생명주기 근거: VisionAgent receiver 등록·onBind (:360–385), FaceVerifyService의 worker/callback 관리 (:230 이후). 카메라·모델의 정확도나 실제 얼굴 인증 성공률은 측정하지 않았다.
EventAssetAgent: 프레임에서 기록·자료·업로드까지
기준 루트 E/는 apps/EventAssetAgent/app/src/main/java/com/sk/airbot/eventassetagent/다. EventAsset은 보안 기능에서 만들어지는 기록 자료의 저장·조회·업로드를 담당한다. 장치 전체 정책은 DeviceAgent WSS가 조정하고, 이 앱은 자료 처리 파이프라인을 소유한다.
| 내부 계층 | 주요 클래스 | 책임 |
|---|---|---|
| Service | service/RecordingAidlService | IEventAssetService, capture·clip request·asset 조회·upload/cancel |
| frame 입력 | broker/SKIXCameraBrokerClient, broker/api | camera Binder callback과 shared-memory frame 읽기 |
| 녹화 | RecordingManager 및 recording 구성 | prebuffer, audio/video engine, muxer, capture/finalizing state |
| clip 요청 | service/clip/ClipRequestManager·Queue, model | 요청 수명, finalized metadata와 asset 연결 |
| 저장 | repository와 service/storage/ClipAssetStore | metadata DB와 실제 asset 파일 |
| 알림 | service/callback/ClipCallbackDispatcher | RemoteCallbackList로 clip·upload 상태 fan-out |
| 업로드 | service/ClipUploadService, service/upload/ | UploadRequestHandler·UploadExecutor·UploadHttpClient·retry |
| 설정·암호화 | config/, service/crypto/ | 녹화 설정·공개키 관련 보조 책임 |
프레임 → 파일
SKIXCameraBrokerClient의 Binder shared-memory callback
→ dispatchFrame → RecordingManager.onRawFrame
→ prebuffer / audio·video engine / muxer
→ stop 요청 → finalize → 파일 검증
→ ClipRequestManager의 metadata 저장
→ ClipCallbackDispatcher.onClipStateChanged
근거: E/broker/SKIXCameraBrokerClient.java:65–110, :191–202, E/service/RecordingAidlService.java:716–763, RecordingManager :365–415, :535–584, :860–1007.
RecordingAidlService는 EventAssetIo 단일 executor와 main Handler를 분리하고, 녹화 쪽에는 capture HandlerThread가 있다. stopCapture 요청이 recording/finalizing 상태에 따라 지연될 수 있으므로 호출 반환을 즉시 파일 완성으로 읽으면 안 된다.
자료 → 업로드 결과
RecordingAidlService upload/cancel → UploadRequestHandler → ClipUploadService → UploadExecutor → asset 검증 → UploadHttpClient.upload 순서다. 이후 UploadCallbackDispatcher가 DB 상태를 갱신하고 onUploadStateChanged를 전달한다. UploadRetryManager와 복구 경로는 재시도·중단 이후 상태를 다룬다.
근거: E/service/RecordingAidlService.java:234–269, E/service/ClipUploadService.java:59–96, E/service/upload/UploadExecutor.java:22–65, E/service/callback/UploadCallbackDispatcher.java:37–119.
파일 생성, metadata 저장, 업로드 HTTP 결과, DeviceAgent 측 결과 처리 모두 다른 경계다. 파일의 재생 가능성, 원격 저장 성공, callback client 생존 여부는 정적 분석으로 확인하지 않았다. source가 있어도 이 트리에는 제품 Android.mk 편입 선언이 없으므로 실제 탑재 APK도 별도 증거가 필요하다.
LLMAgent: 이 커밋에서는 Binder 골격
apps/LLMAgent/java/com/sk/airbot/llmagent/LLMAgent.java는 ILLMControl Stub과 onCreate·onBind를 가진다. callback을 필드에 보관하고 sendModuleCommand에서 method를 읽어 로그를 남기지만, 실제 명령 dispatcher·추론 engine·transport·결과 callback 발행 경로가 없다.
근거: LLMAgent.java:54–112. 따라서 이 모듈을 “음성 인식부터 LLM 추론과 TTS까지 수행하는 완성 엔진”으로 설명하지 않는다. DeviceAgent의 LlmManager는 앱 간 상태·요청 연계이며, 별도 voice agent 구현과 이 골격을 동일시하지 않는다.
Android.mk는 source BUILD_PACKAGE를 선언하지만 packages.mk의 기본 PRODUCT_PACKAGES에는 LLMAgent가 없다. 서비스 계약 존재, 제품 포함, 실제 음성 처리 구현을 각각 구분한다.
확대 구조도와 연결별 근거
Connections
전체 목차 · 앱 구성 · DeviceAgent 내부 · IPC · 실행 흐름 · 플랫폼·빌드 · 근거·확인 범위