diff --git a/src/renderer/src/api/agent.ts b/src/renderer/src/api/agent.ts index f9563d5faf..99b051d9d0 100644 --- a/src/renderer/src/api/agent.ts +++ b/src/renderer/src/api/agent.ts @@ -6,6 +6,10 @@ import { CreateAgentRequest, CreateAgentResponse, CreateAgentResponseSchema, + CreateSessionForm, + CreateSessionRequest, + CreateSessionResponse, + CreateSessionResponseSchema, GetAgentResponse, GetAgentResponseSchema, ListAgentSessionsResponse, @@ -138,4 +142,16 @@ export class AgentApiClient { throw processError(error, 'Failed to list sessions.') } } + + public async createSession(agentId: string, session: CreateSessionForm): Promise { + const url = this.getSessionPaths(agentId).base + try { + const payload = session satisfies CreateSessionRequest + const response = await this.axios.post(url, payload) + const data = CreateSessionResponseSchema.parse(response.data) + return data + } catch (error) { + throw processError(error, 'Failed to add session.') + } + } } diff --git a/src/renderer/src/hooks/agents/useSessions.ts b/src/renderer/src/hooks/agents/useSessions.ts index fffcc1a253..5791ced138 100644 --- a/src/renderer/src/hooks/agents/useSessions.ts +++ b/src/renderer/src/hooks/agents/useSessions.ts @@ -1,20 +1,36 @@ -import { AgentEntity } from '@renderer/types' +import { AgentEntity, CreateSessionForm } from '@renderer/types' +import { useCallback } from 'react' +import { useTranslation } from 'react-i18next' import useSWR from 'swr' import { useAgentClient } from './useAgentClient' export const useSessions = (agent: AgentEntity) => { + const { t } = useTranslation() const client = useAgentClient() const key = client.agentPaths.base const fetcher = async () => { const data = await client.listSessions(agent.id) return data.data } - const { data, error, isLoading } = useSWR(key, fetcher) + const { data, error, isLoading, mutate } = useSWR(key, fetcher) + + const createSession = useCallback( + async (form: CreateSessionForm) => { + try { + const result = await client.createSession(agent.id, form) + mutate((prev) => [...(prev ?? []), result]) + } catch (error) { + window.toast.error(t('agent.session.create.error.failed')) + } + }, + [agent.id, client, mutate, t] + ) return { sessions: data ?? [], error, - isLoading + isLoading, + createSession } }