Codex Handbook
core/src/tools/handlers/plan_spec.rs 58 lines
use codex_tools::JsonSchema;use codex_tools::ResponsesApiTool;use codex_tools::ToolSpec;use serde_json::json;use std::collections::BTreeMap;pub fn create_update_plan_tool() -> ToolSpec {    let plan_item_properties = BTreeMap::from([        (            "step".to_string(),            JsonSchema::string(Some("Task step text.".to_string())),        ),        (            "status".to_string(),            JsonSchema::string_enum(                vec![json!("pending"), json!("in_progress"), json!("completed")],                Some("Step status.".to_string()),            ),        ),    ]);    let properties = BTreeMap::from([        (            "explanation".to_string(),            JsonSchema::string(Some(                "Optional explanation for this plan update.".to_string(),            )),        ),        (            "plan".to_string(),            JsonSchema::array(                JsonSchema::object(                    plan_item_properties,                    Some(vec!["step".to_string(), "status".to_string()]),                    Some(false.into()),                ),                Some("The list of steps".to_string()),            ),        ),    ]);    ToolSpec::Function(ResponsesApiTool {        name: "update_plan".to_string(),        description: r#"Updates the task plan.Provide an optional explanation and a list of plan items, each with a step and status.At most one step can be in_progress at a time."#        .to_string(),        strict: false,        defer_loading: None,        parameters: JsonSchema::object(            properties,            Some(vec!["plan".to_string()]),            Some(false.into()),        ),        output_schema: None,    })}