add chat history

This commit is contained in:
tusharmagar 2026-01-20 11:18:48 +05:30
parent ff24494b77
commit aa94b48d65
2 changed files with 238 additions and 17 deletions

View file

@ -11,6 +11,7 @@ import {
FilePlus,
Folder,
FolderPlus,
MessageSquare,
Network,
Pencil,
SquarePen,
@ -27,7 +28,6 @@ import {
SidebarContent,
SidebarGroup,
SidebarGroupContent,
SidebarGroupLabel,
SidebarHeader,
SidebarMenu,
SidebarMenuButton,
@ -70,12 +70,26 @@ type KnowledgeActions = {
copyPath: (path: string) => void
}
type RunListItem = {
id: string
createdAt: string
agentId: string
}
type TasksActions = {
onNewChat: () => void
onSelectRun: (runId: string) => void
}
type SidebarContentPanelProps = {
tree: TreeNode[]
selectedPath: string | null
expandedPaths: Set<string>
onSelectFile: (path: string, kind: "file" | "dir") => void
knowledgeActions: KnowledgeActions
runs?: RunListItem[]
currentRunId?: string | null
tasksActions?: TasksActions
} & React.ComponentProps<typeof Sidebar>
const sectionTitles = {
@ -89,6 +103,9 @@ export function SidebarContentPanel({
expandedPaths,
onSelectFile,
knowledgeActions,
runs = [],
currentRunId,
tasksActions,
...props
}: SidebarContentPanelProps) {
const { activeSection } = useSidebarSection()
@ -111,7 +128,11 @@ export function SidebarContentPanel({
/>
)}
{activeSection === "tasks" && (
<TasksSection />
<TasksSection
runs={runs}
currentRunId={currentRunId}
actions={tasksActions}
/>
)}
</SidebarContent>
<SidebarRail />
@ -404,16 +425,50 @@ function Tree({
}
// Tasks Section
function TasksSection() {
function TasksSection({
runs,
currentRunId,
actions,
}: {
runs: RunListItem[]
currentRunId?: string | null
actions?: TasksActions
}) {
return (
<SidebarGroup>
<SidebarGroupContent>
<div className="px-2 py-2">
<button className="flex items-center gap-2 text-sidebar-foreground hover:bg-sidebar-accent rounded-lg px-3 py-2 transition-colors w-full">
<SquarePen className="size-4" />
<span className="text-sm">New chat</span>
</button>
</div>
<SidebarGroup className="flex-1 flex flex-col overflow-hidden">
{/* Sticky New Chat button - matches Knowledge section height */}
<div className="sticky top-0 z-10 bg-sidebar border-b border-sidebar-border py-0.5">
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton onClick={actions?.onNewChat} className="gap-2">
<SquarePen className="size-4 shrink-0" />
<span className="text-sm">New chat</span>
</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
</div>
<SidebarGroupContent className="flex-1 overflow-y-auto">
{runs.length > 0 && (
<>
<div className="px-3 py-1.5 text-xs font-medium text-muted-foreground">
Chat history
</div>
<SidebarMenu>
{runs.map((run) => (
<SidebarMenuItem key={run.id}>
<SidebarMenuButton
isActive={currentRunId === run.id}
onClick={() => actions?.onSelectRun(run.id)}
className="gap-2"
>
<MessageSquare className="size-4 shrink-0" />
<span className="truncate text-sm">{run.id}</span>
</SidebarMenuButton>
</SidebarMenuItem>
))}
</SidebarMenu>
</>
)}
</SidebarGroupContent>
</SidebarGroup>
)