diff --git a/src/renderer/src/api/agent.ts b/src/renderer/src/api/agent.ts index 21789d9499..fc03b53c31 100644 --- a/src/renderer/src/api/agent.ts +++ b/src/renderer/src/api/agent.ts @@ -1,12 +1,16 @@ +import { formatAgentServerError } from '@renderer/utils' import { AgentForm, + AgentServerErrorSchema, CreateAgentRequest, CreateAgentResponse, CreateAgentResponseSchema, + GetAgentResponse, + GetAgentResponseSchema, type ListAgentsResponse, ListAgentsResponseSchema } from '@types' -import { Axios, AxiosRequestConfig } from 'axios' +import { Axios, AxiosRequestConfig, isAxiosError } from 'axios' type ApiVersion = 'v1' @@ -52,4 +56,30 @@ export class AgentClient { throw new Error('Failed to create agent.', { cause: error }) } } + + public async getAgent(id: string): Promise { + const url = `/${this.apiVersion}/agents/${id}` + try { + const response = await this.axios.get(url) + const data = GetAgentResponseSchema.parse(response.data) + return data + } catch (error) { + throw new Error('Failed to get agent.', { cause: error }) + } + } + + public async deleteAgent(id: string): Promise { + const url = `/${this.apiVersion}/agents/${id}` + try { + await this.axios.delete(url) + } catch (error) { + if (isAxiosError(error)) { + const result = AgentServerErrorSchema.safeParse(error.response) + if (result.success) { + throw new Error(formatAgentServerError(result.data), { cause: error }) + } + } + throw new Error('Failed to delete agent.', { cause: error }) + } + } } diff --git a/src/renderer/src/utils/api.ts b/src/renderer/src/utils/api.ts index 5e9b8f91a6..dc5fe30fa0 100644 --- a/src/renderer/src/utils/api.ts +++ b/src/renderer/src/utils/api.ts @@ -1,3 +1,6 @@ +import { AgentServerError } from '@renderer/types' +import { t } from 'i18next' + /** * 格式化 API key 字符串。 * @@ -69,3 +72,6 @@ export function splitApiKeyString(keyStr: string): string[] { .map((k) => k.replace(/\\,/g, ',')) .filter((k) => k) } + +export const formatAgentServerError = (error: AgentServerError) => + `${t('common.error')}: ${error.code} ${error.message}`