feat(ui): session identification — project badges, relative time, running indicator
This commit is contained in:
@@ -92,19 +92,41 @@
|
||||
|
||||
async function loadBridgeSessions() {
|
||||
try {
|
||||
const res = await fetch('/api/bridge/sessions');
|
||||
if (!res.ok) return;
|
||||
const data = await res.json();
|
||||
bridgeSessions = (data.sessions || []).map(s => ({
|
||||
id: s.id,
|
||||
name: s.title || s.id.substring(0, 8),
|
||||
host: 'bridge',
|
||||
cdpPort: 0,
|
||||
status: 'connected',
|
||||
title: s.title,
|
||||
stepCount: s.stepCount,
|
||||
isBridge: true,
|
||||
}));
|
||||
// 세션 목록 + cascades를 병렬로 가져오기
|
||||
const [sessRes, cascRes] = await Promise.all([
|
||||
fetch('/api/bridge/sessions'),
|
||||
fetch('/api/bridge/cascades'),
|
||||
]);
|
||||
if (!sessRes.ok) return;
|
||||
const sessData = await sessRes.json();
|
||||
let cascadeMap = {};
|
||||
if (cascRes.ok) {
|
||||
const cascData = await cascRes.json();
|
||||
cascadeMap = cascData.cascades || cascData;
|
||||
}
|
||||
|
||||
bridgeSessions = (sessData.sessions || []).map(s => {
|
||||
const cascade = cascadeMap[s.id] || {};
|
||||
// 워크스페이스에서 프로젝트명 추출
|
||||
const wsUri = cascade.workspaces?.[0]?.workspaceFolderAbsoluteUri || '';
|
||||
const project = wsUri ? decodeURIComponent(wsUri.split('/').pop()) : '';
|
||||
// 상태
|
||||
const runStatus = cascade.status || '';
|
||||
const isRunning = runStatus.includes('RUNNING');
|
||||
return {
|
||||
id: s.id,
|
||||
name: s.title || s.id.substring(0, 8),
|
||||
host: 'bridge',
|
||||
cdpPort: 0,
|
||||
status: isRunning ? 'running' : 'connected',
|
||||
title: s.title,
|
||||
stepCount: s.stepCount,
|
||||
lastModified: s.lastModifiedTime,
|
||||
project: project,
|
||||
isRunning: isRunning,
|
||||
isBridge: true,
|
||||
};
|
||||
});
|
||||
sessionPanel.update(bridgeSessions);
|
||||
// 활성 세션 없으면 가장 최근 대화 자동 선택
|
||||
if (!sessionPanel.activeSessionId && bridgeSessions.length > 0) {
|
||||
|
||||
Reference in New Issue
Block a user