- Updated the subproject commit reference in the skills directory.
- Standardized quotation marks in the package-and-publish.yml workflow for consistency.
- Added token configuration for GitHub actions to enhance security.
* Update submodule URL for skills and refresh commit reference
- Changed the submodule URL for the "skills" repository to use SSH instead of HTTPS.
- Updated the subproject commit reference in the skills directory to the latest commit.
* Update subproject commit reference for skills to latest version b5d138f
* updated skills
* Update ping interval and refactor context usage in QjsSkillInstance
- Reduced the PING_INTERVAL from 60 seconds to 5 seconds for more frequent pings.
- Refactored the context parameter in lifecycle calls and message handling functions to use the runtime context, improving consistency and performance.
- Updated subproject commit reference for skills to the latest version.
- Simplified JSON formatting in `.mcp.json` for better readability.
- Updated API reference documentation for team management endpoints to use consistent JSON formatting.
- Enhanced code readability in various components by standardizing formatting and removing unnecessary line breaks.
- Improved user interface elements in TeamInvitesPanel and TeamManagementPanel for better clarity and consistency.
* Refactor import statement in store configuration for clarity
- Combined the import of `configureStore` and `Middleware` from '@reduxjs/toolkit' into a single line for improved readability.
* Add invite codes feature with onboarding step and dedicated page
Implement frontend for the invite codes system: users get 5 invite codes
to share, can redeem codes for free credits, and new users are prompted
during onboarding (step 1) to enter an invite code.
- Add invite types, API service, and Redux slice
- Add InviteCodeStep as first onboarding step (skip-able)
- Add /invites page with redeem input and code list with copy buttons
- Add "Invite Friends" nav item to sidebar
- Update UserReferral interface to match backend PR #418
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Update reqwest dependency to enable HTTP/2 support and switch to rustls TLS in network requests
- Modified Cargo.toml to include the "http2" feature for reqwest.
- Updated network request implementations in bridge and ops_net modules to use rustls TLS instead of native TLS for improved security and compatibility.
* Update event loop to handle async tool calls and improve message processing
- Introduced a `PendingToolCall` struct to manage in-flight async tool calls.
- Enhanced the event loop to check for completion of async tool calls and handle timeouts.
- Updated message handling to support async tool execution, allowing the event loop to process other messages concurrently.
- Refactored `handle_tool_call` to differentiate between synchronous and asynchronous tool results.
- Modified JavaScript fetch functions to use async/await for improved readability and performance.
* Enhance skill instance with initial ping verification and job driving
- Added an immediate ping to verify the connection health during skill execution, logging the result or any errors encountered.
- Updated the event loop to drive jobs asynchronously after the initial ping check.
- Removed unnecessary logging statements from the network operations for cleaner output.
* Update subproject commit reference in skills directory
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* chore: bump version to 0.34.0 [skip ci]
* chore: bump version to 0.35.0 [skip ci]
* 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
* chore: bump version to 0.36.0 [skip ci]
* chore: bump version to 0.37.0 [skip ci]
* 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>
---------
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
* chore: bump version to 0.34.0 [skip ci]
* chore: bump version to 0.35.0 [skip ci]
* 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
* chore: bump version to 0.36.0 [skip ci]
* feat: implement complete team management flow with role-based access control
- Add comprehensive team management system with proper role handling
- Create TeamManagementPanel for team-specific management hub
- Fix role case sensitivity issues (API returns lowercase, UI expects uppercase)
- Implement proper team context routing for members and invites panels
- Add teams API reference documentation for development reference
- Update navigation hooks to support team management routing
- Apply consistent max-w-md width constraints across all team panels
- Support team switching, creation, joining, and leaving functionality
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: resolve role dropdown case sensitivity issue in TeamMembersPanel
- Fix dropdown showing incorrect default role due to case mismatch
- API returns lowercase roles ("admin", "member") but UI expects uppercase
- Normalize member.role to uppercase in dropdown value and badge display
- Ensures dropdown correctly shows actual member role instead of defaulting to first option
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: correct navigation flow from team management members/invites back to team management
- Fix route detection to prioritize team management paths over regular team paths
- Ensure back button from /team/manage/{id}/members goes to /team/manage/{id} instead of /team
- Ensure back button from /team/manage/{id}/invites goes to /team/manage/{id} instead of /team
- Replace unreliable document.referrer with proper URL path pattern matching
- Add proper hierarchical navigation for team management flow
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add loading states for team members and invites pages
- Add separate loading states (isLoadingMembers, isLoadingInvites) to team slice
- Display spinner with "Loading members..." message while fetching team members
- Display spinner with "Loading invites..." message while fetching team invites
- Hide member count and show loading UI during fetch operations
- Improve user experience by providing visual feedback during API calls
- Ensure proper loading state management in Redux reducers
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* improve: enhance loading UX for team members and invites
- Show existing data during refresh instead of hiding everything
- Add subtle "Refreshing members..." indicator when data exists
- Add subtle "Refreshing invites..." indicator when data exists
- Only show full loading screen when no existing data (first load)
- Use amber color for refresh indicators to distinguish from main loading
- Maintain member/invite count visibility during refresh operations
- Significantly better user experience with non-blocking refresh states
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: implement complete team edit and delete functionality
- Add Team Settings button with modal to edit team name using updateTeam() API
- Add Delete Team button with confirmation modal using deleteTeam() API
- Prevent deletion of personal teams (safety check)
- Include proper error handling with user-friendly messages
- Add loading states for update/delete operations
- Modal overlays with proper styling and responsive design
- Navigate back to teams list after successful deletion
- Refresh teams data after successful name update
- Complete the remaining team management API integrations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add confirmation modals for all critical team management actions
- Add confirmation modal for removing team members with impact explanation
- Add confirmation modal for changing member roles with permission details
- Add confirmation modal for revoking invite codes with validation info
- Include specific warnings for admin role changes (granting/removing admin rights)
- Display invite codes in confirmation modal for clarity
- Maintain loading states during confirmation flow
- Enhance user safety by preventing accidental critical actions
- Follow consistent modal design patterns across all confirmations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add visual indicators for used/expired invite codes
- Add status detection for expired and used up invites
- Implement visual styling with reduced opacity for inactive invites
- Add status badges (Expired/Used Up) next to invite codes
- Disable copy button for inactive invites with visual feedback
- Restrict revoke button to active invites only
- Improve invite code styling based on status
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: add confirmation modal for leaving teams
- Add confirmation modal for team leave action matching other critical actions
- Update handleLeaveTeam to show confirmation instead of immediate action
- Add new confirmLeaveTeam function for actual leave operation
- Include loading states and proper error handling in leave button
- Show warning about losing access and needing new invite to rejoin
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
---------
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
- Updated quotation marks in the package-and-publish.yml workflow for consistency.
- Removed the 'develop' branch from the pull_request section in package-android.yml to streamline the workflow configuration.
- Updated the subproject commit reference in the skills directory.
- Modified the build workflow to enable submodule fetching.
- Standardized quotation styles in the package-and-publish workflow for consistency.
- Refactored the `setSkillOAuthCredential` function for improved readability.
- Added an attribute to the `Error` variant in the `SkillMessage` enum to suppress warnings for unused code.
* Refactor BillingPanel to use updated user usage structure
- Changed the usage data source in BillingPanel from activeTeam to user, aligning with the new IUserUsage interface.
- Updated the display of token usage percentage and progress bar to reflect the new usage metrics (spentThisCycleUsd and cycleBudgetUsd).
- Cleaned up commented-out code and improved layout for better readability and user experience.
* Add skill ping/health-check system for connection monitoring
Periodic (5-min) onPing() calls verify skill service connections are
healthy. Auth errors stop the skill; network errors update connection
status while keeping the skill running for retry. Skills without onPing
are treated as healthy (backward compatible).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Move skill ping/health-check from frontend to Rust backend
The frontend ping loop only runs while React is active, but the Rust
backend keeps skills running independently. This adds a PingScheduler
(modeled after CronScheduler) that pings all running skills every 5
minutes from a background Tokio task and acts on auth/network failures.
The redundant frontend ping loop is removed since SkillProvider already
listens for the Tauri events the Rust scheduler emits.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Refactor package-and-publish workflow for consistency
Updated formatting in the package-and-publish.yml file to use consistent quotation styles for strings. Removed unnecessary branch entry from the pull_request section to streamline the workflow configuration.
* Update logging configuration and adjust ping interval for improved performance
- Enhanced logging setup in `lib.rs` to allow customizable verbosity and color-coded output based on log levels and tags.
- Reduced ping interval in `ping_scheduler.rs` from 5 minutes to 1 minute for more frequent health checks on skills.
- Added functionality to suppress TDLib's native C++ logs based on environment variable settings in `manager.rs`.
* Update subproject commit reference in skills directory and remove logging from get_session_token function for improved security
* Enhance error handling in skill message processing
- Added a new `Error` variant to the `SkillMessage` enum to notify skills of errors from async operations, including error type, message, source, and recoverability.
- Updated the `handle_message` function to handle `SkillMessage::Error`, invoking the `onError` JavaScript handler and logging any failures in the handler execution.
- Updated subproject commit reference in the skills directory.
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Added a new `Error` variant to the `SkillMessage` enum to notify skills of errors from async operations, including error type, message, source, and recoverability.
- Updated the `handle_message` function to handle `SkillMessage::Error`, invoking the `onError` JavaScript handler and logging any failures in the handler execution.
- Updated subproject commit reference in the skills directory.
- 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.
- Enhanced logging setup in `lib.rs` to allow customizable verbosity and color-coded output based on log levels and tags.
- Reduced ping interval in `ping_scheduler.rs` from 5 minutes to 1 minute for more frequent health checks on skills.
- Added functionality to suppress TDLib's native C++ logs based on environment variable settings in `manager.rs`.
* Refactor BillingPanel to use updated user usage structure
- Changed the usage data source in BillingPanel from activeTeam to user, aligning with the new IUserUsage interface.
- Updated the display of token usage percentage and progress bar to reflect the new usage metrics (spentThisCycleUsd and cycleBudgetUsd).
- Cleaned up commented-out code and improved layout for better readability and user experience.
* Add architecture documentation for AlphaHuman platform
- Introduced a comprehensive `ARCHITECTURE.md` file detailing the architecture of AlphaHuman, an AI-powered assistant for crypto communities.
- Documented platform reach, high-level architecture, performance metrics, real-time socket infrastructure, and skills runtime engine.
- Highlighted the advantages of using Tauri and Rust over Electron for performance and security.
- Included diagrams to illustrate the architecture and socket communication flow.
Updated subproject commit reference in the skills directory.
Updated formatting in the package-and-publish.yml file to use consistent quotation styles for strings. Removed unnecessary branch entry from the pull_request section to streamline the workflow configuration.
The frontend ping loop only runs while React is active, but the Rust
backend keeps skills running independently. This adds a PingScheduler
(modeled after CronScheduler) that pings all running skills every 5
minutes from a background Tokio task and acts on auth/network failures.
The redundant frontend ping loop is removed since SkillProvider already
listens for the Tauri events the Rust scheduler emits.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Periodic (5-min) onPing() calls verify skill service connections are
healthy. Auth errors stop the skill; network errors update connection
status while keeping the skill running for retry. Skills without onPing
are treated as healthy (backward compatible).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Refactor BillingPanel to use updated user usage structure
- Changed the usage data source in BillingPanel from activeTeam to user, aligning with the new IUserUsage interface.
- Updated the display of token usage percentage and progress bar to reflect the new usage metrics (spentThisCycleUsd and cycleBudgetUsd).
- Cleaned up commented-out code and improved layout for better readability and user experience.
* Enhance skill synchronization and connection status management
- Exported `deriveConnectionStatus` function from hooks for better accessibility.
- Introduced `syncToolsToBackend` function to synchronize tool states with the backend, ensuring up-to-date connection status.
- Integrated `syncToolsToBackend` calls in `SkillManager` lifecycle methods and socket connection events to maintain consistent state across the application.
- Added new `sync.ts` file to encapsulate synchronization logic, improving code organization and maintainability.
* Add Rust-side tool:sync emission and document dual socket codebase
Implement tool:sync on the Rust side so desktop/mobile apps emit skill
state to the backend natively, without relying on the frontend WebView.
- SocketManager: add sync_tools() method, derive_connection_status()
helper, and sync_tools_via_channel() for event handler context
- SocketManager: emit tool:sync on "ready" (connect/reconnect)
- RuntimeEngine: store SocketManager reference, call sync_tools after
start_skill, stop_skill, and auto_start_skills
- lib.rs: wire SocketManager into RuntimeEngine during setup
- CLAUDE.md: add Dual Socket Codebase pattern noting that any socket
event change must be implemented in both TypeScript and Rust
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Refactor BillingPanel to use updated user usage structure
- Changed the usage data source in BillingPanel from activeTeam to user, aligning with the new IUserUsage interface.
- Updated the display of token usage percentage and progress bar to reflect the new usage metrics (spentThisCycleUsd and cycleBudgetUsd).
- Cleaned up commented-out code and improved layout for better readability and user experience.
* Update OAuth credential handling in SkillManager and related state management
- Introduced `setSkillOAuthCredential` action to manage OAuth credentials in the Redux store.
- Enhanced `SkillManager` to persist and restore OAuth credentials during skill setup and disconnection.
- Updated `SkillState` interface to include `oauthCredential` for better state management.
- Refactored related components to ensure seamless integration of OAuth handling.
- Updated subproject commit reference in the skills directory.
* Update connection indicator messages and enhance OAuth credential handling
- Changed the default description in the ConnectionIndicator component to refer to "Your device" instead of "Your browser."
- Removed hardcoded connection indicator in GetStartedStep to use the updated description.
- Improved OAuth credential management by restoring persisted credentials on startup and ensuring they are cleared from the store when revoked.
- Updated HTTP client configuration to use native TLS for better compatibility across platforms.
- Cleaned up Cargo.lock and Cargo.toml by removing unused dependencies and ensuring proper feature flags for reqwest.
* Enhance OAuth credential management in QjsSkillInstance
- Removed redundant comment regarding OAuth credential restoration.
- Implemented lazy-loading of persisted OAuth credentials before tool calls.
- Cleared OAuth credentials from memory upon skill stop and marked as disconnected in the store.
- Updated comments for clarity on credential handling during OAuth operations.
* Refactor JWT token retrieval to use session token method
- Updated the JWT token retrieval in multiple functions to utilize the new `get_session_token` method from `__ops`, enhancing security and consistency in token management.
- Added the `get_session_token` function to the operations core for improved session handling.
* update bootstrap
* Add middleware to sync JWT token with Rust SESSION_SERVICE
- Introduced `syncTokenToRust` middleware to synchronize the JWT token with the Rust SESSION_SERVICE whenever the `setToken` action is dispatched or the auth state is rehydrated.
- Enhanced the `get_session_token` function in Rust to log the retrieved token for better debugging and monitoring.
- Updated Redux store configuration to include the new middleware, improving token management and security.
* update skills
* Update subproject commit reference in skills directory to indicate a dirty state
* Remove unused ConnectionIndicator import from GetStartedStep component
- Changed the usage data source in BillingPanel from activeTeam to user, aligning with the new IUserUsage interface.
- Updated the display of token usage percentage and progress bar to reflect the new usage metrics (spentThisCycleUsd and cycleBudgetUsd).
- Cleaned up commented-out code and improved layout for better readability and user experience.