diff --git a/surfsense_web/app/dashboard/[search_space_id]/layout.tsx b/surfsense_web/app/dashboard/[search_space_id]/layout.tsx
index 1631f00b9..e434d85fb 100644
--- a/surfsense_web/app/dashboard/[search_space_id]/layout.tsx
+++ b/surfsense_web/app/dashboard/[search_space_id]/layout.tsx
@@ -39,12 +39,6 @@ export default function DashboardLayout({
icon: "SquareLibrary",
items: [],
},
- {
- title: "Logs",
- url: `/dashboard/${search_space_id}/logs`,
- icon: "Logs",
- items: [],
- },
];
return (
diff --git a/surfsense_web/components/dashboard-breadcrumb.tsx b/surfsense_web/components/dashboard-breadcrumb.tsx
index d1b5d3bc1..96bd0ef30 100644
--- a/surfsense_web/components/dashboard-breadcrumb.tsx
+++ b/surfsense_web/components/dashboard-breadcrumb.tsx
@@ -179,7 +179,7 @@ export function DashboardBreadcrumb() {
const breadcrumbs = generateBreadcrumbs(pathname);
- if (breadcrumbs.length <= 1) {
+ if (breadcrumbs.length === 0) {
return null; // Don't show breadcrumbs for root dashboard
}
diff --git a/surfsense_web/components/layout/providers/LayoutDataProvider.tsx b/surfsense_web/components/layout/providers/LayoutDataProvider.tsx
index 5f4617b84..52dc7196a 100644
--- a/surfsense_web/components/layout/providers/LayoutDataProvider.tsx
+++ b/surfsense_web/components/layout/providers/LayoutDataProvider.tsx
@@ -167,12 +167,6 @@ export function LayoutDataProvider({
icon: SquareLibrary,
isActive: pathname?.includes("/documents"),
},
- // {
- // title: "Logs",
- // url: `/dashboard/${searchSpaceId}/logs`,
- // icon: Logs,
- // isActive: pathname?.includes("/logs"),
- // },
{
title: "Inbox",
url: "#inbox", // Special URL to indicate this is handled differently
diff --git a/surfsense_web/components/layout/ui/sidebar/Sidebar.tsx b/surfsense_web/components/layout/ui/sidebar/Sidebar.tsx
index 336b695ea..f3452749f 100644
--- a/surfsense_web/components/layout/ui/sidebar/Sidebar.tsx
+++ b/surfsense_web/components/layout/ui/sidebar/Sidebar.tsx
@@ -119,11 +119,6 @@ export function Sidebar({
)}
- {/* Platform navigation */}
- {navItems.length > 0 && (
-
- )}
-
{/* Scrollable content */}
{isCollapsed ? (
@@ -235,7 +230,12 @@ export function Sidebar({
{/* Footer */}
-
+
+ {/* Platform navigation */}
+ {navItems.length > 0 && (
+
+ )}
+
{pageUsage && !isCollapsed && (
)}
diff --git a/surfsense_web/components/layout/ui/sidebar/SidebarHeader.tsx b/surfsense_web/components/layout/ui/sidebar/SidebarHeader.tsx
index 6ca057819..5c8c89152 100644
--- a/surfsense_web/components/layout/ui/sidebar/SidebarHeader.tsx
+++ b/surfsense_web/components/layout/ui/sidebar/SidebarHeader.tsx
@@ -1,6 +1,7 @@
"use client";
-import { ChevronsUpDown, Settings, Users } from "lucide-react";
+import { ChevronsUpDown, ScrollText, Settings, Users } from "lucide-react";
+import { useParams, useRouter } from "next/navigation";
import { useTranslations } from "next-intl";
import { Button } from "@/components/ui/button";
import {
@@ -29,6 +30,9 @@ export function SidebarHeader({
className,
}: SidebarHeaderProps) {
const t = useTranslations("sidebar");
+ const router = useRouter();
+ const params = useParams();
+ const searchSpaceId = params.search_space_id as string;
return (
@@ -52,6 +56,10 @@ export function SidebarHeader({
{t("manage_members")}
+
router.push(`/dashboard/${searchSpaceId}/logs`)}>
+
+ {t("logs")}
+
diff --git a/surfsense_web/components/new-chat/model-selector.tsx b/surfsense_web/components/new-chat/model-selector.tsx
index af9378e34..bc7591c51 100644
--- a/surfsense_web/components/new-chat/model-selector.tsx
+++ b/surfsense_web/components/new-chat/model-selector.tsx
@@ -123,6 +123,11 @@ export function ModelSelector({ onEdit, onAddNew, className }: ModelSelectorProp
);
}, [userConfigs, searchQuery]);
+ // Total model count for conditional search display
+ const totalModels = useMemo(() => {
+ return (globalConfigs?.length ?? 0) + (userConfigs?.length ?? 0);
+ }, [globalConfigs, userConfigs]);
+
const handleSelectConfig = useCallback(
async (config: NewLLMConfigPublic | GlobalNewLLMConfig) => {
// If already selected, just close
@@ -212,14 +217,16 @@ export function ModelSelector({ onEdit, onAddNew, className }: ModelSelectorProp
shouldFilter={false}
className="rounded-lg relative [&_[data-slot=command-input-wrapper]]:border-0 [&_[data-slot=command-input-wrapper]]:px-0 [&_[data-slot=command-input-wrapper]]:gap-2"
>
-
-
-
+ {totalModels > 3 && (
+
+
+
+ )}
@@ -245,7 +252,7 @@ export function ModelSelector({ onEdit, onAddNew, className }: ModelSelectorProp
value={`global-${config.id}`}
onSelect={() => handleSelectConfig(config)}
className={cn(
- "mx-2 rounded-lg mb-1 cursor-pointer transition-all",
+ "mx-2 rounded-lg mb-1 cursor-pointer group transition-all",
"hover:bg-accent/50",
isSelected && "bg-accent/80"
)}
@@ -276,7 +283,7 @@ export function ModelSelector({ onEdit, onAddNew, className }: ModelSelectorProp