From a0dc5bdad6997ec733492ec12f3fcda9ff2e54e1 Mon Sep 17 00:00:00 2001 From: Tara Menon Date: Thu, 11 Jun 2026 22:37:50 +0530 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix=20identity=20always-availabl?= =?UTF-8?q?e=20fallback=20chain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agent name now falls back to config.name if [identity] section is empty - Agent role defaults to "AI Assistant built by Gyannetra" - User name defaults to "the User" if not set - Removes dependency on identity_setup being completed - Every session gets identity+memory injected into system prompt --- crates/gyandoot-agent/src/agent_loop.rs | 44 +++++++++++++++---------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/crates/gyandoot-agent/src/agent_loop.rs b/crates/gyandoot-agent/src/agent_loop.rs index 12ebd00..052a714 100644 --- a/crates/gyandoot-agent/src/agent_loop.rs +++ b/crates/gyandoot-agent/src/agent_loop.rs @@ -163,25 +163,33 @@ impl AgentLoop { let (agent_name, agent_role, user_name, user_role) = { let memory = self.memory.lock().await; let (l0, _) = memory.identity_get().unwrap_or_default(); - if !l0.is_empty() && !self.config.identity.agent_name.is_empty() { - ( - self.config.identity.agent_name.clone(), - self.config.identity.agent_role.clone(), - self.config.identity.user_name.clone(), - self.config.identity.user_role.clone(), - ) - } else if !l0.is_empty() { - // Parse from L0: "name: X\nrole: Y\nuser: Z (W)\n" - let mut parts = l0.lines().filter_map(|l| l.split_once(": ").map(|(_, v)| v.to_string())).collect::>(); - ( - parts.get(0).cloned().unwrap_or_default(), - parts.get(1).cloned().unwrap_or_default(), - parts.get(2).and_then(|u| u.split_once(" (").map(|(n, _)| n.to_string())).unwrap_or_default(), - parts.get(2).and_then(|u| u.split_once(" (").and_then(|(_, r)| r.trim_end_matches(')').to_string().into())).unwrap_or_default(), - ) + + // Priority: config identity > L0 file > config.agent.name > defaults + let a_name = if !self.config.identity.agent_name.is_empty() { + self.config.identity.agent_name.clone() } else { - (String::new(), String::new(), String::new(), String::new()) - } + self.config.name.clone() // fallback to agent name from config + }; + + let a_role = if !self.config.identity.agent_role.is_empty() { + self.config.identity.agent_role.clone() + } else { + "AI Assistant built by Gyannetra".to_string() + }; + + let u_name = if !self.config.identity.user_name.is_empty() { + self.config.identity.user_name.clone() + } else { + "the User".to_string() + }; + + let u_role = if !self.config.identity.user_role.is_empty() { + self.config.identity.user_role.clone() + } else { + "User".to_string() + }; + + (a_name, a_role, u_name, u_role) }; // Build system prompt with identity + dialogue memory