From fade47afdc6f1f5f87e42663f765b843dc5f3665 Mon Sep 17 00:00:00 2001 From: Alec Koifman Date: Fri, 12 Dec 2025 11:15:44 -0500 Subject: [PATCH] fix agent runner archive on web --- apps/app/src/components/session-manager.tsx | 40 +++++++++++++++------ apps/server/src/routes/sessions.ts | 25 ++++++++++++- 2 files changed, 53 insertions(+), 12 deletions(-) diff --git a/apps/app/src/components/session-manager.tsx b/apps/app/src/components/session-manager.tsx index 6cf53e68..f566a0fb 100644 --- a/apps/app/src/components/session-manager.tsx +++ b/apps/app/src/components/session-manager.tsx @@ -245,26 +245,44 @@ export function SessionManager({ // Archive session const handleArchiveSession = async (sessionId: string) => { const api = getElectronAPI(); - if (!api?.sessions) return; + if (!api?.sessions) { + console.error("[SessionManager] Sessions API not available"); + return; + } - const result = await api.sessions.archive(sessionId); - if (result.success) { - // If the archived session was currently selected, deselect it - if (currentSessionId === sessionId) { - onSelectSession(null); + try { + const result = await api.sessions.archive(sessionId); + if (result.success) { + // If the archived session was currently selected, deselect it + if (currentSessionId === sessionId) { + onSelectSession(null); + } + await loadSessions(); + } else { + console.error("[SessionManager] Archive failed:", result.error); } - await loadSessions(); + } catch (error) { + console.error("[SessionManager] Archive error:", error); } }; // Unarchive session const handleUnarchiveSession = async (sessionId: string) => { const api = getElectronAPI(); - if (!api?.sessions) return; + if (!api?.sessions) { + console.error("[SessionManager] Sessions API not available"); + return; + } - const result = await api.sessions.unarchive(sessionId); - if (result.success) { - await loadSessions(); + try { + const result = await api.sessions.unarchive(sessionId); + if (result.success) { + await loadSessions(); + } else { + console.error("[SessionManager] Unarchive failed:", result.error); + } + } catch (error) { + console.error("[SessionManager] Unarchive error:", error); } }; diff --git a/apps/server/src/routes/sessions.ts b/apps/server/src/routes/sessions.ts index 15fce21b..62940895 100644 --- a/apps/server/src/routes/sessions.ts +++ b/apps/server/src/routes/sessions.ts @@ -12,7 +12,30 @@ export function createSessionsRoutes(agentService: AgentService): Router { router.get("/", async (req: Request, res: Response) => { try { const includeArchived = req.query.includeArchived === "true"; - const sessions = await agentService.listSessions(includeArchived); + const sessionsRaw = await agentService.listSessions(includeArchived); + + // Transform to match frontend SessionListItem interface + const sessions = await Promise.all( + sessionsRaw.map(async (s) => { + const messages = await agentService.loadSession(s.id); + const lastMessage = messages[messages.length - 1]; + const preview = lastMessage?.content?.slice(0, 100) || ""; + + return { + id: s.id, + name: s.name, + projectPath: s.projectPath || s.workingDirectory, + workingDirectory: s.workingDirectory, + createdAt: s.createdAt, + updatedAt: s.updatedAt, + isArchived: s.archived || false, + tags: s.tags || [], + messageCount: messages.length, + preview, + }; + }) + ); + res.json({ success: true, sessions }); } catch (error) { const message = error instanceof Error ? error.message : "Unknown error";