Commit Graph

3654 Commits

Author SHA1 Message Date
Vaayne dca0cf488b ♻️ refactor: improve agent execution architecture and shell environment handling
- Refactor AgentExecutionService process execution from Promise-based to async/await pattern
- Separate process spawning from event handler setup for better error handling
- Add dependency injection support for shell environment provider (better testability)
- Consolidate Cherry Studio bin path logic into shell-env utility
- Use typed IPC channels for consistent agent communication
- Improve error handling with proper async/await in agent execution flow
- Update test mocks to use new testable AgentExecutionService architecture
- Enhance cross-platform shell detection (zsh default for macOS, bash for Linux)
2025-08-04 23:21:44 +08:00
Vaayne e82aa2f061 feat: implement AgentExecutionService with process management and comprehensive testing
- Add complete runAgent and stopAgent implementation
- Implement child process spawning with uv for secure agent execution
- Add real-time stdout/stderr streaming to UI via IPC
- Implement comprehensive session logging to database
- Add graceful process termination with SIGTERM/SIGKILL fallback
- Track running processes with status reporting and management
- Handle all error scenarios with proper status updates and cleanup
- Create extensive test suite with 31 passing unit tests
- Add integration tests for end-to-end verification
- Include comprehensive documentation and testing guides

Features:
- Secure process execution without shell injection
- Session continuation support via Claude session IDs
- Working directory management and validation
- Real-time UI feedback through IPC streaming
- Database persistence of all execution events
- Comprehensive error handling and recovery
- Process lifecycle management and cleanup
2025-08-04 23:21:44 +08:00
Vaayne 823986bb11 🗃️ feat: enhance AgentService database migration system
- Refactor initialization to handle both fresh installs and migrations
- Replace createTables + migrateDatabase with unified createTablesAndMigrate approach
- Add comprehensive schema migration for sessions table with backwards compatibility
- Migrate user_prompt → user_goal column renaming
- Migrate claude_session_id → latest_claude_session_id column renaming
- Add migration for new columns: max_turns, permission_mode, accessible_paths
- Improve entity mapping to handle null values correctly
- Update database queries and indexes for new schema

Breaking changes:
- SessionEntity now uses user_goal instead of user_prompt
- SessionEntity now uses latest_claude_session_id instead of claude_session_id
- Added new required fields: max_turns, permission_mode
2025-08-04 23:21:44 +08:00
Vaayne 2fd2573a65 fix lint 2025-08-04 23:21:44 +08:00
Vaayne 8e0b6e369c clear code 2025-08-04 23:21:44 +08:00
Vaayne 8ab26e4e45 feat: implement secure AgentExecutionService for controlled agent.py execution
- Create new AgentExecutionService.ts with secure agent.py script execution
- Replace arbitrary shell command execution with controlled Python script calls
- Add claude_session_id field to session types for conversation continuity
- Update shared types between main and renderer processes
- Implement proper argument validation and sanitization
- Add comprehensive error handling and logging
- Export service through agent service index

