From be72ee09ca116dbdd146cd948dcf8adbb7c88019 Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Thu, 10 Sep 2026 23:22:05 -0700 Subject: [PATCH] Improve agent status search view with consistent search fields Standardize search placeholder text to "Search for X..." format across agent, workspace, and worktree pickers. Update input styling for visual consistency with design system (borders, background, focus states, and text size). Add new i18n entries for agent search string. --- .../activity/activity-thread-list-toolbar.tsx | 12 ++++++------ .../AgentMapWorkspaceContextMenu.test.tsx | 2 +- .../new-workspace/ComposerParentWorktreePicker.tsx | 2 +- .../components/sidebar/SidebarAgentsList.test.tsx | 4 +++- .../src/components/sidebar/SidebarAgentsList.tsx | 6 +++--- .../sidebar/WorkspaceKanbanSearchField.tsx | 4 ++-- .../sidebar/WorktreeParentPickerPopover.tsx | 2 +- src/renderer/src/i18n/locales/en.json | 7 ++++--- src/renderer/src/i18n/locales/es.json | 1 + src/renderer/src/i18n/locales/fr.json | 1 + src/renderer/src/i18n/locales/ja.json | 1 + src/renderer/src/i18n/locales/ko.json | 1 + src/renderer/src/i18n/locales/zh.json | 1 + 13 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/renderer/src/components/activity/activity-thread-list-toolbar.tsx b/src/renderer/src/components/activity/activity-thread-list-toolbar.tsx index c39d14c7de5..7ad28b4c72e 100644 --- a/src/renderer/src/components/activity/activity-thread-list-toolbar.tsx +++ b/src/renderer/src/components/activity/activity-thread-list-toolbar.tsx @@ -74,11 +74,11 @@ export function ActivityThreadListToolbar({ value={query} onChange={(event) => onQueryChange(event.target.value)} placeholder={translate( - 'auto.components.activity.ActivityPrototypePage.795cbf26e2', - 'Filter...' + 'auto.components.activity.ActivityPrototypePage.searchAgent', + 'Search for agents...' )} className={cn( - 'h-7 w-full pl-6 text-[11px] shadow-none focus-visible:ring-0', + 'h-7 w-full border border-border/80 bg-background pl-6 text-xs shadow-none placeholder:text-xs focus-visible:border-ring/70 focus-visible:ring-0 dark:border-white/15 dark:bg-white/[0.04]', query ? 'pr-6' : '' )} /> @@ -109,7 +109,7 @@ export function ActivityThreadListToolbar({ > @@ -212,7 +212,7 @@ export function ActivityThreadListToolbar({ type="button" variant="ghost" size="sm" - className="h-7 gap-1 px-2 text-[11px] text-muted-foreground hover:text-foreground" + className="h-7 gap-1 px-2 text-xs text-muted-foreground hover:text-foreground" onClick={onClearCompleted} disabled={!hasCompletedThreads} > diff --git a/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx b/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx index bc4958408a2..a03329e1a91 100644 --- a/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx +++ b/src/renderer/src/components/dashboard-popout/AgentMapWorkspaceContextMenu.test.tsx @@ -300,7 +300,7 @@ describe('Agent Map workspace context menu', () => { fireEvent.click(setParent) // Candidate rows are virtualized and measure 0 in happy-dom; the mounted // search input is the picker's lifecycle signal. - expect(await screen.findByPlaceholderText('Search worktrees...')).toBeInTheDocument() + expect(await screen.findByPlaceholderText('Search for worktrees...')).toBeInTheDocument() }) it('opens the existing worktree composer from a project ring', async () => { diff --git a/src/renderer/src/components/new-workspace/ComposerParentWorktreePicker.tsx b/src/renderer/src/components/new-workspace/ComposerParentWorktreePicker.tsx index 41c22978f14..4e63832595d 100644 --- a/src/renderer/src/components/new-workspace/ComposerParentWorktreePicker.tsx +++ b/src/renderer/src/components/new-workspace/ComposerParentWorktreePicker.tsx @@ -358,7 +358,7 @@ function ParentWorktreeCandidateList({ wrapperClassName="shrink-0" placeholder={translate( 'auto.components.ComposerParentWorktreePicker.searchPlaceholder', - 'Search workspaces...' + 'Search for workspaces...' )} /> diff --git a/src/renderer/src/components/sidebar/SidebarAgentsList.test.tsx b/src/renderer/src/components/sidebar/SidebarAgentsList.test.tsx index 41b9c122fa8..f38dadf1254 100644 --- a/src/renderer/src/components/sidebar/SidebarAgentsList.test.tsx +++ b/src/renderer/src/components/sidebar/SidebarAgentsList.test.tsx @@ -42,7 +42,9 @@ it('preserves workspace focus on mount and focuses search only when explicitly e ) - expect(view.getByRole('textbox', { name: 'Search' })).toBeTruthy() + const searchInput = view.getByRole('textbox', { name: 'Search' }) + expect(searchInput).toBeTruthy() + expect(searchInput.getAttribute('placeholder')).toBe('Search for agents...') expect(document.activeElement).toBe(workspaceInput) fireEvent.keyDown(view.getByRole('textbox', { name: 'Search' }), { key: 'Escape' }) diff --git a/src/renderer/src/components/sidebar/SidebarAgentsList.tsx b/src/renderer/src/components/sidebar/SidebarAgentsList.tsx index cd782457d64..9d2b1171c77 100644 --- a/src/renderer/src/components/sidebar/SidebarAgentsList.tsx +++ b/src/renderer/src/components/sidebar/SidebarAgentsList.tsx @@ -124,10 +124,10 @@ export default function SidebarAgentsList({ } }} placeholder={translate( - 'auto.components.activity.ActivityPrototypePage.795cbf26e2', - 'Filter...' + 'auto.components.activity.ActivityPrototypePage.searchAgent', + 'Search for agents...' )} - className="h-7 w-full text-[11px] shadow-none focus-visible:ring-0" + className="h-7 w-full border border-border/80 bg-background text-[11px] shadow-none placeholder:text-[10px] focus-visible:border-ring/70 focus-visible:ring-0 dark:border-white/15 dark:bg-white/[0.04]" aria-label={translate( 'auto.components.activity.ActivityPrototypePage.search', 'Search' diff --git a/src/renderer/src/components/sidebar/WorkspaceKanbanSearchField.tsx b/src/renderer/src/components/sidebar/WorkspaceKanbanSearchField.tsx index d55b9d084f8..aee64e2ebb0 100644 --- a/src/renderer/src/components/sidebar/WorkspaceKanbanSearchField.tsx +++ b/src/renderer/src/components/sidebar/WorkspaceKanbanSearchField.tsx @@ -104,11 +104,11 @@ export default function WorkspaceKanbanSearchField({ value={query} aria-label={translate( 'auto.components.sidebar.WorkspaceKanbanSearchField.c0cd6bdf6c', - 'Search workspaces' + 'Search for workspaces...' )} placeholder={translate( 'auto.components.sidebar.WorkspaceKanbanSearchField.c0cd6bdf6c', - 'Search workspaces' + 'Search for workspaces...' )} aria-invalid={isTooLarge || undefined} className="h-7 border-worktree-sidebar-border bg-background pl-7 text-xs" diff --git a/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.tsx b/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.tsx index 8647dabbcdd..1fbd2ef9af8 100644 --- a/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.tsx +++ b/src/renderer/src/components/sidebar/WorktreeParentPickerPopover.tsx @@ -357,7 +357,7 @@ export function WorktreeParentPickerPopover({ wrapperClassName="shrink-0" placeholder={translate( 'auto.components.sidebar.WorktreeParentPickerPopover.searchPlaceholder', - 'Search worktrees...' + 'Search for worktrees...' )} /> diff --git a/src/renderer/src/i18n/locales/en.json b/src/renderer/src/i18n/locales/en.json index fb1f37eab9b..ec1cd9986f0 100644 --- a/src/renderer/src/i18n/locales/en.json +++ b/src/renderer/src/i18n/locales/en.json @@ -6032,7 +6032,7 @@ "WorktreeParentPickerPopover": { "failedSetParent": "Failed to set parent worktree", "current": "Current", - "searchPlaceholder": "Search worktrees...", + "searchPlaceholder": "Search for worktrees...", "empty": "No matching eligible worktrees.", "setParentFor": "Set parent for" }, @@ -6167,7 +6167,7 @@ "WorkspaceKanbanSearchField": { "bdb753c78d": "No workspaces match", "4d96c209d6": "{{value0}} of {{value1}} workspaces match", - "c0cd6bdf6c": "Search workspaces", + "c0cd6bdf6c": "Search for workspaces...", "3b7ea51793": "Clear search", "7f1c2e94a5": "Search text is too long — the board is unfiltered", "9a4d0f6b21": "Too long" @@ -16253,6 +16253,7 @@ "clearCompleted": "Clear completed", "none": "None", "search": "Search", + "searchAgent": "Search for agents...", "showUnreadOnly": "Show unread only", "showChildAgents": "Show child agents", "activityOptions": "Activity options", @@ -16879,7 +16880,7 @@ "label": "Parent worktree", "noParent": "No parent", "description": "Nests this workspace under another in the sidebar. Does not change the base branch.", - "searchPlaceholder": "Search workspaces...", + "searchPlaceholder": "Search for workspaces...", "noMatches": "No matches." }, "browserPane": { diff --git a/src/renderer/src/i18n/locales/es.json b/src/renderer/src/i18n/locales/es.json index cc2f2140612..7ff5e81fe24 100644 --- a/src/renderer/src/i18n/locales/es.json +++ b/src/renderer/src/i18n/locales/es.json @@ -14190,6 +14190,7 @@ "clearCompleted": "Borrar completados", "none": "Ninguno", "search": "Buscar", + "searchAgent": "Buscar agentes...", "showUnreadOnly": "Mostrar solo no leídos", "showChildAgents": "Mostrar agentes secundarios", "activityOptions": "Opciones de actividad", diff --git a/src/renderer/src/i18n/locales/fr.json b/src/renderer/src/i18n/locales/fr.json index db35a124c7d..02e6c8eeac4 100644 --- a/src/renderer/src/i18n/locales/fr.json +++ b/src/renderer/src/i18n/locales/fr.json @@ -15458,6 +15458,7 @@ "4a3986b200": "Statut", "770d458144": "Grouper l'activité des agents par", "795cbf26e2": "Filtrer...", + "searchAgent": "Rechercher des agents...", "4616ea39fd": "Aller à l'espace de travail", "threadListOptionsFiltered": "Options de la liste des fils, filtres actifs", "showSearch": "Afficher la recherche", diff --git a/src/renderer/src/i18n/locales/ja.json b/src/renderer/src/i18n/locales/ja.json index f5a8c53a8c5..e092a289502 100644 --- a/src/renderer/src/i18n/locales/ja.json +++ b/src/renderer/src/i18n/locales/ja.json @@ -14190,6 +14190,7 @@ "clearCompleted": "完了済みをクリア", "none": "なし", "search": "検索", + "searchAgent": "エージェントを検索...", "showUnreadOnly": "未読のみ表示", "showChildAgents": "子 Agent を表示", "activityOptions": "アクティビティのオプション", diff --git a/src/renderer/src/i18n/locales/ko.json b/src/renderer/src/i18n/locales/ko.json index 9267742bb1c..cd28035639f 100644 --- a/src/renderer/src/i18n/locales/ko.json +++ b/src/renderer/src/i18n/locales/ko.json @@ -14268,6 +14268,7 @@ "clearCompleted": "완료된 항목 지우기", "none": "없음", "search": "검색", + "searchAgent": "에이전트 검색...", "showUnreadOnly": "읽지 않은 항목만 표시", "showChildAgents": "하위 에이전트 표시", "activityOptions": "활동 옵션", diff --git a/src/renderer/src/i18n/locales/zh.json b/src/renderer/src/i18n/locales/zh.json index 85bfdc384db..1724721a33e 100644 --- a/src/renderer/src/i18n/locales/zh.json +++ b/src/renderer/src/i18n/locales/zh.json @@ -14268,6 +14268,7 @@ "clearCompleted": "清除已完成", "none": "无", "search": "搜索", + "searchAgent": "搜索 Agent...", "showUnreadOnly": "仅显示未读", "showChildAgents": "显示子智能体", "activityOptions": "活动选项",