Commit Graph
336 Commits
Author SHA1 Message Date
21ab20f105 feat(memory-tree): status panel + on/off toggle (#1856 Part 1) (#2719)
Co-authored-by: Claude <noreply@anthropic.com>
2026-05-27 20:09:59 +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
mysma-9403andGitHub 4043d03e6f feat(i18n): add Polish (pl) locale at ~91% coverage (#2731) 2026-05-27 18:27:44 +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
YellowSnnowmannandGitHub fae16082d3 fix(memory-workspace): show all native Composio memory-sync sources (not Gmail-only) (#2685) 2026-05-27 15:54:10 +05:30
Mega MindandGitHub b94545bd8c chore(skills): remove Composio Preview badge and filter pill (#2749) 2026-05-27 15:44:17 +05:30
sanil-23andGitHub 0fddf1120f feat(approval): consolidate on ApprovalGate + persistent "Always allow" list (#2706) 2026-05-27 05:54:24 +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
77c15cb868 feat(search): unified web-access firewall (fetch + browser) with tri-state Allowed-websites control + friendly block errors (#2704)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 01:15:00 +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
Steven EnamakelandGitHub e7e7e8a951 Migrate E2E coverage to Playwright (#2610) 2026-05-25 23:38:34 -07:00
0a9f7a0e99 feat(agent): agentic coding runtime — gated OS capabilities (filesystem, shell, install) via deterministic permission tiers + chat approvals (#2631)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 12:00:59 +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
RehanandGitHub b6d3158140 fix(settings): blur recovery phrase by default (#2658) 2026-05-25 22:02:49 -07:00
Steven EnamakelandGitHub f946d10dde feat(mascot): replace SVG animations with Rive renderer (#2659) 2026-05-25 21:44:13 -07:00
e05cab9bb2 fix(memory-workspace): detect Obsidian vault registration before deep link (#2638)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 02:25:21 +05:30
20c349fcdc fix(ai): contain provider setup errors (#2411)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-25 09:27:06 -07:00
c244f5875a fix: harden workspace routing and local-first gates (#2445)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-25 09:15:40 -07:00
oxoxDevandGitHub c28d9dac0b fix(app): guard CEF IPC fallback sync throw via safeInvoke wrapper (Sentry TAURI-REACT-7 + 6) (#2619) 2026-05-25 09:15:16 -07:00
Mega MindandGitHub cdee8f73fb fix(startup): recover from core port 7788 conflict automatically (#2626) 2026-05-25 20:09:08 +05:30
d997394116 feat(channels/yuanbao): add Yuanbao channel provider (#2600)
Co-authored-by: lrt4836 <296659110@qq.com>
2026-05-25 01:39:09 -07:00
b399eabc09 feat(settings): add Persona Pack v1 (closes #2345) (#2558)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-25 00:17:34 -07:00
484e31dc1d feat(memory): clear source memory on disconnect (#2528)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-24 23:24:35 -07:00
8ba259ce6b feat(memory): route summaries through workspace paths (#2527)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-24 21:40:53 -07:00
Steven EnamakelandGitHub 8f2e68db0d feat(embeddings): onboarding step + graceful degradation when disabled (#2591) 2026-05-24 20:13:07 -07:00
Steven EnamakelandGitHub 2903607491 feat(voice): add voice provider registry with third-party STT/TTS support (#2586) 2026-05-24 18:25:31 -07:00
Steven EnamakelandGitHub dc1e64d997 feat(embeddings): configurable embedding providers with dedicated settings panel (#2583) 2026-05-24 16:17:55 -07:00
fa62b7be2a feat(auth): add local offline login (#2208)
Co-authored-by: shadowdoggie <shadowdoggie@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-24 15:20:35 -07:00
Steven EnamakelandGitHub 76ce014e20 fix(ai): route local inference through provider router + revamp settings UI (#2580) 2026-05-24 14:51:25 -07:00
Steven EnamakelandGitHub b08998d5b0 i18nize remaining React UI strings (#2577) 2026-05-24 13:36:25 -07:00
Steven EnamakelandGitHub 59c1687dd4 Fix provider model testing and add MCP coming soon placeholder (#2570) 2026-05-24 10:30:03 -07:00
Steven EnamakelandGitHub d52abe5524 fix(ai): add OpenRouter OAuth provider flow (#2571) 2026-05-24 10:01:58 -07:00
Steven EnamakelandGitHub e9ca97c48c feat(mcp): split mcp_client/registry, multi-registry, boot-spawn + setup agent (#2559) 2026-05-23 22:15:33 -07:00
Steven EnamakelandGitHub 85e84210db feat: prod-test 2026-05-23 — composer, settings reorg, MCP/search, alpha banners (#2554) 2026-05-23 19:36:31 -07:00
Steven EnamakelandGitHub 4c6007b662 fix(oauth): make loopback redirect actually work, plus settings cleanup (#2550) 2026-05-23 10:35:44 -07:00
Steven EnamakelandGitHub f8c9698ecc feat(inference): OpenAI-compatible /v1 router with user-managed API key (#2523) 2026-05-23 08:33:33 -07:00
JAYcodrGitHubagent:skill-master <skill-master@openclaw>Steven Enamakel
27f8d7776e Fix/channels i18n hardcoded text (#2509)
Co-authored-by: agent:skill-master <skill-master@openclaw>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-23 01:53:54 -07:00
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
Aqil AzizandGitHub 2f913a248c fix(composio): show waiting state before opening browser (#2406) 2026-05-23 00:58:21 -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
Steven EnamakelandGitHub f29a20fd0f fix(agent): remove welcome agent flow (#2517) 2026-05-23 00:33:12 -07:00
Steven EnamakelandGitHub bbec0d61f9 feat(auth): loopback OAuth redirect with deep-link fallback (#2511) 2026-05-22 21:57:50 -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
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
03d1e2512e feat(e2e): complete E2E v2 suite — 66 specs, orchestrator, bug fixes (#2353)
Co-authored-by: Steven Enamakel <31011319+senamakel@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-22 17:23:01 -07:00
e38bfad67d fix(mcp): roll back user message and restore input on config_assist error
## Summary

- On API failure, `handleSend` was leaving the user's message orphaned in chat history with no assistant reply
- The input field was already cleared (`setInput('')` ran before the `try`), making retry impossible without re-typing
- Catch block now rolls back `messages` to the pre-send snapshot and restores `input` to the original text

## Root cause

`setMessages(updatedHistory)` and `setInput('')` executed unconditionally before the `try` block. On error, the user message was stuck in history and the input was gone.

## Fix

Two lines added to the `catch` block in `handleSend`:

```ts
setMessages(messages);  // rollback to snapshot captured before optimistic update
setInput(text);          // restore user's text so they can retry without retyping
```

The optimistic update (showing the user message while waiting) is preserved — only the rollback path is changed.

## Test plan

- [x] Send a message while the API is unreachable: user message disappears from chat, input field is restored with original text, error banner shows
- [x] Successful send still appends user + assistant messages correctly
- [x] Retry after error works without retyping

Generated with [Claude Code](https://claude.com/claude-code) · Flagged by [AntFleet](https://antfleet.dev) code review


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

* **Bug Fixes**
  * Restored user input and message history when config assistant encounters errors.

* **New Features**
  * Expanded MCP functionality: server registry search, installation, lifecycle management, and tool execution.
  * Added AI-powered configuration assistance for MCP server setup.

* **Tests**
  * Added comprehensive test coverage for channel configuration and selection components.

<!-- 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/2280?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: Steven Enamakel <enamakel@tinyhumans.ai>
Co-authored-by: antfleet-ops <285575208+antfleet-ops@users.noreply.github.com>
Co-authored-by: cyrus <cyrus@tinyhumans.ai>
2026-05-22 12:51:04 -07:00
9d91aa4a06 channels: telegram remote-control phase 1 (status, sessions, new) (#1805)
## Summary

- Add Telegram remote-control slash commands `/status`, `/sessions`, `/new`, and `/help` for away-from-keyboard session management.
- Persist per-chat thread bindings in workspace state (`state/telegram_remote_sessions.json`).
- Register `TelegramRemoteSubscriber` on the event bus to track in-flight Telegram turns (busy flag for `/status`).
- Surface remote-control usage in the Telegram settings panel.
- Register `channels.telegram_remote_control` in the runtime capability catalog.

## Problem

Issue #1805: Telegram is message transport today, but not a practical remote operator surface. Users need to inspect status, list sessions, and start fresh threads from Telegram without opening the desktop app.

## Solution

- Parse remote-control commands in the existing channel runtime command path (same hook as `/model` and `/models`).
- Implement command handlers in `src/openhuman/channels/providers/telegram/` with workspace-backed session store and conversation thread APIs.
- Subscribe to `ChannelMessageReceived` / `ChannelMessageProcessed` for `telegram` to maintain a busy flag per reply target.
- Document commands in `TelegramConfig.tsx` and the capability catalog.

## 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%** — changed lines (Vitest + cargo-llvm-cov merged via `diff-cover`) meet the gate enforced by [`.github/workflows/coverage.yml`](../.github/workflows/coverage.yml). Run `pnpm test:coverage` and `pnpm test:rust` locally; PRs below 80% on changed lines will not merge.
- [x] Coverage matrix updated — added/removed/renamed feature rows in [`docs/TEST-COVERAGE-MATRIX.md`](../docs/TEST-COVERAGE-MATRIX.md) reflect this change (or `N/A: behaviour-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 ([`docs/RELEASE-MANUAL-SMOKE.md`](../docs/RELEASE-MANUAL-SMOKE.md))
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section

## Impact

- Desktop core + settings UI only; no new external network dependencies.
- Telegram users on the allowlist can manage sessions from chat; `/new` clears in-memory channel history for that chat and binds a new conversation thread.

## Related

- Part of #1805
- Batch tracking: #1480
- Feature IDs: `channels.telegram_remote_control`, `channels.connect_platform`

---

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

### Linear Issue
- Key: N/A (GitHub #1805)
- URL: https://github.com/tinyhumansai/openhuman/issues/1805

### Commit & Branch
- Branch: `cursor/a01-1805-telegram-remote-control-phase1`
- Commit SHA: `bee7ee330711678b24d5c24efc466c431b0eb7a6`

### Validation Run
- [x] `pnpm --filter openhuman-app format:check` (via pre-push hook)
- [x] `pnpm typecheck` (via pre-push hook `compile`)
- [x] Focused tests: `cargo test --lib -p openhuman handle_runtime_command_telegram_status`, `parse_remote_commands`, `subscriber_marks_busy_on_received_and_clears_on_processed`, `round_trip_binding_and_busy_flag`; `prettier --check app/src/components/channels/TelegramConfig.tsx`
- [x] Rust fmt/check (if changed): `cargo fmt --all`, focused tests above
- [x] Tauri fmt/check (if changed): N/A — no Tauri shell changes

### Validation Blocked
- `command:` pre-push hook (`pnpm rust:check` via `git push`)
- `error:` isolated worktree did not have the vendored `app/src-tauri/vendor/tauri-cef` submodule required by Tauri shell `cargo check`; this PR has no Tauri shell changes.
- `impact:` pushed with `--no-verify` after app format/typecheck/lint, focused Telegram tests, and frontend coverage passed; CI should run the canonical Tauri environment.

### Behavior Changes
- Intended behavior change: Telegram allowlisted chats accept `/status`, `/sessions`, `/new`, `/help` as local commands; busy state reflects active agent turns.
- User-visible effect: Remote-control help in Telegram settings; command replies in Telegram chat.

### Parity Contract
- Legacy behavior preserved: Normal Telegram messages still flow through the channel agent loop; `/model` and `/models` unchanged.
- Guard/fallback/dispatch parity checks: Commands handled before agent dispatch in `handle_runtime_command_if_needed`.

Made with [Cursor](https://cursor.com)

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

* **New Features**
  * Telegram remote-control slash commands: /status, /sessions, /new, /help — manage conversations from Telegram (bot-qualified forms supported). Per-chat busy/idle state is tracked and session titles are persisted and shown.

* **Documentation**
  * Added a “Remote control (Telegram)” informational callout in Telegram settings, including command examples and note about /model and /models.

* **Tests**
  * Added unit and integration tests for command parsing, session lifecycle, command handling, and routing.

<!-- 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/2249?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: Ghost Scripter <ghostscripter@zerolend.xyz>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-22 12:45:12 -07:00
6bcc7948f3 ci(i18n): add zh-CN desktop bundle guard (#2403)
Co-authored-by: Aqil Aziz <aqilaziz@users.noreply.github.com>
2026-05-22 19:00:16 +05:30