Grok Build · 도구 설정
프로세스 수준 외부 Toolset Preset 레지스트리
config.rs는 crate 외부의 확장 코드가 현재 프로세스 내에서 이름으로 해결되는 도구 집합 빌더 함수를 등록할 수 있도록 하며, Public과 Internal로 공개 열거 포함 여부를 제어합니다.
학습 목표 레지스트리가 저장하는 내용, Public과 Internal의 경계, 그리고 늦은 등록이 「이미 해결된 설정」과 「이후 해결」에 미치는 차이를 이해합니다.
핵심 시각 자료 · 교육용 구조도
교육용 구조도: 노드와 연결선은 소스 코드 관계를 설명하며, 내용은 강의용으로 정리되었습니다.
반드시 구분해야 할 세 가지 사실
Builder는 함수 포인터ToolsetPresetBuilder = fn() -> ToolServerConfig. 레지스트리는 빌더 함수를 저장하며, 조회 시 함수를 호출하여 설정을 생성합니다.
Visibility는 열거만 제어Public은 preset_names와 공개 preset 집합에 포함됩니다. Internal은 공개 열거에 포함되지 않지만 toolset_for_preset으로 이름 해결이 가능합니다.
Registry는 프로세스 소속OnceLock과 Mutex가 전역 HashMap을 감싸며, 현재 프로세스의 수명 동안 잠금 보호 읽기/쓰기를 지원합니다.
등록 타이밍의 정확한 의미
설정 A 이미 해결됨
이후 등록된 새 preset은 설정 A에 역으로 반영되지 않습니다. 기존 ToolServerConfig는 그대로 유지됩니다.
설정 B 이후 해결
이후 호출은 전역 레지스트리를 다시 조회하므로 늦게 등록된 preset을 볼 수 있습니다. 소스 주석은 일관된 시작 동작 보장을 위해 첫 번째 해결 전에 등록을 완료할 것을 권장합니다.
실제 소스 코드 증거
crates/codegen/xai-grok-agent/src/config.rs38~81번째 줄 발췌
pub type ToolsetPresetBuilder = fn() -> ToolServerConfig;
enum PresetVisibility {
Public,
Internal,
}
pub fn register_toolset_preset(name: &str, builder: ToolsetPresetBuilder) {
toolset_preset_registry().lock().expect("toolset preset registry poisoned")
.insert(name.to_string(), (builder, PresetVisibility::Public));
}
pub fn register_internal_toolset_preset(name: &str, builder: ToolsetPresetBuilder) {
toolset_preset_registry().lock().expect("toolset preset registry poisoned")
.insert(name.to_string(), (builder, PresetVisibility::Internal));
}
fn registered_toolset_preset(name: &str) -> Option<ToolServerConfig> {
toolset_preset_registry().lock().expect("toolset preset registry poisoned")
.get(name).map(|(f, _)| f())
}
소스 스냅샷 안내: 로컬 저장소
grok-build-main 기반, crates/codegen/xai-grok-agent/src/config.rs 대조 확인, 확인 날짜 2026-07-17. 코드 블록은 표시된 모든 필드·함수·문자열의 소스 원문을 유지합니다.실습
01
테스트 Harness 전용 preset 설계하기
호출할 등록 함수, builder의 전체 타입, 그리고 preset_names()에 포함될 수 있는지 작성합니다. 이후 설명: 세션 설정이 이미 해결된 경우, 등록 후 해당 세션이 자동으로 변경되는지 여부를 답합니다.
Takeaway: 외부 preset 레지스트리는 「이름 → 빌더 함수 + 가시성」 매핑을 저장합니다. Public과 Internal의 핵심 차이는 공개 열거 범위입니다. 늦은 등록은 이미 해결된 설정을 변경하지 않으며, 이후 해결은 새 항목을 조회할 수 있습니다.