diff --git a/apps/code/src/renderer/assets/images/graphs-hog.png b/apps/code/src/renderer/assets/images/graphs-hog.png
new file mode 100644
index 000000000..fa0b1e9c7
Binary files /dev/null and b/apps/code/src/renderer/assets/images/graphs-hog.png differ
diff --git a/apps/code/src/renderer/features/inbox/components/InboxSignalsTab.tsx b/apps/code/src/renderer/features/inbox/components/InboxSignalsTab.tsx
index e759cef77..a3a5698a3 100644
--- a/apps/code/src/renderer/features/inbox/components/InboxSignalsTab.tsx
+++ b/apps/code/src/renderer/features/inbox/components/InboxSignalsTab.tsx
@@ -13,21 +13,21 @@ import { useInboxSignalsSidebarStore } from "@features/inbox/stores/inboxSignals
import { buildSignalTaskPrompt } from "@features/inbox/utils/buildSignalTaskPrompt";
import {
buildSignalReportListOrdering,
+ buildStatusFilterParam,
filterReportsBySearch,
} from "@features/inbox/utils/filterReports";
-import {
- INBOX_PIPELINE_STATUS_FILTER,
- INBOX_REFETCH_INTERVAL_MS,
-} from "@features/inbox/utils/inboxConstants";
+import { INBOX_REFETCH_INTERVAL_MS } from "@features/inbox/utils/inboxConstants";
import { useDraftStore } from "@features/message-editor/stores/draftStore";
import { useSettingsDialogStore } from "@features/settings/stores/settingsDialogStore";
import { useCreateTask } from "@features/tasks/hooks/useTasks";
import { useFeatureFlag } from "@hooks/useFeatureFlag";
import { useRepositoryIntegration } from "@hooks/useIntegrations";
import {
+ ArrowDownIcon,
ArrowSquareOutIcon,
ClockIcon,
Cloud as CloudIcon,
+ GithubLogoIcon,
XIcon,
} from "@phosphor-icons/react";
import {
@@ -40,10 +40,13 @@ import {
Select,
Text,
} from "@radix-ui/themes";
+import graphsHog from "@renderer/assets/images/graphs-hog.png";
import { getCloudUrlFromRegion } from "@shared/constants/oauth";
import type {
+ SignalReportArtefact,
SignalReportArtefactsResponse,
SignalReportsQueryParams,
+ SuggestedReviewersArtefact,
} from "@shared/types";
import { useNavigationStore } from "@stores/navigationStore";
import { useRendererWindowFocusStore } from "@stores/rendererWindowFocusStore";
@@ -118,6 +121,7 @@ export function InboxSignalsTab() {
const sortField = useInboxSignalsFilterStore((s) => s.sortField);
const sortDirection = useInboxSignalsFilterStore((s) => s.sortDirection);
const searchQuery = useInboxSignalsFilterStore((s) => s.searchQuery);
+ const statusFilter = useInboxSignalsFilterStore((s) => s.statusFilter);
const { data: signalSourceConfigs } = useSignalSourceConfigs();
const hasSignalSources = signalSourceConfigs?.some((c) => c.enabled) ?? false;
const openSettings = useSettingsDialogStore((s) => s.open);
@@ -128,10 +132,10 @@ export function InboxSignalsTab() {
const inboxQueryParams = useMemo(
(): SignalReportsQueryParams => ({
- status: INBOX_PIPELINE_STATUS_FILTER,
+ status: buildStatusFilterParam(statusFilter),
ordering: buildSignalReportListOrdering(sortField, sortDirection),
}),
- [sortField, sortDirection],
+ [statusFilter, sortField, sortDirection],
);
const {
@@ -201,7 +205,16 @@ export function InboxSignalsTab() {
const artefactsQuery = useInboxReportArtefacts(selectedReport?.id ?? "", {
enabled: !!selectedReport,
});
- const visibleArtefacts = artefactsQuery.data?.results ?? [];
+ const allArtefacts = artefactsQuery.data?.results ?? [];
+ const visibleArtefacts = allArtefacts.filter(
+ (a): a is SignalReportArtefact => a.type !== "suggested_reviewers",
+ );
+ const suggestedReviewers = useMemo(() => {
+ const reviewerArtefact = allArtefacts.find(
+ (a): a is SuggestedReviewersArtefact => a.type === "suggested_reviewers",
+ );
+ return reviewerArtefact?.content ?? [];
+ }, [allArtefacts]);
const artefactsUnavailableReason = artefactsQuery.data?.unavailableReason;
const showArtefactsUnavailable =
!artefactsQuery.isLoading &&
@@ -318,28 +331,70 @@ export function InboxSignalsTab() {
direction="column"
align="center"
justify="center"
- gap="5"
height="100%"
px="5"
- style={{ maxWidth: 480, margin: "0 auto" }}
+ style={{ margin: "0 auto" }}
>
-
+
+
+
- Enable Inbox
-
-
- Inbox automatically analyzes your product data and prioritizes
- actionable tasks. Choose which sources to enable for this project.
+ Welcome to your Inbox
+
+
+
+
+ Background analysis of your data — while you sleep.
+
+
+ Session recordings watched automatically. Issues, tickets, and
+ evals analyzed around the clock.
+
+
+
+
+
+
+ Ready-to-run fixes for real user problems.
+
+
+ Each report includes evidence and impact numbers — just execute
+ the prompt in your agent.
+
+
+
+
-
);
}
@@ -497,6 +552,46 @@ export function InboxSignalsTab() {
+ {suggestedReviewers.length > 0 && (
+
+
+ Suggested reviewers
+
+
+ {suggestedReviewers.map((reviewer) => (
+
+
+
+ {reviewer.user?.first_name ??
+ reviewer.github_name ??
+ reviewer.github_login}
+
+
+ @{reviewer.github_login}
+
+
+ ))}
+
+
+ )}
+
{signals.length > 0 && (