Codex Handbook
core/src/tools/code_mode/execute_spec.rs 88 lines
use codex_code_mode::ToolDefinition as CodeModeToolDefinition;use codex_tools::FreeformTool;use codex_tools::FreeformToolFormat;use codex_tools::ToolSpec;use std::collections::BTreeMap;pub(crate) fn create_code_mode_tool(    enabled_tools: &[CodeModeToolDefinition],    namespace_descriptions: &BTreeMap<String, codex_code_mode::ToolNamespaceDescription>,    code_mode_only: bool,    deferred_tools_available: bool,) -> ToolSpec {    const CODE_MODE_FREEFORM_GRAMMAR: &str = r#"start: pragma_source | plain_sourcepragma_source: PRAGMA_LINE NEWLINE SOURCEplain_source: SOURCEPRAGMA_LINE: /[ \t]*\/\/ @exec:[^\r\n]*/NEWLINE: /\r?\n/SOURCE: /[\s\S]+/"#;    ToolSpec::Freeform(FreeformTool {        name: codex_code_mode::PUBLIC_TOOL_NAME.to_string(),        description: codex_code_mode::build_exec_tool_description(            enabled_tools,            namespace_descriptions,            code_mode_only,            deferred_tools_available,        ),        format: FreeformToolFormat {            r#type: "grammar".to_string(),            syntax: "lark".to_string(),            definition: CODE_MODE_FREEFORM_GRAMMAR.to_string(),        },    })}#[cfg(test)]mod tests {    use super::*;    use codex_tools::ToolName;    use pretty_assertions::assert_eq;    #[test]    fn create_code_mode_tool_matches_expected_spec() {        let enabled_tools = vec![codex_code_mode::ToolDefinition {            name: "update_plan".to_string(),            tool_name: ToolName::plain("update_plan"),            description: "Update the plan".to_string(),            kind: codex_code_mode::CodeModeToolKind::Function,            input_schema: None,            output_schema: None,        }];        assert_eq!(            create_code_mode_tool(                &enabled_tools,                &BTreeMap::new(),                /*code_mode_only*/ true,                /*deferred_tools_available*/ false,            ),            ToolSpec::Freeform(FreeformTool {                name: codex_code_mode::PUBLIC_TOOL_NAME.to_string(),                description: codex_code_mode::build_exec_tool_description(                    &enabled_tools,                    &BTreeMap::new(),                    /*code_mode_only*/ true,                    /*deferred_tools_available*/ false                ),                format: FreeformToolFormat {                    r#type: "grammar".to_string(),                    syntax: "lark".to_string(),                    definition: r#"start: pragma_source | plain_sourcepragma_source: PRAGMA_LINE NEWLINE SOURCEplain_source: SOURCEPRAGMA_LINE: /[ \t]*\/\/ @exec:[^\r\n]*/NEWLINE: /\r?\n/SOURCE: /[\s\S]+/"#                    .to_string(),                },            })        );    }}