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를 따라 첫 번째 대화 턴을 추적할 수 있습니다.핵심 다이어그램 · 교육용 호출 그래프
run_headlessAgent 헤드리스 모드
grok agent headless로 Shell이 제공하는 헤드리스 호스트에 진입합니다.
run_stdio_agentStdio Agent
ACP stdio를 통해 요청을 주고받으며, 외부 클라이언트 구동에 적합합니다.
run_leaderLeader 프로세스
장기 실행 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()?;
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();
}
/// 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가 모델 요청을 처리합니다.