Expose a model-callable `skills_call` tool in the shared tool registry and add coverage for native dispatcher execution of generic skill invocations. Closes#67.
Made-with: Cursor
Unify tool-call parsing across dispatcher paths and persist parsed fallback calls with stable IDs so execution and history stay aligned end-to-end.
Closes#65
Made-with: Cursor
- Add openhuman-skills submodule pointing to tinyhumansai/openhuman-skills
- Remove openhuman-skills from .gitignore so the submodule is tracked
- Update skill discovery paths in qjs_engine.rs from skills/skills to
openhuman-skills/skills (dev cwd, parent, and bundled resource paths)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Implemented comprehensive unit tests for OAuthProviderButton across multiple providers: Discord, GitHub, Google, and Twitter.
- Covered rendering, OAuth flow in both web and Tauri environments, loading states, and error handling.
- Ensured consistent styling and behavior for each provider's button, including label, icon, and disabled states.
- Enhanced test coverage for backend URL retrieval and interaction with the OAuth flow.
- Updated ESLint configuration to include unit test files with TypeScript and JSX support.
- Modified tsconfig.json to include test files for better type checking.
- Added a new tsconfig.unit.json for unit tests, specifying necessary types and includes.
- Adjusted vitest.config.ts to include the new test file patterns for comprehensive testing coverage.
- Improved table formatting in the `sdk-rust-e2e-test-run.md` and `tinyhumansai-sdk.md` files for better readability.
- Ensured consistent alignment and spacing across various sections to enhance user experience.
- Updated the TinyHumans AI SDK version in Cargo.lock and Cargo.toml.
- Added new documentation files for the Rust SDK E2E test run and TinyHumans AI SDK reference.
- Updated the skills subproject commit reference.
- Refactored memory client methods for improved functionality and consistency.
- Reorganized imports for better clarity and consistency.
- Removed unnecessary parameter from `handleSendMessageWeb` function to simplify its signature.
- Updated error handling in `sendMessage` thunk to enhance readability by consolidating the dispatch call for error responses.
- Introduced a utility function to identify read-only tools in both TypeScript and Rust implementations.
- Updated tool discovery logic to filter out read-only tools, ensuring only actionable tools are included in the skill definitions.
- Improved comments for clarity regarding the handling of tool data from the memory layer.
- Reduced the number of available tools for Notion from 25 to 12.
- Added architecture note regarding memory layer handling for read/query operations.
- Updated descriptions to specify that data retrieval is managed by the memory context instead of tools.
- Changed the return type of `recall_skill_context` to `Option<serde_json::Value>` for better flexibility.
- Updated logging to provide clearer insights during memory recall operations.
- Simplified context handling in `chat_send_inner` and `recall_memory` functions to improve readability.
- Made the `isWeb` prop optional in the Welcome component for better flexibility.
- Simplified the Welcome page layout by consolidating the header into a single line.
- Removed unused Lottie animation references from the Onboarding component to streamline the code.
- Downgraded @tauri-apps/api to version 2.9.1 and updated @tauri-apps/cli to 2.9.6 in package.json.
- Added three.js library with version 0.183.2.
- Modified Login component to accept isWeb prop and refactored its structure for improved user experience.
- Updated build.rs for local builds and adjusted memory client references in memory module.
- Updated Welcome component to navigate to login based on isWeb prop.
- Simplified test scripts in package.json by removing specific config references for vitest.
- Updated @tauri-apps/api dependency version to 2.10.1.
- Removed unused dependencies from yarn.lock and updated Cargo.toml and Cargo.lock for tinyhumansai to version 0.1.4.
- Enhanced memory management in Conversations and Login components by ensuring async token synchronization.
- Introduced recall_memory command in Tauri for improved context retrieval from memory.
- Introduced new build scripts for macOS targeting Intel architecture, including options for debug and release builds.
- Updated input schema handling in the skill instance to ensure consistent naming with the `inputSchema` property for better compatibility with JSON serialization.
- Added `syncMemoryClientToken` utility to synchronize JWT token with the TinyHumans memory client after user login and Redux rehydration.
- Updated `PersistGate` in `App.tsx` to call `syncMemoryClientToken` on lift.
- Modified `SkillManagementPanel` to use `triggerSync` for skill management instead of stopping and starting skills.
- Implemented memory commands in Tauri for initializing and querying the TinyHumans memory client.
- Enhanced skill instance handling to persist sync data and clear memory on OAuth revocation.
- Introduced a new memory module to manage skill data synchronization effectively.
- Added auto-recharge settings management, including fetching, updating, and toggling auto-recharge functionality.
- Integrated credit balance and team usage retrieval to provide users with real-time financial insights.
- Implemented card management features, allowing users to add, update, and delete saved payment methods.
- Updated API interactions to support new endpoints for credits and auto-recharge functionalities.
- Improved user experience with loading states and error handling for credit-related operations.
- Added new commands in `package.json` for building macOS x64 applications.
- Updated `TOOLS.md` to reflect the latest tool statistics and improved formatting.
- Refactored `BillingPanel` to include credit balance and team usage state management, with loading indicators and top-up functionality.
- Integrated budget usage tracking in `Conversations` page, displaying budget status and a top-up call-to-action when funds are depleted.
- Updated `creditsApi` to include new endpoints for fetching team usage and handling credit top-ups, with improved data structures for credit balance and transactions.
- Simplified onboarding steps by removing the invite code step and adjusting the animation sequence.
These changes improve user experience by providing better visibility into billing and usage, as well as streamlining the onboarding process.
- Updated `gmailSlice` to replace `GmailEmailSummary` with `GmailEmailBatch`, enhancing email data structure.
- Modified `SkillProvider` to dispatch emails as `GmailEmailBatch | null`.
- Improved HTTP client management in `ops_net.rs` by implementing a shared client for fetch calls, optimizing connection handling and timeout management.
- Enhanced deep link handling in `desktopDeepLinkListener.ts` to trigger synchronization after OAuth completion.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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`.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- Introduced flags to track the QR flow and DC migration states, preventing polling and authentication checks during sensitive operations.
- Updated polling intervals and added initial delays to enhance the user experience during authentication.
- Improved code clarity with detailed comments explaining the new flow control mechanisms.
This update ensures a smoother and more reliable authentication process for users, reducing the risk of errors during critical operations.
- Changed all references in documentation and code to reflect the new `alphahuman://` URL scheme for web-to-desktop handoff.
- Updated deep link handling in Tauri configuration, utility functions, and authentication flow to ensure compatibility with the new scheme.
- Enhanced documentation to guide users on the updated authentication process.
This update improves the clarity and functionality of the authentication flow for the desktop application.
- Introduced a new documentation file detailing the Telegram login flow for the desktop client, including system-browser authentication and deep link handling.
- Updated the TelegramLoginButton component to initiate the login process using the backend URL for Tauri desktop applications.
- Enhanced deep link listener to validate incoming URLs and manage session tokens more effectively.
- Refactored utility functions to streamline Tauri environment checks and improve code clarity.
This update improves the onboarding experience for desktop users and provides comprehensive guidance on implementing Telegram login functionality.
- Introduced detailed architecture overview outlining system components and entry points.
- Documented state management using Redux Toolkit and Redux-Persist, including store configuration and slice structures.
- Described services layer architecture, detailing API client, socket service, and MTProto service functionalities.
- Explained the Model Context Protocol (MCP) system, including tool categories and implementation examples.
- Outlined routing structure and page components, emphasizing protected and public routes.
- Organized reusable components by feature, detailing their structure and usage.
- Provided insights into provider management for service lifecycle and shared state.
This documentation enhances understanding of the application's structure and improves onboarding for new developers, ensuring clarity in the system's design and functionality.
- Replaced the favicon in index.html with a new alpha.svg icon.
- Enhanced package.json with new macOS-specific build and run scripts for Tauri.
- Added a comprehensive macOS background execution implementation, including a system tray menu and autostart functionality.
- Updated Tauri configuration to support tray icon and macOS private API features.
- Introduced new capabilities for autostart and tray management in the application.
This update improves the user experience on macOS by providing a seamless background execution feature and a visually updated application icon.
- Updated the message handler to only accept messages from Telegram OAuth, ensuring better security.
- Refactored the authentication process to handle Telegram's auth_result more effectively, including parsing the payload and managing session tokens.
- Improved error handling during the authentication process, providing clearer error messages for failed operations.
- Added a new allowed host in vite.config.ts for the frontend runner.
These changes streamline the authentication process with Telegram, enhancing security and user experience.
Replace browser fetch() with Rust invoke() for token exchange to bypass
CORS restrictions. Fix deep link listener by removing premature __TAURI__
guard (not available at module load), using lazy dynamic import instead.
Add deepLinkHandled localStorage flag to prevent infinite reload loops
from getCurrent() re-delivering the same URL after navigation. Add
backend auth implementation guide and platform-specific deep link docs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Introduced @tauri-apps/plugin-deep-link for handling deep link events
- Implemented setup for deep link listener in main application entry
- Enhanced Login page to support Telegram authentication via deep links
- Created utility functions for building and handling deep links
- Added configuration for backend URL management
- Updated Tauri configuration to support deep link plugin
This update enhances the user experience by allowing seamless transitions between web and desktop applications through deep linking.