oficina / meet Public

Merge branch 'fix/cant-hear' into main

Calls can say when sound is not getting through: microphone and receive
meters on every tile, receiver-to-sender reports (spec §15.20), web
autoplay recovery, an audio test on every platform, and a per-device
input choice for multi-channel microphones on Mac.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 0b13cd3182dc5eb20bc8daef597b3f649e7b9736 parent 16c14ecparent 48095cb
53 files changed, +6455 −125
  • Makefile +2 −1
  • callscore/media_test.go +39 −0
  • callscore/room.go +39 −2
  • docs/superpowers/specs/2026-09-07-meet-design.md +69 −1
  • internal/calls/hub/media.go +9 −2
  • internal/calls/hub/media_test.go +58 −0
  • internal/calls/signal.go +93 −11
  • internal/calls/static/calls.css +133 −0
  • internal/calls/static/devices.js +422 −1
  • internal/calls/static/room.js +641 −12
  • internal/calls/templates/join.html +29 −0
  • internal/callstest/browser_test.go +3 −0
  • internal/callstest/media_test.go +71 −1
  • internal/callstest/native_selftest_test.go +62 −0
  • native/README.md +42 −0
  • native/apple/Sources/CallsInterop/AudioSelfTestHarness.swift +148 −0
  • native/apple/Sources/CallsInterop/Interop.swift +3 −0
  • native/apple/Sources/CallsKit/Audio.swift +60 −2
  • native/apple/Sources/CallsKit/AudioLevelRules.swift +253 −0
  • native/apple/Sources/CallsKit/AudioMeter.swift +362 −0
  • native/apple/Sources/CallsKit/AudioSelfTest.swift +303 −0
  • native/apple/Sources/CallsKit/AudioSelfTestLoopback.swift +94 −0
  • native/apple/Sources/CallsKit/AudioSelfTestModel.swift +691 −0
  • native/apple/Sources/CallsKit/AudioSelfTestView.swift +275 −0
  • native/apple/Sources/CallsKit/Call.swift +134 −0
  • native/apple/Sources/CallsKit/CallAudio.swift +34 −7
  • native/apple/Sources/CallsKit/CallsLobby.swift +3 −0
  • native/apple/Sources/CallsKit/DevicePanel.swift +5 −0
  • native/apple/Sources/CallsKit/DevicePanelAudio.swift +74 −0
  • native/apple/Sources/CallsKit/InputChannel.swift +241 −0
  • native/apple/Sources/CallsKit/MacCallView.swift +8 −5
  • native/apple/Sources/CallsKit/MacFullWindowCall.swift +7 −5
  • native/apple/Sources/CallsKit/MacVideoTile.swift +24 −7
  • native/apple/Sources/CallsKit/Media.swift +48 −0
  • native/apple/Sources/CallsKit/MiniWindow.swift +7 −5
  • native/apple/Sources/CallsKit/NoiseSuppression.swift +91 −2
  • native/apple/Sources/CallsKit/RemoteAudioTap.swift +61 −0
  • native/apple/Sources/CallsKit/Wire.swift +16 −1
  • native/apple/Tests/CallsKitTests/AudioLevelTests.swift +235 −0
  • native/apple/Tests/CallsKitTests/AudioSelfTestTests.swift +377 −0
  • native/apple/Tests/CallsKitTests/InputChannelTests.swift +125 −0
  • native/apple/Tests/CallsKitTests/NoiseSuppressionTests.swift +130 −0
  • native/apple/Tests/CallsKitTests/PeerMediaHearingTests.swift +43 −0
  • native/bridge/bridge.go +16 −0
  • native/ios/Sources/CallsPhone.swift +29 −11
  • native/ios/Sources/PhoneFullScreenCall.swift +5 −4
  • protocol/messages.go +35 −0
  • test/browser/call.mjs +395 −32
  • test/browser/devices.test.mjs +63 −0
  • test/browser/native.mjs +33 −0
  • test/browser/negotiation.test.mjs +3 −1
  • test/browser/room-hearing.test.mjs +195 −0
  • test/browser/room-mute.test.mjs +117 −12

