- Updated `syncNotionMetadataToBackend` to include additional Notion data (pages and summaries) for backend integration.
- Refactored `syncNotionStateToSlice` to handle profile, pages, and summaries more effectively.
- Revised `TOOLS.md` to improve clarity and organization of parameters for Gmail and Notion tools.
- Added new entries to `.gitignore` for prebuilt TDLib files.
- Deleted `agentLoop.test.ts` as part of cleanup for deprecated agent loop service and related components.
- Reduced `TOOLS.md` size by removing documentation for 100+ outdated GitHub tools.
- Updated `forceToolsCacheRefresh` to use `async` for consistency.
- Simplified `threadSlice` message synchronization logic.
Updated OAuth provider login URLs to use "responseType=json" for development mode. Enhanced deep link handling by adding support for an additional "key" parameter to distinguish token types.
- Implemented `gmail-connection-status` tool for diagnosing Gmail OAuth connection issues, skill state, and API connectivity.
- Enhanced error handling with improved JSON parse error detection for API responses.
- Updated logging for better diagnostics and traceability in API interactions.
Commented out a redundant health monitoring log in the `alphahuman` module to reduce clutter. Additionally, fixed an issue in `package.json` where the `test:unit:watch` script had an incorrect command.
- Consolidated JSON structure in `.mcp.json` and `.claude/mcp.json` for improved readability.
- Updated `CLAUDE.md` and other documentation files to enhance formatting consistency and clarity.
- Improved the organization of agent roles and initialization procedures in `AGENTS.md`, `BOOTSTRAP.md`, and `IDENTITY.md`.
- Enhanced user understanding and personalization strategies in `USER.md` and `MEMORY.md`.
- Refined tool generation scripts for better error handling and output formatting in `discover-tools.js` and `openClaw-formatter.js`.
- Updated the inference request structure to improve type safety and added comprehensive logging for both requests and responses.
- Modified tool call execution to handle only the latest tool call while sending placeholders for previous calls.
- Implemented error handling for tool results, ensuring proper logging and formatting of error messages.
- Introduced a timeout parameter for network requests in the ops_net module to enhance request reliability.
- Introduced `AgentToolSchema` and `AgentToolExecution` interfaces to define tool registry types based on ZeroClaw compatibility.
- Added `IAgentToolRegistry` interface to provide type-safe operations for managing and executing tools.
- Updated `agentToolRegistry.ts` to explicitly map tool schemas to the `function` type for improved type consistency.
- Added detailed logging for tool schema generation, tool execution, and runtime state checks to improve traceability.
- Enhanced Gmail/Notion tool filtering with additional
- Removed unused `agent.ts` system types, agent loop service (`agentLoop.ts`), corresponding UI components (`AgentExecutionPanel.tsx`), and tests (`agentSlice.test.ts`).
- Cleaned up related imports and ensured no functionality depends on the deprecated files.
- Added new `AgentSystem` types to support enhanced agent execution, tool tracking, API compatibility, and integration with thread system.
- Developed `AgentExecutionPanel` React component for detailed real-time monitoring of agent execution status and history.
- Created comprehensive tests for `AgentLoopService` covering execution flow, tool integration, error handling, and timeout scenarios.
- Added Notion context building functionality to Conversations component, enhancing user messages with relevant Notion workspace information.
- Implemented synchronization of Notion pages and summaries in SkillProvider, ensuring state consistency with the Notion skill.
- Expanded Notion slice to include new state properties for pages and summaries, along with corresponding actions for state management.
- Enhanced type definitions for Notion-related data structures to improve type safety and clarity.
- Updated `package.json` scripts for better error handling and streamlined execution of Tauri commands.
- Added a new `gmail-skill-integration.md` document detailing the Gmail skill integration process, including OAuth2 flow and tool definitions.
- Improved formatting and consistency in `TOOLS.md` for better readability and clarity.
- Enhanced logging in skill management and transport layers for better debugging and monitoring of tool calls.
The toolset has been streamlined to eliminate the Telegram integration, reducing the total tools from 152 to 104 and integrations from 4 to 3. This change simplifies the environment by focusing on the remaining three integrations.
- Remove GitHub remote loading to eliminate 404 errors in development
- Implement automatic cache invalidation when TOOLS.md is updated
- Add file watcher system for real-time cache refresh
- Create useToolsUpdates hook for reactive UI components
- Ensure AI Config page immediately reflects updated tool data
- Auto-dispatch tools-updated events for seamless UI synchronization
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Document expected 404 behavior in AI configuration system where loaders
attempt GitHub remote fetch first, then gracefully fallback to bundled files.
Details:
- Console shows "Failed to load resource: 404" during Settings → AI Config refresh
- Affects: soul/loader.ts and tools/loader.ts GitHub URL attempts
- Fallback works correctly, 404s are cosmetic console warnings
- TODO: Setup public AI config repository for clean remote loading
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Redundant debug logs in the daemon were removed to reduce noise in the logging system. Updated package references in `yarn.lock` and `package.json` to use `registry.npmjs.org` instead of `registry.yarnpkg.com`, ensuring consistency in package resolution.
Replace hardcoded mock data (4 tools) with dynamic discovery system that
generates TOOLS.md from actual V8 skills runtime (152+ tools).
Key Features:
- Real-time tool discovery via runtime_all_tools() command
- Auto-generates comprehensive documentation with examples
- Throttled updates (10s limit) to prevent excessive calls
- Vite file watching exclusion to prevent reload loops
- Manual update capability via dev mode button
- OpenClaw-compliant formatting for AI context injection
Technical Implementation:
- New auto-update.ts module with discovery, grouping & markdown generation
- Enhanced Tauri write_ai_config_file command for secure file operations
- Removed auto-trigger from skill activation for better performance
- Added ai/ directory to Vite ignore list
Result: TOOLS.md now shows real tools from telegram (48), gmail (7),
notion (25), github (72) instead of 4 hardcoded examples.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Updated the `syncGmailMetadataToBackend` function to accept a new `GmailStateForSync` interface, enhancing type safety and clarity.
- Introduced a new `GmailEmailSummaryLike` interface to represent email summaries in the synchronization process.
- Adjusted the handling of Gmail profile data to ensure proper extraction and emission of metadata to the backend.
- Updated the `SkillProvider` to dispatch Gmail emails to the Redux store and synchronize the Gmail state effectively.
- Move SOUL.md from src/ to /ai/ directory for better organization
- Create comprehensive /ai/ directory structure following OpenClaw framework:
- /ai/SOUL.md - Moved existing vibrant personality configuration
- /ai/TOOLS.md - TODO placeholder for available tools and capabilities
- /ai/AGENTS.md - TODO placeholder for agent definitions and roles
- /ai/IDENTITY.md - TODO placeholder for core identity and values
- /ai/USER.md - TODO placeholder for user context and personalization
- /ai/BOOTSTRAP.md - TODO placeholder for initialization procedures
- /ai/MEMORY.md - TODO placeholder for curated long-term knowledge
- /ai/README.md - Comprehensive documentation and implementation guide
- Update import paths in soul/loader.ts:
- Local import: '../../../../ai/SOUL.md?raw'
- GitHub URL: 'main/ai/SOUL.md' for remote loading
- Maintain backward compatibility with existing caching system
- Benefits:
- Clean separation of AI config from source code
- Organized structure for future AI configuration expansion
- User-friendly location for editing AI behavior
- Scalable foundation for full OpenClaw bootstrap system
- Better version control and collaboration on AI personality
All TODO placeholder files include detailed structure examples and
implementation guidance for future development.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix Refresh SOUL Configuration button to actually refresh cached data
- Add clearSoulCache() call before loading fresh configuration
- Create separate refreshSoulConfig() function for button click
- Add loading state "Refreshing..." for better UX
- Clear both memory and localStorage cache for fresh data
- Update SOUL.md persona to be more human, funny, and vibrant
- Transform from robotic assistant to "smart, funny friend" personality
- Add humor, empathy, and authentic human communication style
- Update personality traits: Curious, Witty, Empathetic, Authentic, Optimistic
- Enhance voice & tone with conversational, relatable language
- Improve behavioral guidelines with natural, friendly examples
- Maintain professional competence while adding warmth and personality
The refresh button now properly clears cache and reloads SOUL configuration,
and the AI persona is much more engaging and human-like.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add .mcp.json for MCP server configuration
- Introduced `.mcp.json` with server details for managing MCP integrations
- Defines `readme` server with HTTP type and URL endpoint configuration
* fix: Update skills submodule with Telegram error handling improvements
- Fixed setup flow showing false success when TDLib errors occurred
- Improved async error handling in setup steps
- Added client reset mechanisms for error recovery
- Enhanced error messaging for better user experience
- Cleaned up excessive debug logging while maintaining error logs
Resolves issue where Telegram setup showed success modal despite underlying TDLib errors.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add daemon lifecycle management system to frontend UI
This implementation integrates the Rust daemon's health monitoring and lifecycle management into the React frontend. Key features include real-time health indicators, automatic start/error recovery, and detailed control panels, enhancing both user experience and operational reliability.
* Enhance daemon health monitoring with detailed logging, event tracking, and state management improvements.
* Add extensive logging for Tauri socket lifecycle and event listeners
This update improves troubleshooting and debugging by adding detailed logs throughout Tauri socket initialization, event listener setup, and error handling processes.
* Define global Tauri interface types in TypeScript
* Fix daemon service management and health communication issues
This comprehensive fix resolves two critical daemon-related issues:
1. **Launchctl "Input/output error" fix**:
- Add intelligent state checking before service operations
- Only load LaunchAgent if not already loaded
- Treat "already running" as success, not failure
- Add helper functions for cross-platform service state detection
- Implement idempotent service start operations
2. **Daemon health communication fix**:
- Add ALPHAHUMAN_DAEMON_INTERNAL environment variable to external service plist
- Force external daemon to use file-based communication (daemon_state.json)
- Implement file watching bridge in main app to emit Tauri events
- Ensure frontend receives proper health updates from external daemon
**Key Changes**:
- Enhanced `start()` function with state checking across all platforms
- Added `is_service_loaded_macos()`, `is_service_enabled_linux()`, `is_task_exists_windows()`
- Modified macOS plist to include `ALPHAHUMAN_DAEMON_INTERNAL=false`
- Added `watch_daemon_health_file()` function for external daemon communication
- Updated daemon mode detection logic for cross-platform consistency
- Added comprehensive logging for service management operations
**Expected Results**:
- No more "Input/output error" when clicking daemon start button
- External daemon status shows "connected" instead of "disconnected"
- Idempotent service operations (safe to run multiple times)
- Single daemon process prevents resource conflicts
- Cross-platform daemon service reliability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add `ALPHAHUMAN_DAEMON_INTERNAL` env variable to configuration documentation
* Optimize imports in `TauriCommandsPanel.tsx` by removing unused variables and adding necessary hooks.
* Add OAuth login support with configurable provider types and UI components
This update introduces OAuth login functionality, including support for multiple providers (Google, GitHub, Twitter, Discord). Added reusable components for provider buttons and a login section, along with styled configurations and type definitions. Includes enhancements for token handling and updated login flows.
* Add OAuth debug mode support for development environments
Introduce `IS_DEV` checks to enable OAuth debug mode, allowing detailed logging and adjustable OAuth URLs with debug parameters during development.
* Implement hybrid local/API thread storage with message persistence
- Add local-first thread and message storage using Redux Persist
- Persist threads, messages, and UI state (panelWidth, lastViewedAt, selectedThreadId) locally
- Remove API dependencies for thread/message fetching (fetchThreads, fetchThreadMessages)
- Add local thread management actions (createThreadLocal, deleteThreadLocal, addMessageLocal)
- Fix message persistence issue: ensure both user and AI messages survive navigation
- Maintain API integration for sendMessage functionality with AI responses
- Preserve optimistic updates and error handling behavior
- Enable instant app startup and offline conversation viewing
Key changes:
- Enhanced threadSlice with messagesByThreadId storage and local management actions
- Updated Redux persist config to include thread data
- Modified Conversations component to use local thread operations
- Fixed addInferenceResponse to persist preceding user messages
- Maintained all existing UI patterns and error states
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement SOUL.md persona injection system
- Add complete SOUL.md persona injection into user messages
- Create AI Configuration panel in Settings for SOUL management
- Implement multi-layer caching (memory → localStorage → GitHub → bundled)
- Add SOUL injection to all message flows:
- Main Conversations page (inferenceApi flow)
- Settings Agent Chat (Tauri commands)
- Redux sendMessage thunk
- Thread API layer
- Parse SOUL.md sections: personality, safety rules, behaviors, interactions
- Inject persona context with [PERSONA_CONTEXT] tags
- Add graceful error handling with console logging
- Token-optimized context building (top 3 traits, critical safety rules)
- Cross-platform compatibility (Tauri + web environments)
Files added:
- src/lib/ai/soul/types.ts - TypeScript interfaces
- src/lib/ai/soul/loader.ts - SOUL loading with caching
- src/lib/ai/soul/injector.ts - Message injection logic
- src/components/settings/panels/AIPanel.tsx - Settings UI
Files modified:
- src/pages/Conversations.tsx - Add SOUL injection to main chat
- src/store/threadSlice.ts - Add SOUL injection to Redux flow
- src/services/api/threadApi.ts - Add SOUL injection to API layer
- src/utils/tauriCommands.ts - Add SOUL injection to Tauri commands
- src/components/settings/SettingsHome.tsx - Add AI Configuration menu
- src/pages/Settings.tsx - Add AI panel routing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
* feat: add mnemonic recovery flow and encryption key management
- Introduced a new Mnemonic page for users to generate or import their recovery phrase.
- Updated routing to redirect users to the Mnemonic page after onboarding.
- Enhanced state management to store and retrieve AES encryption keys derived from the mnemonic.
- Added utility functions for generating and validating BIP39 mnemonic phrases.
- Updated selectors and reducers to handle encryption key state in the auth slice.
- Included new dependencies for cryptographic operations.
* feat: integrate Web3 wallet functionality and enhance state management
- Added WalletInfoSection component to display connected wallet address, network, and balance.
- Updated auth slice to manage primary wallet address derived from mnemonic.
- Enhanced SkillManager to pass wallet address as load parameters for wallet skill.
- Introduced utility function to derive EVM wallet address from mnemonic.
- Updated dependencies for cryptographic operations related to wallet functionality.
* fix: improve error handling and network selection in WalletInfoSection
- Enhanced the parsing of network data to ensure robustness against undefined values.
- Updated network selection logic to prioritize valid entries and provide a fallback.
- Improved error logging for better debugging of wallet information loading issues.
- Adjusted balance retrieval to handle cases where chain_id may be missing.
* feat: add socket event contract for Tauri integration
- Documented the socket event contract for communication between the backend and frontend in Tauri mode.
- Introduced constants for `REQUEST_ENCRYPTION_KEY` and `ENCRYPTION_KEY_EVENT` to facilitate encryption key management.
- Updated `setupTauriSocketListeners` to handle the encryption key request and response flow.
* Refactor wallet information fetching and connection status handling
- Updated `WalletInfoSection` to improve loading state management and error handling during wallet info retrieval.
- Introduced a retry mechanism for fetching wallet information with a maximum of 5 attempts.
- Enhanced connection status logic in `SkillsGrid` to treat missing authentication status as connected.
- Added a new method in `SkillManager` to set the wallet address and notify the wallet skill accordingly.
* feat: add integration token fetching and decryption functionality
- Introduced `fetchIntegrationTokens` API call to retrieve encrypted OAuth tokens for integrations.
- Implemented decryption logic for integration tokens using a provided key.
- Enhanced deep link handling to support fetching and storing integration tokens upon successful OAuth login.
- Added utility functions for hex and base64 conversions to facilitate token decryption.
- Updated `authApi.ts` and `desktopDeepLinkListener.ts` to integrate new functionality.
* refactor: move integration token encryption/decryption logic to a new utility file
- Extracted encryption and decryption functions for integration tokens into `integrationTokensCrypto.ts`.
- Removed redundant functions from `desktopDeepLinkListener.ts` to streamline the code.
- Updated deep link handling to store only the encrypted tokens instead of decrypted ones.
- Improved type definitions for integration tokens and their payloads.
* feat: enhance Gmail skill integration and state management
- Updated `SkillManager` to accept an optional access token for Gmail during OAuth completion.
- Introduced `gmailSlice` to manage Gmail user profile and emails in the Redux store.
- Implemented synchronization of Gmail skill state with the Redux store to keep user data updated.
- Refactored `SkillProvider` to handle Gmail state changes and fetch initial state from the backend.
- Adjusted deep link handling to pass decrypted access tokens for Gmail integration.
- Modified API endpoint for onboarding completion to remove the Telegram prefix.
* feat: implement Gmail metadata synchronization to backend
- Added a new utility function `syncGmailMetadataToBackend` to emit Gmail profile and email summaries to the backend via the `integration:metadata-sync` socket event.
- Updated `SkillProvider` to call the new synchronization function, ensuring Gmail skill state is sent to the backend when updated.
* refactor: update Tauri socket event handling and improve Mnemonic component typing
- Revised the Tauri socket event contract to clarify that encryption key handling is managed via the API instead of the socket.
- Removed outdated socket event constants related to encryption key requests from `tauriSocket.ts`.
- Enhanced type definitions in the `Mnemonic` component by specifying the event type for keyboard events.
* fix: update Gmail provider constant and adjust metadata synchronization logic
- Changed the constant for the Google provider from 'google' to 'gmail' for clarity.
- Commented out the email metadata synchronization logic in `syncGmailMetadataToBackend` to prevent potential issues with undefined email states.
* feat: implement Gmail metadata synchronization service
- Added a new file `metadataSync.ts` to handle the synchronization of Gmail profile and email summaries to the backend via the `integration:metadata-sync` socket event.
- Updated import paths in `SkillProvider` to reflect the new location of the Gmail metadata synchronization function.
- Enhanced type definitions for Gmail profile and email summaries to ensure proper data structure during synchronization.
* refactor: clean up code formatting and improve readability across multiple components
- Standardized import statements and formatting in various files, including `WalletInfoSection`, `AgentChatPanel`, and `SkillsPanel`.
- Enhanced readability by adjusting line breaks and spacing in JSX elements and function definitions.
- Improved consistency in the use of arrow functions and destructuring across components.
- Updated type definitions and ensured proper alignment of code for better maintainability.
* feat: enhance error handling in WalletInfoSection and improve user feedback
- Added error reporting functionality in `WalletInfoSection` to capture and enqueue errors when wallet info fails to load.
- Updated `Mnemonic` component to handle user state more robustly, ensuring encryption key is only set if the user is loaded.
- Refactored `TauriCommandsPanel` to improve string comparisons for loading states by converting to lowercase.
- Adjusted deep link handling in `desktopDeepLinkListener` to use trimmed hex values for encryption key conversion.
* fix: improve balance parsing and error handling in WalletInfoSection
- Updated balance parsing logic in `WalletInfoSection` to ensure that non-finite values default to zero.
- Enhanced error handling in `desktopDeepLinkListener` by adding error reporting for invalid encryption keys and conversion failures, improving user feedback and debugging capabilities.
* Merge remote-tracking branch 'upstream/develop' into feat/final-flow-check
* chore: update submodule URL for skills repository to use HTTPS
* chore: update skills submodule to latest commit and enhance SkillsGrid component
- Updated the skills submodule to the latest commit for improved functionality.
- Refactored `SkillsGrid` to better handle skill setup logic, ensuring accurate representation of skills with setup requirements.
- Cleaned up code formatting and improved readability in various components, including `SkillActionButton` and `desktopDeepLinkListener`.
* feat: implement Notion metadata synchronization and user profile management
- Added a new service `metadataSync.ts` to handle synchronization of Notion user metadata to the backend via the `integration:metadata-sync` socket event.
- Introduced a new Redux slice `notionSlice.ts` for managing the Notion user profile state.
- Updated `SkillProvider` to fetch and sync Notion user profile upon connection, ensuring seamless integration with the backend.
- Enhanced the store configuration to include the new Notion reducer.
* refactor: remove unnecessary console warnings in SkillProvider
- Eliminated console warnings related to Notion user retrieval errors and auto-loading skills, streamlining the logging process for better clarity and reducing noise in the console output.
- Improved code readability by cleaning up commented-out warning messages that were no longer needed.
- Eliminated console warnings related to Notion user retrieval errors and auto-loading skills, streamlining the logging process for better clarity and reducing noise in the console output.
- Improved code readability by cleaning up commented-out warning messages that were no longer needed.
- Added a new service `metadataSync.ts` to handle synchronization of Notion user metadata to the backend via the `integration:metadata-sync` socket event.
- Introduced a new Redux slice `notionSlice.ts` for managing the Notion user profile state.
- Updated `SkillProvider` to fetch and sync Notion user profile upon connection, ensuring seamless integration with the backend.
- Enhanced the store configuration to include the new Notion reducer.
* feat: add .mcp.json for MCP server configuration
- Introduced `.mcp.json` with server details for managing MCP integrations
- Defines `readme` server with HTTP type and URL endpoint configuration
* fix: Update skills submodule with Telegram error handling improvements
- Fixed setup flow showing false success when TDLib errors occurred
- Improved async error handling in setup steps
- Added client reset mechanisms for error recovery
- Enhanced error messaging for better user experience
- Cleaned up excessive debug logging while maintaining error logs
Resolves issue where Telegram setup showed success modal despite underlying TDLib errors.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add daemon lifecycle management system to frontend UI
This implementation integrates the Rust daemon's health monitoring and lifecycle management into the React frontend. Key features include real-time health indicators, automatic start/error recovery, and detailed control panels, enhancing both user experience and operational reliability.
* Enhance daemon health monitoring with detailed logging, event tracking, and state management improvements.
* Add extensive logging for Tauri socket lifecycle and event listeners
This update improves troubleshooting and debugging by adding detailed logs throughout Tauri socket initialization, event listener setup, and error handling processes.
* Define global Tauri interface types in TypeScript
* Fix daemon service management and health communication issues
This comprehensive fix resolves two critical daemon-related issues:
1. **Launchctl "Input/output error" fix**:
- Add intelligent state checking before service operations
- Only load LaunchAgent if not already loaded
- Treat "already running" as success, not failure
- Add helper functions for cross-platform service state detection
- Implement idempotent service start operations
2. **Daemon health communication fix**:
- Add ALPHAHUMAN_DAEMON_INTERNAL environment variable to external service plist
- Force external daemon to use file-based communication (daemon_state.json)
- Implement file watching bridge in main app to emit Tauri events
- Ensure frontend receives proper health updates from external daemon
**Key Changes**:
- Enhanced `start()` function with state checking across all platforms
- Added `is_service_loaded_macos()`, `is_service_enabled_linux()`, `is_task_exists_windows()`
- Modified macOS plist to include `ALPHAHUMAN_DAEMON_INTERNAL=false`
- Added `watch_daemon_health_file()` function for external daemon communication
- Updated daemon mode detection logic for cross-platform consistency
- Added comprehensive logging for service management operations
**Expected Results**:
- No more "Input/output error" when clicking daemon start button
- External daemon status shows "connected" instead of "disconnected"
- Idempotent service operations (safe to run multiple times)
- Single daemon process prevents resource conflicts
- Cross-platform daemon service reliability
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* Add `ALPHAHUMAN_DAEMON_INTERNAL` env variable to configuration documentation
* Optimize imports in `TauriCommandsPanel.tsx` by removing unused variables and adding necessary hooks.
* Add OAuth login support with configurable provider types and UI components
This update introduces OAuth login functionality, including support for multiple providers (Google, GitHub, Twitter, Discord). Added reusable components for provider buttons and a login section, along with styled configurations and type definitions. Includes enhancements for token handling and updated login flows.
* Add OAuth debug mode support for development environments
Introduce `IS_DEV` checks to enable OAuth debug mode, allowing detailed logging and adjustable OAuth URLs with debug parameters during development.
* Implement hybrid local/API thread storage with message persistence
- Add local-first thread and message storage using Redux Persist
- Persist threads, messages, and UI state (panelWidth, lastViewedAt, selectedThreadId) locally
- Remove API dependencies for thread/message fetching (fetchThreads, fetchThreadMessages)
- Add local thread management actions (createThreadLocal, deleteThreadLocal, addMessageLocal)
- Fix message persistence issue: ensure both user and AI messages survive navigation
- Maintain API integration for sendMessage functionality with AI responses
- Preserve optimistic updates and error handling behavior
- Enable instant app startup and offline conversation viewing
Key changes:
- Enhanced threadSlice with messagesByThreadId storage and local management actions
- Updated Redux persist config to include thread data
- Modified Conversations component to use local thread operations
- Fixed addInferenceResponse to persist preceding user messages
- Maintained all existing UI patterns and error states
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Claude <noreply@anthropic.com>
- Updated the skills submodule to the latest commit for improved functionality.
- Refactored `SkillsGrid` to better handle skill setup logic, ensuring accurate representation of skills with setup requirements.
- Cleaned up code formatting and improved readability in various components, including `SkillActionButton` and `desktopDeepLinkListener`.
- Add local-first thread and message storage using Redux Persist
- Persist threads, messages, and UI state (panelWidth, lastViewedAt, selectedThreadId) locally
- Remove API dependencies for thread/message fetching (fetchThreads, fetchThreadMessages)
- Add local thread management actions (createThreadLocal, deleteThreadLocal, addMessageLocal)
- Fix message persistence issue: ensure both user and AI messages survive navigation
- Maintain API integration for sendMessage functionality with AI responses
- Preserve optimistic updates and error handling behavior
- Enable instant app startup and offline conversation viewing
Key changes:
- Enhanced threadSlice with messagesByThreadId storage and local management actions
- Updated Redux persist config to include thread data
- Modified Conversations component to use local thread operations
- Fixed addInferenceResponse to persist preceding user messages
- Maintained all existing UI patterns and error states
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>