mirror of
https://github.com/siteboon/claudecodeui.git
synced 2026-03-21 22:07:26 +00:00
- Add provider adapter layer (server/providers/) with registry pattern
- Claude, Cursor, Codex, Gemini adapters normalize native formats to NormalizedMessage
- Shared types.js defines ProviderAdapter interface and message kinds
- Registry enables polymorphic provider lookup
- Add unified REST endpoint: GET /api/sessions/:id/messages?provider=...
- Replaces four provider-specific message endpoints with one
- Delegates to provider adapters via registry
- Add frontend session-keyed store (useSessionStore)
- Per-session Map with serverMessages/realtimeMessages/merged
- Dedup by ID, stale threshold for re-fetch, background session accumulation
- No localStorage for messages — backend JSONL is source of truth
- Add normalizedToChatMessages converter (useChatMessages)
- Converts NormalizedMessage[] to existing ChatMessage[] UI format
- Wire unified store into ChatInterface, useChatSessionState, useChatRealtimeHandlers
- Session switch uses store cache for instant render
- Background WebSocket messages routed to correct session slot
25 lines
859 B
JavaScript
25 lines
859 B
JavaScript
import express from 'express';
|
|
import sessionManager from '../sessionManager.js';
|
|
import { sessionNamesDb } from '../database/db.js';
|
|
|
|
const router = express.Router();
|
|
|
|
router.delete('/sessions/:sessionId', async (req, res) => {
|
|
try {
|
|
const { sessionId } = req.params;
|
|
|
|
if (!sessionId || typeof sessionId !== 'string' || !/^[a-zA-Z0-9_.-]{1,100}$/.test(sessionId)) {
|
|
return res.status(400).json({ success: false, error: 'Invalid session ID format' });
|
|
}
|
|
|
|
await sessionManager.deleteSession(sessionId);
|
|
sessionNamesDb.deleteName(sessionId, 'gemini');
|
|
res.json({ success: true });
|
|
} catch (error) {
|
|
console.error(`Error deleting Gemini session ${req.params.sessionId}:`, error);
|
|
res.status(500).json({ success: false, error: error.message });
|
|
}
|
|
});
|
|
|
|
export default router;
|