Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/plans/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ choices, immutable log).
which tools are actually attached. The demand-side counterpart to `mcp.md`.
- [Compare two runs side-by-side](compare-runs.md) — pick any two runs and
view them in a split layout that surfaces what diverged.
- [Evals](evals.md) — ingestion shape for eval results plus the open
questions on data model and UI.
- [Evaluation](evaluation.md) — scores, human annotations, datasets, and an
in-app LLM-judge runner, built emitter-agnostic on OTel `gen_ai.evaluation.*`.
- [HTTP API for LLM debugging](http-api.md) — expose loupe's
classification / reconstruction / aggregation views over plain endpoints so
an LLM-driven dev tool can pull run data while a developer is debugging.
Expand Down
2 changes: 1 addition & 1 deletion docs/plans/compare-runs.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Goal: pick any two runs (same agent, different agents, regression vs main, etc.)
- [ ] Permalink that captures view mode + selection.
- [ ] "Pick a third run" → N-way compare (probably never; 2 covers 95% of regression workflows).
- [ ] Diff rules editor: ignore timing drift under X ms, ignore certain attribute keys.
- [ ] Save a comparison as a "baseline" — ties into the evals comparison story in `docs/plans/evals.md`.
- [ ] Save a comparison as a "baseline" — ties into the evals comparison story in `docs/plans/evaluation.md`.

## Non-goals (v1)

Expand Down
157 changes: 0 additions & 157 deletions docs/plans/evals.md

This file was deleted.

35 changes: 12 additions & 23 deletions src/components/app-sidebar.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import {
InboxIcon,
KeyboardIcon,
Logout01Icon,
Moon01Icon,
Expand Down Expand Up @@ -41,9 +40,9 @@ import {
SidebarMenuButton,
SidebarMenuItem,
} from '#/components/ui/sidebar'
import { useChangelogUnseen } from '#/hooks/use-changelog-unseen'
import { useUser, useUserId } from '#/hooks/use-user'
import { DEFAULT } from '#/lib/time-range'
import { inboxUnreadCountQuery } from '#/routes/inbox/-data'
import { currentUserSessionsQuery } from '#/routes/sessions/-data'

const APP_VERSION = `v${__APP_VERSION__}`
Expand All @@ -54,7 +53,7 @@ const WORKBENCH_NAV = NAV_ITEMS.filter((n) => n.group === 'workbench')
export function AppSidebar() {
const pathname = useRouterState({ select: (s) => s.location.pathname })
const [settingsOpen, setSettingsOpen] = useState(false)
const { data: unreadCount = 0 } = useQuery(inboxUnreadCountQuery())
const changelogUnseen = useChangelogUnseen(__APP_VERSION__)
const [userId] = useUserId()
const { data: recentData } = useQuery(currentUserSessionsQuery(DEFAULT, userId))
const recentSessions = recentData?.sessions ?? []
Expand Down Expand Up @@ -138,22 +137,18 @@ export function AppSidebar() {
</SidebarMenuButton>
</SidebarMenuItem>
<SidebarMenuItem>
<SidebarMenuButton asChild isActive={pathname.startsWith('/inbox')}>
<Link to="/inbox">
<span className="relative shrink-0">
<HugeiconsIcon icon={InboxIcon} className="size-4 shrink-0" />
{unreadCount > 0 && (
<span className="pointer-events-none absolute -top-1 -right-1 flex">
<span className="absolute inline-flex h-full w-full animate-ping rounded-full bg-destructive opacity-60" />
<span className="relative inline-flex min-w-3.5 items-center justify-center rounded-full bg-destructive px-1 text-center text-[9px]/3.5 font-semibold text-destructive-foreground shadow-sm">
{unreadCount > 99 ? '99+' : unreadCount}
</span>
</span>
)}
</span>
<span>Inbox</span>
<SidebarMenuButton asChild isActive={pathname.startsWith('/changelog')}>
<Link to="/changelog">
<HugeiconsIcon icon={News01Icon} className="size-4 shrink-0" />
<span>Changelog</span>
</Link>
</SidebarMenuButton>
{changelogUnseen && (
<SidebarMenuBadge className="pointer-events-none" title="New release">
<span className="size-2 rounded-full bg-primary" />
<span className="sr-only">New release</span>
</SidebarMenuBadge>
)}
</SidebarMenuItem>
</SidebarMenu>
</SidebarGroupContent>
Expand Down Expand Up @@ -251,12 +246,6 @@ function NavUser() {
<HugeiconsIcon icon={KeyboardIcon} />
Keyboard shortcuts
</DropdownMenuItem>
<DropdownMenuItem asChild>
<Link to="/changelog">
<HugeiconsIcon icon={News01Icon} />
Changelog
</Link>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuItem asChild>
Expand Down
2 changes: 0 additions & 2 deletions src/components/inspect/view-bar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import {
INSPECT_AUTO_REFRESH_OPTIONS,
} from '#/components/auto-refresh-select'
import { IconTabs } from '#/components/icon-tabs'
import { Separator } from '#/components/ui/separator'
import { Toggle } from '#/components/ui/toggle'
import { Tooltip, TooltipContent, TooltipTrigger } from '#/components/ui/tooltip'

Expand Down Expand Up @@ -73,7 +72,6 @@ export function InspectViewBar({
</TooltipContent>
</Tooltip>
)}
{showRawAll && (hasRefreshGroup || extras != null) && <Separator orientation="vertical" className="mx-1 h-5" />}
{hasRefreshGroup && (
<AutoRefreshSelect
value={autoRefresh}
Expand Down
Loading