From ce1a73abcea68fdebeda83d0fe92474f2159584b Mon Sep 17 00:00:00 2001
From: Alex Blank
Date: Sun, 24 May 2026 12:07:37 +0000
Subject: [PATCH] feat: add styles and polish for unified session list
components
- Add CSS styles for SessionCard and SessionList components
- Add responsive styles for mobile viewport
- Fix TypeScript errors (remove unused port property)
- Fix ESLint errors (remove unused imports and variables)
Refs: session-list-overhaul tasks 5-6
---
.stoneforge/.dashboard-opened | 4 +-
.stoneforge/sync/elements.jsonl | 20 ++--
apps/web/src/components/session-card.tsx | 3 -
apps/web/src/pages/dashboard.tsx | 6 -
apps/web/src/pages/sessions.tsx | 9 --
apps/web/src/styles.css | 109 ++++++++++++++++++
.../changes/session-list-overhaul/tasks.md | 12 +-
7 files changed, 129 insertions(+), 34 deletions(-)
diff --git a/.stoneforge/.dashboard-opened b/.stoneforge/.dashboard-opened
index 7815607..1314f96 100644
--- a/.stoneforge/.dashboard-opened
+++ b/.stoneforge/.dashboard-opened
@@ -1,2 +1,2 @@
-130078
-1779618546909
+262629
+1779624255076
diff --git a/.stoneforge/sync/elements.jsonl b/.stoneforge/sync/elements.jsonl
index fe00060..f3529db 100644
--- a/.stoneforge/sync/elements.jsonl
+++ b/.stoneforge/sync/elements.jsonl
@@ -1,14 +1,18 @@
{"id":"el-0000","type":"entity","createdAt":"2026-05-24T09:34:02.845Z","updatedAt":"2026-05-24T09:34:02.845Z","createdBy":"el-0000","tags":[],"metadata":{},"name":"operator","entityType":"human"}
-{"id":"el-2jua","type":"entity","createdAt":"2026-05-24T09:44:24.375Z","updatedAt":"2026-05-24T10:16:57.542Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"director","sessionStatus":"running","provider":"opencode","model":"openai/gpt-5.5","channelId":"el-2vpd","lastActivityAt":"2026-05-24T10:16:57.540Z","sessionHistory":[{"id":"session-mpjlz79g-0001-9tz4","providerSessionId":"ses_1a689e409ffea1AaKRRY2e7GYP","status":"terminated","workingDirectory":"/home/alex/projects/headquarter","startedAt":"2026-05-24T10:02:20.170Z","endedAt":"2026-05-24T10:16:54.212Z"},{"id":"session-mpjlckjf-0001-cifg","status":"terminated","workingDirectory":"/home/alex/projects/headquarter","startedAt":"2026-05-24T09:44:44.286Z","endedAt":"2026-05-24T09:47:52.845Z"}]}},"name":"director","entityType":"agent"}
-{"id":"el-5x1t","type":"entity","createdAt":"2026-05-24T09:44:28.369Z","updatedAt":"2026-05-24T09:44:28.369Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"worker","workerMode":"ephemeral","sessionStatus":"idle","provider":"opencode","model":"moonshotai/kimi-k2.6","channelId":"el-1x51"}},"name":"e-worker-1","entityType":"agent"}
-{"id":"el-7z8w","type":"entity","createdAt":"2026-05-24T09:44:33.965Z","updatedAt":"2026-05-24T10:09:33.794Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"worker","workerMode":"ephemeral","sessionStatus":"idle","provider":"opencode","model":"moonshotai/kimi-k2.6","channelId":"el-4uqv","lastActivityAt":"2026-05-24T10:09:33.793Z","sessionHistory":[{"id":"session-mpjm8gr8-0006-siku","providerSessionId":"ses_1a689e409ffea1AaKRRY2e7GYP","status":"terminated","workingDirectory":"/home/alex/projects/headquarter","startedAt":"2026-05-24T10:09:33.183Z","endedAt":"2026-05-24T10:09:33.794Z"},{"id":"session-mpjm82gt-0005-5mkq","providerSessionId":"ses_1a68a2c40ffevEmnFz7bp7IxCo","status":"terminated","workingDirectory":"/home/alex/projects/headquarter","startedAt":"2026-05-24T10:09:14.696Z","endedAt":"2026-05-24T10:09:15.313Z"},{"id":"session-mpjm3g7e-0004-65qz","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:05:38.734Z","endedAt":"2026-05-24T10:05:40.357Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjm3byo-0003-i7md","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:05:33.735Z","endedAt":"2026-05-24T10:05:37.855Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjm36ik-0002-0oqz","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:05:26.689Z","endedAt":"2026-05-24T10:05:30.342Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjlycat-0009-04ss","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:01:40.882Z","endedAt":"2026-05-24T10:01:44.511Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjly8fj-0008-vacl","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:01:35.851Z","endedAt":"2026-05-24T10:01:40.884Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjly4kq-0007-y15i","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:01:30.861Z","endedAt":"2026-05-24T10:01:35.493Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjll5q9-0006-51uj","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T09:51:25.805Z","endedAt":"2026-05-24T09:51:29.476Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjll1vs-0005-zvvm","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T09:51:20.806Z","endedAt":"2026-05-24T09:51:25.807Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjlky0l-0004-ou7e","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T09:51:15.818Z","endedAt":"2026-05-24T09:51:20.807Z","terminationReason":"Process no longer alive (PID check)"},{"id":"session-mpjlkqcm-0003-sv67","providerSessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","status":"terminated","workingDirectory":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T09:51:08.709Z","endedAt":"2026-05-24T09:51:15.831Z","terminationReason":"Process no longer alive (PID check)"}],"sessionId":"ses_1a689e409ffea1AaKRRY2e7GYP"}},"name":"e-worker-2","entityType":"agent"}
-{"id":"el-2xvj","type":"entity","createdAt":"2026-05-24T09:44:41.128Z","updatedAt":"2026-05-24T09:44:41.129Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"steward","stewardFocus":"merge","sessionStatus":"idle","provider":"opencode","model":"moonshotai/kimi-k2.6","channelId":"el-54u7"}},"name":"m-steward-1","entityType":"agent"}
+{"id":"el-2jua","type":"entity","createdAt":"2026-05-24T09:44:24.375Z","updatedAt":"2026-05-24T10:29:09.942Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"director","sessionStatus":"running","provider":"opencode","model":"openai/gpt-5.5","channelId":"el-2vpd","lastActivityAt":"2026-05-24T10:29:09.939Z","sessionHistory":[{"id":"session-mpjlz79g-0001-9tz4","providerSessionId":"ses_1a689e409ffea1AaKRRY2e7GYP","status":"terminated","workingDirectory":"/home/alex/projects/headquarter","startedAt":"2026-05-24T10:02:20.170Z","endedAt":"2026-05-24T10:16:54.212Z"},{"id":"session-mpjlckjf-0001-cifg","status":"terminated","workingDirectory":"/home/alex/projects/headquarter","startedAt":"2026-05-24T09:44:44.286Z","endedAt":"2026-05-24T09:47:52.845Z"}]}},"name":"director","entityType":"agent"}
+{"id":"el-4350","type":"entity","createdAt":"2026-05-24T12:03:32.237Z","updatedAt":"2026-05-24T12:03:32.238Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"steward","stewardFocus":"merge","sessionStatus":"idle","provider":"opencode","model":"kimi-for-coding/k2p6","channelId":"el-5mta"}},"name":"m-steward-1","entityType":"agent"}
+{"id":"el-13ju","type":"entity","createdAt":"2026-05-24T12:03:36.368Z","updatedAt":"2026-05-24T12:03:36.368Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"steward","stewardFocus":"docs","sessionStatus":"idle","provider":"opencode","model":"kimi-for-coding/k2p6","channelId":"el-5j1i"}},"name":"d-steward-1","entityType":"agent"}
+{"id":"el-51a8","type":"entity","createdAt":"2026-05-24T12:03:40.486Z","updatedAt":"2026-05-24T12:03:40.487Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"worker","workerMode":"ephemeral","sessionStatus":"idle","provider":"opencode","model":"kimi-for-coding/k2p6","channelId":"el-9amf"}},"name":"e-worker-1","entityType":"agent"}
+{"id":"el-2i1s","type":"entity","createdAt":"2026-05-24T12:03:42.204Z","updatedAt":"2026-05-24T12:03:42.223Z","createdBy":"el-0000","tags":[],"metadata":{"agent":{"agentRole":"worker","workerMode":"ephemeral","sessionStatus":"idle","provider":"opencode","model":"kimi-for-coding/k2p6","channelId":"el-1na8"}},"name":"e-worker-2","entityType":"agent"}
{"id":"el-1of","type":"document","createdAt":"2026-05-24T09:44:58.758Z","updatedAt":"2026-05-24T09:44:58.759Z","createdBy":"el-2jua","tags":[],"metadata":{"purpose":"document-directory"},"title":"Documentation Directory","contentType":"markdown","content":"# Documentation Directory\n\nIndex of all workspace documents. Start with this document to navigate workspace knowledge.\n\n## Specs\n\n(none yet)\n\n## References\n\n| ID | Title |\n|----|-------|\n| el-1of | Documentation Directory (this document) |\n\n## How-To Guides\n\n(none yet)\n\n## Explanations\n\n(none yet)\n\n## Decision Logs\n\n(none yet)","version":2,"previousVersionId":"el-1of","category":"reference","status":"active","immutable":false}
{"id":"el-1io7","type":"document","createdAt":"2026-05-24T09:51:08.711Z","updatedAt":"2026-05-24T09:51:08.711Z","createdBy":"el-7z8w","tags":["dispatch-notification","task-assignment"],"metadata":{"dispatchNotification":true},"contentType":"text","content":"Task assigned: Remove tunnel functionality and ui elements from terminal sessions [Priority: 3]","version":1,"previousVersionId":null,"category":"other","status":"active","immutable":false}
-{"id":"el-18lc","type":"task","createdAt":"2026-05-24T10:07:25.455Z","updatedAt":"2026-05-24T10:09:13.314Z","createdBy":"el-0000","tags":[],"metadata":{"orchestrator":{"assignedAgent":"el-7z8w","branch":"agent/e-worker-2/el-18lc-remove-tunnel-functionality-an","worktree":".stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","startedAt":"2026-05-24T10:09:13.314Z"}},"title":"Remove tunnel functionality and ui from terminal sessions","status":"open","priority":3,"complexity":3,"taskType":"task","assignee":"el-7z8w"}
+{"id":"el-1jhy","type":"document","createdAt":"2026-05-24T11:00:44.885Z","updatedAt":"2026-05-24T11:00:44.885Z","createdBy":"el-7z8w","tags":["dispatch-notification","task-assignment"],"metadata":{"dispatchNotification":true},"contentType":"text","content":"Task assigned: Remove tunnel functionality and ui from terminal sessions [Priority: 3]","version":1,"previousVersionId":null,"category":"other","status":"active","immutable":false}
+{"id":"el-18lc","type":"task","createdAt":"2026-05-24T10:07:25.455Z","updatedAt":"2026-05-24T12:03:51.474Z","createdBy":"el-0000","tags":[],"metadata":{"orchestrator":{"sessionHistory":[{"sessionId":"session-mpjo295o-0006-yuk4","providerSessionId":"ses_1a65b0534ffe1MQoY6emHeY9Qn","agentId":"el-7z8w","agentName":"e-worker-2","agentRole":"worker","startedAt":"2026-05-24T11:00:44.888Z"},{"sessionId":"session-mpjo2cw8-0007-3wjj","providerSessionId":"ses_1a65b0534ffe1MQoY6emHeY9Qn","agentId":"el-7z8w","agentName":"e-worker-2","agentRole":"worker","startedAt":"2026-05-24T11:00:47.467Z"},{"sessionId":"session-mpjo2grm-0008-7b8r","providerSessionId":"ses_1a65b0534ffe1MQoY6emHeY9Qn","agentId":"el-7z8w","agentName":"e-worker-2","agentRole":"worker","startedAt":"2026-05-24T11:00:52.495Z"},{"sessionId":"session-mpjo2km9-0009-n1vf","providerSessionId":"ses_1a65b0534ffe1MQoY6emHeY9Qn","agentId":"el-7z8w","agentName":"e-worker-2","agentRole":"worker","startedAt":"2026-05-24T11:00:57.468Z"}],"owningDirector":"el-2jua","resumeCount":3,"reconciliationCount":1}},"title":"Remove tunnel functionality and ui from terminal sessions","status":"open","priority":3,"complexity":3,"taskType":"task"}
{"id":"el-2afn","type":"message","createdAt":"2026-05-24T09:51:08.713Z","updatedAt":"2026-05-24T09:51:08.713Z","createdBy":"el-7z8w","tags":["dispatch-notification","task-assignment"],"metadata":{"type":"task-assignment","taskId":"el-3y4w","priority":3,"branch":"agent/e-worker-2/el-3y4w-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","sessionId":"ses_1a69abe62ffe3VhShFnsV1mp1b","dispatchedAt":"2026-05-24T09:51:08.710Z","suppressInbox":true},"channelId":"el-4uqv","sender":"el-7z8w","contentRef":"el-1io7","attachments":[],"threadId":null}
+{"id":"el-5lta","type":"message","createdAt":"2026-05-24T11:00:44.887Z","updatedAt":"2026-05-24T11:00:44.887Z","createdBy":"el-7z8w","tags":["dispatch-notification","task-assignment"],"metadata":{"type":"task-assignment","taskId":"el-18lc","priority":3,"branch":"agent/e-worker-2/el-18lc-remove-tunnel-functionality-an","worktree":"/home/alex/projects/headquarter/.stoneforge/.worktrees/e-worker-2-remove-tunnel-functionality-an","sessionId":"ses_1a65b0534ffe1MQoY6emHeY9Qn","dispatchedAt":"2026-05-24T11:00:44.884Z","suppressInbox":true},"channelId":"el-4uqv","sender":"el-7z8w","contentRef":"el-1jhy","attachments":[],"threadId":null}
{"id":"el-2vpd","type":"channel","createdAt":"2026-05-24T09:44:24.377Z","updatedAt":"2026-05-24T09:44:24.377Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-2jua","agentName":"director","purpose":"Agent direct messaging channel"},"name":"director:operator","description":null,"channelType":"direct","members":["el-0000","el-2jua"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
-{"id":"el-1x51","type":"channel","createdAt":"2026-05-24T09:44:28.369Z","updatedAt":"2026-05-24T09:44:28.369Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-5x1t","agentName":"e-worker-1","purpose":"Agent direct messaging channel"},"name":"e-worker-1:operator","description":null,"channelType":"direct","members":["el-0000","el-5x1t"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
-{"id":"el-4uqv","type":"channel","createdAt":"2026-05-24T09:44:33.966Z","updatedAt":"2026-05-24T09:44:33.966Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-7z8w","agentName":"e-worker-2","purpose":"Agent direct messaging channel"},"name":"e-worker-2:operator","description":null,"channelType":"direct","members":["el-0000","el-7z8w"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
-{"id":"el-54u7","type":"channel","createdAt":"2026-05-24T09:44:41.129Z","updatedAt":"2026-05-24T09:44:41.129Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-2xvj","agentName":"m-steward-1","purpose":"Agent direct messaging channel"},"name":"m-steward-1:operator","description":null,"channelType":"direct","members":["el-0000","el-2xvj"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
+{"id":"el-5mta","type":"channel","createdAt":"2026-05-24T12:03:32.238Z","updatedAt":"2026-05-24T12:03:32.238Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-4350","agentName":"m-steward-1","purpose":"Agent direct messaging channel"},"name":"m-steward-1:operator","description":null,"channelType":"direct","members":["el-0000","el-4350"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
+{"id":"el-5j1i","type":"channel","createdAt":"2026-05-24T12:03:36.368Z","updatedAt":"2026-05-24T12:03:36.368Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-13ju","agentName":"d-steward-1","purpose":"Agent direct messaging channel"},"name":"d-steward-1:operator","description":null,"channelType":"direct","members":["el-0000","el-13ju"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
+{"id":"el-9amf","type":"channel","createdAt":"2026-05-24T12:03:40.487Z","updatedAt":"2026-05-24T12:03:40.487Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-51a8","agentName":"e-worker-1","purpose":"Agent direct messaging channel"},"name":"e-worker-1:operator","description":null,"channelType":"direct","members":["el-0000","el-51a8"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
+{"id":"el-1na8","type":"channel","createdAt":"2026-05-24T12:03:42.222Z","updatedAt":"2026-05-24T12:03:42.222Z","createdBy":"el-0000","tags":["agent-channel"],"metadata":{"agentId":"el-2i1s","agentName":"e-worker-2","purpose":"Agent direct messaging channel"},"name":"e-worker-2:operator","description":null,"channelType":"direct","members":["el-0000","el-2i1s"],"permissions":{"visibility":"private","joinPolicy":"invite-only","modifyMembers":[]}}
{"id":"el-258","type":"library","createdAt":"2026-05-24T09:44:58.748Z","updatedAt":"2026-05-24T09:44:58.748Z","createdBy":"el-2jua","tags":[],"metadata":{},"name":"Documentation"}
diff --git a/apps/web/src/components/session-card.tsx b/apps/web/src/components/session-card.tsx
index a1e6c88..00aa0c3 100644
--- a/apps/web/src/components/session-card.tsx
+++ b/apps/web/src/components/session-card.tsx
@@ -110,9 +110,6 @@ export function SessionCard({
)}
- {session.port && session.status === "running" && (
- Port: {session.port}
- )}
{session.created_at && (
Created: {new Date(session.created_at).toLocaleDateString()}
diff --git a/apps/web/src/pages/dashboard.tsx b/apps/web/src/pages/dashboard.tsx
index 199eb36..3071d1f 100644
--- a/apps/web/src/pages/dashboard.tsx
+++ b/apps/web/src/pages/dashboard.tsx
@@ -11,7 +11,6 @@ import type { Project } from "../types";
import { Icon } from "../components/icon";
import { CreateSessionForm } from "../components/create-session-form";
import { SessionList } from "../components/session-list";
-import { SessionCard } from "../components/session-card";
type HomeStatus = "loading" | "ready" | "error";
@@ -125,11 +124,6 @@ export const HomePage = () => {
[safeSessions]
);
- const recentSessions = useMemo(
- () => safeSessions.filter((session) => ["stopped", "error"].includes(session.status)).slice(0, 5),
- [safeSessions]
- );
-
const handleCreateSuccess = async (instance: { id: string }) => {
await updateUserConfig({ last_session_id: instance.id });
setSelectedProject("");
diff --git a/apps/web/src/pages/sessions.tsx b/apps/web/src/pages/sessions.tsx
index 3f4a88a..11dba2a 100644
--- a/apps/web/src/pages/sessions.tsx
+++ b/apps/web/src/pages/sessions.tsx
@@ -238,15 +238,6 @@ export const SessionsPage = () => {
}
};
- const handleResumeLast = async () => {
- if (!lastSession) return;
- // Find the project and repo IDs
- const project = projects.find((p) => p.name === lastSession.project_name);
- if (project) {
- navigate(`/projects/${project.id}`);
- }
- };
-
return (
diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css
index 957804f..3c70331 100644
--- a/apps/web/src/styles.css
+++ b/apps/web/src/styles.css
@@ -2730,6 +2730,115 @@ a.nav-item,
gap: var(--space-2);
}
+/* Session Card - Unified Component */
+.session-card-content {
+ flex: 1;
+}
+
+.session-card-header {
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-2);
+}
+
+.session-card-title {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: var(--space-2);
+}
+
+.session-card-title h4 {
+ margin: 0;
+ font-size: 1rem;
+ font-weight: 600;
+}
+
+.session-card-status-badges {
+ display: flex;
+ gap: var(--space-1);
+ flex-wrap: wrap;
+}
+
+.session-card-meta {
+ font-size: 0.85rem;
+ margin: 0;
+}
+
+.session-card-meta .icon {
+ margin-right: var(--space-1);
+ vertical-align: text-bottom;
+}
+
+.session-card-url {
+ margin: var(--space-1) 0;
+ font-size: 0.8rem;
+ word-break: break-all;
+}
+
+.session-card-url a {
+ color: var(--color-primary);
+ text-decoration: none;
+}
+
+.session-card-url a:hover {
+ text-decoration: underline;
+}
+
+.session-card-actions {
+ display: flex;
+ gap: var(--space-2);
+ flex-wrap: wrap;
+ margin-top: var(--space-2);
+ padding-top: var(--space-3);
+ border-top: 1px solid var(--color-border);
+}
+
+/* Session List - Unified Component */
+.session-list {
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-6);
+}
+
+.session-group {
+ display: flex;
+ flex-direction: column;
+ gap: var(--space-3);
+}
+
+.session-group-header {
+ display: flex;
+ align-items: center;
+ gap: var(--space-2);
+}
+
+.session-group-header h3 {
+ margin: 0;
+ font-size: 1.1rem;
+ font-weight: 600;
+}
+
+/* Action labels - hidden on mobile */
+.action-label {
+ margin-left: var(--space-1);
+}
+
+@media (max-width: 640px) {
+ .action-label {
+ display: none;
+ }
+
+ .session-card-actions {
+ gap: var(--space-1);
+ }
+
+ .session-card-actions button,
+ .session-card-actions a {
+ padding: var(--space-1);
+ }
+}
+
.recent-sessions-section {
margin-bottom: var(--space-6);
}
diff --git a/openspec/changes/session-list-overhaul/tasks.md b/openspec/changes/session-list-overhaul/tasks.md
index 03bc163..7418a0e 100644
--- a/openspec/changes/session-list-overhaul/tasks.md
+++ b/openspec/changes/session-list-overhaul/tasks.md
@@ -35,10 +35,10 @@
## 5. Styles and Polish
-- [ ] 5.1 Add CSS styles for SessionCard layout (responsive grid)
-- [ ] 5.2 Add CSS styles for action buttons (icon vs text based on viewport)
-- [ ] 5.3 Style status indicators and badges
-- [ ] 5.4 Ensure consistent spacing and typography
+- [x] 5.1 Add CSS styles for SessionCard layout (responsive grid)
+- [x] 5.2 Add CSS styles for action buttons (icon vs text based on viewport)
+- [x] 5.3 Style status indicators and badges
+- [x] 5.4 Ensure consistent spacing and typography
- [ ] 5.5 Test responsive layout on mobile viewport
## 6. Testing and Verification
@@ -49,5 +49,5 @@
- [ ] 6.4 Test confirmation dialogs
- [ ] 6.5 Test empty states
- [ ] 6.6 Test responsive layout
-- [ ] 6.7 Run TypeScript compilation
-- [ ] 6.8 Run ESLint
+- [x] 6.7 Run TypeScript compilation
+- [x] 6.8 Run ESLint