From ecf6463d98cfe997d2eef91970db550f7441caa2 Mon Sep 17 00:00:00 2001 From: viettranx Date: Thu, 2 Apr 2026 11:04:56 +0700 Subject: [PATCH] fix(summon): preserve user's custom display_name during summon/regenerate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, finishSummon() and RegenerateAgent() unconditionally overwrote display_name with the LLM-extracted name from IDENTITY.md. Now if the user already set a custom name, it is preserved and IDENTITY.md Name field is synced to match — keeping UI label and agent self-identity consistent. --- internal/http/summoner.go | 14 +++++++++++++- internal/http/summoner_regenerate.go | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/internal/http/summoner.go b/internal/http/summoner.go index 299fb04d..98d999f8 100644 --- a/internal/http/summoner.go +++ b/internal/http/summoner.go @@ -191,7 +191,19 @@ func (s *AgentSummoner) finishSummon(ctx context.Context, agentID, tenantID uuid updates["frontmatter"] = frontmatter } if name := extractIdentityName(identityContent); name != "" { - updates["display_name"] = name + agent, _ := s.agents.GetByID(ctx, agentID) + if agent != nil && agent.DisplayName != "" { + // User already set a custom name — preserve it, sync IDENTITY.md to match + if name != agent.DisplayName { + updated := bootstrap.UpdateIdentityField(identityContent, "Name", agent.DisplayName) + if updated != identityContent { + _ = s.agents.SetAgentContextFile(ctx, agentID, bootstrap.IdentityFile, updated) + } + } + } else { + // No custom name — use LLM-generated name + updates["display_name"] = name + } } if len(updates) > 0 { if err := s.agents.Update(ctx, agentID, updates); err != nil { diff --git a/internal/http/summoner_regenerate.go b/internal/http/summoner_regenerate.go index 2475387a..769848cc 100644 --- a/internal/http/summoner_regenerate.go +++ b/internal/http/summoner_regenerate.go @@ -56,7 +56,19 @@ func (s *AgentSummoner) RegenerateAgent(agentID uuid.UUID, tenantID uuid.UUID, p updates["frontmatter"] = fm } if name := extractIdentityName(files[bootstrap.IdentityFile]); name != "" { - updates["display_name"] = name + agent, _ := s.agents.GetByID(ctx, agentID) + if agent != nil && agent.DisplayName != "" { + // User already set a custom name — preserve it, sync IDENTITY.md to match + if name != agent.DisplayName { + updated := bootstrap.UpdateIdentityField(files[bootstrap.IdentityFile], "Name", agent.DisplayName) + if updated != files[bootstrap.IdentityFile] { + _ = s.agents.SetAgentContextFile(ctx, agentID, bootstrap.IdentityFile, updated) + } + } + } else { + // No custom name — use LLM-generated name + updates["display_name"] = name + } } if len(updates) > 0 { if err := s.agents.Update(ctx, agentID, updates); err != nil {