CHAPTER 12 · CALL PATH

실제 main()에서 첫 번째 샘플링까지

실제 진입점은 xai-grok-pager-bin/src/main.rs에 있습니다. 하나의 복합 진입점이 명령과 상호작용 모드를 파싱한 후 TUI 또는 Shell Agent 호스트에 작업을 위임합니다.

학습 목표
네 가지 실행 브랜치를 정확히 설명하고, connect_or_spawn, MvpAgent, spawn_session_on_thread, SessionActor, SamplerActor를 따라 첫 번째 대화 턴을 추적할 수 있습니다.
핵심 다이어그램 · 교육용 호출 그래프
main()PagerArgs run_headlessagent headless run_stdio_agentACP stdio run_leader leader 호스트 xai_grok_pager::app::run인터랙티브 TUI connect_or_spawnleader 연결 또는 시작ACP channels MvpAgent세션 호스트 SessionActorturn loop ChatStateActorhistory SamplerActorstreaming
run_headless

Agent 헤드리스 모드

grok agent headless로 Shell이 제공하는 헤드리스 호스트에 진입합니다.

run_stdio_agent

Stdio Agent

ACP stdio를 통해 요청을 주고받으며, 외부 클라이언트 구동에 적합합니다.

run_leader

Leader 프로세스

장기 실행 Agent를 호스팅하고 연결 채널을 통해 클라이언트를 서빙합니다.

app::run

인터랙티브 TUI

기본 상호작용 브랜치로 pager 앱에 진입하며, TUI는 leader를 통해 연결을 수립할 수 있습니다.

주요 핸드오프 체인
connect_or_spawnleader 연결을 수립하거나 필요에 따라 프로세스를 시작합니다.
MvpAgentACP 요청에 응답하고 세션 핸들을 관리합니다.
spawn_session_on_threadSession을 위한 OS 스레드를 생성합니다.
SessionActorturn loop를 진행하며 상태와 도구를 조율합니다.
SamplerActor요청을 위한 스트리밍 샘플링 태스크를 생성합니다.
실제 소스 코드 증거
crates/codegen/xai-grok-pager-bin/src/main.rs
use xai_grok_shell::agent::app::{
  run_headless, run_leader, run_stdio_agent
};

let runtime = tokio::runtime::Builder
  ::new_multi_thread()
  .enable_all()
  .build()?;
crates/codegen/xai-grok-shell/src/session/acp_session_impl/spawn.rs
/// Spawn a session actor on a dedicated thread
/// with its own tokio runtime and `LocalSet`.
pub(crate) async fn spawn_session_on_thread(...) {
  let rt = tokio::runtime::Builder
    ::new_current_thread()
    .enable_all().build()?;
  let local = tokio::task::LocalSet::new();
}
소스 스냅샷 안내: 이 페이지는 로컬에 동기화된 사본을 기준으로 검증되었습니다. 해당 사본에는 .git 메타데이터가 없으므로 특정 commit 버전에 해당한다고 주장하지 않습니다.
수업 연습 문제

인터랙티브 요청의 경계 그리기

각 노드가 xai-grok-pager-bin, xai-grok-pager, xai-grok-shell, xai-grok-sampler 중 어디에 속하는지 표시하세요. TUI와 Agent 호스트가 왜 두 개의 별도 crate인지 설명하세요.

Takeaway: 실제 진입점은 xai-grok-pager-bin/src/main.rs입니다. 모드 분배를 담당하며, 이후 pager가 UI를, Shell이 Agent 및 Session 호스트를, Sampler가 모델 요청을 처리합니다.