From 569a29500f6ce8c28539c4a3b1680c7faa4baea7 Mon Sep 17 00:00:00 2001 From: balibabu Date: Fri, 31 Jul 2026 11:23:12 +0800 Subject: [PATCH] Fix: The save interface is continuously called without any operation being performed on the agent page. (#17576) --- api/apps/restful_apis/agent_api.py | 3 ++- internal/handler/agent.go | 9 ++++++++- .../test_agent_app/test_agents_webhook_unit.py | 2 +- web/src/hooks/use-agent-request.ts | 7 +++++-- web/src/pages/agent/hooks/use-save-graph.ts | 11 +++++++---- .../dataset/compilation/wiki-left-panel/index.tsx | 1 + 6 files changed, 24 insertions(+), 9 deletions(-) diff --git a/api/apps/restful_apis/agent_api.py b/api/apps/restful_apis/agent_api.py index 40ee2c6ee0..9bb12176e3 100644 --- a/api/apps/restful_apis/agent_api.py +++ b/api/apps/restful_apis/agent_api.py @@ -1153,7 +1153,8 @@ async def update_agent(agent_id, tenant_id): if not replica_ok: return get_data_error_result(message="agent saved, but replica sync failed.") - return get_json_result(data=True) + _, updated_agent = UserCanvasService.get_by_id(agent_id) + return get_json_result(data={"update_time": updated_agent.update_time}) @manager.route("/agents//reset", methods=["POST"]) # noqa: F821 diff --git a/internal/handler/agent.go b/internal/handler/agent.go index f2e3552937..9d1a51d0a4 100644 --- a/internal/handler/agent.go +++ b/internal/handler/agent.go @@ -341,7 +341,14 @@ func (h *AgentHandler) UpdateAgent(c *gin.Context) { common.ResponseWithCodeData(c, ec, nil, em) return } - common.SuccessWithData(c, true, "success") + canvas, err := h.agentService.GetAgent(c.Request.Context(), user.ID, canvasID) + if err != nil || canvas == nil { + common.SuccessWithData(c, map[string]interface{}{}, "success") + return + } + common.SuccessWithData(c, map[string]interface{}{ + "update_time": canvas.UpdateTime, + }, "success") } // DeleteAgent removes the canvas and cascades to its versions. diff --git a/test/testcases/test_web_api/test_agent_app/test_agents_webhook_unit.py b/test/testcases/test_web_api/test_agent_app/test_agents_webhook_unit.py index 66fc10a492..ae11b029bb 100644 --- a/test/testcases/test_web_api/test_agent_app/test_agents_webhook_unit.py +++ b/test/testcases/test_web_api/test_agent_app/test_agents_webhook_unit.py @@ -590,7 +590,7 @@ def test_agents_crud_unit_branches(monkeypatch): monkeypatch.setattr( module.UserCanvasService, "get_by_id", - lambda _id: (True, SimpleNamespace(title="agent-1", canvas_category=module.CanvasCategory.Agent)), + lambda _id: (True, SimpleNamespace(title="agent-1", canvas_category=module.CanvasCategory.Agent, update_time=1234567890)), ) monkeypatch.setattr( module.UserCanvasService, diff --git a/web/src/hooks/use-agent-request.ts b/web/src/hooks/use-agent-request.ts index 435c1dc65e..7903bea25d 100644 --- a/web/src/hooks/use-agent-request.ts +++ b/web/src/hooks/use-agent-request.ts @@ -444,7 +444,10 @@ export const useResetAgent = () => { return { data, loading, resetAgent: mutateAsync }; }; -export const useSetAgent = (showMessage: boolean = true) => { +export const useSetAgent = ( + showMessage: boolean = true, + skipInvalidation: boolean = false, +) => { const { id } = useParams(); const queryClient = useQueryClient(); const { @@ -483,7 +486,7 @@ export const useSetAgent = (showMessage: boolean = true) => { queryClient.invalidateQueries({ queryKey: [AgentApiAction.FetchAgentListByPage], }); - if (agentId) { + if (agentId && !skipInvalidation) { queryClient.invalidateQueries({ queryKey: [AgentApiAction.FetchAgentDetail, agentId], }); diff --git a/web/src/pages/agent/hooks/use-save-graph.ts b/web/src/pages/agent/hooks/use-save-graph.ts index fc16659a5c..d052a39850 100644 --- a/web/src/pages/agent/hooks/use-save-graph.ts +++ b/web/src/pages/agent/hooks/use-save-graph.ts @@ -14,9 +14,12 @@ import { useParams } from 'react-router'; import useGraphStore from '../store'; import { useBuildDslData } from './use-build-dsl'; -export const useSaveGraph = (showMessage: boolean = true) => { +export const useSaveGraph = ( + showMessage: boolean = true, + skipInvalidation: boolean = false, +) => { const { data } = useFetchAgent(); - const { setAgent, loading } = useSetAgent(showMessage); + const { setAgent, loading } = useSetAgent(showMessage, skipInvalidation); const { id } = useParams(); const { buildDslData } = useBuildDslData(); @@ -72,7 +75,7 @@ export const useWatchAgentChange = (chatDrawerVisible: boolean) => { const [time, setTime] = useState(); const nodes = useGraphStore((state) => state.nodes); const edges = useGraphStore((state) => state.edges); - const { saveGraph } = useSaveGraph(false); + const { saveGraph } = useSaveGraph(false, true); const { data: flowDetail } = useFetchAgent(); const setSaveTime = useCallback((updateTime: number) => { @@ -86,7 +89,7 @@ export const useWatchAgentChange = (chatDrawerVisible: boolean) => { const saveAgent = useCallback(async () => { if (!chatDrawerVisible) { const ret = await saveGraph(); - setSaveTime(ret.data.update_time); + setSaveTime(ret.data.update_time ?? Date.now()); } }, [chatDrawerVisible, saveGraph, setSaveTime]); diff --git a/web/src/pages/dataset/compilation/wiki-left-panel/index.tsx b/web/src/pages/dataset/compilation/wiki-left-panel/index.tsx index 38572e6d4d..e1256f5c7c 100644 --- a/web/src/pages/dataset/compilation/wiki-left-panel/index.tsx +++ b/web/src/pages/dataset/compilation/wiki-left-panel/index.tsx @@ -94,6 +94,7 @@ export function WikiLeftPanel({