Skip to content

chore(core): slim the core — remove dead modules, move desktop features to Tauri, cut goals/todos to tinyagents - #5125

Merged
senamakel merged 96 commits into
tinyhumansai:mainfrom
senamakel:chore/slim-core-modules
Jul 24, 2026
Merged

chore(core): slim the core — remove dead modules, move desktop features to Tauri, cut goals/todos to tinyagents#5125
senamakel merged 96 commits into
tinyhumansai:mainfrom
senamakel:chore/slim-core-modules

Conversation

@senamakel

@senamakel senamakel commented Jul 22, 2026

Copy link
Copy Markdown
Member

Summary

Slims the Rust core and relocates desktop-coupled features to the Tauri shell (~34.6k net lines removed):

  • Removed dead/unused core modules: codegraph, council_registry, model_council, and the orphaned webview modules (webview_apis, webview_accounts cookie-login half, webview_notifications).
  • Migrated desktop_companion → the Tauri shell — native cpal mic capture, STT/TTS over core RPC, LLM shell-side; UI rewired to a companion://state_changed Tauri event.
  • Relocated the whatsapp_data store → the Tauri shell — SQLite store + ingest move shell-side; the agent's 3 query tools keep working via the in-process event-bus native request/response bridge (the core runs in-process in the shell).
  • Removed all "desktop controls" — the accessibility automation half (kept the capture/permissions/globe backbone that voice + screen_intelligence need), text_input, autocomplete, and the computer-use agent tools (ax_interact/automate/mouse/keyboard/launch_app) + computer_control config.
  • Cut thread_goals and todos/task-board persistence over to the vendored tinyagents crate (graph::goals / graph::todos), which is now authoritative; the legacy file-JSON stores are retired with idempotent per-workspace boot migrations.
  • Merged upstream/main (through v0.63.0).

Problem

The core had accumulated dead modules, desktop-only features that belong in the Tauri layer, and two goal/task-board stores kept in a half-finished "shadow" migration to the vendored tinyagents crate. This bloats the core binary/compile surface and keeps two sources of truth for goals/todos.

Solution

  • Deletions are surgical: each module removed from src/openhuman/mod.rs, its controller registration in src/core/all.rs, agent-tool registrations, and event-bus variants; verified no dangling references.
  • Companion / whatsapp → Tauri: the core runs in-process inside the shell, so the companion calls back into core over RPC for STT/TTS/config, and whatsapp's core-side agent tools reach the shell store via register_native_global/request_native_global (zero-serialization, in-process) — no WebSocket loopback. Both degrade gracefully headless.
  • accessibility is a shared backbone, so only the desktop-control half was removed; voice/always_on's AX-automation path was excised so voice still compiles.
  • tinyagents cutover keeps each store module's public signatures as a thin adapter delegating to the crate store, so consumers are largely untouched. thread_goals was already async; todos/task_board required a sync→async conversion cascade across ~25 call sites (dispatcher/triage/tools/threads/task_sources), with the in-memory Scratch board staying local. On each core boot, idempotent migrations copy legacy file-JSON goals/boards for the active workspace into the crate store while preserving existing crate values.
  • upstream merge: upstream #5049 feature-gated the same desktop-automation cluster this branch deleted; the merge keeps the deletions and fully excises upstream's desktop-automation feature + DomainGroup::DesktopAutomation, while retaining upstream's unrelated improvements (the #5050 Arc<Config> refactor, redirect_links removal, flows/api/keyring fixes).

Submission Checklist

  • Tests added or updated — rewrote the thread_goals/todos/task_board store + adapter tests (incl. the boot migrations and the async concurrent_claims_only_one_wins); UI tests updated for the relocated companion/whatsapp surfaces.
  • Diff coverage ≥ 80% — CI will report; large deletions dominate the diff. Will address any diff-cover gaps CI flags.
  • Coverage matrix updated — removed retired autocomplete and context-injection IDs from both the matrix and the canonical catalog; sync validator passes.
  • All affected feature IDs listed under ## Related — N/A: no tracking issue.
  • No new external network dependencies introduced — N/A: net removes deps (uiautomation dropped); the tinyagents crate is already vendored.
  • Manual smoke checklist — N/A in the headless agent environment; companion activation, recovery, notch transport, and foreground-context behavior are covered by focused Rust tests.
  • Linked issue — N/A: no issue.

Impact

  • Platform: desktop-only features (companion, whatsapp data) now live in the Tauri shell; headless/CLI/docker builds degrade gracefully (whatsapp tools return "unavailable", companion is desktop-only).
  • Migration: idempotent per-workspace boot copies of legacy thread_goals/ and agent_task_boards/ file-JSON into the crate KV store; no data loss.
  • Compatibility: goal/todo RPC surfaces + agent tools unchanged (thin adapters preserve signatures); card ids stay task-<uuid>.
  • Binary/compile: ~34.6k net lines removed from the core; uiautomation dep dropped.

Related

  • Closes: N/A
  • Follow-up PR(s)/TODOs: final docs/TEST-COVERAGE-MATRIX.md + RELEASE-MANUAL-SMOKE.md reconciliation if CI flags; optional dedup of the now-duplicate markdown/normalise helpers between todos and the crate.

AI Authored PR Metadata

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: chore/slim-core-modules
  • Commit SHA: (head of branch)

