Files
nexusAI/packages/orchestration-service/src/routes/sessions.js
2026-04-26 23:00:55 -07:00

61 lines
2.0 KiB
JavaScript

const { Router } = require('express');
const memory = require('../services/memory');
const { EPISODIC } = require('@nexusai/shared');
const router = Router();
router.get('/:sessionId/history', async (req, res) => {
const { sessionId } = req.params;
const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET } = req.query;
try {
const session = await memory.getSessionByExternalId(sessionId);
if (!session) return res.status(404).json({ error: 'Session not found' });
const history = await memory.getSessionHistory(session.id, Number(limit), Number(offset));
res.json({ sessionId, episodes: history });
} catch (err) {
res.status(500).json({ error: 'Failed to fetch session history', detail: err.message });
}
});
router.get('/', async (req, res) => {
const { limit = EPISODIC.DEFAULT_PAGE_SIZE, offset = EPISODIC.DEFAULT_OFFSET, projectId } = req.query;
const parsedProjectId = projectId && projectId !== 'null' ? projectId : null;
try {
const sessions = await memory.getSessions(Number(limit), Number(offset), parsedProjectId);
res.json(sessions);
} catch (err) {
res.status(500).json({ error: 'Failed to fetch sessions', detail: err.message });
}
});
router.patch('/:sessionId', async (req, res) => {
const { name, projectId } = req.body;
// Allow patch with just projectId, or just name, or both
if (!name?.trim() && projectId === undefined) {
return res.status(400).json({ error: 'name or projectId is required' });
}
try {
const session = await memory.updateSession(req.params.sessionId, {
name: name?.trim() || undefined,
projectId
});
res.json(session);
} catch (err) {
res.status(500).json({ error: 'Failed to update session', detail: err.message });
}
});
router.delete('/:sessionId', async (req, res) => {
try {
await memory.deleteSession(req.params.sessionId);
res.status(204).send();
} catch (err) {
res.status(500).json({ error: 'Failed to delete session', detail: err.message });
}
});
module.exports = router;