Add tiered model presets (Low/Medium/High) with device-aware recommendations
so users can pick a local AI model that fits their machine without editing
raw JSON config. Detect RAM, CPU, GPU via sysinfo crate and recommend a tier.
Persist selection to config.toml, with env var override and graceful
degradation hints on bootstrap failure.
- Rust: presets.rs (tier definitions, recommendation logic), device.rs
(hardware detection), 3 new RPC methods, env var override, bootstrap hints
- Frontend: tier selector UI in Settings > Local AI Model with device info,
loading/error states, and "Advanced" toggle for existing controls
- Tests: 7 Rust unit tests + comprehensive JSON-RPC E2E test
- Also fixes pre-existing lint warning in SkillSetupWizard.tsx
Closes#80
- Centralize all VITE_* env var reads in app/src/utils/config.ts (SENTRY_DSN, BACKEND_URL, DEV_JWT_TOKEN)
- Update consumers (analytics.ts, backendUrl.ts, store/index.ts) to import from config.ts
- Add TypeScript type declarations for ImportMetaEnv in vite-env.d.ts
- Remove dead import.meta.env.OPENHUMAN_CORE_RPC_URL fallback (non-VITE prefix, never exposed by Vite)
- Remove unused TELEGRAM_BOT_USERNAME/TELEGRAM_BOT_ID from test mocks
- Create .env.example (root) documenting ~30 Rust/Tauri env vars with [required]/[optional] tags
- Create app/.env.example documenting 6 frontend VITE_* vars
- Add Configuration section to CLAUDE.md
Closes#61
- Updated the signing workflow to sign non-main binaries (sidecars) before the main .app bundle, improving compliance with Apple notarization requirements.
- Added diagnostic output to display the main executable name and list contents of the app bundle for better visibility during the signing process.
- Improved comments for clarity on the new signing steps and their significance in the overall workflow.
- Changed the default binary name from "openhuman" to "openhuman-core" in Cargo.toml and related scripts.
- Updated build and test workflows to reference the new binary name, ensuring consistency across the project.
- Adjusted paths and executable checks in the codebase to accommodate the renamed binary, improving clarity and maintainability.
- Updated the re-signing workflow to focus on signing sidecar binaries and frameworks with hardened runtime, ensuring compliance with Apple notarization requirements.
- Enhanced diagnostic output for better visibility during the signing process, including verification of sidecar binaries.
- Improved comments for clarity on the signing steps and their significance in the overall workflow.
- Bumped version to 0.49.30 in Cargo.lock to reflect changes.
* refactor(skills): migrate to registry-based skill management and update state handling
- Replaced Redux-based skill state management with hooks for improved performance, utilizing `useAvailableSkills`, `useSkillSnapshot`, and `useAllSkillSnapshots`.
- Streamlined skill list derivation and sorting logic to enhance clarity and maintainability.
- Updated components to reflect the new state management approach, ensuring real-time updates and compatibility with existing code.
- Bumped OpenHuman version to 0.49.24 in Cargo.lock.
* refactor(skills): update skill state handling and remove Redux dependencies
- Simplified skill state management by replacing Redux-based logic with direct references to runtime maps.
- Adjusted the SkillsGrid component to derive skill sync summary text without relying on skill states.
- Removed unused Redux configurations and tests related to skills, streamlining the codebase.
* fix(skills): make notifyOAuthComplete resilient when no local runtime
notifyOAuthComplete and triggerSync no longer throw when the frontend
SkillManager has no local runtime instance. They persist setup_complete
via RPC first, then try core RPC pass-through as fallback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(skills): clean up imports and improve configuration handling
- Consolidated import statements in the SkillsGrid component for better readability.
- Updated the DEV_FORCE_ONBOARDING constant in the config file to enhance clarity and maintainability by combining conditions into a single line.
* feat(skills): add SkillDebugModal for runtime skill inspection
- Introduced SkillDebugModal component to inspect a skill's runtime state, including metadata, published state, and tool definitions.
- Integrated the modal into the SkillCard component, allowing users to open it for debugging purposes.
- Implemented functionality for calling tools and displaying results, enhancing the debugging experience for skills.
* feat(skills): enhance OAuth deep link handling and skill management
- Improved the OAuth deep link process by adding steps to persist setup completion, start the skill in the core runtime, and notify the skill of OAuth completion.
- Enhanced error handling for starting skills and notifying OAuth completion, ensuring resilience in the skill management workflow.
- Updated logging throughout the process to provide better insights into the state and actions taken during OAuth handling and tool calls.
* chore(build): update Tauri configuration and add macOS build script
- Disabled the creation of updater artifacts in the Tauri configuration to streamline the build process.
- Introduced a new script for building and code-signing macOS Tauri releases, including notarization steps and environment variable validation.
- Updated environment loading logic to source from the correct secrets file for improved configuration management.
* feat(build): add pre-signing for sidecar binaries in macOS build script
- Implemented pre-signing of sidecar binaries with hardened runtime and entitlements to comply with Apple notarization requirements.
- Enhanced the build script to verify and sign all executables in the specified sidecar directory, ensuring proper code-signing before the build process.
* feat(build): implement pre-signing for sidecar binaries in macOS build script
- Added functionality to pre-sign sidecar binaries with hardened runtime and entitlements to meet Apple notarization requirements.
- Enhanced the build script to verify and sign all executables in the specified sidecar directory, ensuring compliance before the build process.
* feat(build): enhance macOS build process with notarization and sidecar re-signing
- Added a new step to the release workflow for re-signing sidecar binaries with hardened runtime and notarization after the build process.
- Updated the build script to remove pre-signing of sidecar binaries, ensuring notarization is handled separately for compliance with Apple requirements.
- Improved the overall build process by verifying and re-signing all executables within the .app bundle, including frameworks and resources, before notarization.
- Implemented DMG re-packaging after notarization to ensure the latest signed application is included in the distribution.
* refactor(capture): consolidate import statements for AppContext and WindowBounds
- Combined separate import statements for AppContext and WindowBounds into a single line for improved readability and organization in the capture module.
* refactor(logging): improve log formatting for better readability
- Updated log statements in various files to use multi-line formatting for improved clarity and consistency.
- Enhanced the SkillDebugModal and event loop logging to streamline the output and make it easier to read.
- Refactored log messages in js_handlers and ops_net to maintain uniformity in logging style.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(tauriCommands): streamline RPC method calls for skill management
- Simplified the syntax of RPC method calls in the `tauriCommands.ts` file by removing unnecessary line breaks, enhancing code readability.
- Updated descriptions in the `schemas.rs` file to maintain consistent formatting for RPC method descriptions, improving documentation clarity.
* chore(release): bump OpenHuman version to 0.49.23 in Cargo.lock
* feat(skills): add skill status management in desktopDeepLinkListener
- Introduced a new action `setSkillStatus` to manage the skill's connection status.
- Updated the OAuth deep link handling to dispatch the skill status as 'ready' upon successful connection, improving state management for skills.
* feat(screen_intelligence): implement capture mode for screenshots
- Added a `CaptureMode` enum to differentiate between windowed and fullscreen screenshot captures.
- Enhanced the `capture_screen_image_ref_for_context` function to determine capture mode based on window bounds, with fallback to fullscreen.
- Implemented logic to downscale screenshots exceeding size limits when captured in fullscreen mode.
- Introduced a new `parse_foreground_output` function to parse application context from AppleScript output, improving context retrieval for screenshots.
* chore(build): update Tauri configuration to remove updater artifacts creation
- Modified the TAURI_CONFIG_OVERRIDE to exclude the creation of updater artifacts during the build process, streamlining the build workflow.
* feat(accessibility): enhance accessibility state and add capture test functionality
- Introduced new properties `captureTestResult` and `isCaptureTestRunning` to the `AccessibilityState` interface for managing capture test states.
- Added `CaptureTestResult` and `CaptureTestContextInfo` interfaces to define the structure of capture test results.
- Implemented `openhumanScreenIntelligenceCaptureTest` function to initiate screen intelligence capture tests, improving accessibility features.
* feat(debug): add Screen Intelligence Debug Panel for enhanced diagnostics
- Introduced a new `ScreenIntelligenceDebugPanel` component to display accessibility status, session information, and capture test results.
- Integrated the debug panel into the existing `ScreenIntelligencePanel`, allowing users to expand and collapse the debug section.
- Updated accessibility state management to include `captureTestResult` and `isCaptureTestRunning` for improved testing feedback.
- Enhanced test setup to accommodate new debug functionalities.
* feat(screen_intelligence): implement custom hook for screen intelligence items
- Added `useScreenIntelligenceItems` hook to fetch and manage screen intelligence items from the accessibility state.
- Integrated the hook into the `Intelligence` component, combining items from both memory and screen intelligence sources.
- Enhanced loading state management to reflect the combined loading status of both data sources.
* test(screen_intelligence): add unit tests for useScreenIntelligenceItems mapping and confidenceToPriority functions
- Introduced tests for the mapping logic of AccessibilityVisionSummary to ActionableItem, ensuring correct transformation of properties.
- Added tests for confidenceToPriority function to validate priority assignment based on confidence levels.
- Included edge cases such as handling empty arrays, null app names, and long actionable notes truncation.
* feat(mnemonic): update mnemonic handling to support variable word counts
- Refactored mnemonic import logic to accommodate BIP39 phrase lengths (12, 15, 18, 21, 24 words).
- Updated state initialization and validation to dynamically adjust based on the allowed word counts.
- Enhanced user prompts to reflect the new word count options for recovery phrases.
- Adjusted focus handling for input fields to improve user experience during phrase entry.
* refactor(skills): migrate skill state management to RPC-based hooks
- Replaced Redux-based skill state management with RPC-backed hooks for improved performance and reactivity.
- Introduced `useSkillSnapshot` and `useAllSkillSnapshots` hooks to fetch skill states directly from the Rust core.
- Updated components to utilize the new hooks, enhancing the overall architecture and reducing dependency on Redux.
- Added event listeners to trigger state updates in response to skill state changes, ensuring real-time updates across the application.
* fix(lint): merge duplicate tauriCommands import in accessibilitySlice test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(tests): remove eslint-disable comment from screen intelligence E2E test file
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replaced direct Tauri invocations with a unified `callCoreRpc` function for skill management operations, enhancing code consistency and maintainability.
- Updated functions for listing, discovering, starting, stopping, and managing skill data to utilize the new RPC schema.
- Added new RPC handlers for skill discovery, listing, data reading, writing, enabling, disabling, and checking if a skill is enabled, expanding the skills management capabilities.
- Enhanced the SkillManifest struct to support serialization, improving data handling for skill manifests.
- Introduced a new entitlements file for the sidecar to enhance security during code signing.
- Updated the GitHub Actions workflow to utilize the entitlements file in the signing process.
- Bumped OpenHuman version to 0.49.21 in Cargo.lock for dependency management.
- Configured tauri.conf.json to reference the new entitlements file for macOS builds.
- Added `openssl-sys` and `openssl-src` dependencies in Cargo.toml and Cargo.lock for enhanced cryptographic support.
- Updated `tauri.conf.json` to streamline build targets by removing the updater option, simplifying the configuration.
* docs: design document for openhuman REPL / interactive shell (#92)
Design-first writeup covering problem statement, UX sketch with example
sessions (skills + non-skill flows), architecture showing how the REPL
reuses existing invoke_method/controller registry/RuntimeEngine without
duplicating logic, safety rules for secret redaction, and phased
implementation milestones (MVP → skills commands → script/batch mode).
Closes#92
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: update dependencies and enhance onboarding logic
- Updated Cargo.lock and Cargo.toml to include new dependencies: `clipboard-win`, `endian-type`, `error-code`, `fd-lock`, `home`, `nibble_vec`, `radix_trie`, `rustyline`, and `unicode-segmentation`.
- Enhanced the OnboardingOverlay component to wait for user profile loading before checking onboarding status, improving user experience during onboarding.
- Adjusted dependency versions and added features for `rustyline` in Cargo.toml.
* feat(repl): implement interactive REPL for OpenHuman core
- Added a new REPL module to provide an interactive shell for users, allowing command execution and evaluation.
- Integrated REPL functionality into the CLI, enabling commands like `openhuman repl` and support for options such as `--eval` and `--batch`.
- Enhanced command parsing and execution flow to maintain consistency with existing JSON-RPC server logic, ensuring no duplication of functionality.
- Updated CLI help documentation to include REPL usage instructions.
- Introduced Apple certificate import and code signing steps in the GitHub Actions workflow for macOS, enhancing sidecar security.
This commit lays the groundwork for a more interactive user experience and strengthens the security of the sidecar binary.
* refactor(repl): remove tool_warning_shown field from ReplState
- Eliminated the `tool_warning_shown` boolean field from the `ReplState` struct, simplifying the state management within the REPL module.
- Updated the constructor to reflect the removal of this field, ensuring consistency in the initialization of `ReplState`.
* refactor(build): simplify Tauri build command in workflow
- Removed unnecessary parameters from the Tauri build command in the GitHub Actions workflow, streamlining the build process.
- Improved readability of the build configuration by eliminating redundant options.
* chore(tauri): update build targets in tauri.conf.json
- Changed the build targets from a single string to an array, specifying individual target formats for improved clarity and flexibility in the build process.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(telegram): implement Telegram channel and attachment handling
- Added `TelegramChannel` struct for managing Telegram Bot API interactions, including user management and message handling.
- Introduced attachment parsing with `TelegramAttachment` and `TelegramAttachmentKind` to support various media types.
- Implemented functions for parsing attachment markers and validating URLs, enhancing message processing capabilities.
- Created a new module structure for Telegram, including `attachments`, `channel`, and `text` for better organization and maintainability.
* feat(skills): implement skills registry management and E2E testing
- Added functionality for fetching, searching, installing, and uninstalling skills from a remote registry.
- Introduced new modules for registry operations and types, enhancing the skills management system.
- Implemented E2E tests for skills registry interactions, ensuring robust functionality and integration.
- Updated documentation to reflect new skills registry features and usage instructions.
* refactor(coreRpcClient): remove socket RPC handling and streamline HTTP request logging
- Eliminated socket-based RPC handling to simplify the core RPC client logic.
- Updated logging to use a unified debug logger for both HTTP requests and errors.
- Improved error handling for HTTP responses to ensure clarity in error reporting.
* feat(skills): enhance skill setup handling and improve error management
- Updated SkillActionButton to directly open the setup modal for skills requiring OAuth, bypassing the QuickJS runtime.
- Enhanced SkillSetupWizard to handle OAuth configuration more effectively, ensuring smoother transitions during skill setup.
- Improved error handling during skill startup and setup processes, providing clearer logging for failures.
- Refactored skills loading logic in the Skills page to prioritize registry-based skill fetching, with fallback to runtime discovery.
- Added skill installation handling in the Skills page, allowing for better user feedback during installation processes.
* feat(deep-link): enhance OAuth handling and streamline token management
- Updated desktopDeepLinkListener to improve skill connection handling after OAuth completion.
- Introduced setSkillSetupComplete action to mark skills as connected immediately post-OAuth.
- Refactored token fetching logic to ensure encrypted tokens are stored correctly, enhancing error handling and reducing redundant checks.
- Added new permissions in default.json for improved window management capabilities.
* feat(skills): enhance skill management with global engine and runtime controllers
- Added global engine management for skill runtime access, allowing RPC handlers to interact with the runtime engine.
- Introduced new runtime controllers for skills, including start, stop, status, setup_start, list_tools, sync, and call_tool, enhancing skill lifecycle management.
- Updated schemas to include new skill controller functionalities, improving the overall skills management system.
- Enhanced documentation and comments for clarity on new features and usage.
* refactor(skills): update global engine management and enhance documentation
- Replaced OnceLock with RwLock for the global RuntimeEngine, allowing for better testability and flexibility in engine management.
- Updated the global_engine and require_engine functions to return cloned Arc references, improving usability.
- Enhanced documentation comments for clarity on the global engine's usage and behavior in production and testing scenarios.
* chore(todos): update TODO list with removal of Tauri from Rust core
- Added a new item to the TODO list indicating the need to remove Tauri from the OpenHuman Rust core, streamlining the project structure.
* feat(onboarding): revamp onboarding steps and introduce local AI model consent
- Replaced the PrivacyStep with a new ScreenPermissionsStep to handle accessibility permissions.
- Added LocalAIStep for user consent on local AI model usage and download initiation.
- Introduced SkillsStep and ToolsStep for selecting skills and enabling tools during onboarding.
- Updated onboarding state management to include local model consent, download status, and enabled tools.
- Enhanced the overall onboarding flow with new components and improved user experience.
* feat(onboarding): enhance onboarding flow with new WelcomeStep and updated LocalAIStep
- Introduced a new WelcomeStep to guide users through the onboarding process.
- Updated LocalAIStep to clarify local AI model usage and consent, including improved messaging on privacy and resource impact.
- Enhanced ScreenPermissionsStep to emphasize local processing of accessibility data.
- Adjusted total steps in onboarding to reflect the addition of the WelcomeStep, improving user experience.
* refactor(tray): remove tray integration and related functionalities
- Deleted the tray module and its associated operations, streamlining the project structure.
- Removed references to Tauri app handle in various components, transitioning to a memory client for skill data persistence.
- Updated skill instances and event loops to eliminate dependencies on tray functionalities, enhancing modularity.
- Improved documentation to reflect the removal of tray-related features and clarify the new architecture.
* feat(onboarding): introduce OnboardingOverlay and enhance onboarding flow
- Added OnboardingOverlay component to display the onboarding process as a full-screen overlay when the user is not onboarded.
- Updated the Onboarding component to include a new MnemonicStep for recovery phrase management.
- Enhanced onboarding state management to track workspace onboarding flags and user onboarding status.
- Refactored AppRoutes to streamline routing and integrate the new onboarding flow.
- Removed deprecated onboarding logic from previous steps, improving overall user experience.
* refactor(sidebar): simplify hidden paths and update ProtectedRoute tests
- Removed '/onboarding' from the hiddenPaths in MiniSidebar to streamline route visibility.
- Updated ProtectedRoute tests to reflect changes in onboarding handling, ensuring children render correctly when authenticated.
* chore: format, fix E2E lint, and onboarding step polish
Made-with: Cursor
* style(onboarding): update background color for onboarding steps
- Changed background color from black/30 to stone-900 for improved visual consistency across LocalAIStep, MnemonicStep, ScreenPermissionsStep, SkillsStep, ToolsStep, and WelcomeStep components.
- Enhanced overall aesthetics of the onboarding flow.
* fix(tests): update variable naming and comment out unused JavaScript content
- Renamed workspace variable to `_ws` to indicate it is unused in the `test_registry_cache_ttl_expired` test.
- Commented out the `js_content` variable to prevent unused variable warnings in the test setup.
* refactor(tests): streamline JSON-RPC test setup and remove unused backend URL handling
- Updated the JSON-RPC end-to-end test to always use the in-process Axum mock for backend settings, ensuring consistent test behavior.
- Removed the conditional logic for external backend URLs, simplifying the test setup.
- Ensured proper cleanup of mock join handles after test execution.
* refactor(runtime): update skill startup process to use core RPC
- Replaced the direct call to `runtimeStartSkill` with a `callCoreRpc` method for starting skills, enhancing the integration with the core RPC system.
- Updated comments to reflect the new implementation details.
- Made minor adjustments to the schema organization in Rust for better clarity on runtime controllers.
* refactor(tests): rename native_dispatcher test for clarity and update assertions
- Renamed the test function to better reflect its purpose: checking that the native dispatcher returns protocol-only instructions.
- Updated assertions to ensure the instructions contain the expected protocol information and do not inline tool names.
* feat(channels): introduce channel controllers and enhance channel management
- Added new `controllers` module for channel definitions, connection management, and RPC controllers.
- Implemented channel connection logic, including connection status and credential management.
- Updated existing functions to extend support for new channel schemas and definitions.
- Enhanced documentation for channel-related functionalities, including descriptions for new RPC methods.
* feat(messaging): enhance MessagingPanel with backend-driven channel definitions and status management
- Introduced backend-driven channel definitions and status retrieval in MessagingPanel.
- Replaced hardcoded channel and auth mode definitions with dynamic data from the backend.
- Improved error handling and loading states for channel connections.
- Updated API service to support fetching channel definitions and connection statuses.
- Refactored state management for better clarity and maintainability.
* feat(messaging): implement fallback definitions for channel connections in MessagingPanel
- Added fallback definitions for Telegram and Discord channels to enhance messaging capabilities when backend is unreachable.
- Updated MessagingPanel to utilize fallback definitions if backend data is unavailable, improving error handling and user experience.
- Refactored API service methods to return results directly, streamlining data retrieval for channel definitions and statuses.
* feat(channels): add web channel support and enhance routing logic
- Introduced a new 'web' channel definition in MessagingPanel, allowing chat via the built-in web UI.
- Updated channel connection state management to include the web channel, ensuring proper handling of connections.
- Enhanced routing logic to support fallback mechanisms across all defined channels, improving resilience in connection handling.
- Refactored channel type definitions to accommodate the new web channel, ensuring consistency across the application.
* feat(onboarding): introduce DEV_FORCE_ONBOARDING flag to control onboarding flow
- Added DEV_FORCE_ONBOARDING configuration to bypass onboarding checks during development.
- Updated onboarding logic in AppRoutes to respect the new flag, ensuring onboarding is always shown when enabled.
- Introduced new utility functions for managing onboarding state based on the flag.
- Updated Cargo.lock and Cargo.toml to reflect dependency changes and version updates.
- Removed deprecated openhuman command module and refactored related functionalities into daemon_host module for better organization.
* feat(daemon): refactor daemon health monitoring and window management
- Updated DaemonHealthService to use polling via `openhuman.health_snapshot` instead of event listening for health updates.
- Introduced a new focusMainWindow function to centralize window focus logic across deep link handling and Tauri commands.
- Replaced `invoke` calls with direct window management methods for showing, hiding, and toggling the main window.
- Removed deprecated core_rpc module and related commands for improved organization and clarity.
- Updated Cargo.toml and Cargo.lock to reflect dependency changes.
* refactor(daemonHealthService): streamline imports and simplify tool object structure
- Moved the import of `callCoreRpc` to a more appropriate location in DaemonHealthService.
- Simplified the structure of the tools object in the aiGetConfig function for better readability.
- Ensured consistency in Tauri command invocations by removing unnecessary line breaks.
* feat(autocomplete): add persistent accepted-completion history module
Introduces history.rs — a thin persistence layer over the existing local
KV store (MemoryClient::new_local()) that stores every accepted completion
and surfaces them as formatted style examples for in-context learning.
Public API:
- save_accepted_completion(context, suggestion, app_name)
- load_recent_examples(n) → Vec<String>
- list_history(limit) → Vec<AcceptedCompletion>
- clear_history() → usize
Storage: KV namespace "autocomplete", keys "accepted:{ts_ms:018}",
auto-trimmed to 50 entries on each save.
Refs: tinyhumansai/openhuman#71
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(autocomplete): wire history module into autocomplete mod.rs
Adds `mod history` and re-exports the public types/functions so they
are accessible from sibling modules (core.rs, ops.rs, schemas.rs).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(autocomplete): save accepted completions and inject as style examples
Three additions to the autocomplete engine:
1. After RPC accept (accept method): fire-and-forget tokio::spawn to
save the accepted completion context + suggestion to KV history.
2. After Tab-key accept (try_accept_via_tab): same fire-and-forget save.
3. Before inline_complete() in refresh(): load the 6 most recent
accepted completions from history, merge with user's static
style_examples (capped at 8 total), and pass as dynamic examples —
giving the model in-context personalisation from prior acceptances.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(autocomplete): add RPC handlers for history and clear_history
Adds two new async handler functions and their param/result structs:
- autocomplete_history(limit?) → AutocompleteHistoryResult
- autocomplete_clear_history() → AutocompleteClearHistoryResult
Both delegate to the history module and return via RpcOutcome, following
the established pattern of existing autocomplete ops handlers.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(autocomplete): register history + clear_history controller schemas
Adds ControllerSchema definitions and handler wiring for the two new
RPC methods: openhuman.autocomplete_history and
openhuman.autocomplete_clear_history.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(app): add TypeScript types and stubs for autocomplete history RPC
Adds AcceptedCompletion, AutocompleteHistoryResult, and
AutocompleteClearHistoryResult interfaces plus two exported async
functions (openhumanAutocompleteHistory, openhumanAutocompleteClearHistory)
following the existing callCoreRpc pattern.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* feat(app): add Personalization History section to AutocompletePanel
Adds a new UI section between Settings and Test in the autocomplete
settings panel showing accepted completion history:
- Scrollable list of entries with timestamp, app name, context tail,
and accepted suggestion
- Clear History button (red-toned, disabled when empty)
- Summary line with entry count
- Auto-loads on mount alongside existing settings load
Uses local component state only (no Redux) — history is fetched via
the new openhumanAutocompleteHistory RPC stub.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* style: apply prettier + cargo fmt formatting fixes
Auto-formatted by pre-push hooks — import ordering, line wrapping,
and brace style adjustments. No logic changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
- Updated all `openhuman` service methods to use `invoke` with `core_rpc_relay`.
- Simplified parameter structure and improved consistency in Tauri command invocation.
- Updated test files for Discord, GitHub, Google, and Twitter to improve code consistency by standardizing async function formatting and import statements.
- Enhanced readability by restructuring promise resolutions and waitFor assertions.
- Ensured uniformity in the handling of button click events across all OAuth provider tests.
- 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.
- Reinstated macOS ARM64 build configurations in the release workflow for improved compatibility.
- Updated the version of the "OpenHuman" package in Cargo.lock to 0.49.18, ensuring consistency across the project.
- Refactored search directory handling in core_process.rs for better clarity and maintainability, particularly for macOS platforms.
- Added conditional compilation for macOS in various files to streamline platform-specific functionality.
- Bumped the version of the "openhuman" package in Cargo.lock and Cargo.toml to 0.49.17.
- Updated the version in app/package.json and app/src-tauri/Cargo.toml to reflect the new release.
- Adjusted the version in app/src-tauri/tauri.conf.json for consistency across the application.
* Update CLAUDE.md to clarify pull request workflow and enhance documentation
- Added a note to emphasize the importance of opening pull requests against the upstream repository instead of a fork's default remote, ensuring better collaboration and code management.
- Improved the overall clarity of the Git workflow section, contributing to a more streamlined development process.
* Refactor REPL session handling and remove deprecated chat methods
- Removed the `repl_session_chat` functionality from the schema and related files, streamlining the REPL session management.
- Introduced a new `start_chat` method in the web channel provider for handling chat interactions, enhancing the chat system's architecture.
- Updated socket handling to improve event emission with alias support, ensuring better communication across the application.
- Enhanced error handling and logging for chat operations, providing clearer feedback during interactions.
- Consolidated chat-related logic into the new web channel module, improving maintainability and organization.
* Refactor apiClient to improve token management and eliminate circular dependencies
- Renamed `_getToken` to `authTokenGetterRef` for clarity and to avoid clashing with transpiled private method names.
- Updated the `setStoreForApiClient` function to use the new `authTokenGetterRef` variable, ensuring the `apiClient` remains free of direct imports from `store/index`.
- Enhanced the `ApiClient` class by renaming the `getToken` method to `resolveAuthToken`, improving readability and consistency in token retrieval logic.
- Adjusted comments in `apiClient.ts` and `store/index.ts` to reflect the changes and clarify the purpose of the lazy store accessor.
* Enhance API client integration with store for improved token management
- Introduced `setStoreForApiClient` in `main.tsx` to bind the Redux store's auth token for API requests, ensuring seamless token access.
- Updated comments in `apiClient.ts` to clarify the lazy token accessor's purpose and prevent circular dependencies.
- Removed the previous direct call to `setStoreForApiClient` from `store/index.ts`, centralizing the setup in `main.tsx` for better organization.
- Enhanced test setup to include the new store binding, ensuring consistent token retrieval during testing.
* Refactor web channel event handling and enhance chat functionality
- Updated `WebChatSseEvent` structure to include new fields: `tool_name`, `skill_id`, `args`, `output`, `success`, and `round`, improving the granularity of event data.
- Refactored event emission logic in `emit_web_chat_event` to utilize the new fields, ensuring more informative payloads for tool calls and results.
- Enhanced the `start_chat` and `cancel_chat` functions to accommodate the new event structure, improving chat session management.
- Introduced a new function `publish_tool_events_from_history` to streamline the emission of tool call and result events from chat history, enhancing the overall chat experience.
* Refactor web channel integration and enhance controller management
- Updated references from the deprecated `web_channel` module to the new `channels::providers::web` structure, improving code organization and maintainability.
- Refactored the `build_registered_controllers` and `build_declared_controller_schemas` functions to utilize the new web channel controller methods, ensuring consistency across the application.
- Removed the obsolete `web_channel` module and its associated files, streamlining the codebase and enhancing clarity in the channel management system.
- Introduced new functions for managing web channel events and schemas, improving the overall architecture of the web channel integration.
* Refactor main.tsx and test setup for improved organization
- Reordered imports in `main.tsx` to enhance clarity and maintainability, ensuring that `setStoreForApiClient` is called with the correct store reference.
- Removed unnecessary whitespace in `setup.ts`, streamlining the test setup file for better readability.
* Fix service gate false blocking when service is running
* Support soft-pass daemon gate and harden macOS service detection
* Extend list-files fallback trigger phrases in agent loop
* Replace list-files fallback with tool-call repair retry
* Log full system prompt and drop tool-call repair flow
* Add tracing-log dependency and enhance CLI logging
- Introduced `tracing-log` as a dependency to bridge `log` and `tracing` for improved logging capabilities.
- Added a `--verbose` flag to the CLI for enhanced logging detail, initializing the logging level based on this flag.
- Implemented an HTTP request logging middleware to capture and log request details.
- Updated CLI help output to reflect the new `--verbose` option and improved logging messages throughout the application.
* Tighten system prompt for native tool-calling
* Auto-create missing workspace context markdown files
* Seed workspace prompt files from canonical agent prompt templates
* Enhance logging with nu-ansi-term and improve CLI output
- Added `nu-ansi-term` dependency for colored terminal output in logs.
- Implemented a custom logging format for better readability in CLI.
- Updated logging initialization to conditionally use ANSI colors based on terminal support.
- Added debug logging for agent responses to aid in troubleshooting.
* Harden OpenAI-compatible native tool-call parsing
* Format provider tool-call parsing updates
* Implement inline autocomplete suggestions in Conversations component
- Added functionality for inline suggestions based on user input in the Conversations component.
- Introduced debounce logic for autocomplete requests to optimize performance.
- Enhanced user experience by allowing suggestions to be accepted via the Tab key.
- Updated UI to display inline completion suffixes in the input area.
- Modified backend to support new autocomplete features and improved error handling.
* Add macOS ARM64 build workflow and enhance release process
- Introduced a new GitHub Actions workflow for building signed macOS ARM64 bundles.
- Updated the release workflow to validate signing prerequisites for macOS builds.
- Enhanced the Tauri configuration preparation to include updater settings.
- Added necessary secrets to the example secrets file for macOS signing.
- Implemented CLI autocomplete functionality for macOS, including options for debounce and process management.
* Update CLAUDE.md to clarify pull request workflow and enhance documentation
- Added a note to emphasize the importance of opening pull requests against the upstream repository instead of a fork's default remote, ensuring better collaboration and code management.
- Improved the overall clarity of the Git workflow section, contributing to a more streamlined development process.
* Refactor REPL session handling and remove deprecated chat methods
- Removed the `repl_session_chat` functionality from the schema and related files, streamlining the REPL session management.
- Introduced a new `start_chat` method in the web channel provider for handling chat interactions, enhancing the chat system's architecture.
- Updated socket handling to improve event emission with alias support, ensuring better communication across the application.
- Enhanced error handling and logging for chat operations, providing clearer feedback during interactions.
- Consolidated chat-related logic into the new web channel module, improving maintainability and organization.
* Refactor apiClient to improve token management and eliminate circular dependencies
- Renamed `_getToken` to `authTokenGetterRef` for clarity and to avoid clashing with transpiled private method names.
- Updated the `setStoreForApiClient` function to use the new `authTokenGetterRef` variable, ensuring the `apiClient` remains free of direct imports from `store/index`.
- Enhanced the `ApiClient` class by renaming the `getToken` method to `resolveAuthToken`, improving readability and consistency in token retrieval logic.
- Adjusted comments in `apiClient.ts` and `store/index.ts` to reflect the changes and clarify the purpose of the lazy store accessor.
* Enhance API client integration with store for improved token management
- Introduced `setStoreForApiClient` in `main.tsx` to bind the Redux store's auth token for API requests, ensuring seamless token access.
- Updated comments in `apiClient.ts` to clarify the lazy token accessor's purpose and prevent circular dependencies.
- Removed the previous direct call to `setStoreForApiClient` from `store/index.ts`, centralizing the setup in `main.tsx` for better organization.
- Enhanced test setup to include the new store binding, ensuring consistent token retrieval during testing.
* Refactor web channel event handling and enhance chat functionality
- Updated `WebChatSseEvent` structure to include new fields: `tool_name`, `skill_id`, `args`, `output`, `success`, and `round`, improving the granularity of event data.
- Refactored event emission logic in `emit_web_chat_event` to utilize the new fields, ensuring more informative payloads for tool calls and results.
- Enhanced the `start_chat` and `cancel_chat` functions to accommodate the new event structure, improving chat session management.
- Introduced a new function `publish_tool_events_from_history` to streamline the emission of tool call and result events from chat history, enhancing the overall chat experience.
* Refactor web channel integration and enhance controller management
- Updated references from the deprecated `web_channel` module to the new `channels::providers::web` structure, improving code organization and maintainability.
- Refactored the `build_registered_controllers` and `build_declared_controller_schemas` functions to utilize the new web channel controller methods, ensuring consistency across the application.
- Removed the obsolete `web_channel` module and its associated files, streamlining the codebase and enhancing clarity in the channel management system.
- Introduced new functions for managing web channel events and schemas, improving the overall architecture of the web channel integration.
* Refactor main.tsx and test setup for improved organization
- Reordered imports in `main.tsx` to enhance clarity and maintainability, ensuring that `setStoreForApiClient` is called with the correct store reference.
- Removed unnecessary whitespace in `setup.ts`, streamlining the test setup file for better readability.
* Fix service gate false blocking when service is running
* Support soft-pass daemon gate and harden macOS service detection
* Extend list-files fallback trigger phrases in agent loop
* Replace list-files fallback with tool-call repair retry
* Log full system prompt and drop tool-call repair flow
* Enhance E2E build process and backend URL handling
- Updated `e2e-build.sh` to set CI environment variable correctly for compatibility with various CI runners.
- Refactored `backendUrl.ts` to support dynamic backend URL resolution from Vite environment variables, improving flexibility in different deployment contexts.
* Implement web channel functionality and enhance chat features
- Introduced new web channel commands for sending and canceling chat messages, improving user interaction with the chat system.
- Added support for server-sent events (SSE) to handle real-time updates for chat interactions, enhancing responsiveness.
- Refactored existing code to improve readability and maintainability, including updates to the core HTTP router and JSON-RPC handling.
- Implemented comprehensive end-to-end tests for the web channel flow, ensuring robust functionality and user experience.
- Enhanced the overall structure of the web channel module, including event publishing and subscription mechanisms for better scalability.
* Refactor socket handling to unify communication across environments
- Removed Tauri-specific socket handling from various components, streamlining the codebase to use a single Socket.IO client for both web and desktop environments.
- Updated the `useIntelligenceSocket` hook to eliminate Tauri checks and directly utilize the socket service for message sending and chat initialization.
- Refactored metadata synchronization in Gmail and Notion services to use the unified socket service, enhancing consistency in socket communication.
- Improved error handling and logging across socket interactions to provide clearer feedback during connection issues.
- Enhanced the Conversations component to manage socket connection status, ensuring a more robust user experience during chat interactions.
* Refactor socket service and enhance core URL resolution
- Replaced the deprecated `getBackendUrl` function with `resolveCoreSocketBaseUrl` to improve backend URL resolution for socket connections, accommodating both Tauri and non-Tauri environments.
- Introduced `coreSocketBaseFromRpcUrl` to streamline the processing of RPC URLs.
- Removed the `tauriSocket.ts` file, consolidating socket handling into a unified service for better maintainability and clarity.
- Updated the socket connection logging to provide more informative messages during connection attempts.
* Add engineioxide and socketioxide packages to Cargo.lock and update Cargo.toml
- Introduced new packages: `engineioxide` and `socketioxide`, both at version 0.15.2, enhancing the project's capabilities.
- Updated `Cargo.toml` to include `socketioxide` with the "extensions" feature, ensuring proper integration with the existing codebase.
- Added dependencies for both packages, improving modularity and functionality across the application.
* Refactor Conversations component and streamline chat handling
- Removed unused imports and functions related to Notion context and socket handling, simplifying the Conversations component.
- Enhanced error handling during chat interactions, ensuring clearer feedback for users.
- Updated chatSend function parameters to eliminate unnecessary context, improving the clarity of the API call.
- Consolidated logic for managing chat message history and context, enhancing maintainability and readability of the code.
* Enhance core RPC client with improved logging and error handling
- Introduced debug logging for socket RPC requests and responses, providing better visibility into the communication process.
- Enhanced error handling in the core RPC client to log detailed error messages, improving debugging capabilities.
- Updated socket service to log inbound events, ensuring comprehensive tracking of socket interactions.
- Removed deprecated MCP handlers from the socket service, streamlining the codebase and improving maintainability.
* Refactor apiClient and socketService for improved maintainability
- Changed the declaration of `_getToken` from `let` to `var` in `apiClient.ts` to enhance variable scoping.
- Removed unused imports in `socketService.ts`, streamlining the code and improving readability.
* Refactor deep link handling and enhance E2E testing capabilities
- Updated the deep link configuration in `lib.rs` to use a more generalized `#[cfg(desktop)]` directive, improving compatibility across desktop platforms.
- Enhanced the `triggerDeepLink` function in `deep-link-helpers.ts` to include macOS-specific app activation and launching logic, ensuring better integration with the macOS environment.
- Introduced a new `buildBypassJwt` function to generate bypass JWT tokens for E2E testing, improving the flexibility of authentication flows in tests.
- Updated E2E tests in `conversations-web-channel-flow.spec.ts` to utilize the new `triggerAuthDeepLinkBypass` function, enhancing the testing of authentication scenarios.
* Enhance deep link handling and E2E test configuration
- Updated `triggerAuthDeepLink` in `deep-link-helpers.ts` to support environment-based bypass tokens, improving flexibility in authentication flows during E2E tests.
- Modified the `serve_on_ephemeral` function call in `json_rpc_e2e.rs` to disable the core HTTP router's default behavior, enhancing test isolation and control over the testing environment.
* Refactor deep link handling and enhance E2E test utilities
- Updated `authFlow.e2e.test.tsx` to utilize `window.__simulateDeepLink` for simulating deep links, improving test accuracy and alignment with real-world scenarios.
- Modified `lib.rs` to restrict deep link registration to Windows and Linux platforms, clarifying platform-specific behavior.
- Enhanced `deep-link-helpers.ts` with a new function to simulate deep links in the WebView, providing a fallback mechanism for E2E tests.
- Updated `conversations-web-channel-flow.spec.ts` to reflect changes in deep link triggering, improving logging and test clarity.
* Update dependencies in Cargo.lock and Cargo.toml for improved project stability
- Removed several unused dependencies from `Cargo.lock` and `Cargo.toml`, including `aes-gcm`, `argon2`, and `async-imap`, streamlining the project and reducing potential security vulnerabilities.
- Updated existing dependencies to their latest versions, ensuring compatibility and leveraging improvements in performance and security.
- Simplified the dependency structure by consolidating features and removing unnecessary comments, enhancing clarity and maintainability of the configuration files.
* Refactor App component and remove unused providers
- Removed `AIProvider` and `SkillProvider` from the `App` component, streamlining the component structure and improving readability.
- Updated the `UserProvider` to focus solely on bootstrapping the authentication token, enhancing its clarity and purpose.
- Adjusted the layout within the `App` component to maintain functionality without the removed providers, ensuring a smooth user experience.
* Remove deprecated AI components and types
- Deleted the `index.ts`, `loader.ts`, `types.ts`, and related test files from the AI module, streamlining the codebase by removing unused and outdated components.
- Eliminated the `default-constitution.md` and associated constitution files, which were no longer relevant to the current architecture.
- This cleanup enhances maintainability and reduces complexity within the AI system.
* Refactor user data fetching logic and remove legacy tools cache watcher
- Enhanced the `useUser` hook to prevent infinite retry loops by implementing a token check with a reference to track the last auto-fetch token.
- Removed the legacy file watcher for `TOOLS.md`, transitioning to a core RPC and socket event-based refresh mechanism for tool/config updates.
- Updated test state structure to include `isAuthBootstrapComplete` and `channelConnections`, improving test coverage and state management.
* Refactor channel module structure and add new providers
- Consolidated channel modules under a new `providers` directory, improving organization and clarity.
- Introduced new channel providers for DingTalk, Discord, Email, iMessage, IRC, and Lark, expanding the messaging capabilities of the application.
- Updated the `mod.rs` file to reflect the new structure and ensure proper module exports, enhancing maintainability and ease of use.
* refactor(ui): remove legacy providers/lib logic and stabilize auth bootstrap
* chore: apply pre-push auto-fixes