- Updated internal state synchronization for HTML content and preview.
- Enhanced preview refresh logic to check for content changes every 2 seconds.
- Improved comments for clarity and consistency in English.
- Added onChunkReceived call to fetchChatCompletion to improve response handling.
- Removed redundant onChunkReceived call from the completion parameters section in fetchChatCompletion.
refactor(ProxyManager): streamline proxy configuration and bypass rules handling
- Simplified proxy configuration logic in registerIpc by directly assigning bypass rules.
- Removed redundant bypass rules assignment in ProxyManager, initializing it as an empty array.
- Updated GeneralSettings to conditionally render based on custom proxy mode only.
- Removed unnecessary cursor styles from draggable items in the VirtualRow component.
- Updated snapshot tests to reflect changes in cursor styles.
- Introduced a new DragHandle component in ProviderSettings for improved drag interaction, with hover effects to enhance user experience.
Introduces logic to allow users to disable thinking mode directly from the ThinkingButton if supported. Tooltip text now reflects the action to close when thinking is enabled and 'off' is available.
* feat(discover): implement Discover feature with routing and UI components
- Added a new Discover page with sidebar and main content areas.
- Integrated routing for Discover, including subcategories and tabs.
- Created components for Discover sidebar and main content.
- Updated localization files to include new Discover titles and labels.
- Refactored existing components to accommodate the new Discover feature.
- Enhanced sidebar icons and navigation for better user experience.
* feat(discover): enhance Discover page with Tailwind CSS integration and routing improvements
- Added Tailwind CSS import to the entry point for styling.
- Updated the ThemeProvider to dynamically apply Tailwind themes based on user selection.
- Refactored Discover page to utilize new ROUTERS structure for better routing management.
- Simplified category handling in useDiscoverCategories hook by leveraging ROUTERS_ENTRIES.
- Introduced InternalCategory interface for better type management in Discover components.
- Cleaned up unused code and comments for improved readability.
* fix: update import statement for linguist-languages in update-languages.ts
* fix: standardize import quotes and improve localization files
- Updated import statements in use-mobile.ts and motionVariants.ts to use single quotes for consistency.
- Added new localization entries for the "discover" section in multiple language files, including English, Japanese, Russian, Traditional Chinese, Greek, Spanish, French, and Portuguese.
* refactor(discover): simplify Discover page structure and improve routing logic
- Refactored DiscoverPage component to streamline tab and sidebar handling.
- Updated routing logic to utilize a new ROUTERS_MAP for better category management.
- Removed unused props and simplified state management in useDiscoverCategories hook.
- Enhanced DiscoverSidebar and DiscoverMain components for improved clarity and performance.
- Adjusted CherryStoreType enum values for consistency in path definitions.
* fix: update file upload body type in MineruPreprocessProvider
- Changed the body of the fetch request from a Buffer to a Uint8Array to ensure proper handling of binary data during PDF uploads.
* fix: ensure Blob creation uses a copy of byte arrays for image handling
- Updated Blob creation in ImageGenerationMiddleware, ImageViewer, and MessageImage components to use `slice()` on byte arrays, preventing potential mutations of the original data.
* chore: update Vite React SWC plugin and adjust Electron config for conditional styling
- Upgraded `@vitejs/plugin-react-swc` from version 3.9.0 to 3.11.0 for improved performance and features.
- Modified Electron Vite configuration to conditionally apply styled-components plugin based on the VITEST environment variable.
- Updated snapshot tests for `InputEmbeddingDimension` and `Spinner` components to reflect style changes.
* chore: upgrade @swc/plugin-styled-components to version 9.0.2 in package.json and yarn.lock
* refactor: streamline styled-components plugin configuration in Electron Vite setup
- Consolidated the styled-components plugin configuration in the Electron Vite config file for improved readability and maintainability.
- Removed conditional application of the plugin based on the VITEST environment variable, ensuring consistent styling behavior across environments.
* i18n: update translations for discover section across multiple languages
- Replaced placeholder text with accurate translations for the "discover" section in English, Japanese, Russian, Traditional Chinese, Greek, Spanish, French, and Portuguese.
- Ensured consistency in terminology and improved clarity in user-facing messages.
* i18n: update "discover" title translations across multiple languages
- Updated the "discover" title in English, Japanese, Russian, Traditional Chinese, Greek, Spanish, French, and Portuguese to ensure accurate and consistent terminology.
- Adjusted related key mappings in the localization files for improved clarity in user-facing messages.
* chore: update lucide-react to version 0.536.0 and clean up tsconfig paths
* fix: update input style in snapshot tests and format message mentions in MessageContent component
* feat: disable mask closing for various popups across the application
- Updated multiple popup components to prevent closing when clicking outside, enhancing user experience and preventing accidental dismissals.
- Affected components include ImportAgentPopup, QuickPhrasesButton, NewAppButton, EditMcpJsonPopup, TopicNamingModalPopup, CustomHeaderPopup, and QuickPhraseSettings.
This change aims to improve the usability of modal dialogs by ensuring users must explicitly confirm or cancel their actions.
* feat: implement click outside to save edits in TopicsTab
- Added a useEffect hook to handle clicks outside the editing input, triggering save on blur.
- Updated onClick behavior for topic items to prevent switching while editing.
- Enhanced cursor style for better user experience during editing.
This change improves the editing experience by ensuring that edits are saved when the user clicks outside the input field.
* feat: integrate in-place editing for topic names in TopicsTab
- Added useInPlaceEdit hook to manage topic name editing, improving user experience.
- Removed previous editing logic and integrated new editing flow with save and cancel functionalities.
- Updated UI interactions to reflect the new editing state, ensuring a smoother editing process.
This change enhances the editing experience by allowing users to edit topic names directly within the list, streamlining the workflow.
* feat: add OpenAI o3 model support with enhanced tool calling
- Add o3 and o3-mini model definitions with reasoning effort support
- Implement o3-compatible strict schema validation for MCP tools
- Add comprehensive o3 schema processing with DRY improvements
- Extract reusable schema processing functions for maintainability
- Add 15+ test cases validating o3 strict mode requirements
- Fix schema composition keyword handling with loop-based approach
- Ensure ALL object schemas have complete required arrays for o3
- Support tool calling with proper o3 schema transformations
This enables OpenAI o3 models to work properly with MCP tool calling
while improving code organization and test coverage.
Signed-off-by: Luke Galea <luke@ideaforge.org>
* Remove redundant reference in HtmlArtifactsPopup.tsx
* refactor: move filterProperties to mcp-schema, fix tests
---------
Signed-off-by: Luke Galea <luke@ideaforge.org>
Co-authored-by: one <wangan.cs@gmail.com>
Co-authored-by: suyao <sy20010504@gmail.com>
* fix[AgentsPage]: fix using name deduplication leads to the loss of agents with the same name
* fix[agents-zh]: fix id 499 the problem of markdown display
* fix[agent]: agent search adds descriptive text search
* feat(ProxyManager): implement SelectiveDispatcher for localhost handling
- Added SelectiveDispatcher to manage proxy and direct connections based on the hostname.
- Introduced isLocalhost function to check for localhost addresses.
- Updated ProxyManager to bypass proxy for localhost in dispatch methods and set proxy bypass rules.
- Enhanced global dispatcher setup to utilize SelectiveDispatcher for both EnvHttpProxyAgent and SOCKS dispatcher.
* refactor(ProxyManager): update axios configuration to use fetch adapter
- Changed axios to use the 'fetch' adapter for proxy requests.
- Removed previous proxy settings for axios, streamlining the configuration.
- Updated HTTP methods to bind with the new proxy agent.
* feat(Proxy): add support for proxy bypass rules
- Updated IPC handler to accept optional bypass rules for proxy configuration.
- Enhanced ProxyManager to store and utilize bypass rules for localhost and other specified addresses.
- Modified settings and UI components to allow users to input and manage bypass rules.
- Added translations for bypass rules in multiple languages.
* feat(ProxyManager): add HTTP_PROXY environment variable support
- Added support for the HTTP_PROXY environment variable in ProxyManager to enhance proxy configuration capabilities.
* lint
* refactor(ProxyManager): optimize bypass rules handling
- Updated bypass rules initialization to split the rules string into an array for improved performance.
- Simplified the isByPass function to directly check against the array of bypass rules.
- Enhanced configuration handling to ensure bypass rules are correctly parsed from the provided settings.
* refactor(ProxyManager): streamline bypass rules initialization
- Consolidated the initialization of bypass rules by directly splitting the default rules string into an array.
- Updated configuration handling to ensure bypass rules are correctly assigned without redundant splitting.
* style(GeneralSettings): adjust proxy bypass rules input width to improve UI layout
* refactor(ProxyManager): enhance proxy configuration logging and handling
- Added proxy bypass rules to the configuration method for improved flexibility.
- Updated logging to include bypass rules for better debugging.
- Refactored the setGlobalProxy method to accept configuration parameters directly, streamlining proxy setup.
- Adjusted the useAppInit hook to handle proxy settings more cleanly.
* refactor(ProxyManager): implement close and destroy methods for proxy dispatcher
- Added close and destroy methods to the SelectiveDispatcher class for better resource management.
- Updated ProxyManager to handle the lifecycle of the proxyDispatcher, ensuring proper closure and destruction.
- Enhanced error handling during dispatcher closure and destruction to prevent resource leaks.
* refactor(ProxyManager): manage proxy agent lifecycle
- Introduced proxyAgent property to ProxyManager for better management of the proxy agent.
- Implemented error handling during the destruction of the proxy agent to prevent potential issues.
- Updated the proxy setup process to ensure the proxy agent is correctly initialized and cleaned up.
* refactor(ProxyManager): centralize default bypass rules management
- Moved default bypass rules to a shared constant for consistency across components.
- Updated ProxyManager and GeneralSettings to utilize the centralized bypass rules.
- Adjusted migration logic to set default bypass rules from the shared constant, ensuring uniformity in configuration.
* refactor: align lucide icons in antd button
* refactor(AssistantsTab): use lucide icon and typography in add assistant button
* refactor: use lucide icons for assistant item dropdown
* refactor: use lucide icons in topic item dropdown
* refactor: use lucide icon in InfoTooltip, align ApiOptionsSettings expand icon
* refactor: use lucide icons in TokenCount
* refactor: use brush in assistant item dropdown
* test: update snapshot
* test: mock tooltip
* fix: token count alignment
* refactor: update icons in MessageMenubar, bump antd
* refactor: use lucide icons in MessageTools, make colors consistent
* refactor: use lucide icons in ProviderSetting
* test: simplify test with mocks
* refactor: use lucide icons in knowledge base dropdown
* refactor: export all custom icons, use EditIcon for lucide pen
* refactor: use lucide copy for CopyIcon, update tests
* refactor: use lucide icons in MessageMenubar
* refactor: improve pause and send button style
* refactor: export SvgSpinners180Ring as LoadingIcon
* refactor: use lucide icons in Agents, use DeleteIcon
* refactor: use Pencil as EditIcon
* fix: i18n key missing
* refactor: use lucide icons in Files
* refactor: use lucide icons in KnowledgeBase items
* refactor: use lucide icons in assistant settings
* refactor: use lucide icons in memory settings, add UserSelector
* chore: remove duplicate memory component
* refactor: use lucide icons in ProviderList
* refactor: use lucide icons in QuickPhraseSettings
* refactor: use lucide icons in McpSettings
* refactor: use lucide icons in DataSettings
* refactor: use lucide icons in DefaultAssistantSettings
* refactor: add icon to save
* refactor: add lucide-custom
* fix: icon position in ModelEditContent
* refactor: use ListMinus in ManageModelsList
* refactor: improve TokenCount alignment
* fix: topic pin/unpin i18n
* fix: self review
* fix: simplify knowledge base dropdown
* fix: remove plus icon color
* refactor: add ResetIcon and RefreshIcon
* refactor: update theme handling in TabContainer and Sidebar components
* refactor: replace setTheme with toggleTheme and update theme state management
* feat: add Monitor icon for additional theme state in both components
* feat(DisplaySettings): replace theme icons with lucide icons for improved visual representation
* updated light and dark theme icons to use Sun and Moon from lucide
* replaced SyncOutlined with Monitor icon for system theme option
* format code
* feat(TabContainer): add tooltip for theme toggle button with translation support
* integrated Tooltip component to provide contextual information for the theme toggle button
* utilized useTranslation hook for internationalization of tooltip text
* imported getThemeModeLabel to enhance theme description
- use DynamicVirtualList in SelectModelPopup
- use DynamicVirtualList in QuickPanelView
- remove react-window
- simplify SelectModelPopup states, improve maintainability
* perf: inlining completeLineTokens and use memo for minor improvements
* chore: bump shiki to 3.9.1
* refactor: improve token line
* refactor: add plainTokenStyle
* feat(database): enable strict transaction durability for CherryStudio database
- Updated the Dexie database initialization to include `chromeTransactionDurability: 'strict'`, enhancing data integrity during transactions.
* feat(app): enhance application shutdown process and data flushing
- Added functionality to flush storage data and cookies before quitting the application, ensuring data integrity.
- Introduced a new `handleBeforeQuit` function to centralize cleanup logic for both manual and update-triggered quits.
- Updated logging to provide better insights during the shutdown process.
- Modified ProxyManager to use debug level for unchanged proxy configurations.
- Added `persistor` to the global window object and implemented `handleSaveData` to flush Redux state before quitting.
* format code
* feat(ipc): add App_SaveData channel and implement data saving on window close
- Introduced a new IPC channel `App_SaveData` for saving application data.
- Updated `WindowService` to send a save data message when the main window is closed.
- Enhanced `useAppInit` hook to handle the `App_SaveData` event and trigger data saving logic.
* refactor(env): remove persistor from global window object
- Removed the `persistor` property from the global `window` object in both `env.d.ts` and `index.ts` files, streamlining the application state management.
- add a custom dynamic virtual list component
- add tests
- support autohide
- used in ManageModelsList, ModelListGroup, KnowledgePage, FileList
- improve DraggableVirtualList
- use name DraggableVirtualList directly, make it flex by default
- use DraggableVirtualList in ProviderList
- Introduced a new ApiServerSettings component for managing API server configurations.
- Updated ToolSettings to include API server options and controls.
- Enhanced GeneralSettings to improve proxy settings management.
- Refactored UI elements for better organization and user experience.
* fix(prompt): fix variable replacement in function mode
* fix(i18n): update available variables in prompt tip
* feat(prompt): replace prompt variable in Prompt and AssistantPromptSettings components
* fix(prompt): add fallback value if replace failed
* feat(prompt): add hook and settings for automatic prompt replacement
* feat(prompt): add supported variables and utility function to check if they exist
* feat(prompt): enhance variable handling in prompt settings and tooltips
* feat(i18n): add prompt settings translations for multiple languages
* refactor(prompt): remove debug log from prompt processing
* fix(prompt): handle model name variables and improve prompt processing
* fix: correct variable replacement setting and update migration defaults
* remove prompt settings
* refactor: simplify model name replacement logic
- Remove unnecessary assistant parameter from buildSystemPrompt function
- Update all API clients to use the simplified function signature
- Centralize model name replacement logic in promptVariableReplacer
- Improve code maintainability by reducing parameter coupling
* fix: eslint error
* refactor: remove unused interval handling in usePromptProcessor
* test: add tests, remove redundant replacing
* feat: animate prompt substitution
* chore: prepare for merge
* refactor: update utils
* refactor: remove getStoreSettings
* refactor: update utils
* style(Message/Prompt): 禁止文本选中以提升用户体验
* fix(Prompt): 修复内存泄漏问题,清除内部定时器
* refactor: move prompt replacement to api service
---------
Co-authored-by: one <wangan.cs@gmail.com>
Co-authored-by: icarus <eurfelux@gmail.com>
* ✨ feat: make API server default to closed/disabled
- Add `enabled` field to ApiServerConfig interface with default value false
- Update Redux store to include apiServer.enabled setting (defaults to false)
- Add setApiServerEnabled action to control server state
- Modify main process to only auto-start API server if explicitly enabled
- Update UI to show enable/disable toggle in API server settings
- Add migrations to handle existing configurations
- Server controls now only visible when API server is enabled
The API server will no longer start automatically on application launch
unless explicitly enabled by the user through the settings interface.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* 🔧 chore: improve build and lint commands
- Move typecheck and i18n checks to lint command for better developer experience
- Simplify build:check to focus on linting and testing
- Ensure all quality checks run together during development
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* refactor(ApiService): optimize memory search handling and improve error logging
- Updated fetchExternalTool to handle memory search in a separate promise, ensuring better management of asynchronous operations.
- Enhanced error logging for memory search failures to improve debugging.
- Removed redundant memory search result storage logic from the main result handling section.
* refactor(ApiService): streamline external tool fetching and memory search handling
- Simplified the fetchExternalTool function by separating web and knowledge search calls into individual await statements.
- Improved memory search handling by awaiting the searchMemory function directly, ensuring better asynchronous flow.
- Updated result storage logic to ensure memory search results are stored correctly after fetching.
- improve responsiveness for provider switching
- improve ModelList performance
- use startTransition
- use virtual list for model groups
- remove excessive ModelEditContent, add EditModelPopup
- add model count
- improve model management popup
- rename to ManageModelsPopup
- use virtual list with sticky group name
- use SvgSpinners180Ring for spin
- Added "Start" and "Stop" labels in English, Japanese, Russian, Chinese (Simplified and Traditional) locales.
- Introduced "Authorization Header" title and descriptions for API key and port fields across all locales.
- Removed deprecated API documentation unavailable messages for a cleaner user experience.
- Added a new handleTabClick function to streamline tab navigation and hide the minapp popup when a tab is clicked.
- Implemented an animation for the minapp switch indicator in the TopNavbarOpenedMinappTabs component, improving visual feedback during tab switching.
- Refactored the rendering of minapp items to use Tooltip for better accessibility and user experience.
- Removed unnecessary StyledLink components to simplify the structure of the navigation items.
* fix(AppUpdater): simplify error logging and update version check logic
- Updated error logging to use a more concise format.
- Changed logging messages for update events to be more consistent.
- Modified the update check logic to return null when no update is available.
- Enhanced the app initialization hook to include update availability in the state dispatch.
* fix(useAppInit): simplify update state dispatch logic by removing update availability check
- Introduced a new function to check if a model is the Qwen 3-235B-A22B thinking model.
- Updated the ThinkingButton component to utilize the new detection function for improved model handling.
* refactor(ModelEditContent): enhance model capabilities management and introduce uniqueObjectArray utility
- Updated ModelEditContent to improve handling of model capabilities, ensuring user selections are accurately reflected.
- Introduced a new utility function, uniqueObjectArray, to filter out duplicate objects in arrays, enhancing data integrity.
- Refactored logic for updating model capabilities to utilize the new utility, streamlining the process and improving code clarity.
* refactor(ModelEditContent): enhance model capabilities management with useEffect and improved type handling
- Added useEffect to manage model capabilities based on user selections and showMoreSettings state.
- Refactored logic to streamline the handling of default and selected model types, improving clarity and maintainability.
- Utilized useRef to track changed types, ensuring accurate updates to model capabilities during user interactions.
* refactor(ModelEditContent): optimize model capabilities update logic with getUnion utility
- Enhanced the model capabilities management by integrating the getUnion utility to streamline the merging of selected types and unselected capabilities.
- Improved clarity in the useEffect hook for managing model capabilities based on user selections and the showMoreSettings state.
- Refactored condition checks for updating user selections to ensure accurate handling of model capabilities during interactions.
* refactor(ModelEditContent): improve model capabilities reset logic and enhance debugging
- Introduced a cloneDeep utility to preserve original model capabilities for reset functionality.
- Updated the handleResetTypes function to restore original capabilities instead of clearing them.
- Added console logs for better debugging and tracking of model capabilities during updates.
* feat(ModelEditContent): track user modifications for model capabilities
- Added a state variable to track if the user has modified model capabilities.
- Updated the handleTypeChange function to set the modification flag when types are changed.
- Modified the reset button to only display when there are user modifications, enhancing the user interface and interaction clarity.
* feat(models): add support for Zhipu model and enhance reasoning checks
- Introduced support for the new Zhipu model (GLM-4.5) in the models configuration.
- Added functions to check if the Zhipu model supports reasoning and thinking tokens.
- Updated the ThinkingButton component to recognize Zhipu model options and integrate them into the reasoning effort logic.
- Ensured that the reasoning checks are streamlined to include the new Zhipu model alongside existing models.
* feat(models): expand Zhipu model support and refine reasoning checks
- Added new Zhipu models: GLM-4.5-Flash, GLM-4.5-AIR, GLM-4.5-AIRX, and GLM-4.5-X to the models configuration.
- Enhanced the isZhipuReasoningModel function to include checks for the new models and ensure robust reasoning validation.
- Removed redundant checks for 'glm-z1' from the isReasoningModel function to streamline logic.
* fix(LocalBackup): streamline local backup directory handling
- Added a new state to manage the resolved local backup directory in LocalBackupSettings.
- Updated the LocalBackupManager component to use the resolved directory instead of the raw input.
- Enhanced the backupToLocal and restoreFromLocal functions to resolve the local backup directory path before use, improving reliability.
* refactor(Backup): remove setLocalBackupDir functionality
- Removed the setLocalBackupDir method and its associated IPC channel handling from the BackupManager and IpcChannel.
- Updated LocalBackupSettings to eliminate direct calls to setLocalBackupDir, instead resolving the local backup directory path directly.
- Cleaned up related code in the BackupService to streamline local backup operations.
* format code
* feat: add Top-P parameter toggle with default enabled state and improved UI styling
* fix: resolve undefined enableTopP issue in ppio models by using getAssistantSettings
* refactor(api): Unify getTopP method to BaseApiClient
* feat(settings): adjust layout of Top-P setting in assistant model settings
* feat: add temperature parameter toggle control with UI and multi-language support
* fix: Fix lint error
* fix: Sort these imports
* style(settings): refactor model settings layout and styles
* chore: yarn sync:i18n
* feat(ipc): add isPathInside functionality to check path relationships
- Introduced a new IPC channel for checking if a path is inside another path, enhancing path validation capabilities.
- Implemented the isPathInside function in the file utility, which accurately determines parent-child path relationships, handling edge cases.
- Updated relevant components to utilize the new isPathInside function for validating app data and backup paths, ensuring better user experience and error handling.
- Added comprehensive tests for isPathInside to cover various scenarios, including edge cases and error handling.
* format code
- Removed the specific check for Grok models in OpenAIApiClient and consolidated it with the general reasoning effort model check.
- Added support for a new Perplexity model, 'sonar-deep-research', in the models configuration.
- Updated the reasoning model checks to include Perplexity models in the models.ts file.
- Enhanced the ThinkingButton component to recognize and handle Perplexity model options.
* feat(ModelList): add support for 'supported_text_delta' in model configuration
- Introduced a new boolean property 'supported_text_delta' to the model configuration, allowing models to indicate support for text delta outputs.
- Updated the AddModelPopup and ModelEditContent components to handle this new property, including UI elements for user interaction.
- Enhanced migration logic to set default values for existing models based on compatibility checks.
- Added corresponding translations for the new property in the i18n files.
* feat(OpenAIApiClient): enhance support for Qwen MT model and system message handling
- Added support for Qwen MT model in OpenAIApiClient, including translation options based on target language.
- Updated system message handling to accommodate models that do not support system messages.
- Introduced utility functions to identify Qwen MT models and their compatibility with text delta outputs.
- Enhanced TextChunkMiddleware to handle text accumulation based on model capabilities.
- Updated model configuration to include Qwen MT in the list of excluded models for function calling.
* feat(i18n): add translations for 'supported_text_delta' in multiple languages
- Introduced new translation entries for the 'supported_text_delta' property in English, Japanese, Russian, and Traditional Chinese localization files.
- Updated the corresponding labels and tooltips to enhance user experience across different languages.
* refactor(ModelEditContent): reposition 'supported_text_delta' input for improved UI layout
- Moved the 'supported_text_delta' Form.Item from its previous location to enhance the user interface and maintain consistency in the model editing experience.
- Ensured that the switch input for 'supported_text_delta' is now displayed in a more logical order within the form.
* fix(TextChunkMiddleware): update condition for supported_text_delta check
- Changed the condition in TextChunkMiddleware to explicitly check for 'supported_text_delta' being false, improving clarity in the logic.
- Updated test cases to reflect the new structure of model configurations, ensuring 'supported_text_delta' is consistently set to true for relevant models.
* feat(migrate): add support for 'supported_text_delta' in assistant models
- Updated migration logic to set 'supported_text_delta' for both default and specific models within assistants.
- Implemented checks to ensure compatibility with text delta outputs, enhancing model configuration consistency.
* feat(ModelList): add 'supported_text_delta' to model addition logic
- Enhanced the model addition process in EditModelsPopup, NewApiAddModelPopup, and NewApiBatchAddModelPopup to include the 'supported_text_delta' property.
- Ensured consistency across components by setting 'supported_text_delta' to true when adding models, improving compatibility with text delta outputs.
* feat(migrate): streamline model text delta support in migration logic
- Refactored migration logic to utilize a new helper function for updating the 'supported_text_delta' property across various model types, enhancing code clarity and reducing redundancy.
- Ensured that all relevant models, including those in assistants and LLM providers, are correctly configured for text delta compatibility during migration.
* feat(OpenAIApiClient): integrate language mapping for Qwen MT model translations
- Updated the OpenAIApiClient to utilize a new utility function for mapping target languages to Qwen MT model names, enhancing translation accuracy.
- Refactored migration logic to ensure default tool use mode is set for assistants lacking this configuration, improving user experience.
- Added a new utility function for language mapping in the utils module, supporting better integration with translation features.
* feat(ModelList): update model addition logic to determine 'supported_text_delta'
- Integrated a new utility function to assess model compatibility with text delta outputs during the model addition process in AddModelPopup.
- Simplified the logic for setting the 'supported_text_delta' property, enhancing clarity and ensuring accurate model configuration.
* feat(ModelList): unify model addition logic for 'supported_text_delta'
- Refactored model addition across AddModelPopup, EditModelsPopup, NewApiAddModelPopup, and NewApiBatchAddModelPopup to consistently determine 'supported_text_delta' using a utility function.
- Simplified the logic for setting 'supported_text_delta', enhancing clarity and ensuring accurate model configuration across components.
* feat(models): add support for new Qwen model and update effort ratio
- Introduced support for the 'qwen3-235b-a22b-thinking' model with a max token limit of 81,920.
- Updated the model options in ThinkingButton to include 'qwen_3235ba22b_thinking'.
- Adjusted the effort ratio for 'low' from 0.2 to 0.05 for improved performance.
* chore: remove
* feat(MCPService, MCPSettings, MessageTools): enhance long-running server support and UI integration
- Added support for long-running server configurations in MCPService, allowing for timeout adjustments based on server settings.
- Introduced a new `longRunning` property in MCPSettings to manage server behavior and UI elements accordingly.
- Integrated a ProgressBar component in MessageTools to visually represent progress for long-running operations, improving user experience.
* refactor(IpcChannel, MCPService, MessageTools): remove progress IPC channel and integrate progress handling
- Removed the `Mcp_SetProgress` channel from `IpcChannel` and its associated handlers in `ipc.ts` and `preload/index.ts`.
- Integrated progress handling directly in `McpService` to send progress updates to the main window.
- Updated `MessageTools` to display progress using Ant Design's `Progress` component, enhancing the user interface for long-running operations.
- Deleted the `ProgressBar` component as its functionality has been replaced by the new progress handling approach.
* feat(MCPService): add maxTotalTimeout configuration for long-running operations
- Introduced a new `maxTotalTimeout` property in MCPService to define a maximum timeout duration for long-running server operations, enhancing control over server behavior based on the `longRunning` setting.
* refactor(MCPService): remove unused notification handler for cancelled operations
* Removed the CancelledNotificationHandler from MCPService to streamline notification handling and improve code clarity.
* Updated MessageTools component to simplify rendering logic for status indicators, enhancing readability and maintainability.
* refactor(knowledge): simplify dimension settings, support base migration
Embedding dimension
- remove 'auto set dimension', let the user take control
- reuse findModelById
- improve error messages for VoyageEmbeddings
Knowledgebase migration
- enable migration when model or dimension changes
- add knowledgeThunk to reuse code
KnowledgeSettings
- unify UI for AddKnowledgeBasePopup and EditKnowledgeBasePopup
- refactor KnowledgeSettings, split it to smaller components
Tests:
- knowledgeThunk
- InputEmbeddingDimension
- KnowledgeBaseFormModal
- GeneralSettingsPanel
- AdvancedSettingsPanel
- InfoTooltip
Misc.
- add InfoTooltip
- remove MemoriesSettingsModal
* fix: i18n and vitest config
* refactor(useSmoothStream): optimize chunk handling and state management
- Replaced state management with refs for chunk queue to improve performance and reduce unnecessary re-renders.
- Introduced Intl.Segmenter for better character segmentation based on language support.
- Updated rendering logic to ensure final text is displayed correctly when the stream ends.
- Cleaned up unused effects and comments for improved code clarity.
* refactor(useSmoothStream): move segmenter initialization outside of addChunk function
- Moved the initialization of Intl.Segmenter to the top of the file for better performance and to avoid redundant instantiation within the addChunk callback.
- This change enhances the efficiency of chunk processing in the useSmoothStream hook.
Use spread operator to copy all fields from parsed JSON instead of manually
mapping specific fields. This ensures all MCPServer properties including
headers, timeout, dxtVersion, and other optional fields are preserved during
JSON import.
Previously missing fields:
- headers: Record<string, string>
- timeout: number
- dxtVersion: string
- dxtPath: string
- Other optional MCPServer properties
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* chore(env): add .env.example file and update .gitignore
- Introduced a new .env.example file with NODE_OPTIONS configuration.
- Updated .gitignore to exclude .env.example from being ignored.
- Added instructions in dev.md for copying .env.example to .env.
* fix(MessageTools): improve error handling and logging in message preview rendering (#8453)
- Enhanced the rendering logic for message previews by adding a try-catch block to handle JSON parsing errors more gracefully.
- Updated the error handling to provide clearer error messages in the preview when exceptions occur.
- Added debug logging to track the rendering process of message content.
* refactor(Theme): update theme management to use setTheme function
- Replaced toggleTheme with setTheme for more explicit theme handling.
- Removed unused SunMoon icon from TabContainer and Sidebar components.
- Updated theme icon rendering logic to directly reflect the current theme state.
- Adjusted ThemeProvider to include setTheme in context for better theme management.
* refactor(ModelList): streamline button layout and improve accessibility
- Removed tooltip wrappers from manage and add model buttons for a cleaner UI.
- Introduced a new Flex container for primary and default buttons, enhancing layout consistency.
- Updated button rendering to improve accessibility and user experience.
* feat(ModelList): add bulk add/remove functionality for models with confirmation dialog
- Implemented onAddAll and onRemoveAll functions to handle bulk actions for models.
- Added confirmation dialog for adding all models to the list, enhancing user experience.
- Updated translations for confirmation messages in multiple languages.
* chore(languages): update languages with a script (#8445)
* chore(languages): update languages with a script
* refactor: update languages and merge it into constants
* refactor: add usf and ush
* refactor(ipc): enhance write permission check and add untildify utility
- Updated the hasWritePermission function to resolve paths using the new untildify utility, improving path handling.
- Modified IPC handler to await the permission check for better asynchronous handling.
- Introduced a new untildify function to convert paths starting with '~' to the user's home directory.
* fix(ModelEdit): enhance model type management and introduce new selection logic (#8420)
* fix(ModelEdit): enhance model type management and introduce new selection logic
- Added support for 'rerank' model type in the ModelEditContent component.
- Refactored type selection logic to utilize new utility functions for finding differences and unions in model types.
- Updated model type handling to include user selection status, improving user experience in type management.
- Adjusted migration logic to initialize newType for existing models, ensuring backward compatibility.
- Introduced isUserSelectedModelType utility to streamline model type checks across the application.
* refactor(isFunctionCallingModel): simplify model type check logic
- Replaced the inline check for 'function_calling' model type with a call to the new utility function isUserSelectedModelType, enhancing code clarity and maintainability.
* feat(collection): add utility functions for array operations
- Introduced `findIntersection`, `findDifference`, and `findUnion` functions to handle array operations with support for custom key selectors and comparison functions.
- Removed previous implementations from `index.ts` to streamline utility exports.
- Added comprehensive tests for new functions covering basic types and object types with various edge cases.
* refactor(collection): rename utility functions for clarity
- Renamed `findIntersection`, `findDifference`, and `findUnion` to `getIntersection`, `getDifference`, and `getUnion` respectively for improved clarity and consistency in naming.
- Updated corresponding tests to reflect the new function names, ensuring all tests pass with the updated utility functions.
* refactor(ModelEditContent): update model type management and improve selection logic
- Replaced utility function calls to `findDifference` and `findUnion` with `getDifference` and `getUnion` for consistency.
- Introduced temporary state management for model types to enhance user selection handling.
- Added a reset functionality for model type selections, improving user experience.
- Updated the rendering logic to conditionally disable certain model types based on user selections.
* fix(ModelEditContent): enhance model type selection logic with conditional disabling
- Introduced logic to conditionally disable 'rerank' and 'embedding' model types based on user selections.
- Updated the state management for model types to ensure correct user selection handling.
- Improved the confirmation modal to reflect the updated selection logic for better user experience.
* fix(ModelEditContent): refine model type selection and update confirmation logic
- Enhanced the logic for model type selection to ensure accurate user selections for 'rerank' and 'embedding'.
- Updated the confirmation modal to reflect changes in selection handling, improving user experience.
- Adjusted state management to correctly handle updates based on selected model types.
* fix(models): update model support logic to include 'qwen3-235b-a22b-instruct'
* refactor(models): rename 'newType' to 'capabilities' and update related logic in ModelEditContent and migration scripts
* feat(ipc): add App_ResolvePath channel and update path handling
- Introduced a new IPC channel `App_ResolvePath` to resolve file paths, enhancing path management.
- Updated the `hasWritePermission` function to log the original directory instead of the resolved one.
- Modified the `LocalBackupSettings` component to utilize the new `resolvePath` method for improved directory validation.
* add ut
* fix comments
* fix clear manually
* delete duplicate var
---------
Co-authored-by: kangfenmao <kangfenmao@qq.com>
Co-authored-by: SuYao <sy20010504@gmail.com>
Co-authored-by: one <wangan.cs@gmail.com>
* refactor(CodeEditor): add fontSize to props
* feat: use CodeEditor in assistant prompt settings
* refactor(font): add code font family for windows
* refactor: support Sarasa
- Removed the reasoning check from the ThinkChunkMiddleware to streamline the processing logic.
- This change enhances the middleware's efficiency by focusing on handling streams directly without the reasoning condition.
- Updated navigation logic in `useMCPServers` and `McpServersList` to use server IDs in the URL for better routing.
- Implemented scroll position memory in `McpServersList` to enhance user experience when navigating back to the server list.
- Adjusted route parameters in `MCPSettings` to retrieve server IDs from the URL, improving data handling and clarity.
* fix(mcp-tools): enhance tool lookup logic to support partial matches
- Updated the tool lookup logic in `geminiFunctionCallToMcpTool` to include partial matches for both tool IDs and names, improving the flexibility of tool identification.
* refactor(mcp-tools): simplify tool lookup logic for improved clarity
- Refactored the tool lookup logic in `geminiFunctionCallToMcpTool` to streamline the identification process by consolidating checks for tool IDs and names into a single variable. This enhances readability and maintains functionality for partial matches.
* feat(migrate): add default settings for assistants during migration
- Introduced a new migration step to assign default settings for assistants that lack configuration.
- Default settings include temperature, context count, and other parameters to ensure consistent behavior across the application.
* chore(store): increment version number to 115 for persisted reducer
* feat(vertex-sdk): integrate Anthropic Vertex SDK and add access token retrieval
- Added support for the new `@anthropic-ai/vertex-sdk` in the project.
- Introduced a new IPC channel `VertexAI_GetAccessToken` to retrieve access tokens.
- Implemented `getAccessToken` method in `VertexAIService` to handle service account authentication.
- Updated the `IpcChannel` enum and related IPC handlers to support the new functionality.
- Enhanced the `VertexAPIClient` to utilize the `AnthropicVertexClient` for model handling.
- Refactored existing code to accommodate the integration of the Vertex SDK and improve modularity.
* feat(vertex-ai): enhance VertexAI settings and API host management
- Added a new method to format the API host URL in both AnthropicVertexClient and VertexAPIClient.
- Updated getBaseURL methods to utilize the new formatting logic.
- Enhanced VertexAISettings component to include an input for API host configuration, with help text for user guidance.
- Updated localization files to include new help text for the API host field in multiple languages.
* fix(vertex-sdk): update baseURL handling and patch dependencies
- Refactored baseURL assignment in AnthropicVertexClient to ensure it defaults to undefined when the URL is empty.
- Updated yarn.lock to reflect changes in dependency resolution and checksum for @anthropic-ai/vertex-sdk patch.
* refactor(VertexAISetting): use provider.id rather than provider
* refactor: improve API host formatting in AnthropicVertexClient
- Updated the `formatApiHost` method to streamline host URL handling.
- Introduced a helper function to determine if the original host should be used based on its format.
- Ensured consistent appending of the `/v1/` path for valid API requests.
* fix: handle empty host in AnthropicVertexClient
- Added a check in the `getBaseURL` method to return the host if it is empty, preventing potential errors.
- Included a console log for the base URL to aid in debugging and verification of the URL formatting.
* feat(AnthropicVertexClient): add logging for authentication errors and mock client in tests
- Introduced logging functionality in AnthropicVertexClient to replace console.error with logger service for better error tracking.
- Added mock implementation for AnthropicVertexClient in tests to enhance testing capabilities.
- Updated package.json to include the @aws-sdk/client-s3 dependency.
* feat(tests): add comprehensive tests for client compatibility types
- Introduced a new test file to validate compatibility types for various API clients including OpenAI, Anthropic, Gemini, Aihubmix, NewAPI, and Vertex.
- Implemented mock services to facilitate testing and ensure isolation of client behavior.
- Added tests for both direct API clients and decorator pattern clients, ensuring correct compatibility type returns.
- Enhanced middleware compatibility logic tests to verify correct identification of compatible clients.
---------
Co-authored-by: one <wangan.cs@gmail.com>
- Renamed `tempModelTypes` to `modelCapabilities` for improved clarity in the ModelEditContent component.
- Updated state management and logic to consistently use the new `modelCapabilities` variable throughout the component, enhancing readability and maintainability.
- Increased padding for the AppsContainerWrapper to 50px for better spacing.
- Added conditional padding for when the navbar is positioned at the top, reverting to 20px for improved layout consistency.
- Removed unnecessary useCallback functions for toggling assistants and topics, directly using the toggle functions instead.
- Eliminated the unused fullscreen hook import to clean up the code.
- Updated click handlers in the Navbar components for better readability and efficiency.
* fix(RawStreamListenerMiddleware): update model check for Anthropic API integration
- Replaced provider type check with model ID check to enhance compatibility with Claude models.
- Improved clarity in the middleware logic for handling raw output from the SDK.
* refactor(RawStreamListenerMiddleware): enhance model identification for Anthropic integration
- Introduced a new utility function `isAnthropicModel` to streamline model checks across the codebase.
- Updated middleware logic to utilize the new function for improved clarity and maintainability.
- Adjusted related tests to ensure compatibility with the updated model identification approach.
* test(ApiService.test): add mock for isAnthropicModel to enhance test coverage for model identification
* feat(ThinkingTagExtraction): add new tag configuration for 'kimi-vl-a3b-thinking' model and update model regex patterns in config
- Introduced a new tag configuration for the 'kimi-vl-a3b-thinking' model in ThinkingTagExtractionMiddleware.
- Updated models.ts to include regex patterns for 'kimi-vl-a3b-thinking', 'llama-guard-4', and 'llama-4' to enhance model compatibility.
* feat(models): add regex pattern for 'gemma3' model to enhance model compatibility
* feat:update kimi setting
* feat:update kimi logo
* mergei18n
* 仅修复 eslint error
Improves code readability by reformatting Moonshot provider configuration and related ternary expressions. Indentation and spacing are adjusted for consistency, with no functional changes.
* change kimi logo to 200x200
* update
* update 2 warnings in AssistantModelSettings.tsx
* fix: lint error
* fix: test error
---------
Co-authored-by: 自由的世界人 <3196812536@qq.com>
Co-authored-by: xiaochen <gongxiaochen@msh.team>
* fix(ModelEdit): enhance model type management and introduce new selection logic
- Added support for 'rerank' model type in the ModelEditContent component.
- Refactored type selection logic to utilize new utility functions for finding differences and unions in model types.
- Updated model type handling to include user selection status, improving user experience in type management.
- Adjusted migration logic to initialize newType for existing models, ensuring backward compatibility.
- Introduced isUserSelectedModelType utility to streamline model type checks across the application.
* refactor(isFunctionCallingModel): simplify model type check logic
- Replaced the inline check for 'function_calling' model type with a call to the new utility function isUserSelectedModelType, enhancing code clarity and maintainability.
* feat(collection): add utility functions for array operations
- Introduced `findIntersection`, `findDifference`, and `findUnion` functions to handle array operations with support for custom key selectors and comparison functions.
- Removed previous implementations from `index.ts` to streamline utility exports.
- Added comprehensive tests for new functions covering basic types and object types with various edge cases.
* refactor(collection): rename utility functions for clarity
- Renamed `findIntersection`, `findDifference`, and `findUnion` to `getIntersection`, `getDifference`, and `getUnion` respectively for improved clarity and consistency in naming.
- Updated corresponding tests to reflect the new function names, ensuring all tests pass with the updated utility functions.
* refactor(ModelEditContent): update model type management and improve selection logic
- Replaced utility function calls to `findDifference` and `findUnion` with `getDifference` and `getUnion` for consistency.
- Introduced temporary state management for model types to enhance user selection handling.
- Added a reset functionality for model type selections, improving user experience.
- Updated the rendering logic to conditionally disable certain model types based on user selections.
* fix(ModelEditContent): enhance model type selection logic with conditional disabling
- Introduced logic to conditionally disable 'rerank' and 'embedding' model types based on user selections.
- Updated the state management for model types to ensure correct user selection handling.
- Improved the confirmation modal to reflect the updated selection logic for better user experience.
* fix(ModelEditContent): refine model type selection and update confirmation logic
- Enhanced the logic for model type selection to ensure accurate user selections for 'rerank' and 'embedding'.
- Updated the confirmation modal to reflect changes in selection handling, improving user experience.
- Adjusted state management to correctly handle updates based on selected model types.
* fix(models): update model support logic to include 'qwen3-235b-a22b-instruct'
* refactor(models): rename 'newType' to 'capabilities' and update related logic in ModelEditContent and migration scripts
- Implemented onAddAll and onRemoveAll functions to handle bulk actions for models.
- Added confirmation dialog for adding all models to the list, enhancing user experience.
- Updated translations for confirmation messages in multiple languages.
- Removed tooltip wrappers from manage and add model buttons for a cleaner UI.
- Introduced a new Flex container for primary and default buttons, enhancing layout consistency.
- Updated button rendering to improve accessibility and user experience.
- Replaced toggleTheme with setTheme for more explicit theme handling.
- Removed unused SunMoon icon from TabContainer and Sidebar components.
- Updated theme icon rendering logic to directly reflect the current theme state.
- Adjusted ThemeProvider to include setTheme in context for better theme management.
- Enhanced the rendering logic for message previews by adding a try-catch block to handle JSON parsing errors more gracefully.
- Updated the error handling to provide clearer error messages in the preview when exceptions occur.
- Added debug logging to track the rendering process of message content.
- Introduced a new .env.example file with NODE_OPTIONS configuration.
- Updated .gitignore to exclude .env.example from being ignored.
- Added instructions in dev.md for copying .env.example to .env.
- Updated lucide-react dependency from 0.487.0 to 0.525.0 in package.json and yarn.lock.
- Added fallback language configuration in i18n setup for improved localization support.
- Refactored Tabs component to utilize classNames for conditional styling.
- Adjusted TopicsTab component's style for better layout management.
- Introduced a button in AboutSettings to open documentation based on the user's language preference.
* fix(inputSchemas): convert input schemas to JSON schema format for consistency across DifyKnowledgeServer and FileSystemServer
* fix(AnthropicAPIClient): handle empty accumulated JSON input gracefully and improve auto-approval logic for built-in tools
* feat(ApiService.test): add tests for Anthropic API client integration and response handling
- Introduced mock implementation for AnthropicAPIClient to simulate completions and response transformations.
- Added test cases to validate the streaming of chunks with correct types and content for the Anthropic model.
- Enhanced existing tests to ensure compatibility with both Gemini and Anthropic API clients.
* feat(ApiService.test): enhance tests for Anthropic API client with streaming support
- Added new test cases for streaming responses from the Anthropic API client, validating chunk types and content.
- Refactored existing tests to differentiate between non-streaming and streaming chunk generators.
- Updated mock implementations to support both streaming and non-streaming scenarios for comprehensive testing.
* test: add test for thinking tag extraction middleware
* revert: unrelated changes
---------
Co-authored-by: one <wangan.cs@gmail.com>
* refactor: streamline system prompt handling and introduce built-in tools
- Removed the static SYSTEM_PROMPT_THRESHOLD from BaseApiClient and replaced it with a constant in constant.ts.
- Updated API clients (AnthropicAPIClient, GeminiAPIClient, OpenAIApiClient, OpenAIResponseAPIClient) to simplify system prompt logic by eliminating unnecessary checks and using new utility functions for prompt building.
- Introduced built-in tools functionality, including a new 'think' tool, to enhance the tool usage experience.
- Refactored ApiService to integrate built-in tools and adjust system prompt modifications accordingly.
- Added utility functions for managing built-in tools in mcp-tools.ts and created a new tools index for better organization.
* refactor(tests): update prompt tests to use new buildSystemPromptWithTools function
- Renamed the function used in prompt tests from buildSystemPrompt to buildSystemPromptWithTools to reflect recent changes in prompt handling.
- Adjusted test cases to ensure compatibility with the updated function, maintaining the integrity of user prompt handling.
* refactor(ApiService, mcp-tools, prompt): enhance tool usage and prompt handling
- Updated ApiService to improve system prompt construction based on tool usage mode, ensuring clearer logic for tool integration.
- Enhanced mcp-tools with a new response structure for the 'think' tool, allowing for better handling of tool responses.
- Expanded prompt utility functions to include detailed instructions for using the 'think' tool, improving user guidance.
- Refactored tests to validate new prompt building logic and tool integration, ensuring robust functionality across scenarios.
* fix: enhance prompt
* feat(McpToolChunkMiddleware): enhance tool call handling with built-in tool support
- Added support for built-in tools in the parseAndCallTools function, allowing for conditional tool invocation based on tool type.
- Implemented a check to return early if the tool call response is null, improving error handling.
refactor(useSmoothStream): remove unnecessary comments and improve state initialization in Markdown component
- Cleaned up comments in useSmoothStream for clarity.
- Updated displayedContent state initialization in Markdown to handle post-processing conditionally.
* refactor(AiProvider): enhance client compatibility checks and middleware handling
- Updated AiProvider to use a compatibility type check for API clients, improving type safety and middleware management.
- Implemented getClientCompatibilityType in AihubmixAPIClient, NewAPIClient, and OpenAIResponseAPIClient to return actual client types.
- Added support for Hunyuan models in various model checks and updated the ThinkingButton component to reflect these changes.
- Improved logging for middleware construction in AiProvider.
* test(ApiService): add client compatibility type checks for mock API clients
* fix: minimax-m1 reasoning export btw
---------
Co-authored-by: Pleasurecruise <3196812536@qq.com>
* feat: ui switch
* chore: update migration version to 122 and adjust settings topic position
* refactor: replace PinnedApps component with SidebarPinnedApps and SidebarOpenedMinappTabs for improved structure
* feat(i18n): add launchpad apps and minapps translations for multiple languages
* style: update MinAppIcon and IconContainer dimensions for improved UI consistency
* refactor: remove unused SidebarContainer component from AppsPage
* refactor: adjust Navbar padding and enhance search functionality in AgentsPage
* feat(minapps): implement MinApps page and enhance mini app management features
- Added MinAppsPage for managing mini applications.
- Introduced NewAppButton for adding custom mini apps.
- Created MiniAppSettings for configuring mini app settings.
- Enhanced mini app icon management with MiniAppIconsManager.
- Updated Router to include MinAppsPage and replaced AppsPage with MinAppsPage.
- Added translations for new mini app features in multiple languages.
* wip
* refactor: rename App component to MinApp and streamline LaunchpadPage logic
- Renamed App component to MinApp for clarity.
- Removed unnecessary state management in LaunchpadPage.
- Simplified minapp sorting logic by directly using openedKeepAliveMinapps.
* feat(i18n): update translations for multiple languages and restructure title entries
- Added missing title entries for various sections in English, Japanese, Russian, Chinese (Simplified and Traditional).
- Restructured the launchpad and minapp translations for better organization.
- Enhanced navbar display settings translations across all supported languages.
* feat: add header prop to DraggableVirtualList and implement Add Topic button in TopicsTab
- Introduced a new `header` prop in the DraggableVirtualList component to allow custom header content.
- Added an Add Topic button in the TopicsTab with a corresponding styled component and translation support for multiple languages.
- Updated styles in AssistantsTab and adjusted overflow behavior in Tabs index for better UI experience.
* style: adjust margins and max-width for improved layout in various components
- Updated margin-top in HtmlArtifactsCard for consistent spacing.
- Set max-width in MessageGroup to enhance responsiveness based on navbar position.
- Modified Add Topic button in TopicsTab to emit an event for better functionality.
* fix: correct state property name in migration for navbar position
- Updated the migration logic to set the correct state property from `topicPosition` to `navbarPosition` for proper configuration handling.
* fix: adjust traffic light position and navbar height for improved UI consistency
- Updated traffic light position in WindowService to enhance layout.
- Adjusted navbar height in color.scss for better alignment across components.
- Modified TabContainer to track last settings path and improve navigation handling.
* style: update AddTopicButton styling for improved hover effect in TopicsTab
- Changed AddTopicButton from a button to a div for better styling flexibility.
- Removed dashed border and added background color on hover for enhanced user experience.
- Retained border-radius for consistent design across components.
* feat: add TextBadge component and integrate into Display and Memory settings
- Introduced a new TextBadge component for displaying styled badges.
- Integrated TextBadge into DisplaySettings to highlight the navbar title as "New".
- Replaced inline badge implementation in MemorySettings with the new TextBadge component for consistency and improved maintainability.
* fix: adjust tab and navbar styling for improved UI consistency
- Increased height of title bar overlays for better visual balance.
- Updated tab creation logic to prevent duplicate tabs for specific paths.
- Modified tab icon and close button sizes for a more compact design.
- Enhanced tab spacing and padding for improved layout across components.
* style: update PinnedMinapps component for improved UI consistency
- Increased icon size and adjusted border radius for better visual appeal.
- Modified TopNavContainer padding and margin for enhanced layout.
- Reduced dimensions of TopNavIcon for a more compact design.
* refactor: enhance TabsContainer logic and styling for improved tab management
- Introduced a new `removeSpecialTabs` function to manage special tab removal more effectively.
- Updated tab filtering logic to utilize a dedicated `specialTabs` array for better maintainability.
- Adjusted styling in PinnedMinapps for consistent icon sizing and background color improvements.
* style: adjust layout and padding for improved UI consistency in Chat and Inputbar components
- Updated main height calculation in Chat component to account for additional spacing.
- Modified padding in Inputbar component for better alignment when navbar is positioned at the top.
- Ensured consistent minimum height in Tabs component to match updated navbar height calculations.
* refactor: update app menu item text keys for improved localization
- Changed text keys in the app menu items from specific titles to a more generalized 'title' namespace for better consistency and maintainability.
- Ensured that the visual representation of the menu items remains unchanged while enhancing the localization structure.
* refactor: simplify sidebar toggle logic in ChatNavbar and Navbar components
- Removed unnecessary cooldown logic when toggling the visibility of assistants and topics.
- Updated HomePage to conditionally render the Navbar based on the sidebar state for improved UI responsiveness.
* refactor: streamline Chat component and introduce useChatMaxWidth hook
- Consolidated max width calculation logic into a new `useChatMaxWidth` hook for better reusability.
- Removed unused variables and simplified state management in the Chat component.
- Updated MessageGroup to utilize the new `useChatMaxWidth` hook for consistent layout handling.
* refactor: remove FloatingSidebar component and integrate AssistantsDrawer for improved UI management
- Deleted the FloatingSidebar component to streamline the codebase.
- Introduced AssistantsDrawer for managing assistant interactions, enhancing user experience.
- Updated Navbar and ChatNavbar components to utilize AssistantsDrawer instead of FloatingSidebar for better responsiveness and maintainability.
* refactor: implement TabsService for improved tab management functionality
- Introduced TabsService to centralize tab operations, including closing and setting active tabs.
- Updated TabsContainer and LaunchpadPage components to utilize TabsService for closing tabs, enhancing code maintainability.
- Made minor UI adjustments in PinnedMinapps for consistent icon sizing and layout improvements.
* fix: prevent default event behavior when not in fullscreen mode
- Updated WindowService to conditionally call event.preventDefault() only when the main window is not in fullscreen, improving event handling logic.
* refactor: match provider and model using a consistent method
* refactor: use keywords matching across model selectors
* refactor: update match, reuse getFancyProviderName
* refactor: use modelSelectFilter in knowledgebase settings
* refactor: use filter in ModelList
* refactor: add filterModelsByKeywords
* refactor: add getModelSelectOptions
* style: better function names
* fix: update effect dependencies in popup and panel components
Adjusted dependency arrays in HtmlArtifactsPopup and QuickPanelView to ensure correct effect execution. This change improves state synchronization and prevents unnecessary updates.
* refactor: use match in memory settings
* refactor: add avatar to model selector
* refactor: simplify utils, move select options to components
* docs: add comments
* refactor: move filter to SelectOptions
* test: add tests for SelectOptions
* test: remove type mock
* refactor: use match in EditModelsPopup
* refactor: use SelectOptions in SelectProviderModelPopup, add more tests
* fix: api check model select
* refactor: improve websearch rag model select style
* refactor: add a ModelSelector
* test: update tests for ModelSelector
* docs: comments
---------
Co-authored-by: 自由的世界人 <3196812536@qq.com>
* fix: ensure add button is always visible for empty model providers
- Move add button outside of isEmpty(models) condition to fix regression
- Keep manage and health check buttons conditional (only show when models exist)
- Fixes issue where users cannot add first model to custom providers
- Maintains clean UI by hiding management features when no content exists
Resolves the UX blocker introduced in commit 2b0c46bf where all buttons
were hidden for empty providers, preventing users from adding initial models.
* fix: remove isEmpty check to always show model management buttons
Remove isEmpty(models) conditions for manage, search, and health check buttons
to ensure all functionality is available even with empty model lists.
* feat: implement useSmoothStream hook for dynamic text rendering
- Added a new custom hook `useSmoothStream` to manage smooth text streaming with adjustable delays.
- Integrated `useSmoothStream` into the Markdown component to enhance content display during streaming.
- Implemented logic to handle content updates and reset conditions based on block status.
* feat: enhance chunk processing in useSmoothStream hook
- Updated the `addChunk` function to split text into characters for Chinese and words for English using a regular expression.
- Improved text rendering logic to support mixed language content more effectively.
* refactor: improve regular expression for chunk processing in useSmoothStream hook
- Updated the regular expression to enhance text splitting capabilities, allowing for better handling of mixed language content, including Chinese characters and alphanumeric sequences.
* refactor: simplify character processing in useSmoothStream hook
- Replaced the regular expression for character extraction with a direct conversion of the chunk to an array of characters.
- This change streamlines the chunk processing logic, enhancing performance and readability.
* feat: add post-processing capability to Markdown component
- Enhanced the Markdown component to accept an optional post-processing function for text manipulation during streaming.
- Updated MainTextBlock to utilize the new postProcess prop, allowing for dynamic content adjustments based on citation references.
* fix: update mock Markdown component to support post-processing
- Modified the mock implementation of the Markdown component to accept and apply an optional postProcess function, ensuring that the test environment accurately reflects the updated functionality introduced in the previous commit.
* refactor(ProviderSetting): add a backtop to provider setting
* refactor: decouple ModelList from ProviderSetting
* refactor: move modellist to a single dir
* refactor: allow more props for CollapsibleSearchBar
* refactor: split ModelList into ModelList, ModelListGroup and ModelListItem
* refactor: simplify health check types, improve file structure
* refactor: split HealthStatusIndicator from list items
* refactor: better indicator tooltip
* refactor: improve model search, simplify some expressions
* refactor: further simplify ModelList by extracting onHealthCheck
* refactor: remove double scroller from EditModelsPopup
* revert: remove backtop
* fix: i18n order
* refactor: sort buttons
* fix: fix persistent "Searching..." indicators for o3 model web search
- Add missing LLM_WEB_SEARCH_IN_PROGRESS event in OpenAIAPIClient
- Prevent duplicate CitationBlock creation
- Ensure search status updates correctly after completion
Fixes#8307
* fix: prevent duplicate citation blocks in web search callbacks
- Add checks in onExternalToolInProgress and onLLMWebSearchInProgress
- Return early if citationBlockId already exists
- Fixes persistent "Searching..." indicator for o3 model web search
refactor(Logger): enhance logging with environment variable support
- Updated LoggerService to utilize environment variables for filtering logs by level and module in development mode.
- Modified the logging level handling to use constants from the logger configuration.
- Enhanced documentation to include details on using environment variables for log filtering in both English and Chinese documentation files.
- Cleaned up unused type definitions related to logging.
* docs: enhance LoggerService documentation and usage guidelines
- Added details about `initWindowSource` method, emphasizing its return of the LoggerService instance for method chaining.
- Introduced a section on using LoggerService within `worker` threads, highlighting the need to call `initWindowSource` first.
- Updated both English and Chinese documentation files to reflect these changes, ensuring clarity in usage instructions for developers.
* docs: update LoggerService documentation and improve environment checks
- Enhanced documentation for using LoggerService in worker threads, clarifying logging support limitations in main and renderer processes.
- Added environment checks for development and production modes directly in the LoggerService.
- Removed the unused env utility file to streamline the codebase.
* refactor(ShikiStreamService): update highlighter management and improve test assertions
- Modified the highlighter management in ShikiStreamService to clear the reference instead of disposing it directly, as it is now managed by AsyncInitializer.
- Enhanced unit tests to verify the initialization of worker and main highlighters, ensuring that either one is active but not both, and updated assertions related to highlighter disposal.
* fix/selection-not-copy
* fix: abort not copy
* test: add actionUtil test
Update onStream callback to accept content parameter and set copyable content
during streaming instead of only at completion. Removes redundant content
tracking in ActionUtils and properly passes content to callbacks as it's
received. Adds test directory structure for components.
* refactor: improve streaming content handling and fix error states
Refine content handling in ActionUtils by tracking content internally rather than
passing it through onStream callbacks. Properly set error status in message
updates and ensure content is finalized on errors. Fix typo in test filename.
* fix: show error
* chore: remove unuse
* chore: remove console
* refactor: replace console logging with logger service across multiple components
- Updated various files to utilize the logger service instead of console.log for improved logging consistency and error tracking.
- Enhanced logging levels to better categorize messages, including debug and error levels.
- Refactored logging in components such as ApiClientFactory, KnowledgeService, and MemoryProcessor to align with the new logging standards.
* refactor: update logging level in App component from error to info
- Changed the logging level in the App component to provide a more appropriate context for initialization messages, enhancing clarity in the logging output.
* refactor(logging): replace console.log with logger service in middleware and update ESLint comments
- Updated the logging implementation in the createSimpleLoggingMiddleware function to use logger.debug and logger.error instead of console.log and console.error for improved logging consistency.
- Added eslint-disable comments for restricted syntax in preload and useAppInit hooks to suppress warnings.
* chore: update ESLint configuration and LoggerService formatting
- Refactored ESLint configuration to include custom rules for LoggerService, applying them specifically to the src directory while ignoring test and mock files.
- Commented out date formatting options in LoggerService for improved clarity in development logging.
* fix: add eslint-disable comments for restricted syntax in LoggerService
- Added eslint-disable comments to suppress warnings for restricted syntax in LoggerService for both main and renderer services.
- Improved error handling by logging messages when the window source is not initialized in the renderer LoggerService.
* Revert "feat: optimize minapp cache with LRU (#8160)"
This reverts commit f0043b4be5.
* feat: integrate logger service and enhance logging throughout the application
- Added a new LoggerService to standardize logging across the application.
- Replaced console.error and console.warn calls with logger methods for improved consistency and error tracking.
- Introduced a new IPC channel for logging messages to the main process.
- Updated various components and services to utilize the new logging system, enhancing error handling and debugging capabilities.
* refactor: enhance logging and error handling across various components
- Integrated the LoggerService for consistent logging throughout the application.
- Updated multiple components and services to utilize the new logging system, improving error tracking and debugging capabilities.
- Refactored file handling and error management in several services to enhance reliability and clarity.
- Improved the structure and readability of the codebase by removing redundant checks and simplifying logic.
* chore: update TypeScript configuration and enhance test setup
- Added test mock paths to tsconfig.web.json for improved test coverage.
- Configured Vitest to include a setup file for main tests, ensuring consistent test environment.
- Updated IPC logger context for better clarity in logging.
- Enhanced LoggerService to handle undefined values gracefully.
- Mocked LoggerService globally in renderer tests to streamline testing process.
* refactor: standardize logging across ProxyManager and ReduxService
- Replaced instances of Logger with logger for consistent logging implementation.
- Improved logging clarity in ProxyManager's configureProxy method and ReduxService's state handling.
- Enhanced error logging in ReduxService to align with the new logging system.
* refactor: reorganize LoggerService for improved clarity and consistency
- Moved the definition of SYSTEM_INFO, APP_VERSION, and DEFAULT_LEVEL to enhance code organization.
- Simplified the getIsDev function in the renderer LoggerService for better readability.
- Updated logging conditions to ensure messages are logged correctly based on context.
* docs: add usage instructions for LoggerService and clean up logging code
- Included important usage instructions for LoggerService in both English and Chinese.
- Commented out the console transport in LoggerService to streamline logging.
- Improved logging message formatting in MCPService for clarity.
- Removed redundant logging statements in SelectionService to enhance code cleanliness.
* refactor: update LoggerService documentation paths and enhance logging implementation
- Changed the documentation paths for LoggerService usage instructions to `docs/technical/how-to-use-logger-en.md` and `docs/technical/how-to-use-logger-zh.md`.
- Replaced console logging with the loggerService in various components, including `MCPSettings`, `BlockManager`, and multiple callback files, to ensure consistent logging practices across the application.
- Improved the clarity and context of log messages for better debugging and monitoring.
* docs: emphasize logger usage guidelines in documentation
- Added a note in both English and Chinese documentation to discourage the use of `console.xxx` for logging unless necessary, promoting consistent logging practices across the application.
* feat(minapp): add Google login tip for untrusted browser issue
* feat(miniapp): add open Google button for Google Login popup
* feat(minapp): replace custom alert with Ant Design Alert component
- Updated the getClient method to ensure the OpenAIResponseAPIClient is only returned for non-chat completion models, improving model compatibility checks.
* test: add comprehensive tests for ApiClientFactory
- Test all special ID client mappings (aihubmix, new-api, ppio)
- Test all standard provider type mappings
- Test edge cases and default behavior
- Test isOpenAIProvider utility function
- Achieve full coverage of factory logic
* test: fix ApiClientFactory test for OpenAIResponseAPIClient changes
- Add getClient mock method to OpenAIResponseAPIClient mock
- Fix provider id from 'azure' to 'azure-openai' to match actual configuration
- Ensure tests properly reflect the new OpenAIResponseAPIClient implementation
* test: refactor ApiClientFactory tests and move isOpenAIProvider to utils
- Simplify test data creation with createTestProvider helper
- Move isOpenAIProvider to utils and fix vertexai handling
- Update related imports
* refactor(ActionUtils): streamline message processing logic
- Removed unnecessary content accumulation for thinking and text blocks.
- Updated handling of message chunks to directly use incoming text for updates.
- Improved state management for thinking and text blocks during streaming.
- Enhanced the logic for creating and updating message blocks to ensure proper status and content handling.
* chore: remove log
* feat(ActionUtils): update message block instruction during processing
- Added dispatch to update the message block instruction with the current block ID when processing messages.
- Enhanced state management for message updates to ensure accurate tracking of block instructions during streaming.
* feat(ActionUtils): enhance message processing with text block content tracking
- Introduced a new variable to store the content of the text block during message processing.
- Updated the logic to dispatch the current text block content upon completion of message chunks, improving state management and accuracy in message updates.
* feat(ActionUtils): refine message processing error handling and status updates
- Enhanced the logic to update the message status based on error conditions, ensuring accurate representation of message states.
- Improved handling of text block content during processing, allowing for better state management and completion tracking.
- Streamlined the dispatch of updates for message blocks, particularly in error scenarios, to maintain consistency in message processing.
* feat(messageThunk): export throttled block update functions for improved message processing
- Changed the visibility of `throttledBlockUpdate` and `cancelThrottledBlockUpdate` functions to export, allowing their use in other modules.
- Updated `processMessages` in ActionUtils to utilize the newly exported functions for handling message updates, enhancing the efficiency of block updates during message processing.
* fix(ActionUtils): correct text block content handling in message processing
- Changed the declaration of `textBlockContent` to a constant to prevent unintended modifications.
- Updated the logic in `processMessages` to use the text block ID for throttled updates instead of the content, ensuring accurate message updates during processing.
* feat(HomeWindow): improve message processing with throttled updates
- Integrated `throttledBlockUpdate` and `cancelThrottledBlockUpdate` for managing thinking and text block updates, enhancing performance during message streaming.
- Updated logic to handle chunk types more effectively, ensuring accurate content updates and status management for message blocks.
- Streamlined the dispatch of message updates upon completion and error handling, improving overall state management.
* feat: add data parsing functionality in handleProvidersProtocolUrl
- Introduced a new ParseData function to decode and parse base64 encoded data from the URL parameters.
- Added error handling to log when data is null or invalid, improving robustness of the handleProvidersProtocolUrl function.
* fix: update data parsing in handleProvidersProtocolUrl and ProvidersList
- Modified ParseData function to return a JSON string instead of an object for consistency.
- Simplified data extraction in ProvidersList by directly parsing the addProviderData without base64 decoding, improving readability and performance.
* fix: improve data parsing in handleProvidersProtocolUrl
- Updated ParseData function to log the parsed result for better debugging.
- Enhanced data extraction by replacing URL-safe characters back to their original form before parsing, ensuring accurate data retrieval.
* fix: enhance error logging in ParseData function
- Updated the ParseData function to log errors when parsing fails, improving debugging capabilities and robustness in handling invalid data.
* format code
fix: enhance assistant topic validation in useActiveTopic hook
Updated the useActiveTopic hook to ensure that the assistant and its topics are properly validated before accessing properties. This prevents potential errors when data is not fully loaded.
* feat(ThinkingTagExtraction): accumulate thinking content for improved processing
- Introduced an `accumulatedThinkingContent` variable to gather content from multiple chunks before enqueuing.
- Updated the `ThinkingDeltaChunk` to use the accumulated content instead of individual extraction results, enhancing the coherence of thinking messages.
* feat(OpenAIAPIClient): enhance chunk processing for reasoning and content extraction
- Updated the OpenAIAPIClient to handle additional fields in response chunks, including `reasoning_content` and `reasoning`, improving the extraction of relevant information.
- Introduced a new mock implementation for testing OpenAI completions, ensuring accurate handling of thinking and text chunks in the response.
- Enhanced unit tests to validate the processing of OpenAI thinking chunks, ensuring expected behavior and output.
* feat: implement BlockManager and associated callbacks for message streaming
- Introduced BlockManager to manage message blocks with smart update strategies.
- Added various callback handlers for different message types including text, image, citation, and tool responses.
- Enhanced state management for active blocks and transitions between different message types.
- Created utility functions for handling block updates and transitions, improving overall message processing flow.
- Refactored message thunk to utilize BlockManager for better organization and maintainability.
This implementation lays the groundwork for more efficient message streaming and processing in the application.
* refactor: clean up BlockManager and callback implementations
- Removed redundant assignments of lastBlockType in various callback files.
- Updated error handling logic to ensure correct message status updates.
- Added console logs for debugging purposes in BlockManager and citation callbacks.
- Enhanced smartBlockUpdate method call in citation callbacks for better state management.
* refactor: streamline BlockManager and callback logic
- Removed unnecessary accumulated content variables in text and thinking callbacks.
- Updated content handling in callbacks to directly use incoming text instead of accumulating.
- Enhanced smartBlockUpdate calls for better state management in message streaming.
- Cleaned up console log statements for improved readability and debugging.
* feat: add support for 302AI provider in MCP settings
- Introduced new provider for 302AI, including token management and server synchronization functionality.
- Updated SyncServersPopup to integrate 302AI provider.
- Added new file for 302AI provider utilities, including token storage and server fetching logic.
* fix: re-merge main
* feat(models): enhance function calling model detection and update migration logic
- Added support for 'gemini-1' in FUNCTION_CALLING_EXCLUDED_MODELS.
- Updated isFunctionCallingModel to handle optional model input.
- Modified migration logic to change tool use mode for assistants using function calling models.
* feat(models): add new models to vision and function calling lists
- Added 'kimi-thinking-preview' to visionAllowedModels.
- Added 'kimi-k2' to FUNCTION_CALLING_MODELS.
- Updated migration logic to ensure compatibility with new model settings.
* refactor(TextChunkMiddleware): streamline text accumulation logic and improve response handling
- Simplified the logic for accumulating text content and updating the internal state.
- Ensured that the final text is consistently used in response callbacks.
- Removed redundant code for handling text completion in the ToolUseExtractionMiddleware.
- Added mock state for MCP tools in tests to enhance coverage for tool use extraction.
* refactor(BaseApiClient): remove unused content extraction utility
- Replaced the usage of getContentWithTools with getMainTextContent in the getMessageContent method.
- Cleaned up imports by removing the unused getContentWithTools function.
* fix: add channel property to notifications for backup and assistant messages
* Add notification tip and improve assistant notification logic
Added a tooltip in the notification settings UI to clarify that only messages exceeding 30 seconds will trigger a reminder. Updated i18n files for all supported languages with the new tip. Modified notification logic to only send notifications for assistant responses or errors if the message duration exceeds 30 seconds and the user is not on the home page or the window is not focused.
* Remove duplicate InfoCircleOutlined import
Consolidated the import of InfoCircleOutlined from '@ant-design/icons' to avoid redundancy in GeneralSettings.tsx.
* fix: add isFocused mock and simplify createMockStore
Added a mock for isFocused in the window utility and refactored createMockStore to return the configured store directly. This improves test setup clarity and ensures all necessary window utilities are mocked.
* Merge memory into main
* Improvement/memory UI (#7655)
* feat: add auto-dimension detection to memory settings
- Add automatic embedding dimension detection for memory configuration
- Add toggle switch to enable/disable auto-detection (enabled by default)
- Detect dimensions by making test API call to embedding provider
- Show dimension input field only when auto-detection is disabled
- Add loading state and error handling during dimension detection
- Maintain consistency with knowledge base dimension handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* ✨ feat: implement unified embedding dimensions for memory service
- Add jaison dependency for robust JSON parsing
- Normalize all embeddings to 1536 dimensions for consistency
- Improve embedding dimension logging
- Update memory processor to use jaison for better error handling
- Handle various JSON response formats in fact extraction
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: refactor MemoriesPage layout with new styled components and improved user management features
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Improvement/memory UI (#7656)
Co-authored-by: Claude <noreply@anthropic.com>
* ✨ feat: add memory icon to sidebar for existing users
- Add migration version 118 to enable memory feature visibility
- Adds 'memory' icon to sidebar visible icons if not already present
- Updates store version to trigger migration for existing users
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix(memory): include last user message ID in processor config
* ✨ feat(memory): enhance memory settings UI and add new translations
* Enhance memory management UI: Added settings, statistics, search, actions, and user management sections to the memory page. Updated translations for multiple languages to include new UI elements. Refactored component structure for improved layout and readability.
* feat: add i18n
* ui: Enhance memory modals and UI
* refactor(memory): replace direct message calls with window.message for error and success notifications
* fix: eslint error
* feat(memory): enhance memory restoration logic and queries
- Updated MemoryService to restore deleted memories instead of inserting new ones if a memory with the same hash exists.
- Added new SQL queries to check for deleted memories and restore them.
- Improved logging for memory restoration and embedding generation.
- Refactored related API service methods to handle updated memory processing logic.
* refactor: update memory configuration to use ApiClient structure
- Refactored memory-related services and components to utilize the new ApiClient structure for embedding and reranking models.
- Updated constructors and method signatures across multiple files to accept embedApiClient and rerankApiClient parameters.
- Enhanced memory settings UI to reflect changes in memory configuration management.
- Improved type definitions for KnowledgeBaseParams and MemoryConfig to align with the new structure.
* ui: improve user interface for adding new users in memory page
- Enhanced the button for adding new users by incorporating an icon and adjusting padding for better alignment.
- Updated the user selection options to ensure consistent alignment of avatars and user names.
- Refactored layout to improve overall user experience and visual consistency.
* refactor(memory): streamline MemoryProcessor usage in ApiService
- Removed the singleton instance of MemoryProcessor and instantiated it directly within the ApiService methods.
- Updated relevant methods to utilize the new instance for searching and processing memories, improving clarity and encapsulation of memory handling logic.
* chore: move knowledge dir
* fix: correct import paths in KnowledgeService.ts
* fix(Memory): memory deduplicate
* fix(Memory): memory llm provider
* fix: ci error
* fix(Memory): update fact extraction prompt to focus on personal information
* feat: Refactor memory fom sidebar to settings page
- Removed MemoryStick icon from Sidebar component.
- Updated navigation to point to the new memory settings page.
- Introduced MemoriesSettingsModal for managing memory configurations.
- Created MemorySettings component for comprehensive memory management.
- Added user management features including adding, editing, and deleting users.
- Implemented pagination and search functionality for memory items.
- Updated sidebar settings to remove memory icon and ensure proper migration.
- Adjusted Redux store settings to reflect changes in sidebar icons.
* feat: redesign memory settings page with improved UI and layout
* fix i18n
* fix: update citation titles to include memory hash and increment version number
* fix: remove unnecessary prop from KnowledgeCitation component
* feat: enhance fact extraction prompt with clearer guidelines and examples
* 🔧 feat: disable global memory by default and improve UI
- Set globalMemoryEnabled default to false for better user experience
- Remove manual localStorage handling to rely on redux-persist
- Add Beta badge to memory settings section
- Improve layout and styling of memory settings UI components
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Simplify external tool completion handling
* Fix whitespace in migrate config
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: suyao <sy20010504@gmail.com>
Co-authored-by: eeee0717 <chentao020717Work@outlook.com>
Co-authored-by: kangfenmao <kangfenmao@qq.com>
Co-authored-by: 自由的世界人 <3196812536@qq.com>
* feat: Add URL Context ability for Gemini Models
* feat: Adding URL Context Button to tool bar and make it visible only when gemini models selected.
It is not working (adding urlContext tools) for now.
* fix: trying to force enable UrlContext function
* fix: enableUrlContext indication reverted
* feat: migration script for refreshing tool order to add URL Context button.
* fix: optimize migrate.ts
* fix: upgrade version
---------
Co-authored-by: suyao <sy20010504@gmail.com>
* test: add unit tests for getPotentialIndex and input utils
- Add tests for getPotentialIndex function covering streaming text tag detection scenarios
- Add tests for input utils including file drop and keyboard shortcut detection
* test: refactor test structure to comply with TEST_UTILS.md guidelines
- Add file-level describe blocks for both test files
- Fix mock cleanup in input.test.ts:
- Add vi.clearAllMocks() in beforeEach
- Replace vi.clearAllMocks() with vi.restoreAllMocks() in afterEach
- Maintain two-layer describe structure as per project standards
* feat: enhance OpenAIResponseAPIClient and update localization for Azure API version
- Added a new method `formatApiHost` in OpenAIResponseAPIClient to ensure correct API host formatting.
- Updated localization files for English, Japanese, Russian, and Chinese to include tips for Azure OpenAI API version usage.
- Modified ProviderSetting component to display the new Azure API version tip in the settings interface.
* chore: clean log
- Updated Vite configuration to remove conditional output settings, ensuring consistent build behavior.
- Refactored CitationsList component to use a Scrollbar for improved UI, encapsulating popover content within a styled container.
- Added support for incremental output in AnthropicAPIClient by introducing TEXT_START and THINKING_START chunk types.
- Updated OpenAIAPIClient to conditionally enable incremental output for specific models.
- Modified messageThunk to handle updated smartBlockUpdate calls with an isComplete parameter for better state management.
- Introduced incremental_output parameter in ReasoningEffortOptionalParams type for enhanced configuration options.
* feat(i18n): add smooth stream output translations for multiple languages
* feat(ThinkingBlock): integrate MarqueeComponent for enhanced message display
* refactor(i18n): remove smooth stream output references from translations and components
* refactor(typingOutput): enhance typing output logic and add debugging information
* refactor(Markdown): consolidate markdown utility imports for cleaner code
* feat(styles): add new styles for dropdown menus, popovers, and modals
* test(ThinkingBlock): enhance tests for streaming status and content collapse behavior
* refactor(typingOutput): remove debugging console log from outputNextChar function
* refactor(MarqueeComponent): comment out blur effect for last marquee item and adjust ThinkingBlock margin
* style(ThinkingBlock): update snapshot to include margin-top for improved layout
* refactor(typingOutput): 修改流式输出逻辑以支持队列长度检查
* refactor(Markdown): simplify useTypingOutput by removing isStreaming parameter
* test(Markdown): comment out re-render tests for content changes
* test(Markdown): remove commented-out re-render tests for content changes
* feat(ThinkingEffect): implement ThinkingEffect component for dynamic message display
- Introduced ThinkingEffect component to enhance the visual representation of thinking states.
- Integrated the new component into ThinkingBlock, replacing MarqueeComponent for improved functionality.
- Added animations and dynamic height adjustments based on message content and expansion state.
* test(ThinkingBlock): update mocks for ThinkingEffect and motion components in tests
* fix: Delete unnecessary comments
- Removed unnecessary extracted components and integrated their logic directly into HtmlArtifactsPopup.
- Enhanced preview functionality with a debounced update mechanism for HTML content.
- Updated styling for better layout and responsiveness, including fullscreen handling.
- Adjusted view mode management for clearer code structure and improved user experience.
* fix: replace Select component with custom Selector in LocalBackupSettings
- Updated LocalBackupSettings to use a custom Selector component for better styling and functionality.
- Enhanced the options for auto-sync interval and max backups with improved structure and internationalization support.
- Added success notification handling in restoreFromLocalBackup function in BackupService for better user feedback.
* refactor: streamline backup service and settings management
- Removed local backup auto-sync functionality and integrated its logic into the general auto-sync mechanism.
- Updated backup service methods to handle specific backup types (webdav, s3, local) more efficiently.
- Renamed backup functions for consistency and clarity.
- Enhanced local backup management in settings to utilize the new auto-sync structure.
- Improved error handling and logging for backup operations.
* refactor: replace Select component with custom Selector in S3Settings
- Updated S3Settings to utilize a custom Selector component for improved styling and functionality.
- Enhanced the options for auto-sync interval and max backups with better structure and internationalization support.
- Removed deprecated Select component to streamline the settings interface.
- Introduced `isHtmlCode` function to identify HTML content based on DOCTYPE and tag presence.
- Updated `CodeBlockView` to utilize `isHtmlCode` for conditional rendering of HTML artifacts.
- Added comprehensive tests for `isHtmlCode` to ensure accurate detection of HTML structures.
- Removed unnecessary letter and word spacing in markdown styles.
- Adjusted padding in Inputbar for improved layout.
- Modified margin properties in CitationsList and Message components for consistency.
- Enhanced MessageHeader logic to conditionally hide based on message type.
- Updated icon sizes in MessageMenubar for better alignment.
- Added margin adjustments in ThinkingBlock for improved spacing.
* chore(version): 1.4.10
* feat: enhance ThinkingTagExtractionMiddleware and update smartBlockUpdate function
- Added support for THINKING_START and TEXT_START chunk types in ThinkingTagExtractionMiddleware.
- Updated smartBlockUpdate function to include an isComplete parameter for better block state management.
- Ensured proper handling of block updates based on completion status across various message types.
* fix: refine block update logic in messageThunk
- Adjusted conditions for canceling throttled block updates based on block type changes and completion status.
- Improved handling of block updates to ensure accurate state management during message processing.
* chore: add comment
* fix: update message block status handling
- Changed the status of image blocks from STREAMING to PENDING to better reflect the processing state.
- Refined logic in OpenAIResponseAPIClient to ensure user messages are correctly handled based on assistant message content.
- Improved rendering conditions in ImageBlock component for better user experience during image loading.
---------
Co-authored-by: kangfenmao <kangfenmao@qq.com>
* refactor: raise the max count of document chunks from 30 to 70
- Raise the max count of document chunks count
- Update i18n for websearch rag for consistency
* refactor: lower the count to 50
- Adjusted spacing and border styles in MessageTools for better alignment.
- Updated margin and border properties in Prompt for consistent UI.
- Enhanced background color handling in ToolContentWrapper based on status.
* feat: save to knowledge
* refactor: simplify checkbox
* feat(i18n): add 'Save to Local File' translation key for multiple languages
---------
Co-authored-by: suyao <sy20010504@gmail.com>
* feat(SelectionService): enhance action window handling for macOS fullscreen mode
- Updated processAction and showActionWindow methods to support fullscreen mode on macOS.
- Added isFullScreen parameter to manage action window visibility and positioning.
- Improved action window positioning logic to ensure it remains within screen boundaries.
- Adjusted IPC channel to pass fullscreen state from the renderer to the service.
- Updated SelectionToolbar to track fullscreen state and pass it to the action processing function.
* chore(deps): update selection-hook to version 1.0.6 in package.json and yarn.lock
* fix(SelectionService): improve macOS fullscreen handling and action window focus
- Added app import to manage dock visibility on macOS.
- Enhanced fullscreen handling logic to ensure the dock icon is restored correctly.
- Updated action window focus behavior to prevent unintended hiding when blurred.
- Refactored SelectionActionApp to streamline auto pinning logic and remove redundant useEffect.
- Cleaned up SelectionToolbar by removing unnecessary window size updates when demo is false.
* refactor(SelectionService): remove commented-out code for clarity
* refactor(SelectionService): streamline macOS handling and improve code clarity
* feat(CodeBlock): support dot language in code block
- render DOT using @viz-js/viz
- highlight DOT using @viz-js/lang-dot (CodeEditor only)
- extract a special view map, update file structure
- extract and reuse the PreviewError component across special views
- update dependencies, fix peer dependencies
* chore: prepare for merge
- Adjusted color for list items in color.scss for better contrast.
- Modified line-height and margins in markdown.scss for improved text readability.
- Changed height property in FloatingSidebar.tsx for consistent layout.
- Increased padding in AgentsPage.tsx for better spacing.
- Updated padding and border-radius in Inputbar.tsx for enhanced aesthetics.
- Reduced margin in MessageHeader.tsx for tighter layout.
- Refactored GroupTitle styles in AssistantsTab.tsx for better alignment and spacing.
refactor(AiProvider): comment out unnecessary middleware removal for performance optimization
- Commented out the removal of ThinkingTagExtractionMiddlewareName to prevent potential performance degradation while maintaining existing functionality.
- Retained the removal of ThinkChunkMiddlewareName as part of the existing logic for non-reasoning scenarios.
* test: enhance download and fetch utility test coverage
- Add MIME type handling tests for data URLs in download.test.ts
- Add timestamp generation tests for blob and network downloads
- Add Content-Type header handling test for extensionless files
- Add format parameter tests (markdown/html/text) for fetchWebContent
- Add timeout signal handling tests for fetch operations
- Add combined signal (user + timeout) test for AbortSignal.any
These tests improve coverage of edge cases and ensure critical functionality
is properly tested.
* fix: add missing error handling for fetch in download utility
- Add .catch() handler for network request failures in download()
- Use window.message.error() for user-friendly error notifications
- Update tests to verify error handling behavior
- Ensure proper error messages are shown to users
This fixes a missing error handler that was discovered during test development.
* refactor: improve test structure and add i18n support for download utility
- Unified test structure with two-layer describe blocks (filename -> function name)
- Added afterEach with restoreAllMocks for consistent mock cleanup
- Removed individual mockRestore calls in favor of centralized cleanup
- Added i18n support to download.ts for error messages
- Updated error handling logic to avoid duplicate messages
- Updated test expectations to match new i18n error messages
* test: fix react-i18next mock for Markdown test
Add missing initReactI18next to mock to resolve test failures caused by i18n initialization when download utility imports i18n module.
- Added BuiltinMCPServersSection and McpResourcesSection components to display available MCP servers and resources.
- Updated navigation logic to redirect users to the MCP settings upon adding a server.
- Enhanced localization by adding new keys for built-in servers in multiple languages.
- Improved the SettingsPage layout by reordering menu items for better accessibility.
- Added checks for complete HTML documents based on presence of critical tags.
- Updated unmatched tag detection to include a comprehensive list of HTML5 void elements.
- Improved HTML content rendering with a fixed interval update mechanism.
- Adjusted modal header styles for better layout consistency.
- Enabled editing capabilities in the CodeEditor component for HTML content.
- Increased line height and adjusted margins for headers and paragraphs to enhance text clarity.
- Added letter and word spacing for better text presentation.
- Updated blockquote and table styles for a more visually appealing layout.
- Improved hover effect for table rows to enhance user interaction.
- Removed the obsolete HtmlArtifacts component and its associated logic.
- Introduced the new HtmlArtifactsCard component to enhance the rendering of HTML artifacts.
- Updated the CodeBlockView to utilize HtmlArtifactsCard, improving maintainability and user experience.
- Added a new HtmlArtifactsPopup component for better HTML content preview and editing capabilities.
- Enhanced localization by adding translation keys for HTML artifacts in multiple languages.
- Simplified the message header and footer components by removing unnecessary props and logic.
- Adjusted the message container styles for better alignment and spacing.
- Enhanced the message tokens display logic and corrected the component name for consistency.
- Removed unused translation keys related to token usage from multiple language files to streamline localization.
- Removed unused imports and streamlined the logic for enabling web search.
- Updated the tooltip title to reflect the current state of web search functionality.
- Enhanced the handling of quick panel opening based on the assistant's web search settings.
- Removed unused imports and the StyledSelect component, replacing it with a standard Selector for improved clarity.
- Streamlined the layout by eliminating unnecessary styles, enhancing maintainability and readability of the code.
* fix(McpToolChunkMiddleware): enhance tool call confirmation logic
- Added additional condition to confirm tool calls by checking the toolCallId in the confirmed object.
- Included a console log for confirmed tool calls to aid in debugging and tracking tool call execution.
* chore: unuse log
- Deleted the MinAppsPopover component to streamline the Navbar.
- Updated Navbar to remove references to MinAppsPopover, enhancing code maintainability.
- Introduced new translation keys for the "Open Logs" button in various languages (en-us, ja-jp, ru-ru, zh-cn, zh-tw, el-gr, es-es, fr-fr, pt-pt).
- Updated the DataSettings component to include a button for opening application logs, enhancing user accessibility to log files.
- Added new translation keys for error messages and steps in the GitHub Copilot authentication process across multiple languages (en-us, ja-jp, ru-ru, zh-cn, zh-tw).
- Updated the GitHubCopilotSettings component to reflect the new steps for user guidance during the authentication process.
- Improved user experience by providing detailed descriptions and success/error messages related to the authorization flow.
- Introduced a new CustomHeaderPopup component for managing extra headers for providers.
- Integrated the popup into the ProviderSetting component, allowing users to edit headers via a modal.
- Refactored ApiKeyListPopup to use a styled container for improved layout.
refactor(LocalBackupSettings): update input and select styles for better responsiveness
- Adjusted the input field to have a flexible width between 200 and 400 pixels.
- Modified select components to use a minimum width of 120 pixels for improved layout consistency.
- Enhanced onChange handlers for select components to ensure proper value handling.
Expanded the text-to-image model regex to include more identifiers. Removed the getModelGroup function and now use the model's group property directly. Updated model selection in ModelSettings and TranslatePage to also filter out rerank and text-to-image models, ensuring only appropriate models are shown in dropdowns.
* feat: add NewAPI painting support
* fix(NewApiPage): update help link to point to the correct documentation
* feat(NewApiPage): support image generation in API client
* fix: resolve the issue of messy drawing data from aihubmix provider
* feat: group model options in dropdown by category
* fix: update translation to use LanguagesEnum
* feat: implement tool call progress handling and status updates
- Update MCP tool response handling to include 'pending' and 'cancelled' statuses.
- Introduce new IPC channel for progress updates.
- Enhance UI components to reflect tool call statuses, including pending and cancelled states.
- Add localization for new status messages in multiple languages.
- Refactor message handling logic to accommodate new tool response types.
* fix: adjust alignment of action tool container in MessageTools component
- Change justify-content from flex-end to flex-start to improve layout consistency.
* feat: enhance tool confirmation handling and update related components
- Introduced a new tool confirmation mechanism in userConfirmation.ts, allowing for individual tool confirmations.
- Updated GeminiAPIClient and OpenAIResponseAPIClient to include tool configuration options.
- Refactored MessageTools component to utilize new confirmation functions and improved styling.
- Enhanced mcp-tools.ts to manage tool invocation and confirmation processes more effectively, ensuring real-time status updates.
* refactor(McpToolChunkMiddleware): enhance tool execution handling and confirmation tracking
- Updated createToolHandlingTransform to manage confirmed tool calls and results more effectively.
- Refactored executeToolCalls and executeToolUseResponses to return both tool results and confirmed tool calls.
- Adjusted buildParamsWithToolResults to utilize confirmed tool calls for building new request messages.
- Improved error handling in messageThunk for tool call status updates, ensuring accurate block ID mapping.
* feat(McpToolChunkMiddleware, ToolUseExtractionMiddleware, mcp-tools, userConfirmation): enhance tool execution and confirmation handling
- Updated McpToolChunkMiddleware to execute tool calls and responses asynchronously, improving performance and response handling.
- Enhanced ToolUseExtractionMiddleware to generate unique tool IDs for better tracking.
- Modified parseToolUse function to accept a starting index for tool extraction.
- Improved user confirmation handling with abort signal support to manage tool action confirmations more effectively.
- Updated SYSTEM_PROMPT to clarify the use of multiple tools per message.
* fix(tagExtraction): update test expectations for tag extraction results
- Adjusted expected length of results from 7 to 9 to reflect changes in tag extraction logic.
- Modified content assertions for specific tag contents to ensure accurate validation of extracted tags.
* refactor(GeminiAPIClient, OpenAIResponseAPIClient): remove unused function calling configurations
- Removed the unused FunctionCallingConfigMode from GeminiAPIClient to streamline the code.
- Eliminated the parallel_tool_calls property from OpenAIResponseAPIClient, simplifying the tool call configuration.
* feat(McpToolChunkMiddleware): enhance LLM response handling and tool call confirmation
- Added notification to UI for new LLM response processing before recursive calls in createToolHandlingTransform.
- Improved tool call confirmation logic in executeToolCalls to match tool IDs more accurately, enhancing response validation.
* refactor(McpToolChunkMiddleware, ToolUseExtractionMiddleware, messageThunk): remove unnecessary console logs
- Eliminated redundant console log statements in McpToolChunkMiddleware, ToolUseExtractionMiddleware, and messageThunk to clean up the code and improve performance.
- Focused on enhancing readability and maintainability by reducing clutter in the logging output.
* refactor(McpToolChunkMiddleware): remove redundant logging statements
- Eliminated unnecessary logging in createToolHandlingTransform to streamline the code and enhance readability.
- Focused on reducing clutter in the logging output while maintaining error handling functionality.
* feat: enhance action button functionality with cancel and confirm options
* refactor(AbortHandlerMiddleware, McpToolChunkMiddleware, ToolUseExtractionMiddleware, messageThunk): improve error handling and code clarity
- Updated AbortHandlerMiddleware to skip abort status checks if an error chunk is received, enhancing error handling logic.
- Replaced console.error with Logger.error in McpToolChunkMiddleware for consistent logging practices.
- Refined ToolUseExtractionMiddleware to improve tool use extraction logic and ensure proper handling of tool_use tags.
- Enhanced messageThunk to include initialPlaceholderBlockId in block ID checks, improving error state management.
* refactor(ToolUseExtractionMiddleware): enhance tool use parsing logic with counter
- Introduced a toolCounter to track the number of tool use responses processed.
- Updated parseToolUse function calls to include the toolCounter, improving the extraction logic and ensuring accurate response handling.
* feat(McpService, IpcChannel, MessageTools): implement tool abort functionality
- Added Mcp_AbortTool channel to handle tool abortion requests.
- Implemented abortTool method in McpService to manage active tool calls and provide logging.
- Updated MessageTools component to include an abort button for ongoing tool calls, enhancing user control.
- Modified API calls to support optional callId for better tracking of tool executions.
- Added localization strings for tool abort messages in multiple languages.
---------
Co-authored-by: Vaayne <liu.vaayne@gmail.com>
- Add missing headers field to newServer object creation in AddMcpServerModal.tsx
- Update streamableHttp JSON example to show headers format
- Fixes issue where Content-Type and Authorization headers were not imported
Fixes#7932🤖 Generated with [Claude Code](https://claude.ai/code)
Co-authored-by: Claude <noreply@anthropic.com>
* perf(TopicsTab): use DraggableVirtualList for the topic list
- Add a DraggableVirtualList implemented using react-virtual
- Rename DragableList to DraggableList
- Add tests
* refactor: improve props, fix drag area
* feat(ProtocolClient): show main window on protocol URL handling
* refactor(ProtocolClient): remove main window display logic; update handleProviders to show window on macOS
* fix lint
---------
Co-authored-by: rcadmin <rcadmin@rcadmins-MacBook-Pro-4.local>
* feat: implement local backup functionality
- Added new IPC channels for local backup operations including backup, restore, list, delete, and set directory.
- Enhanced BackupManager with methods for handling local backups and integrated auto-sync capabilities.
- Updated settings to include local backup configurations and integrated UI components for managing local backups.
- Localized new features in English, Japanese, Russian, and Chinese.
* refactor: enhance BackupManager and LocalBackupModals for improved file handling
- Updated BackupManager to specify the type of result array for better type safety.
- Refactored showBackupModal in LocalBackupModals to use useCallback and generate a more descriptive default file name based on device type and timestamp.
* refactor: update localBackupDir path in BackupManager for consistency
- Changed localBackupDir to use the temp directory instead of userData for better alignment with backup storage practices.
* refactor: enforce localBackupDir parameter in BackupManager methods
- Updated BackupManager methods to require localBackupDir as a parameter, removing fallback to a default value for improved clarity and consistency in backup operations.
- Removed the localBackupDir property from the class, streamlining the backup management process.
* fix: update localization strings for improved clarity and consistency
- Revised English, Russian, Chinese, and Traditional Chinese localization strings for better user understanding.
- Adjusted phrases related to backup and restore processes to enhance clarity.
- Standardized terminology across different languages for consistency.
* fix: update Chinese localization strings for consistency and clarity
- Revised export menu strings in zh-cn.json to improve formatting and consistency.
- Removed spaces in phrases for a more streamlined appearance.
* feat(settings): add option to disable hardware acceleration
- Introduced a new setting to allow users to disable hardware acceleration.
- Added corresponding IPC channel and configuration management methods.
- Updated UI components to reflect the new setting and prompt for app restart.
- Localized confirmation messages for hardware acceleration changes in multiple languages.
* udpate migrate
* format code
* feat(i18n): add localized error messages for backup directory selection
- Introduced new error messages for selecting a backup directory in multiple languages, including English, Japanese, Russian, Simplified Chinese, and Traditional Chinese.
- Added checks in the LocalBackupSettings component to ensure the selected directory is not the same as the application data or installation paths, and that it has write permissions.
* format
* update migrate
* refactor(LocalBackup): streamline local backup directory validation and enhance settings UI
- Removed translation dependency in LocalBackupModals for error handling.
- Added comprehensive validation for local backup directory in LocalBackupSettings, including checks for app data path, install path, and write permissions.
- Introduced a clear directory button in the settings UI to reset the local backup directory.
- Updated the auto-sync logic to account for local backup settings.
* refactor(LocalBackupManager): remove redundant error messages for invalid local backup directory
- Eliminated repeated error message calls for invalid local backup directory in the LocalBackupManager component.
- Streamlined the validation logic to enhance code clarity and maintainability.
* feat: add show/hide toggle for API keys in settings
Introduces an eye icon button to toggle visibility of API keys and tokens in Joplin, Notion, Siyuan, and Yuque settings pages. Refactors input fields to allow users to view or hide sensitive credentials, improving usability and security. Also updates translation keys in AgentsSubscribeUrlSettings for consistency.
* refactor: settings pages to use Input.Password for tokens
Replaced custom password visibility toggles and related styled-components with Ant Design's Input.Password component in Joplin, Notion, Siyuan, and Yuque settings pages. This simplifies the codebase and improves consistency in handling sensitive input fields.
* fix: Improve layout of token input fields in settings
Wrapped token/password input and check button pairs in Joplin, Notion, and Siyuan settings with Ant Design's Space.Compact for better alignment and consistent UI.
* fix: trigger token change handler on blur in settings
Added onBlur event handlers to the Joplin and Siyuan token input fields to ensure token changes are handled when the input loses focus, improving reliability of token updates.
* refactor(ApiKeyList): add a popup for api key list
- ApiKeyList for key management
- ApiKeyListPopup triggerred by a button
- Move formatApiKeys to utils for better reuse
- Simplify apikey related states in ProviderSettings for better
integration with ApiKeyList
- Modify `updateProvider` to accept partial updates
- Update api key placeholder
* fix: strict type
* refactor: support websearch provider
* refactor: remove ApiCheckPopup
* refactor: simplify interfaces for ProviderSetting and WebSearchProviderSetting
* fix: sync input api key between sub-pages, futher simplification
* fix: bold title
* refactor: extract status icon colors
* refactor: add a status indicator to input box on error, update type definitions
* refactor: further simplification, make data flow clearer
* feat: support api key list for preprocess settings
* refactor: better naming, less confusion