diff --git a/apps/code/src/renderer/features/inbox/components/ReportCard.tsx b/apps/code/src/renderer/features/inbox/components/ReportCard.tsx
index bf018b8f3..9c4b70c36 100644
--- a/apps/code/src/renderer/features/inbox/components/ReportCard.tsx
+++ b/apps/code/src/renderer/features/inbox/components/ReportCard.tsx
@@ -4,7 +4,8 @@ import {
inboxStatusAccentCss,
inboxStatusLabel,
} from "@features/inbox/utils/inboxSort";
-import { Flex, Text } from "@radix-ui/themes";
+import { UserIcon } from "@phosphor-icons/react";
+import { Flex, Text, Tooltip } from "@radix-ui/themes";
import type { SignalReport } from "@shared/types";
import { motion } from "framer-motion";
import type { KeyboardEvent, MouseEvent } from "react";
@@ -118,6 +119,20 @@ export function ReportCard({
{statusLabel}
+ {report.is_suggested_reviewer && (
+
+
+
+
+
+ )}
{/* Summary is outside the title row so wrapped lines align with title text (bullet + gap), not the card edge */}
diff --git a/apps/code/src/renderer/features/inbox/components/SignalsToolbar.tsx b/apps/code/src/renderer/features/inbox/components/SignalsToolbar.tsx
index 0b8d4d4d3..3c2a63ed2 100644
--- a/apps/code/src/renderer/features/inbox/components/SignalsToolbar.tsx
+++ b/apps/code/src/renderer/features/inbox/components/SignalsToolbar.tsx
@@ -1,14 +1,22 @@
import { useInboxSignalsFilterStore } from "@features/inbox/stores/inboxSignalsFilterStore";
+import {
+ inboxStatusAccentCss,
+ inboxStatusLabel,
+} from "@features/inbox/utils/inboxSort";
import {
CalendarPlus,
Check,
Clock,
FunnelSimple as FunnelSimpleIcon,
+ ListNumbers,
MagnifyingGlass,
TrendUp,
} from "@phosphor-icons/react";
-import { Box, Flex, Popover, Text, TextField } from "@radix-ui/themes";
-import type { SignalReportOrderingField } from "@shared/types";
+import { Box, Flex, Popover, Text, TextField, Tooltip } from "@radix-ui/themes";
+import type {
+ SignalReportOrderingField,
+ SignalReportStatus,
+} from "@shared/types";
interface SignalsToolbarProps {
totalCount: number;
@@ -17,16 +25,26 @@ interface SignalsToolbarProps {
livePolling?: boolean;
readyCount?: number;
processingCount?: number;
+ searchDisabledReason?: string | null;
}
type SortOption = {
label: string;
- field: Extract;
+ field: Extract<
+ SignalReportOrderingField,
+ "priority" | "created_at" | "total_weight"
+ >;
direction: "asc" | "desc";
icon: React.ReactNode;
};
const sortOptions: SortOption[] = [
+ {
+ label: "Priority",
+ field: "priority",
+ direction: "asc",
+ icon: ,
+ },
{
label: "Strongest signal",
field: "total_weight",
@@ -47,6 +65,14 @@ const sortOptions: SortOption[] = [
},
];
+const FILTERABLE_STATUSES: SignalReportStatus[] = [
+ "ready",
+ "pending_input",
+ "in_progress",
+ "candidate",
+ "potential",
+];
+
export function SignalsToolbar({
totalCount,
filteredCount,
@@ -54,12 +80,15 @@ export function SignalsToolbar({
livePolling = false,
readyCount,
processingCount = 0,
+ searchDisabledReason,
}: SignalsToolbarProps) {
const searchQuery = useInboxSignalsFilterStore((s) => s.searchQuery);
const setSearchQuery = useInboxSignalsFilterStore((s) => s.setSearchQuery);
const sortField = useInboxSignalsFilterStore((s) => s.sortField);
const sortDirection = useInboxSignalsFilterStore((s) => s.sortDirection);
const setSort = useInboxSignalsFilterStore((s) => s.setSort);
+ const statusFilter = useInboxSignalsFilterStore((s) => s.statusFilter);
+ const toggleStatus = useInboxSignalsFilterStore((s) => s.toggleStatus);
const countLabel = isSearchActive
? `${filteredCount} of ${totalCount}`
@@ -103,31 +132,38 @@ export function SignalsToolbar({
) : null}
-
- setSearchQuery(e.target.value)}
- className="text-[12px]"
- >
-
-
-
-
+
+ setSearchQuery(e.target.value)}
+ className="text-[12px]"
+ disabled={!!searchDisabledReason}
+ >
+
+
+
+
+
);
}
-function SortMenu({
+function FilterSortMenu({
sortField,
sortDirection,
onSort,
+ statusFilter,
+ onToggleStatus,
}: {
sortField: string;
sortDirection: string;
@@ -135,6 +171,8 @@ function SortMenu({
field: SortOption["field"],
direction: SortOption["direction"],
) => void;
+ statusFilter: SignalReportStatus[];
+ onToggleStatus: (status: SignalReportStatus) => void;
}) {
const itemClassName =
"flex w-full items-center justify-between rounded-sm px-1 py-1 text-left text-[13px] text-gray-12 transition-colors hover:bg-gray-3";
@@ -144,7 +182,7 @@ function SortMenu({