streamMetadata
fun DeviceSession.streamMetadata(channels: List<ChannelMetadata>, outputMode: OutputMode, software: Map<String, String> = emptyMap()): StreamMetadata
Build the StreamMetadata of this session for the given channels (the LSL path passes lslContractChannels; recorders pass their own file-specific lists). Identity fields come from the Device Information Service (DeviceSession.info; null when not read or blank), the montage from DeviceSession.currentConfig. software adds entries to versions (e.g. board); the SDK adds kotlin_sdk (BrainAccessKit.VERSION) and contract.