import { request, getBaseUrlValue, getApiKey } from '../client' export interface HermesProfile { name: string active: boolean model: string gateway: string alias: string } export interface HermesProfileDetail { name: string path: string model: string provider: string gateway: string skills: number hasEnv: boolean hasSoulMd: boolean } export async function fetchProfiles(): Promise { const res = await request<{ profiles: HermesProfile[] }>('/api/hermes/profiles') return res.profiles } export async function fetchProfileDetail(name: string): Promise { const res = await request<{ profile: HermesProfileDetail }>(`/api/hermes/profiles/${encodeURIComponent(name)}`) return res.profile } export async function createProfile(name: string, clone?: boolean): Promise { try { await request('/api/hermes/profiles', { method: 'POST', body: JSON.stringify({ name, clone }), }) return true } catch { return false } } export async function deleteProfile(name: string): Promise { try { await request(`/api/hermes/profiles/${encodeURIComponent(name)}`, { method: 'DELETE' }) return true } catch { return false } } export async function renameProfile(name: string, newName: string): Promise { try { await request(`/api/hermes/profiles/${encodeURIComponent(name)}/rename`, { method: 'POST', body: JSON.stringify({ new_name: newName }), }) return true } catch { return false } } export async function switchProfile(name: string): Promise { try { await request('/api/hermes/profiles/active', { method: 'PUT', body: JSON.stringify({ name }), }) return true } catch { return false } } export async function exportProfile(name: string): Promise { try { const baseUrl = getBaseUrlValue() const token = getApiKey() const headers: Record = {} if (token) headers['Authorization'] = `Bearer ${token}` const res = await fetch(`${baseUrl}/api/hermes/profiles/${encodeURIComponent(name)}/export`, { method: 'POST', headers, }) if (!res.ok) throw new Error() const blob = await res.blob() const url = URL.createObjectURL(blob) const a = document.createElement('a') a.href = url a.download = `hermes-profile-${name}.tar.gz` a.click() URL.revokeObjectURL(url) return true } catch { return false } } export async function importProfile(file: File): Promise { try { const baseUrl = getBaseUrlValue() const token = getApiKey() const headers: Record = {} if (token) headers['Authorization'] = `Bearer ${token}` const formData = new FormData() formData.append('file', file) const res = await fetch(`${baseUrl}/api/hermes/profiles/import`, { method: 'POST', headers, body: formData, }) return res.ok } catch { return false } }