2026-04-11 21:33:04 +08:00
|
|
|
import Router from '@koa/router'
|
2026-04-17 16:48:24 +08:00
|
|
|
import * as hermesCli from '../../services/hermes/hermes-cli'
|
2026-04-11 21:33:04 +08:00
|
|
|
|
|
|
|
|
export const sessionRoutes = new Router()
|
|
|
|
|
|
|
|
|
|
// List sessions from Hermes
|
2026-04-16 08:38:18 +08:00
|
|
|
sessionRoutes.get('/api/hermes/sessions', async (ctx) => {
|
2026-04-11 21:33:04 +08:00
|
|
|
const source = (ctx.query.source as string) || undefined
|
|
|
|
|
const limit = ctx.query.limit ? parseInt(ctx.query.limit as string, 10) : undefined
|
|
|
|
|
const sessions = await hermesCli.listSessions(source, limit)
|
|
|
|
|
ctx.body = { sessions }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// Get single session with messages
|
2026-04-16 08:38:18 +08:00
|
|
|
sessionRoutes.get('/api/hermes/sessions/:id', async (ctx) => {
|
2026-04-11 21:33:04 +08:00
|
|
|
const session = await hermesCli.getSession(ctx.params.id)
|
|
|
|
|
if (!session) {
|
|
|
|
|
ctx.status = 404
|
|
|
|
|
ctx.body = { error: 'Session not found' }
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ctx.body = { session }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// Delete session from Hermes
|
2026-04-16 08:38:18 +08:00
|
|
|
sessionRoutes.delete('/api/hermes/sessions/:id', async (ctx) => {
|
2026-04-11 21:33:04 +08:00
|
|
|
const ok = await hermesCli.deleteSession(ctx.params.id)
|
|
|
|
|
if (!ok) {
|
|
|
|
|
ctx.status = 500
|
|
|
|
|
ctx.body = { error: 'Failed to delete session' }
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ctx.body = { ok: true }
|
|
|
|
|
})
|
2026-04-12 23:59:18 +08:00
|
|
|
|
|
|
|
|
// Rename session
|
2026-04-16 08:38:18 +08:00
|
|
|
sessionRoutes.post('/api/hermes/sessions/:id/rename', async (ctx) => {
|
2026-04-12 23:59:18 +08:00
|
|
|
const { title } = ctx.request.body as { title?: string }
|
|
|
|
|
if (!title || typeof title !== 'string') {
|
|
|
|
|
ctx.status = 400
|
|
|
|
|
ctx.body = { error: 'title is required' }
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
const ok = await hermesCli.renameSession(ctx.params.id, title.trim())
|
|
|
|
|
if (!ok) {
|
|
|
|
|
ctx.status = 500
|
|
|
|
|
ctx.body = { error: 'Failed to rename session' }
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
ctx.body = { ok: true }
|
|
|
|
|
})
|