* chore: update AlphaHuman version to 0.49.3 and configure updater plugin in tauri.conf.json
- Bumped the AlphaHuman package version in Cargo.lock to 0.49.3.
- Added updater configuration in tauri.conf.json to enable automatic updates with specified endpoints.
* refactor: rename AlphaHuman to OpenHuman across the codebase
- Updated all instances of "AlphaHuman" to "OpenHuman" in comments, tooltips, and constants to reflect the new branding.
- Adjusted relevant documentation and prompts to ensure consistency with the new name.
* refactor: update documentation and configurations to reflect OpenHuman branding
- Replaced all instances of "AlphaHuman" with "OpenHuman" in documentation, comments, and configuration files to ensure consistency with the new branding.
- Updated deep link URLs and related authentication flows to use the new "openhuman://" scheme.
- Adjusted paths and references in the skills system and other related files to align with the new project name.te
* refactor: standardize OpenHuman references and update configurations
- Replaced all instances of "AlphaHuman" with "OpenHuman" across documentation, comments, and configuration files to maintain branding consistency.
- Updated URLs and paths to reflect the new "openhuman://" scheme.
- Adjusted environment variable names and related settings to align with the new project identity.
- Enhanced documentation for clarity and accuracy regarding the OpenHuman framework.r
* chore: update subproject commit reference in skills directory
* refactor: update backend URL to reflect new service domain
- Changed default backend URL from "https://api.openhuman.xyz" to "https://api.tinyhumans.ai" in both JavaScript and Rust configuration files.
- Ensured consistency across the codebase regarding the new backend service endpoint.
* feat: introduce identity and migration modules for OpenHuman
- Added a new identity module to support AIEOS v1.1 JSON format, including structures for identity, psychology, linguistics, motivations, capabilities, physicality, history, and interests.
- Implemented a migration module to facilitate data migration from OpenClaw memory, including SQLite and Markdown sources, with detailed reporting on migration statistics and warnings.
- Established utility functions for handling multimodal content and image processing within the OpenHuman framework.
- Enhanced the agent system with new dispatcher and classifier functionalities to improve tool management and message classification.
* chore: remove Android project files and configurations
- Deleted various Android project files including .editorconfig, .gitignore, build.gradle.kts, gradle.properties, and others to clean up the project structure.
- Removed all related resources, layouts, and source files from the Android app directory to streamline the codebase.
- This cleanup is part of a larger effort to refactor and simplify the project structure.
* refactor: update login flow and remove Telegram integration
- Removed the TelegramLoginButton component and its references from the OAuthLoginSection, streamlining the login options.
- Updated the AppRoutes to remove the login route, reflecting changes in the authentication flow.
- Enhanced the RotatingTetrahedronCanvas component with improved geometry and lighting effects for better visual presentation.
- Adjusted the TypewriterGreeting component's styling for consistency.
- Cleaned up the Welcome page to integrate the OAuthLoginSection directly, improving user experience.
* chore: update subproject commit reference in skills directory
* chore: update test configurations and improve test assertions
- Modified test scripts in package.json to use a specific Vitest configuration file for consistency.
- Updated assertions in loader tests to ensure loading durations are non-negative.
- Enhanced tool loading tests to clarify expected behavior regarding localStorage and cache management.
- Adjusted agent tool registry tests to improve error handling and ensure accurate statistics.
- Refined device detection tests to reflect updated fallback URLs.
* fix: enhance parameter formatting and remove unused components
- Updated the `formatParameters` function to handle cases where schema properties are empty, returning a more informative response.
- Deleted the `DownloadScreen` component and associated device detection utilities to streamline the codebase and remove unused functionality.
- Adjusted tests to reflect changes in the tool loading and agent tool registry, ensuring accuracy in assertions.
* chore: simplify Vitest configuration by removing unused include patterns
- Updated the Vitest configuration to remove unnecessary test file patterns, streamlining the test setup for better clarity and maintainability.
* refactor: update paths and comments for AI configuration and file watching
- Modified Vite configuration to ignore only the `src-tauri` directory.
- Updated logging messages to reflect the correct path for writing AI configuration files.
- Adjusted fetch calls in the file watcher to use the new path for `TOOLS.md`.
- Revised comments and logic in Rust code to clarify the handling of AI configuration file paths, including legacy fallback options.
* chore: remove unused updater secrets from GitHub Actions workflow
- Deleted UPDATER_GIST_URL and UPDATER_GIST_ID environment variables from the package-and-publish workflow, streamlining the configuration.
* chore: comment out Vitest thresholds for clarity
- Commented out the thresholds section in the Vitest configuration to improve clarity and maintainability, as it is currently not in use.
* ran formatter
* chore: update updater public key in tauri configuration
- Replaced the existing public key in the updater plugin configuration with a new value to ensure proper functionality and security.
* chore: update ESLint configuration and refactor components
- Added `localStorage` and `sessionStorage` as readonly globals in ESLint configuration for better linting support.
- Removed unused imports from `SkillsPanel.tsx` to clean up the code.
- Changed the type of `watcherInterval` in `file-watcher.ts` for improved type safety.
- Refactored toast management logic in `Intelligence.tsx` to enhance clarity and maintainability.
- Simplified import statements in `IntelligenceProvider.tsx` for consistency.
- Streamlined object property shorthand in `agentToolRegistry.ts` for cleaner code.
* refactor: improve error handling and type safety in Intelligence component
- Enhanced toast notification logic to defer state updates, preventing potential issues with setState in effects.
- Updated the source filter dispatch to use a more specific type for improved type safety.
* refactor: enhance type safety across various components and services
- Updated type definitions from `any` to `unknown` in multiple files to improve type safety and prevent potential runtime errors.
- Refactored state management in `TauriCommandsPanel` to use more specific types.
- Adjusted context and parameters in several interfaces to ensure consistent typing.
- Added ESLint directive to `polyfills.ts` for intentional global assignments.
- Streamlined type handling in utility functions and API responses for better clarity and maintainability.
* refactor: streamline import statements and improve code clarity
- Consolidated import statements in `agentToolRegistry.ts` and `intelligenceSlice.ts` for better readability.
- Simplified the `createTestStore` function in `test-utils.tsx` to enhance code conciseness.
- Cleaned up the `isExecutionStepProgressEvent` function in `intelligence-chat-api.ts` for improved clarity and maintainability.
- Removed Telegram-related environment variables from workflows.
- Updated GitHub repository references in workflows to reflect new project ownership.
- Changed default skills GitHub repository in configuration to align with rebranding.
- 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.
- Introduced new `DeveloperOptionsPanel` to group developer tools in the settings.
- Moved existing tools (Skills, AI Configuration, Tauri Commands, Memory Debug) into the new panel.
- Updated navigation flow and cleaned up conditional rendering for development-only features.
- Updated error handling in `threadSlice` to add agent responses instead of removing user messages.
- Simplified Redux actions by consolidating error handling logic for failed message transmissions.
- Ensured conversation flow consistency by providing fallback error messages to users.
- Deleted `ChatModal` component and its integrations across the codebase.
- Removed Redux `createChatSession` logic and associated APIs.
- Updated task completion flow to bypass AI-driven conversation orchestration.
- Streamlined `Intelligence` page by eliminating unused chat-related state and props.
- Introduced `ActionableCard` component for rendering actionable insights with completion, snooze, and dismiss functionality.
- Added `ChatModal` component to support AI-driven conversations, task execution, and real-time orchestration.
- Implemented snooze portal, priority styling, and typing indicators to enhance UX.
- Integrated WebSocket-based messaging and backend task execution with progress tracking.
- 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.
- Streamlined component structure for improved readability and maintainability.
- Updated button design with a primary style and rounded corners.
- Adjusted layout to focus on central content alignment and animation.
- Updated all references to `AlphaHuman` in UI text, deep link handlers, configuration files, and comments.
- Replaced links, filenames, and identifiers to align with the new `OpenHuman` branding.
- Ensured consistency in code comments, documentation, and test cases.
Simplified the Welcome page layout and styling for improved readability and design consistency. Replaced OAuth login button with a contextual action button directing users based on platform (`Download OpenHuman` or `Continue`). Removed unused dependencies and cleaned up the `package.json` file.
* Update Welcome page to integrate OAuth provider and adjust branding
- Added OAuthProviderButton to the Welcome component for Google authentication.
- Updated the branding from AlphaHuman to OpenHuman in the FeaturesStep component.
- Removed unnecessary Lottie animation from the Onboarding page for a cleaner layout.
- Changed the backend URL to point to the new API endpoint for TinyHumans.
* Refactor routing and sidebar components for improved clarity
- Commented out the Mnemonic route and related logic in AppRoutes for future consideration.
- Updated MiniSidebar to comment out the Invite Friends section.
- Removed unused navigation logic and upgrade call-to-action from the Home page.
- Adjusted Onboarding navigation to redirect to Home instead of Mnemonic.
* Comment out unused settings menu items for future consideration in SettingsHome component
* Add core process and RPC functionality for Alphahuman
- Introduced new binaries: `alphahuman-core` and `alphahuman-cli` for core process management and command-line interaction.
- Implemented `CoreProcessHandle` for managing the lifecycle of the core process.
- Added `core_rpc` module for handling RPC requests and responses.
- Created `core_server` module to manage core server logic and routing.
- Updated `alphahuman` commands to utilize the new RPC structure for health checks, security policies, and configuration management.
- Refactored existing code to streamline interactions with the core process and improve overall architecture.
* Update dependencies and enhance CLI functionality
- Added `clap` for command-line argument parsing in the `alphahuman-cli`.
- Updated `Cargo.lock` and `Cargo.toml` to include `clap` and its features.
- Refactored `alphahuman-cli` to utilize structured command handling with subcommands.
- Improved core process management and logging in `core_process.rs`.
- Enhanced routing and error handling in `core_server.rs` with new root and not found handlers.
- Updated various commands in `alphahuman.rs` to ensure core process is running before executing RPC calls.
* Enhance service management and CLI functionality
- Added new functions for daemon program arguments and command line construction in the service module.
- Updated macOS and Linux installation functions to dynamically generate program arguments and command lines.
- Introduced a new `Reinstall` command in the CLI for easier service management.
- Refactored service command handling to utilize local service functions for improved clarity and maintainability.
* Refactor daemon references to agent in components and hooks
- Updated terminology from "Daemon" to "Agent" in MiniSidebar, DaemonHealthPanel, and TauriCommandsPanel for consistency.
- Modified useDaemonHealth hook to probe agent status and handle agent lifecycle management.
- Introduced new agent server status interface and function in Tauri commands for improved status checking.
- Adjusted related comments and error handling to reflect the changes in terminology.
* Refactor Home component and enhance macOS service management
- Updated Home component to navigate to in-app conversations instead of opening a Telegram bot link.
- Improved macOS service management by implementing modern lifecycle commands and adding compatibility fallbacks for service control.
- Introduced new utility functions for handling macOS GUI domain and service targets.
* Refactor Home component to enhance navigation
- Removed SkillsGrid component and replaced it with a button that navigates to the Skills page.
- Improved layout with additional margin for better spacing in the Home component.
* Refactor SkillProvider and enhance memory bridge functionality
- Removed Gmail and Notion state synchronization functions from SkillProvider to streamline the component.
- Introduced a new memory bridge in the QuickJS library for skills to send memory payloads to the backend.
- Updated SkillContext to include an app handle for better integration with memory operations.
- Enhanced state management in the Rust backend to support memory insertion from skills.
* Enhance memory insertion functionality and update QuickJS integration
- Added support for additional parameters in the `store_skill_sync` method, including `source_type`, `metadata`, `priority`, `created_at`, `updated_at`, and `document_id`.
- Refactored the `memory_insert` operation to accept a structured input, improving validation and error handling for title and content.
- Updated the JavaScript memory bridge to simplify the insertion process by removing the provider parameter and directly using metadata.
- Enhanced logging for successful memory insertions to improve traceability.
* Update subproject reference in skills module
* Implement skill synchronization UI enhancements
- Introduced a new `skillsSyncUi.ts` module to manage synchronization UI state for skills.
- Updated `Skills.tsx` to utilize the new synchronization state, providing visual feedback during sync operations.
- Refactored sync handling in `SkillCard` to improve user experience with progress indicators and messages.
- Added unit tests for the synchronization UI state logic to ensure correct behavior across various scenarios.
- 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.
* Update Welcome page to integrate OAuth provider and adjust branding
- Added OAuthProviderButton to the Welcome component for Google authentication.
- Updated the branding from AlphaHuman to OpenHuman in the FeaturesStep component.
- Removed unnecessary Lottie animation from the Onboarding page for a cleaner layout.
- Changed the backend URL to point to the new API endpoint for TinyHumans.
* Refactor routing and sidebar components for improved clarity
- Commented out the Mnemonic route and related logic in AppRoutes for future consideration.
- Updated MiniSidebar to comment out the Invite Friends section.
- Removed unused navigation logic and upgrade call-to-action from the Home page.
- Adjusted Onboarding navigation to redirect to Home instead of Mnemonic.
* Comment out unused settings menu items for future consideration in SettingsHome component
* Add core process and RPC functionality for Alphahuman
- Introduced new binaries: `alphahuman-core` and `alphahuman-cli` for core process management and command-line interaction.
- Implemented `CoreProcessHandle` for managing the lifecycle of the core process.
- Added `core_rpc` module for handling RPC requests and responses.
- Created `core_server` module to manage core server logic and routing.
- Updated `alphahuman` commands to utilize the new RPC structure for health checks, security policies, and configuration management.
- Refactored existing code to streamline interactions with the core process and improve overall architecture.
* Update dependencies and enhance CLI functionality
- Added `clap` for command-line argument parsing in the `alphahuman-cli`.
- Updated `Cargo.lock` and `Cargo.toml` to include `clap` and its features.
- Refactored `alphahuman-cli` to utilize structured command handling with subcommands.
- Improved core process management and logging in `core_process.rs`.
- Enhanced routing and error handling in `core_server.rs` with new root and not found handlers.
- Updated various commands in `alphahuman.rs` to ensure core process is running before executing RPC calls.
* Enhance service management and CLI functionality
- Added new functions for daemon program arguments and command line construction in the service module.
- Updated macOS and Linux installation functions to dynamically generate program arguments and command lines.
- Introduced a new `Reinstall` command in the CLI for easier service management.
- Refactored service command handling to utilize local service functions for improved clarity and maintainability.
* Refactor daemon references to agent in components and hooks
- Updated terminology from "Daemon" to "Agent" in MiniSidebar, DaemonHealthPanel, and TauriCommandsPanel for consistency.
- Modified useDaemonHealth hook to probe agent status and handle agent lifecycle management.
- Introduced new agent server status interface and function in Tauri commands for improved status checking.
- Adjusted related comments and error handling to reflect the changes in terminology.
* Refactor Home component and enhance macOS service management
- Updated Home component to navigate to in-app conversations instead of opening a Telegram bot link.
- Improved macOS service management by implementing modern lifecycle commands and adding compatibility fallbacks for service control.
- Introduced new utility functions for handling macOS GUI domain and service targets.
* Refactor Home component to enhance navigation
- Removed SkillsGrid component and replaced it with a button that navigates to the Skills page.
- Improved layout with additional margin for better spacing in the Home component.
- Changed branding from AlphaHuman to OpenHuman across the application.
- Simplified Welcome component by removing unnecessary props and restructuring layout for improved clarity.
- Updated the footer message to reflect the new branding and removed versioning details.
- Enhanced user navigation by replacing the button with a link to the login page.
- Added `chat_send` and `chat_cancel` Tauri commands for backend-driven conversation loops.
- Moved agentic loop logic from frontend to Rust, optimizing performance and reducing frontend responsibilities.
- Implemented event protocol (`chat:tool_call`, `chat:tool_result`, `chat:done`, `chat:error`) to communicate loop progress to the frontend.
- Introduced AI config loading, OpenClaw context building, and cancellation support for chat requests.
- 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.
- Removed `injectAll`, `injectSoulIntoMessage`, and `injectToolsIntoMessage` along with their utilities.
- Added `injectOpenClawContext` as the new single context injection system.
- Updated context injection logic across Redux, APIs, and Tauri commands.
- Deleted SOUL and TOOLS injection code, aligning with the new OpenClaw approach.
- Deleted `ManagementModal` component and its associated state and handlers.
- Removed unused `updateToolsDocumentation` and `forceToolsCacheRefresh` logic.
- Simplified `Skills` page by eliminating unnecessary modal-related code.
- Removed `ManagementModal` handling and its associated state and logic.
- Updated click action in `SkillsGrid` to navigate to the `/skills` page.
- Adjusted overlay text to reflect the new navigation behavior.
- Added `Skills.tsx` to introduce a new page for managing skills.
- Integrated skill discovery, status visualization, and sorting logic.
- Enabled skill-specific actions like sync and setup modal handling.
- Improved management workflow through a dedicated `ManagementModal`.
- Removed unused skill-related logic, state management, and components.
- Updated page design to display a concise "coming soon" message.
- Added `/skills` route and sidebar link for future skill management.
- Added `devOnly` property to specific settings menu items.
- Ensured `mainMenuItems` filters out dev-only items unless `IS_DEV` is true.
- Improved user experience by hiding developer-specific settings in production.
Replaces scattered environment checks with the centralized `IS_DEV` constant from `config.ts`. This improves consistency and simplifies maintenance by reducing redundancy across multiple files.
- Introduced configurable `timeout` option in `ApiClient` to prevent long-hanging requests.
- Added safety timeout in `Conversations` to clear loading states in case of prolonged processing.
- Integrated timeouts for inference API and tool executions to handle unresponsive operations gracefully.
- Improved error handling for timeout scenarios with user-friendly error messages and state cleanup.
- Updated next.config.ts to pin Turbopack root to the app directory for better workspace management.
- Modified package.json scripts to use Webpack during development and build processes.
- Refactored postcss.config.mjs to set the base path for Tailwind CSS.
- Replaced CSS imports in globals.css with Tailwind directives for better styling management.
- Introduced RotatingTetrahedronCanvas component for dynamic visual effects on the Welcome page.
- Revamped Welcome page layout to include the new canvas and improve overall design and user engagement.
- 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.
Eliminated `build-tdlib-from-source.sh`, `download-tdlib.sh`, and the `TdLibManager` implementation, effectively removing local TDLib management. Transitioning away from local TDLib usage simplifies code and infrastructure by relying on alternative methods or prebuilt libraries.
- 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 function and parameter formatting for better readability and maintainability. Improved documentation clarity in `TOOLS.md` and ensured code consistency across files by aligning indentation and syntax styles.
- Add clearAllSkillsData() method to SkillManager for comprehensive data clearing
- Enhance nuclear reset to clear both frontend state and skills databases
- Update confirmation modal with detailed warning about data being deleted:
• App settings and conversations
• Email data from Gmail
• Chat history from Telegram
• Cached files from Notion
• All other skills data
- Improve loading feedback: "Clearing All Data..." during operation
- Update button text to "Log Out & Clear Everything" for clarity
- Add graceful error handling for skills clearing with fallback to basic reset
- Import skillManager in SettingsHome for skills data clearing integration
The enhanced nuclear reset now provides true comprehensive data clearing
that wipes both application state and skills databases (emails, chats,
cached files) for complete fresh start experience.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add "Log Out & Clear App Data" combined button in settings page
- Implement nuclear reset using window.location.href redirect for complete state clearing
- Fix incomplete data clearing where Redux state remained in memory after logout
- Remove manual Redux dispatching and navigation in favor of page redirect approach
- Clean up unused imports (clearToken, useAppDispatch, useNavigate)
- Add confirmation modal with amber warning styling and proper error handling
- Ensure skills connections (Gmail, Telegram, Notion) show as disconnected after clearing
- Use window.localStorage and window.sessionStorage for ESLint compliance
The nuclear reset approach guarantees complete application state reset by redirecting
to login page after clearing all storage, eliminating issues where skills remained
connected in UI despite data clearing operations.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix race condition where agent responses went to wrong threads when users switched conversations
- Add activeThreadId state to track which thread is currently sending/receiving messages
- Implement single active conversation pattern to prevent concurrent message sending
- Fix optimistic message persistence bug where user messages disappeared after conversation switch
- Replace optimistic messaging with immediate persistent storage for user messages
- Add clear UI feedback when other conversations are active with disabled inputs
- Ensure responses always go to original sending thread regardless of current selection
- Simplify addInferenceResponse logic by removing complex retroactive user message handling
- Add proper error handling for failed message sends with cleanup of persisted messages
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 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.