* 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.
All 26 agent tests shared std::env::temp_dir() as workspace, causing
them to contend on the same SQLite database file when running in
parallel. This caused flaky "database is locked" failures in CI
(e.g. clear_history_resets_conversation).
Fix: each test helper now creates its own tempfile::TempDir, returning
it alongside the Agent so it stays alive for the test duration.
Verified: 36/36 pass across 5 consecutive runs with zero flakiness.
- Introduced `.claude/memory.md` to document fixes, gotchas, strict rules, workflow, and environment setup.
- Aims to streamline onboarding and provide quick reference for common issues and workflows.
- 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
- Added `.claude/memory.md` to serve as a centralized quick reference for project fixes, gotchas, rules, and workflows.
- Documented `memory-keeper` agent's purpose and guidelines in `.claude/agents/memory-keeper.md`.
- Ensured concise formatting and strict update rules for maintaining institutional knowledge.
Extends WebSearchTool with a `parallel` provider backed by the
Parallel Search API (POST /v1beta/search). Includes API key loading
from env vars, encrypted persistence mirroring Brave, structured result
parsing with excerpt truncation, and full unit test coverage using
mocked JSON responses. Defaults are unchanged (duckduckgo).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>