← Docs hub

DeviceAgent Executor Closure Matrix

이 문서는 MR6 DeviceAgent의 60개 TaskManager executor를 “호출할 수 있는가” 가 아니라 Planner가 계획하고, 기기가 실행하고, callback으로 완료를 증명할 수 있는가 기준으로 분류한다.

1. 쉽게 읽는 법

사용자 목표
  -> Planner가 의미 capability와 단계를 만든다
  -> On-device가 taskMethod 계약을 전달한다
  -> TaskManager가 순서·취소·timeout을 관리한다
  -> DeviceAgent domain이 실제 기능을 수행한다
  -> callback이 완료·실패·취소를 증명한다
  -> 필요하면 Planner가 다음 단계를 바꾼다
상태 쉬운 의미
CLOSED_EVIDENCE 실행 뒤 실제 완료까지 확인한다
CLOSED_SESSION 앱이 끝난 것은 알지만 성공인지 취소인지는 모른다
MAPPED_ACK_ONLY 실행 요청은 연결됐지만 적용 완료 확인이 약하다
OBSERVABLE_CONTEXT Planner가 현재 상태를 판단하는 데 쓴다
LOCAL_MANAGED 기기 TaskManager에는 있으나 Planner가 아직 직접 계획하지 않는다
INTERNAL_ONLY 내부 lifecycle·동기화·보상용이라 Planner에 노출하지 않는다

2. 현재 결과

상태 수량 대표 기능
CLOSED_EVIDENCE 8 이동, 제자리 회전, 복귀, 청정, 보안 시작·정지·일시정지·재개
CLOSED_SESSION 1 VitalSign/app session
MAPPED_ACK_ONLY 2 이동 제어, 기기 설정
OBSERVABLE_CONTEXT 9 배터리, 주 상태, 기기 상태, 청정, Map, 스테이션·도킹·Vision 관찰, Security preflight
LOCAL_MANAGED 26 일정, interaction, LED, TTS, Map 요청, 설정 조회
INTERNAL_ONLY 14 상태 동기화, 보상 정지, OTA 결과, 내부 refresh
합계 60 MR6 TaskExecutorBootstrap 등록 수와 동일

60개가 모두 사용자용 기능인 것은 아니다. 특히 내부 lifecycle method를 Planner capability로 그대로 공개하면 안전 경계와 계약이 무너진다.

3. Domain별 폐쇄성

Framework

taskMethod 상태 핵심 근거
getBatteryInfo OBSERVABLE_CONTEXT freshness가 적용된 배터리 context
getFirmwareVersion LOCAL_MANAGED 동기 응답만 존재
getMainState OBSERVABLE_CONTEXT main state snapshot
getDeviceStatus OBSERVABLE_CONTEXT device state snapshot
getAirCleanerOperation OBSERVABLE_CONTEXT cleaning snapshot
setLauncherScreen CLOSED_SESSION app.sessionEnded, 결과 의미는 미구분
getConfiguration LOCAL_MANAGED 설정 동기 응답
getStationLocationEvidence OBSERVABLE_CONTEXT 스테이션 위치 후보와 신뢰도·확인 필요 여부 snapshot
probeDockingSignal OBSERVABLE_CONTEXT 물리 동작 없이 최신 도킹 신호 stage를 관찰
rotateInPlace CLOSED_EVIDENCE 회전 완료와 정지 상태를 함께 확인
observeVisionSemantics OBSERVABLE_CONTEXT 정지·관찰 자세 뒤 raw frame 없이 최신 의미 결과만 반환

Main API

taskMethod 상태 핵심 근거
getAirClearAutoStartModeEnable LOCAL_MANAGED 동기 응답
getFollowMeStatus LOCAL_MANAGED 동기 응답
reqmap LOCAL_MANAGED mapping.dataReceived
isMapFilePresent OBSERVABLE_CONTEXT Map availability
resetReturnToStationCounter INTERNAL_ONLY 복귀 retry 상태 초기화
setAMRMonitoring INTERNAL_ONLY AMR 진단·모니터링 제어
checkSecurityBasicAvailability OBSERVABLE_CONTEXT WSS preflight
startSecurityMode CLOSED_EVIDENCE security.started
pauseSecurityMode CLOSED_EVIDENCE security.paused
resumeSecurityMode CLOSED_EVIDENCE security.resumed
stopSecurityMode CLOSED_EVIDENCE security.stopped

Movement

taskMethod 상태 핵심 근거
returnToStation CLOSED_EVIDENCE movement.stationCharging
setMoveTo CLOSED_EVIDENCE movement.arrived와 controller idle
setMoving MAPPED_ACK_ONLY command acceptance
stopMovement INTERNAL_ONLY cancel·compensation

Cleaning