Security improvements:
- Only executes predefined agent.py script (no arbitrary commands)
- Uses direct process spawning instead of shell execution
- Validates all arguments before execution
- Prevents command injection vulnerabilities

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 17:52:01 +08:00
Vaayne b1a464fadc feat: enhance agent management with session log persistence and improved UX 2025-08-03 11:44:18 +08:00
Vaayne 8de2239eb6 fix .
fix issues
2025-08-03 11:43:02 +08:00
Vaayne 571f6c3ef3 feat: implement session-based message isolation and improve agent creation UX
- Add sessionId field to PocMessage interface for session isolation
- Filter messages by current session to prevent cross-session pollution
- Remove automatic agent creation - only manual creation by users
- Add beautiful empty state when no agents exist
- Enhance sidebar UX with prominent "Create Agent" button when empty
- Update message hooks to handle session-specific messaging
- Improve user control over agent lifecycle management

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne dc603d9896 ♻️ refactor: use session-based working directory for command execution
- Remove working directory display from command input UI
- Commands now execute in session's accessible_paths directory
- Clean up unused props and styled components
- Simplify command input interface for better UX

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne bbc0e9378a Redesign agent sidebar with avatar gradients 2025-08-03 11:43:02 +08:00
Vaayne 3d94740482 feat: add dynamic model and tool fetching for agent management
Replace hardcoded model and tool options with dynamic data fetched from API server:
- Update MCP API to return array format instead of object for consistency
- Add fetchAvailableModels() and fetchAvailableMCPTools() to AgentManagementService
- Modify AgentManagementModal to fetch and display dynamic options
- Add type definitions for FetchModelResponse and FetchMCPToolResponse

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne 4a5032520a feat: implement comprehensive agent and session management UI
- Add enhanced sidebar with agent and session controls
- Implement create/edit/delete operations for agents and sessions
- Add real-time session switching and auto-initialization
- Replace mock data with persistent database integration
- Include dropdown menus, tooltips, and confirmation dialogs
- Add responsive UI with proper styling and state management

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne 500831454b 🗃️ feat: implement comprehensive agent and session database management system
- Add complete database schema for agents, sessions, and session_logs tables
- Implement full CRUD operations with libsql database integration
- Create comprehensive AgentService with proper error handling and logging
- Add AgentManagementService for renderer-side IPC communication
- Implement useAgentManagement React hook for state management
- Add 12 new IPC channels for agent and session operations
- Update CherryAgentPage to use real database data instead of mock data
- Create shared TypeScript types between main and renderer processes
- Add auto-initialization for default agent and session creation
- Implement real-time agent name editing with database persistence
- Add comprehensive error handling with user feedback via Ant Design messages
- Create structured logging for all database operations
- Add tasks.md documentation for implementation progress tracking

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne c8ea3407e6 💄 style: enhance Cherry Agent page design with modern UI improvements
- Restructure layout to match wireframe design with proper header/content sections
- Add agent name input field with elegant styling and focus effects
- Implement session management with interactive session items and hover animations
- Enhance sidebar design with improved spacing, shadows, and visual hierarchy
- Add modern styling with gradients, rounded corners, and smooth transitions
- Improve button interactions with scale effects and proper hover states
- Create responsive design that works when sidebar is collapsed
- Use mock session data for initial implementation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne d2fdb8ab0f 💄 refactor: redesign cherry-agent input with enhanced terminal UI
- Replace separate PocCommandInput and PocStatusBar with unified EnhancedCommandInput
- Add terminal-style prompt with dynamic status indicators ($, , ✗)
- Integrate status bar functionality directly into input component
- Implement contextual tool buttons (history, clear, settings, send/cancel)
- Add color-coded visual states for idle/running/error states
- Enhance keyboard UX with Enter/Esc shortcuts and history navigation
- Remove unused components: PocCommandInput, PocStatusBar, PocHeader
- Clean up imports and styled components
- Improve accessibility with tooltips and proper ARIA labels

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne 3f6c884992 Improve agent UI responsiveness and add command cancellation
The UI changes include faster command output buffering, better error
handling, improved status bar with cancel button, and visual refinements
to command messages.
2025-08-03 11:43:02 +08:00
Vaayne db418ef5f1 enhance layput 2025-08-03 11:43:02 +08:00
Vaayne 29318d5a06 basic layout of cherry agent ui 2025-08-03 11:43:02 +08:00
Vaayne 2df77b62f9 fix init shell with command 2025-08-03 11:43:02 +08:00
Vaayne ea3598e194 Merge branch 'main' into feat/agents-1 2025-08-03 11:43:02 +08:00
Vaayne 4b0db10195 ... 2025-08-03 11:43:02 +08:00
Vaayne 9fe14311fc feat(agents): enhance POC interface styling with Cherry Studio design system
- Integrate complete Cherry Studio CSS variables and design patterns
- Implement proper light/dark theme support with system preference detection
- Enhance message bubbles to match Cherry Studio's chat interface styling
- Add Cherry Studio-compatible scrollbar styling with theme-aware colors
- Improve typography with Ubuntu font family and proper font stacks
- Add comprehensive hover states, transitions, and micro-interactions
- Implement accessibility improvements including focus states and reduced motion
- Add theme toggle functionality with persistent preferences
- Enhance header styling to match Cherry Studio's navbar design
- Add animation effects consistent with Cherry Studio's motion design
- Improve responsive design for mobile and tablet viewports
- Add high contrast mode support for better accessibility

