Files
invyone/frontend/lib/api/aiAgent.ts
T
Johngreen 229b09b895
Build & Deploy to K8s / build-and-deploy (push) Failing after 7m14s
AI관리 시스템 교체: ai-assistant 제거 + 멀티 에이전트 오케스트레이션 이식
Epic A: ai-assistant 디렉토리/Spring 프록시/프론트엔드 메뉴 완전 제거
Epic B: Flyway 도입 + 13 신규 테이블 마이그레이션
Epic C: 9 서비스 + 7 컨트롤러 + LlmClient 추상화 (Java 21/Spring/MyBatis)
Epic D: ApiKey 인증 필터 (sk-pipe-* 키 SHA-256 검증)
Epic E: OpenClaw 외부 엔진 docker-compose 통합
Epic F: Next.js 7 페이지 + lib/api/aiAgent.ts 이식
Epic G: 화면 그룹/메뉴 등록 마이그레이션 (V014)
Epic H: 통합 빌드 검증

- DB: invyone PostgreSQL에 ai_agents/ai_agent_groups/... 13 테이블 + Quartz
- 멀티테넌시: 모든 테이블에 company_code 강제 필터
- LLM: Anthropic/OpenAI/Google/Ollama 직접 클라이언트 (Spring AI 미도입)
- 스케줄러: Quartz JDBC JobStore (cron 기반)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 22:49:43 +09:00

82 lines
3.6 KiB
TypeScript

import { apiClient } from "./client";
const BASE = "/ai-agents";
export const aiAgentApi = {
// 에이전트 CRUD
list: (params?: { status?: string; search?: string }) =>
apiClient.get(BASE, { params }).then((r) => r.data),
getById: (id: number) =>
apiClient.get(`${BASE}/${id}`).then((r) => r.data),
create: (data: any) =>
apiClient.post(BASE, data).then((r) => r.data),
update: (id: number, data: any) =>
apiClient.put(`${BASE}/${id}`, data).then((r) => r.data),
delete: (id: number) =>
apiClient.delete(`${BASE}/${id}`).then((r) => r.data),
// API 키 관리
listKeys: () =>
apiClient.get(`${BASE}/keys/list`).then((r) => r.data),
createKey: (data: { name: string; agent_id?: number; rate_limit?: number }) =>
apiClient.post(`${BASE}/keys`, data).then((r) => r.data),
revokeKey: (id: number) =>
apiClient.delete(`${BASE}/keys/${id}`).then((r) => r.data),
// LLM 프로바이더
listProviders: () =>
apiClient.get(`${BASE}/providers/list`).then((r) => r.data),
createProvider: (data: any) =>
apiClient.post(`${BASE}/providers`, data).then((r) => r.data),
updateProvider: (id: number, data: any) =>
apiClient.put(`${BASE}/providers/${id}`, data).then((r) => r.data),
deleteProvider: (id: number) =>
apiClient.delete(`${BASE}/providers/${id}`).then((r) => r.data),
// 대화 모니터링
listConversations: (params?: { page?: number; limit?: number; agent_id?: number }) =>
apiClient.get(`${BASE}/conversations/list`, { params }).then((r) => r.data),
getConversation: (id: number) =>
apiClient.get(`${BASE}/conversations/${id}`).then((r) => r.data),
// 사용량
usageSummary: () =>
apiClient.get(`${BASE}/usage/summary`).then((r) => r.data),
usageLogs: (params?: { page?: number; limit?: number }) =>
apiClient.get(`${BASE}/usage/logs`, { params }).then((r) => r.data),
usageDaily: (days?: number) =>
apiClient.get(`${BASE}/usage/daily`, { params: { days } }).then((r) => r.data),
// 멀티 에이전트 그룹
listGroups: () =>
apiClient.get("/ai-agent-groups").then((r) => r.data),
getGroup: (id: number) =>
apiClient.get(`/ai-agent-groups/${id}`).then((r) => r.data),
createGroup: (data: { name: string; description?: string }) =>
apiClient.post("/ai-agent-groups", data).then((r) => r.data),
updateGroup: (id: number, data: any) =>
apiClient.put(`/ai-agent-groups/${id}`, data).then((r) => r.data),
deleteGroup: (id: number) =>
apiClient.delete(`/ai-agent-groups/${id}`).then((r) => r.data),
addGroupMember: (groupId: number, data: any) =>
apiClient.post(`/ai-agent-groups/${groupId}/members`, data).then((r) => r.data),
updateGroupMember: (memberId: number, data: any) =>
apiClient.put(`/ai-agent-groups/members/${memberId}`, data).then((r) => r.data),
removeGroupMember: (memberId: number) =>
apiClient.delete(`/ai-agent-groups/members/${memberId}`).then((r) => r.data),
getAvailableConnectors: () =>
apiClient.get("/ai-agent-groups/connectors").then((r) => r.data),
// 지식 파일 라이브러리
listKnowledge: (params?: { category?: string; search?: string }) =>
apiClient.get("/ai-knowledge", { params }).then((r) => r.data),
getKnowledge: (id: number) =>
apiClient.get(`/ai-knowledge/${id}`).then((r) => r.data),
createKnowledge: (data: { name: string; file_name: string; category: string; description?: string; content: string }) =>
apiClient.post("/ai-knowledge", data).then((r) => r.data),
updateKnowledge: (id: number, data: any) =>
apiClient.put(`/ai-knowledge/${id}`, data).then((r) => r.data),
deleteKnowledge: (id: number) =>
apiClient.delete(`/ai-knowledge/${id}`).then((r) => r.data),
};