import { api } from './http'; export type KnowledgeStatus = 'pending' | 'indexing' | 'ready' | 'failed'; export interface KnowledgeFile { id: string; originalName: string; filename: string; size: number; mime: string; status: KnowledgeStatus; error?: string; chunkCount: number; createdAt: number; } export type SkillType = 'prompt' | 'http' | 'js'; export interface SkillBrief { id: string; name: string; filename: string; description?: string; type: SkillType; enabled: number; createdAt: number; } export interface SkillDetail extends SkillBrief { content: string; parameters: string; handler: string; config: string; } export interface ExternalToolApi { id?: string; name: string; description: string; method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'; path: string; headers?: Record | null; parametersSchema: Record; createdAt?: number; } export interface ExternalToolPluginPayload { name: string; description?: string; baseUrl: string; authType: 'none' | 'bearer' | 'basic' | 'apiKey'; authConfig: Record; apis: ExternalToolApi[]; } export interface ExternalToolPlugin extends ExternalToolPluginPayload { id: string; enabled: number; createdAt: number; } export interface Agent { id: string; name: string; description: string; avatar: string; prompt: string; model: string; temperature: number; owner_id?: string | null; team_id?: string | null; visibility?: 'private' | 'team' | 'public'; fork_count?: number; forked_from?: string | null; created_at: number; updated_at: number; knowledge?: KnowledgeFile[]; skills?: SkillBrief[]; plugins?: ExternalToolPlugin[]; _access?: 'owner' | 'team' | 'view' | 'none'; } export const AgentAPI = { list: (phone: string) => api.post('/agents', { phone }).then((r) => r.data), mine: (phone: string) => api.post('/agents/mine', { phone }).then((r) => r.data), detail: (id: string) => api.get(`/agents/${id}`).then((r) => r.data), create: (payload: Partial) => api.post('/agents/create', payload).then((r) => r.data), update: (id: string, payload: Partial) => api.put(`/agents/${id}`, payload).then((r) => r.data), remove: (id: string) => api.delete(`/agents/${id}`).then((r) => r.data), updateAvatar: (id: string, avatar: string) => api.patch(`/agents/${id}/avatar`, { avatar }).then((r) => r.data), uploadKnowledge: (id: string, files: File[]) => { const fd = new FormData(); files.forEach((f) => fd.append('files', f)); return api.post(`/agents/${id}/knowledge`, fd).then((r) => r.data); }, reindexKnowledge: (agentId: string, fileId: string) => api.post(`/agents/${agentId}/knowledge/${fileId}/reindex`).then((r) => r.data), deleteKnowledge: (agentId: string, fileId: string) => api.delete(`/agents/${agentId}/knowledge/${fileId}`).then((r) => r.data), getKnowledgeStatus: (agentId: string) => api.get<{ files: KnowledgeFile[] }>(`/agents/${agentId}/knowledge/status`).then((r) => r.data), uploadSkills: (id: string, files: File[]) => { const fd = new FormData(); files.forEach((f) => fd.append('files', f)); return api.post(`/agents/${id}/skills`, fd).then((r) => r.data); }, createSkill: (id: string, payload: { name: string; content: string }) => api.post(`/agents/${id}/skills/manual`, payload).then((r) => r.data), getSkill: (agentId: string, skillId: string) => api.get(`/agents/${agentId}/skills/${skillId}`).then((r) => r.data), updateSkill: (agentId: string, skillId: string, payload: { content?: string; enabled?: boolean }) => api.put(`/agents/${agentId}/skills/${skillId}`, payload).then((r) => r.data), deleteSkill: (agentId: string, skillId: string) => api.delete(`/agents/${agentId}/skills/${skillId}`).then((r) => r.data), bindPlugin: (agentId: string, payload: ExternalToolPluginPayload) => api.post(`/agents/${agentId}/plugins`, payload).then((r) => r.data), updatePlugin: (agentId: string, pluginId: string, payload: ExternalToolPluginPayload) => api.put(`/agents/${agentId}/plugins/${pluginId}`, payload).then((r) => r.data), deletePlugin: (agentId: string, pluginId: string) => api.delete(`/agents/${agentId}/plugins/${pluginId}`).then((r) => r.data) };