From f8108b1a6c76ae28dcc008c800927a763c344b7c Mon Sep 17 00:00:00 2001 From: Monoquark Date: Sat, 24 Jan 2026 21:23:30 +0100 Subject: [PATCH 1/3] fix: Remove mandatory Claude check for Project Settings -> Models --- .../project-models-section.tsx | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/apps/ui/src/components/views/project-settings-view/project-models-section.tsx b/apps/ui/src/components/views/project-settings-view/project-models-section.tsx index 5102d243..6dc7fd2b 100644 --- a/apps/ui/src/components/views/project-settings-view/project-models-section.tsx +++ b/apps/ui/src/components/views/project-settings-view/project-models-section.tsx @@ -349,7 +349,9 @@ function PhaseGroup({ ); } - +/** + * Renders the per-project model overrides UI for all phase models. + */ export function ProjectModelsSection({ project }: ProjectModelsSectionProps) { const { clearAllProjectPhaseModelOverrides, disabledProviders, claudeCompatibleProviders } = useAppStore(); @@ -360,25 +362,10 @@ export function ProjectModelsSection({ project }: ProjectModelsSectionProps) { const hasDefaultFeatureModelOverride = !!project.defaultFeatureModel; const overrideCount = phaseOverrideCount + (hasDefaultFeatureModelOverride ? 1 : 0); - // Check if Claude is available - const isClaudeDisabled = disabledProviders.includes('claude'); - // Check if there are any enabled ClaudeCompatibleProviders const hasEnabledProviders = claudeCompatibleProviders && claudeCompatibleProviders.some((p) => p.enabled !== false); - if (isClaudeDisabled) { - return ( -
- -

Claude not configured

-

- Enable Claude in global settings to configure per-project model overrides. -

-
- ); - } - const handleClearAll = () => { clearAllProjectPhaseModelOverrides(project.id); }; From 43d5ec9aed80da772f535462262214b9fb566a98 Mon Sep 17 00:00:00 2001 From: Monoquark <24584001+Monoquark@users.noreply.github.com> Date: Sat, 24 Jan 2026 21:37:18 +0100 Subject: [PATCH 2/3] refactor: Remove unused disableProviders variable Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../views/project-settings-view/project-models-section.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/ui/src/components/views/project-settings-view/project-models-section.tsx b/apps/ui/src/components/views/project-settings-view/project-models-section.tsx index 6dc7fd2b..94ecd077 100644 --- a/apps/ui/src/components/views/project-settings-view/project-models-section.tsx +++ b/apps/ui/src/components/views/project-settings-view/project-models-section.tsx @@ -353,7 +353,7 @@ function PhaseGroup({ * Renders the per-project model overrides UI for all phase models. */ export function ProjectModelsSection({ project }: ProjectModelsSectionProps) { - const { clearAllProjectPhaseModelOverrides, disabledProviders, claudeCompatibleProviders } = + const { clearAllProjectPhaseModelOverrides, claudeCompatibleProviders } = useAppStore(); const [showBulkReplace, setShowBulkReplace] = useState(false); From c401bf4e637b754bd0a1c2828d1ed775bceb7c6f Mon Sep 17 00:00:00 2001 From: Monoquark Date: Sat, 24 Jan 2026 21:52:46 +0100 Subject: [PATCH 3/3] docs: Add docstrings for project models selection --- .../project-models-section.tsx | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/apps/ui/src/components/views/project-settings-view/project-models-section.tsx b/apps/ui/src/components/views/project-settings-view/project-models-section.tsx index 94ecd077..2e9bf40b 100644 --- a/apps/ui/src/components/views/project-settings-view/project-models-section.tsx +++ b/apps/ui/src/components/views/project-settings-view/project-models-section.tsx @@ -104,7 +104,10 @@ function FeatureDefaultModelOverrideSection({ project }: { project: Project }) { const hasOverride = !!projectOverride; const effectiveValue = projectOverride || globalValue; - // Get display name for a model + /** + * Formats a user-friendly model label using provider metadata when available, + * falling back to known Claude aliases or the raw model id. + */ const getModelDisplayName = (entry: PhaseModelEntry): string => { if (entry.providerId) { const provider = (claudeCompatibleProviders || []).find((p) => p.id === entry.providerId); @@ -127,10 +130,16 @@ function FeatureDefaultModelOverrideSection({ project }: { project: Project }) { return modelMap[entry.model] || entry.model; }; + /** + * Clears the project-level model override for this scope. + */ const handleClearOverride = () => { setProjectDefaultFeatureModel(project.id, null); }; + /** + * Sets the project-level model override for this scope. + */ const handleSetOverride = (entry: PhaseModelEntry) => { setProjectDefaultFeatureModel(project.id, entry); }; @@ -209,6 +218,10 @@ function FeatureDefaultModelOverrideSection({ project }: { project: Project }) { ); } +/** + * Renders a single phase override row, showing the effective model + * (project override or global default) and wiring selector/reset actions. + */ function PhaseOverrideItem({ phase, project, @@ -225,7 +238,10 @@ function PhaseOverrideItem({ const hasOverride = !!projectOverride; const effectiveValue = projectOverride || globalValue; - // Get display name for a model + /** + * Formats a user-friendly model label using provider metadata when available, + * falling back to known Claude aliases or the raw model id. + */ const getModelDisplayName = (entry: PhaseModelEntry): string => { if (entry.providerId) { const provider = (claudeCompatibleProviders || []).find((p) => p.id === entry.providerId); @@ -248,10 +264,16 @@ function PhaseOverrideItem({ return modelMap[entry.model] || entry.model; }; + /** + * Clears the project-level model override for this scope. + */ const handleClearOverride = () => { setProjectPhaseModelOverride(project.id, phase.key, null); }; + /** + * Sets the project-level model override for this scope. + */ const handleSetOverride = (entry: PhaseModelEntry) => { setProjectPhaseModelOverride(project.id, phase.key, entry); }; @@ -315,6 +337,10 @@ function PhaseOverrideItem({ ); } +/** + * Renders a titled group of phase override rows and resolves each phase's + * global default model with a fallback to DEFAULT_PHASE_MODELS. + */ function PhaseGroup({ title, subtitle, @@ -349,6 +375,7 @@ function PhaseGroup({ ); } + /** * Renders the per-project model overrides UI for all phase models. */ @@ -366,6 +393,9 @@ export function ProjectModelsSection({ project }: ProjectModelsSectionProps) { const hasEnabledProviders = claudeCompatibleProviders && claudeCompatibleProviders.some((p) => p.enabled !== false); + /** + * Clears all project-level phase model overrides for this project. + */ const handleClearAll = () => { clearAllProjectPhaseModelOverrides(project.id); };