The POC interface now provides a polished, professional appearance that
seamlessly integrates with Cherry Studio's design language and user experience.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne 2628f9b57e feat: integrate hooks with POC UI components for real-time command execution
- Update CommandPocPage.tsx to coordinate between all hooks and manage application state
- Integrate usePocMessages, usePocCommand, and useCommandHistory hooks for complete functionality
- Add auto-scrolling to PocMessageList with user scroll detection
- Implement command history navigation in PocCommandInput using arrow keys
- Connect real-time command status updates to PocStatusBar
- Pass current working directory to PocHeader for display
- Enable seamless command execution flow with proper loading states
- Add buffered output handling between command hook and message display
- Implement command count tracking and execution state management

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne df23499679 feat: implement PoC command hooks for message management and command execution
- Add usePocMessages hook for managing message state with real-time streaming support
- Add usePocCommand hook for command execution with 100ms output buffering
- Add useCommandHistory hook for input history navigation with arrow keys
- Implement proper event handling from AgentCommandService
- Add comprehensive logging and error handling
- Support message completion tracking and buffered output streaming

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne 0860541b2d feat: implement AgentCommandService for POC command execution
- Add AgentCommandService.ts with singleton pattern following existing renderer service architecture
- Implement IPC communication with main process command executor using established patterns
- Add methods for executing commands, handling real-time output streaming, and command interruption
- Create proper TypeScript interfaces and event-driven architecture using Emittery
- Add POC API endpoints to preload script for secure renderer-main communication
- Include comprehensive test suite with 12 passing tests covering all major functionality
- Follow existing code patterns for error handling, logging, and resource cleanup
- Support command state tracking, process management, and event listeners

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne ffa4b4fc04 feat: implement PocCommandExecutor for cross-platform shell command execution
- Created PocCommandExecutor class in src/main/poc/commandExecutor.ts
- Added cross-platform shell detection (cmd.exe on Windows, bash on Unix)
- Implemented real-time stdout/stderr streaming via IPC
- Added process management with activeProcesses Map
- Support for command interruption with graceful and force termination
- Proper error handling and process cleanup
- Added POC-related IPC channels: Poc_ExecuteCommand, Poc_CommandOutput, Poc_InterruptCommand, Poc_GetActiveProcesses
- Registered IPC handlers in main/ipc.ts for command execution integration
- Follows existing architecture patterns from PythonService and other main process services

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
Vaayne 75766dbfdc feat: Add POC command page structure and routing
- Created CommandPocPage.tsx with basic layout structure
- Added POC-specific TypeScript interfaces and types
- Implemented basic UI components: PocHeader, PocMessageList, PocMessageBubble, PocCommandInput, PocStatusBar
- Added /command-poc route to Router.tsx
- Set up component folder structure following PRD specifications

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 11:43:02 +08:00
one 6d0867c27d fix: do not exit on emoji picker (#8702)
* fix: do not exit on emoji picker

* fix: emoji picker in default assistant setting
2025-07-31 10:31:12 +08:00
LiuVaayne eb4f218c7d feat: make API server default to closed/disabled (#8691)
*  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>
2025-07-31 09:54:23 +08:00
SuYao 7ae7f13ad1 refactor(ApiService): optimize memory search handling and improve error logging (#8671)
* 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.
2025-07-31 09:50:24 +08:00
one 80409cd94e fix(ModelList): stop propagation (#8685) 2025-07-30 20:32:24 +08:00
one 236a6bdcb0 perf(ModelList): provider settings and model list responsiveness (#8667)
- 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
2025-07-30 19:15:08 +08:00
beyondkmp 52b5c4a360 fix: update express dependency in package.json (#8677)
chore: update express dependency in package.json
2025-07-30 17:21:44 +08:00
kangfenmao b629cd236d feat(i18n): update localization files to include new API server controls and descriptions
- 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.
2025-07-30 16:01:01 +08:00
Jason Young 0cafaafdf2 test: add tests for aiCore/middleware/utils (#8645)
- Add tests for createErrorChunk function
- Add tests for capitalize function
- Add tests for isAsyncIterable function
- Achieve 100% test coverage
2025-07-30 14:42:37 +08:00
自由的世界人 88f607e350 fix: apiserver display (#8669) 2025-07-30 14:28:10 +08:00
LiuVaayne d0b2f18d9a feat: Support Cherry Studio as a Service (CSaaS) (#8098) 2025-07-30 12:38:07 +08:00
kangfenmao 47c909dda4 feat(TabContainer, PinnedMinapps): enhance tab navigation and improve minapp switch indicator
- 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.
2025-07-30 12:00:59 +08:00
beyondkmp bee933dd72 fix(AppUpdater): simplify error logging and update version check logic (#8656)
* 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
2025-07-30 11:59:41 +08:00
beyondkmp 73b010af00 fix(vite-rolldown): cannot parse pdf file (#8652)
fix: cannot parse pdf file
2025-07-30 11:15:06 +08:00
SuYao 7436b34a96 feat: add support for Qwen 3-235B-A22B thinking model detection (#8641)
- 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.
2025-07-30 00:18:21 +08:00
Phantom 78173ae24e refactor(aiCore): extract MixedBaseAPIClient as abstract class (#8618)
refactor(aiCore): 提取MixedBaseAPIClient基类重构API客户端

将AihubmixAPIClient和NewAPIClient的公共逻辑提取到MixedBaseAPIClient基类
减少代码重复,提高可维护性
2025-07-29 21:22:16 +08:00
beyondkmp 3a2a9d26eb fix: remove compareVersions utility and update version check logic in AboutSettings (#8640) 2025-07-29 20:10:11 +08:00
王叔叔 0f7091f3a8 fix: resolve issue of top navigation bar being obscured by miniapp (#8517)
* 修复顶部导航栏被小程序遮挡的问题

* chore: 删除多余文件

* fix: remove redundant changes

* style: modify padding

* fix(TabContainer): 切换页面时隐藏小程序弹窗

* fix(WebviewContainer): 修正顶部导航栏存在时的webview高度计算

当顶部导航栏存在时,高度计算需要减去两个导航栏高度变量

* fix(TabContainer): 在添加新标签时隐藏minapp弹窗

* fix(MinappPopupContainer): 修复按钮组在顶部导航栏时的边距问题

根据导航栏位置动态调整按钮组的右边距,当导航栏在顶部时不添加额外边距

* feat(useAppInit): 根据导航栏位置调整窗口背景色

根据导航栏位置(isTopNavbar)动态调整窗口背景色,当导航栏在顶部时使用固定背景色,否则保持原有逻辑

* feat(miniapps): 优化顶部导航栏中固定应用标签的样式和交互

重构顶部导航栏中固定应用标签的布局,添加应用名称显示
调整悬停和激活状态的样式,提升用户体验

* fix: 修正顶部导航栏在有 pinned 应用时的背景色显示问题

当有 pinned 应用时,顶部导航栏应显示背景色,之前逻辑错误地要求至少两个应用才显示

* refactor(PinnedMinapps): 移除多余的Tooltip组件并优化结构

* style(PinnedMinapps): 优化顶部导航项的悬停和激活样式

调整悬停效果,移除圆形背景改为底部边框高亮
激活状态改为1px边框并移除冗余的圆角设置

---------

Co-authored-by: xinming wong <xinmingwong@xinmingdeMacBook-Air.local>
Co-authored-by: icarus <eurfelux@gmail.com>
2025-07-29 19:42:52 +08:00
kangfenmao 49db4c3bb8 chore: release v1.5.4-rc.1 v1.5.4-rc.1 2025-07-29 18:26:46 +08:00
kangfenmao 385c6d6aab Revert "feat(contentsearch): optimize searchbar UI (#8556)"
This reverts commit eb309563a9.
2025-07-29 18:25:07 +08:00
陈天寒 f1b52869a9 integrate AWS Bedrock API (#8383)
* feat(AWS Bedrock): integrate AWS Bedrock API client and configuration

* feat(AWS Bedrock): add AWS Bedrock settings management and UI integration

* refactor(AWS Bedrock): refactor AWS Bedrock API client and settings management with vertexai

* fix: lint error

* refactor: update aws bedrock placeholder

* refactor(i18n):update i18n content with aws bedrock

* feat(AwsBedrockAPIClient): enhance message handling, add image support

* fix: code review suggestion

* feat(test): add aws bedrock utils unit test

* feat(AwsBedrockAPIClient): enhance getEmbeddingDimensions method to support dynamic model dimension retrieval

* fix(AwsBedrockAPIClient): Modify the processing logic when the embedded dimension cannot be parsed, throw an error instead of returning the default value

* chore(package): Reorganize AWS SDK dependencies in package.json
2025-07-29 17:55:55 +08:00
Phantom b716a7446a perf: part of memory leak (#8619)
* fix: 修复多个组件中的内存泄漏问题

清理setTimeout和事件监听器以避免内存泄漏
优化useEffect中的异步操作清理逻辑

* fix: review comments
2025-07-29 17:41:56 +08:00
自由的世界人 27af64f2bd fix: change jschardet to chardet (#8577)
* fix: change jschardet to chardet

* Update file.test.ts

* fix: error

* fix: test fail

* fix: test error

* Update file.test.ts

* fix: optimize details

* Update file.test.ts

* Update file.ts

* Update file.ts

* Update file.test.ts
2025-07-29 17:27:36 +08:00