fix(web): stop drawer and panel terminals from allocating the same id

Terminal sessions are keyed by (threadId, terminalId) and ids are
client-allocated, but the drawer seeded its allocator from the
server-known sessions with panel terminals filtered out, while other
call sites ignored panel ids or freshly opened local ids the server
does not know yet. A drawer terminal could therefore mint the id of an
existing panel terminal (deterministically when the drawer was empty),
attaching two viewports to one PTY that mirrored each other.

Every allocator now seeds from the union of server-known ids, the
drawer's local UI-state ids, and the right panel's surface ids, via one
allocatable-ids memo per scope.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2d2e6c5089Wout Stiens committed on 7/31/2026, 11:01:00 AMparent5da6b1f
1 file changedLine totals unavailable