fix(frameMetadata): hand core the options through a context slot; keep the worker across disconnects
Core read room.options.frameMetadata (and the e2ee slices) in the
engine, the join capability and the publish path, so a configured
frameMetadata({ worker }) only reached the receive side, and the first
fix wrote the options back into room.options. The extension now resolves
its options once (its own, or the RoomOptions slice when listed bare)
and hands them to core through ctx.setFrameMetadataOptions(); the
engine carries them like the E2EE manager. LocalParticipant checks the
engine's E2EE manager instead of the e2ee room options.
FrameMetadataManager no longer terminates the worker on disconnect: a
room can connect again, and the publish path would have used a dead
worker. The extension's dispose terminates it from Room.dispose().
pnpm check:core fails when a core module reads an extension option
slice.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>