Add history import controls (#1053)

This commit is contained in:
ekko
2026-05-27 10:05:52 +08:00
committed by GitHub
parent 3cede6fb7f
commit a10e171082
16 changed files with 718 additions and 17 deletions
+20
View File
@@ -6,6 +6,7 @@ const getConversationMessagesPaginatedMock = vi.fn(async (ctx: any) => { ctx.bod
const listMock = vi.fn(async (ctx: any) => { ctx.body = { sessions: [{ id: 's1' }] } })
const listHermesSessionsMock = vi.fn(async (ctx: any) => { ctx.body = { sessions: [{ id: 'hermes-1' }] } })
const getHermesSessionMock = vi.fn(async (ctx: any) => { ctx.body = { session: { id: ctx.params.id } } })
const importHermesSessionMock = vi.fn(async (ctx: any) => { ctx.body = { session_id: ctx.params.id } })
const searchMock = vi.fn(async (ctx: any) => { ctx.body = { results: [{ id: 'search-1' }] } })
const getMock = vi.fn(async (ctx: any) => { ctx.body = { session: { id: ctx.params.id } } })
const removeMock = vi.fn(async (ctx: any) => { ctx.body = { ok: true } })
@@ -27,6 +28,7 @@ vi.mock('../../packages/server/src/controllers/hermes/sessions', () => ({
list: listMock,
listHermesSessions: listHermesSessionsMock,
getHermesSession: getHermesSessionMock,
importHermesSession: importHermesSessionMock,
search: searchMock,
get: getMock,
remove: removeMock,
@@ -49,6 +51,9 @@ describe('session routes', () => {
getConversationMessagesMock.mockClear()
getConversationMessagesPaginatedMock.mockClear()
listMock.mockClear()
listHermesSessionsMock.mockClear()
getHermesSessionMock.mockClear()
importHermesSessionMock.mockClear()
searchMock.mockClear()
getMock.mockClear()
removeMock.mockClear()
@@ -65,6 +70,9 @@ describe('session routes', () => {
'/api/hermes/sessions/conversations/:id/messages',
'/api/hermes/sessions/conversations/:id/messages/paginated',
'/api/hermes/sessions',
'/api/hermes/sessions/hermes',
'/api/hermes/sessions/hermes/:id',
'/api/hermes/sessions/hermes/:id/import',
'/api/hermes/search/sessions',
'/api/hermes/sessions/search',
'/api/hermes/sessions/usage',
@@ -118,6 +126,18 @@ describe('session routes', () => {
expect(detailCtx.body).toEqual({ session_id: 'child-session', messages: [] })
})
it('delegates Hermes session import to the controller', async () => {
const { sessionRoutes } = await import('../../packages/server/src/routes/hermes/sessions')
const layer = sessionRoutes.stack.find((entry: any) => entry.path === '/api/hermes/sessions/hermes/:id/import')
const handler = layer.stack[0]
const ctx: any = { params: { id: 'hermes-abc' }, query: {}, request: { body: { profile: 'default' } }, body: null }
await handler(ctx)
expect(importHermesSessionMock).toHaveBeenCalledWith(ctx)
expect(ctx.body).toEqual({ session_id: 'hermes-abc' })
})
it('delegates session export to the controller', async () => {
const { sessionRoutes } = await import('../../packages/server/src/routes/hermes/sessions')
const layer = sessionRoutes.stack.find((entry: any) => entry.path === '/api/hermes/sessions/:id/export')