Commit Graph
94 Commits
Author SHA1 Message Date
a472d6fd7d fix(memory-workspace): toast + Reveal Folder fallback for View Vault (#2281)
## Summary

- Wire a toast on every click of **View Vault** so users always see a result; surface the vault path in the toast.
- Add a **Reveal Folder** fallback action so users without Obsidian still have an OS-native escape hatch to inspect the vault.
- Add a `revealPath` helper (wraps `tauri-plugin-opener`'s `revealItemInDir`) + `opener:allow-reveal-item-in-dir` capability so the renderer can drive a Finder/Explorer reveal.
- 6 new Vitest cases cover the success-toast, reveal-fallback, error-toast, and reveal-error branches.

## Problem

`MemoryWorkspace.tsx` View Vault sent `obsidian://open?path=...` through `openUrl` and relied on the host OS to launch Obsidian. When Obsidian is not installed, the OS shell (LaunchServices on macOS, xdg-open on Linux, ShellExecute on Windows) accepts the URL handoff but launches nothing. No toast, no error, no fallback — the button looks broken to non-technical users.

## Solution

- New `revealPath(path)` helper in `app/src/utils/openUrl.ts` wraps `revealItemInDir` from `@tauri-apps/plugin-opener`. No-op outside Tauri.
- Capability `app/src-tauri/capabilities/default.json` adds `opener:allow-reveal-item-in-dir`.
- `MemoryWorkspace.tsx` replaces the silent module helper with a `handleViewVault` callback. On click:
  - Try `openUrl(obsidian://...)`.
  - On success: emit an `info` toast that names the vault path and exposes a **Reveal Folder** action.
  - On error: emit an `error` toast with the same **Reveal Folder** action.
  - **Reveal Folder** calls `revealPath(content_root_abs)`; if that fails too, surface a final error toast with the underlying message.
- New i18n keys (`workspace.openingVault*`, `workspace.openVaultFailed*`, `workspace.revealFolder`, `workspace.revealVaultFailed`) added to `en.ts` + `en-3.ts`, with English fallback into all 11 non-en `-3` chunks so `pnpm i18n:check` exits 0.

## Submission Checklist

- [x] Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy — 6 new Vitest cases across `MemoryWorkspace.test.tsx` and `openUrl.test.ts`.
- [x] **Diff coverage ≥ 80%** — every new branch in `handleViewVault` and `revealPath` has a dedicated test.
- [x] Coverage matrix updated — N/A: behaviour-only fix for an existing UI affordance; no new feature row needed.
- [x] All affected feature IDs from the matrix are listed in the PR description under `## Related` — N/A: no matrix row affected.
- [x] No new external network dependencies introduced — no network calls added.
- [x] Manual smoke checklist updated if this touches release-cut surfaces — N/A: not on the release-cut surface list.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section.

## Impact

- **Runtime/platform**: desktop (mac/win/linux). No mobile/web/CLI surfaces touched.
- **Performance**: zero — a single extra toast emit + (optional, user-driven) `revealItemInDir` IPC call.
- **Security**: new capability permission is read-only filesystem-reveal scoped to the host file manager; no path escape.
- **Migration / compatibility**: backward-compatible. Existing `obsidian://` deep-link behaviour preserved for users with Obsidian installed.

## Related

- Closes: #2281
- Follow-up PR(s)/TODOs: maintainer-side translations of the new keys (English fallback shipped so `i18n:check` passes).

---

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

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

### Commit & Branch
- Branch: `fix/2281-view-vault-no-feedback`
- Commit SHA: 964c122b3b

### Validation Run
- [x] `pnpm --filter openhuman-app format:check`
- [x] `pnpm typecheck`
- [x] Focused tests: `pnpm test src/utils/openUrl.test.ts src/components/intelligence/__tests__/MemoryWorkspace.test.tsx` (23/23 pass); full `pnpm test` (2880 pass, 3 skipped).
- [x] Rust fmt/check (if changed): N/A — no Rust changes.
- [x] Tauri fmt/check (if changed): N/A — Tauri capability JSON only.

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

### Behavior Changes
- Intended behavior change: Clicking **View Vault** now always emits a toast with the vault path and a **Reveal Folder** fallback, instead of silently no-op-ing when Obsidian is not installed.
- User-visible effect: visible toast + working fallback on every click.

### Parity Contract
- Legacy behavior preserved: `obsidian://` deep link still dispatched first; users with Obsidian installed see Obsidian launch as before.
- Guard/fallback/dispatch parity checks: `openUrl` reject path still propagates non-http scheme errors; new error branch in `handleViewVault` surfaces those as user-facing toasts.

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


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

## Summary by CodeRabbit

* **New Features**
  * Users can now open Obsidian vaults directly from the MemoryWorkspace with improved error handling.
  * Added "Reveal Folder" action to vault operations for quick file system access when issues occur.
  * Enhanced feedback with toast notifications for success and failure states.

* **Documentation**
  * Added translations for vault-opening workflows in 12+ 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/2289?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: obchain <riteshnikhoriya94@gmail.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-20 15:16:08 -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
9376ffc19f fix(onboarding): raise snapshot timeout + staged still-working UI (#2156) (#2179)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 21:08:59 -07:00
obchainandGitHub 7cbe82de52 fix(composio): collect Dynamics 365 org name via required-fields registry (#2127) (#2181) 2026-05-19 20:00:50 -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
Navneet SinghandGitHub a03c1c4dfa feat(i18n): add Korean locale (#2241) 2026-05-19 16:50:09 -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
KyleandGitHub a1c74f1539 i18n: replace hardcoded Settings UI strings with t() calls (fixes #2225) (#2258) 2026-05-19 16:48:54 -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
62a9633c2d fix(i18n): translate contextGathering errorDesc across 8 remaining locales (#1917) (#2057)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 14:20:22 -07:00
f1257c59f9 fix(i18n): translate zh-CN contextGathering errorDesc (#1917) (#2042)
Co-authored-by: 李冠辰 <liguanchen@xiaomi.com>
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
2026-05-19 12:18:12 -07:00
afe1147422 fix(onboarding): clarify continue to chat fallback (#2173)
Co-authored-by: Ajay Kumar Reddy Nelavetla <ajay@Ajays-MacBook-Air.local>
2026-05-19 21:12:00 +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
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 4c2a04b6e4 fix(i18n): fix ~80 broken/placeholder strings in en.ts (#2144) 2026-05-18 14:52:46 -07:00
Steven EnamakelandGitHub 0b053c55f5 feat(mascot): locale-aware voice + multilingual LLM replies (#2115) 2026-05-18 07:28:14 -07:00
Steven EnamakelandGitHub b709941e2e refactor(staging): dark mode polish, theme toggle, i18n restore + debug probe (#2095) 2026-05-18 07:06:34 -07:00
Steven EnamakelandGitHub d5cef57cfd feat(i18n): translate ~3,900 strings across 9 locales + add Italian (#2070) 2026-05-18 03:32:14 -07:00
Steven EnamakelandGitHub 0ad72dccfa feat(theme): dark mode + UI primitives standardization (#2046) 2026-05-17 23:01:27 -07:00
Steven EnamakelandGitHub 476d7e3992 i18n: full UI coverage across 10 languages (#1986) 2026-05-17 14:19:59 -07:00
Steven EnamakelandGitHub f9de38d6f9 Add WeChat embedded webview support (#1991) 2026-05-17 02:38:10 -07:00
9400f77364 fix: surface expired Composio auth state (#1893)
Co-authored-by: honor2030 <19909783+honor2030@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-16 20:41:20 -07:00
MonkingandGitHub 1ecb0e27e0 fix(i18n): complete zh-CN onboarding translations (#1981) 2026-05-16 20:28:13 -07:00
320fd6c74c feat(conversations): dedicated worker-thread UI surface (#1624) (#1812)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 21:18:36 -07:00
258837e17b composio: preserve Composio tool error semantics instead of bucketing as 502 (#1797) (#1827)
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 20:59:52 -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
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
91eb90b4ad Document OpenHuman portfolio readiness cleanup (#1661)
Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
2026-05-13 10:54:50 -07:00
256f004c36 feat(local_ai): unify memory embeddings — cloud Voyage default + live local toggle + dev infra (#1640)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 09:16:59 -07:00
84d86da70e fix(ipc): guard isTauri() on __TAURI_INTERNALS__.invoke (OPENHUMAN-REACT-S) (#1556)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-12 19:56:03 -07:00
706edf5f44 fix(composio): collect WABA ID before WhatsApp Business OAuth flow (#1550)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-12 19:51:54 -07:00
Steven EnamakelandGitHub 6e2d69792d Add seed phrase onboarding and multi-chain wallet setup (#1407) 2026-05-09 13:54:10 -07:00
Steven EnamakelandGitHub b30e7cc036 Fix deregistration bug in transport.off() (#1409) 2026-05-09 13:48:16 -07:00
YellowSnnowmannandGitHub 0a749f5cec feat(heartbeat): deliver durable proactive meeting/reminder notifications with dedup + category controls (#1369) 2026-05-08 19:03:31 -07:00
Steven EnamakelandGitHub 22946a19db fix(boot): unblock cold-boot core start on dev hosts (#1324) 2026-05-07 00:04:14 -07:00
Steven EnamakelandGitHub 09f8f12f65 feat(memory): graph view, raw archive, Gemma defaults, pipeline polish (#1317) 2026-05-06 22:58:56 -07:00
Steven EnamakelandGitHub 33d8aa9cac feat(boot): gate launch on core mode pick + version check (#1316) 2026-05-06 18:26:30 -07:00
ba88d8cfc3 fix(webview/meet): gate orchestrator handoff on user opt-in (#1299) (#1310)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 17:43:21 -07:00
CodeGhost21andGitHub ec4d3de94d fix(notifications): real OS permission gate + delivery for #1152 (#1247) 2026-05-05 11:31:11 -07:00
Cyrus GrayandGitHub da55b9d145 fix(ui): move Intelligence and Webhooks to Developer Options, clean up nav (#1225) 2026-05-05 11:08:42 -07:00
62516ba418 feat(memory_tree): cloud-default LLM, queue priority, entity filter, Memory tab UI (#1198)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 20:52:56 -07:00
Cyrus GrayandGitHub 2497282716 feat(onboarding): replace welcome-agent bot with react-joyride walkthrough (#1180) 2026-05-04 12:41:08 -07:00
oxoxDevGitHubgoogle-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
34a6b4021f feat(composio): format trigger slugs into human-readable labels (#1129) (#1179)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-05-04 12:34:38 -07:00
oxoxDevGitHubgoogle-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
8f38f4e582 refactor(composio): hide raw connection ID, derive friendly label (#1153) (#1185)
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-05-04 10:49:25 -07:00
Steven EnamakelandGitHub 195c9c51a6 feat(composio): client-side trigger enable/disable toggles (#1110) 2026-05-02 16:50:28 -07:00
394bfcd0fa fix(app, mcp): PersistGate recovery + MCP handler drain on disconnect (#857)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-04-29 12:52:15 -07:00
YellowSnnowmannandGitHub 078a6b29a9 Fix notification-permission flow and onboarding copy for system test notifications (#1024) 2026-04-29 11:11:09 -07:00