Validation Run

  • pnpm typecheck — passed
  • pnpm i18n:check / i18n:english:check — passed
  • Rust fmt/check (if changed): cargo check --lib (default + --no-default-features) green; cargo test --lib for the migrated stores green (thread_goals 26, todos/task_board 74)
  • Tauri fmt/check (if changed): cargo check --manifest-path app/src-tauri/Cargo.toml green
  • Focused tests: 5 task-board migration tests, 64 Tauri companion tests, Socket.IO bridge test, default core check, Tauri check, and disabled-feature smoke passed.

Behavior Changes

  • Intended behavior change: desktop_companion + whatsapp_data move to the Tauri shell; desktop controls (AX automation, text_input, autocomplete, computer-use tools) removed; goals/todos persistence backed by the tinyagents crate.
  • User-visible effect: companion + whatsapp behave the same on desktop; autocomplete/computer-use tools are gone; goals/todos unchanged.

Parity Contract

  • Legacy behavior preserved: goal/todo RPC + agent-tool signatures unchanged; single-InProgress invariant, claim CAS, and markdown rendering retained; companion/whatsapp behavior preserved on desktop.
  • Guard/fallback/dispatch parity checks: whatsapp tools degrade to "unavailable (desktop only)" headless; companion is desktop-only; boot migrations are idempotent.

Duplicate / Superseded PR Handling

  • Duplicate PR(s): N/A
  • Canonical PR: this
  • Resolution: N/A

senamakel added 28 commits July 21, 2026 11:41
…_companion + dead webview modules

Phase 1 of the module-slimming effort. Removes six modules from the Rust
core and their full UI surface to make the app lighter.

Deleted outright (core + UI + docs):
- codegraph          — agent code-nav tools (codegraph_search/index); rewired
                       the code_executor agent prompt to grep/glob navigation.
- council_registry   — saved-council RPC surface.
- model_council      — multi-model deliberation RPC + graph; removed its
                       json_rpc_e2e tests and the orphaned council-juror
                       Agent builder (from_config_for_read_only_council_juror).
- desktop_companion  — Clicky-style interaction loop; removed its controller,
                       the socketio companion:state_changed bridge, the
                       DomainEvent Companion* variants, and about_app catalog.

Dead/orphaned webview modules (Tauri already owns the real implementations):
- webview_apis          — Gmail webview bridge, retired; dead in core.
- webview_accounts      — orphaned; Tauri shell owns the live version.
- webview_notifications — empty stubs; the title-prefix contract already lives
                          shell-side.

Follow-on cleanups:
- meet_agent::wav is now gated under `meet` — desktop_companion was its only
  always-on consumer, so the load-bearing carve-out is gone. Updated AGENTS.md.
- Removed dead scripts/mock-webview-bridge.mjs (+ test) and inventory entries.
- UI: deleted council/model-council API clients + ModelCouncilTab, the
  companion Redux slice/panel/socket listener/nav, and all modelCouncil.* +
  desktopCompanion.* i18n keys across 14 locales (parity preserved).

Builds green: `cargo check --all-targets` (default) and
`cargo check --lib --no-default-features` (slim); `pnpm typecheck`, i18n checks.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
…at_scanner)

Phase 1 over-deleted core `webview_accounts`. The mapping missed that the
Tauri shell's `wechat_scanner` imports `openhuman_core::openhuman::
webview_accounts::{validate_scan, list_ingest_envelope, WechatScanPayload,
…}` — and Phase 1 never ran the shell `cargo check`, so the break slipped
through. Restore only the `wechat_ingest` half (the WeChat scan → memory-doc
ingest normalization the scanner needs); the genuinely-dead cookie-login
heuristic (`ops::detect_webview_logins`, zero callers) stays removed.

Both `cargo check --lib` (core) and `cargo check --manifest-path
app/src-tauri/Cargo.toml` (shell) now pass.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
Phase 2a. Completes the companion migration: Phase 1 removed it from core;
this adds it to the Tauri shell (where the hotkey/mic/screen/overlay already
live), so companion is a shell-owned desktop feature that calls back into
core only for the services core owns.

Shell (`app/src-tauri/src/companion/`, new): idle→listening→thinking→speaking
→pointing state machine, one-turn pipeline, `[POINT:x,y:label:screenN]`
parsing, and native cpal mic capture (mono i16 → 16kHz + shell-side WAV RIFF
packer, so no dependency on the now-gated meet_agent::wav). Five Tauri
commands (start/stop/status/config get/set) replace the old core companion.*
controllers; the shell emits a `companion://state_changed` event.
- STT/TTS over core RPC (`voice_transcribe_bytes`, `voice_tts`); the LLM turn
  runs shell-side against the backend, fetching creds via `auth_get_session
  _token` + `config_resolve_api_url` (no credential is embedded in the shell).
- `core_rpc.rs`: factored `post_json_rpc` out of `relay_http_rpc` + added
  `call_core_rpc`/`unwrap_rpc_outcome`.
- No dependency on core accessibility/text_input/autocomplete (being removed).

UI: restored the companion surface Phase 1 had removed (companionSlice,
CompanionPanel, nav, settings routes) and rewired it from core socket.io to
the Tauri event via new `companionEvents.ts`; OverlayApp listens to the same
event directly. Restored the 22 companion i18n keys across all 14 locales.

Validated: shell + core `cargo check`, `pnpm typecheck`, i18n checks, and
67 companion frontend tests — all green.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
…t_input, autocomplete, computer-use tools)

Phase 1c. Strips desktop-control surfaces from the core now that companion
lives in the shell and native desktop control is being retired.

