SoC TaskManager Vendor Briefing Path
이 문서는 SoC/DeviceAgent 업체와 회의하거나 설명할 때 사용할 진입로다. 업체에게 처음부터 전체 소스 설명을 던지면 흐름을 잃기 쉽기 때문에, “왜 바꾸는가 -> 무엇이 바뀌는가 -> 어디를 구현하는가 -> 무엇을 제출해야 하는가” 순서로 설명한다.
1. 10분 요약 설명
업체에게 가장 먼저 전달할 메시지:
이번 작업은 Cloud LLM 전용 기능 추가가 아니다.
기존 DeviceAgent의 직접 method 실행 구조 앞에 TaskManager layer를 추가해서,
Cloud A2A, MQTT 서버, App/Remote, 예약/자동화, 로컬 음성 명령을 같은 SoC 실행 framework로 수용하려는 작업이다.
10분 안에 설명할 핵심:
| 순서 | 내용 | 보여줄 문서 |
|---|---|---|
| 1 | 기존 DeviceAgent는 MainApi.executeMethod(...) 중심으로 직접 실행한다. |
Before/After Change Model |
| 2 | 기존 Layer와 변경 Layer를 먼저 그림으로 보여준다. | DeviceAgent Layer Transition |
| 3 | MainApi.executeMethod(...) 안에서 TaskManager가 어디에 삽입되는지 보여준다. |
MainApi TaskManager Insertion |
| 4 | 각 layer가 어떤 Java 파일과 연결되는지 보여준다. | DeviceAgent TaskManager Layer Source Map |
| 5 | submitTask와 submitWorkflow가 실제 runtime에서 어떤 순서로 도는지 보여준다. |
DeviceAgent Task Lifecycle Detail |
| 6 | source가 늘어나면 직접 실행 경로가 분산된다. | Background |
| 7 | TaskManager는 기존 domain handler 앞단에 admission/queue/workflow/event/reason layer를 추가한다. | Before/After Change Model |
| 8 | 실제 domain logic은 기존 handler를 유지하고 executor adapter로 연결한다. | Source-Level Implementation Guide |
| 9 | 완료 판정은 API/event/reason/logcat evidence로 한다. | Vendor Implementation Workbook |
2. 30분 구조 설명
30분 회의에서는 아래 순서로 설명한다.
2.1 기존 구조
DeviceAgent
-> MainApi.executeMethod(...)
-> executeMethodInternal(...)
-> FrameworkCommandBridge / command handler / domain manager
-> AppCmd callback
핵심 포인트:
- 기존 구조는 단일 method 실행에는 적합하다.
- 하지만 Cloud/MQTT/App/예약이 모두 직접 method를 호출하면 실행 정책과 callback이 source별로 갈라진다.
- 복합명령의 step 상태와 실패 reason을 공통으로 관리하기 어렵다.
2.2 변경 구조
Cloud/MQTT/App/Local Voice/Internal Schedule
-> submitTask / submitWorkflow
-> TaskManager
-> validation / policy / queue / workflow
-> TaskExecutorRegistry
-> 기존 domain handler 또는 SoC executor
-> onTaskEvent
핵심 포인트:
- TaskManager는 기존 domain logic을 대체하지 않는다.
- TaskManager는 기존 domain logic 앞에서 task lifecycle을 관리한다.
- source는 달라도 event/reason/trace contract는 하나로 맞춘다.
2.3 업체가 구현해야 할 경계
| 계층 | 업체 구현 포인트 |
|---|---|
MainApi hook |
TaskManager API 선처리, legacy path 보존 |
TaskManager core |
submit/query/cancel/workflow/event lifecycle |
| Policy/Validation | method별 queue, timeout, retry, 필수 slot |
| Executor Adapter | 기존 domain handler와 TaskManager 연결 |
| Reason Contract | domain error를 표준 reason code로 mapping |
| Planning Context | battery/map/location/cleaning/movement/queue/capability snapshot |
| Evidence | sample bundle, event trace, logcat, diff summary |
3. 60분 구현 딥다이브
구현자와는 아래 순서로 본다.
| 순서 | 문서 | 확인할 질문 |
|---|---|---|
| 1 | DeviceAgent Layer Transition | 어느 layer가 신규/변경/유지되는가 |
| 2 | MainApi TaskManager Insertion | 기존 명령이 MainApi에 모이는 위치와 TaskManager hook이 정확히 어디인가 |
| 3 | DeviceAgent TaskManager Layer Source Map | layer별 실제 소스 파일과 업체 작업 범위가 무엇인가 |
| 4 | DeviceAgent Task Lifecycle Detail | submitTask/submitWorkflow가 validation, policy, executor, event를 어떻게 통과하는가 |
| 5 | Source-Level Implementation Guide | MainApi.executeMethod(...) 앞단에 hook이 들어가는가 |
| 6 | Implementation Worklog | 어떤 파일이 추가/수정되어야 하는가 |
| 7 | Vendor Implementation Workbook | source별 sample payload를 처리할 수 있는가 |
| 8 | Architecture | event/reason/source trace가 어떤 흐름으로 올라오는가 |
| 9 | Framework Refactor Roadmap | 장기적으로 service/framework 경계가 어떻게 분리되는가 |
4. 설명 중 반드시 짚을 오해
| 오해 | 정정 |
|---|---|
| Cloud LLM만 붙이면 되는가 | 아니다. MQTT/App/예약 source도 같은 TaskManager API를 타야 한다. |
| 기존 command handler를 전부 다시 만들어야 하는가 | 아니다. 기존 handler는 유지하고 executor adapter로 연결한다. |
| 모든 event를 Cloud로 올려야 하는가 | 아니다. 정상 progress/completed는 상태 갱신이고, 판단 필요한 실패만 replan/report 후보가 된다. |
| get/status도 모두 queue task인가 | 아니다. get 계열은 DIRECT 또는 planning context query가 기본이다. |
| reason은 자연어 메시지면 충분한가 | 아니다. reason_code, reason_params, recoverability, suggested_action이 필요하다. |
5. 회의 후 업체에게 요청할 산출물
| 산출물 | 내용 |
|---|---|
| 구현 diff summary | 원본 대비 변경 파일과 변경 이유 |
| API sample bundle | submitTask, submitWorkflow, getTaskStatus, cancelTask |
| Event trace | onTaskEvent normal/failure/workflow sample |
| Reason mapping table | domain error -> standard reason code |
| Planning context sample | 실제 기기 상태 snapshot |
| Test result | unit/integration/instrumented/logcat evidence |
| Open question list | 미확정 method, queue, timeout, source policy |