d29a7936e4
When the Desktop has a bot's "Bot Chat" open, that session holds the single-owner lease, so the `hermes -p <bot> chat -c "Bot Chat"` subprocess `bot_relay.deliver` spawns refuses with "already has a live owner" and the DM payload is dropped — the sender was already acked. bot_relay.deliver now looks up a live in-process session for the target profile whose title resolves to "Bot Chat" (same profile_home match as session.resume's _find_live_unpersisted, pending_title for lazy sessions, otherwise the db title) and, when found, submits the message through the existing prompt.submit handler — the composer's choke point — so it lands as a normal user turn (role alternation preserved, streams to the open window). No live owner → the subprocess path runs exactly as before. On the local message_agent subprocess path, the lease refusal is surfaced as a structured `target_busy` delivery failure telling the sender the message was NOT delivered, instead of a raw exit-1 with the text buried in stderr. Closes #100523 Supersedes #100544, #100542 Co-authored-by: fangliquanflq <fangliquan@qq.com> Co-authored-by: 686f6c61 <github@00b.tech>