9452bca388
The real fix for Bot Mode 'session not found' / endless hang: dispatch session-scoped RPCs on the OWNING profile's local gateway, using the route the chat tile already carries — the same multi-connection machinery Sessions mode uses, which has never had this problem. Root cause chain: - A bot chat is a persisted tile that records its exact owner (connectionId + profile) in tile.ownerRoute; requestForSessionProfile already dispatches on any (connectionId, profile) via the per-profile local gateway pool. - But wiring's requestGateway resolved the owner via rememberedSessionProfile, a $sessions row lookup. Canonical Bot Chats are born hidden (never listed), so the lookup missed and fell back to the ACTIVE profile -> prompt.submit hit the launch backend that never owned the session -> 4001, and the resume ladder re-resolved through the same blind spot, so it hung. - It also keyed off $selectedStoredSessionId, but a bot chat renders in a TILE whose id is $focusedStoredSessionId (selected stays the primary pane), so even the row path was reading the wrong session. Fix: - wiring requestGateway: resolve owner from the FOCUSED stored id, preferring the tile's persisted ownerRoute; fall back to the list-derived profile only when no tile route exists. One resolver, every session RPC (submit, resume, attach, interrupt, compress) inherits it. - sdk openSession: synthesize a local ownerRoute from for bot opens that carry no explicit cross-connection route, so LOCAL bot tiles carry their owner too (previously only remote routes did). Strictly routing metadata: the dial path, all-profiles view, and the route-registry retry check all still key off the EXPLICIT route, so a plain local open behaves exactly as before (no registry-secondary dial, no forced all-profiles view). Fixes already-open chats (tile route is persisted, needs no fresh open) and survives relaunch. 3 tests for sessionTileOwnerRoute. tsc 0 errors. Co-authored-by: Teknium <teknium1@users.noreply.github.com>