|
1 | | -import { get } from "../../utils/request"; |
| 1 | +import { del, get, post, postUpload } from "../../utils/request"; |
| 2 | +import type { ConfigSkillFileContent, ConfigSkillFileEntry } from "../system"; |
2 | 3 |
|
3 | 4 | // Skill信息 |
4 | 5 | export interface SkillInfo { |
5 | 6 | name: string; |
6 | 7 | description: string; |
7 | 8 | } |
8 | 9 |
|
| 10 | +export interface SkillCatalogInstall { |
| 11 | + skill_id: string; |
| 12 | + sandbox_config_id: string; |
| 13 | + sandbox_config_name?: string; |
| 14 | + sandbox_type?: string; |
| 15 | + status: string; |
| 16 | + enabled: boolean; |
| 17 | + error?: string; |
| 18 | + updated_at: string; |
| 19 | +} |
| 20 | + |
| 21 | +export interface SkillCatalogItem { |
| 22 | + id: string; |
| 23 | + name: string; |
| 24 | + version?: string; |
| 25 | + description?: string; |
| 26 | + bundle_sha256?: string; |
| 27 | + created_at: string; |
| 28 | + updated_at: string; |
| 29 | + installations: SkillCatalogInstall[]; |
| 30 | +} |
| 31 | + |
| 32 | +export interface SkillCatalogRegisterResult { |
| 33 | + id: string; |
| 34 | + name: string; |
| 35 | + version?: string; |
| 36 | + description?: string; |
| 37 | +} |
| 38 | + |
9 | 39 | // 获取当前沙箱配置上可执行的 Skills;未传 sandboxConfigId 或 |
10 | 40 | // skills_available 为 false 时,前端应隐藏/禁用 Skills 配置 |
11 | 41 | export function listSkills(sandboxConfigId?: string) { |
12 | 42 | return get<{ data: SkillInfo[]; skills_available?: boolean }>('/api/v1/skills', { |
13 | 43 | params: sandboxConfigId ? { sandbox_config_id: sandboxConfigId } : {}, |
14 | 44 | }); |
15 | 45 | } |
| 46 | + |
| 47 | +export function listSkillCatalog() { |
| 48 | + return get<{ data: SkillCatalogItem[] }>('/api/v1/skills/catalog'); |
| 49 | +} |
| 50 | + |
| 51 | +export function registerSkillCatalogFromSource(source: string) { |
| 52 | + return post<{ data: SkillCatalogRegisterResult }>('/api/v1/skills/catalog', { source }, { |
| 53 | + timeout: 2 * 60 * 1000, |
| 54 | + }); |
| 55 | +} |
| 56 | + |
| 57 | +export function registerSkillCatalogFromFile( |
| 58 | + file: File, |
| 59 | + onProgress?: (percent: number) => void, |
| 60 | +) { |
| 61 | + const form = new FormData(); |
| 62 | + form.append('file', file); |
| 63 | + return postUpload('/api/v1/skills/catalog', form, (e: any) => { |
| 64 | + if (e.total) onProgress?.(Math.round((e.loaded * 100) / e.total)); |
| 65 | + }, { timeout: 5 * 60 * 1000 }) as Promise<{ data: SkillCatalogRegisterResult }>; |
| 66 | +} |
| 67 | + |
| 68 | +export function installSkillCatalog(catalogId: string, sandboxConfigIds: string[]) { |
| 69 | + return post<{ data: { installs: Record<string, string> } }>( |
| 70 | + `/api/v1/skills/catalog/${catalogId}/install`, |
| 71 | + { sandbox_config_ids: sandboxConfigIds }, |
| 72 | + ); |
| 73 | +} |
| 74 | + |
| 75 | +export function deleteSkillCatalog(catalogId: string) { |
| 76 | + return del(`/api/v1/skills/catalog/${catalogId}`); |
| 77 | +} |
| 78 | + |
| 79 | +export function listCatalogSkillFiles(catalogId: string) { |
| 80 | + return get<{ data: ConfigSkillFileEntry[] }>(`/api/v1/skills/catalog/${catalogId}/files`); |
| 81 | +} |
| 82 | + |
| 83 | +export function getCatalogSkillFile(catalogId: string, path: string) { |
| 84 | + return get<{ data: ConfigSkillFileContent }>(`/api/v1/skills/catalog/${catalogId}/files/content`, { |
| 85 | + params: { path }, |
| 86 | + }); |
| 87 | +} |
0 commit comments