From f1991b356be16cf4b7356091ed12c2f3894d2f17 Mon Sep 17 00:00:00 2001 From: icarus Date: Thu, 18 Sep 2025 14:20:48 +0800 Subject: [PATCH] feat(agent): add get and delete agent methods with error handling Implement getAgent and deleteAgent methods in AgentClient with proper error handling Add formatAgentServerError utility for consistent error messages --- src/renderer/src/api/agent.ts | 32 +++++++++++++++++++++++++++++++- src/renderer/src/utils/api.ts | 6 ++++++ 2 files changed, 37 insertions(+), 1 deletion(-) 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}`