- {sessions.map((session) => {
+ {sortedSessions.map((session) => {
const isActive = session.id === currentSessionId;
const title =
session.meta.firstCommand !== null
diff --git a/src/app/projects/[projectId]/sessions/[sessionId]/components/sessionSidebar/TaskCard.tsx b/src/app/projects/[projectId]/sessions/[sessionId]/components/sessionSidebar/TaskCard.tsx
deleted file mode 100644
index 142f1fd..0000000
--- a/src/app/projects/[projectId]/sessions/[sessionId]/components/sessionSidebar/TaskCard.tsx
+++ /dev/null
@@ -1,92 +0,0 @@
-"use client";
-
-import { PauseIcon, PlayIcon, XIcon } from "lucide-react";
-import Link from "next/link";
-import type { FC } from "react";
-import { Button } from "@/components/ui/button";
-
-type TaskType = {
- id: string;
- status: "running" | "paused";
- sessionId: string;
- userMessageId: string;
-};
-
-export const TaskCard: FC<{
- task: TaskType;
- projectId: string;
- onAbortTask: (sessionId: string) => void;
- onCopyTaskId: (taskId: string) => void;
- isAbortPending: boolean;
-}> = ({ task, projectId, onAbortTask, onCopyTaskId, isAbortPending }) => (
-
-
-
- {task.status === "running" ? (
-
- ) : (
-
- )}
-
- {task.status.toUpperCase()}
-
-
-
-
-
-
-
-
- Task ID:
-
-
-
-
- Session:
-
- {task.sessionId.slice(-8)}
-
-
-
- {task.userMessageId && (
-
- Message:
- {task.userMessageId.slice(-8)}
-
- )}
-
-
-);
diff --git a/src/app/projects/[projectId]/sessions/[sessionId]/components/sessionSidebar/TasksTab.tsx b/src/app/projects/[projectId]/sessions/[sessionId]/components/sessionSidebar/TasksTab.tsx
deleted file mode 100644
index 5028ef9..0000000
--- a/src/app/projects/[projectId]/sessions/[sessionId]/components/sessionSidebar/TasksTab.tsx
+++ /dev/null
@@ -1,107 +0,0 @@
-"use client";
-
-import { useMutation } from "@tanstack/react-query";
-import { useAtom } from "jotai";
-import { ListTodoIcon } from "lucide-react";
-import type { FC } from "react";
-import { honoClient } from "@/lib/api/client";
-import { aliveTasksAtom } from "../../store/aliveTasksAtom";
-import { TaskCard } from "./TaskCard";
-
-export const TasksTab: FC<{ projectId: string }> = ({ projectId }) => {
- const [aliveTasks] = useAtom(aliveTasksAtom);
-
- const abortTask = useMutation({
- mutationFn: async (sessionId: string) => {
- const response = await honoClient.api.tasks.abort.$post({
- json: { sessionId },
- });
-
- if (!response.ok) {
- throw new Error(response.statusText);
- }
-
- return response.json();
- },
- });
-
- const copyTaskId = (taskId: string) => {
- navigator.clipboard.writeText(taskId);
- };
-
- // Group tasks by status
- const runningTasks = aliveTasks.filter((task) => task.status === "running");
- const pausedTasks = aliveTasks.filter((task) => task.status === "paused");
-
- return (
-
-
-
Alive Sessions
-
- {runningTasks.length} running, {pausedTasks.length} paused
-
-
-
-
- {aliveTasks.length === 0 ? (
-
- ) : (
- <>
- {/* Running Tasks Section */}
- {runningTasks.length > 0 && (
-
-
-
-
- Running ({runningTasks.length})
-
-
-
- {runningTasks.map((task) => (
- abortTask.mutate(sessionId)}
- onCopyTaskId={copyTaskId}
- isAbortPending={abortTask.isPending}
- />
- ))}
-
-
- )}
-
- {/* Paused Tasks Section */}
- {pausedTasks.length > 0 && (
-
-
-
-
- Paused ({pausedTasks.length})
-
-
-
- {pausedTasks.map((task) => (
- abortTask.mutate(sessionId)}
- onCopyTaskId={copyTaskId}
- isAbortPending={abortTask.isPending}
- />
- ))}
-
-
- )}
- >
- )}
-
-
- );
-};