← Docs hub

Speaker Identity And TaskManager Integration

이 문서는 화자 컨텍스트가 Cloud A2A Task Manager와 복합명령 실행에 어떻게 연결되는지 정리한다. 핵심은 Task Manager가 “무엇을 실행할지”뿐 아니라 “누가 요청했고, 그 사람이 후속 변경/취소 권한을 갖는지”를 알 수 있어야 한다는 점이다.

TaskManager Integration Overview

1. 현재 Cloud A2A 실행 구조

관련 소스:

gemini/a2a/runtime/orchestrator.py
gemini/a2a/runtime/task_manager.py
gemini/a2a/runtime/session_state.py
gemini/a2a/runtime/workflow_state.py

현재 흐름:

  1. route_turn()이 planner 결과를 만든다.
  2. should_execute_task_plan()이 multi-step/device task 여부를 판단한다.
  3. execute_task_plan()이 step 순서와 dependency를 처리한다.
  4. build_device_task_requests()가 온디바이스로 내려갈 task request를 만든다.
  5. orchestration.session_statedevice_task_requests가 Lambda 응답에 포함된다.

2. speaker-aware workflow owner

Workflow Owner Contract

권장 session_state 확장:

{
  "session_state": {
    "active_workflow_id": "wf_001",
    "workflow_owner_speaker_id": "user_001",
    "last_speaker_id": "user_001",
    "speaker_policy": {
      "confirmation_required": false,
      "authority_gate": "pass",
      "reason": "identified_owner"
    }
  }
}

적용 규칙:

상황 처리
같은 speaker가 후속 발화 workflow continuation 허용
다른 speaker가 단순 정보 질문 별도 route로 처리 가능
다른 speaker가 workflow 취소/변경 confirmation 또는 권한 확인
unknown speaker가 side-effect 변경 차단 또는 owner 확인
multi_speaker/overlap task 실행 금지, 재시도 안내

3. device_task_requests 확장 후보

현재 task_manager.py는 device intent step을 다음 형태로 만든다.

{
  "task_type": "device_intent_step",
  "token_text": "<sk_48>(action=1)<sk_end>",
  "cloud_workflow_id": "wf_001",
  "cloud_step_id": "s1",
  "execution_target": "device",
  "wait_policy": "submitted",
  "contract_version": "a2a-task-orchestration-v1"
}

speaker-aware 확장:

{
  "task_type": "device_intent_step",
  "token_text": "<sk_48>(action=1)<sk_end>",
  "cloud_workflow_id": "wf_001",
  "cloud_step_id": "s1",
  "speaker_policy": {
    "speaker_id": "user_001",
    "speaker_state": "identified",
    "speaker_confidence": 0.72,
    "authority_gate": "pass",
    "side_effect_allowed": true
  },
  "contract_version": "a2a-task-orchestration-v1"
}

4. side-effect gate

Side Effect Gate

side-effect가 있는 작업:

권장 처리:

speaker_state low-risk 대화 설명/조회 side-effect 실행
identified 허용 허용 권한 확인 후 허용
unknown 허용 제한 허용 확인 질문 또는 차단
ambiguous 허용 제한 허용 확인 질문
multi_speaker 재시도 권장 재시도 권장 차단
overlap 재시도 재시도 차단

5. 복합명령 예시

Compound Command Speaker Flow

발화:

거실 청정하고 10분 뒤에 침실로 와

planner output 후보:

{
  "turn_mode": "multi_step",
  "steps": [
    {
      "id": "s1",
      "route": "ODL",
      "token_text": "<sk_clean_living_room>"
    },
    {
      "id": "s2",
      "route": "SCH",
      "purpose": "wait 10 minutes",
      "depends_on": ["s1"]
    },
    {
      "id": "s3",
      "route": "ODL",
      "token_text": "<sk_move_bedroom>",
      "depends_on": ["s2"]
    }
  ]
}

speaker-aware runtime:

  1. s1 실행 전 speaker_policy.side_effect_allowed 확인
  2. workflow owner speaker 저장
  3. s2 대기 중 후속 발화 speaker 확인
  4. s3 실행 전 owner/authority 재확인

6. 구현 우선순위

  1. speaker_context를 Cloud request에 포함한다.
  2. build_session_state()last_speaker_idworkflow_owner_speaker_id를 추가한다.
  3. build_device_task_requests()speaker_policy를 additive로 붙인다.
  4. side-effect task gate를 policy 함수로 분리한다.
  5. 복합명령 테스트에 owner mismatch/unknown/multi_speaker 케이스를 추가한다.

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