← Docs hub

SoC TaskManager Implementation Worklog

이 장은 현재 기준 DeviceAgent TaskManager에 들어간 실제 작업내역을 업체가 따라 할 수 있는 단위로 정리한다.

SoC TaskManager Implementation Worklog

소스 레벨 구현 위치와 method 단위 설명은 Source-Level Implementation Guide를 기준으로 본다. 이 장은 “무슨 파일을 왜 만들었고, 업체가 그 파일에서 무엇을 채워야 하는지”에 집중한다.

추가/정리된 핵심 파일

파일 작업 내용
TaskManager.java control method entry, task/workflow queue, async/wait/direct 실행, event callback, summary/detail output
TaskEventListener.java 외부 listener가 onTaskEvent를 받을 수 있는 interface
TaskReasonContract.java error code를 source-agnostic reason_code, recoverability, suggested_action으로 변환
DevicePlanningContextProvider.java 상위 planner/server가 실행 전 참고할 battery/map/location/cleaning/movement/task_manager/capability snapshot 생성
TaskIngressClassifier.java 들어온 method가 task/control/progress/result 성격인지 분류
TaskBundleValidator.java strict validation 시 method별 필수 slot/key 검증
TaskPolicyRegistry.java execution mode, queue, priority, timeout, retry, state-aware 정책
TaskExecutorRegistry.java taskMethod를 실제 executor에 연결
TaskExecutorBootstrap.java skeleton executor 등록

파일별 상세 작업내역

파일 현재 반영된 구조 업체가 이어서 해야 할 일
MainApi.java executeMethod(...) 앞단에서 TaskManager.handleControlMethod(...) 호출, 미처리 method는 legacy 실행으로 위임 TaskManager hook이 모든 외부 method path에서 동일하게 적용되는지 확인
TaskManager.java submitTask, submitWorkflow, query/cancel/status/progress/context/classify API 제공 실제 제품 queue 정책, persistence, lifecycle, terminal event 보장 강화
TaskPolicyRegistry.java method별 queue/mode/timeout/cancel/compensation 정책 제공 제품 기능별 timeout/retry/cancel 정책 확정
TaskBundleValidator.java strict validation 시 method별 필수 key 확인 모든 제품 command의 slot schema 추가
TaskExecutorRegistry.java taskMethod -> executor lookup 구조 제공 실제 domain executor를 등록하고 누락 method 감지
TaskExecutorBootstrap.java movement/cleaning/LLM/TTS/IoT/update skeleton binding 제공 dry-run executor를 실제 executor로 교체 또는 adapter 연결
TaskReasonContract.java error code -> reason/recoverability/suggested_action 변환 domain별 error code를 표준 reason에 추가 mapping
DevicePlanningContextProvider.java battery/map/location/cleaning/movement/task_manager/capability snapshot 제공 실제 room list, current room, blocked/path 상태, capability flag 채우기
TaskIngressClassifier.java method를 command/control/progress/result/sensor/trigger/event로 분류 MQTT/App/예약 source의 method naming과 signalType 정책 확정

MainApi 연결 작업

핵심 변화:

기존:
MainApi.executeMethod(...)
-> executeMethodInternal(...)

변경:
MainApi.executeMethod(...)
-> TaskManager.handleControlMethod(...)
-> handled이면 return
-> TaskManager.executeLegacy(...)
-> executeMethodInternal(...)

이 연결의 의미:

TaskManager Core 작업

TaskManager.java에 들어간 core 책임:

책임 설명
API dispatch submitTask, submitWorkflow, getTaskStatus, listTasks, getQueueStatus, updateTaskProgress, cancelTask 분기
record 관리 TaskRecord로 task state, input, result, workflow step, timestamps 저장
queue 관리 queue별 executor와 metric 관리
execution mode DIRECT, QUEUED_WAIT, ASYNC 실행 모드 분리
workflow subTasks, parallelGroup, currentStepIndex, currentStepMethod, subTaskStates 관리
lifecycle cancel/compensation command 연결
callback notifyTaskEvent(...)로 listener와 AppCmd callback 전송

Policy/Validation 작업

TaskPolicyRegistry는 method별 실행 성격을 정리한다.

