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_spawn建立 leader 連線或按需啟動行程。
MvpAgent回應 ACP 請求並管理會話 handle。
spawn_session_on_thread為 Session 建立 OS 執行緒。
SessionActor推進 turn 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 承擔介面、Shell 承擔 Agent 與 Session 宿主、Sampler 承擔模型請求。