feat(ui): improve modal UX and model management

- Increase dialog max-width to 2xl for better content display
- Add tabbed interface to feature modal (prompt/model/testing)
- Streamline model selection with compact button layout
- Remove unused OpenAI O3/O4 models from registry
- Add model string validation and fallback logic
- Add "Uncategorized" category support

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
This commit is contained in:
Kacper
2025-12-10 03:27:11 +01:00
parent 1a5a828d45
commit cd7d4ab138
13 changed files with 789 additions and 426 deletions

View File

@@ -36,8 +36,27 @@ class FeatureExecutor {
const modelKey = feature.model || "opus"; // Default to opus
// Use the registry for model lookup
const modelString = ModelRegistry.getModelString(modelKey);
return modelString || MODEL_MAP[modelKey] || MODEL_MAP.opus;
let modelString = ModelRegistry.getModelString(modelKey);
// Fallback to MODEL_MAP if registry doesn't have it
if (!modelString || modelString === modelKey) {
modelString = MODEL_MAP[modelKey];
}
// Final fallback to opus
if (!modelString) {
modelString = MODEL_MAP.opus;
}
// Validate model string format - ensure it's not incorrectly constructed
// Prevent incorrect formats like "claude-haiku-4-20250514" (mixing haiku with sonnet date)
if (modelString.includes('haiku') && modelString.includes('20250514')) {
console.error(`[FeatureExecutor] Invalid model string detected: ${modelString}, using correct format`);
modelString = MODEL_MAP.haiku || 'claude-haiku-4-5';
}
console.log(`[FeatureExecutor] getModelString: modelKey=${modelKey}, modelString=${modelString}`);
return modelString;
}
/**