Codex Handbook
core/src/tools/handlers/test_sync_spec.rs 63 lines
use codex_tools::JsonSchema;use codex_tools::ResponsesApiTool;use codex_tools::ToolSpec;use std::collections::BTreeMap;pub fn create_test_sync_tool() -> ToolSpec {    let barrier_properties = BTreeMap::from([        (            "id".to_string(),            JsonSchema::string(Some(                "Identifier shared by concurrent calls that should rendezvous".to_string(),            )),        ),        (            "participants".to_string(),            JsonSchema::number(Some(                "Number of tool calls that must arrive before the barrier opens".to_string(),            )),        ),        (            "timeout_ms".to_string(),            JsonSchema::number(Some(                "Maximum barrier wait in milliseconds. Defaults to 1000.".to_string(),            )),        ),    ]);    let properties = BTreeMap::from([        (            "sleep_before_ms".to_string(),            JsonSchema::number(Some(                "Delay before any other action. Defaults to no delay.".to_string(),            )),        ),        (            "sleep_after_ms".to_string(),            JsonSchema::number(Some(                "Delay after completing the barrier. Defaults to no delay.".to_string(),            )),        ),        (            "barrier".to_string(),            JsonSchema::object(                barrier_properties,                Some(vec!["id".to_string(), "participants".to_string()]),                Some(false.into()),            ),        ),    ]);    ToolSpec::Function(ResponsesApiTool {        name: "test_sync_tool".to_string(),        description: "Internal synchronization helper used by Codex integration tests.".to_string(),        strict: false,        defer_loading: None,        parameters: JsonSchema::object(properties, /*required*/ None, Some(false.into())),        output_schema: None,    })}#[cfg(test)]#[path = "test_sync_spec_tests.rs"]mod tests;