mirror of
https://github.com/EKKOLearnAI/hermes-web-ui.git
synced 2026-06-02 01:10:55 +00:00
ee9f56dfbd
- Add Koa2 BFF layer for API proxy, file upload, session management - Auto-check and enable api_server in ~/.hermes/config.yaml on startup - Integrate sessions with Hermes CLI (list, get, delete) - Add Logs page with level filtering, log file selection, and search - Add CLI commands: start/stop/restart/status for daemon management - Unify package.json for frontend and server dependencies - Default port changed to 8648 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
62 lines
1.5 KiB
TypeScript
62 lines
1.5 KiB
TypeScript
import { request } from './client'
|
|
|
|
export interface SessionSummary {
|
|
id: string
|
|
source: string
|
|
model: string
|
|
title: string | null
|
|
started_at: number
|
|
ended_at: number | null
|
|
message_count: number
|
|
tool_call_count: number
|
|
input_tokens: number
|
|
output_tokens: number
|
|
billing_provider: string | null
|
|
estimated_cost_usd: number
|
|
}
|
|
|
|
export interface SessionDetail extends SessionSummary {
|
|
messages: HermesMessage[]
|
|
}
|
|
|
|
export interface HermesMessage {
|
|
id: number
|
|
session_id: string
|
|
role: 'user' | 'assistant' | 'system' | 'tool'
|
|
content: string
|
|
tool_call_id: string | null
|
|
tool_calls: any[] | null
|
|
tool_name: string | null
|
|
timestamp: number
|
|
token_count: number | null
|
|
finish_reason: string | null
|
|
reasoning: string | null
|
|
}
|
|
|
|
export async function fetchSessions(source?: string, limit?: number): Promise<SessionSummary[]> {
|
|
const params = new URLSearchParams()
|
|
if (source) params.set('source', source)
|
|
if (limit) params.set('limit', String(limit))
|
|
const query = params.toString()
|
|
const res = await request<{ sessions: SessionSummary[] }>(`/api/sessions${query ? `?${query}` : ''}`)
|
|
return res.sessions
|
|
}
|
|
|
|
export async function fetchSession(id: string): Promise<SessionDetail | null> {
|
|
try {
|
|
const res = await request<{ session: SessionDetail }>(`/api/sessions/${id}`)
|
|
return res.session
|
|
} catch {
|
|
return null
|
|
}
|
|
}
|
|
|
|
export async function deleteSession(id: string): Promise<boolean> {
|
|
try {
|
|
await request(`/api/sessions/${id}`, { method: 'DELETE' })
|
|
return true
|
|
} catch {
|
|
return false
|
|
}
|
|
}
|