Queue 대표 method 의도
movement returnToStation, setMoveTo, setMoving 이동/복귀/정지 계열
cleaning setAirCleanerOperation, setStatusClean 청정 동작 계열
ai setChangeLlmStatus, setLlmTts LLM/TTS 상태와 출력
settings setConfig 설정 변경
state setMainState, getMainState 기기 main state
update OTAUpdateArmResult, OTAUpdateMcuResult, setFirmwareUpdateStatus 펌웨어/update

TaskBundleValidator는 strict validation이 켜졌을 때 필수 key를 검사한다. 예를 들어 setMoveTo는 위치 후보 key가 필요하고, setAirCleanerOperationaction/mode/speed/operation 중 하나가 필요하다.

Executor 작업

현재 executor bootstrap은 skeleton 형태다.

Executor 연결된 method 업체 구현 방향
MovementTaskExecutor returnToStation, setMoveTo, setMoving, stopMovement 이동 manager/robot controller와 실제 연결
CleaningAmpTaskExecutor setAirCleanerOperation, setStatusClean, stopCleaning, ampStop 기존 청정 handler와 cleaning transaction 연결
LlmTtsTaskExecutor setChangeLlmStatus, setLlmTts, stopLlm, stopTts LLM/TTS manager 연결
IotTaskExecutor setDeviceStatus, setConfig, getConfig IoT command/report 연결
UpdateTaskExecutor OTA/update method update manager 연결

Event/Reason 작업

notifyTaskEvent(...)는 event payload를 구성한 뒤 두 경로로 보낸다.

1. TaskEventListener.onTaskEvent(...)
2. AppCmd.INSTANCE.sendModuleCallback_main(eventData)

event payload는 아래 성격을 포함해야 한다.

payload 계열 예시
task identity taskId, taskMethod, workflowName
state taskState, status, progress, stage, message
workflow currentStepIndex, currentStepMethod, subTaskStates
reason reason_code, reason_params, recoverability, suggested_action, requires_cloud_decision
trace source, cloud_workflow_id, mqtt_message_id, app_request_id, schedule_id

Planning Context 작업

DevicePlanningContextProvider가 제공하는 snapshot은 Cloud planner뿐 아니라 MQTT server policy, App UI, 내부 예약 정책에서도 사용할 수 있다.

현재 채워진 bundle:

main_state
battery
map
location
cleaning
movement
task_manager
capabilities

업체가 반드시 보강해야 할 부분:

Control API 작업내역

Method 의미
submitTask 단일 task 등록
submitWorkflow 여러 subtask workflow 등록
getTaskStatus task 상세 상태 조회
listTasks task 목록 조회
getQueueStatus queue 상태 조회
updateTaskProgress task progress/status/stage/message 갱신
cancelTask task 취소
getTaskManagerStatus manager enabled/queue/metric 상태 조회
getDevicePlanningContext Cloud planner 또는 서버 정책 판단 전 device context snapshot 조회
classifyTaskIngress method/signal type 분류

Executor Bootstrap 작업내역

Executor Method
Movement returnToStation, setMoveTo, setMoving, stopMovement
Cleaning setAirCleanerOperation, setStatusClean, stopCleaning, ampStop
LLM/TTS setChangeLlmStatus, setLlmTts, stopLlm, stopTts
IoT setDeviceStatus, setConfig, getConfig
Update OTAUpdateArmResult, OTAUpdateMcuResult, setFirmwareUpdateStatus

테스트 작업내역

app/src/test/java/com/sk/airbot/deviceagent/task/TaskManagerTest.java
app/src/test/java/com/sk/airbot/deviceagent/task/TaskManagerIntegrationTest.java
app/src/androidTest/java/com/sk/airbot/deviceagent/task/TaskManagerInstrumentedTest.java

추가되어야 할 테스트

테스트 목적
Cloud source submitTask cloud_workflow_id가 event까지 보존되는지 확인
MQTT source submitTask mqtt_message_idexternal_command_id가 event까지 보존되는지 확인
Workflow 3-step step event와 terminal event 순서 확인
Validation failure 필수 slot 누락 시 validation_failed와 terminal/reject 처리 확인
Reason mapping PATH_BLOCKED, ROOM_NOT_FOUND, LOW_BATTERY mapping 확인
Legacy passthrough TaskManager가 처리하지 않는 기존 method가 기존 경로로 동작하는지 확인
Planning context battery/map/location/cleaning/movement/task_manager/capabilities가 채워지는지 확인