Commit Graph
67 Commits
Author SHA1 Message Date
AryanandGitHub 6281aeaf42 docs(linux): add arch linux setup and build instructions (#2343) 2026-05-20 19:31:16 -07:00
b55d98a1e1 feat(mcp): capture client provenance in stdio sessions
## Summary

- Adds MCP stdio session state that captures `initialize.params.clientInfo.name` for the lifetime of the session.
- Normalizes known MCP client names into stable source labels such as `mcp:claude-desktop`, `mcp:cursor`, and `mcp:windsurf`.
- Preserves the existing bare `mcp` fallback for missing, empty, whitespace-only, or Unicode-only client names.
- Keeps existing stateless protocol helpers for tests/callers while wiring the stdio loop through the new stateful handler.
- Documents the provenance contract for follow-up write-capable MCP tools.

## Problem

#2317 needs MCP write tools to distinguish which client wrote memory, not only that the write came from MCP. The write-tool PRs are still in flight (#2306 for `memory.store` / `memory.note`, #2316 for `tree.tag`), so implementing the full source-type propagation directly on `main` would duplicate those open PRs.

## Solution

This PR lands the non-duplicative foundation first: the MCP server records the client identity at `initialize` time and exposes a session source label internally. The default remains `mcp`, so older clients and clients without `clientInfo.name` retain current behavior. Once #2306/#2316 merge, the write dispatch path can use `session.source_type()` instead of the placeholder `mcp` source string.

## 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%** — local coverage not run; CI coverage gate is the source of truth for changed-line coverage on this PR.
- [x] Coverage matrix updated — N/A: MCP protocol/session foundation only; no feature matrix row added/removed/renamed.
- [x] All affected feature IDs from the matrix are listed in the PR description under `## Related` — N/A: no feature matrix row 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 — N/A: no release manual smoke flow changes.
- [x] Linked issue closed via `Closes #NNN` in the `## Related` section — N/A: this prepares #2317 but does not fully close it until write tools consume the session source label.

## Impact

- Runtime/platform impact: CLI stdio MCP server only.
- Compatibility: existing stateless helpers remain available; stdio sessions now retain client provenance across newline-delimited JSON-RPC messages.
- Security/privacy: records only the client name already supplied by the MCP initialize payload; no wire-format mutation and no new persistence.
- Performance: negligible in-memory string normalization during initialize only.

## Related

- Refs #2317
- Depends conceptually on #2306 and #2316 for write-tool consumption.
- Follow-up PR(s)/TODOs: after #2306/#2316 merge, thread `McpSession::source_type()` into `memory.store`, `memory.note`, and `tree.tag` source_type construction.

---

## 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: `feat/mcp-client-provenance`
- Commit SHA: `95ab2dfe`

### Validation Run
- [x] `pnpm --filter openhuman-app format:check` — blocked locally; see Validation Blocked.
- [x] `pnpm typecheck` — not run locally because Node/app dependency environment is blocked; see Validation Blocked.
- [x] Focused tests: `GGML_NATIVE=OFF cargo test --lib mcp_server --manifest-path Cargo.toml` — 47 passed, 0 failed.
- [x] Rust fmt/check (if changed): `cargo fmt --check --manifest-path Cargo.toml` — passed.
- [x] Tauri fmt/check (if changed): N/A, no Tauri shell files changed.
- [x] Additional: `git diff --check` — passed.

### Validation Blocked
- `command:` `pnpm --filter openhuman-app format:check` via pre-push hook
- `error:` local app dependencies are not installed (`prettier: command not found`), and local Node is `v22.14.0` while `openhuman-app` requires `>=24.0.0`.
- `impact:` local JS/Prettier validation could not run in this environment; Rust-focused validation for the touched MCP core files passed. Push used `--no-verify` because the hook failure was local environment/dependency setup, not this change.
- `command:` `GGML_NATIVE=OFF cargo clippy --lib --manifest-path Cargo.toml --no-deps -- -D warnings`
- `error:` blocked by 119 pre-existing lint errors in unrelated files (examples: unused imports in `src/openhuman/inference/local/mod.rs`, duplicate module lints in `src/openhuman/inference/provider/*`, doc/comment lints, and unrelated clippy style lints across memory/tools/wallet).
- `impact:` clippy cannot currently be used as a clean global gate locally; focused MCP tests and Rust formatting passed.

### Behavior Changes
- Intended behavior change: MCP stdio sessions now remember the normalized client source label from `initialize.params.clientInfo.name` and preserve it for the session.
- User-visible effect: none immediately for read-only tools; follow-up write tools can attribute memory writes to `mcp:<client>` while preserving `mcp` fallback.

### Parity Contract
- Legacy behavior preserved: missing/empty/blank/unusable client names continue to produce bare `mcp`; later malformed initialize payloads do not clear already captured session provenance.
- Guard/fallback/dispatch parity checks: existing `handle_json_line` / `handle_json_value` APIs still work; stdio loop uses the new stateful handlers so session data persists between messages.

### Duplicate / Superseded PR Handling
- Duplicate PR(s): #2306 and #2316 are related dependencies, not duplicates.
- Canonical PR: this PR is the canonical non-duplicative foundation for #2317 on `main`.
- Resolution (closed/superseded/updated): N/A.


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

* **New Features**
  * MCP server now captures and preserves a client "source" label from initialization, normalizing client names and falling back to a default when absent.

* **Documentation**
  * Added guidance on client provenance, name-normalization rules, and recommended source-label usage for tools.

* **Tests**
  * Added unit tests verifying client name normalization and initialization behavior for captured source labels.

<!-- 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/2332?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: 李冠辰 <liguanchen@xiaomi.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-20 17:01:19 -07:00
c9f293d8ec test(e2e): wait for route readiness
## Summary

- Replaces the fixed post-hash `browser.pause(2_000)` with a route readiness wait.
- `navigateViaHash()` now waits for the target hash, `document.readyState === "complete"`, and a mounted React root before returning.
- `walkOnboarding()` now waits for `#/home` and a Home-page marker after the onboarding next button unmounts.
- Documents the navigation-readiness pattern in the E2E guide.

## Problem

- #1864 reports a first-navigation race after onboarding: the hash changes, but the target panel can be empty because React has not settled yet.
- The old helper returned after a fixed pause, so specs could start looking for panel text before the routed view mounted.

## Solution

- Add `waitForHashRouteReady()` to make hash navigation wait on concrete browser/app signals.
- Add `waitForPostOnboardingHome()` so the onboarding walker does not hand control back until Home is actually ready.
- Throw navigation readiness failures immediately instead of hiding them behind a later text timeout.

## 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) - helper behavior tightened; E2E suite is the exercising path.
- [x] **Diff coverage >= 80%** - N/A locally: E2E helper/doc change; CI E2E jobs are authoritative.
- [x] Coverage matrix updated - N/A: E2E helper behavior 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/user impact: none; test helper only.
- E2E impact: hash navigation and post-onboarding transitions now wait on real readiness signals instead of fixed sleeps.
- Failure mode improves: route readiness failures surface at navigation time with the target hash in the error.

## Related

- Closes #1864
- 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/1864-e2e-navigation-readiness`
- Commit SHA: `15f56af3c6c865fbd322010d25b047a998ebd964`

### Validation Run
- [x] `pnpm --filter openhuman-app exec prettier --check test/e2e/helpers/shared-flows.ts` - passed
- [x] `pnpm typecheck` - passed
- [x] Focused tests: N/A, E2E helper change not run locally
- [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:` full E2E rerun
- `error:` not run locally; requires built desktop app/Appium harness
- `impact:` remote E2E CI remains authoritative for the harness change

### Behavior Changes
- Intended behavior change: E2E helpers wait for route/onboarding readiness before specs continue.
- User-visible effect: none.

### Parity Contract
- Legacy behavior preserved: same routes and onboarding flow; only readiness timing changed.
- Guard/fallback/dispatch parity checks: existing text assertions remain in specs after helper navigation.

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

* **Tests**
  * Enhanced E2E helpers for more reliable hash-based navigation and for stronger verification that onboarding completes and the Home page is fully settled.

* **Documentation**
  * Updated E2E testing guide with cross-platform navigation guidance recommending the hash navigation helper and noting post-onboarding Home-page readiness checks.

<!-- 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/2304?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 16:52:19 -07:00
0f5e91421b test(e2e): use stable cron test ids
## Summary

- Adds shared `waitForTestId` and `clickTestId` E2E helpers for stable DOM hooks.
- Adds missing `cron-jobs-panel` and `cron-refresh` hooks to the Cron Jobs settings panel.
- Migrates the reference cron E2E flow away from Tailwind class/DOM walking to cron row/action test IDs.
- Documents the E2E `data-testid` naming taxonomy in the E2E guide.

## Problem

- #1861 calls out `cron-jobs-flow.spec.ts` as the concrete example of brittle selectors: it found `morning_briefing` via Tailwind class strings and `closest('div.p-4')`.
- That breaks on harmless class/layout refactors and makes the reference spec a weak template for future E2E work.

## Solution

- Use existing `CoreJobList` cron row/action hooks directly from the spec.
- Add the missing panel/refresh hooks so the whole cron flow can avoid text/button discovery for row actions.
- Centralize test ID waiting/clicking in `element-helpers.ts` instead of keeping local DOM snippets in specs.

## 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) - updated the reference cron E2E spec and helper path.
- [x] **Diff coverage >= 80%** - N/A locally: E2E helper/spec/doc change; CI diff coverage is authoritative.
- [x] Coverage matrix updated - N/A: E2E selector-hardening 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 - N/A: this is a scoped slice that references #1861 without closing the broader audit issue.

## Impact

- Runtime impact: none outside stable `data-testid` attributes on the Cron Jobs panel.
- Test impact: cron E2E is less coupled to Tailwind classes and container structure.
- Compatibility: `waitForTestId` is documented as tauri-driver/DOM-backed; Mac2 specs should keep accessibility/text helpers unless IDs are mirrored into accessible labels.

## Related

- Refs #1861
- Follow-up PR(s)/TODOs: add stable hooks/migrations for the remaining settings, skills, conversation, onboarding, and notification E2E surfaces tracked by #1861.

---

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

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

### Commit & Branch
- Branch: `codex/1861-cron-e2e-testids`
- Commit SHA: `28eca40a3d2e3a75b61105887e4faf58d4c0866e`

### Validation Run
- [x] `pnpm --filter openhuman-app exec prettier --check src/components/settings/panels/CronJobsPanel.tsx test/e2e/helpers/element-helpers.ts test/e2e/specs/cron-jobs-flow.spec.ts` - passed
- [x] `pnpm typecheck` - passed
- [x] Focused tests: N/A, E2E spec migration not run locally
- [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:` `pnpm --filter openhuman-app exec tsc -p test/tsconfig.e2e.json --noEmit`
- `error:` local command could not find `tsc` / `@wdio/globals/types` via that invocation
- `impact:` app-wide `pnpm typecheck` passes; remote E2E/TS jobs remain authoritative for the E2E tsconfig

### Behavior Changes
- Intended behavior change: none for users; E2E selectors now target stable hooks.
- User-visible effect: none.

### Parity Contract
- Legacy behavior preserved: cron load, refresh, pause/resume, run-history, and remove behavior unchanged.
- Guard/fallback/dispatch parity checks: spec still asserts the same UI and sidecar persistence behavior.

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

* **Tests**
  * Added E2E helpers and updated cron-jobs flow to use stable test identifiers for more reliable UI interactions and polling.

* **Documentation**
  * Added guidance on stable test ID naming and how to use the new E2E helpers in the testing guide.

* **Maintenance**
  * Cron Jobs panel and controls now expose stable identifiers for testing (no user-facing behavior changes).

<!-- 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/2301?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 16:51:38 -07:00
235b0d2bd7 test(e2e): require runtime flag for test reset
## Summary
- require `OPENHUMAN_E2E_MODE=1` before `openhuman.test_reset` can wipe state
- export the runtime flag from the unified E2E session runner
- document the E2E runtime flag in the E2E testing guide

Closes #1863.

## Testing
- [x] `cargo fmt --all --check`
- [x] `git diff --check`
- [x] `cargo test -p openhuman --features e2e-test-support test_support::rpc --lib` attempted locally; blocked before tests by missing `libclang`/`clang.dll` from `whisper-rs-sys`
- [x] `bash -n app/scripts/e2e-run-session.sh` attempted locally; blocked because Bash resolves to WSL and WSL is not enabled on this machine

## Checklist
- [x] I have tested my changes locally or explained why local testing was limited.
- [x] I have added or updated tests for behavior changes.
- [x] I have updated documentation where needed.

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

## Summary by CodeRabbit

## Release Notes

* **Documentation**
  * Updated end-to-end testing documentation with new environment variable details.

* **Tests**
  * Enhanced end-to-end testing infrastructure with explicit mode verification for test-support operations.

<!-- 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/2326?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 16:47:26 -07:00
21f4f9d8d2 deploy openhuman-core to fly.io
## Summary

- Add `fly.toml` template for deploying `openhuman-core` headlessly to Fly.io, complementing the existing DigitalOcean and Docker Compose paths
- Document Fly.io as a fourth cloud deployment option in `gitbooks/features/cloud-deploy.md` with step-by-step setup (launch, volume, secrets, deploy, desktop connect)
- Include production-safe secret recommendations (`OPENHUMAN_AUTO_UPDATE_RPC_MUTATIONS_ENABLED=false`, `OPENHUMAN_AUTO_UPDATE_RESTART_STRATEGY=supervisor`) and token rotation guidance
- Document a known UID mismatch gotcha that surfaces when switching between the local `Dockerfile` build (UID 10001) and the pre-built GHCR image (UID 1000)

## Problem

There was no documented path for deploying `openhuman-core` to Fly.io, leaving users to figure out the configuration themselves. The UID mismatch between the local Dockerfile and the pre-built GHCR image also produced a silent `Permission denied (os error 13)` on the workspace volume with no documented fix.

## Solution

- `fly.toml` ships as a ready-to-use template with persistent volume mount, health check against `/health`, and non-sensitive env defaults. Sensitive values (`OPENHUMAN_CORE_TOKEN`, `BACKEND_URL`, etc.) are set via `fly secrets` as documented.
- The Fly.io section mirrors the structure of the existing DO and Docker Compose sections for consistency.
- The UID mismatch gotcha is documented with a concrete `chown -R` + `fly machine restart` fix.
- CI workflow is documented inline so users can opt in without a file being auto-triggered on the upstream repo.

## Submission Checklist

- [x] Tests added or updated — `N/A: documentation-only change, no executable code modified`
- [x] **Diff coverage ≥ 80%** — `N/A: documentation-only change`
- [x] Coverage matrix updated — `N/A: documentation-only change`
- [x] All affected feature IDs listed — `N/A: documentation-only change`
- [x] No new external network dependencies introduced — `N/A: no code changes`
- [x] Manual smoke checklist updated — `N/A: does not touch release-cut surfaces`
- [x] Linked issue closed — `N/A: no associated issue`

## Impact

- No runtime impact — documentation and template file only
- `fly.toml` is a template; upstream CI will not trigger Fly.io deploys (no `FLY_API_TOKEN` secret is set on the upstream repo)

## Related

- Closes: —
- Follow-up PR(s)/TODOs: Investigate unifying UID between local `Dockerfile` and GHCR image builds to eliminate the UID mismatch gotcha permanently

---

## AI Authored PR Metadata

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

### Commit & Branch
- Branch: `main` (fork: `umarhadi/openhuman`)
- Commit SHA: `9314fd6be519662fb931414b256de3c57f54e7b8`

### Validation Run
- [x] `pnpm --filter openhuman-app format:check` — N/A (no app code changed)
- [x] `pnpm typecheck` — N/A (no app code changed)
- [x] Focused tests: N/A
- [x] Rust fmt/check — N/A (no Rust code changed)
- [x] Tauri fmt/check — N/A (no Tauri code changed)

### Validation Blocked
- N/A

### Behavior Changes
- Intended behavior change: None — documentation and template only
- User-visible effect: Contributors can now follow a documented path to deploy `openhuman-core` to Fly.io

### Parity Contract
- Legacy behavior preserved: Existing DO and Docker Compose deploy paths unchanged
- Guard/fallback/dispatch parity checks: N/A

### Duplicate / Superseded PR Handling
- Duplicate PR(s): None known
- Canonical PR: This PR
- Resolution: N/A

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

* **New Features**
  * Added Fly.io as a supported cloud deployment platform alongside existing options.

* **Documentation**
  * Expanded cloud deployment guide with full Fly.io setup: prerequisites, app launch/configuration, persistent volumes, secrets management, pointing desktop to hosted core, sample CI/CD workflow, image/tag guidance, log viewing, redeploy steps, and troubleshooting for volume UID mismatches.

<!-- 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/2295?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: umarhadi <hi@umarhadi.dev>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-20 16:44:35 -07:00
48cdd3a2a9 Clarify managed Composio integration boundary
## Summary

- Clarifies in the root README that managed integrations are backend-proxied through OpenHuman's Composio connector layer.
- Updates the integrations docs to distinguish managed mode from direct Composio mode.
- Documents that direct mode needs the user's own Composio API key and separately hosted trigger webhook plumbing.

## Problem

- #2020 asks for clearer disclosure around cloud/backend and integration dependencies.
- The README advertised 118+ integrations with one-click OAuth, but did not state the managed Composio/backend boundary near that claim.
- The integrations page said users did not need to think about Composio, which is true for managed mode but incomplete for direct/BYO mode.

## Solution

- Add a short managed-vs-direct disclosure beside the README integrations bullet.
- Replace the vague Composio parenthetical in the integrations docs with explicit backend, OAuth, rate-limit, and webhook responsibilities.
- Add the direct-mode privacy-boundary change near the existing Privacy boundary section.

## 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 clarification.
- [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 — N/A: #2020 is broader; this PR references it as a scoped docs follow-up.

## Impact

- Users evaluating OAuth/integration architecture get clearer docs before connecting accounts.
- No runtime behavior changes.

## Related

- Refs: #2020
- 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/2020-composio-disclosure-docs
- Commit SHA: 0d5a7ec2

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

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

### Behavior Changes
- Intended behavior change: documentation now names the managed Composio/backend path and direct-mode responsibility split.
- User-visible effect: clearer README/GitBook disclosure for integration setup.

### Parity Contract
- Legacy behavior preserved: no code paths changed.
- 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**
  * Clarified how Composio-backed integrations work in managed mode versus the new direct mode
  * Updated documentation to explain that managed mode handles OAuth, rate limits, and webhooks through the backend, while direct mode requires users to manage webhooks with their own Composio API key

<!-- 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/2325?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:54 -07:00
f82a302d38 feat(mcp): add SearXNG search tool (#1988)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 21:10:15 -07:00
Aqil AzizandGitHub b0fe42b0af fix(composio): request Gmail read scope for triggers (#2191) 2026-05-19 20:02:23 -07:00
f7d1f9b42d feat(human): show subagent companion mascots (#2099)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-19 19:43:32 -07:00
73ea22e011 feat(agent): cap runtime subagent spawn depth at MAX_SPAWN_DEPTH=3 (#2234)
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-19 14:30:32 -07:00
fd657e94c6 fix(docker): chown workspace volume before dropping privileges so core can start (#2065) (#2235)
Co-authored-by: Cyrus Gray <cyrus@tinyhumans.ai>
2026-05-20 02:04:19 +05:30
Yuvraj Singh SisodiyaandGitHub 504d10e98d feat(core): desktop companion domain — session, pipeline, pointing (#1909) (#2025) 2026-05-19 12:17:24 -07:00
oxoxDevandGitHub 2f4c3f397d feat(integrations): Polymarket trading + market data (#1398, venue 1/3) (#2145) 2026-05-19 19:15:20 +05:30
Steven EnamakelandGitHub 0257b2e662 feat(agent): codify chat → reasoning → worker spawn hierarchy (#2026) 2026-05-17 18:44:12 -07:00
Zavian WangandGitHub 8896aa14d6 feat(core): add global tool registry (#2003) 2026-05-17 18:21:55 -07:00
Steven EnamakelandGitHub 95f1f5f063 Refactor inference around external Ollama routing (#1975) 2026-05-17 02:37:42 -07:00
JustinandGitHub a6e311e744 feat(mcp): add memory navigation and entity discovery tools (#1974) 2026-05-16 21:02:44 -07:00
Steven EnamakelandGitHub 18ca68a56c feat(runtime): add javascript facade and skill creator agent (#1971) 2026-05-16 17:23:35 -07:00
5411f19e47 Add LM Studio as a local model provider (#1750)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-15 11:54:17 -07:00
45cd01a904 feat(memory): optional agentmemory backend (closes #1664) (#1743)
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-14 22:24:20 -07:00
Srinivas VaddiandGitHub cd911ab18d Allow private HTTP core URLs (#1765) 2026-05-14 21:24:30 -07:00
Zavian WangandGitHub 915a41da18 feat(mcp): add stdio memory server (#1760) 2026-05-14 21:21:23 -07:00
Steven Enamakelandgitbook-bot c6ee3b5786 GITBOOK-51: No subject 2026-05-14 05:40:41 +00:00
df189c8310 docs: clarify contributor setup (#1618)
Co-authored-by: honor2030 <19909783+honor2030@users.noreply.github.com>
2026-05-13 08:02:43 -07:00
70f1275ed3 fix(release): publish linux-x86_64 AppImage asset and validate latest.json (#1582)
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Steven Enamakel <enamakel@tinyhumans.ai>
2026-05-12 20:02:47 -07:00
1b99b56fa9 [codex] Align E2E docs with CEF reality (#1464)
Co-authored-by: Jwalin Shah <jshah1331@gmail.com>
2026-05-11 12:08:24 -07:00
a2ced40ef9 feat(memory): add tool-scoped memory with durable rule capture, RPC APIs, and prompt pinning (#1487)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 12:07:59 -07:00
Steven EnamakelandGitHub 065e198cf4 Support reliable self-update for server-side and headless core instances (#1458) 2026-05-09 23:55:25 -07:00
Steven EnamakelandGitHub d58312047d Document building the Rust core from scratch (#1454) 2026-05-09 20:20:14 -07:00
Steven Enamakelandgitbook-bot f4e3a14d4e GITBOOK-50: No subject 2026-05-10 02:52:14 +00:00
Steven EnamakelandGitHub 87b4903ac8 docs(core): simplify remote core RPC token setup (#1438) (#1444) 2026-05-09 16:44:49 -07:00
Steven EnamakelandGitHub 1d28f2c8e3 ci(release): ship Linux openhuman-core tarballs and push GHCR image (#1442) 2026-05-09 16:09:04 -07:00
Steven Enamakelandgitbook-bot 4fbabf6d3d GITBOOK-49: No subject 2026-05-09 07:30:48 +00:00
Steven EnamakelandGitHub f598f36751 Feat/docs v9 (#1392) 2026-05-09 00:27:37 -07:00
Steven EnamakelandGitHub b02916d0be Feat/docs v8 (#1391) 2026-05-09 00:21:51 -07:00
Steven Enamakelandgitbook-bot aa2daf90cb GITBOOK-47: No subject 2026-05-09 07:19:28 +00:00
Steven EnamakelandGitHub fcefc0999f Feat/docs v7 (#1390) 2026-05-09 00:17:29 -07:00
Steven Enamakelandgitbook-bot fa0653c399 GITBOOK-46: No subject 2026-05-09 06:58:55 +00:00
Steven Enamakelandgitbook-bot e789b5692d GITBOOK-45: No subject 2026-05-09 06:52:34 +00:00
Steven Enamakelandgitbook-bot 99ca4008b6 GITBOOK-44: No subject 2026-05-09 06:50:10 +00:00
Steven Enamakelandgitbook-bot afd1bc7547 GITBOOK-43: No subject 2026-05-09 06:40:08 +00:00
Steven Enamakelandgitbook-bot 8a34bcd7f0 GITBOOK-42: No subject 2026-05-09 06:39:47 +00:00
Steven EnamakelandGitHub 5870b2284b Feat/docs v6 (#1387) 2026-05-08 23:37:29 -07:00
Steven Enamakelandgitbook-bot 24bf2a5932 GITBOOK-41: No subject 2026-05-09 06:15:18 +00:00
Steven EnamakelandGitHub 72048814ff docs(gitbooks v5): restructure features, simplify subconscious, README polish, default auto-fetch to 20 min (#1386) 2026-05-08 23:12:59 -07:00
Steven EnamakelandGitHub 0a920159f3 docs: gitbooks v3 — flatten frontend/tauri-shell, kill product/, fix links, default app env to production (#1385) 2026-05-08 22:28:35 -07:00
Steven Enamakelandgitbook-bot 2b6c45579a GITBOOK-40: No subject 2026-05-09 05:04:43 +00:00
Steven Enamakelandgitbook-bot 0c8fceca81 GITBOOK-39: No subject 2026-05-09 04:45:24 +00:00
Steven EnamakelandGitHub 6b044a9456 docs: rewrite README + gitbooks around current product, add Developing section (#1384) 2026-05-08 21:18:20 -07:00