feat: add endpoint to fetch indexed session metadata and implement corresponding service method

This commit is contained in:
Haileyesus
2026-04-08 16:51:23 +03:00
parent db39eda18a
commit 150642097a
3 changed files with 65 additions and 0 deletions

View File

@@ -492,6 +492,18 @@ router.get(
}),
);
/**
* Returns one DB-indexed session metadata row.
*/
router.get(
'/sessions/:sessionId',
asyncHandler(async (req: Request, res: Response) => {
const sessionId = readPathParam(req.params.sessionId, 'sessionId');
const session = llmSessionsService.getIndexedSession(sessionId);
res.json(createApiSuccessResponse({ session }));
}),
);
/**
* Triggers provider disk scans and refreshes the shared sessions table.
*/

View File

@@ -106,6 +106,21 @@ export const llmSessionsService = {
return allSessions.filter((session) => session.provider === provider);
},
/**
* Reads one indexed session metadata row.
*/
getIndexedSession(sessionId: string) {
const session = sessionsDb.getSessionById(sessionId);
if (!session) {
throw new AppError(`Session "${sessionId}" was not found.`, {
code: 'SESSION_NOT_FOUND',
statusCode: 404,
});
}
return session;
},
/**
* Runs all provider indexers and updates `scan_state.last_scanned_at`.
*/

View File

@@ -131,6 +131,44 @@ test('llmSessionsService.updateSessionCustomName validates existence before upda
}
});
// This test covers fetching one indexed DB session metadata row from getSessionById.
test('llmSessionsService.getIndexedSession returns DB session metadata', { concurrency: false }, () => {
const restoreGetById = patchMethod(sessionsDb, 'getSessionById', (sessionId: string) => (
sessionId === 'known-session'
? {
session_id: 'known-session',
provider: 'claude',
workspace_path: '/tmp/workspace',
jsonl_path: '/tmp/workspace/session.jsonl',
created_at: '2026-04-01T00:00:00.000Z',
updated_at: '2026-04-02T00:00:00.000Z',
}
: null
));
try {
const session = llmSessionsService.getIndexedSession('known-session');
assert.deepEqual(session, {
session_id: 'known-session',
provider: 'claude',
workspace_path: '/tmp/workspace',
jsonl_path: '/tmp/workspace/session.jsonl',
created_at: '2026-04-01T00:00:00.000Z',
updated_at: '2026-04-02T00:00:00.000Z',
});
assert.throws(
() => llmSessionsService.getIndexedSession('missing-session'),
(error: unknown) =>
error instanceof AppError &&
error.code === 'SESSION_NOT_FOUND' &&
error.statusCode === 404,
);
} finally {
restoreGetById();
}
});
// This test covers delete behavior using only DB jsonl_path, including invalid id validation.
test('llmSessionsService.deleteSessionArtifacts validates ids and deletes disk/db artifacts', { concurrency: false }, async () => {
const tempRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'llm-delete-session-'));