* refactor: optimize DatabaseManager and fix libsql crash issues
Major improvements:
- Created DatabaseManager singleton to centralize database connection management
- Auto-initialize database in constructor (no manual initialization needed)
- Removed all manual initialize() and ensureInitialized() calls (47 occurrences)
- Simplified initialization logic (removed retry loops that could cause crashes)
- Removed unused close() and reinitialize() methods
- Reduced code from ~270 lines to 172 lines (-36%)
Key changes:
1. DatabaseManager.ts (new file):
- Singleton pattern with auto-initialization
- State management (INITIALIZING, INITIALIZED, FAILED)
- Windows compatibility fixes (empty file detection, intMode: 'number')
- Simplified waitForInitialization() logic
2. BaseService.ts:
- Removed static initialize() and ensureInitialized() methods
- Simplified database/rawClient getters to use DatabaseManager
3. Service classes (AgentService, SessionService, SessionMessageService):
- Removed all initialize() methods
- Removed all ensureInitialized() calls
- Services now work out of the box
4. Main entry points (index.ts, server.ts):
- Removed explicit database initialization calls
- Database initializes automatically on first access
Benefits:
- Fixes Windows libsql crashes by removing dangerous retry logic
- Simpler API - no need to remember to call initialize()
- Better separation of concerns
- Cleaner codebase with 36% less code
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: wait for database initialization on app startup
Issue: "Database is still initializing" error on startup
Root cause: Synchronous database getter was called before async initialization completed
Solution:
- Explicitly wait for database initialization in main index.ts
- Import DatabaseManager and call getDatabase() to ensure initialization is complete
- This guarantees database is ready before any service methods are called
Changes:
- src/main/index.ts: Added explicit database initialization wait before API server check
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: use static import for getDatabaseManager
- Move import to top of file for better code organization
- Remove unnecessary dynamic import
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: streamline database access in service classes
- Replaced direct database access with asynchronous calls to getDatabase() in various service classes (AgentService, SessionService, SessionMessageService).
- Updated the main index.ts to utilize runAsyncFunction for API server initialization, ensuring proper handling of asynchronous database access.
- Improved code organization and readability by consolidating database access logic.
This change enhances the reliability of database interactions across the application and ensures that services are correctly initialized before use.
* refactor: remove redundant logging in ApiServer initialization
- Removed the logging statement for 'AgentService ready' during server initialization.
- This change streamlines the startup process by eliminating unnecessary log entries.
This update contributes to cleaner logs and improved readability during server startup.
* refactor: change getDatabase method to synchronous return type
- Updated the getDatabase method in DatabaseManager to return a synchronous LibSQLDatabase instance instead of a Promise.
- This change simplifies the database access pattern, aligning with the current initialization logic.
This refactor enhances code clarity and reduces unnecessary asynchronous handling in the database access layer.
* refactor: simplify sessionMessageRepository by removing transaction handling
- Removed transaction handling parameters from message persistence methods in sessionMessageRepository.
- Updated database access to use a direct call to getDatabase() instead of passing a transaction client.
- Streamlined the upsertMessage and persistExchange methods for improved clarity and reduced complexity.
This refactor enhances code readability and simplifies the database interaction logic.
---------
Co-authored-by: Claude <noreply@anthropic.com>
* fix: notify renderer when api server ready
* chore: minor comment update
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: minor ui change to reflect server loading state
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* fix: improve server startup and error handling logic
Refactored ApiServer to clean up failed server instances and ensure proper handling of server state. Updated loggerService import to use shared logger and improved error handling during server startup.
* Update server.ts
- Updated logging statements across various modules to provide more structured and detailed information.
- Changed log levels from info to debug for less critical messages to reduce log clutter.
- Enhanced error logging to include relevant context such as agentId, sessionId, and model details.
- Standardized log messages to follow a consistent format, improving readability and maintainability.
* feat: add api server
This reverts commit c76aa03566.
* update yarn.lock
* fix: correct import paths in ToolSettings component
Update import paths for PreprocessSettings and WebSearchSettings to reference correct locations in DocProcessSettings and WebSearchSettings directories.
* feat(settings): add API server settings link and route
* fix(auth): improve authorization handling and error responses
* feat(chat): enhance model validation and logging for chat completions
feat(models): improve logging for model retrieval and filtering
feat(utils): add model ID validation and support for OpenAI providers
* feat(api-server): refactor config loading and remove unused ToolSettings component
* refactor(ApiServerService): simplify config retrieval and improve error handling in ApiServerSettings
* fix(mcp): remove unnecessary await in listTools return statement
* refactor(ApiServerSettings): replace window.message with window.toast for notifications
---------
Co-authored-by: kangfenmao <kangfenmao@qq.com>