From f800374f3a9b350f276f0f3ebd098932fd909e7a Mon Sep 17 00:00:00 2001 From: Forgotten Date: Mon, 23 Feb 2026 15:13:59 -0600 Subject: [PATCH] feat(ui): add "See All" link to agent detail Recent Issues section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove the issue count from the Recent Issues heading and add a "See All →" link that navigates to /issues?assignee={agentId}. The Issues page now reads the assignee query param and pre-filters the list to show that agent's issues. Co-Authored-By: Claude Opus 4.6 --- ui/src/components/IssuesList.tsx | 9 ++++++++- ui/src/pages/AgentDetail.tsx | 7 ++++++- ui/src/pages/Issues.tsx | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/ui/src/components/IssuesList.tsx b/ui/src/components/IssuesList.tsx index 0a465155..41fc53bc 100644 --- a/ui/src/components/IssuesList.tsx +++ b/ui/src/components/IssuesList.tsx @@ -125,6 +125,7 @@ interface IssuesListProps { liveIssueIds?: Set; projectId?: string; viewStateKey: string; + initialAssignees?: string[]; onUpdateIssue: (id: string, data: Record) => void; } @@ -136,11 +137,17 @@ export function IssuesList({ liveIssueIds, projectId, viewStateKey, + initialAssignees, onUpdateIssue, }: IssuesListProps) { const { openNewIssue } = useDialog(); - const [viewState, setViewState] = useState(() => getViewState(viewStateKey)); + const [viewState, setViewState] = useState(() => { + if (initialAssignees) { + return { ...defaultViewState, assignees: initialAssignees, statuses: [] }; + } + return getViewState(viewStateKey); + }); const updateView = useCallback((patch: Partial) => { setViewState((prev) => { diff --git a/ui/src/pages/AgentDetail.tsx b/ui/src/pages/AgentDetail.tsx index bb3d9951..f8f2addf 100644 --- a/ui/src/pages/AgentDetail.tsx +++ b/ui/src/pages/AgentDetail.tsx @@ -708,7 +708,12 @@ function AgentOverview({ {/* Recent Issues */}
-

Recent Issues ({assignedIssues.length})

+
+

Recent Issues

+ + See All → + +
{assignedIssues.length === 0 ? (

No assigned issues.

) : ( diff --git a/ui/src/pages/Issues.tsx b/ui/src/pages/Issues.tsx index aaf5c287..45cfd750 100644 --- a/ui/src/pages/Issues.tsx +++ b/ui/src/pages/Issues.tsx @@ -1,4 +1,5 @@ import { useEffect, useMemo } from "react"; +import { useSearchParams } from "react-router-dom"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { issuesApi } from "../api/issues"; import { agentsApi } from "../api/agents"; @@ -13,6 +14,7 @@ import { CircleDot } from "lucide-react"; export function Issues() { const { selectedCompanyId } = useCompany(); const { setBreadcrumbs } = useBreadcrumbs(); + const [searchParams] = useSearchParams(); const queryClient = useQueryClient(); const { data: agents } = useQuery({ @@ -66,6 +68,7 @@ export function Issues() { agents={agents} liveIssueIds={liveIssueIds} viewStateKey="paperclip:issues-view" + initialAssignees={searchParams.get("assignee") ? [searchParams.get("assignee")!] : undefined} onUpdateIssue={(id, data) => updateIssue.mutate({ id, data })} /> );