CI passed — run details

Makefile

Loading diff…

callscore/media_test.go

Loading diff…

callscore/room.go

Loading diff…

docs/superpowers/specs/2026-09-07-meet-design.md

Loading diff…

internal/calls/hub/media.go

Loading diff…

internal/calls/hub/media_test.go

Loading diff…

internal/calls/signal.go

Loading diff…

internal/calls/static/calls.css

Loading diff…

internal/calls/static/devices.js

Loading diff…

internal/calls/static/room.js

Loading diff…

internal/calls/templates/join.html

Loading diff…

internal/callstest/browser_test.go

Loading diff…

internal/callstest/media_test.go

Loading diff…

internal/callstest/native_selftest_test.go

Loading diff…

native/README.md

Loading diff…

native/apple/Sources/CallsInterop/AudioSelfTestHarness.swift

Loading diff…

native/apple/Sources/CallsInterop/Interop.swift

Loading diff…

native/apple/Sources/CallsKit/Audio.swift

Loading diff…

native/apple/Sources/CallsKit/AudioLevelRules.swift

Loading diff…

native/apple/Sources/CallsKit/AudioMeter.swift

Loading diff…

native/apple/Sources/CallsKit/AudioSelfTest.swift

Loading diff…

native/apple/Sources/CallsKit/AudioSelfTestLoopback.swift

Loading diff…

native/apple/Sources/CallsKit/AudioSelfTestModel.swift

Loading diff…

native/apple/Sources/CallsKit/AudioSelfTestView.swift

Loading diff…

native/apple/Sources/CallsKit/Call.swift

Loading diff…

native/apple/Sources/CallsKit/CallAudio.swift

Loading diff…

native/apple/Sources/CallsKit/CallsLobby.swift

Loading diff…

native/apple/Sources/CallsKit/DevicePanel.swift

Loading diff…

native/apple/Sources/CallsKit/DevicePanelAudio.swift

Loading diff…

native/apple/Sources/CallsKit/InputChannel.swift

Loading diff…

native/apple/Sources/CallsKit/MacCallView.swift

Loading diff…

native/apple/Sources/CallsKit/MacFullWindowCall.swift

Loading diff…

native/apple/Sources/CallsKit/MacVideoTile.swift

Loading diff…

native/apple/Sources/CallsKit/Media.swift

Loading diff…

native/apple/Sources/CallsKit/MiniWindow.swift

Loading diff…

native/apple/Sources/CallsKit/NoiseSuppression.swift

Loading diff…

native/apple/Sources/CallsKit/RemoteAudioTap.swift

Loading diff…

native/apple/Sources/CallsKit/Wire.swift

Loading diff…

native/apple/Tests/CallsKitTests/AudioLevelTests.swift

Loading diff…

native/apple/Tests/CallsKitTests/AudioSelfTestTests.swift

Loading diff…

native/apple/Tests/CallsKitTests/InputChannelTests.swift

Loading diff…

native/apple/Tests/CallsKitTests/NoiseSuppressionTests.swift

Loading diff…

native/apple/Tests/CallsKitTests/PeerMediaHearingTests.swift

Loading diff…

native/bridge/bridge.go

Loading diff…

native/ios/Sources/CallsPhone.swift

Loading diff…

native/ios/Sources/PhoneFullScreenCall.swift

Loading diff…

protocol/messages.go

Loading diff…

test/browser/call.mjs

Loading diff…

test/browser/devices.test.mjs

Loading diff…

test/browser/native.mjs

Loading diff…

test/browser/negotiation.test.mjs

Loading diff…

test/browser/room-hearing.test.mjs

Loading diff…

test/browser/room-mute.test.mjs

Loading diff…