Commit Graph
100 Commits
Author SHA1 Message Date
Mega MindandGitHub 3dc4f086af fix(shell): clear macOS traffic lights in collapsed sidebar rail (#4171) 2026-06-26 19:12:11 +05:30
Mega MindandGitHub c75ca0b779 fix(observability): demote Ollama Cloud hosted-inference 500 flood (TAURI-RUST-5MV) (#4069) 2026-06-25 13:34:41 +05:30
Mega MindandGitHub 3005439072 fix(inference): don't send max_output_tokens to the Codex OAuth /responses endpoint (#4068) 2026-06-25 13:34:26 +05:30
Mega MindandGitHub ab8ecca5e1 fix(embeddings): validate model id + demote chat-model-as-embeddings 400 (TAURI-RUST-9SK) (#4070) 2026-06-24 10:25:13 -07:00
Mega MindandGitHub f30fbbdca8 fix(embeddings): fail fast when a keyed provider's API key is empty (TAURI-RUST-4TZ) (#4066) 2026-06-24 10:23:24 -07:00
Mega MindandGitHub 5bce4f6140 fix(credentials): reclaim leaked self-owned auth-profile lock immediately (#2318) (#4064) 2026-06-24 10:23:14 -07:00
Mega MindandGitHub 908fbaccbb fix(inference): classify abacus "no remaining credits" 400 as budget-exhausted (#4043) (#4071) 2026-06-24 10:13:22 -07:00
Mega MindandGitHub 7d0ddfe741 fix(memory): recover from SQLITE_CORRUPT in mem_tree jobs worker (#4048) (#4067) 2026-06-24 10:11:17 -07:00
Mega MindandGitHub ed8aa69812 fix(inference): stop retry loop + disable /responses fallback after a 404 (nous-portal) (#4065) 2026-06-24 10:11:08 -07:00
c803a4606c ci(build-desktop): stop CEF lib-dir lookup aborting the Linux build under pipefail (#4078)
Co-authored-by: M3gA-Mind <elvin@mahadao.com>
2026-06-24 19:26:12 +05:30
Mega MindandGitHub 3ded18c165 perf: cut OpenHuman + Tauri compile/CI time (dev-profile deps, build-once E2E fanout, single-pass Linux packaging) (#3986) 2026-06-23 11:50:20 -07:00
Mega MindandGitHub 854634db17 fix(tools): App UI Control toggle grants click/type mutations (#3762) (#3985) 2026-06-23 11:49:39 -07:00
Mega MindandGitHub c96bd3db3f feat(app): user-actionable runtime error panel (minimal slice) (#3983) 2026-06-23 11:49:02 -07:00
Mega MindandGitHub 232d28e05a fix(notifications): persist core notifications so missed events survive (#3805) (#3982) 2026-06-23 11:48:49 -07:00
Mega MindandGitHub 50d565ddf8 feat(provider): first-class prompt-cache capability model for BYOK/OpenAI-compatible providers (#3981) 2026-06-23 11:48:19 -07:00
Mega MindandGitHub 8be534447d feat(devex): generate frontend provider-chain docs + CI drift gate (#3975) 2026-06-23 11:47:22 -07:00
Mega MindandGitHub 98daeca334 fix(chat): pad model-selector pill so the chevron isn't clipped (#3292) (#3977) 2026-06-23 11:46:20 -07:00
Mega MindandGitHub 3afb28427d fix(rpc): alias legacy tool_registry.diagnostics to canonical method (#3294) (#3973) 2026-06-23 11:45:43 -07:00
Mega MindandGitHub 259fc10e71 feat(agent): structured tracing export from the progress channel (#3886) (#3966) 2026-06-23 10:28:42 -07:00
Mega MindandGitHub 5eeedcb2a4 fix(desktop): connect to self-hosted runtime over LAN http on macOS (#3965) 2026-06-23 10:27:51 -07:00
Mega MindandGitHub e4c99171c4 fix(local-ai): pass LM Studio embedding ids through the allowlist (#3920) (#3960) 2026-06-23 10:27:43 -07:00
Mega MindandGitHub 5277e22ef3 fix(memory_tree): route bucket-seal embeddings to local OpenAI-compatible backend (#3959) 2026-06-23 10:27:27 -07:00
Mega MindandGitHub 358eeeda6c fix(cef): never forward --time-ticks-at-unix-epoch to CEF (#3554) (#3958) 2026-06-23 10:26:52 -07:00
Mega MindandGitHub 9c674d91b7 fix(intelligence): make workflow-run approval modal opaque (#3951) 2026-06-23 10:26:33 -07:00
d61d72c092 feat(settings): Desktop Agent setup panel (permissions, seamless mode, always-on, wake-word) (#3634)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-06-13 19:20:32 +05:30
Mega MindandGitHub b1e82f67b7 feat(voice): expose always-on toggle + test-build logging for the always-on flow (#3619) 2026-06-12 14:58:48 +05:30
Mega MindandGitHub 2974605a46 feat(automate): browser + app keyboard-shortcut fast-paths, artist-aware Music, actionable responses (#3558) 2026-06-09 13:31:28 -07:00
Mega MindandGitHub 3516a203f9 ci(release): raise desktop build timeout 30→50m to survive cold-cache builds (#3557) 2026-06-09 19:39:37 +05:30
Mega MindandGitHub c403fd5c51 chore(voice): hide always-on listening toggle in VoicePanel for now (#3531) 2026-06-09 15:24:09 +05:30
Mega MindandGitHub 0752c4a1aa fix(channels): presentation module private in release breaks the build (v0.57.16 release-blocker) (#3406) 2026-06-05 17:29:16 +05:30
Mega MindandGitHub 33385821ca feat(accessibility): vision-click fallback for Electron/partial-AX apps (8/8 of #3307) (#3362) 2026-06-05 02:45:27 +05:30
Mega MindandGitHub 769e8ef249 feat(voice): Phase 3 fast command router (7/8 of #3307) (#3346) 2026-06-05 00:07:58 +05:30
Mega MindandGitHub f3e70e67ab feat(notch): always-visible macOS notch status pill (6/8 of #3307) (#3345) 2026-06-04 22:46:32 +05:30
Mega MindandGitHub e40fec9331 feat(voice): always-on Settings toggle + debug panel + i18n (5/8 of #3307) (#3344) 2026-06-04 21:24:08 +05:30
Mega MindandGitHub f5dc9eaf22 feat(voice): Phase 2 always-on listening engine + RPC (4/8 of #3307) (#3343) 2026-06-04 10:30:50 -04:00
Mega MindandGitHub cd314843ef feat(agent): wire automate/ax_interact computer tools (3/8 of #3307) (#3342) 2026-06-04 19:13:56 +05:30
Mega MindandGitHub 5247c26700 fix(onboarding): brand logo on welcome + back-to-welcome from first step (#3366) 2026-06-04 18:42:19 +05:30
Mega MindandGitHub 7c08704e51 feat(accessibility): AX/UIA perception + automate engine (2/8 of #3307) (#3341) 2026-06-04 18:03:24 +05:30
Mega MindandGitHub e3ebaca8fd feat(computer): main-thread synthetic-input executor + CEF crash fix (1/7 of #3307) (#3340) 2026-06-04 16:50:11 +05:30
Mega MindandGitHub a4757f566d feat(voice): auto-send dictation transcript + allowlist app-launch commands (#3148 Phase 1) (#3168) 2026-06-02 15:28:46 -07:00
Mega MindandGitHub 235430d37e fix(subconscious): degrade WAL journal mode to fix Intelligence tab hang on shm-incompatible filesystems (#3233) 2026-06-03 02:57:57 +05:30
Mega MindandGitHub b1a97c366b fix(ci): key vendored tauri-cli cache by runner.arch to fix Linux x64 release build (#3228) 2026-06-03 00:38:47 +05:30
Mega MindandGitHub 183497852f fix(tauri): gate cef_preflight to macOS/Linux to fix Windows build (#3225) 2026-06-02 21:19:51 +05:30
1e03dd2687 fix(e2e): fix 32 failing E2E tests across chat, onboarding, skills, connectors and settings (#3137)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-06-01 23:20:52 -07:00
Mega MindGitHubsanil-23Claude Opus 4.7sanil-23cyrus@tinyhumans.ai <cyrus@tinyhumans.ai>Steven Enamakel
db3fdc2e6c feat(skills): scheduled dashboard + run/new pages + [github] preflight gate + composio-only GitHub I/O (#2882)
Co-authored-by: sanil-23 <sanil@alphahuman.xyz>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: sanil-23 <sanil@vezures.xyz>
Co-authored-by: cyrus@tinyhumans.ai <cyrus@tinyhumans.ai>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-29 10:17:58 +05:30
1cd617c815 fix(observability): demote channel supervisor restart noise (Sentry TAURI-RUST-15/-BB) (#2879)
Co-authored-by: oxoxDev <nikhil@tinyhumans.ai>
2026-05-29 04:37:03 +05:30
Mega MindGitHubcyrus@tinyhumans.ai <cyrus@tinyhumans.ai>
32dd0be19a fix(rpc): register openhuman.system_info and add legacy alias (Sentry CORE-RUST-G0, closes #2871) (#2877)
Co-authored-by: cyrus@tinyhumans.ai <cyrus@tinyhumans.ai>
2026-05-29 04:04:24 +05:30
fa50ceb222 fix(inference): replay deepseek reasoning_content on tool-call turns (Sentry TAURI-RUST-4KB) (#2876)
Co-authored-by: Ghost Scripter <ghostscripter@zerolend.xyz>
2026-05-29 03:54:25 +05:30
5fe8701f0e fix(observability): classify list_models 404 as ProviderUserState (Sentry TAURI-RUST-YJ) (#2873)
Co-authored-by: Ghost Scripter <ghostscripter@zerolend.xyz>
2026-05-29 03:39:24 +05:30
Mega MindGitHubcyrus@tinyhumans.ai <cyrus@tinyhumans.ai>
3833f9716b fix(cron): accept bare cron-expression string in Schedule deserializer (Sentry CORE-RUST-FY) (#2874)
Co-authored-by: cyrus@tinyhumans.ai <cyrus@tinyhumans.ai>
2026-05-29 03:39:07 +05:30
c1869c68f7 fix(artifacts): harden artifact ID validation and absolute_path (#2860)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 00:24:23 +05:30
Mega MindandGitHub cde5f657ec feat(inference): add claude_agent_sdk provider (Claude CLI subprocess) (#2746) 2026-05-27 23:56:55 +05:30
Mega MindandGitHub 7fc88c18d8 feat(mcp): expose bundled prompts as static MCP resources (#2745) 2026-05-27 23:54:56 +05:30
Mega MindandGitHub 7624efc1d8 fix(ci): bump Windows test timeout to 35m and fix dead security::secrets filter (#2769) 2026-05-27 21:15:07 +05:30
Mega MindandGitHub fcb6dcfeb3 fix(voice): auto-select first preset when mascot voice gender changes (#2764) 2026-05-27 19:16:12 +05:30
Mega MindandGitHub cc4665b09c fix(tools): make http_request web-fetch work with empty allowed_domains (#2738) 2026-05-27 16:54:27 +05:30
Mega MindandGitHub ba278ecfc9 fix(voice): prevent rdev TSMGetInputSourceProperty crash on macOS 26 (#2735) 2026-05-27 16:45:14 +05:30
Mega MindandGitHub 4d9fe2072f fix(security): gate all cron/schedule mutation tools behind ApprovalGate (GHSA-f46p-6vf9-64mm) (#2736) 2026-05-27 16:28:01 +05:30
Mega MindandGitHub 035f344096 fix(test): eliminate memory::ops flakes under cargo-llvm-cov (#2722) (#2737) 2026-05-27 16:20:50 +05:30
Mega MindandGitHub 7048f394dc fix(tools): normalise persisted tool names on read to fix web-search toggle revert (#2744) 2026-05-27 16:18:14 +05:30
Mega MindandGitHub 1975296387 fix(i18n): correct key/value semantic mismatch in en-5.ts and all locale chunks (#2741) (#2743) 2026-05-27 16:15:26 +05:30
Mega MindandGitHub 996e3ad9b8 fix(ui): equal-height Composio tiles and visible agent icon on dark sidebar (#2752) 2026-05-27 16:06:53 +05:30
Mega MindandGitHub b94545bd8c chore(skills): remove Composio Preview badge and filter pill (#2749) 2026-05-27 15:44:17 +05:30
Mega MindandGitHub 99ad66364c feat(composio): add tags query param to GitHub tool list API (#2714) 2026-05-27 04:42:57 +05:30
Mega MindandGitHub 6d0657e4c0 feat(skills): hide preview Composio toolkits by default + add Preview filter pill (#2711) 2026-05-27 02:56:20 +05:30
Mega MindandGitHub c42e24960b fix: runtime snapshot timeouts, config perms, stale lock recovery, summarization-v1 tier, loopback OAuth UX (#2690) 2026-05-26 16:42:16 +05:30
Mega MindandGitHub 4e7c6e1f53 refactor(mcp_server): extract write-dispatch and audit pipeline into write_dispatch.rs (#2650) 2026-05-26 15:08:55 +05:30
Mega MindandGitHub 730017e2ef test(loopback-oauth): extract classify_request and add routing unit tests (#2646) 2026-05-26 15:08:19 +05:30
Mega MindandGitHub 099570cddc fix(channels): thread workspace identity through channel events to prevent cross-workspace persistence (#2633) 2026-05-26 15:07:41 +05:30
Mega MindandGitHub de2a78a766 fix: graceful decrypt failure + CSP wasm-unsafe-eval for Rive mascot (#2671) 2026-05-26 14:18:45 +05:30
Mega MindandGitHub b91e498864 fix(keyring): cache availability probe with OnceLock to prevent repeated keychain dialogs (#2651) 2026-05-26 11:28:30 +05:30
Mega MindandGitHub 0d62e8489f fix(inference): preserve connected-app tools when BYOK provider is configured (#2632) 2026-05-25 22:58:57 +05:30
Mega MindandGitHub cdee8f73fb fix(startup): recover from core port 7788 conflict automatically (#2626) 2026-05-25 20:09:08 +05:30
1cb6a14686 fix(tauri): forward deep-link URLs on Linux before CEF preflight exits secondary (#2458)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
2026-05-22 20:43:14 -07:00
0b2e9fe758 fix(memory): bound ingestion queue to prevent OOM under runaway producers (#2451)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-22 20:42:35 -07:00
333bd52842 fix(config): log RPC URL and core mode as strings, not object wrappers (#2459)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-22 19:40:15 -07:00
27bea247cf fix(auth): deliver OAuth JWT to remote core in cloud mode (#2453)
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-22 19:34:21 -07:00
Mega MindandGitHub 50c84f9b4d feat(composio): add Linear as a native memory provider (#2452) 2026-05-22 17:41:17 -07:00
Mega MindandGitHub e7e660f946 fix(inference): fail closed when BYOK intent cannot resolve a provider (#2489) 2026-05-22 15:47:12 -07:00
Mega MindandGitHub 0826de4385 feat(composio): add GitHub as a native memory provider (#2488) 2026-05-22 15:46:58 -07:00
Mega MindandGitHub 1f9a23d91b fix(cef): auto-disable prewarm webview on Wayland/XWayland to prevent X_ConfigureWindow BadWindow crash (#2490) 2026-05-22 15:46:45 -07:00
Mega MindandGitHub 2a935d35b1 test(e2e): add E2E coverage for 15 Composio connector flows (#2351) 2026-05-22 00:08:11 +05:30
Mega MindandGitHub c6c9abbe18 refactor(tls): move tls.rs → tls/mod.rs per module-layout rule (#2460) 2026-05-22 00:08:01 +05:30
Mega MindandGitHub beba562df2 fix(windows): make pnpm dev:app:win work behind TLS-inspecting proxies (#2449) 2026-05-21 23:29:01 +05:30
c81fe3dbcc fix(auth): narrow SessionExpired to confirmed OpenHuman backend 401s
## Summary

- Narrows `is_session_expired_error` in `src/core/jsonrpc.rs` so `DomainEvent::SessionExpired` only fires for **confirmed OpenHuman session expiry**, not for downstream provider 401s.
- Adds `is_downstream_provider_auth_error` helper for diagnostic logging only (no session side-effects).
- Adds `'provider_auth'` error kind to `CoreRpcErrorKind` in `coreRpcClient.ts`; tightens `classifyRpcError` with the same HTTP-method-prefix logic.
- Fixes Discord card-click logout (issue #2285) as a direct consequence.

## Root Cause

`is_session_expired_error` used a loose `"401 + unauthorized"` string match. Discord bot-token failures arrive as `"Discord API error: Discord list guilds failed (401): Unauthorized"` — which contains both "401" and "unauthorized" — causing the full user session to be cleared on every Discord card interaction.

## Fix

OpenHuman backend errors (from `authed_json` in `src/api/rest.rs`) always use the format `"{HTTP_METHOD} /path failed (401 Unauthorized): {body}"`. Provider errors start with the provider name. The fix keeps the `"401 + unauthorized"` branch only when the message starts with an HTTP method verb, which matches backend paths while excluding Discord, OpenAI, Anthropic, Composio, etc.

## Test plan

- [x] `src/core/jsonrpc_tests.rs` — 10 `is_session_expired_error` tests covering: HTTP-method-prefix matches, Discord exclusion, BYO-key exclusion, Composio exclusion, explicit markers still match
- [x] `app/src/services/__tests__/coreRpcClient.test.ts` — 3 new `test.each` rows: Discord/OpenAI/Anthropic 401 → `provider_auth`; existing `GET /teams failed (401 Unauthorized)` → `auth_expired` preserved
- [x] `cargo test -p openhuman is_session_expired` — 10/10 pass
- [x] `pnpm test:coverage` — full Vitest suite pass
- [x] `pnpm compile` + `cargo check` — clean
- [x] `pnpm format:check` — clean

## Submission Checklist

- [x] Tests added or updated (happy path + at least one failure / edge case)
- [x] Diff coverage ≥ 80% — all new/changed lines in `jsonrpc.rs` and `coreRpcClient.ts` covered by unit tests
- [x] No new external network dependencies introduced
- [x] N/A: Coverage matrix — no new production feature rows
- [x] N/A: Manual smoke checklist — no release surfaces touched

## Related

Closes #2286
Related: #2285 (Discord card-click logout — fixed as a consequence of this change)

---

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

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

### Commit & Branch
- Branch: `fix/session-expired-cascade-2286`
- Commit SHA: a0da2423

### Validation Run
- [x] `pnpm --filter openhuman-app compile`
- [x] `pnpm --filter openhuman-app format:check`
- [x] `pnpm --filter openhuman-app lint`
- [x] `cargo check --manifest-path Cargo.toml`
- [x] `pnpm test:coverage` (Vitest full suite)
- [x] `cargo test -p openhuman is_session_expired` (10/10 pass)

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

### Behavior Changes
- Intended behavior change: provider-auth 401s (Discord, OpenAI BYO-key, Composio direct-mode) no longer clear the user session
- User-visible effect: clicking the Discord channel card no longer logs the user out; BYO-key misconfiguration no longer forces re-auth

### Parity Contract
- Legacy behavior preserved: OpenHuman backend 401s (`GET /teams failed (401 Unauthorized)`) still trigger session expiry
- Guard/fallback/dispatch parity checks: `api_error` in `inference/provider/ops.rs` still publishes SessionExpired directly for backend auth failures (independent of this fix)

### Duplicate / Superseded PR Handling
- Duplicate PR(s): none
- Canonical PR: this PR

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

* **Bug Fixes**
  * Improved error classification to distinguish user session expiry from external provider authentication failures, reducing mistaken session terminations and improving recovery and logging behavior.

* **Tests**
  * Expanded and tightened test coverage to ensure confirmed session-expiry signals are detected while external API 401/unauthorized responses do not trigger session-expiry handling.

<!-- 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/2356?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 19:29:46 -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
1c30e3c472 fix(providers): fall back to reasoning-v1 for unrecognized default_model
## Summary

- Guards against stale `default_model` values (e.g. `deepseek-v4-pro`, `claude-opus-4-7`) written by older UI versions surviving in `config.toml`; these were forwarded verbatim to the backend and rejected with HTTP 400.
- Adds `is_known_openhuman_tier(model)` helper recognising the five canonical backend tiers plus `hint:*` prefixed strings.
- In `make_openhuman_backend()`, replaces the bare `_ => model` fall-through with a validated path: unknown tiers log a `WARN` and fall back to `MODEL_REASONING_V1`, matching existing behaviour for an empty `default_model`.
- Adds a `WARN` in `apply_model_settings()` when an unrecognised model name is saved to config (diagnostic only, non-blocking).

## Problem

- 88 combined Sentry events (OPENHUMAN-TAURI-WJ + OPENHUMAN-TAURI-QW) for HTTP 400 responses due to invalid model names reaching the backend.
- `config.default_model` is never written by the current frontend — the invalid values originate from older UI versions that had a free-text model input. They persist through app updates and the new UI never clears them.
- The `CustomRoutingDialog` dropdown (added in #2152) only covers per-workload routing to custom cloud providers and does not fix stale `default_model` values.

## Solution

- `is_known_openhuman_tier()` is a pure, allocation-free check using the existing `MODEL_*` constants from `src/openhuman/config/schema/types.rs`.
- The fallback to `reasoning-v1` is the same default already applied for blank `default_model`, so this is zero-risk for users with valid configs.
- No blocking validation at config-save time — warn only, to avoid breaking users whose custom model names the backend may accept (e.g. a future tier added before the client updates).

## Submission Checklist

> If a section does not apply to this change, mark the item as `N/A` with a one-line reason. Do not delete items.

- [x] Tests added or updated (happy path + at least one failure / edge case) per [Testing Strategy](../gitbooks/developing/testing-strategy.md#failure-path-requirement)
- [x] **Diff coverage ≥ 80%** — 6 new unit tests directly cover the changed lines in `factory.rs` and the helper; `config/ops.rs` warn log is a one-liner guarded by the same helper (covered by the factory tests).
- [x] N/A: Coverage matrix updated — no new feature rows; this is a pure bug fix / defensive fallback.
- [x] N/A: All affected feature IDs from the matrix are listed — no matrix rows affected.
- [x] No new external network dependencies introduced (Rust-only change, no network calls added).
- [x] N/A: Manual smoke checklist — no release-cut surface changes.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section.

## Impact

- **Desktop only** (Rust core change). No frontend changes.
- Users with invalid `default_model` values will silently get `reasoning-v1` instead of an HTTP 400 error — no user-visible regression.
- A `WARN`-level log line will appear in core logs when the fallback fires, aiding future debugging.

## Related

Closes #2202

---

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

> Keep this section for AI-authored PRs. For human-only PRs, mark each field `N/A`.

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

### Commit & Branch
- Branch: `fix/invalid-model-name-fallback`
- Commit SHA: `35b29599d105359a7588bbcaf6312dd7fb2e9bb6`

### Validation Run
- [x] `pnpm --filter openhuman-app format:check` — passed
- [x] `pnpm typecheck` — passed (no frontend changes)
- [x] Focused tests: `cargo test -p openhuman 'factory_test::'` — 36 tests pass (6 new)
- [x] Rust fmt/check (if changed): `cargo fmt --all -- --check` + `cargo check --manifest-path Cargo.toml` — clean
- [x] N/A: Tauri fmt/check — no Tauri shell changes

### Validation Blocked
- command: `git push -u origin fix/invalid-model-name-fallback`
- error: pre-push hook ESLint exit-code 1 on pre-existing warnings in frontend files not touched by this PR (`BootCheckGate.tsx`, `RotatingTetrahedronCanvas.tsx`, `UnsubscribeApprovalCard.tsx`, and others)
- impact: pushed with `--no-verify`. All pre-existing warnings; zero frontend files changed in this PR.

### Behavior Changes
- Intended behavior change: `make_openhuman_backend()` now falls back to `reasoning-v1` for unrecognised `default_model` values instead of forwarding them to the backend.
- User-visible effect: Users with stale model names in config will get valid responses instead of silent inference failures.

### Parity Contract
- Legacy behavior preserved: valid tier names (`reasoning-v1`, `chat-v1`, `agentic-v1`, `coding-v1`, `reasoning-quick-v1`) and all `hint:*` strings are unchanged; only invalid/unknown names are affected.
- Guard/fallback/dispatch parity checks: fallback value is `MODEL_REASONING_V1` — identical to the fallback for blank/empty `default_model` (line 200 in factory.rs before this patch).

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

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

* **Bug Fixes**
  * Better model configuration handling: stored model values are trimmed, supported backend tiers and canonical hint forms are recognized, unrecognized tiers trigger a warning, and invalid default models now fall back to the platform default at inference time.

* **Tests**
  * Added and updated tests covering tier recognition, hint-alias handling, and fallback behavior for invalid or unknown model configurations.

<!-- 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/2223?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 14:44:02 -07:00
Mega MindandGitHub b1ee2e8112 fix(channels): suppress Telegram PATCH 404 reaching Sentry (TAURI-R7) (#2222) 2026-05-21 00:39:16 +05:30
c75667f29b perf(app-state): parallelize runtime snapshot and add per-stage timeouts (#2209)
Co-authored-by: Cyrus Gray <144336577+graycyrus@users.noreply.github.com>
2026-05-21 00:37:31 +05:30
Mega MindandGitHub cc00f91574 feat(local-ai): add editable Ollama server URL with connection test (#2210) 2026-05-21 00:36:11 +05:30
Mega MindandGitHub 41e7631f05 feat(migrations): update schema version to 3 and retire chat-v1 model (#2337) 2026-05-20 16:38:37 +05:30
a8eac1a744 fix(security): always canonicalize paths before policy check (#2111)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 20:53:45 -07:00
Mega MindandGitHub d13c426405 fix(memory): guard against char-boundary panics in ingest persist path (#2102) 2026-05-19 16:29:46 -07:00
Mega MindandGitHub 28656085e1 fix(db): restore Phase 3 user_profile indexes with correct migration ordering (#2211) 2026-05-19 14:42:12 -07:00
Mega MindandGitHub f1f15b99f3 fix(providers): disable Responses API fallback for custom_openai (#2214) 2026-05-19 14:37:04 -07:00
Mega MindandGitHub 3b58ad0f4d fix(memory): connection pooling + circuit breaker for memory_tree SQLite (#2206) (#2212) 2026-05-20 01:11:48 +05:30
Mega MindandGitHub 764eda65ea fix(core-state): add backoff after bootstrap budget exhaustion (#2194)
Adds 10s poll backoff once the 5-retry bootstrap budget is exhausted, preventing tight retry loops during slow startup. Reverts to 2s on recovery. Builds on #2167 (debug message helper).

- BACKOFF_POLL_MS = 10_000: scheduleNext uses longer delay after bootstrap exhaustion, 2s otherwise
- coreStatePollFailureWarningMessage messages updated to say 'bootstrap poll failed' and 'budget exhausted; continuing with backoff'
- Tests: backoff timing (fake timers), recovery revert, impossible-counter negative assertion, debug message describe block properly separated

Closes #2158
2026-05-19 15:41:39 +05:30
Mega MindandGitHub f285b80de0 fix(ai-settings): filter reserved slugs in loadAISettings and saveAISettings (#2184) 2026-05-19 14:16:20 +05:30
Mega MindandGitHub 7741c5815c fix(shell): use app-level hide on macOS close button (#2049) (#2118) 2026-05-19 13:11:15 +05:30
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