Commit Graph
9 Commits
Author SHA1 Message Date
e23b3643bd Add invite codes feature (#94)
* 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>
2026-02-10 22:28:54 +05:30
6df6877b96 Add skill ping/health-check system (#85)
* 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>
2026-02-10 16:24:47 +05:30
Steven EnamakelandGitHub 4be6693599 Fix OAuth credential lifecycle and JWT token sync for skills (#82)
* 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
2026-02-10 01:25:14 +05:30
Steven Enamakel ab9e7b7a0f Refactor code for improved readability and functionality
- Simplified error handling in `useModelStatus` and `ModelProvider` by consolidating dispatch calls.
- Streamlined greeting array initialization in `Welcome` component for better readability.
- Enhanced `SkillProvider` to listen for skill state changes and dispatch updates accordingly.
- Updated Rust backend to sync published state and emit events for skill state changes.
- Introduced a `dirty` flag in `SkillState` to track modifications for efficient state management.
2026-02-09 09:37:10 +05:30
Steven Enamakel af15c7c8e1 Enhance SkillsGrid and Manifest Handling
- Added `ignoreInProduction` property to `SkillListEntry` and updated processing logic to filter skills based on the `IS_DEV` flag.
- Updated Rust structures in the Tauri backend to include `ignoreInProduction` in the skill manifest.
- Refactored desktop deep link listener to remove unnecessary `IS_DEV` checks.
- Improved JSON serialization handling in QuickJS skill instance.
2026-02-09 09:07:51 +05:30
Steven Enamakel 890b20e876 Refactor to QuickJS Integration and Update Documentation
- Replaced TDLib references with QuickJS in the CLAUDE.md documentation.
- Updated service paths and imports in the Rust codebase to reflect the transition to QuickJS.
- Added a new bootstrap.js file for QuickJS runtime, providing necessary browser-like API shims.
- Enhanced the TODO list with tasks for allowing bundling of unverified skills and coding new skills independently.
- Introduced a new storage layer for IndexedDB emulation and updated related operations for QuickJS compatibility.
2026-02-06 11:24:57 +05:30
Steven Enamakel 3f6431f457 Enhance SkillSetupWizard and SkillManager for OAuth-only skills
- Updated SkillSetupWizard to handle cases where no setup steps are returned, indicating an OAuth-only skill.
- Modified SkillManager's startSetup method to return null for skills that do not implement setup/start.
- Enhanced SkillRuntime's setupStart method to return null if no setup step is available, improving error handling.
- Updated SkillProvider to include OAuth configuration details in skill discovery.
2026-02-06 06:06:39 +05:30
Steven Enamakel 65d42f2526 Implement OAuth flow in SkillSetupWizard and enhance skill manager
- Added support for OAuth in the SkillSetupWizard, allowing skills to handle OAuth login and state management.
- Introduced new OAuthLoginView component for user interaction during OAuth processes.
- Updated SkillManager to notify skills of successful OAuth completion and manage OAuth credentials.
- Enhanced deep link handling to support OAuth success and error states.
- Modified SkillManifest to include OAuth configuration details.
- Updated runtime and backend to accommodate OAuth functionality, ensuring skills can utilize OAuth for authentication.
2026-02-06 05:48:10 +05:30
Steven EnamakelandGitHub ceb03fb2bc Fix/prod build (#51)
* chore: add CI secrets management and local testing script

- Added ci-secrets.example.json to provide a template for CI secrets configuration.
- Introduced test-ci-local.sh script to facilitate local testing of the package-and-publish workflow using act.
- Updated .gitignore to exclude the actual ci-secrets.json file containing sensitive tokens.

* chore: enhance local testing and environment loading scripts

- Added scripts to load environment variables from .env and JSON files, improving local development setup.
- Introduced ci-event.json to simulate GitHub event payloads for local CI testing.
- Updated test-ci-local.sh to utilize the new event JSON for better integration with local testing workflows.
- Modified .gitignore to include ci-secrets.local.json for local secret management.

* chore: enhance environment loading and improve V8 memory management

- Updated load-env.sh to conditionally load ci-secrets.local.json and set APPLE_PASSWORD for notarization.
- Introduced a delay in auto-starting skills to prevent memory spikes during initialization.
- Adjusted V8 runtime memory settings to minimize initial heap allocation, reducing the risk of OOM errors.

* chore: update version bump workflow to modify tauri.conf.json

- Changed the version update process to reflect changes in tauri.conf.json instead of Cargo.toml.
- Adjusted the commit message to indicate the inclusion of tauri.conf.json in the version bump process.

* chore: migrate from V8 to QuickJS runtime and update related configurations

- Replaced V8 runtime references with QuickJS throughout the codebase, including updates to initialization and error handling.
- Modified package.json to change the build command for macOS to source environment variables correctly.
- Updated Cargo.toml to remove deno_core dependency and include rquickjs with appropriate features.
- Cleaned up unused V8-related code and comments in the runtime modules.
- Adjusted skill manifest checks to support QuickJS compatibility.

* refactor: implement QuickJS runtime and remove V8 references

- Replaced V8 engine with QuickJS in the runtime module, updating related imports and initialization logic.
- Introduced new `qjs_engine.rs` and `qjs_skill_instance.rs` files to handle QuickJS-specific functionality.
- Removed the deprecated `v8_skill_instance.rs` and associated V8-related code.
- Updated JavaScript bootstrap code to align with QuickJS operations and APIs.
- Adjusted documentation and comments to reflect the transition to QuickJS.

* refactor: update IdbStorage to use parking_lot::Mutex for improved concurrency

- Changed the connection management in IdbStorage from RwLock to parking_lot::Mutex for better performance.
- Updated related methods to reflect the new locking mechanism, enhancing the efficiency of database operations.
- Adjusted the IdbOpenResult struct to include serde::Serialize for potential serialization needs.

* refactor: update QuickJS skill instance and timer management

- Modified memory limit and stack size settings in QjsSkillInstance to be asynchronous, improving performance.
- Cleaned up imports in qjs_ops.rs by removing unused dependencies and enhancing function definitions for clarity.
- Refactored timer management functions for better readability and efficiency, including renaming and restructuring comments.

* chore: update package.json scripts and clean up build.rs

- Added a new script for running the Tauri app with environment variable loading.
- Simplified the macOS development command to use a dedicated build script.
- Removed unnecessary environment variable logging from build.rs to streamline the build process.
- Cleaned up commented-out sections in the GitHub Actions workflow for Android packaging.
2026-02-05 19:29:21 +05:30