From cf3e9691373a776985222e3878b8418b7caf5dcf Mon Sep 17 00:00:00 2001 From: sigoden Date: Sat, 18 Jan 2025 09:12:08 +0800 Subject: refactor: improve `.agent` repl command (#1094) --- src/config/mod.rs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/config/mod.rs') diff --git a/src/config/mod.rs b/src/config/mod.rs index 20f19e5..19bd239 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -3,7 +3,7 @@ mod input; mod role; mod session; -pub use self::agent::{list_agents, Agent, AgentVariables}; +pub use self::agent::{list_agents, Agent, AgentDefinition, AgentVariables}; pub use self::input::Input; pub use self::role::{ Role, RoleLike, CODE_ROLE, CREATE_TITLE_ROLE, EXPLAIN_SHELL_ROLE, SHELL_ROLE, @@ -1798,12 +1798,25 @@ impl Config { }; values = candidates.into_iter().map(|v| (v, None)).collect(); filter = args[1]; - } else if cmd == ".agent" && args.len() == 2 { - let dir = Self::agent_data_dir(args[0]).join(SESSIONS_DIR_NAME); - values = list_file_names(dir, ".yaml") - .into_iter() - .map(|v| (v, None)) - .collect(); + } else if cmd == ".agent" { + if args.len() == 2 { + let dir = Self::agent_data_dir(args[0]).join(SESSIONS_DIR_NAME); + values = list_file_names(dir, ".yaml") + .into_iter() + .map(|v| (v, None)) + .collect(); + } + let definition_file_path = Self::agent_functions_dir(args[0]).join("index.yaml"); + if definition_file_path.exists() { + if let Ok(definition) = AgentDefinition::load(&definition_file_path) { + values.extend( + definition + .variables + .iter() + .map(|v| (format!("{}=", v.name), Some(v.description.clone()))), + ); + } + } }; values .into_iter() -- cgit v1.2.3