Files
hermes-agent/apps/desktop/src/components
Teknium 09047ec69c fix(desktop): route approval.respond through the session's owner, not the ambient socket
Client half of #91684. The approval bar (approval.tsx) and the native
notification action path (native-notifications.ts) sent approval.respond on
the AMBIENT gateway socket. Ambient follows foreground focus; for an approval
raised by a cross-profile or tile-owned session it points at a backend that
never held the approval, so Run/Reject silently failed after a profile swap
or reconnect.

- New knownOwnerForSession/requestForOwnedSession in store/session-states.ts:
  resolve the owner sync (tile owner route -> known session profile via row or
  open-time hint; runtime ids translated to stored ids first) and dispatch via
  requestForSessionProfile. Ambient only when no owner is known — never a
  fall-back to "active".
- approval.tsx and native-notifications.ts respond through it, binding the
  ambient dispatcher so the no-owner path keeps the exact 2-arg call shape.
- Tests: owner resolution (tile route first, row-profile fallback,
  undefined for unknown/null) and ambient arity preservation in
  session-states.test.ts; existing approval + native-notification suites
  still pass unchanged on the ambient path.

Maintainer commit (cluster salvage).
2026-08-23 17:43:39 -07:00
..