aura-web/src/api/agents.ts

123 lines
4.3 KiB
TypeScript

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<string, string> | null;
parametersSchema: Record<string, unknown>;
createdAt?: number;
}
export interface ExternalToolPluginPayload {
name: string;
description?: string;
baseUrl: string;
authType: 'none' | 'bearer' | 'basic' | 'apiKey';
authConfig: Record<string, unknown>;
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<Agent[]>('/agents', { phone }).then((r) => r.data),
mine: (phone: string) => api.post<Agent[]>('/agents/mine', { phone }).then((r) => r.data),
detail: (id: string) => api.get<Agent>(`/agents/${id}`).then((r) => r.data),
create: (payload: Partial<Agent>) => api.post<Agent>('/agents/create', payload).then((r) => r.data),
update: (id: string, payload: Partial<Agent>) => api.put<Agent>(`/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<Agent>(`/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<SkillDetail>(`/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)
};