diff --git a/packages/agent-graph/src/ui/GraphControls.tsx b/packages/agent-graph/src/ui/GraphControls.tsx index e933c9c1..a3bc581d 100644 --- a/packages/agent-graph/src/ui/GraphControls.tsx +++ b/packages/agent-graph/src/ui/GraphControls.tsx @@ -107,8 +107,8 @@ export function GraphControls({ return ( <> -
- CLI environment is not available โ launch is blocked -
-- {prepareMessage ?? 'Failed to prepare environment'} -
- {!shouldHideProvisioningProviderStatusList(prepareChecks, prepareMessage) ? ( -- {warning} -
- ))} -- {getProvisioningFailureHint(prepareMessage, prepareChecks)} -
-
+ CLI environment is not available - launch is blocked
+
+ {prepareMessage ?? 'Failed to prepare environment'}
+
+ Pre-flight check to catch errors before launch
+
+ {warning}
+
+ {getProvisioningFailureHint(prepareMessage, prepareChecks)}
+
- CLI environment is not available โ launch is blocked -
-- {prepareMessage ?? 'Failed to prepare environment'} -
- {!shouldHideProvisioningProviderStatusList(prepareChecks, prepareMessage) ? ( -- {warning} -
- ))} -- {getProvisioningFailureHint(prepareMessage, prepareChecks)} -
- {(prepareMessage ?? '').toLowerCase().includes('spawn ') || - prepareChecks.some((check) => - check.details.some((detail) => detail.toLowerCase().includes('spawn ')) - ) ? ( - - ) : null} -+ CLI environment is not available - launch is blocked +
++ {prepareMessage ?? 'Failed to prepare environment'} +
++ Pre-flight check to catch errors before launch +
++ {warning} +
+ ))} ++ {getProvisioningFailureHint(prepareMessage, prepareChecks)} +
+ {(prepareMessage ?? '').toLowerCase().includes('spawn ') || + prepareChecks.some((check) => + check.details.some((detail) => detail.toLowerCase().includes('spawn ')) + ) ? ( + + ) : null} ++
{detail}
))} diff --git a/src/renderer/components/team/dialogs/TeamModelSelector.tsx b/src/renderer/components/team/dialogs/TeamModelSelector.tsx index c0175dbf..0e593d34 100644 --- a/src/renderer/components/team/dialogs/TeamModelSelector.tsx +++ b/src/renderer/components/team/dialogs/TeamModelSelector.tsx @@ -11,23 +11,26 @@ import { } from '@renderer/components/ui/tooltip'; import { cn } from '@renderer/lib/utils'; import { useStore } from '@renderer/store'; +import { getAnthropicDefaultTeamModel } from '@shared/utils/anthropicModelDefaults'; import { GEMINI_UI_DISABLED_BADGE_LABEL, GEMINI_UI_DISABLED_REASON, isGeminiUiFrozen, } from '@renderer/utils/geminiUiFreeze'; +import { + getAvailableTeamProviderModelOptions, + getTeamModelUiDisabledReason, + normalizeTeamModelForUi, + TEAM_MODEL_UI_DISABLED_BADGE_LABEL, +} from '@renderer/utils/teamModelAvailability'; import { doesTeamModelCarryProviderBrand, getProviderScopedTeamModelLabel, getTeamModelLabel as getCatalogTeamModelLabel, - getTeamModelUiDisabledReason, getTeamProviderLabel as getCatalogTeamProviderLabel, - getTeamProviderModelOptions, - normalizeTeamModelForUi, - TEAM_MODEL_UI_DISABLED_BADGE_LABEL, } from '@renderer/utils/teamModelCatalog'; import { extractProviderScopedBaseModel } from '@renderer/utils/teamModelContext'; -import { Info } from 'lucide-react'; +import { AlertTriangle, Info } from 'lucide-react'; export { getProviderScopedTeamModelLabel } from '@renderer/utils/teamModelCatalog'; @@ -105,9 +108,9 @@ export function computeEffectiveTeamModel( } const base = extractProviderScopedBaseModel(selectedModel, providerId); - if (limitContext) return base; + if (limitContext) return base || getAnthropicDefaultTeamModel(true); if (base === 'haiku') return base; - return base ? `${base}[1m]` : 'opus[1m]'; + return base ? `${base}[1m]` : getAnthropicDefaultTeamModel(limitContext); } export interface TeamModelSelectorProps { @@ -117,6 +120,7 @@ export interface TeamModelSelectorProps { onValueChange: (value: string) => void; id?: string; disableGeminiOption?: boolean; + modelIssueReasonByValue?: Partial+ Explicit models load from the current runtime. Default remains available while the + list is syncing. +
+ ) : null}{modelIssueText}
: null} + {modelTooltipText ? ( ++ {modelTooltipText} +
+ ) : null}- If this teammate uses a different provider than the lead, they will be started in a - separate process automatically. -
-