Commit Graph
159 Commits
Author SHA1 Message Date
Steven EnamakelandGitHub 3e5a083793 feat(ios): iOS client with QR pairing, E2E-encrypted tunnel, and push-to-talk (#1420) 2026-05-23 01:44:50 -07:00
Srinivas VaddiandGitHub c6f5a8bb35 Add custom GIF mascot avatar override (#2347) 2026-05-23 00:57:15 -07:00
48548a223b feat(app): UI control for max_actions_per_hour (#2486) (#2500)
Co-authored-by: Chen Qian <cq@Chens-MacBook-Pro.local>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 00:52:54 -07:00
Aqil AzizandGitHub 05e1e5de9e test(e2e): add stable UI hooks (#2421) 2026-05-22 17:53:05 -07:00
Cyrus GrayandGitHub 50172f4f3b Fix provider setup error wrapping (#2369) 2026-05-22 17:47:30 -07:00
4e5eaa71a2 feat(settings): add MCP server configuration panel
## Summary

- Adds a **MCP Server** panel under Settings → Developer Options so users can configure external MCP clients without hand-editing JSON files
- New Tauri commands `mcp_resolve_binary_path` (returns binary path + OS) and `mcp_open_client_config` (opens the client's config file in the system editor)
- Generates correct per-client JSON snippets for Claude Desktop, Cursor, Codex, and Zed — OS-aware config file paths for macOS, Windows, and Linux
- Copy-to-clipboard and "Open Config File" (Tauri-only) buttons eliminate the manual setup steps that were blocking non-developer adoption

## Problem

- The `openhuman-core mcp` stdio server ships 10 memory/tree tools but has zero UI surface — users must locate the binary, find the per-client config file path, and hand-write the JSON
- Conversion drops to near-zero outside of developers; this is the bottleneck on MCP adoption for the features already merged in #1760, #1790, #1974

## Solution

- `app/src-tauri/src/mcp_commands.rs`: two new Tauri shell commands with OS-aware path resolution, auto-create config dirs/files if absent, and platform-specific `open`/`explorer`/`xdg-open` dispatch
- `McpServerPanel.tsx`: reads binary path on mount via `invoke`, generates the correct snippet shape per client (Zed uses `context_servers`, others use `mcpServers`), gracefully degrades when binary is not found
- Binary path resolution handles dev mode (walks up to `target/debug/`), env override (`OPENHUMAN_CORE_BINARY_PATH`), and release mode (sibling of host exe)
- All user-visible strings go through the i18n system; component is Tauri-gated for "Open Config File"

## Submission Checklist

- [x] Tests added or updated (happy path + at least one failure / edge case) — 8 Vitest tests + 9 Rust unit tests covering all client/OS combinations, clipboard copy, binary error fallback, Tauri gate
- [x] **Diff coverage ≥ 80%** — `pnpm test:coverage` passes; new React component and Rust pure functions are fully covered; Tauri command wrappers and release-mode binary path are not testable without a packaged build (noted in PR as a known caveat)
- [x] N/A: Coverage matrix — no new feature rows required; this surfaces existing MCP feature ID `11.1.4` in the UI
- [x] All affected feature IDs from the matrix listed below under Related
- [x] N/A: No new external network dependencies — no network calls; binary resolution is local filesystem only
- [x] N/A: Manual smoke checklist — not a release-cut surface
- [x] Linked issue closed via `Closes #2030`

## Impact

- Desktop only (macOS, Windows, Linux) — uses Tauri shell commands; web/CLI unaffected
- No performance implications; panel is lazy-loaded via routing
- Binary path resolution degrades gracefully if `openhuman-core` is not bundled in the packaged app — shows a build instruction fallback message

## Related

- Closes #2030
- Feature ID: `11.1.4` (MCP stdio server)
- Builds on: #1760, #1790, #1974
- Follow-up: verify `openhuman-core` binary is included in the packaged `.app` bundle (sidecar was removed in #1061; if the binary is not bundled the panel will show the fallback message in production)

---

## AI Authored PR Metadata (required for Codex/Linear PRs)

### Linear Issue
- Key: N/A
- URL: N/A

### Commit & Branch
- Branch: `feat/mcp-settings-panel`
- Commit SHA: 85e091db

### Validation Run
- [x] `pnpm --filter openhuman-app format:check`
- [x] `pnpm typecheck`
- [x] Focused tests: `pnpm debug unit McpServerPanel.test.tsx` — 8/8 passed
- [x] Rust fmt/check (if changed): `cargo fmt --check` + `cargo check --manifest-path app/src-tauri/Cargo.toml` — clean
- [x] Tauri fmt/check (if changed): included above

### Validation Blocked
- `command:` N/A
- `error:` N/A
- `impact:` N/A

### Behavior Changes
- Intended behavior change: Adds MCP Server panel to Settings → Developer Options with snippet generator and config file opener
- User-visible effect: Users can now configure Claude Desktop, Cursor, Codex, or Zed to use OpenHuman's MCP server in a few clicks instead of hand-editing JSON

### Parity Contract
- Legacy behavior preserved: No existing behavior changed; purely additive
- Guard/fallback/dispatch parity checks: `isTauri()` guard on "Open Config File" button; binary-not-found degrades to placeholder with build instructions

### Duplicate / Superseded PR Handling
- Duplicate PR(s): None
- Canonical PR: This PR
- Resolution: N/A

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **New Features**
  * Added an "MCP Server" settings panel under Developer Options with tabs for multiple clients (Claude Desktop, Cursor, Codex, Zed)
  * Shows resolved MCP/OpenHuman binary status, generates client-specific JSON snippets, copy-to-clipboard, and an "Open Config File" action when available

* **Tests**
  * Added UI tests for rendering, snippet content, copy behavior, binary-failure fallback, and open-config action

* **Localization**
  * Added translations for the MCP Server UI across many languages

<!-- review_stack_entry_start -->

[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2355?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: M3gA-Mind <megamind@mahadao.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-20 17:01:46 -07:00
0f5e91421b test(e2e): use stable cron test ids
## Summary

- Adds shared `waitForTestId` and `clickTestId` E2E helpers for stable DOM hooks.
- Adds missing `cron-jobs-panel` and `cron-refresh` hooks to the Cron Jobs settings panel.
- Migrates the reference cron E2E flow away from Tailwind class/DOM walking to cron row/action test IDs.
- Documents the E2E `data-testid` naming taxonomy in the E2E guide.

## Problem

- #1861 calls out `cron-jobs-flow.spec.ts` as the concrete example of brittle selectors: it found `morning_briefing` via Tailwind class strings and `closest('div.p-4')`.
- That breaks on harmless class/layout refactors and makes the reference spec a weak template for future E2E work.

## Solution

- Use existing `CoreJobList` cron row/action hooks directly from the spec.
- Add the missing panel/refresh hooks so the whole cron flow can avoid text/button discovery for row actions.
- Centralize test ID waiting/clicking in `element-helpers.ts` instead of keeping local DOM snippets in specs.

## Submission Checklist

- [x] Tests added or updated (happy path + at least one failure / edge case) per [Testing Strategy](../gitbooks/developing/testing-strategy.md#failure-path-requirement) - updated the reference cron E2E spec and helper path.
- [x] **Diff coverage >= 80%** - N/A locally: E2E helper/spec/doc change; CI diff coverage is authoritative.
- [x] Coverage matrix updated - N/A: E2E selector-hardening change, no feature row added/removed/renamed.
- [x] All affected feature IDs from the matrix are listed in the PR description under `## Related` - N/A: no matrix feature ID applies.
- [x] No new external network dependencies introduced (mock backend used per [Testing Strategy](../gitbooks/developing/testing-strategy.md#mock-policy))
- [x] Manual smoke checklist updated if this touches release-cut surfaces ([`docs/RELEASE-MANUAL-SMOKE.md`](../docs/RELEASE-MANUAL-SMOKE.md)) - N/A: no release-cut surface.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section - N/A: this is a scoped slice that references #1861 without closing the broader audit issue.

## Impact

- Runtime impact: none outside stable `data-testid` attributes on the Cron Jobs panel.
- Test impact: cron E2E is less coupled to Tailwind classes and container structure.
- Compatibility: `waitForTestId` is documented as tauri-driver/DOM-backed; Mac2 specs should keep accessibility/text helpers unless IDs are mirrored into accessible labels.

## Related

- Refs #1861
- Follow-up PR(s)/TODOs: add stable hooks/migrations for the remaining settings, skills, conversation, onboarding, and notification E2E surfaces tracked by #1861.

---

## AI Authored PR Metadata (required for Codex/Linear PRs)

### Linear Issue
- Key: N/A
- URL: N/A

### Commit & Branch
- Branch: `codex/1861-cron-e2e-testids`
- Commit SHA: `28eca40a3d2e3a75b61105887e4faf58d4c0866e`

### Validation Run
- [x] `pnpm --filter openhuman-app exec prettier --check src/components/settings/panels/CronJobsPanel.tsx test/e2e/helpers/element-helpers.ts test/e2e/specs/cron-jobs-flow.spec.ts` - passed
- [x] `pnpm typecheck` - passed
- [x] Focused tests: N/A, E2E spec migration not run locally
- [x] Rust fmt/check (if changed): `cargo fmt --all --check` - passed; `git diff --check` - passed
- [x] Tauri fmt/check (if changed): N/A

### Validation Blocked
- `command:` `pnpm --filter openhuman-app exec tsc -p test/tsconfig.e2e.json --noEmit`
- `error:` local command could not find `tsc` / `@wdio/globals/types` via that invocation
- `impact:` app-wide `pnpm typecheck` passes; remote E2E/TS jobs remain authoritative for the E2E tsconfig

### Behavior Changes
- Intended behavior change: none for users; E2E selectors now target stable hooks.
- User-visible effect: none.

### Parity Contract
- Legacy behavior preserved: cron load, refresh, pause/resume, run-history, and remove behavior unchanged.
- Guard/fallback/dispatch parity checks: spec still asserts the same UI and sidecar persistence behavior.

### Duplicate / Superseded PR Handling
- Duplicate PR(s): N/A
- Canonical PR: this PR
- Resolution (closed/superseded/updated): N/A


<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

* **Tests**
  * Added E2E helpers and updated cron-jobs flow to use stable test identifiers for more reliable UI interactions and polling.

* **Documentation**
  * Added guidance on stable test ID naming and how to use the new E2E helpers in the testing guide.

* **Maintenance**
  * Cron Jobs panel and controls now expose stable identifiers for testing (no user-facing behavior changes).

<!-- review_stack_entry_start -->

[![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/tinyhumansai/openhuman/pull/2301?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack)

<!-- review_stack_entry_end -->
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: aqilaziz <gonzes7@gmail.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-20 16:51:38 -07:00
Mega MindandGitHub cc00f91574 feat(local-ai): add editable Ollama server URL with connection test (#2210) 2026-05-21 00:36:11 +05:30
oxoxDevandGitHub 1ae31ba14c fix(core-rpc): demote timeout unhandled-rejections + classify in client (#REACT-15+) (#2196) 2026-05-19 20:22:54 -07:00
ee34387f2e feat(providers): add OrcaRouter as built-in cloud provider (#2187)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 20:19:28 -07:00
CodeGhost21andGitHub 14ee688ff3 test(settings): backfill unit tests for team / billing / notifications panels (#1870) (#2089) 2026-05-19 19:50:33 -07:00
82df98f419 fix(i18n): localize settings developer menu (#2250)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 19:49:22 -07:00
Yuvraj Singh SisodiyaandGitHub e9205225b8 feat(app): desktop companion UI — Tauri bridge, overlay, settings (#1909) (#2246) 2026-05-19 16:49:57 -07:00
Aqil AzizandGitHub 8dbec71b80 fix(voice): allow local provider selection before install (#2257) 2026-05-19 16:49:23 -07:00
KyleandGitHub a1c74f1539 i18n: replace hardcoded Settings UI strings with t() calls (fixes #2225) (#2258) 2026-05-19 16:48:54 -07:00
oxoxDevandGitHub 272a6b063c fix(core,app): authenticate /events/webhooks SSE with per-launch core RPC bearer (#1922) (#2114) 2026-05-19 16:43:53 -07:00
obchainandGitHub 6a83409a4c feat(migration): OpenClaw import surface + unblock unified-core Apply (#2087) 2026-05-19 14:43:31 -07:00
b6552ea1c7 feat(channels): surface Lark/Feishu and DingTalk in the Settings UI (#2048) (#2083)
Co-authored-by: 李冠辰 <liguanchen@xiaomi.com>
2026-05-19 14:41:52 -07:00
b2ecdba4a8 test(cron): add stable job row selectors (#2062)
Co-authored-by: honor2030 <9779460+honor2030@users.noreply.github.com>
2026-05-19 14:34:54 -07:00
1f98614869 feat(inference): gate local Ollama models by memory-layer context-window minimum (#2122)
Co-authored-by: Cyrus Gray <cyrus@tinyhumans.ai>
2026-05-19 19:40:06 +05:30
3aa2984e3f feat(billing): drop rate-limit UI, surface cycle usage insights (#2027)
Co-authored-by: M3gA-Mind <megamind@mahadao.com>
2026-05-19 17:25:02 +05:30
81a0faef9d feat(memory): #1574 Stage 2 — per-(row,model) embedding storage live (cutover + migration + re-embed backfill + switch UX) (#2153)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 01:31:11 -07:00
Steven EnamakelandGitHub 16b35af570 feat(ai-panel): per-workload temperature + endpoint URL UX for local runtimes (#2165) 2026-05-18 22:04:54 -07:00
Mega MindandGitHub a719d781d1 feat(ai-panel): add chat workload and cloud model picker with slug-based lookup fix (#2152) 2026-05-18 15:04:57 -07:00
Steven EnamakelandGitHub 0b053c55f5 feat(mascot): locale-aware voice + multilingual LLM replies (#2115) 2026-05-18 07:28:14 -07:00
Steven EnamakelandGitHub 0ad72dccfa feat(theme): dark mode + UI primitives standardization (#2046) 2026-05-17 23:01:27 -07:00
Steven EnamakelandGitHub b43bba7dac test: expand and stabilize settings e2e coverage (#2024) 2026-05-17 15:15:21 -07:00
Steven EnamakelandGitHub 476d7e3992 i18n: full UI coverage across 10 languages (#1986) 2026-05-17 14:19:59 -07:00
Steven EnamakelandGitHub 95f1f5f063 Refactor inference around external Ollama routing (#1975) 2026-05-17 02:37:42 -07:00
Steven EnamakelandGitHub 2e58438aa9 test(e2e): onboarding simple vs advanced mode spec (#1989) 2026-05-17 02:02:25 -07:00
c7052709e7 Add background loop controls and usage diagnostics (#1965)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-17 01:35:55 -07:00
Steven EnamakelandGitHub 40a384ed65 feat(wallet): add default rpc and EVM execution tools (#1964) 2026-05-16 15:12:09 -07:00
Steven EnamakelandGitHub 59c5c53a93 feat(mascot): backend mascot library + meeting-bot banner (#1894) 2026-05-16 00:51:09 -07:00
f90a337bc0 Add agent task orchestration (#1768)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 21:36:08 -07:00
Steven EnamakelandGitHub 86b57281dc feat(providers): slug-keyed cloud providers + per-workload model routing (#1888) 2026-05-15 21:19:07 -07:00
159c0aa8fe Improve reset local data guidance for locked Windows files (#1811)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 20:32:14 -07:00
6872eb0139 feat: add Indonesian locale (#1884)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 20:27:21 -07:00
Steven EnamakelandGitHub 05de1c4e8a feat: redesign onboarding, boot, and LLM settings end-to-end (#1885) 2026-05-15 19:28:51 -07:00
02cf2cee3e feat: add Chinese (简体中文) i18n support (#1518)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 16:11:40 -07:00
e052aadfe9 feat(ai): unified per-workload provider routing + chat-provider factory (#1710) (#1858)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 15:54:06 -07:00
3e148f66cb feat(composio): bring-your-own Composio direct mode (#1710) (#1825)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 15:21:27 -07:00
obchainandGitHub 05451f5c33 feat(voice): configurable mascot voice with ElevenLabs picker (#1821) 2026-05-15 13:57:15 -07:00
3165306bd1 feat(voice): fully-local STT + TTS via Whisper/Piper provider factory (#1755)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 14:27:51 -07:00
Steven EnamakelandGitHub 7b95c37aee test: expand unit + e2e coverage from test-map across core domains (#1724) 2026-05-14 04:58:07 -07:00
Pranav AgarkarandGitHub 1699378c80 fix(settings): add type=button to analytics toggle for Windows WebView2 (#1698) (#1722) 2026-05-14 04:46:51 -07:00
Steven EnamakelandGitHub c18530f594 fix(settings): round-trip LLM provider model_routes and consolidate UI (#1660) 2026-05-13 11:24:40 -07:00
Steven EnamakelandGitHub 943489858f feat(settings): add mascot color customization (closes #1651) (#1667) 2026-05-13 11:15:06 -07:00
91eb90b4ad Document OpenHuman portfolio readiness cleanup (#1661)
Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
2026-05-13 10:54:50 -07:00
c05de9274a test: wait for local model usage flags to load (#1643)
Co-authored-by: honor2030 <19909783+honor2030@users.noreply.github.com>
2026-05-13 22:43:09 +05:30
Steven EnamakelandGitHub 74a08c8ad6 fix(auth): offer "clear app data" recovery when login decryption fails (#1652) 2026-05-13 09:29:54 -07:00