diff options
| -rw-r--r-- | src/config/mod.rs | 19 | ||||
| -rw-r--r-- | src/repl/mod.rs | 24 |
2 files changed, 28 insertions, 15 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs index 3ea7648..20f19e5 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -1688,7 +1688,7 @@ impl Config { &self, cmd: &str, args: &[&str], - line: &str, + _line: &str, ) -> Vec<(String, Option<String>)> { let mut values: Vec<(String, Option<String>)> = vec![]; let mut filter = ""; @@ -1716,7 +1716,12 @@ impl Config { ".agent" => map_completion_values(list_agents()), ".macro" => map_completion_values(Self::list_macros()), ".starter" => match &self.agent { - Some(agent) => map_completion_values(agent.conversation_staters().to_vec()), + Some(agent) => agent + .conversation_staters() + .iter() + .enumerate() + .map(|(i, v)| ((i + 1).to_string(), Some(v.to_string()))) + .collect(), None => vec![], }, ".set" => { @@ -1793,20 +1798,12 @@ impl Config { }; values = candidates.into_iter().map(|v| (v, None)).collect(); filter = args[1]; - } else if cmd == ".agent" && args.len() >= 2 { + } 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 == ".starter" && args.len() >= 2 { - if let Some(agent) = &self.agent { - values = agent - .conversation_staters() - .iter() - .filter_map(|v| v.strip_prefix(line).map(|x| (x.to_string(), None))) - .collect() - } }; values .into_iter() diff --git a/src/repl/mod.rs b/src/repl/mod.rs index 1d96885..ef7921d 100644 --- a/src/repl/mod.rs +++ b/src/repl/mod.rs @@ -13,7 +13,7 @@ use crate::config::{ }; use crate::render::render_error; use crate::utils::{ - abortable_run_with_spinner, create_abort_signal, set_text, temp_file, AbortSignal, + abortable_run_with_spinner, create_abort_signal, dimmed_text, set_text, temp_file, AbortSignal, }; use anyhow::{bail, Context, Result}; @@ -450,9 +450,25 @@ pub async fn run_repl_command( } }, ".starter" => match args { - Some(value) => { - let input = Input::from_str(config, value, None); - ask(config, abort_signal.clone(), input, true).await?; + Some(id) => { + let mut text = None; + if let Some(agent) = config.read().agent.as_ref() { + for (i, value) in agent.conversation_staters().iter().enumerate() { + if (i + 1).to_string() == id { + text = Some(value.clone()); + } + } + } + match text { + Some(text) => { + println!("{}", dimmed_text(&format!(">> {}", text))); + let input = Input::from_str(config, &text, None); + ask(config, abort_signal.clone(), input, true).await?; + } + None => { + bail!("Invalid starter value"); + } + } } None => { let banner = config.read().agent_banner()?; |
