From b6e1d0c4810581bd5a4e68b990601ac3c1f90cc8 Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Thu, 12 Feb 2026 11:03:27 +0700 Subject: [PATCH] fix(ui): add trim validation for composite tier model fields - Use z.string().trim().min(1) to reject whitespace-only models - Apply to all 3 tiers (opus, sonnet, haiku) in both dialogs --- ui/src/components/cliproxy/cliproxy-dialog.tsx | 6 +++--- ui/src/components/cliproxy/cliproxy-edit-dialog.tsx | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ui/src/components/cliproxy/cliproxy-dialog.tsx b/ui/src/components/cliproxy/cliproxy-dialog.tsx index bae5703a..0642596a 100644 --- a/ui/src/components/cliproxy/cliproxy-dialog.tsx +++ b/ui/src/components/cliproxy/cliproxy-dialog.tsx @@ -37,17 +37,17 @@ const compositeSchema = z.object({ tiers: z.object({ opus: z.object({ provider: z.enum(CLIPROXY_PROVIDERS, { message: 'Provider is required' }), - model: z.string().min(1, 'Model is required'), + model: z.string().trim().min(1, 'Model is required'), account: z.string().optional(), }), sonnet: z.object({ provider: z.enum(CLIPROXY_PROVIDERS, { message: 'Provider is required' }), - model: z.string().min(1, 'Model is required'), + model: z.string().trim().min(1, 'Model is required'), account: z.string().optional(), }), haiku: z.object({ provider: z.enum(CLIPROXY_PROVIDERS, { message: 'Provider is required' }), - model: z.string().min(1, 'Model is required'), + model: z.string().trim().min(1, 'Model is required'), account: z.string().optional(), }), }), diff --git a/ui/src/components/cliproxy/cliproxy-edit-dialog.tsx b/ui/src/components/cliproxy/cliproxy-edit-dialog.tsx index bd770584..9ac4a329 100644 --- a/ui/src/components/cliproxy/cliproxy-edit-dialog.tsx +++ b/ui/src/components/cliproxy/cliproxy-edit-dialog.tsx @@ -27,17 +27,17 @@ const compositeSchema = z.object({ tiers: z.object({ opus: z.object({ provider: z.enum(CLIPROXY_PROVIDERS, { message: 'Provider is required' }), - model: z.string().min(1, 'Model is required'), + model: z.string().trim().min(1, 'Model is required'), account: z.string().optional(), }), sonnet: z.object({ provider: z.enum(CLIPROXY_PROVIDERS, { message: 'Provider is required' }), - model: z.string().min(1, 'Model is required'), + model: z.string().trim().min(1, 'Model is required'), account: z.string().optional(), }), haiku: z.object({ provider: z.enum(CLIPROXY_PROVIDERS, { message: 'Provider is required' }), - model: z.string().min(1, 'Model is required'), + model: z.string().trim().min(1, 'Model is required'), account: z.string().optional(), }), }),