diff --git a/ui/web/src/i18n/locales/en/agents.json b/ui/web/src/i18n/locales/en/agents.json
index f8b01c2c..8aff8ee3 100644
--- a/ui/web/src/i18n/locales/en/agents.json
+++ b/ui/web/src/i18n/locales/en/agents.json
@@ -533,7 +533,12 @@
"retrying": "Retrying...",
"done": "done",
"fileLabelSOUL": "Soul & Personality",
- "fileLabelIDENTITY": "Identity Card"
+ "fileLabelIDENTITY": "Identity Card",
+ "regenerateTitle": "Editing with AI...",
+ "regenerateCompleted": "Edit Complete!",
+ "regenerateFailed": "Edit Failed",
+ "regenerateWeavingSoul": "Updating files for",
+ "regenerateWait": "AI is rewriting the files. Please wait..."
},
"configGroups": {
"core": "Core",
diff --git a/ui/web/src/i18n/locales/vi/agents.json b/ui/web/src/i18n/locales/vi/agents.json
index 386d0716..16c27939 100644
--- a/ui/web/src/i18n/locales/vi/agents.json
+++ b/ui/web/src/i18n/locales/vi/agents.json
@@ -533,7 +533,12 @@
"retrying": "Đang thử lại...",
"done": "xong",
"fileLabelSOUL": "Linh hồn & Tính cách",
- "fileLabelIDENTITY": "Thẻ danh tính"
+ "fileLabelIDENTITY": "Thẻ danh tính",
+ "regenerateTitle": "Đang chỉnh sửa bằng AI...",
+ "regenerateCompleted": "Chỉnh sửa hoàn tất!",
+ "regenerateFailed": "Chỉnh sửa thất bại",
+ "regenerateWeavingSoul": "Đang cập nhật tệp cho",
+ "regenerateWait": "AI đang viết lại các tệp. Vui lòng chờ..."
},
"configGroups": {
"core": "Cốt lõi",
diff --git a/ui/web/src/i18n/locales/zh/agents.json b/ui/web/src/i18n/locales/zh/agents.json
index 63d947e9..a6b8d04f 100644
--- a/ui/web/src/i18n/locales/zh/agents.json
+++ b/ui/web/src/i18n/locales/zh/agents.json
@@ -533,7 +533,12 @@
"retrying": "重试中...",
"done": "完成",
"fileLabelSOUL": "灵魂与个性",
- "fileLabelIDENTITY": "身份卡"
+ "fileLabelIDENTITY": "身份卡",
+ "regenerateTitle": "AI 编辑中...",
+ "regenerateCompleted": "编辑完成!",
+ "regenerateFailed": "编辑失败",
+ "regenerateWeavingSoul": "正在更新文件:",
+ "regenerateWait": "AI 正在重写文件,请稍候..."
},
"configGroups": {
"core": "核心",
diff --git a/ui/web/src/pages/agents/agent-detail/agent-detail-page.tsx b/ui/web/src/pages/agents/agent-detail/agent-detail-page.tsx
index e7dd6360..6a6e22a0 100644
--- a/ui/web/src/pages/agents/agent-detail/agent-detail-page.tsx
+++ b/ui/web/src/pages/agents/agent-detail/agent-detail-page.tsx
@@ -30,6 +30,7 @@ export function AgentDetailPage({ agentId, onBack }: AgentDetailPageProps) {
const { deleteAgent: deleteAgentById } = useAgents();
const hb = useAgentHeartbeat(agentId);
const [summoningOpen, setSummoningOpen] = useState(false);
+ const [summoningMode, setSummoningMode] = useState<"summon" | "regenerate">("summon");
const [activeTab, setActiveTab] = useState("agent");
const [deleteOpen, setDeleteOpen] = useState(false);
const [advancedOpen, setAdvancedOpen] = useState(false);
@@ -37,11 +38,13 @@ export function AgentDetailPage({ agentId, onBack }: AgentDetailPageProps) {
const handleRegenerate = async (prompt: string) => {
await regenerateAgent(prompt);
+ setSummoningMode("regenerate");
setSummoningOpen(true);
};
const handleResummon = async () => {
await resummonAgent();
+ setSummoningMode("summon");
setSummoningOpen(true);
};
@@ -130,6 +133,7 @@ export function AgentDetailPage({ agentId, onBack }: AgentDetailPageProps) {
agentName={title}
onCompleted={() => {}}
onResummon={async () => { await resummonAgent(); }}
+ mode={summoningMode}
/>
{heartbeatOpen && (
diff --git a/ui/web/src/pages/agents/summoning-modal.tsx b/ui/web/src/pages/agents/summoning-modal.tsx
index a76883a3..e0d40d8d 100644
--- a/ui/web/src/pages/agents/summoning-modal.tsx
+++ b/ui/web/src/pages/agents/summoning-modal.tsx
@@ -19,6 +19,8 @@ interface SummoningModalProps {
onResummon: (agentId: string) => Promise
- {t("summoning.wait")} ({Math.floor(elapsed / 60)}:{String(elapsed % 60).padStart(2, "0")}) + {t(isRegenerate ? "summoning.regenerateWait" : "summoning.wait")} ({Math.floor(elapsed / 60)}:{String(elapsed % 60).padStart(2, "0")})
)} diff --git a/ui/web/src/pages/mcp/hooks/use-mcp.ts b/ui/web/src/pages/mcp/hooks/use-mcp.ts index 3af2e3f3..8e5247fe 100644 --- a/ui/web/src/pages/mcp/hooks/use-mcp.ts +++ b/ui/web/src/pages/mcp/hooks/use-mcp.ts @@ -12,7 +12,7 @@ export function useMCP() { const http = useHttp(); const queryClient = useQueryClient(); - const { data: servers = [], isLoading: loading } = useQuery({ + const { data: servers = [], isLoading: loading, isFetching: fetching } = useQuery({ queryKey: queryKeys.mcp.all, queryFn: async () => { const res = await http.get<{ servers: MCPServerData[] }>("/v1/mcp/servers"); @@ -157,6 +157,7 @@ export function useMCP() { return { servers, loading, + fetching, refresh: invalidate, createServer, updateServer, diff --git a/ui/web/src/pages/mcp/mcp-page.tsx b/ui/web/src/pages/mcp/mcp-page.tsx index f13878e1..86f1ef23 100644 --- a/ui/web/src/pages/mcp/mcp-page.tsx +++ b/ui/web/src/pages/mcp/mcp-page.tsx @@ -27,8 +27,8 @@ const transportBadge: Record