* chore(workflows): comment out Windows smoke tests in installer and release workflows
* feat: add usage field to ChatResponse structure
- Introduced a new `usage` field in the `ChatResponse` struct across multiple files to track token usage information.
- Updated various test cases and response handling to accommodate the new field, ensuring consistent behavior in the agent's responses.
- Enhanced the `Provider` trait and related implementations to include the `usage` field in responses, improving observability of token usage during interactions.
* feat: introduce structured error handling and event system for agent loop
- Added a new `AgentError` enum to provide structured error types, allowing differentiation between retryable and permanent failures.
- Implemented an `AgentEvent` enum for a typed event system, enhancing observability during agent loop execution.
- Created a `ContextGuard` to manage context utilization and trigger auto-compaction, preventing infinite retry loops on compaction failures.
- Updated the `mod.rs` file to include the new `UsageInfo` type for improved observability of token usage.
- Added comprehensive tests for the new error handling and event system, ensuring robustness and reliability in agent operations.
* feat: implement token cost tracking and error handling for agent loop
- Introduced a `CostTracker` to monitor cumulative token usage and enforce daily budget limits, enhancing cost management in the agent loop.
- Added structured error types in `AgentError` to differentiate between retryable and permanent failures, improving error handling and recovery strategies.
- Implemented a typed event system with `AgentEvent` for better observability during agent execution, allowing multiple consumers to subscribe to events.
- Developed a `ContextGuard` to manage context utilization and trigger auto-compaction, preventing excessive resource usage during inference calls.
These enhancements improve the robustness and observability of the agent's operations, ensuring better resource management and error handling.
* style: apply cargo fmt formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(agent): enhance error handling and event structure
- Updated `AgentError` conversion to attempt recovery of typed errors wrapped in `anyhow`, improving error handling robustness.
- Expanded `AgentEvent` enum to include `tool_arguments` and `tool_call_ids` for better context in tool calls, and added `output` and `tool_call_id` to `ToolExecutionComplete` for enhanced event detail.
- Improved `EventSender` to clamp channel capacity to avoid panics and added tracing for event emissions, enhancing observability during event handling.
* fix(agent): correct error conversion in AgentError implementation
- Updated the conversion logic in the `From<anyhow::Error>` implementation for `AgentError` to return the `agent_err` directly instead of dereferencing it. This change improves the clarity and correctness of error handling in the agent's error management system.
* refactor(config): simplify default implementations for ReflectionSource and PermissionLevel
- Added `#[derive(Default)]` to `ReflectionSource` and `PermissionLevel` enums, removing custom default implementations for cleaner code.
- Updated error handling in `handle_local_ai_set_ollama_path` to streamline serialization of service status.
- Refactored error mapping in webhook registration and unregistration functions for improved readability.
* refactor(config): clean up LearningConfig and PermissionLevel enums
- Removed unnecessary blank lines in `LearningConfig` and `PermissionLevel` enums for improved code readability.
- Consolidated `#[derive(Default)]` into a single line for `PermissionLevel`, streamlining the code structure.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(webhooks): implement webhook management interface and routing
- Added a new Webhooks page with TunnelList and WebhookActivity components for managing webhook tunnels and displaying recent activity.
- Introduced useWebhooks hook for handling CRUD operations related to tunnels, including fetching, creating, and deleting tunnels.
- Implemented a WebhookRouter in the backend to route incoming webhook requests to the appropriate skills based on tunnel UUIDs.
- Enhanced the API for tunnel management, including the ability to register and unregister tunnels for specific skills.
- Updated the Redux store to manage webhooks state, including tunnels, registrations, and activity logs.
This update provides a comprehensive interface for managing webhooks, improving the overall functionality and user experience in handling webhook events.
* refactor(tunnel): remove tunnel-related modules and configurations
- Deleted tunnel-related modules including Cloudflare, Custom, Ngrok, and Tailscale, along with their associated configurations and implementations.
- Removed references to TunnelConfig and related functions from the configuration and schema files.
- Cleaned up the mod.rs files to reflect the removal of tunnel modules, streamlining the codebase.
This refactor simplifies the project structure by eliminating unused tunnel functionalities, enhancing maintainability and clarity.
* refactor(config): remove tunnel settings from schemas and controllers
- Eliminated the `update_tunnel_settings` controller and its associated schema from the configuration files.
- Streamlined the `all_registered_controllers` function by removing the handler for tunnel settings, enhancing code clarity and maintainability.
This refactor simplifies the configuration structure by removing unused tunnel-related functionalities.
* refactor(tunnel): remove tunnel settings and related configurations
- Eliminated tunnel-related state variables and functions from the TauriCommandsPanel component, streamlining the settings interface.
- Removed the `openhumanUpdateTunnelSettings` function and `TunnelConfig` interface from the utility commands, enhancing code clarity.
- Updated the core RPC client to remove legacy tunnel method aliases, further simplifying the codebase.
This refactor focuses on cleaning up unused tunnel functionalities, improving maintainability and clarity across the application.
* style: apply prettier and cargo fmt formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(auth): add /auth/telegram registration endpoint for bot-initiated login
When a user sends /start register to the Telegram bot, the bot sends an
inline button pointing to localhost:7788/auth/telegram?token=<token>.
This new GET handler consumes the one-time login token via the backend,
stores the resulting JWT as the app session, and returns a styled HTML
success/error page.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: apply cargo fmt to telegram auth handler
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: apply CodeRabbit auto-fixes
Fixed 1 file(s) based on 2 unresolved review comments.
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
* update format
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
* feat(agent): add self-learning subsystem with post-turn reflection
Integrate Hermes-inspired self-learning capabilities into the agent core:
- Post-turn hook infrastructure (hooks.rs): async, fire-and-forget hooks
that receive TurnContext with tool call records after each turn
- Reflection engine: analyzes turns via local Ollama or cloud reasoning
model, extracts observations/patterns/preferences, stores in memory
- User profile learning: regex-based preference extraction from user
messages (e.g. "I prefer...", "always use...")
- Tool effectiveness tracking: per-tool success rates, avg duration,
common error patterns stored in memory
- tool_stats tool: lets the agent query its own effectiveness data
- LearningConfig: master switch (default off), configurable reflection
source (local/cloud), throttling, complexity thresholds
- Prompt sections: inject learned context and user profile into system
prompt when learning is enabled
All storage uses existing Memory trait with Custom categories. All hooks
fire via tokio::spawn (non-blocking). Everything behind config flags.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: apply cargo fmt formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: apply CodeRabbit auto-fixes
Fixed 6 file(s) based on 7 unresolved review comments.
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
* fix(learning): address PR review — sanitization, async, atomicity, observability
Fixes all findings from PR review:
1. Sanitize tool output: Replace raw output_snippet with sanitized
output_summary via sanitize_tool_output() — strips PII, classifies
error types, never stores raw payloads in ToolCallRecord
2. Env var overrides: Add OPENHUMAN_LEARNING_* env vars in
apply_env_overrides() — enabled, reflection_enabled,
user_profile_enabled, tool_tracking_enabled, skill_creation_enabled,
reflection_source (local/cloud), max_reflections_per_session,
min_turn_complexity
3. Sanitize prompt injection: Pre-fetch learned context async in
Agent::turn(), pass through PromptContext.learned field, sanitize via
sanitize_learned_entry() (truncate, strip secrets) — no raw
entry.content in system prompt
4. Remove blocking I/O: Replace std::thread::spawn + Handle::block_on
in prompt sections with async pre-fetch in turn() + data passed via
PromptContext.learned — fully non-blocking prompt building
5. Per-session throttling: Replace global AtomicUsize with per-session
HashMap<String, usize> under Mutex, rollback counter on reflection or
storage failure
6. Atomic tool stats: Add per-tool tokio::sync::Mutex to serialize
read-modify-write cycles, preventing lost concurrent updates
7. Tool registration tracing: Add tracing::debug for ToolStatsTool
registration decision in ops.rs
8. System prompt refresh: Rebuild system prompt on subsequent turns when
learning is enabled, replacing system message in history so newly
learned context is visible
9. Hook observability: Add dispatch-level debug logging (scheduling,
start time, completion duration, error timing) to fire_hooks
10. tool_stats logging: Add debug logging for query filter, entry count,
parse failures, and filter misses
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CodeRabbit <noreply@coderabbit.ai>
* refactor(deep-link): streamline OAuth handling and skill setup process
- Removed the RPC call for persisting setup completion, now handled directly in the preferences store.
- Updated comments in the deep link handler to clarify the sequence of operations during OAuth completion.
- Enhanced the `set_setup_complete` function to automatically enable skills upon setup completion, improving user experience during skill activation.
This refactor simplifies the OAuth deep link handling and ensures skills are automatically enabled after setup, enhancing the overall flow.
* feat(skills): enhance SkillSetupModal and snapshot fetching with polling
- Added a mechanism in SkillSetupModal to sync the setup mode when the setup completion status changes, improving user experience during asynchronous loading.
- Updated the useSkillSnapshot and useAllSkillSnapshots hooks to include periodic polling every 3 seconds, ensuring timely updates from the core sidecar and enhancing responsiveness to state changes.
These changes improve the handling of skill setup and snapshot fetching, providing a more seamless user experience.
* fix(ErrorFallbackScreen): update reload button behavior to navigate to home before reloading
- Modified the onClick handler of the reload button to first set the window location hash to '#/home' before reloading the application. This change improves user experience by ensuring users are directed to the home screen upon reloading.
* refactor(intelligence-api): simplify local-only hooks and remove unused code
- Refactored the `useIntelligenceApiFallback` hooks to focus on local-only implementations, removing reliance on backend APIs and mock data.
- Streamlined the `useActionableItems`, `useUpdateActionableItem`, `useSnoozeActionableItem`, and `useChatSession` hooks to operate solely with in-memory data.
- Updated comments for clarity on the local-only nature of the hooks and their intended usage.
- Enhanced the `useIntelligenceStats` hook to derive entity counts from local graph relations instead of fetching from a backend API, improving performance and reliability.
- Removed unused imports and code related to backend interactions, resulting in cleaner and more maintainable code.
* feat(intelligence): add active tab state management for Intelligence component
- Introduced a new `IntelligenceTab` type to manage the active tab state within the Intelligence component.
- Initialized the `activeTab` state to 'memory', enhancing user experience by allowing tab-specific functionality and navigation.
This update lays the groundwork for future enhancements related to tabbed navigation in the Intelligence feature.
* feat(intelligence): implement tab navigation and enhance UI interactions
- Added a tab navigation system to the Intelligence component, allowing users to switch between 'Memory', 'Subconscious', and 'Dreams' tabs.
- Integrated conditional rendering for the 'Analyze Now' button, ensuring it is only displayed when the 'Memory' tab is active.
- Updated the UI to include a 'Coming Soon' label for the 'Subconscious' and 'Dreams' tabs, improving user awareness of upcoming features.
- Enhanced the overall layout and styling for better user experience and interaction.
* refactor(intelligence): streamline UI text and enhance OAuth credential handling
- Simplified text rendering in the Intelligence component for better readability.
- Updated the description for subconscious and dreams sections to provide clearer context on functionality.
- Refactored OAuth credential handling in the QjsSkillInstance to utilize a data directory for persistence, improving credential management and recovery.
- Enhanced logging for OAuth credential restoration and persistence, ensuring better traceability of actions.
* fix(skills): update OAuth credential handling in SkillManager
- Modified the SkillManager to use `credentialId` instead of `integrationId` for OAuth notifications, aligning with the expectations of the JS bootstrap's oauth.fetch.
- Enhanced the parameters passed during the core RPC call to include `grantedScopes` and ensure the provider defaults to "unknown" if not specified, improving the robustness of the skill activation process.
* fix(skills): derive modal mode from snapshot instead of syncing via effect
Avoids the react-hooks/set-state-in-effect lint warning by deriving
the setup/manage mode directly from the snapshot's setup_complete flag.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor(ErrorFallbackScreen): format reload button onClick handler for improved readability
- Reformatted the onClick handler of the reload button to enhance code readability by adding line breaks.
- Updated import order in useIntelligenceStats for consistency.
- Improved logging format in event_loop.rs and js_helpers.rs for better traceability of OAuth credential actions.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(local-ai): enhance Ollama installation and path configuration
- Added a new command to set a custom path for the Ollama binary, allowing users to specify a manually installed version.
- Updated the LocalModelPanel and Home components to reflect the installation state, including progress indicators for downloading and installing.
- Enhanced error handling to display detailed installation errors and provide guidance for manual installation if needed.
- Introduced a new state for 'installing' to improve user feedback during the Ollama installation process.
- Refactored related components and utility functions to accommodate the new installation flow and error handling.
This update improves the user experience by providing clearer feedback during the Ollama installation process and allowing for custom binary paths.
* feat(local-ai): enhance LocalAIDownloadSnackbar and Home component
- Updated LocalAIDownloadSnackbar to display installation phase details and improve progress bar animations during the installation state.
- Refactored the display logic to show 'Installing...' when in the installing phase, enhancing user feedback.
- Modified Home component to present warnings in a more user-friendly format, improving visibility of local AI status warnings.
These changes improve the user experience by providing clearer feedback during downloads and installations.
* feat(onboarding): update LocalAIStep to integrate Ollama installation
- Added Ollama SVG icon to the LocalAIStep component for visual representation.
- Updated text to clarify that OpenHuman will automatically install Ollama for local AI model execution.
- Enhanced privacy and resource impact descriptions to reflect Ollama's functionality.
- Changed button text to "Download & Install Ollama" for clearer user action guidance.
- Improved messaging for users who skip Ollama installation, emphasizing future setup options.
These changes enhance user understanding and streamline the onboarding process for local AI model usage.
* feat(onboarding): update LocalAIStep and LocalAIDownloadSnackbar for improved user experience
- Modified the LocalAIStep component to include a "Setup later" button for user convenience and updated the messaging to clarify the installation process for Ollama.
- Enhanced the LocalAIDownloadSnackbar by repositioning it to the bottom-right corner for better visibility and user interaction.
- Updated the Ollama SVG icon to include a white background for improved contrast and visibility.
These changes aim to streamline the onboarding process and enhance user understanding of the local AI installation and usage.
* feat(local-ai): add diagnostics functionality for Ollama server health check
- Introduced a new diagnostics command to assess the Ollama server's health, list installed models, and verify expected models.
- Updated the LocalModelPanel to manage diagnostics state and display errors effectively.
- Enhanced error handling for prompt testing to provide clearer feedback on issues encountered.
- Refactored related components and utility functions to support the new diagnostics feature.
These changes improve the application's ability to monitor and report on the local AI environment, enhancing user experience and troubleshooting capabilities.
* feat(local-ai): add Ollama diagnostics section to LocalModelPanel
- Introduced a new diagnostics feature in the LocalModelPanel to check the health of the Ollama server, display installed models, and verify expected models.
- Implemented loading states and error handling for the diagnostics process, enhancing user feedback during checks.
- Updated the UI to present diagnostics results clearly, including server status, installed models, and any issues found.
These changes improve the application's monitoring capabilities for the local AI environment, aiding in troubleshooting and user experience.
* feat(local-ai): implement auto-retry for Ollama installation on degraded state
- Enhanced the Home component to include a reference for tracking auto-retry status during Ollama installation.
- Updated the local AI service to retry the installation process if the server state is degraded, improving resilience against installation failures.
- Introduced a new method to force a fresh install of the Ollama binary, ensuring that users can recover from initial setup issues more effectively.
These changes enhance the reliability of the local AI setup process, providing a smoother user experience during installation and recovery from errors.
* feat(local-ai): improve Ollama server management and diagnostics
- Refactored the Ollama server management logic to include a check for the runner's health, ensuring that the server can execute models correctly.
- Introduced a new method to verify the Ollama runner's functionality by sending a lightweight request, enhancing error handling for server issues.
- Added functionality to kill any stale Ollama server processes before restarting with the correct binary, improving reliability during server restarts.
- Updated the server startup process to streamline the handling of server health checks and binary resolution.
These changes enhance the robustness of the local AI service, ensuring better management of the Ollama server and improved diagnostics for user experience.
* style: apply prettier and cargo fmt formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: add CI profile for faster compilation in Cargo.toml files
- Introduced a new `[profile.ci]` section in both root and Tauri Cargo.toml files to optimize build settings for continuous integration.
- Adjusted compilation parameters to prioritize speed over runtime performance, including reduced optimization level and enabled code generation units.
* refactor(tests): update agent test setup to return temporary directory
- Modified the `build_agent_with` function calls in the agent tests to return a temporary directory alongside the agent instance, improving resource management during tests.
- Ensured consistency in test setup across multiple test functions.
* chore: update .gitignore to include fastembed_cache
- Added 'workflow' and '.fastembed_cache' to the .gitignore file to prevent unnecessary files from being tracked in the repository.
* test: enhance dispatch routing tests with panic handling
Updated the `dispatch_routes_memory_doc_ingest` test to use `AssertUnwindSafe` and `catch_unwind` for better handling of potential panics during execution. This ensures that the test verifies route existence even if the handler encounters a panic, improving robustness against shared state issues in concurrent tests.
* ci: speed up builds with rust-cache, sccache, mold linker, and CI profile
- Replace manual Cargo registry cache with Swatinem/rust-cache@v2 (caches
target/ directories for both core and Tauri crates)
- Add mozilla-actions/sccache for cross-branch compilation caching
- Install mold linker on Linux for faster linking
- Use --profile ci for sidecar build (opt-level 1, codegen-units 16)
- Override release profile env vars for Tauri build with CI-tuned settings
- Add --bundles none to CI build (skip unused deb/appimage packaging)
- Restrict push triggers to main branch only (PRs already cover feature
branches, preventing duplicate runs)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(ci): unset RUSTC_WRAPPER for cargo fmt to avoid sccache errors
The sccache-action sets RUSTC_WRAPPER globally for the job. cargo fmt
invokes rustc through sccache which fails if the GHA cache service is
unavailable. Clear RUSTC_WRAPPER for fmt steps and remove redundant
per-step env overrides (the action already sets them job-wide).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* refactor: implement Default trait for various structs and enums
- Added Default implementations for ConnectionStatus, AgentBuilder, NativeRuntime, AutocompleteEngine, CliChannel, ActionTracker, SkillStatus, and ExtractionMode to streamline object initialization.
- Simplified condition checks in several places by replacing map_or with is_some_and and is_none_or for better readability and performance.
- Updated various instances of string handling in message sending to remove unnecessary conversions.
This refactor enhances code clarity and consistency across the codebase.
* style: clean up whitespace and improve code formatting
- Removed unnecessary blank lines in several files to enhance code readability.
- Simplified condition checks by consolidating method calls into single lines for better clarity.
- Improved formatting in various functions to maintain consistency across the codebase.
* fix(ci): use --bundles deb instead of unsupported none value
Tauri CLI on this version doesn't support 'none' as a bundle type.
Use 'deb' as the lightest single bundle to minimize packaging time.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(ci): add Dockerfile and CI workflows for building and pushing Docker images
- Introduced a Dockerfile to set up a CI environment with necessary dependencies for Tauri, Rust, Node.js, and sccache.
- Created a new workflow to build and push the CI Docker image to GitHub Container Registry on main branch pushes.
- Updated existing workflows to utilize the new Docker image for building and testing, enhancing consistency and efficiency in CI processes.
* chore(ci): update container image references in CI workflows
- Removed unnecessary permissions for packages in build, test, and typecheck workflows.
- Updated container image references to use a specific digest instead of the latest tag for improved stability and reproducibility in CI processes.
* fix(ci): use correct amd64 Docker image digest
Previous digest was from arm64 build (Mac). Rebuilt with
--platform linux/amd64 for GitHub Actions runners.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(ci): use tag instead of digest for Docker image reference
GHCR doesn't support pulling OCI index manifests by digest reliably.
Use the rust-1.93.0 tag which is pinned to a specific Rust version
and resolves correctly on amd64 CI runners.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(ci): rename Docker package to openhuman_ci
Move from nested ghcr.io/tinyhumansai/openhuman/ci-runner to
ghcr.io/tinyhumansai/openhuman_ci to avoid GHCR nested package
manifest resolution issues.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix(ci): remove sccache env vars from container jobs
sccache can't access the GHA cache API from inside a Docker container
(missing ACTIONS_CACHE_URL/ACTIONS_RUNTIME_TOKEN). Swatinem/rust-cache
already caches target/ which provides the main build speedup.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: update installer smoke workflow to trigger on main branch pushes
- Added a trigger for the installer smoke workflow to run on pushes to the main branch, enhancing CI coverage for mainline changes.
* fix: enhance Sentry DSN retrieval logic
- Updated the Sentry DSN retrieval process to include an additional fallback option using `option_env!`, ensuring that the DSN can be sourced from both environment variables and optional configuration, improving robustness in observability setup.
* chore: add OPENHUMAN_SENTRY_DSN to release workflow and example secrets
- Included the OPENHUMAN_SENTRY_DSN variable in the release workflow configuration to enhance observability setup.
- Updated the ci-secrets.example.json file to include a placeholder for OPENHUMAN_SENTRY_DSN, providing clarity for developers on required environment variables.
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(onboarding): calmer onboarding with durable deferral + local AI download snackbar
- Add persisted `onboardingDeferredByUser` state so "Set up later" survives
across sessions (no more overlay nagging on every launch)
- Add SetupBanner for non-intrusive "Finish setting up" reminder with resume path
- Convert LocalAIStep to fire-and-forget download, advancing immediately
- Add LocalAIDownloadSnackbar (bottom-left, collapsible) for persistent download
progress that doesn't block the main chrome
- Extract shared helpers (formatBytes, formatEta, progressFromStatus) to localAiHelpers.ts
- Add Vitest tests for overlay gating, banner, and snackbar
Closes#101
* fix(test): remove per-test config mock that overrode global setup exports
The OnboardingOverlay test mocked utils/config with only DEV_FORCE_ONBOARDING,
which shadowed the global mock from setup.ts and dropped IS_DEV — causing
store/index.ts to fail on CI.
Move all 23 memory RPC methods from legacy dispatch (src/rpc/dispatch.rs)
to the controller registry pattern with typed schemas.
- Create src/openhuman/memory/schemas.rs with 23 ControllerSchema
definitions, RegisteredController entries, and handler functions
- Wire memory controllers into src/core/all.rs registry builders
- Remove all memory.* and ai.* branches from dispatch.rs (only
security_policy_info remains)
- Update frontend to use openhuman.memory_* method names directly
in tauriCommands.ts (no legacy aliases needed)
- Move ai.list_memory_files/read/write into memory namespace as
openhuman.memory_list_files/read_file/write_file
- Update jsonrpc.rs and tauriCommandsMemory test method strings
Methods are now accessible via both JSON-RPC (openhuman.memory_*)
and CLI (openhuman memory <function>).
* refactor: enhance service command handling and improve service state checks
- Updated the ServiceBlockingGate component to include additional checks for service installation status, ensuring it accounts for 'Unknown' states.
- Refactored tauriCommands to implement direct service command invocations with error handling, allowing fallback to CLI parsing for service operations (install, start, stop, status, uninstall).
- Introduced a new utility function to parse CLI JSON output into the expected CommandResponse format, improving robustness in service command responses.
- Added new Tauri commands for direct service interactions, enhancing the application's ability to manage service states effectively.
* docs: add debug logging guidelines to CLAUDE.md and enhance ServiceBlockingGate component
- Introduced a new section in CLAUDE.md outlining best practices for debug logging, emphasizing verbose diagnostics, critical checkpoints, structured context, and safety measures.
- Updated the ServiceBlockingGate component to improve operation handling by adding an operating label state, enhancing user feedback during service operations, and refining error handling and logging for better traceability.
* style: add pointer-events none to CSS for improved interaction handling
- Updated index.css to include pointer-events: none; for specific elements, enhancing user experience by preventing unintended interactions.
* style: improve text formatting and readability in ServiceBlockingGate and tauriCommands
- Refactored text in the ServiceBlockingGate component for better readability by consolidating lines.
- Enhanced the formatting of the openhumanServiceStart function in tauriCommands for improved clarity in the method call structure.
* Add unit tests for Mnemonic page
- Introduced comprehensive tests for the Mnemonic page, covering initial render, copy to clipboard functionality, confirmation checkbox behavior, and mode switching between generate and import.
- Validated user interactions, including input handling and button states, ensuring robust functionality and user experience.
- Enhanced test coverage for various scenarios, including validation of mnemonic phrases and loading states during operations.
* test: add cross-stack test coverage for core and tauri flows
Add focused Rust and frontend tests for core process startup behavior, CLI argument parsing, JSON-RPC error handling, and Tauri command/RPC mapping paths to improve confidence for issue #57.
Closes#57
Made-with: Cursor
* refactor(tests): streamline test code and improve readability
Consolidate mock imports and simplify function calls in coreRpcClient tests. Adjust formatting in Rust core_process and CLI tests for better clarity. Update mnemonic test assertions for improved accuracy.
Made-with: Cursor
* fix(e2e): harden deep-link login flow reliability
Stabilize auth deep-link handling and E2E delivery with readiness guards, retries, and new listener unit tests so login/onboarding flows are deterministic for issue #70.
Closes#70
Made-with: Cursor
* refactor(tests): update agent initialization in tests for consistency
Refactor test cases to use a tuple return from `build_agent_with`, improving consistency in agent setup across multiple tests. This change enhances readability and maintains uniformity in the test structure.
Made-with: Cursor
* fix(skills): enforce per-skill runtime tool isolation
Add explicit tool-call origin policy in the QuickJS runtime so skills cannot invoke other skills' tools, while preserving external orchestration through RPC/socket surfaces. Also remove the generic skills_call tool path and document the isolation contract for skill authors.
Closes#94
Made-with: Cursor
* Add unit tests for Mnemonic page
- Introduced comprehensive tests for the Mnemonic page, covering initial render, copy to clipboard functionality, confirmation checkbox behavior, and mode switching between generate and import.
- Validated user interactions, including input handling and button states, ensuring robust functionality and user experience.
- Enhanced test coverage for various scenarios, including validation of mnemonic phrases and loading states during operations.
* test: add cross-stack test coverage for core and tauri flows
Add focused Rust and frontend tests for core process startup behavior, CLI argument parsing, JSON-RPC error handling, and Tauri command/RPC mapping paths to improve confidence for issue #57.
Closes#57
Made-with: Cursor
* refactor(tests): streamline test code and improve readability
Consolidate mock imports and simplify function calls in coreRpcClient tests. Adjust formatting in Rust core_process and CLI tests for better clarity. Update mnemonic test assertions for improved accuracy.
Made-with: Cursor
* fix(e2e): harden deep-link login flow reliability
Stabilize auth deep-link handling and E2E delivery with readiness guards, retries, and new listener unit tests so login/onboarding flows are deterministic for issue #70.
Closes#70
Made-with: Cursor
* feat(memory): connect graph query and doc ingest APIs to frontend
Wire up memory.graph.query and memory.doc.ingest RPC endpoints and
integrate graph relations into the MemoryWorkspace UI, replacing
backend-only entity counts with local graph store data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in MemoryWorkspace and tauriCommands
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: add unit tests for memory graph query, doc ingest, and dispatch routing
Cover the new graph query and doc ingest APIs added in this PR:
- Rust dispatch tests: routing, param validation, unknown method fallthrough
- Frontend tauriCommands tests: Tauri guard, RPC forwarding for memoryGraphQuery/memoryDocIngest
- MemoryWorkspace component tests: graph relations rendering, evidence badges, empty states
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier and cargo fmt formatting in test files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in tauriCommandsMemory test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: merge duplicate tauriCommands import in MemoryWorkspace
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in MemoryWorkspace
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: propagate entity_type from graph relation attrs into retrieval context
build_retrieval_context was discarding entity types that were already
present in relation attrs.entity_types (populated during ingestion by
GLiNER relex). Entities in MemoryRetrievalEntity now carry their type
(e.g. PERSON, PROJECT, WORK_ITEM) instead of always being None.
Adds unit tests for both typed and untyped paths, plus an ignored
GLiNER smoke test (gline_rs_smoke) that verifies the full pipeline
from Notion fixture ingestion through graph storage to retrieval
context with the real ONNX model.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: sanil jain <jainsanil18@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore(workflows): comment out Windows smoke tests in installer and release workflows
* feat(observability): integrate Sentry for error reporting and add configuration support
- Added Sentry integration for error reporting in the application, initializing it in the main function.
- Introduced a new environment variable `OPENHUMAN_SENTRY_DSN` to configure Sentry DSN.
- Updated the observability configuration schema to include a field for Sentry DSN.
- Enhanced logging to include Sentry event filtering based on log levels.
- Implemented secret scrubbing to protect sensitive information in error reports.
* feat(analytics): add support for anonymized analytics settings
- Introduced new environment variable `OPENHUMAN_ANALYTICS_ENABLED` to enable or disable anonymized analytics and crash reports.
- Updated the PrivacyPanel component to sync analytics consent with the core configuration.
- Added new functions to handle analytics settings updates and retrieval in the Tauri backend.
- Enhanced observability configuration to include analytics settings, defaulting to enabled.
- Updated relevant schemas and handlers for analytics settings in the backend.
* refactor(tauriCommands): improve formatting and structure of analytics settings function
- Reformatted the `openhumanUpdateAnalyticsSettings` function for better readability by adjusting the parameter structure.
- Enhanced the output formatting in the `handle_get_analytics_settings` function for improved clarity in the JSON response.
* feat(analytics): sync analytics consent to core RPC and improve anonymization copy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* Add unit tests for Mnemonic page
- Introduced comprehensive tests for the Mnemonic page, covering initial render, copy to clipboard functionality, confirmation checkbox behavior, and mode switching between generate and import.
- Validated user interactions, including input handling and button states, ensuring robust functionality and user experience.
- Enhanced test coverage for various scenarios, including validation of mnemonic phrases and loading states during operations.
* test: add cross-stack test coverage for core and tauri flows
Add focused Rust and frontend tests for core process startup behavior, CLI argument parsing, JSON-RPC error handling, and Tauri command/RPC mapping paths to improve confidence for issue #57.
Closes#57
Made-with: Cursor
* refactor(tests): streamline test code and improve readability
Consolidate mock imports and simplify function calls in coreRpcClient tests. Adjust formatting in Rust core_process and CLI tests for better clarity. Update mnemonic test assertions for improved accuracy.
Made-with: Cursor
* feat(memory): connect graph query and doc ingest APIs to frontend
Wire up memory.graph.query and memory.doc.ingest RPC endpoints and
integrate graph relations into the MemoryWorkspace UI, replacing
backend-only entity counts with local graph store data.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in MemoryWorkspace and tauriCommands
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* test: add unit tests for memory graph query, doc ingest, and dispatch routing
Cover the new graph query and doc ingest APIs added in this PR:
- Rust dispatch tests: routing, param validation, unknown method fallthrough
- Frontend tauriCommands tests: Tauri guard, RPC forwarding for memoryGraphQuery/memoryDocIngest
- MemoryWorkspace component tests: graph relations rendering, evidence badges, empty states
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier and cargo fmt formatting in test files
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in tauriCommandsMemory test
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: merge duplicate tauriCommands import in MemoryWorkspace
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* style: fix Prettier formatting in MemoryWorkspace
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: sanil jain <jainsanil18@gmail.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Expose a model-callable `skills_call` tool in the shared tool registry and add coverage for native dispatcher execution of generic skill invocations. Closes#67.
Made-with: Cursor
Unify tool-call parsing across dispatcher paths and persist parsed fallback calls with stable IDs so execution and history stay aligned end-to-end.
Closes#65
Made-with: Cursor
- Add openhuman-skills submodule pointing to tinyhumansai/openhuman-skills
- Remove openhuman-skills from .gitignore so the submodule is tracked
- Update skill discovery paths in qjs_engine.rs from skills/skills to
openhuman-skills/skills (dev cwd, parent, and bundled resource paths)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace openssl with aes-gcm for AES-256-GCM decryption in rest.rs
- Remove openssl/openssl-sys from Cargo.toml and Cargo.lock
- Use ci_safe_config() in ingestion tests to skip ORT model loading
(avoids Mutex poisoned panic on CI without libonnxruntime)
- Remove serial_test dependency (no longer needed)
- Fix cargo fmt issue in rest.rs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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
CI runner lacks libonnxruntime so ORT Session::builder panics inside
its internal std::Mutex, poisoning it for the parallel test. Running
them serially avoids the second test hitting the poisoned mutex.
- Remove duplicate `libloading` package entry in Cargo.lock that caused
`failed to parse lock file` build errors
- Remove extra blank line in ingestion.rs:1098 to pass cargo fmt check
- Introduced a new job `notify-discord` to send notifications to a Discord channel upon successful release publication.
- The notification includes release details such as title, version, and assets, formatted for clarity.
- Added error handling for missing webhook URL and invalid release IDs to ensure robustness.