taskMethod 상태 핵심 근거
setAirCleanerOperation CLOSED_EVIDENCE started/stopped/step/report target
setStatusClean LOCAL_MANAGED command acceptance
stopCleaning LOCAL_MANAGED alias 정규화 경계 확인 필요
ampStop LOCAL_MANAGED command acceptance

LLM / TTS

taskMethod 상태 핵심 근거
setChangeLlmStatus INTERNAL_ONLY voice pipeline lifecycle
setLlmTts LOCAL_MANAGED playback terminal 부재
stopLlm INTERNAL_ONLY lifecycle stop
stopTts INTERNAL_ONLY lifecycle stop

IoT / Settings

taskMethod 상태 핵심 근거
setDeviceStatus INTERNAL_ONLY device/voice 상태 동기화
setConfig MAPPED_ACK_ONLY 여러 설정 capability가 수렴, 일반 read-back 부재
getConfig LOCAL_MANAGED 동기 응답

Routine / LED

taskMethod 상태 핵심 근거
setEyeLedColor LOCAL_MANAGED command acceptance
setCurrentPuiEyeLedColor INTERNAL_ONLY PUI 상태 동기화
startEyeLedScene LOCAL_MANAGED scene terminal 부재

Product Schedule / Interaction

taskMethod 상태 핵심 근거
addSchedule LOCAL_MANAGED DB write
editSchedule LOCAL_MANAGED DB write
deleteSchedule LOCAL_MANAGED DB write
scheduleiot LOCAL_MANAGED IoT 일정 upsert/remove
setActiveSchedule LOCAL_MANAGED 활성 상태 변경
puiEditSchedule INTERNAL_ONLY PUI 동기화
callschedule LOCAL_MANAGED 일정 목록 응답
getschedule LOCAL_MANAGED 일정 목록 응답
getUpComingSchedule LOCAL_MANAGED 다음 일정 응답
setScheduleExecuted INTERNAL_ONLY 실행 상태 동기화
getScheduleHolidays LOCAL_MANAGED 휴일 조회
setScheduleHolidays LOCAL_MANAGED DB post-check
setScheduleExecutionOnHoliday LOCAL_MANAGED DB post-check
removeScheduleHoliday LOCAL_MANAGED DB post-check
refreshSchedule INTERNAL_ONLY 내부 refresh
gpsLocNearBy LOCAL_MANAGED interaction 시작, 전체 terminal 부족
interSchedule LOCAL_MANAGED interaction lifecycle terminal은 있으나 Cloud typed action 없음

Firmware Update

taskMethod 상태 핵심 근거
OTAUpdateArmResult INTERNAL_ONLY OTA callback 반영
OTAUpdateMcuResult INTERNAL_ONLY OTA callback 반영
setFirmwareUpdateStatus INTERNAL_ONLY update 상태 동기화

4. 현재 가장 중요한 구조 차이

4.1 Cloud method와 MR6 executor가 완전히 같지 않다

Cloud compiler는 setLanguage, setPuiWaitingScreenTheme를 생성할 수 있지만 두 method는 MR6 전용 executor 60개에 포함되지 않는다. 현재 동작한다면 TaskManager의 legacy command factory fallback에 의존하는 것이다. strict managed-only 경로로 전환하기 전에 전용 executor 또는 setConfig 정규화 계약을 선택해야 한다.

4.2 On-device 범용 전달은 병목이 아니다

On-device ManagedDeviceTask는 청정 위치·상태를 보정하는 경우 외에는 Cloud의 taskMethod와 workflow metadata를 그대로 DeviceAgent에 전달한다. 따라서 다음 기능을 추가할 때마다 새로운 발화 문자열 adapter를 만드는 방식은 필요하지 않다.

4.3 다음 우선순위는 Interaction이다

interSchedule은 welcome, wake-up, relax 흐름과 다음 완료 evidence를 이미 가지고 있다.

하지만 Cloud capability registry와 typed action compiler가 연결되지 않아 Planner가 이 lifecycle을 복합 workflow에 안전하게 배치할 수 없다. 다음 보강은 사용자 문장 keyword가 아니라 다음 구조화 계약이어야 한다.

{
  "capability_id": "interaction_experience",
  "operation": "start",
  "arguments": {
    "experience_type": "welcome",
    "schedule_id": "..."
  },
  "completion_target": "interaction.completed"
}

5. 변경 설명 원칙

이후 구현 설명은 파일 목록보다 아래 흐름을 먼저 사용한다.

무엇을 하려는가
-> 어떤 상태를 확인하는가
-> Planner가 어떤 단계로 나눴는가
-> TaskManager가 무엇을 관리하는가
-> 어떤 callback을 성공 증거로 썼는가
-> 실패하면 무엇을 다시 계획하는가

이 기준으로 “소스에 함수가 있다”, “TaskManager에 등록됐다”, “Cloud에서 계획된다”, “실기기에서 완료까지 검증됐다”를 서로 다른 상태로 기록한다.

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date