diff --git a/src/main/services/agents/services/claudecode/transform.ts b/src/main/services/agents/services/claudecode/transform.ts index 33d6e72226..34a3de17e0 100644 --- a/src/main/services/agents/services/claudecode/transform.ts +++ b/src/main/services/agents/services/claudecode/transform.ts @@ -118,7 +118,7 @@ function handleUserOrAssistantMessage(message: Extract void } interface TriggerProps extends BaseProps { @@ -73,7 +74,14 @@ type Props = TriggerProps | StateProps * @param onClose - Optional callback when modal closes. From useDisclosure. * @returns Modal component for agent creation/editing */ -export const SessionModal: React.FC = ({ agentId, session, trigger, isOpen: _isOpen, onClose: _onClose }) => { +export const SessionModal: React.FC = ({ + agentId, + session, + trigger, + isOpen: _isOpen, + onClose: _onClose, + onSessionCreated +}) => { const { isOpen, onClose, onOpen } = useDisclosure({ isOpen: _isOpen, onClose: _onClose }) const { t } = useTranslation() const loadingRef = useRef(false) @@ -161,38 +169,43 @@ export const SessionModal: React.FC = ({ agentId, session, trigger, isOpe return } - if (isEditing(session)) { - if (!session) { - throw new Error('Agent is required for editing mode') + try { + if (isEditing(session)) { + if (!session) { + throw new Error('Agent is required for editing mode') + } + + const updatePayload = { + id: session.id, + name: form.name, + description: form.description, + instructions: form.instructions, + model: form.model, + accessible_paths: [...form.accessible_paths] + } satisfies UpdateSessionForm + + updateSession(updatePayload) + logger.debug('Updated agent', updatePayload) + } else { + const newSession = { + name: form.name, + description: form.description, + instructions: form.instructions, + model: form.model, + accessible_paths: [...form.accessible_paths] + } satisfies CreateSessionForm + const createdSession = await createSession(newSession) + if (createdSession) { + onSessionCreated?.(createdSession) + } + logger.debug('Added agent', newSession) } - const updatePayload = { - id: session.id, - name: form.name, - description: form.description, - instructions: form.instructions, - model: form.model, - accessible_paths: [...form.accessible_paths] - } satisfies UpdateSessionForm - - updateSession(updatePayload) - logger.debug('Updated agent', updatePayload) - } else { - const newSession = { - name: form.name, - description: form.description, - instructions: form.instructions, - model: form.model, - accessible_paths: [...form.accessible_paths] - } satisfies CreateSessionForm - createSession(newSession) - logger.debug('Added agent', newSession) + // setTimeoutTimer('onCreateAgent', () => EventEmitter.emit(EVENT_NAMES.SHOW_ASSISTANTS), 0) + onClose() + } finally { + loadingRef.current = false } - - loadingRef.current = false - - // setTimeoutTimer('onCreateAgent', () => EventEmitter.emit(EVENT_NAMES.SHOW_ASSISTANTS), 0) - onClose() }, [ form.model, @@ -202,6 +215,7 @@ export const SessionModal: React.FC = ({ agentId, session, trigger, isOpe form.accessible_paths, session, onClose, + onSessionCreated, t, updateSession, createSession diff --git a/src/renderer/src/hooks/agents/useSessions.ts b/src/renderer/src/hooks/agents/useSessions.ts index 1ed40d2f1b..9e83ac5afc 100644 --- a/src/renderer/src/hooks/agents/useSessions.ts +++ b/src/renderer/src/hooks/agents/useSessions.ts @@ -21,9 +21,11 @@ export const useSessions = (agentId: string) => { async (form: CreateSessionForm) => { try { const result = await client.createSession(agentId, form) - mutate((prev) => [...(prev ?? []), result]) + await mutate((prev) => [...(prev ?? []), result], { revalidate: false }) + return result } catch (error) { window.toast.error(formatErrorMessageWithPrefix(error, t('agent.session.create.error.failed'))) + return undefined } }, [agentId, client, mutate, t] diff --git a/src/renderer/src/pages/home/Tabs/components/Sessions.tsx b/src/renderer/src/pages/home/Tabs/components/Sessions.tsx index 2964e761e6..a8ccab7d00 100644 --- a/src/renderer/src/pages/home/Tabs/components/Sessions.tsx +++ b/src/renderer/src/pages/home/Tabs/components/Sessions.tsx @@ -66,6 +66,7 @@ const Sessions: React.FC = ({ agentId }) => { transition={{ duration: 0.2, delay: 0.1 }}> setActiveSessionId(agentId, created.id)} trigger={{ content: (