Add deep equality check before calling setApiConfigurationField for
openAiHeaders in OpenAICompatible.tsx. This prevents the Settings
dialog from incorrectly showing an unsaved changes prompt when the
headers have not actually changed.
The fix follows the same pattern already used in ApiOptions.tsx,
using JSON.stringify for deep equality comparison.
Fixes#8230
fix: add type check for lastMessage.text before calling startsWith
Fixes#10430
The TTS useEffect was calling .startsWith() on lastMessage.text after only
checking if it was truthy. If text was a non-string truthy value (array,
object, or number), this would crash with "Q.text.startsWith is not a function".
Changed the truthy check to an explicit type check: typeof lastMessage.text === "string"
Co-authored-by: Roo Code <roomote@roocode.com>
Implements grace retry error handling for 'no assistant messages' API
errors, following the same pattern as PR #10196 for 'no tools used'.
- Add consecutiveNoAssistantMessagesCount counter to Task.ts
- First failure: silent retry (grace retry)
- After 2+ consecutive failures: show MODEL_NO_ASSISTANT_MESSAGES error
- Add UI handling in ChatRow.tsx with ErrorRow component
- Add localized strings to all 18 locale files
- Add comprehensive tests for the grace retry behavior
* feat(types): add defaultToolProtocol: native to providers
- Added supportsNativeTools: true and defaultToolProtocol: native to all chutes models
- Added defaultToolProtocol: native to moonshot models (already had supportsNativeTools)
- Added defaultToolProtocol: native to litellm default model (already had supportsNativeTools)
- Added defaultToolProtocol: native to minimax models (already had supportsNativeTools)
This enables native tool calling by default for these providers, reducing
the number of users falling back to XML tool protocol unnecessarily.
* fix(litellm): merge only native tool defaults with router models
Only merges supportsNativeTools and defaultToolProtocol from litellmDefaultModelInfo,
not prices or other model-specific info that could be incorrect for different models.
* feat: add metadata to error details dialog
- Prepends extension version, provider, model, and repository info to error details
- Helps users provide better bug reports with context
- Uses useExtensionState and useSelectedModel hooks for data
* Tweaks
---------
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
* feat: add error details modal with on-demand display
- Add errorDetails prop to ErrorRow component
- Show Info icon on hover in error header when errorDetails is provided
- Display detailed error message in modal dialog on Info icon click
- Add Copy to Clipboard button in error details modal
- Update generic error case to show localized message with details on demand
- Add i18n translations for error details UI
* UI Tweaks
* Properly handles error details
* i18n
* Lighter visual treatment for errors
---------
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
* Add a way to save screenshots from the browser tool
* fix: use cross-platform paths in BrowserSession screenshot tests
* fix: validate screenshot paths to prevent filesystem escape
---------
Co-authored-by: Roo Code <roomote@roocode.com>