Skip to content

feat(agent-applications): searchable/paged agents list + UI polish#2868

Closed
benjackwhite wants to merge 1 commit into
agent-builder-cross-project-approvalsfrom
agent-ui-fixes
Closed

feat(agent-applications): searchable/paged agents list + UI polish#2868
benjackwhite wants to merge 1 commit into
agent-builder-cross-project-approvalsfrom
agent-ui-fixes

Conversation

@benjackwhite

Copy link
Copy Markdown
Contributor

Summary

General fixes and enhancements across the agent-applications UI. Targets agent-builder-cross-project-approvals (not main) since the whole agent-applications feature lives on that branch — so this diff is just the UI changes.

  • Activity first — moved the 7-day Activity KPI strip to the top of the Applications view, above the fleet list.
  • Agents list: search + filter + paging — added a search box (matches name / slug / description), status filter pills (All / Live / Drafts with counts), and client-side paging (8/page, Prev / Next + "Showing X–Y of Z"). Live agents sort ahead of drafts; new "No matching agents" empty state for filtered-to-empty.
  • Pill spacing — filter pills were gap="1.5", which isn't a valid Radix space token (rendered ~0 gap → bunched). Bumped pill groups to gap="2" across sessions, approvals, fleet approvals, and the memory files/tables toggle.
  • Responsive sessions toolbar — the filter/search row now wraps so the user <select> + refresh no longer overflow on narrow widths (select gets min-w-0 max-w-full). Same wrap applied to the approvals toolbars.
  • Memory keeps focus on dock toggle — toggling the agent builder dock used to swap the layout between bare children and a PanelGroup, remounting the entire /code/agents subtree and resetting the memory pane's selected file. The content panel is now always mounted; only the dock panel + resize handle toggle. This also preserves sessions filters and scroll position across toggles.
  • Scrollable detail tabs — the 8-tab agent detail bar is now horizontally scrollable (scrollbar-overlay, thin auto-hiding bar) when the pane is too narrow. Left the top-level Scouts/Applications bar alone — 2 short tabs that won't overflow, and its underline uses per-tab -mb-px that overflow-y:hidden would clip.

Files

  • AgentApplicationsListView.tsx — activity-first reorder + search/filter/paging
  • AgentBuilderDockLayout.tsx — keep content panel mounted across dock toggle
  • AgentDetailLayout.tsx — scrollable tab bar
  • AgentSessionsPane.tsx, AgentApprovalsPane.tsx, AgentFleetApprovalsPane.tsx, AgentMemoryPane.tsx — pill spacing + responsive toolbars

Test plan

  • biome check (lint + format) — clean
  • tsc --noEmit for @posthog/ui (via turbo typecheck, deps built) — passes
  • Manual: search/filter/page the agents list; toggle the dock on the Memory tab and confirm the open file stays selected; narrow the window and confirm the sessions toolbar wraps and the detail tabs scroll

Static verification only (lint + typecheck); not yet driven in the running Electron app.

🤖 Generated with Claude Code

General fixes and enhancements across the agent-applications UI:

- Activity-first: move the 7-day Activity KPI strip to the top of the
  Applications view, above the fleet list.
- Agents list: add search (name/slug/description), a status filter
  (All/Live/Drafts with counts), and client-side paging (8/page).
- Pills: fix bunched filter pills. gap="1.5" is not a valid Radix space
  token (renders ~0 gap); bump pill groups to gap="2" across sessions,
  approvals, fleet approvals, and the memory files/tables toggle.
- Sessions: wrap the filter/search toolbar responsively so the user
  select + refresh no longer overflow on narrow widths.
- Memory: keep the open file selected when toggling the agent builder
  dock. The dock layout previously swapped between bare children and a
  PanelGroup, remounting the whole /code/agents subtree; now the content
  panel is always mounted and only the dock panel + handle toggle.
- Header: make the 8-tab agent detail bar horizontally scrollable when
  the pane is too narrow.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

React Doctor found no issues in the changed files. 🎉

Reviewed by React Doctor for commit 4eca1ce.

@greptile-apps

greptile-apps Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "feat(agent-applications): searchable/pag..." | Re-trigger Greptile

Comment on lines +115 to +119
const statusFilters: { id: StatusFilter; label: string; count: number }[] = [
{ id: "all", label: "All", count: allApps.length },
{ id: "live", label: "Live", count: liveCount },
{ id: "drafts", label: "Drafts", count: draftCount },
];

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Status pill counts don't update with search query

liveCount and draftCount are derived from allApps (all agents, regardless of search), so typing "my-bot" in the search box and switching to "Live" shows "Live (10)" in the pill while only 2 live matches appear in the list. The discrepancy is likely to confuse users: the count implies what clicking the pill will show, but here it doesn't.

If the intention is to show universe totals (a valid pattern), a visual separator between query-filtered count and universe count would help — e.g. "2 / 10" or a note "2 matching". Alternatively, compute the counts after applying the search query only, so clicking "Live (2)" is self-consistent.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment on lines +176 to +193
<div className="scrollbar-overlay -mb-px">
<Flex gap="1" className="w-max">
{TABS.map((tab) => (
<Link
key={tab.id}
to={tab.to}
params={{ idOrSlug }}
className={`shrink-0 whitespace-nowrap border-b-2 px-3 pb-2.5 text-[12.5px] no-underline ${
tab.id === activeTab
? "border-(--accent-9) font-medium text-gray-12"
: "border-transparent text-gray-11 hover:text-gray-12"
}`}
>
{tab.label}
</Link>
))}
</Flex>
</div>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Active tab not scrolled into view on navigation

The scrollable tab bar doesn't auto-scroll to reveal the active tab when the user navigates to a URL directly (or via a link). With 8 tabs in a narrow builder pane, the active indicator for "Chat" (the last tab) is completely off-screen if the bar opens in its default position. Adding a ref on the active <Link> and calling el.scrollIntoView({ inline: 'nearest', block: 'nearest' }) in a useEffect keyed on activeTab would fix this with very little code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant