Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions frontend/app/[locale]/agents/AgentVersionCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ export function VersionCardItem({
...agentResult.data,
permission: permissionFromList,
});
store.triggerForceRefresh();
}
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export default function AgentGenerateDetail({
const isCreatingMode = useAgentConfigStore((state) => state.isCreatingMode);
const editedAgent = useAgentConfigStore((state) => state.editedAgent);
const currentAgentId = useAgentConfigStore((state) => state.currentAgentId);
const forceRefreshKey = useAgentConfigStore((state) => state.forceRefreshKey);
const updateBusinessInfo = useAgentConfigStore((state) => state.updateBusinessInfo);
const updateProfileInfo = useAgentConfigStore((state) => state.updateProfileInfo);

Expand Down Expand Up @@ -309,7 +310,7 @@ export default function AgentGenerateDetail({
});
}

}, [currentAgentId, defaultLlmModel?.id, isCreatingMode, editedAgent]);
}, [currentAgentId, defaultLlmModel?.id, isCreatingMode, forceRefreshKey]);

// Default to selecting all groups when creating a new agent.
// Only applies when groups are loaded and no group is selected yet.
Expand Down
19 changes: 19 additions & 0 deletions frontend/stores/agentConfigStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ interface AgentConfigStoreState {
editedAgent: EditableAgent;
hasUnsavedChanges: boolean;
isCreatingMode: boolean; // true when user is in create mode, even if currentAgentId is null
/**
* Incremented counter to signal downstream UI to force-refresh.
* Components that depend on this key will re-initialize when it changes.
*/
forceRefreshKey: number;

/**
* Set current agent (null = create mode).
Expand All @@ -68,6 +73,12 @@ interface AgentConfigStoreState {
*/
enterCreateMode: () => void;

/**
* Trigger a UI force-refresh by incrementing forceRefreshKey.
* Call this after operations like rollback that need to force-reload form state.
*/
triggerForceRefresh: () => void;


/**
* Update tools (selected tools).
Expand Down Expand Up @@ -353,6 +364,7 @@ export const useAgentConfigStore = create<AgentConfigStoreState>((set, get) => (
editedAgent: { ...emptyEditableAgent },
hasUnsavedChanges: false,
isCreatingMode: false,
forceRefreshKey: 0,

setCurrentAgent: (agent) => {
const baselineAgent = agent ? toEditable(agent) : null;
Expand All @@ -364,6 +376,7 @@ export const useAgentConfigStore = create<AgentConfigStoreState>((set, get) => (
editedAgent,
hasUnsavedChanges: false,
isCreatingMode: false, // Exit create mode when selecting an agent
forceRefreshKey: 0,
});
},

Expand All @@ -375,9 +388,14 @@ export const useAgentConfigStore = create<AgentConfigStoreState>((set, get) => (
editedAgent: { ...emptyEditableAgent },
hasUnsavedChanges: false,
isCreatingMode: true,
forceRefreshKey: 0,
});
},

triggerForceRefresh: () => {
set((state) => ({ forceRefreshKey: state.forceRefreshKey + 1 }));
},

updateTools: (tools) => {
set((state) => {
const editedAgent = { ...state.editedAgent, tools: [...tools] };
Expand Down Expand Up @@ -494,6 +512,7 @@ export const useAgentConfigStore = create<AgentConfigStoreState>((set, get) => (
editedAgent: { ...emptyEditableAgent },
hasUnsavedChanges: false,
isCreatingMode: false,
forceRefreshKey: 0,
});
},

Expand Down