accessibility (Option A — slimmed, NOT deleted): screen_intelligence + voice
still depend on its permissions / screen-capture / foreground-context /
globe-hotkey / focus / terminal backbone, so that is KEPT. Removed only the
desktop-control half: automate, ax_interact, uia_interact, overlay,
vision_click, element_match, paste, keys, app_fastpaths (+ their re-exports).

Removed wholesale:
- text_input/ (OS focused-field read/insert) + its controller + CLI arm.
- autocomplete/ (inline typeahead engine) + controller + CLI adapter + the
  runtime.autocomplete app-state payload + config migration + about_app entry.
- computer-use agent tools: ax_interact, automate, launch_app, mouse, keyboard,
  human_path, main_thread (tools/impl/computer + system/launch_app).
- computer_control config (ComputerControlConfig + the ax-auto-approve block).
- Excised voice/always_on.rs's automate/launch_platform intents (Play/OpenApp
  now defer to the agent fallback) so voice compiles without the AX backend.
- Dropped the `uiautomation` dep + the Win32_System_Com windows-sys feature.
- Shell: removed the MainThreadInputOp native handler that served the
  synthetic-input tools.

UI: deleted the autocomplete + desktop-agent surfaces (panels, setup modal,
tauriCommands, routes/nav/store, ghost-completion composer path) and their
i18n groups (107 keys/locale across 15 files, parity preserved); kept the
screen_intelligence permission UI.

Validated green (all independently re-run): core `cargo check --lib` +
`--all-targets` + slim `--no-default-features`, shell
`cargo check` (app/src-tauri), `pnpm typecheck`, i18n checks, frontend tests.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
… native bridge)

Phase 2b. The WhatsApp SQLite store + ingest + query logic moves to the shell
(where the scanner already lives); the agent keeps its 3 query tools via the
in-process event-bus native request/response — no WebSocket loopback, since
the core runs in-process inside the shell.

Core (`src/openhuman/whatsapp_data/`) — slimmed to the shared contract:
- Kept: types.rs (DTOs, single source of truth for both crates), the 3 agent
  tools, and a `methods` module of native-request key constants.
- Tools dispatch `request_native_global(whatsapp_data.list_chats|list_messages|
  search_messages, req)`; when no shell handler is registered (headless CLI/
  docker/slim) they degrade gracefully to an empty result with a "WhatsApp data
  unavailable (desktop only)" note — never an error.
- Deleted store.rs/sqlite_retry.rs/global.rs/ops.rs/rpc.rs/schemas.rs(+tests).
  Removed the RPC controllers + internal ingest controller from all.rs, the
  whatsapp_data boot-plan field/init in runtime/context.rs, and the
  `[whatsapp_data] ingest failed` error classifiers in observability.rs.

Shell (`app/src-tauri/src/whatsapp_data/`, new): ported SQLite store + ops
(90-day prune, upsert dedup), `register_native_handlers()` wired in lib.rs
setup (next to companion::setup), and Tauri commands whatsapp_data_list_chats/
_list_messages/_search_messages. Promoted rusqlite to an all-platform dep.

Scanner: post_whatsapp_data_ingest dispatches the native whatsapp_data.ingest
in-process instead of POSTing core RPC. Frontend memory.ts uses invoke(...) of
the new Tauri commands. Kept the whatsapp_data agent-write denylist entry (DB
still under the core workspace_dir).

Reconstructed in-worktree from the validated implementation (an earlier agent
run had validated it green but written to the wrong checkout); module files
copied verbatim, wiring re-applied against this branch's post-Phase-1c files.
Re-validation to follow.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
Reconciles 17 upstream commits with the slimming work. Key divergence:
upstream tinyhumansai#5049/tinyhumansai#4019 feature-GATED the desktop-automation cluster (accessibility,
screen_intelligence, autocomplete, desktop_companion, computer tools) behind a
default-ON `desktop-automation` feature; this branch had DELETED that cluster
(companion migrated to the Tauri shell). Resolution keeps the deletions and
removes upstream's `desktop-automation` feature entirely:

- Kept deleted: autocomplete, text_input, the computer-use tools, and the
  accessibility automation half. Restored this branch's clean ungated
  accessibility + screen_intelligence (always-on Platform, not gated); dropped
  upstream's stub.rs files and the re-added `uiautomation` dep.
- Removed `DomainGroup::DesktopAutomation` + the `desktop_automation` DomainSet
  axis + the `desktop-automation` Cargo feature and all its `#[cfg]` gates and
  paired tests (all_tests/ops_tests/jsonrpc_tests/legacy_aliases).
- Kept upstream's unrelated improvements, incl. tinyhumansai#5050's shared `Arc<Config>` in
  the session builder (adapted: dropped the ax-interact `resolve_tool_config`
  toggle since computer_control is gone), the redirect_links removal (tinyhumansai#5052),
  flows/api/keyring fixes, and v0.63.0.
- Frontend: dropped upstream's inline-completion additions (autocomplete UI was
  removed in Phase 1c); cleaned orphaned Conversations.tsx remnants.

Green: core `cargo check --lib`, `pnpm typecheck`. all-targets/shell/slim/i18n
verification to follow.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
The upstream merge removed the core `desktop-automation` feature, but
app/src-tauri/Cargo.toml still forwarded it to `openhuman_core`, breaking
shell dependency resolution (`openhuman does not have that feature`). Shell
`cargo check` now resolves and compiles green.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
…store

