refactor(models): improve text delta support check for qwen-mt models
Replace direct qwen-mt model check with regex pattern matching
Add comprehensive test cases for isNotSupportTextDeltaModel
Update all references to use new function name
The previous implementation used `a = preset` inside forEach, which only
reassigns the local variable and doesn't actually update the array element.
Changed to use findIndex + direct array assignment to properly update
the preset in the state.
Fixes#11451🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
* fix: respect enableMaxTokens setting when maxTokens is not configured
When enableMaxTokens is disabled, getMaxTokens() should return undefined
to let the API use its own default value, instead of forcing 4096 tokens.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(modelParameters): handle max tokens when feature is disabled
Check if max tokens feature is enabled before returning undefined to ensure proper API behavior
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: icarus <eurfelux@gmail.com>
* feat: update Google and OpenAI SDKs with new features and fixes
- Updated Google SDK to ensure model paths are correctly formatted.
- Enhanced OpenAI SDK to include support for image URLs in chat responses.
- Added reasoning content handling in OpenAI chat responses and chunks.
- Introduced Azure Anthropic provider configuration for Claude integration.
* fix: azure error
* fix: lint
* fix: test
* fix: test
* fix type
* fix comment
* fix: redundant
* chore resolution
* fix: test
* fix: comment
* fix: comment
* fix
* feat: 添加 OpenRouter 推理中间件以支持内容过滤
* refactor: improve model filtering with todo for robust conversion
* refactor(aiCore): add AiSdkConfig type and update provider config handling
- Introduce new AiSdkConfig type in aiCoreTypes for better type safety
- Update provider factory and config to use AiSdkConfig consistently
- Simplify getAiSdkProviderId return type to string
- Add config validation in ModernAiProvider
* refactor(aiCore): move ai core types to dedicated module
Consolidate AI core type definitions into a dedicated module under aiCore/types. This improves code organization by keeping related types together and removes circular dependencies between modules. The change includes:
- Moving AiSdkConfig to aiCore/types
- Updating all imports to reference the new location
- Removing duplicate type definitions
* refactor(provider): add return type to createAiSdkProvider function
* feat(messages): add filter for error-only messages and their related pairs
Add new filter function to remove assistant messages containing only error blocks along with their associated user messages, identified by askId. This improves conversation quality by cleaning up error-only responses.
* refactor(ConversationService): improve message filtering pipeline readability
Break down complex message filtering chain into clearly labeled steps
Add comments explaining each filtering step's purpose
Maintain same functionality while improving code maintainability
* test(messageUtils): add test cases for message filter utilities
* docs(messageUtils): correct jsdoc for filterUsefulMessages
* refactor(ConversationService): extract message filtering logic into pipeline method
Move message filtering steps into a dedicated static method to improve testability and maintainability. Add comprehensive tests to verify pipeline behavior.
* refactor(ConversationService): add logging and improve message filtering readability
Add logger service to track message pipeline output
Split filterUserRoleStartMessages into separate variable for better debugging
* refactor(types): consolidate OpenAI types and improve type safety
- Move OpenAI-related types to aiCoreTypes.ts
- Rename FetchChatCompletionOptions to FetchChatCompletionRequestOptions
- Add proper type definitions for service tiers and verbosity
- Improve type guards for service tier checks
* refactor(api): rename options parameter to requestOptions for consistency
Update parameter name across multiple files to use requestOptions instead of options for better clarity and consistency in API calls
* refactor(aiCore): simplify OpenAI summary text handling and improve type safety
- Remove 'off' option from OpenAISummaryText type and use null instead
- Add migration to convert 'off' values to null
- Add utility function to convert undefined to null
- Update Selector component to handle null/undefined values
- Improve type safety in provider options and reasoning params
* fix(i18n): Auto update translations for PR #10964
* feat(utils): add notNull function to convert null to undefined
* refactor(utils): move defined and notNull functions to shared package
Consolidate utility functions into shared package to improve code organization and reuse
* Revert "fix(i18n): Auto update translations for PR #10964"
This reverts commit 68bd7eaac5.
* feat(i18n): add "off" translation and remove "performance" tier
Add "off" translation for multiple languages and remove "performance" service tier option from translations
* Apply suggestion from @EurFelux
* docs(types): clarify handling of undefined and null values
Add comments to explain that undefined is treated as default and null as explicitly off in OpenAIVerbosity and OpenAIServiceTier types. Also update type safety for OpenAIServiceTiers record.
* fix(migration): update migration version from 167 to 171 for removed type
* chore: update store version to 172
* fix(migrate): update migration version number from 171 to 172
* fix(i18n): Auto update translations for PR #10964
* refactor(types): improve type safety for verbosity handling
add NotUndefined and NotNull utility types to better handle null/undefined cases
clarify verbosity types in aiCoreTypes and update related utility functions
* refactor(types): replace null with undefined for verbosity values
Standardize on undefined instead of null for verbosity values to align with OpenAI API docs and improve type consistency
* refactor(aiCore): update OpenAI provider options type import and usage
* fix(openai): change summaryText default from null to 'auto'
Update OpenAI settings to use 'auto' as default summaryText value instead of null for consistency with API behavior. Remove 'off' option and add 'concise' option while maintaining type safety.
* refactor(OpenAISettingsGroup): extract service tier options type for better maintainability
* refactor(types): make SystemProviderIdTypeMap internal type
* docs(provider): clarify OpenAIServiceTier behavior for undefined vs null
Explain that undefined and null values for serviceTier should be treated differently since they affect whether the field appears in the response
* refactor(utils): rename utility functions for clarity
Rename `defined` to `toNullIfUndefined` and `notNull` to `toUndefinedIfNull` to better reflect their functionality
* refactor(aiCore): extract service tier logic and improve type safety
Extract service tier validation logic into separate functions for better reusability
Add proper type annotations for provider options
Pass service tier parameter through provider option builders
* refactor(utils): comment out unused utility functions
Keep commented utility functions for potential future use while cleaning up current codebase
* fix(migration): update migration version number from 172 to 177
* docs(aiCoreTypes): clarify parameter passing behavior in OpenAI API
Update comments to consistently use 'undefined' instead of 'null' when describing parameter passing behavior in OpenAI API requests, as they share the same meaning in this context
---------
Co-authored-by: GitHub Action <action@github.com>
* 100m
* feat: add web search header for Claude 4 series models
* fix: typo
* fix: identify model
---------
Co-authored-by: defi-failure <159208748+defi-failure@users.noreply.github.com>
Implement single instance IPC subscription pattern to resolve MaxListenersExceededWarning. Previously, each component using useApiServer would register a separate 'api-server:ready' listener, and React strict mode double rendering would quickly exceed the 10 listener limit.
Changes:
- Add module-level subscription manager with onReadyCallbacks Set
- Ensure only one IPC listener is registered regardless of component count
- Use useRef to maintain stable callback references
- Properly cleanup subscriptions when all components unmount
This maintains existing behavior while keeping listener count constant at 1.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add endpoint type support for cherryin provider
* chore: bump @cherrystudio/ai-sdk-provider version to 0.1.1
* chore: bump ai-sdk-provider version to 0.1.3
* test(knowledge): fix tests for knowledge base form modal refactoring
Update all test files to match the new vertical layout structure with button-based advanced settings toggle. Remove obsolete tests for deleted features.
Changes:
- Rewrite KnowledgeBaseFormModal.test.tsx for new button-toggle structure
- Remove tests for preprocess and rerank features from GeneralSettingsPanel
- Update AdvancedSettingsPanel tests with required props
- Update all snapshots to reflect new component structure
- Format test files according to biome rules
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* test(knowledge): simplify KnowledgeBaseFormModal button tests
Simplify button interaction tests to avoid text matching issues. Focus on testing behavior rather than implementation details.
Changes:
- Simplify advanced settings toggle test
- Simplify footer buttons test to check button count instead of text content
- Remove fragile text-based button selection
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add Git Bash detection and requirement check for Windows agents
- Add System_CheckGitBash IPC channel for detecting Git Bash installation
- Implement detection logic checking common installation paths and PATH environment
- Display non-closable error alert in AgentModal when Git Bash is not found
- Disable agent creation/edit button until Git Bash is installed
- Add recheck functionality to verify installation without restarting app
Git Bash is required for agents to function properly on Windows systems.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* i18n: add Git Bash requirement translations for agent modal
- Add English translations for Git Bash detection warnings
- Add Simplified Chinese (zh-cn) translations
- Add Traditional Chinese (zh-tw) translations
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* format code
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add ChatGPT conversation import feature
Introduces a new import workflow for ChatGPT conversations, including UI components, service logic, and i18n support for English, Simplified Chinese, and Traditional Chinese. Adds an import menu to data settings, a popup for file selection and progress, and a service to parse and store imported conversations as topics and messages.
* fix: ci failure
* refactor: import service and add modular importers
Refactored the import service to support a modular importer architecture. Moved ChatGPT import logic to a dedicated importer class and directory. Updated UI components and i18n descriptions for clarity. Removed unused Redux selector in ImportMenuSettings. This change enables easier addition of new importers in the future.
* Apply suggestion from @Copilot
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: improve ChatGPT import UX and set model for assistant
Added a loading state and spinner for file selection in the ChatGPT import popup, with new translations for the 'selecting' state in en-us, zh-cn, and zh-tw locales. Also, set the model property for imported assistant messages to display the GPT-5 logo.
---------
Co-authored-by: SuYao <sy20010504@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* feat: add i18n support and local data to emoji picker
- Add emoji-picker-element-data package for offline-first emoji data
- Implement i18n translations for emoji picker UI (de, en, es, fr, ja, pt, ru, zh)
- Switch from CDN to local emoji data to improve performance and reliability
- Add locale mapping to match app language with emoji picker data
- Move emoji-picker-element import to EmojiPicker component for better encapsulation
- Use proper TypeScript types instead of 'any' for type safety
This improves user experience by providing localized emoji picker interface
and eliminating dependency on external CDN, ensuring the picker works offline.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: enable native language emoji search with CLDR data format
Switch from emojibase to CLDR format for emoji-picker-element data to support full multi-language search functionality. Users can now search for emojis in their native language (e.g., German users can search "Herz" for ❤️, Spanish users can search "corazón"). Also improves type safety by using the LanguageVarious type for locale mappings.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* refactor(AgentModal): simplify agent type handling and update default values
- Removed unused agent type options and related logic.
- Updated default agent name from 'Claude Code' to 'Agent'.
- Adjusted padding in button styles and textarea rows for better UI consistency.
- Cleaned up unnecessary imports and code comments for improved readability.
* refactor(AgentSettings): clean up and enhance name setting component
- Removed unused imports and commented-out code in AgentModal and EssentialSettings.
- Updated NameSetting to include an emoji avatar picker for enhanced user experience.
- Simplified the logic for updating the agent's name and avatar.
- Improved overall readability and maintainability of the code.
- Remove 'banner' prop from Alert components in InstallNpxUv
- Set SettingContainer background to 'inherit' in MCP settings
- Fixes the light background color issue in NpxUv interface
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Claude <noreply@anthropic.com>
* bump ai core version
* chore
* chore: add patch for @ai-sdk/openai and update peer dependencies in aiCore
* chore: update installation instructions in README to include @ai-sdk/google and @ai-sdk/openai
* chore: bump @cherrystudio/ai-core version to 1.0.6 in package.json and yarn.lock
---------
Co-authored-by: MyPrototypeWhat <daoquqiexing@gmail.com>
* feat(reasoning): add support for gemini-3-pro-preview model
Update regex pattern to include gemini-3-pro-preview as a supported thinking model
Add tests for new gemini-3 model support and edge cases
* fix(reasoning): update gemini model regex to include stable versions
Add support for stable versions of gemini-3-flash and gemini-3-pro in the model regex pattern. Update tests to verify both preview and stable versions are correctly identified.
* feat(providers): add vertexai provider check function
Add isVertexAiProvider function to consistently check for vertexai provider type and use it in websearch model detection
* feat(websearch): update gemini search regex to include v3 models
Add support for gemini 3.x models in the search regex pattern, including preview versions
* feat(vision): add support for gemini-3 models and add tests
Add regex pattern for gemini-3 models in visionAllowedModels
Create comprehensive test suite for isVisionModel function
* refactor(vision): make vision-related model constants private
Remove unused isNotSupportedImageSizeModel function and change exports to const declarations for internal use only
* chore(deps): update @ai-sdk/google to v2.0.36 and related dependencies
update @ai-sdk/google dependency from v2.0.31 to v2.0.36 to include fixes for model path handling and tool support for newer Gemini models
* chore: remove outdated @ai-sdk-google patch file
* chore: remove outdated @ai-sdk/google patch dependency
- Added anthropicApiHost configuration for qiniu and longcat providers during state migration.
- Incremented version number in persistedReducer to 176.
- Ensured proper handling of reasoning_effort settings during migration.
* refactor(assistant): change default tool use mode to function and use default settings
Simplify reset logic by using DEFAULT_ASSISTANT_SETTINGS object instead of hardcoded values
* fix(ApiService): safely fallback to prompt tool use for unsupported models
Add check for function calling model support before using tool use mode to prevent errors with unsupported models.
feat(i18n): add input placeholder translations for multiple languages
- Introduced a new placeholder for the input field in various language files, providing guidance on message entry and command selection.
- Updated English, Chinese (Simplified and Traditional), German, Greek, Spanish, French, Japanese, Portuguese, and Russian translations to include the new input placeholder text.
- Adjusted the reference in the AgentSessionInputbar component to use the new translation key for consistency.
* Initial plan
* feat: add verbosity parameter support for GPT-5 models in OpenAIAPIClient
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
* fix: ensure gpt-5-pro always uses 'high' verbosity
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
* refactor: move verbosity configuration to config/models as suggested
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
* refactor: encapsulate verbosity logic in getVerbosity method
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
* feat: add support for verbosity and reasoning options for GPT-5 Pro and GPT-5.1 models
* fix comment
* build: add @ai-sdk/google dependency
Add the @ai-sdk/google package to support Google AI SDK integration
* build: add @ai-sdk/anthropic dependency
* refactor(aiCore): update reasoning params handling for AI providers
- Add type imports for provider options
- Handle 'none' reasoning effort consistently across providers
- Improve type safety by using Pick with provider options
- Standardize disabled reasoning config for all providers
* fix: adjust none effort ratio from 0 to 0.01
Prevent potential division by zero errors by ensuring none effort ratio has a small positive value
* feat(reasoning): add support for GPT-5.1 series models
Handle 'none' reasoning effort for GPT-5.1 models and add model type check
* Update src/renderer/src/aiCore/utils/reasoning.ts
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: DeJeune <67425183+DeJeune@users.noreply.github.com>
Co-authored-by: suyao <sy20010504@gmail.com>
Co-authored-by: icarus <eurfelux@gmail.com>
* build: update @cherrystudio/openai dependency from v6.5.0 to v6.9.0
* refactor(reasoning): replace 'off' with 'none' for reasoning effort option
Update reasoning effort option from 'off' to 'none' across multiple files for consistency
Add support for gpt5_1 model with reasoning effort options
* fix(openai): handle apply_patch_call and apply_patch_call_output in response conversion
Filter and properly handle apply_patch_call and apply_patch_call_output types in OpenAI response conversion. Ensure undefined/null values are handled appropriately and log warnings for missing required fields.
* feat(models): add gpt-5.1 model logo and configuration
* fix(providers): include cherryin in url context provider check
Add SystemProviderIds.cherryin to the list of providers that support URL context to ensure proper functionality
* feat(models): add logo images for gpt-5.1 model variants
* feat(model): add support for GPT-5.1 series models
- Add new model type check for GPT-5.1 series
- Update reasoning effort and verbosity checks to include GPT-5.1
- Add logging to provider options builder
* feat(models): add gpt5_1_codex model support
Add new model type 'gpt5_1_codex' to ThinkModelTypes and configure its reasoning effort levels
Update model type detection logic to handle gpt5_1_codex variant
* chore: update @opeoginni/github-copilot-openai-compatible to version 0.1.21
- Updated package version in package.json and yarn.lock.
- Refactored OpenAIBaseClient to enhance getBaseURL method and improve header management for SDK instances.
* format
- Added `header` prop to display content above the list.
- Introduced `className` prop for additional styling on the container.
- Updated `Sessions` component to utilize `StyledVirtualList` with new props for improved layout and functionality.
* fix: update Azure OpenAI API version references to v1 in configuration and translations
* fix: support Azure OpenAI API v1 in client compatibility check
* fix: lint/ format
* fix: topic branch incomplete copy - split ID mapping into two passes
Fix the bug where topic branching would not copy all message relationships completely.The issue was that askId mapping lookup happened in the same loop as ID generation, causing later messages' askIds to fail mapping when they referenced messages that hadn't been processed yet.
Solution: Split into two passes:
1. First pass: Generate new IDs for all messages and build complete mapping
2. Second pass: Clone messages and blocks using the complete ID mapping
This ensures all message relationships (especially assistant message askId references)are properly maintained in the new topic.
* fix(notes): 保持 Ctrl+F ‘下一个’在编辑器容器内滚动,避免索引提前回到第一条
- 使用传入的滚动容器计算相对偏移并 target.scrollTo 居中
- 容器不可滚动时回退到 scrollIntoView,兼容其他页面
- 将 target 纳入依赖,确保引用最新容器
受影响文件:
- src/renderer/src/components/ContentSearch.tsx:165
* fix(search): improve notes content search next-scroll behavior
* Update dom.ts
---------
Co-authored-by: Pleasurecruise <3196812536@qq.com>
* fix(message): Incorrect navigation when creating new message with @
Update variable name from newAssistantStub to newAssistantMessageStub for clarity
Add dispatch calls to update message folding state
Remove unused message length tracking effect in MessageGroup
Fixes#10928
* refactor(MessageGroup): remove unused prevMessageLengthRef variable
Updated the sorting logic in getSorter to use the 'numeric' option in localeCompare for all name-based sorts. This ensures that note names containing numbers are sorted in a more natural, human-friendly order.
* feat(models): add MiniMax M2 models to default configuration
* fix(config): update minimax api host and add anthropic host
Update the API endpoint for MiniMax provider and add a new endpoint for Anthropic integration
* feat: add minimax to ANTHROPIC_COMPATIBLE_PROVIDER_IDS
* docs(ProviderSetting): add todo comment for reset button
* fix(store): update minimax provider config in migration 174
Add anthropicApiHost to minimax provider configuration during state migration
* fix(store): revert version and remove unused migration
Remove migration for version 175 and revert persisted reducer version to 174