VIBN Frontend for Coolify deployment

This commit is contained in:
2026-02-15 19:25:52 -08:00
commit 40bf8428cd
398 changed files with 76513 additions and 0 deletions

62
app/api/sessions/route.ts Normal file
View File

@@ -0,0 +1,62 @@
import { NextResponse } from 'next/server';
import { getAdminDb } from '@/lib/firebase/admin';
export async function GET(request: Request) {
try {
const { searchParams } = new URL(request.url);
const projectId = searchParams.get('projectId');
const limit = parseInt(searchParams.get('limit') || '10');
console.log(`[API] Fetching sessions for project ${projectId}, limit ${limit}`);
const adminDb = getAdminDb();
let sessionsQuery = adminDb.collection('sessions');
// Filter by projectId if provided
if (projectId) {
sessionsQuery = sessionsQuery.where('projectId', '==', projectId) as any;
}
const sessionsSnapshot = await sessionsQuery
.orderBy('createdAt', 'desc')
.limit(limit)
.get();
const sessions = sessionsSnapshot.docs.map(doc => {
const data = doc.data();
return {
id: doc.id,
session_id: doc.id,
projectId: data.projectId,
userId: data.userId,
workspacePath: data.workspacePath,
workspaceName: data.workspaceName,
startTime: data.startTime,
endTime: data.endTime,
duration: data.duration,
duration_minutes: data.duration ? Math.round(data.duration / 60) : 0,
tokensUsed: data.tokensUsed || 0,
total_tokens: data.tokensUsed || 0,
cost: data.cost || 0,
estimated_cost_usd: data.cost || 0,
model: data.model || 'unknown',
primary_ai_model: data.model || 'unknown',
filesModified: data.filesModified || [],
summary: data.conversationSummary || null,
message_count: data.messageCount || 0,
ide_name: 'Cursor',
github_branch: data.githubBranch || null,
conversation: data.conversation || [],
file_changes: data.fileChanges || [],
createdAt: data.createdAt,
last_updated: data.updatedAt || data.createdAt,
};
});
console.log(`[API] Found ${sessions.length} sessions from Firebase`);
return NextResponse.json(sessions);
} catch (error) {
console.error('[API] Error fetching sessions:', error);
return NextResponse.json([]);
}
}