The vendored tinyagents `graph::goals` KV store is now AUTHORITATIVE for thread
goals; the legacy `{workspace}/thread_goals/` file-JSON store is retired. Every
consumer (RPC ops, the harness turn loop, the heartbeat continuation runtime,
the agent tools, post-turn accounting) is untouched — `thread_goals::store`
keeps its exact `store::*(workspace_dir, …)` signatures and now forwards each
operation to the crate store, converting the crate ThreadGoal/error back to the
local types.

- store.rs: file-JSON persistence deleted; thin crate-backed adapter (delegates
  to tinyagents::graph::goals::store, converts via crate_adapter). The one op
  without a crate equivalent, the unconditional set_continuation_suppressed, is
  replicated via the adapter's raw mirror read/write.
- crate_adapter.rs: dropped the shadow/dual-write scaffold (shadow_mirror_*,
  the OPENHUMAN_THREAD_GOALS_CRATE_SHADOW flag) now that the crate is primary;
  kept the conversion + mirror helpers; the migration now reads the legacy
  file-JSON tree directly (a self-contained reader) rather than via the
  now-crate-backed store.
- services.rs: wired migrate_legacy_goals_into_crate_store into
  start_boot_once_jobs behind a Once so existing legacy goals are copied into
  the crate store once at boot (idempotent, fast on an empty/absent dir).
- Rewrote the crate_adapter migration tests to seed the legacy file-JSON tree
  directly; dropped the shadow-flag test. Docs updated (mod.rs, crate_adapter).

Core `cargo check --lib` green. Test-compile + gates to follow.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
…ate store

The vendored tinyagents `graph::todos` KV store is now AUTHORITATIVE for the
per-thread task board; the legacy `{workspace}/agent_task_boards/*.json`
file-JSON store is retired. Unlike thread_goals (already async), the task-board
store + `todos::ops` were synchronous while the crate store is async, so this
does the full sync→async conversion.

- agent/task_board.rs: `TaskBoardStore::{get,put,delete}` + `board_for_thread`
  made async, re-backed onto the crate via the new adapter — get reads raw
  (preserves None-vs-empty), put normalises locally (keeps `task-<uuid>` ids)
  then delegates to crate `replace` (enforces single-InProgress), delete does
  an existence pre-check + raw key delete so a later get is `None`.
- todos/graph_shadow.rs → renamed crate_adapter.rs: repointed the store handle
  from the shadow dir to the shared `tinyagents_store/kv` tree (ns graph.todos),
  kept the conversion helpers + added from_crate_card/board round-trips, dropped
  the shadow mirror/claim scaffold, and added the boot migration.
- todos/ops.rs + ~25 caller sites across task_dispatcher, task_sources, triage,
  agent/tools, threads, runs, skills: cascaded to async/.await (no block_on).
  The scratch + claim locks moved parking_lot → tokio async mutex. Scratch
  (`BoardLocation::Scratch`) stays on the local in-memory path — only Thread
  boards route to the crate. `emit_progress`/`AgentProgress::TaskBoardUpdated`,
  markdown rendering, and `runs.rs` (its own *.runs.json ledger) stay local.
- services.rs: `spawn_task_boards_migration` wired behind a Once beside the
  thread-goals one, copying legacy boards (skipping *.runs.json) into graph.todos.
- Rewrote the sync tests async (incl. concurrent_claims_only_one_wins).

Validated: core `cargo check --lib` clean, `cargo test --lib` todos+task_board
74 passed, slim `--no-default-features` build OK.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
Working scratch used during the slimming effort; not product code.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
… + apply hook auto-fixes

`cargo check --all-targets` (integration tests, which `cargo check --lib` skips)
caught 2 raw-coverage e2e tests calling the now-async `TaskBoardStore::{get,put,
delete}`/`board_for_thread` without `.await` (Phase 3b made them async). Added
`.await`; converted the sync `#[test]` inference-agent task-board test to
`#[tokio::test] async`. Also includes the pre-push hook's cargo-fmt/prettier/
eslint auto-fixes across the branch.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
…age e2e tests

agent_triage_dispatch_round23: made the add_card/card_status helpers async +
awaited their callers; awaited ops::update_status. (Completes the async cascade
into the integration tests that cargo check --lib didn't compile.)

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
…ings)

The shell-side companion never wired is_active into its session logic (only a
test used it), so `cargo clippy --manifest-path app/src-tauri/Cargo.toml
-- -D warnings` flagged it dead. Removed the method + its test.

Claude-Session: https://claude.ai/code/session_01Km3VTggbYDgByXmmExYW5i
@senamakel
senamakel requested a review from a team July 22, 2026 11:51
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 229 files, which is 79 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to Pro+ to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 0cd95a63-4dfc-40e1-b229-d0280137fc65

📥 Commits

Reviewing files that changed from the base of the PR and between e780277 and 85e12cb.

