← Docs hub

TaskManager 사양 7 · Core와 Task 규범

None
사양 허브DeviceAgent MR6Spec 1.9

TaskManager Core, 관리 대상 Task, 기기 상태와 도메인별 연동의 필수 규범을 정의한다.

이 장의 결론: 모든 Task는 실행 허용, 자원, 취소, timeout과 terminal authority를 명시하고 기기 도메인의 정책을 계승해야 한다.

29. TaskManager Core, 관리 대상 Task와 기기 연동 규범

이 장은 앞의 구현 설명을 제품 사양의 세 계층으로 정리한다. TaskManager가 공통으로 보장할 사양, 각 Task가 개별적으로 선언할 사양, 실제 기기 상태가 실행 허용과 완료에 미치는 영향을 분리한다.

TaskManager Core, 관리 대상 Task, 기기 도메인 3계층 계약

위 3계층 계약 구조도는 모든 Task에 공통인 TaskManager Core 사양, 기능별 입력·정책·완료·취소를 정의하는 관리 대상 Task 단위 사양, 실제 제품 상태와 자원 제약을 제공하는 기기 도메인 연동 사양을 분리한다.

이 세 층을 섞으면 다음과 같은 오류가 생긴다.

29.1 TaskManager Core 규범 사양

TaskManager Core는 기능의 내용이 아니라 실행의 질서와 증거를 소유한다.

사양 축 Core가 관리해야 하는 값 현재 구현 기준 규범
식별 taskId, taskMethod, workflowName, 요청·추적 ID 연계 TaskRecord와 요청 메타데이터 모든 실행과 콜백은 Task 또는 Workflow로 상관관계를 복원할 수 있어야 함
접수 활성화, 별칭, 스키마, 출처, 상태, 자원, 선점 6장의 실행 허용 순서 실행기 호출 전에 실패를 구조화해 반환해야 함
정책 실행 방식, 대기열, 우선순위, 시간 제한, 재시도, 취소 가능 여부 TaskPolicyRegistry 출시 대상 기능은 이름 기반 추정이 아니라 명시적 정책을 가져야 함
실행 직접·대기·비동기 실행, 대기열 용량과 작업자 소유권 대기열별 실행기와 상위 Workflow 같은 대기열의 순서와 서로 다른 대기열의 병렬성을 예측 가능하게 유지해야 함
상태 대기·실행·취소 중·최종 상태 TaskRecord 최종 상태는 성공, 실패, 부분 실패와 취소를 구분해야 함
완료 대상, 식별 키, 관찰 시작 시점, 안정 시간, 시간 제한 TaskCompletionWatcher 실행 요청의 ACK와 실제 완료를 분리해야 함
제어 취소, 선점과 보상 동작 취소 명령과 Future 취소 요청과 실제 기기 중단 확인을 구분해야 함
실패 오류, 사유 코드, 매개변수, 복구 가능성과 권장 조치 TaskReasonContract 사용자 안내와 상위 재계획이 가능한 구조를 유지해야 함
관찰 이벤트, 진행률, 대기열·Task 스냅숏과 계획 컨텍스트 상태 보고기·제공자 상태 표시 계층이 Task의 실제 상태를 새로 정의하면 안 됨
복원 Task·예약 상태 저장과 재조정 일반 Task와 단발 예약을 별도 관리 저장된 상태보다 부팅 후 확인한 최신 기기 증거를 우선해야 함

29.1.1 Core 불변 조건

  1. Task 접수 성공은 기능 완료가 아니다. accepted=true는 실행 허용 판정과 기록 생성에 성공했다는 뜻이다.
  2. 물리 Task의 성공은 최신 완료 증거로 확정한다. completionSinceMs보다 오래된 콜백은 사용할 수 없다.
  3. 취소는 성공으로 변환하지 않는다. 사용자 취소, PUI 중단, 외부 앱 종료를 목적 달성으로 해석하지 않는다.
  4. TaskManager는 기기 도메인 안전 정책보다 높은 권한을 갖지 않는다. 대기열 우선순위가 배터리, 오류, 개인정보 보호와 제품 모드 제한을 우회하지 않는다.
  5. 관찰 이벤트는 실행 명령이 아니다. 센서 값이나 콜백을 그대로 구동 Task로 다시 제출하지 않는다.
  6. 상위 Planner 장애가 현재의 안전한 동작을 깨면 안 된다. 정상적인 후속 실행과 기기 내 취소·시간 제한 처리는 기기에서 마감한다.
  7. 같은 물리 효과를 만드는 중복 제출을 식별할 수 있어야 한다. 요청·추적·Workflow·단계 ID를 보존한다.
  8. 지원하지 않는 기능을 유사 기능으로 임의 대체하지 않는다. 실행기나 필수 입력이 없으면 명시적으로 거절한다.

29.1.2 실행 허용 정책과 실행 중 정책의 차이

실행 허용 정책은 두 시점에 적용된다.

시점 주요 구현 판단 대상 특징
TaskManager 실행 허용 TaskManager, TaskDomainResourcePolicy, TaskResourcePolicy 구조화 요청, 주 상태 조건, 자원 점유, CPU·RAM·발열 실행 전에 빠르게 거절 가능
기기 도메인 실행 CmdPolicyManager, StateManager, WSS·Movement·Cleaning manager 실제 LLM, 배터리, AMR, 개인정보 보호, 오류와 현재 동작 제품 사양의 최종 판단 주체

따라서 TaskManager가 accepted=true를 반환해도 기기 도메인 실행 시점에 상태가 바뀌면 POLICY_NOT_ALLOWED 또는 도메인 오류로 실패할 수 있다. 목표는 도메인 규칙을 TaskManager에 복제하는 것이 아니다. 공통으로 표현할 수 있는 상태와 자원을 실행 허용 판정에 반영하되, 최종 도메인 판정을 유지하는 것이다.

29.2 관리 대상 Task 단위 규범 사양

관리 대상 Task는 단순한 “함수 이름과 매개변수 묶음”이 아니다. 최소한 다음 다섯 질문에 답할 수 있어야 한다.

관리 대상 기능은 다음 질문에 모두 답할 수 있어야 한다.

29.2.1 Task 설명자 필드

구분 필드 필수 조건 의미
식별 taskMethod 항상 필수 표준 실행기 연결 키
식별 source 제품 요청에서 필수 권장 VOICE, APP, PUI, IOT, CLOUD, SENSOR 등
식별 requestId, traceId 외부·복합 요청에서 필수 중복 실행 방지와 전체 실행 추적
상하 관계 Workflow·단계 ID Workflow 단계이면 필수 상위 Task, 의존관계와 콜백 연결
입력 메서드별 매개변수 메서드 스키마에 따라 필수 공간, 동작, 모드, 화면, 스케줄 ID 등
실행 executionMode 정책 기본값 사용 가능 반환 시점과 대기열 사용 방식
실행 queueKey 정책 기본값 사용 가능 동시성과 순서 제어 영역
실행 priority 정책 기본값 사용 가능 대기열 내 실행 우선순위
실행 timeoutMs, 재시도 장기 Task에서 명시 권장 무한 대기 방지와 재시도 상한
실행 허용 requireMainState 특정 모드 전용 Task 요구 주 상태
실행 허용 checkBlockedStatus 기존 차단 상태를 실행 허용 판정에 적용할 때 StateManager.checkBlockedStatus() 사용
실행 허용 requiredResources 카메라·화면·세션 공유 기능 구조화된 자원 요구사항
완료 completionTarget 비동기 물리·세션 Task 기다릴 실제 완료 증거 종류
완료 completionKey 또는 공간 ID 완료 조건이 식별자를 요구할 때 다른 Task의 이벤트와 구분
완료 completionSinceMs 감시기 진입 전 내부 설정 과거 이벤트 차단
완료 completionStableMs 흔들리는 상태일 때 일정 시간의 안정 조건
제어 cancellable, cancelMethod 장기·기기 동작 Task 중단 가능성과 실제 중지 함수
복구 compensationMethod 선행 동작 복구가 필요할 때 부분 실행 뒤 안전 상태 복원
실행 구성 시작 조건, 실행 조건, 지연, 실패 정책 Workflow 단계에서 필요할 때 순서, 시간, 조건과 실패 전파

현재 TaskPolicyRegistry.resolve()는 요청이 정책 기본값을 덮어쓸 수 있게 한다. 그러나 호출자가 임의로 대기열, 우선순위와 시간 제한을 바꿔도 된다는 뜻은 아니다. 외부 공개 AAR과 Cloud 계약에는 기능 설명자가 허용한 변경 항목만 노출해야 한다.

29.2.2 Task 유형별 필수 사양

Task 유형 적합한 실행 방식 완료 기준 취소·복구 대표 예
즉시 조회 DIRECT 메서드 결과와 출처 정보의 최신성 일반적으로 취소 없음 배터리, 상태, 지도 존재 여부
제한된 설정 변경 QUEUED_WAIT 적용 응답 또는 재조회 확인 재설정·원복 필요 여부 설정, Eye LED, 런처 화면
물리 이동 ASYNC 도착 위치와 이동 정지 또는 충전 상태 이동 정지, 필요 시 안전 복귀 이동, 스테이션 복귀
장기 청정 ASYNC 시작·정지·단계·보고서 증거 청정 정지, 보고·복귀 보상 동작 기본·선택 청정
음성 출력 ASYNC 재생 시작·종료 또는 중단 TTS 중지 안내 발화
외부 앱 세션 ASYNC 앱 세션 시작·종료 앱 취소 또는 화면 복구 바이탈사인
보안 세션 ASYNC 시작·일시정지·재개·종료 보안 중지 감시 모드
상호작용 세션 ASYNC 동작 단계와 상호작용 완료 상호작용 중지 Welcome·Wakeup·Relax
의미 관찰 DIRECT 또는 QUEUED_WAIT 최신 관찰 결과 관찰 중단·자세 복구 Vision, 스테이션 신호
제품 스케줄 변경 QUEUED_WAIT DB 재조회 또는 콜백 변경 유형별 원복 스케줄 추가·수정·삭제
단발 예약 Task 예약 런타임 실행 시점의 새 실행 허용 결과 예약 취소 30분 뒤 단일 실행
상위 Workflow ASYNC/QUEUED_WAIT 필수 단계의 최종 상태 취합 하위 단계 취소·보상 동작 이동→청정→복귀

29.2.3 Task 최종 상태 판정

결과 판정 조건 다음 Workflow 단계
COMPLETED 선언한 성공 증거가 최신성과 안정 조건을 만족 의존관계가 충족되면 진행
FAILED 요청 전달 거절, 시간 초과, 중단 또는 실행기 예외 실패 정책에 따라 중단·계속·상위 판단
PARTIAL_FAILED 병렬 그룹 일부 성공, 일부 실패 성공한 기기 동작과 실패 목록을 함께 보존
CANCELLED 취소 경로와 실제 중단이 확인됨 기본적으로 성공 의존관계를 만족하지 않음

시간 제한은 완료 조건을 대신하지 않는다. 제한 시간이 지나면 성공으로 처리하지 않고 FAILED 또는 세션별 명시 정책으로 마감한다. 바이탈사인처럼 사용자의 측정 완료나 취소로 끝나는 Task는 임의로 30초 뒤 완료 처리하지 않는다. 앱의 완료·취소 증거를 기다려야 한다.

29.3 LLM/음성 세션과 기기 동작 연동 사양

이 절은 TaskManager 전체 요청 경로를 음성 중심으로 설명하지 않는다. LLM·음성 세션이 마이크, 스피커와 추론 자원을 점유할 때 추가로 적용되는 도메인 제약만 정의한다.

“LLM 동작 중 다른 동작 제한”은 하나의 boolean 규칙이 아니다. 현재 구현에는 신규 명령 실행 제한, 기존 동작 일시정지·재개, LLM 상태 관찰이 별도로 존재한다.

29.3.1 LLM 상태 모델

LlmPipelineObservationBridge는 다음 상태를 planning context의 voice_llm으로 투영한다.

파이프라인 상태 처리 중 음성 세션 활성 의미
idle false false 음성 세션 없음
listening true true STT 처리
cloud_reasoning true true Cloud 추론
on_device_reasoning true true 온디바이스 추론
synthesizing_llm true true LLM 응답 TTS 합성
speaking_llm true true LLM 응답 재생
paused false true 세션은 유지되지만 파이프라인 일시정지
stopped false false LLM 중지
initializing, reinitializing false false 준비 중
command_requesting true true 기기 명령 요청 중
외부 TTS 합성·재생 true false 외부 발화이며 음성 세션과 구분

이 값은 ondevice_agent_reported_status를 기반으로 하며 유효 시간과 최신성 조건이 있다. 오래된 상태를 Planner의 실행 근거로 사용하면 안 된다.

29.3.2 신규 기기 동작 제한

CmdPolicyManager.commonCheck()LlmManager.isLlmProcessingStatus()true인 동안 일반 이동, 청정과 스케줄 계열의 신규 동작을 기본적으로 거절한다.

현재 예외는 다음과 같다.

중요한 현재 경계:

29.3.3 기존 동작 일시정지·재개

호출어가 감지되면 notifyLearnedKeywordDetected 경로가 setDeviceStatus(action=pause)를 호출한다. 이 경로는 현재 활성 domain 중 하나를 pause한다.

현재 실행 도메인 일시정지 연결 지점
청정 cleanPause()
상호작용 InterScheduleManager.pause()
이동 RobotMovementController.pauseCurrentMove()

LLM 처리가 끝나고 기기 동작이 일시정지 상태이면 setLlmStatus 경로가 재개를 시도한다. 일시정지 요청자는 목록으로 관리된다. 따라서 필터 커버 오류처럼 LLM 외 다른 원인이 남아 있으면 LLM 종료만으로 재개하지 않는다. E01/S08 같은 오류 상태도 재개를 막는다.

persist.sys.debug.deviceagent.maumai_tmp_pause_resume는 LLM 상태 변화만으로 일시정지·재개를 연결하는 임시 속성이다. 기본 활성 사양으로 간주하면 안 된다. 제품 기준은 호출어, 명시적 기기 상태 생명주기와 실제 오류 조건을 함께 확인한다.

29.3.4 LLM 연동 규범

  1. 사용자의 음성 세션 시작을 위해 현재 Workflow를 COMPLETED로 만들지 않는다. 필요한 도메인만 일시정지한다. 현재 TaskRecord에는 별도 PAUSED 상태가 없어 기록은 RUNNING으로 남으므로, 도메인 일시정지 사실은 단계·이벤트로 보강해야 한다.
  2. 음성 세션 중 새 물리 Task는 기기 도메인 정책이 허용할 때만 실행한다.
  3. 안전 복귀 같은 긴급 경로는 일반 사용자 우선순위와 분리한다.
  4. 재개는 LLM IDLE 상태만 보지 않고 일시정지 요청자와 현재 오류를 확인한다.
  5. voice_session_active, pipeline_busy, output_state를 구분한다. 외부 TTS 재생을 사용자 음성 추론 세션으로 오해하지 않는다.
  6. Task 이벤트에는 “LLM 때문에 실행 허용 거절”, “LLM으로 기존 동작 일시정지”, “다른 오류 때문에 재개 보류”를 서로 다른 실패 사유로 노출해야 한다.

29.4 기기 상태와 자원 연동 행렬

아래 표의 Core는 TaskManager의 실행 허용과 런타임을, 기기 도메인은 기존 DeviceAgent의 기능 정책을 뜻한다.

기기 상태·자원 현재 관찰 출처 현재 실행 영향 소유 계층 Task 처리 규범
LLM 파이프라인 처리 중 LlmManager, voice_llm 컨텍스트 일반 이동·청정·스케줄의 신규 실행을 도메인이 기본 거절 기기 도메인 + Planner 컨텍스트 대기·거절 사유를 보존하고 안전 예외만 허용
호출어·음성 세션 시작 notifyLearnedKeywordDetected 실행 중인 청정·상호작용·이동 일시정지 기기 도메인 Task를 최종 상태로 닫지 않고 일시정지 의미 유지
LLM IDLE 보고된 상태 일시정지 요청자가 해제되고 오류가 없으면 재개 기기 도메인 무조건 재개하지 않고 여러 일시정지 원인을 확인
Factory·ICT·Upgrade·Selftest StateManager.mainState 제품 일반 동작 불가 기기 도메인 기기 동작 Task는 거절하고 조회·복구 허용 범위는 별도 정의
Vital Sign 주 상태 StateManager 다수 기존 API 차단, 카메라·화면·세션 점유 Core 자원 + 기기 도메인 다른 카메라·화면 Task를 차단하고 종료 증거까지 세션 유지
실시간 스트리밍 주 상태 이동·청정·스케줄 일부 차단, 카메라·화면 점유 Core 자원 + 기기 도메인 Vision·Vital Sign·Security와 충돌 처리
Multi AP·스케줄 편집·Wizard 주 상태 일반 명령 정책 거절 기기 도메인 해당 모드 종료 후 재시도 또는 사용자 안내
Security 활성 WSS 상태·트랜잭션 카메라, 이동 기반부와 Security 세션 점유 Core 자원 + 기기 도메인 신규 이동·Vision·Vital Sign 충돌. 일시정지·재개·중지는 항상 도달 가능해야 함
이동 중 이동 제어기 다른 일반 이동과 동시 실행 제한 기기 도메인 + 이동 대기열 같은 이동 기반부를 쓰는 Task 직렬화, 취소·도착 증거 필요
청정 중 청정 트랜잭션 새 청정·일반 이동 정책과 충돌 가능 기기 도메인 + 청정 대기열 관리 대상 이동은 청정을 중지하고 cleaning.stopped 증거를 확인한 뒤 실행 가능
상호작용 실행 중 상호작용 관리자 새 이동·청정·스케줄과 충돌 가능 기기 도메인 + 상호작용 대기열 일시정지·재개·완료 콜백 보존
긴급 저전력 오류 상태 일반 동작 금지. 현재 코드에서는 스테이션 기본 청정 허용 검사가 긴급 저전력 검사보다 먼저 수행됨 기기 도메인 의도된 예외인지 확정하고 실행 순서 시험으로 고정
저전력 오류 상태 이동·이동청정·스케줄 제한 기기 도메인 스테이션 고정 청정 예외와 안전 복귀를 구분
AMR 미연결 AMR 서비스·도킹 가능 여부 이동 계열 제한 기기 도메인 모의 실행이 아닌 실기기에서는 이동을 시작하지 않음
개인정보 보호 모드 설정 이동 계열 제한 기기 도메인 해제 요청을 안내하고 안전 복귀 예외는 분리
A1 초기화 전 초기화 상태 일반 동작 제한 기기 도메인 컨텍스트 준비 상태를 확인하고 실행 보류
지도 편집 중 MapManager.isEditMap() 이동·청정 계획 실행 제한 기기 도메인 지도 편집 완료 후 최신 공간 목록으로 재계획
공간 미등록 지도 공간 목록 이동 대상 연결 실패 실행기 unknown_move_target으로 실패하고 임의 공간 치환 금지
이미 스테이션 스테이션 상태 복귀 명령은 추가 동작 없이 성공 가능 이동 실행기 스테이션·충전 증거와 결과 반환
CPU·RAM 압력 TaskResourceMonitor NORMAL 이하 Task 실행 거절 가능 Core, 선택 적용 resourcePolicyEnabled가 켜졌을 때만 적용
발열 단계 TaskResourceMonitor 긴급 미만 Task 실행 거절 가능 Core, 선택 적용 기본 임계값 4와 센서 최신성 확인
AWS IoT 단절 네트워크 컨텍스트 모든 기기 내부 Task를 자동 차단하지 않음 Planner·Domain별 Cloud 콜백이 필요한 Task와 기기 내부 Task를 구분
잠금 모드 설정 IDLE이 아닌 LLM 상태 처리와 일부 UI·LLM 기능 제한 기기 도메인 잠금 상태를 고려해 사용자 응답과 실행 경로 분리

29.4.1 현재 자원 요구 계약

자원 현재 점유 도메인 요청 예
movement_base Security rotate, vision stationary observation
camera streaming, vital sign, Security vision observation, vital sign, Security
foreground_display streaming, vital sign vital sign/전면 화면 세션
external_app_session vital sign 앱 세션 기반 장기 task
security_session Security Security lifecycle

현재 speaker, microphone, tilt_head, voice_session, map_writer, network_uplink은 공통 자원 점유 계약으로 완전히 모델링돼 있지 않다. 문자열 규칙만 추가하지 말고 기능 설명자와 실행기가 같은 자원 용어를 사용하도록 확장해야 한다.

29.5 도메인별 관리 대상 Task 사양

29.5.1 이동과 스테이션 복귀

항목 setMoveTo returnToStation
대상 등록 공간 ID·이름 또는 좌표 스테이션 공간·상태 증거
기본 정책 ASYNC, movement, HIGH, 120초 ASYNC, movement, HIGH, 120초
시작 전 대상 확인, 필요 시 실행 중인 청정 중지 이미 스테이션인지 확인
완료 movement.arrived + 위치 안정 + 이동 정지 movement.stationCharging
취소 stopMovement stopMovement
보상 동작 stopMovement stopMovement
주요 제약 LLM, 배터리, AMR, 개인정보 보호, 지도 편집, 오류와 동시 이동 동일하나 안전 복귀 예외 존재

MovementTaskExecutor는 이동 전에 활성 청정을 멈추고 cleaning.stopped를 기다리는 전환 경로를 갖는다. 이는 “청정 중 이동 불가” 정책을 임의로 우회하는 예외가 아니다. 같은 Workflow 안에서 선행 물리 동작을 안전하게 정리한 뒤 이동하는 관리 전환이다.

현재 엄격 검증기가 허용하는 setMoveTo 키와 실행기가 실제로 인식하는 areaId, targetRoom, roomName 범위에 차이가 있다. 엄격 검증을 기본 활성화하기 전에 검증기와 표준 어댑터를 정합해야 한다.

29.5.2 청정

항목 사양
입력 동작, 모드·범위, 속도, AI와 선택 공간
기본 정책 ASYNC, cleaning, CONTROL, 최대 1200초
완료 조건 cleaning.started, cleaning.stopped, cleaning.stepComplete, cleaning.reportDone
기본 완료 선택 중지 동작은 stopped, 기본 청정 시작은 stopped, 이동청정은 reportDone 중심
최소 실행 시간 cleanMinTimeMs가 있으면 제한된 청정 시간 뒤 중지 가능
취소·보상 청정 중지 계약
이미 실행·정지 현재 상태와 공간이 맞으면 최신 완료 표시 생성 가능

청정 시작 응답을 완료로 볼지, 일정 시간 청정 후 중지를 완료로 볼지, 전체 이동청정 결과 보고까지 기다릴지는 Workflow 목적에 따라 completionTarget으로 구분한다.

29.5.3 LLM/TTS

Task 완료 취소 주의
LLM 상태 제어 상태 콜백 상태 변경·중지 상태 갱신과 사용자 세션을 구분
TTS 재생 tts.playbackEnded stopTts 재생 요청 응답만으로 완료하지 않음
LLM 중지 중지·IDLE 증거 해당 없음 진행 중 물리 Task 재개와 연동 가능

TTS는 스피커를 사용하지만 현재 공통 speaker 자원 점유 계약이 없다. Security·이동과 동시 실행 가능한지, 사용자 음성 입력 중 재생을 허용할지는 제품 UX 정책으로 명시하고 기능 자원에 반영해야 한다.

29.5.4 바이탈사인과 외부 앱 세션

단계 사양
시작 런처 화면·앱 실행 후 app.sessionStarted 또는 UI 적용 증거
실행 중 카메라, 전면 화면과 외부 앱 세션 점유
완료 사용자가 측정을 완료해 app.sessionEnded 콜백 발생
취소 사용자 취소 또는 상위 취소로 앱 세션 종료
시간 초과 성공으로 처리하지 않고 세션 시간 초과·실패로 종료
상관관계 completionKey 필수

바이탈사인은 화면을 띄운 순간 끝나는 단기 UI Task가 아니다. 측정 완료 또는 취소까지 이어지는 장기 세션이다. 후속 단계는 앱 세션의 최종 증거를 받은 뒤에만 시작한다.

29.5.5 보안

동작 완료 조건 자원·제약
시작 security.started 카메라, 이동과 Security 세션 점유. 스트리밍·Vital Sign과 충돌
일시정지 security.paused 기존 세션 제어이므로 항상 도달 가능해야 함
재개 security.resumed 저전력과 오류 상태 확인
중지 security.stopped 종료 제어는 자원 충돌 때문에 막히면 안 됨
순찰 완료 security.patrolCompleted 세션 종료인지 한 번의 순찰 완료인지 구분

Security 시작은 자신의 현재 Security 상태를 자원 스냅숏에서 제외해 자기 충돌을 피한다. 일시정지·재개·중지는 기존 세션 제어로 실행을 허용한다.

29.5.6 Welcome·Wakeup·Relax 상호작용

단계 완료 증거
세션 시작 interaction.started
목표 위치 도착 interaction.arrived
동작 시작·종료 interaction.actionStarted, interaction.actionEnded
복귀 interaction.returning
전체 종료 interaction.completed

interSchedule의 기본값은 ASYNC 실행, interaction 대기열, HIGH 우선순위, 1200초 제한이다. 완료 상태는 scheduleId를 키로 조회한다. InterScheduleManager에는 LLM 개입 정책으로 WAIT, RESTART, STOP이 정의돼 있으며 현재 기본값은 STOP이다.

STOP 정책에서도 relax 음원은 호출어 또는 LLM 세션이 시작되면 일시정지하고, 세션이 끝나면 재개하는 별도 흐름을 따른다. 단순히 예약 시각이 됐거나 TTS가 시작됐다는 이유로 전체 상호작용을 완료 처리하면 안 된다.

29.5.7 Vision, 회전과 스테이션 관찰

Task 요구 자원 완료·결과 현재 한계
observeVisionSemantics 이동 기반부 + 카메라 최신 의미 관찰 결과 객체 방향·거리·추적은 별도 기능 필요
rotateInPlace 이동 기반부 movement.rotationCompleted 이동 생명주기와 충돌 관리 필요
probeDockingSignal 스테이션·AMR 관찰 현재 신호 스냅숏 신호를 따라 자동 이동하는 기능이 아님
getStationLocationEvidence 지도·스테이션 제공자 증거 Bundle 위치 재탐색 Workflow와 구분

관찰 Task가 COMPLETED라는 것은 센서 호출이 정상 종료됐다는 뜻일 수 있다. 원하는 객체를 찾았거나 스테이션 위치 변경을 확정했다는 뜻은 아니다. 결과 구조의 detected, 신뢰도, 최신성과 증거 품질을 다음 단계 조건에서 확인해야 한다.

29.6 Workflow에서 Task 단위 사양을 사용하는 방법

예를 들어 “안방으로 이동해 바이탈사인을 측정하고 끝나면 스테이션으로 복귀”는 단순히 세 Task를 나열한 것이 아니라, 서로 다른 세 완료 계약을 연결한 Workflow다.

이동, 바이탈사인과 스테이션 복귀 Workflow

중간에 사용자가 말을 걸면 단계 1 또는 단계 3은 일시정지·재개 대상이 될 수 있다. 단계 2는 외부 앱 세션 정책에 따라 음성 처리 허용 여부를 따로 정의해야 한다. 바이탈사인 화면이 열렸다고 단계 3을 시작하거나, LLM이 IDLE이 됐다는 이유만으로 바이탈사인 세션을 완료 처리하면 안 된다.

29.7 구현 상태와 보강 우선순위

우선순위 보강 항목 이유
1 LLM·기기 정책 거절을 공통 실패 사유 계약으로 승격 실행 허용 뒤 발생한 거절 원인을 Planner와 UI가 이해해야 함
2 voice_session, speaker, tilt_head 자원 용어 정의 음성·관찰·화면 Task의 경쟁을 구조화해야 함
3 엄격 검증기와 실행기의 표준 필드 정합 엄격 검증 기본 활성화 전 setMoveTo 등 정상 요청의 잘못된 거절 방지
4 장기 세션별 시작·종료·취소 행렬을 CI에서 검사 Vital Sign, Security와 상호작용의 조기 완료 방지
5 일시정지·재개 생명주기를 TaskRecord와 이벤트에 명시 RUNNING과 실제 일시정지 상태의 차이를 모니터에 노출
6 기기 도메인 정책 스냅숏을 계획 컨텍스트와 실행 허용 단계에 투영 규칙 복제 없이 조기 거절 품질 향상
7 공통 자원 점유 계약 확대와 출시 인수 시험 카메라·화면·이동 외 자원 충돌 방지

보강의 핵심은 if (발화에 특정 단어가 있으면) 같은 규칙을 늘리는 것이 아니다. 기능이 요구하는 자원, 현재 기기 상태와 Task 완료 계약을 구조화해 상위 Planner와 DeviceAgent가 같은 용어와 계약을 사용하게 하는 것이다.


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