From 9b7ccae82dd248a0dfdab51374b70573c26a991c Mon Sep 17 00:00:00 2001 From: Jinjing <6427696+AmethystLiang@users.noreply.github.com> Date: Wed, 2 Sep 2026 14:55:02 -0700 Subject: [PATCH] refactor: centralize thread filter value domains Consolidate filter value definitions in agents-view-thread-filters and use them in Zod schema validation to ensure consistent, persistent serialization of filter state. --- src/main/runtime/rpc/methods/client-ui-schemas.ts | 8 ++++++-- src/shared/ui-chrome-types.ts | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/runtime/rpc/methods/client-ui-schemas.ts b/src/main/runtime/rpc/methods/client-ui-schemas.ts index 688de5c3f36..c772ba2fe67 100644 --- a/src/main/runtime/rpc/methods/client-ui-schemas.ts +++ b/src/main/runtime/rpc/methods/client-ui-schemas.ts @@ -3,6 +3,10 @@ import { isFeatureInteractionId, type FeatureInteractionId } from '../../../../shared/feature-interactions' +import { + ACTIVITY_GROUP_BY_VALUES, + THREAD_READ_FILTER_VALUES +} from '../../../../shared/agents-view-thread-filters' import { isFeatureTipId } from '../../../../shared/feature-tips' import { isReleaseChannel, type ReleaseChannel } from '../../../../shared/release-channel' import { @@ -126,8 +130,8 @@ const UiUpdateFields = z agentsFilterRepoIds: StringArray.optional(), agentsShowChildAgents: z.boolean().optional(), agentsCompactMode: z.boolean().optional(), - agentsReadFilter: z.enum(['all', 'unread']).optional(), - agentsGroupBy: z.enum(['none', 'status', 'project', 'worktree', 'agent']).optional(), + agentsReadFilter: z.enum(THREAD_READ_FILTER_VALUES).optional(), + agentsGroupBy: z.enum(ACTIVITY_GROUP_BY_VALUES).optional(), workspaceHostOrder: z.array(z.string()).optional(), automationHostFilter: z .union([ diff --git a/src/shared/ui-chrome-types.ts b/src/shared/ui-chrome-types.ts index 376b80b9d9a..fe6157d870b 100644 --- a/src/shared/ui-chrome-types.ts +++ b/src/shared/ui-chrome-types.ts @@ -49,8 +49,9 @@ export type WorktreeCardMode = 'Default' | 'Compact' export type AgentActivityDisplayMode = 'compact' | 'full' -export type ThreadReadFilter = 'all' | 'unread' -export type ActivityGroupBy = 'none' | 'status' | 'project' | 'worktree' | 'agent' +// Re-exported so existing importers keep one home for UI chrome types; the +// value domain lives with the normalizers that police it. +export type { ActivityGroupBy, ThreadReadFilter } from './agents-view-thread-filters' export type StatusBarItem = | 'claude'