diff --git a/frontend-web/src/components/workspace/agents/agent-card.tsx b/frontend-web/src/components/workspace/agents/agent-card.tsx index 0842da4e..7a2c63fc 100644 --- a/frontend-web/src/components/workspace/agents/agent-card.tsx +++ b/frontend-web/src/components/workspace/agents/agent-card.tsx @@ -40,6 +40,7 @@ import { SkillDetailDialog } from "@/components/workspace/skills/skill-detail-di import { TagChipList } from "@/components/workspace/tags/tag-chip"; import { TagPickerDialog } from "@/components/workspace/tags/tag-picker-dialog"; import { + useAgent, useDeleteAgent, useSetAgentFeatured, useUpdateAgent, @@ -74,6 +75,13 @@ export function AgentCard({ agent }: AgentCardProps) { ); const [detailSkillName, setDetailSkillName] = useState(null); + // The /api/agents list response intentionally omits `soul` (perf optimization + // — SOUL.md is only read on demand). Fetch the detail row when the edit + // dialog opens so the SOUL textarea can be hydrated. + const { agent: agentDetail, isLoading: isAgentDetailLoading } = useAgent( + editOpen ? agent.id : null, + ); + const storedAuth = useMemo(() => getStoredAuth(), []); const currentUserId = storedAuth?.user_id ?? null; const isAdmin = storedAuth?.system_role === "admin"; @@ -93,7 +101,6 @@ export function AgentCard({ agent }: AgentCardProps) { } setEditName(agent.name); setEditDescription(agent.description ?? ""); - setEditSoul(agent.soul ?? ""); setEditPublished(agent.published); setSelectedSkills(agent.skills ?? []); }, [ @@ -101,10 +108,23 @@ export function AgentCard({ agent }: AgentCardProps) { agent.name, agent.published, agent.skills, - agent.soul, editOpen, ]); + useEffect(() => { + if (!editOpen) { + return; + } + // SOUL.md only ships on the detail endpoint; fall back to whatever the list + // happened to carry so older deployments (or cached objects that still + // include `soul`) keep working. + if (agentDetail) { + setEditSoul(agentDetail.soul ?? ""); + } else { + setEditSoul(agent.soul ?? ""); + } + }, [agent.soul, agentDetail, editOpen]); + function handleChat() { router.push(`/page/workspace/agents/${agent.id}/chats/new`); } @@ -459,7 +479,11 @@ export function AgentCard({ agent }: AgentCardProps) {