Codex Handbook
core/src/tools/handlers/apply_patch_spec.rs 31 lines
use codex_tools::FreeformTool;use codex_tools::FreeformToolFormat;use codex_tools::ToolSpec;const APPLY_PATCH_LARK_GRAMMAR: &str = include_str!("apply_patch.lark");/// Returns a custom tool that can be used to edit files. Well-suited for GPT-5 models/// https://platform.openai.com/docs/guides/function-calling#custom-toolspub fn create_apply_patch_freeform_tool(include_environment_id: bool) -> ToolSpec {    let definition = if include_environment_id {        APPLY_PATCH_LARK_GRAMMAR.replace(            "start: begin_patch hunk+ end_patch",            "start: begin_patch environment_id? hunk+ end_patch\nenvironment_id: \"*** Environment ID: \" filename LF",        )    } else {        APPLY_PATCH_LARK_GRAMMAR.to_string()    };    ToolSpec::Freeform(FreeformTool {        name: "apply_patch".to_string(),        description: "Use the `apply_patch` tool to edit files. This is a FREEFORM tool, so do not wrap the patch in JSON.".to_string(),        format: FreeformToolFormat {            r#type: "grammar".to_string(),            syntax: "lark".to_string(),            definition,        },    })}#[cfg(test)]#[path = "apply_patch_spec_tests.rs"]mod tests;