fix: include graph-agent descriptions in .agent <TAB> completions
CI / All (ubuntu-latest) (push) Failing after 25s
CI / All (macos-latest) (push) Has been cancelled
CI / All (windows-latest) (push) Has been cancelled

This commit is contained in:
2026-07-27 09:34:36 -06:00
parent b898e4dd78
commit d79ea55e09
2 changed files with 14 additions and 14 deletions
+11 -4
View File
@@ -1,6 +1,6 @@
use crate::client::{ModelType, list_models}; use crate::client::{ModelType, list_models};
use crate::config::paths; use crate::config::paths;
use crate::config::{AppConfig, Config, list_agents, list_sessions}; use crate::config::{AppConfig, Config, list_agents_with_descriptions, list_sessions};
use crate::utils::list_file_names; use crate::utils::list_file_names;
use crate::vault::Vault; use crate::vault::Vault;
use clap_complete::{CompletionCandidate, Shell, generate}; use clap_complete::{CompletionCandidate, Shell, generate};
@@ -73,10 +73,17 @@ pub(super) fn role_completer(current: &OsStr) -> Vec<CompletionCandidate> {
pub(super) fn agent_completer(current: &OsStr) -> Vec<CompletionCandidate> { pub(super) fn agent_completer(current: &OsStr) -> Vec<CompletionCandidate> {
let cur = current.to_string_lossy(); let cur = current.to_string_lossy();
list_agents() list_agents_with_descriptions()
.into_iter() .into_iter()
.filter(|a| a.starts_with(&*cur)) .filter(|(a, _)| a.starts_with(&*cur))
.map(CompletionCandidate::new) .map(|(name, desc)| {
let help = if desc.is_empty() {
None
} else {
Some(desc.into())
};
CompletionCandidate::new(name).help(help)
})
.collect() .collect()
} }
+3 -10
View File
@@ -1,4 +1,3 @@
use super::agent::AgentConfig;
use super::rag_cache::{RagCache, RagKey}; use super::rag_cache::{RagCache, RagKey};
use super::session::Session; use super::session::Session;
use super::skill::{SKILL_SCAFFOLD, Skill}; use super::skill::{SKILL_SCAFFOLD, Skill};
@@ -10,7 +9,7 @@ use super::{
AGENTS_DIR_NAME, Agent, AgentVariables, AppConfig, AppState, AssetCategory, CREATE_TITLE_ROLE, AGENTS_DIR_NAME, Agent, AgentVariables, AppConfig, AppState, AssetCategory, CREATE_TITLE_ROLE,
Input, InstallFilter, LEFT_PROMPT, LastMessage, MESSAGES_FILE_NAME, RIGHT_PROMPT, Role, Input, InstallFilter, LEFT_PROMPT, LastMessage, MESSAGES_FILE_NAME, RIGHT_PROMPT, Role,
RoleLike, SESSIONS_DIR_NAME, SUMMARIZATION_PROMPT, SUMMARY_CONTEXT_PROMPT, StateFlags, RoleLike, SESSIONS_DIR_NAME, SUMMARIZATION_PROMPT, SUMMARY_CONTEXT_PROMPT, StateFlags,
TEMP_ROLE_NAME, TEMP_SESSION_NAME, WorkingMode, ensure_parent_exists, list_agents, TEMP_ROLE_NAME, TEMP_SESSION_NAME, WorkingMode, ensure_parent_exists,
list_agents_with_descriptions, memory, paths, list_agents_with_descriptions, memory, paths,
}; };
use super::{MessageContentToolCalls, prompts}; use super::{MessageContentToolCalls, prompts};
@@ -2876,15 +2875,9 @@ impl RequestContext {
} }
} }
".rag" => super::map_completion_values(paths::list_rags()), ".rag" => super::map_completion_values(paths::list_rags()),
".agent" => list_agents() ".agent" => list_agents_with_descriptions()
.into_iter() .into_iter()
.map(|name| { .map(|(name, desc)| (name, if desc.is_empty() { None } else { Some(desc) }))
let description = AgentConfig::load(&paths::agent_config_file(&name))
.ok()
.map(|c| c.description)
.filter(|d| !d.is_empty());
(name, description)
})
.collect(), .collect(),
".install" => { ".install" => {
let mut values: Vec<String> = let mut values: Vec<String> =