Commit Graph
21 Commits
Author SHA1 Message Date
02319e6e60 Localize README context diagram alt text
## Summary

- Localizes the context-diagram alt text in `README.md`, `README.ja-JP.md`, and `README.ko.md`.
- Leaves the already-present `bash` install fences unchanged.
- Aligns these README variants with the localized alt-text pattern already used by the German and Simplified Chinese READMEs.

## Problem

- #2162 tracks markdown-lint cleanup for root/Japanese/Korean READMEs.
- The install fences are already fixed on current `main`, but the context diagram still used generic English alt text in all three files.

## Solution

- Replace `OpenHuman context diagram` with descriptive localized alt text per README locale.

## 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) — N/A: docs-only alt text change.
- [x] **Diff coverage ≥ 80%** — N/A: docs-only change.
- [x] Coverage matrix updated — N/A: docs-only change.
- [x] All affected feature IDs from the matrix are listed in the PR description under `## Related`
- [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 — N/A: docs-only change.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section

## Impact

- Documentation accessibility metadata improves for screen readers and markdown-lint checks.
- No runtime impact.

## Related

- Closes: #2162
- Follow-up PR(s)/TODOs: N/A
- Coverage matrix feature IDs: N/A: docs-only change.

---

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

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

### Commit & Branch
- Branch: codex/2162-readme-alt-locales
- Commit SHA: 0f5a796d

### Validation Run
- [x] `pnpm --filter openhuman-app format:check` — N/A: docs-only change.
- [x] `pnpm typecheck` — N/A: docs-only change.
- [x] Focused tests: N/A: docs-only change.
- [x] Rust fmt/check (if changed): N/A: no Rust files changed.
- [x] Tauri fmt/check (if changed): N/A: no Tauri files changed.
- [x] `git diff --check`
- [x] Verified install fences already use `bash` in the three affected READMEs.

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

### Behavior Changes
- Intended behavior change: localized alt text for the README context diagram.
- User-visible effect: better accessibility metadata in README variants.

### Parity Contract
- Legacy behavior preserved: README layout, image path, and install snippets unchanged.
- Guard/fallback/dispatch parity checks: N/A.

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

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

## Summary by CodeRabbit

* **Documentation**
  * Improved documentation accessibility and internationalization through refined image alt text descriptions. Updated the OpenHuman context-building diagram descriptions across English, Japanese, and Korean README versions with more accurate, language-appropriate text to better serve all international users and enhance overall documentation clarity.

<!-- 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/2324?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 15:24:05 -07:00
15df9855c3 fix(orchestrator): route live facts to research
## Summary

- Routes live/current factual requests (weather, forecasts, recent web facts, "use Grok/live data") to the available `research` tool.
- Replaces the stale `delegate_researcher` prompt reference with the synthesized tool name `research`.
- Updates the chat harness subagent fixture to emit `research` so the forced tool call matches the current delegation surface.
- Adds a prompt-builder regression test that locks the live-data rule and rejects the stale tool name.

## Problem

- The orchestrator could acknowledge live weather/research requests with "on it" without actually calling the research tool.
- The prompt named `delegate_researcher`, but the current researcher tool is exposed as `research` via `delegate_name = "research"`.
- Users who named an unwired provider like Grok could stall the agent instead of falling back to the available live research path.

## Solution

- Teach the orchestrator to call `research` for live/current/time-sensitive facts that direct tools cannot answer.
- Explicitly tell it not to stop at "on it" and not to wait for the exact named provider when that provider is not wired in.
- Align the E2E harness fixture with the real `research` tool name.

## 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) - added prompt regression assertion and updated E2E forced tool fixture.
- [x] **Diff coverage >= 80%** - N/A locally: tiny prompt/test fixture change; CI diff coverage will be authoritative.
- [x] Coverage matrix updated - N/A: prompt routing 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

## Impact

- Runtime: orchestrator prompt only, plus E2E harness fixture alignment.
- User-visible effect: live weather/current fact requests should call research instead of ending with an acknowledgement.
- No migration, security, or dependency impact.

## Related

- Closes #2164
- Follow-up PR(s)/TODOs: N/A

---

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

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

### Commit & Branch
- Branch: `codex/2164-live-data-research`
- Commit SHA: `dc63d1d3e1ea531a1609594debd1e0ca95329b27`

### Validation Run
- [x] `pnpm --filter openhuman-app exec prettier --check test/e2e/specs/chat-harness-subagent.spec.ts` - passed
- [x] `pnpm typecheck` - N/A: comments/string fixture plus Rust prompt text only
- [x] Focused tests: `cargo test --lib build_routes_live_facts_to_research_tool` attempted; blocked before test execution by local `libclang` setup
- [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:` `cargo test --lib build_routes_live_facts_to_research_tool`
- `error:` `whisper-rs-sys` build could not find `clang.dll` / `libclang.dll`; `LIBCLANG_PATH` is unset in this Windows environment
- `impact:` Rust prompt unit test did not execute locally; remote CI environment should validate it

### Behavior Changes
- Intended behavior change: live/current factual requests route to `research` when no direct tool can answer.
- User-visible effect: requests like "forecast for Bremerhaven today" should produce a researched answer instead of a bare "on it" acknowledgement.

### Parity Contract
- Legacy behavior preserved: direct answers, connected integration routing, crypto/code/planner/critic/archive routing remain unchanged.
- Guard/fallback/dispatch parity checks: prompt test asserts live facts mention weather/forecast/Grok fallback and rejects stale `delegate_researcher` naming.

### 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

## Release Notes

* **Tests**
  * Enhanced test coverage for research request handling and subagent communication.

* **Chores**
  * Improved internal routing and terminology for research operations to support live, time-sensitive fact queries more effectively.

<!-- 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/2299?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 15:21:23 -07:00
5a0a5a7e02 fix(notifications): clarify morning briefing failures
## Summary

- Rewrites failed `morning_briefing` cron alert bodies to a concrete recovery message instead of the generic agent fallback.
- Strips `<openhuman-link>` tags from cron alert bodies before they are persisted to the notification center.
- Uses recent-notification dedupe for cron alerts so repeated identical failures do not spam the list.
- Sanitizes notification card previews on the frontend so raw OpenHuman link markup is never rendered as text.

## Problem

- Failed morning briefing runs stored the generic agent failure message directly in the notifications store.
- That message is designed for chat bubbles and includes internal `<openhuman-link>` markup.
- The notification center renders integration notification bodies as plain text, so users saw raw markup and a non-actionable error.

## Solution

- Add a cron alert body formatter that detects the built-in morning briefing failure shape and replaces it with actionable copy.
- Preserve normal successful briefing content, while stripping any OpenHuman link tags down to their visible label for notification previews.
- Route cron notification persistence through the existing `insert_if_not_recent` dedupe helper.
- Add frontend preview formatting plus component coverage for link-markup stripping.

## 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)
- [x] **Diff coverage ≥ 80%** — local coverage run is blocked by missing libclang; CI coverage gate will verify changed lines.
- [x] Coverage matrix updated — N/A: behavior-only cron/notification rendering fix, 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 changed.
- [x] No new external network dependencies introduced (mock/local tests only)
- [x] Manual smoke checklist updated if this touches release-cut surfaces ([`docs/RELEASE-MANUAL-SMOKE.md`](../docs/RELEASE-MANUAL-SMOKE.md)) — N/A: notification rendering copy only.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section

## Impact

- Runtime: cron alert persistence and notification center preview rendering.
- User-visible: morning briefing failures now explain likely recovery steps; raw `<openhuman-link>` markup is hidden in notifications.
- Compatibility: chat-facing generic agent fallback remains unchanged.

## Related

- Closes #2279
- Follow-up PR(s)/TODOs: verify the final desktop notification flow on macOS build hardware once CI artifacts are available.

---

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

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

### Commit & Branch
- Branch: `codex/2279-morning-briefing-notifications`
- Commit SHA: `513e41ccd39f483563460cf742246ab9850d1cfc`

### Validation Run
- [x] `pnpm --filter openhuman-app exec prettier --check src/components/notifications/NotificationCard.tsx src/components/notifications/NotificationCard.test.tsx` passed.
- [x] `pnpm typecheck` passed.
- [x] `pnpm --filter openhuman-app test -- src/components/notifications/NotificationCard.test.tsx` passed.
- [x] Rust fmt/check (if changed): `cargo fmt --all --check` passed.
- [x] Focused Rust tests: blocked locally; see Validation Blocked.
- [x] Tauri fmt/check (if changed): N/A: no Tauri shell changes.

### Validation Blocked
- `command:` `cargo test --lib cron_alert_body --manifest-path Cargo.toml`
- `error:` `whisper-rs-sys` build script could not find `clang.dll` / `libclang.dll`; `LIBCLANG_PATH` is unset in this Windows environment.
- `impact:` focused Rust tests could not run locally, but the scheduler tests are included for CI.
- `note:` full `pnpm --filter openhuman-app format:check` also reports pre-existing repo-wide Prettier drift; changed notification files pass targeted Prettier check.

### Behavior Changes
- Intended behavior change: failed morning briefing cron alerts now use actionable notification copy and identical recent cron alerts are skipped.
- User-visible effect: notification bodies do not show raw OpenHuman link markup.

### Parity Contract
- Legacy behavior preserved: successful cron output still reaches proactive delivery and notification persistence; chat fallback message remains unchanged.
- Guard/fallback/dispatch parity checks: unit tests cover morning briefing failure rewrite, link stripping, duplicate alert persistence, and frontend preview rendering.

### Duplicate / Superseded PR Handling
- Duplicate PR(s): none found for #2279 at PR creation time.
- Canonical PR: this PR.
- Resolution (closed/superseded/updated): N/A

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

* **Bug Fixes**
  * Notification previews no longer show raw markup tags and now collapse whitespace, improving readability.

* **Improvements**
  * Morning briefing failures display a clear, user-friendly failure message.
  * Repeated cron job alerts are deduplicated to reduce notification noise.

* **Tests**
  * Added tests covering notification preview formatting, cron alert rewriting, and deduplication.

<!-- 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/2296?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 15:19:43 -07:00
fbc7ef3e16 fix(jsonrpc): keep scoped 401s from expiring session
## Summary

- Narrows JSON-RPC session-expiry detection to confirmed OpenHuman app-session shapes.
- Keeps generic downstream/provider `401 Unauthorized` and `invalid token` errors from publishing `SessionExpired`.
- Adds diagnostic logging that includes the RPC method and sanitized reason when an auth-like error is not treated as session expiry.
- Updates classifier tests for true session expiry, scoped 401s, and generic invalid-token text.

## Problem

- The previous JSON-RPC classifier treated any `401` + `unauthorized` text as a global app session expiry.
- That could clear the stored session and bounce users to sign-in for unrelated provider, integration, or channel errors.
- This is the root pattern behind the Discord card logout report.

## Solution

- Reuse the strict `observability::is_session_expired_message` classifier at the JSON-RPC dispatch boundary.
- Preserve `SessionExpired` publication for explicit OpenHuman auth states: `session expired`, `SESSION_EXPIRED`, `no backend session token`, and `session JWT required`.
- Add a diagnostics-only predicate for generic auth-looking errors so they are logged with method context but do not clear the session.
- Update comments in `observability` to match the stricter dispatch behavior.

## 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)
- [x] **Diff coverage ≥ 80%** — local coverage run is blocked by missing libclang; CI coverage gate will verify changed lines.
- [x] Coverage matrix updated — N/A: behavior-only core classifier hardening, 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 changed.
- [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 smoke checklist surface changed.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section

## Impact

- Runtime: core JSON-RPC auth/error handling.
- User-visible: scoped provider/integration 401s should remain recoverable errors instead of logging the user out.
- Security/privacy: session-expiry reasons are sanitized before logging/publishing.
- Compatibility: explicit OpenHuman session-expired sentinels still clear the session as before.

## Related

- Closes #2286
- Refs #2285
- Follow-up PR(s)/TODOs: identify the exact Discord card-click RPC from user logs if the UI still needs a provider-specific error state.

---

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

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

### Commit & Branch
- Branch: `codex/2286-session-expired-narrowing`
- Commit SHA: `6f98f1e28a113afd0ea47908d0a397ecfe681560`

### Validation Run
- [x] `pnpm --filter openhuman-app format:check` — N/A: no frontend changes.
- [x] `pnpm typecheck` — N/A: no TypeScript changes.
- [x] Focused tests: blocked locally; see Validation Blocked.
- [x] Rust fmt/check (if changed): `cargo fmt --check` passed.
- [x] Tauri fmt/check (if changed): N/A: no Tauri shell changes.

### Validation Blocked
- `command:` `cargo test --lib is_session_expired_error --manifest-path Cargo.toml`
- `error:` `whisper-rs-sys` build script could not find `clang.dll` / `libclang.dll`; `LIBCLANG_PATH` is unset in this Windows environment.
- `impact:` focused Rust tests could not run locally, but the changed classifier tests are included for CI.

### Behavior Changes
- Intended behavior change: generic provider/integration/channel `401 Unauthorized` text no longer publishes `DomainEvent::SessionExpired`.
- User-visible effect: users should not be logged out by a scoped downstream 401, including the suspected Discord card-click path.

### Parity Contract
- Legacy behavior preserved: explicit OpenHuman session expiry, uppercase `SESSION_EXPIRED`, missing backend session token, and missing session JWT still clear the app session.
- Guard/fallback/dispatch parity checks: classifier tests cover true session expiry, generic 401, invalid token, and local missing-session cases.

### Duplicate / Superseded PR Handling
- Duplicate PR(s): none found for #2286/#2285 at PR creation time.
- Canonical PR: this PR.
- Resolution (closed/superseded/updated): N/A

Co-authored-by: aqilaziz <gonzes7@gmail.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-20 15:17:52 -07:00
Aqil AzizandGitHub b0fe42b0af fix(composio): request Gmail read scope for triggers (#2191) 2026-05-19 20:02:23 -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
0c574bd9ea fix(search): let web_search_tool use direct search API (#2263)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 19:41:05 -07:00
Aqil AzizandGitHub d28c054c29 fix(auth): point welcome legal links to docs (#2253) 2026-05-19 16:51:13 -07:00
Aqil AzizandGitHub 8dbec71b80 fix(voice): allow local provider selection before install (#2257) 2026-05-19 16:49:23 -07:00
Aqil AzizandGitHub 992d46dd15 fix(socket): preserve queued once listeners (#1978) 2026-05-16 20:44:36 -07:00
6872eb0139 feat: add Indonesian locale (#1884)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 20:27:21 -07:00
366eac1528 test: cover memory overview widgets (#1879)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 20:26:52 -07:00
Aqil AzizandGitHub 7874ad6b5f test: cover memory detail rendering (#1878) 2026-05-15 19:33:46 -07:00
Aqil AzizandGitHub 168ce33263 test: cover intelligence tab states (#1876) 2026-05-15 19:33:37 -07:00
Aqil AzizandGitHub b7d8d4bec9 test: cover memory presentation components (#1875) 2026-05-15 19:33:16 -07:00
b5f5b7e207 Fix chat composer IME Enter handling (#1730)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 14:58:01 -07:00
Aqil AzizandGitHub 1dab858f14 fix(onboarding): keep skip completion moving after task sync failure (#1771) 2026-05-14 21:06:25 -07:00
Aqil AzizandGitHub fa860a2a43 fix(update): keep dismissed repeated errors hidden (#1773) 2026-05-14 21:04:17 -07:00
Aqil AzizandGitHub 2970ff5dd0 Fix Jira Composio subdomain authorization (#1733) 2026-05-14 19:46:36 -07:00
Aqil AzizandGitHub ca9789136d fix(startup): warn on WSL X11 desktop runs (#1686) 2026-05-13 19:16:56 -07:00
Aqil AzizandGitHub a01c7d3cb5 fix(updater): quiet passive check failures (#1685) 2026-05-13 14:30:25 -07:00