mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-27 21:08:00 +00:00
## 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 --> [](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>
Tauri + React + Typescript
This template should help get you started developing with Tauri, React and Typescript in Vite.