mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-04-18 11:31:30 +00:00
Move provider-backed session history and message normalization calls out of the generic providers service so the service name reflects the behavior it owns. Add a dedicated sessions service for listing session-capable providers, normalizing live provider events, and fetching persisted session history through the provider registry. Update realtime handlers and the unified messages route to depend on `sessionsService` instead of `providersService`. This separates session message operations from other provider concerns such as auth and MCP, keeping the provider services easier to navigate as the module grows.
62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
/**
|
|
* Unified messages endpoint.
|
|
*
|
|
* GET /api/sessions/:sessionId/messages?provider=claude&projectName=foo&limit=50&offset=0
|
|
*
|
|
* Replaces the four provider-specific session message endpoints with a single route
|
|
* that delegates to the appropriate adapter via the provider registry.
|
|
*
|
|
* @module routes/messages
|
|
*/
|
|
|
|
import express from 'express';
|
|
import { sessionsService } from '../modules/providers/services/sessions.service.js';
|
|
|
|
const router = express.Router();
|
|
|
|
/**
|
|
* GET /api/sessions/:sessionId/messages
|
|
*
|
|
* Auth: authenticateToken applied at mount level in index.js
|
|
*
|
|
* Query params:
|
|
* provider - 'claude' | 'cursor' | 'codex' | 'gemini' (default: 'claude')
|
|
* projectName - required for claude provider
|
|
* projectPath - required for cursor provider (absolute path used for cwdId hash)
|
|
* limit - page size (omit or null for all)
|
|
* offset - pagination offset (default: 0)
|
|
*/
|
|
router.get('/:sessionId/messages', async (req, res) => {
|
|
try {
|
|
const { sessionId } = req.params;
|
|
const provider = String(req.query.provider || 'claude').trim().toLowerCase();
|
|
const projectName = req.query.projectName || '';
|
|
const projectPath = req.query.projectPath || '';
|
|
const limitParam = req.query.limit;
|
|
const limit = limitParam !== undefined && limitParam !== null && limitParam !== ''
|
|
? parseInt(limitParam, 10)
|
|
: null;
|
|
const offset = parseInt(req.query.offset || '0', 10);
|
|
|
|
const availableProviders = sessionsService.listProviderIds();
|
|
if (!availableProviders.includes(provider)) {
|
|
const available = availableProviders.join(', ');
|
|
return res.status(400).json({ error: `Unknown provider: ${provider}. Available: ${available}` });
|
|
}
|
|
|
|
const result = await sessionsService.fetchHistory(provider, sessionId, {
|
|
projectName,
|
|
projectPath,
|
|
limit,
|
|
offset,
|
|
});
|
|
|
|
return res.json(result);
|
|
} catch (error) {
|
|
console.error('Error fetching unified messages:', error);
|
|
return res.status(500).json({ error: 'Failed to fetch messages' });
|
|
}
|
|
});
|
|
|
|
export default router;
|