⛔ Files ignored due to path filters (2)
  • Cargo.lock is excluded by !**/*.lock
  • app/src-tauri/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (352)
  • .github/workflows/ci-lite.yml
  • AGENTS.md
  • Cargo.toml
  • app/scripts/e2e-run-all-flows.sh
  • app/src-tauri/Cargo.toml
  • app/src-tauri/permissions/allow-core-process.toml
  • app/src-tauri/src/companion/audio.rs
  • app/src-tauri/src/companion/events.rs
  • app/src-tauri/src/companion/mod.rs
  • app/src-tauri/src/companion/pipeline.rs
  • app/src-tauri/src/companion/pipeline_tests.rs
  • app/src-tauri/src/companion/pointing.rs
  • app/src-tauri/src/companion/pointing_tests.rs
  • app/src-tauri/src/companion/session.rs
  • app/src-tauri/src/companion/session_tests.rs
  • app/src-tauri/src/companion/types.rs
  • app/src-tauri/src/companion_commands.rs
  • app/src-tauri/src/core_rpc.rs
  • app/src-tauri/src/lib.rs
  • app/src-tauri/src/webview_accounts/mod.rs
  • app/src-tauri/src/whatsapp_data/global.rs
  • app/src-tauri/src/whatsapp_data/mod.rs
  • app/src-tauri/src/whatsapp_data/ops.rs
  • app/src-tauri/src/whatsapp_data/sqlite_retry.rs
  • app/src-tauri/src/whatsapp_data/store.rs
  • app/src-tauri/src/whatsapp_data/store_tests.rs
  • app/src-tauri/src/whatsapp_scanner/mod.rs
  • app/src/components/intelligence/ModelCouncilTab.test.tsx
  • app/src/components/intelligence/ModelCouncilTab.tsx
  • app/src/components/oauth/__tests__/oauthAuthReadiness.test.ts
  • app/src/components/settings/hooks/useSettingsNavigation.ts
  • app/src/components/settings/layout/settingsNavIcons.tsx
  • app/src/components/settings/panels/AutocompleteDebugPanel.tsx
  • app/src/components/settings/panels/AutocompletePanel.tsx
  • app/src/components/settings/panels/CompanionPanel.tsx
  • app/src/components/settings/panels/DesktopAgentPanel.tsx
  • app/src/components/settings/panels/DeveloperOptionsPanel.tsx
  • app/src/components/settings/panels/VoicePanel.tsx
  • app/src/components/settings/panels/__tests__/AutocompleteDebugPanel.test.tsx
  • app/src/components/settings/panels/__tests__/AutocompletePanel.test.tsx
  • app/src/components/settings/panels/__tests__/CompanionPanel.test.tsx
  • app/src/components/settings/panels/__tests__/DesktopAgentPanel.test.tsx
  • app/src/components/settings/panels/__tests__/EmbeddingsPanel.test.tsx
  • app/src/components/settings/panels/__tests__/VoicePanel.test.tsx
  • app/src/components/settings/panels/autocomplete/AppFilterSection.tsx
  • app/src/components/settings/panels/autocomplete/CompletionStyleSection.tsx
  • app/src/components/settings/settingsRouteElements.tsx
  • app/src/components/settings/settingsRouteRegistry.ts
  • app/src/components/skills/AutocompleteSetupModal.tsx
  • app/src/components/skills/WorkflowRunnerBody.tsx
  • app/src/features/autocomplete/__tests__/useAutocompleteSkillStatus.test.tsx
  • app/src/features/autocomplete/useAutocompleteSkillStatus.ts
  • app/src/features/conversations/Conversations.tsx
  • app/src/lib/coreState/__tests__/store.test.ts
  • app/src/lib/coreState/store.ts
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/zh-CN.ts
  • app/src/overlay/OverlayApp.tsx
  • app/src/pages/Skills.tsx
  • app/src/pages/__tests__/Conversations.attachments.test.tsx
  • app/src/pages/__tests__/Conversations.render.test.tsx
  • app/src/pages/__tests__/Conversations.sidebarOverflow.test.tsx
  • app/src/pages/onboarding/__tests__/OnboardingLayout.test.tsx
  • app/src/providers/CoreStateProvider.tsx
  • app/src/providers/SocketProvider.tsx
  • app/src/providers/__tests__/CoreStateProvider.identityFlip.test.tsx
  • app/src/providers/__tests__/CoreStateProvider.test.tsx
  • app/src/services/__tests__/companionPayload.test.ts
  • app/src/services/api/councilRegistryApi.test.ts
  • app/src/services/api/councilRegistryApi.ts
  • app/src/services/api/modelCouncilApi.test.ts
  • app/src/services/api/modelCouncilApi.ts
  • app/src/services/companionEvents.ts
  • app/src/services/coreStateApi.test.ts
  • app/src/services/coreStateApi.ts
  • app/src/services/socketService.ts
  • app/src/store/__tests__/socketSelectors.test.ts
  • app/src/store/companionSlice.test.ts
  • app/src/store/companionSlice.ts
  • app/src/test/mockDefaultSkillStatusHooks.ts
  • app/src/utils/tauriCommands/autocomplete.ts
  • app/src/utils/tauriCommands/index.ts
  • app/src/utils/tauriCommands/memory.test.ts
  • app/src/utils/tauriCommands/memory.ts
  • app/src/utils/toolDefinitions.ts
  • app/test/e2e/specs/autocomplete-flow.spec.ts
  • app/test/e2e/specs/desktop-agent.spec.ts
  • app/test/e2e/specs/mega-flow.spec.ts
  • app/test/e2e/specs/settings-dev-options.spec.ts
  • app/test/playwright/specs/autocomplete-flow.spec.ts
  • app/test/playwright/specs/settings-dev-options.spec.ts
  • docs/TEST-COVERAGE-MATRIX.md
  • docs/specs/2026-07-23-pr-5125-review-fixes-design.md
  • gitbooks/developing/architecture/agent-harness.md
  • gitbooks/developing/architecture/desktop-companion.md
  • package.json
  • scripts/__tests__/mock-webview-bridge-args.test.mjs
  • scripts/feature-ids.json
  • scripts/generate-test-inventory.mjs
  • scripts/i18n-find-english.ts
  • scripts/mock-webview-bridge.mjs
  • scripts/seed-councils.mjs
  • scripts/test-rust-e2e.sh
  • src/core/all.rs
  • src/core/all_tests.rs
  • src/core/autocomplete_cli_adapter.rs
  • src/core/cli.rs
  • src/core/cli_tests.rs
  • src/core/event_bus/events.rs
  • src/core/jsonrpc.rs
  • src/core/jsonrpc_tests.rs
  • src/core/legacy_aliases.rs
  • src/core/logging.rs
  • src/core/mod.rs
  • src/core/observability.rs
  • src/core/runtime/builder.rs
  • src/core/runtime/context.rs
  • src/core/runtime/services.rs
  • src/core/socketio.rs
  • src/openhuman/about_app/catalog_data.rs
  • src/openhuman/about_app/catalog_tests.rs
  • src/openhuman/accessibility/app_fastpaths/app_shortcuts.rs
  • src/openhuman/accessibility/app_fastpaths/browser.rs
  • src/openhuman/accessibility/app_fastpaths/browser_shortcuts.rs
  • src/openhuman/accessibility/app_fastpaths/fastpaths_tests.rs
  • src/openhuman/accessibility/app_fastpaths/mod.rs
  • src/openhuman/accessibility/app_fastpaths/music.rs
  • src/openhuman/accessibility/automate.rs
  • src/openhuman/accessibility/automate_tests.rs
  • src/openhuman/accessibility/ax_interact.rs
  • src/openhuman/accessibility/ax_interact_tests.rs
  • src/openhuman/accessibility/element_match.rs
  • src/openhuman/accessibility/element_match_tests.rs
  • src/openhuman/accessibility/globe.rs
  • src/openhuman/accessibility/keys.rs
  • src/openhuman/accessibility/mod.rs
  • src/openhuman/accessibility/overlay.rs
  • src/openhuman/accessibility/paste.rs
  • src/openhuman/accessibility/stub.rs
  • src/openhuman/accessibility/types.rs
  • src/openhuman/accessibility/uia_interact.rs
  • src/openhuman/accessibility/uia_interact_tests.rs
  • src/openhuman/accessibility/vision_click.rs
  • src/openhuman/accessibility/vision_click_tests.rs
  • src/openhuman/agent/harness/definition_tests.rs
  • src/openhuman/agent/harness/fork_context.rs
  • src/openhuman/agent/harness/session/builder/builder_tests.rs
  • src/openhuman/agent/harness/session/builder/factory.rs
  • src/openhuman/agent/harness/session/builder/setters.rs
  • src/openhuman/agent/harness/session/runtime.rs
  • src/openhuman/agent/harness/session/turn/tools.rs
  • src/openhuman/agent/harness/session/types.rs
  • src/openhuman/agent/harness/subagent_runner/ops/provider.rs
  • src/openhuman/agent/harness/subagent_runner/ops/runner.rs
  • src/openhuman/agent/harness/subagent_runner/ops_tests.rs
  • src/openhuman/agent/prompts/SOUL.md
  • src/openhuman/agent/task_board.rs
  • src/openhuman/agent/task_dispatcher/dispatch.rs
  • src/openhuman/agent/task_dispatcher/executor.rs
  • src/openhuman/agent/task_dispatcher/poller.rs
  • src/openhuman/agent/task_dispatcher/registry.rs
  • src/openhuman/agent/task_dispatcher/tests.rs
  • src/openhuman/agent/tools/todo.rs
  • src/openhuman/agent/tools/update_task.rs
  • src/openhuman/agent/tools/update_task_tests.rs
  • src/openhuman/agent/triage/escalation.rs
  • src/openhuman/agent_orchestration/agent_teams/runtime_tests.rs
  • src/openhuman/agent_orchestration/ops_tests.rs
  • src/openhuman/agent_orchestration/parent_context/builder.rs
  • src/openhuman/agent_orchestration/tools/close_subagent.rs
  • src/openhuman/agent_orchestration/tools/spawn_async_subagent.rs
  • src/openhuman/agent_orchestration/tools/spawn_parallel_agents_tests.rs
  • src/openhuman/agent_orchestration/tools/spawn_worker_thread.rs
  • src/openhuman/agent_orchestration/tools/tools_e2e_tests.rs
  • src/openhuman/agent_orchestration/workflow_runs/engine_tests.rs
  • src/openhuman/agent_registry/agents/code_executor/agent.toml
  • src/openhuman/agent_registry/agents/code_executor/prompt.md
  • src/openhuman/agent_registry/agents/desktop_control_agent/agent.toml
  • src/openhuman/agent_registry/agents/desktop_control_agent/mod.rs
  • src/openhuman/agent_registry/agents/desktop_control_agent/prompt.md
  • src/openhuman/agent_registry/agents/desktop_control_agent/prompt.rs
  • src/openhuman/agent_registry/agents/loader.rs
  • src/openhuman/agent_registry/agents/mod.rs
  • src/openhuman/agent_registry/agents/orchestrator/agent.toml
  • src/openhuman/agent_registry/agents/orchestrator/prompt.md
  • src/openhuman/agent_registry/agents/orchestrator/prompt.rs
  • src/openhuman/agent_registry/agents/tools_agent/agent.toml
  • src/openhuman/app_state/ops.rs
  • src/openhuman/app_state/ops_tests.rs
  • src/openhuman/approval/gate.rs
  • src/openhuman/autocomplete/README.md
  • src/openhuman/autocomplete/core/engine.rs
  • src/openhuman/autocomplete/core/engine_tests.rs
  • src/openhuman/autocomplete/core/focus.rs
  • src/openhuman/autocomplete/core/mod.rs
  • src/openhuman/autocomplete/core/overlay.rs
  • src/openhuman/autocomplete/core/terminal.rs
  • src/openhuman/autocomplete/core/text.rs
  • src/openhuman/autocomplete/history.rs
  • src/openhuman/autocomplete/mod.rs
  • src/openhuman/autocomplete/ops.rs
  • src/openhuman/autocomplete/schemas.rs
  • src/openhuman/autocomplete/stub.rs
  • src/openhuman/autocomplete/types.rs
  • src/openhuman/codegraph/README.md
  • src/openhuman/codegraph/index.rs
  • src/openhuman/codegraph/mod.rs
  • src/openhuman/codegraph/search.rs
  • src/openhuman/codegraph/store.rs
  • src/openhuman/codegraph/tools.rs
  • src/openhuman/config/mod.rs
  • src/openhuman/config/ops/mod.rs
  • src/openhuman/config/ops/model.rs
  • src/openhuman/config/ops_tests.rs
  • src/openhuman/config/schema/autocomplete.rs
  • src/openhuman/config/schema/load/impl_load.rs
  • src/openhuman/config/schema/load/migrate.rs
  • src/openhuman/config/schema/mod.rs
  • src/openhuman/config/schema/tools/integrations.rs
  • src/openhuman/config/schema/tools/mod.rs
  • src/openhuman/config/schema/types.rs
  • src/openhuman/connectivity/rpc.rs
  • src/openhuman/council_registry/mod.rs
  • src/openhuman/council_registry/schemas.rs
  • src/openhuman/council_registry/store.rs
  • src/openhuman/council_registry/types.rs
  • src/openhuman/credentials/ops.rs
  • src/openhuman/credentials/ops_tests.rs
  • src/openhuman/desktop_companion/README.md
  • src/openhuman/desktop_companion/bus.rs
  • src/openhuman/desktop_companion/handoff.rs
  • src/openhuman/desktop_companion/mod.rs
  • src/openhuman/desktop_companion/schemas.rs
  • src/openhuman/desktop_companion/stub.rs
  • src/openhuman/inference/voice/local_transcribe.rs
  • src/openhuman/mcp_server/resources.rs
  • src/openhuman/meet_agent/mod.rs
  • src/openhuman/mod.rs
  • src/openhuman/model_council/council.rs
  • src/openhuman/model_council/graph.rs
  • src/openhuman/model_council/mod.rs
  • src/openhuman/model_council/schemas.rs
  • src/openhuman/proc_metrics/mod.rs
  • src/openhuman/screen_intelligence/mod.rs
  • src/openhuman/screen_intelligence/stub.rs
  • src/openhuman/security/policy/policy_tests.rs
  • src/openhuman/security/policy/types.rs
  • src/openhuman/skills/e2e_run_tests.rs
  • src/openhuman/skills/run_log.rs
  • src/openhuman/task_sources/ops.rs
  • src/openhuman/task_sources/pipeline.rs
  • src/openhuman/task_sources/pipeline_tests.rs
  • src/openhuman/task_sources/route.rs
  • src/openhuman/task_sources/store_tests.rs
  • src/openhuman/text_input/README.md
  • src/openhuman/text_input/cli.rs
  • src/openhuman/text_input/mod.rs
  • src/openhuman/text_input/ops.rs
  • src/openhuman/text_input/schemas.rs
  • src/openhuman/text_input/types.rs
  • src/openhuman/thread_goals/crate_adapter.rs
  • src/openhuman/thread_goals/mod.rs
  • src/openhuman/thread_goals/ops.rs
  • src/openhuman/thread_goals/runtime.rs
  • src/openhuman/thread_goals/store.rs
  • src/openhuman/thread_goals/tools.rs
  • src/openhuman/threads/schemas.rs
  • src/openhuman/threads/tools.rs
  • src/openhuman/tinyagents/middleware.rs
  • src/openhuman/tinyagents/topology.rs
  • src/openhuman/tinyflows/caps.rs
  • src/openhuman/todos/crate_adapter.rs
  • src/openhuman/todos/graph_shadow.rs
  • src/openhuman/todos/invariant_tests.rs
  • src/openhuman/todos/mod.rs
  • src/openhuman/todos/ops.rs
  • src/openhuman/todos/runs.rs
  • src/openhuman/todos/schemas.rs
  • src/openhuman/todos/tools.rs
  • src/openhuman/tools/impl/computer/automate.rs
  • src/openhuman/tools/impl/computer/ax_interact.rs
  • src/openhuman/tools/impl/computer/human_path.rs
  • src/openhuman/tools/impl/computer/human_path_tests.rs
  • src/openhuman/tools/impl/computer/keyboard.rs
  • src/openhuman/tools/impl/computer/keyboard_tests.rs
  • src/openhuman/tools/impl/computer/main_thread.rs
  • src/openhuman/tools/impl/computer/mod.rs
  • src/openhuman/tools/impl/computer/mouse.rs
  • src/openhuman/tools/impl/computer/mouse_tests.rs
  • src/openhuman/tools/impl/mod.rs
  • src/openhuman/tools/impl/system/launch_app.rs
  • src/openhuman/tools/impl/system/mod.rs
  • src/openhuman/tools/mod.rs
  • src/openhuman/tools/ops.rs
  • src/openhuman/tools/ops_tests.rs
  • src/openhuman/tools/user_filter.rs
  • src/openhuman/voice/always_on.rs
  • src/openhuman/webview_accounts/mod.rs
  • src/openhuman/webview_accounts/ops.rs
  • src/openhuman/webview_apis/README.md
  • src/openhuman/webview_apis/client.rs
  • src/openhuman/webview_apis/mod.rs
  • src/openhuman/webview_apis/rpc.rs
  • src/openhuman/webview_apis/schemas.rs
  • src/openhuman/webview_apis/types.rs
  • src/openhuman/webview_notifications/README.md
  • src/openhuman/webview_notifications/bus.rs
  • src/openhuman/webview_notifications/dispatch.rs
  • src/openhuman/webview_notifications/mod.rs
  • src/openhuman/webview_notifications/schemas.rs
  • src/openhuman/webview_notifications/types.rs
  • src/openhuman/whatsapp_data/README.md
  • src/openhuman/whatsapp_data/global.rs
  • src/openhuman/whatsapp_data/mod.rs
  • src/openhuman/whatsapp_data/rpc.rs
  • src/openhuman/whatsapp_data/schemas.rs
  • src/openhuman/whatsapp_data/schemas_tests.rs
  • src/openhuman/whatsapp_data/tools.rs
  • src/openhuman/whatsapp_data/tools/list_chats.rs
  • src/openhuman/whatsapp_data/tools/list_messages.rs
  • src/openhuman/whatsapp_data/tools/search_messages.rs
  • tests/agent_harness_public.rs
  • tests/autocomplete_memory_e2e.rs
  • tests/calendar_grounding_e2e.rs
  • tests/composio_list_tools_stack_overflow_regression.rs
  • tests/json_rpc_e2e.rs
  • tests/raw_coverage/agent_archivist_debug_round21_raw_coverage_e2e.rs
  • tests/raw_coverage/agent_harness_leftovers_raw_coverage_e2e.rs
  • tests/raw_coverage/agent_harness_raw_coverage_e2e.rs
  • tests/raw_coverage/agent_large_round25_raw_coverage_e2e.rs
  • tests/raw_coverage/agent_prompts_subagent_raw_coverage_e2e.rs
  • tests/raw_coverage/agent_session_turn_raw_coverage_e2e.rs
  • tests/raw_coverage/agent_triage_dispatch_round23_raw_coverage_e2e.rs
  • tests/raw_coverage/inference_agent_raw_coverage_e2e.rs
  • tests/raw_coverage/owned_domain_raw_coverage_e2e.rs
  • tests/raw_coverage/tools_agent_credentials_state_raw_coverage_e2e.rs
  • tests/raw_coverage/tools_approval_channels_raw_coverage_e2e.rs
  • tests/raw_coverage/tools_composio_round22_raw_coverage_e2e.rs
  • tests/raw_coverage/tools_network_channels_raw_coverage_e2e.rs
  • tests/webview_apis_bridge.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: dddcb46eba

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/src/components/settings/panels/CompanionPanel.tsx
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 23, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c9c31f497c

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/tinyagents/middleware.rs Outdated
Comment thread src/openhuman/approval/gate.rs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f3b2aff898

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/todos/crate_adapter.rs Outdated
Comment thread app/src/lib/i18n/fr.ts Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 23, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 48dd7a6a4b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread app/src/components/settings/settingsRouteElements.tsx
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 23, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 23, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 78c2178f8d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/thread_goals/crate_adapter.rs Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 23, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 597034f4d0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +279 to +283
let result = crate::core_rpc::call_core_rpc("openhuman.voice_tts_dispatch", params).await?;
debug!(
"{LOG_PREFIX} tts audio_mime={:?}",
result.get("audio_mime").and_then(|mime| mime.as_str())
);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Play companion TTS audio before completing the turn

When a companion turn produces a non-empty reply, this call returns the voice_tts_dispatch audio payload, but the new Tauri companion path does not consume that audio: companion/audio.rs only captures microphone input, and this function only logs the MIME type before returning success. The session then reports tts_synthesized=true and transitions through Speaking/Idle, so users who start the desktop companion get no spoken response even though synthesis succeeded; decode/play or forward the returned audio before treating TTS as complete.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5b67ca0bf3

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/mod.rs
@@ -161,10 +155,6 @@ pub mod webhooks;
#[cfg(feature = "channels")]
pub mod webview_accounts;
#[cfg(feature = "channels")]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make the retired webview_apis bridge best-effort

With the core webview_apis module/controllers removed here, the desktop shell still runs app/src-tauri/src/lib.rs:3219-3242 to start the old WebSocket bridge and aborts setup when that loopback listener fails to start. Since a repo-wide search leaves only the shell-side bridge and no remaining core/app caller for webview_apis RPCs, a transient bridge bind/start failure now prevents the shipped desktop app from launching for a removed capability; remove this startup dependency or make it non-fatal.

AGENTS.md reference: AGENTS.md:L24-L25

Useful? React with 👍 / 👎.

@senamakel
senamakel merged commit 2525400 into tinyhumansai:main Jul 24, 2026
32 of 34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant