* feat: Implement Redux-based message management with enhanced state handling - Add new Redux slice for managing messages with advanced state control - Introduce topic-specific message queues using p-queue for request management - Refactor message sending, loading, and updating logic - Improve error handling and state synchronization with database - Add selectors for efficient message retrieval and state access * feat: Implement streaming message handling in Redux store - Add stream message support in messages slice - Create MessageStream component for rendering streaming messages - Update Inputbar and Suggestions components to use new Redux message sending logic - Refactor message sending flow to use stream message management - Improve error handling and message state management * feat:添加StreamMessage,优化数据流展示,减少大面积rerender * refactor: Simplify messages state management and initialization - Refactor messages slice to use flat message array instead of separate user/assistant messages - Add initializeMessagesState thunk to load messages from database on app startup - Update message-related reducers to work with flat message array - Modify MessageStream and related components to use new state structure - Improve type safety and reduce complexity in messages state management * ✨ feat: add Model Context Protocol (MCP) support (#2809) * ✨ feat: add Model Context Protocol (MCP) server configuration (main) - Added `@modelcontextprotocol/sdk` dependency for MCP integration. - Introduced MCP server configuration UI in settings with add, edit, delete, and activation functionalities. - Created `useMCPServers` hook to manage MCP server state and actions. - Added i18n support for MCP settings with translation keys. - Integrated MCP settings into the application's settings navigation and routing. - Implemented Redux state management for MCP servers. - Updated `yarn.lock` with new dependencies and their resolutions. * 🌟 feat: implement mcp service and integrate with ipc handlers - Added `MCPService` class to manage Model Context Protocol servers. - Implemented various handlers in `ipc.ts` for managing MCP servers including listing, adding, updating, deleting, and activating/deactivating servers. - Integrated MCP related types into existing type declarations for consistency across the application. - Updated `preload` to expose new MCP related APIs to the renderer process. - Enhanced `MCPSettings` component to interact directly with the new MCP service for adding, updating, deleting servers and setting their active states. - Introduced selectors in the MCP Redux slice for fetching active and all servers from the store. - Moved MCP types to a centralized location in `@renderer/types` for reuse across different parts of the application. * feat: enhance MCPService initialization to prevent recursive calls and improve error handling * feat: enhance MCP integration by adding MCPTool type and updating related methods * feat: implement streaming support for tool calls in OpenAIProvider and enhance message processing * refactor: Improve message handling and type safety in message components - Update Message, MessageGroup, MessageStream, and MessageMenubar to require Topic prop - Modify message sending and resending logic in MessageMenubar - Remove commented-out code and simplify message state management - Enhance type safety by explicitly defining prop types * fix: finish_reason undefined * refactor: Streamline message resending and state management - Introduce `resendMessage` thunk for more robust message resending logic - Update `sendMessage` to support resending existing messages - Remove deprecated `onEditMessage` callback from MessageMenubar - Simplify message state updates using Redux actions - Improve type safety and reduce complexity in message handling * refactor: Optimize message resending and event handling - Remove deprecated `APPEND_MESSAGE` event and related callbacks - Update `resendMessage` thunk to support mentioning new models - Modify message state synchronization in database - Simplify dependency arrays and remove unused event listeners - Add migration step for initializing messages state * refactor: Enhance message translation and suggestions handling - Update MessageMenubar to use stream message actions for translation - Modify Suggestions component to optimize suggestion fetching - Remove deprecated event listeners and simplify component logic - Memoize MessageMenubar and Suggestions components for performance - Trigger AI auto-rename on message completion in messages slice * refactor: Optimize message streaming with throttled updates - Introduce throttled message update mechanism using lodash - Improve performance by limiting Redux state updates during streaming - Create a separate handler for response message updates - Enhance message synchronization with database - Prevent unnecessary re-renders and reduce computational overhead * fix: Remove unnecessary await in message dispatch Removes the `await` keyword from the message dispatch in Inputbar, which was causing an unnecessary async operation. Also adds a missing closing brace in the migration configuration file. * fix: Update Redux persist configuration for messages slice Modify store configuration to exclude 'messages' slice from persistence and remove unnecessary migration step for message state initialization * feat: Enhance message streaming and multi-model support - Refactor Redux messages slice to support multiple stream messages per topic - Update MessageStream and messages slice to handle message streaming with message-specific IDs - Implement support for multi-model message generation - Modify queue concurrency to improve parallel message processing - Update message selection and streaming logic to be more flexible and robust * feat: Implement file upload handling in message sending - Add FileManager service integration for file uploads in Inputbar - Modify sendMessage action to use uploaded file references - Update messages slice to conditionally dispatch messages during resend * ✨ feat(MCP): add support for enabling/disabling MCPServers per message (#2989) * ✨ feat: add MCP servers in chat input - Introduce MCPToolsButton component for managing MCP servers - Add new icon for MCP server tools in iconfont.css - Update Inputbar to include MCP tools functionality - Add toggle functionality for enabling/disabling MCP servers - Implement styled dropdown menu for server selection - Add necessary type imports and useState for MCP server management * ✨ feat: add support for enabling/disabling MCPServers per message (main) - Added `enabledMCPs` property to the `Message` type to track enabled MCPServers. - Modified `MCPToolsButton` to enable all active MCPServers by default using a new `enableAll` state. - Introduced `filterMCPTools` utility to filter tools based on enabled MCPServers. - Updated `AnthropicProvider`, `GeminiProvider`, and `OpenAIProvider` to filter tools using `filterMCPTools`. - Enhanced `Inputbar` to include `enabledMCPs` in the message payload when set. * ✨ feat(MCP): add enabledMCPs parameter to sendMessage action - Update sendMessage action type to include optional enabledMCPs parameter - Import MCPServer type for type safety - Modify action signature to support passing enabled MCP servers per message --------- Co-authored-by: lizhixuan <zhixuan.li@banosuperapp.com> Co-authored-by: lizhixuan <zhixuanli219643@sohu-inc.com> Co-authored-by: LiuVaayne <10231735+vaayne@users.noreply.github.com> Co-authored-by: kangfenmao <kangfenmao@qq.com>
176 lines
6.9 KiB
JSON
176 lines
6.9 KiB
JSON
{
|
|
"name": "CherryStudio",
|
|
"version": "1.0.6",
|
|
"private": true,
|
|
"description": "A powerful AI assistant for producer.",
|
|
"main": "./out/main/index.js",
|
|
"author": "kangfenmao@qq.com",
|
|
"homepage": "https://github.com/kangfenmao/cherry-studio",
|
|
"workspaces": {
|
|
"packages": [
|
|
"local",
|
|
"packages/*"
|
|
],
|
|
"installConfig": {
|
|
"hoistingLimits": [
|
|
"packages/database"
|
|
]
|
|
}
|
|
},
|
|
"scripts": {
|
|
"format": "prettier --write .",
|
|
"lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
|
|
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
|
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
|
|
"typecheck": "npm run typecheck:node && npm run typecheck:web",
|
|
"start": "electron-vite preview",
|
|
"dev": "electron-vite dev",
|
|
"build:check": "yarn typecheck",
|
|
"build": "npm run typecheck && electron-vite build",
|
|
"postinstall": "electron-builder install-app-deps",
|
|
"build:unpack": "dotenv npm run build && electron-builder --dir",
|
|
"build:win": "dotenv npm run build && electron-builder --win",
|
|
"build:win:x64": "dotenv npm run build && electron-builder --win --x64",
|
|
"build:mac": "dotenv electron-vite build && electron-builder --mac",
|
|
"build:mac:arm64": "dotenv electron-vite build && electron-builder --mac --arm64",
|
|
"build:mac:x64": "dotenv electron-vite build && electron-builder --mac --x64",
|
|
"build:linux": "dotenv electron-vite build && electron-builder --linux",
|
|
"build:linux:arm64": "dotenv electron-vite build && electron-builder --linux --arm64",
|
|
"build:linux:x64": "dotenv electron-vite build && electron-builder --linux --x64",
|
|
"build:npm": "node scripts/build-npm.js",
|
|
"release": "node scripts/version.js",
|
|
"publish": "yarn release patch push",
|
|
"pulish:artifacts": "cd packages/artifacts && npm publish && cd -",
|
|
"generate:agents": "yarn workspace @cherry-studio/database agents",
|
|
"generate:icons": "electron-icon-builder --input=./build/logo.png --output=build",
|
|
"analyze:renderer": "VISUALIZER_RENDERER=true yarn build",
|
|
"analyze:main": "VISUALIZER_MAIN=true yarn build",
|
|
"check": "node scripts/check-i18n.js",
|
|
"test": "tsx --test src/**/*.test.ts"
|
|
},
|
|
"dependencies": {
|
|
"@agentic/exa": "^7.3.3",
|
|
"@agentic/searxng": "^7.3.3",
|
|
"@agentic/tavily": "^7.3.3",
|
|
"@electron-toolkit/preload": "^3.0.0",
|
|
"@electron-toolkit/utils": "^3.0.0",
|
|
"@electron/notarize": "^2.5.0",
|
|
"@emotion/is-prop-valid": "^1.3.1",
|
|
"@google/generative-ai": "^0.21.0",
|
|
"@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.28-8e4393fa2d.patch",
|
|
"@llm-tools/embedjs-libsql": "^0.1.28",
|
|
"@llm-tools/embedjs-loader-csv": "^0.1.28",
|
|
"@llm-tools/embedjs-loader-markdown": "patch:@llm-tools/embedjs-loader-markdown@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-loader-markdown-npm-0.1.28-81647ffac6.patch",
|
|
"@llm-tools/embedjs-loader-msoffice": "^0.1.28",
|
|
"@llm-tools/embedjs-loader-pdf": "^0.1.28",
|
|
"@llm-tools/embedjs-loader-sitemap": "^0.1.28",
|
|
"@llm-tools/embedjs-loader-web": "^0.1.28",
|
|
"@llm-tools/embedjs-loader-xml": "^0.1.28",
|
|
"@llm-tools/embedjs-openai": "^0.1.28",
|
|
"@modelcontextprotocol/sdk": "^1.6.1",
|
|
"@notionhq/client": "^2.2.15",
|
|
"@types/react-infinite-scroll-component": "^5.0.0",
|
|
"adm-zip": "^0.5.16",
|
|
"apache-arrow": "^18.1.0",
|
|
"docx": "^9.0.2",
|
|
"electron-log": "^5.1.5",
|
|
"electron-store": "^8.2.0",
|
|
"electron-updater": "^6.3.9",
|
|
"electron-window-state": "^5.0.3",
|
|
"epub": "^1.3.0",
|
|
"fs-extra": "^11.2.0",
|
|
"markdown-it": "^14.1.0",
|
|
"officeparser": "^4.1.1",
|
|
"p-queue": "^8.1.0",
|
|
"tokenx": "^0.4.1",
|
|
"webdav": "4.11.4"
|
|
},
|
|
"devDependencies": {
|
|
"@anthropic-ai/sdk": "^0.38.0",
|
|
"@electron-toolkit/eslint-config-prettier": "^2.0.0",
|
|
"@electron-toolkit/eslint-config-ts": "^1.0.1",
|
|
"@electron-toolkit/tsconfig": "^1.0.1",
|
|
"@hello-pangea/dnd": "^16.6.0",
|
|
"@kangfenmao/keyv-storage": "^0.1.0",
|
|
"@llm-tools/embedjs-loader-image": "^0.1.28",
|
|
"@reduxjs/toolkit": "^2.2.5",
|
|
"@tavily/core": "patch:@tavily/core@npm%3A0.3.1#~/.yarn/patches/@tavily-core-npm-0.3.1-fe69bf2bea.patch",
|
|
"@types/adm-zip": "^0",
|
|
"@types/fs-extra": "^11",
|
|
"@types/lodash": "^4.17.5",
|
|
"@types/markdown-it": "^14",
|
|
"@types/md5": "^2.3.5",
|
|
"@types/node": "^18.19.9",
|
|
"@types/pako": "^1.0.2",
|
|
"@types/react": "^18.2.48",
|
|
"@types/react-dom": "^18.2.18",
|
|
"@types/react-infinite-scroll-component": "^5.0.0",
|
|
"@types/tinycolor2": "^1",
|
|
"@vitejs/plugin-react": "^4.2.1",
|
|
"antd": "^5.22.5",
|
|
"applescript": "^1.0.0",
|
|
"axios": "^1.7.3",
|
|
"babel-plugin-styled-components": "^2.1.4",
|
|
"browser-image-compression": "^2.0.2",
|
|
"dayjs": "^1.11.11",
|
|
"dexie": "^4.0.8",
|
|
"dexie-react-hooks": "^1.1.7",
|
|
"dotenv-cli": "^7.4.2",
|
|
"electron": "31.7.6",
|
|
"electron-builder": "^24.13.3",
|
|
"electron-devtools-installer": "^3.2.0",
|
|
"electron-icon-builder": "^2.0.1",
|
|
"electron-vite": "^2.3.0",
|
|
"emittery": "^1.0.3",
|
|
"emoji-picker-element": "^1.22.1",
|
|
"eslint": "^8.56.0",
|
|
"eslint-plugin-react": "^7.34.3",
|
|
"eslint-plugin-react-hooks": "^4.6.2",
|
|
"eslint-plugin-simple-import-sort": "^12.1.1",
|
|
"eslint-plugin-unused-imports": "^4.0.0",
|
|
"html-to-image": "^1.11.13",
|
|
"i18next": "^23.11.5",
|
|
"lodash": "^4.17.21",
|
|
"mime": "^4.0.4",
|
|
"openai": "patch:openai@npm%3A4.77.3#~/.yarn/patches/openai-npm-4.77.3-59c6d42e7a.patch",
|
|
"prettier": "^3.2.4",
|
|
"react": "^18.2.0",
|
|
"react-dom": "^18.2.0",
|
|
"react-hotkeys-hook": "^4.6.1",
|
|
"react-i18next": "^14.1.2",
|
|
"react-infinite-scroll-component": "^6.1.0",
|
|
"react-markdown": "^9.0.1",
|
|
"react-redux": "^9.1.2",
|
|
"react-router": "6",
|
|
"react-router-dom": "6",
|
|
"react-spinners": "^0.14.1",
|
|
"redux": "^5.0.1",
|
|
"redux-persist": "^6.0.0",
|
|
"rehype-katex": "^7.0.1",
|
|
"rehype-mathjax": "^7.0.0",
|
|
"rehype-raw": "^7.0.0",
|
|
"remark-gfm": "^4.0.0",
|
|
"remark-math": "^6.0.0",
|
|
"rollup-plugin-visualizer": "^5.12.0",
|
|
"sass": "^1.77.2",
|
|
"shiki": "^1.22.2",
|
|
"string-width": "^7.2.0",
|
|
"styled-components": "^6.1.11",
|
|
"tinycolor2": "^1.6.0",
|
|
"typescript": "^5.6.2",
|
|
"uuid": "^10.0.0",
|
|
"vite": "^5.0.12"
|
|
},
|
|
"peerDependencies": {
|
|
"react": "^17.0.0 || ^18.0.0",
|
|
"react-dom": "^17.0.0 || ^18.0.0"
|
|
},
|
|
"resolutions": {
|
|
"pdf-parse@npm:1.1.1": "patch:pdf-parse@npm%3A1.1.1#~/.yarn/patches/pdf-parse-npm-1.1.1-04a6109b2a.patch",
|
|
"@langchain/openai@npm:^0.3.16": "patch:@langchain/openai@npm%3A0.3.16#~/.yarn/patches/@langchain-openai-npm-0.3.16-e525b59526.patch",
|
|
"@langchain/openai@npm:>=0.1.0 <0.4.0": "patch:@langchain/openai@npm%3A0.3.16#~/.yarn/patches/@langchain-openai-npm-0.3.16-e525b59526.patch",
|
|
"openai@npm:^4.77.0": "patch:openai@npm%3A4.77.3#~/.yarn/patches/openai-npm-4.77.3-59c6d42e7a.patch"
|
|
},
|
|
"packageManager": "yarn@4.6.0"
|
|
}
|