#477

feat(effects): file path dialogs, app-owned pixels, and real-time audio output

Openrdevwants to merge intofrom

Summary

  • File path host requests. native-sdk.dialog.openFilePath and native-sdk.dialog.saveFilePath answer through the keyed hostRequest channel with the chosen path, or an empty result on cancel, so a Zig app can use the platform open and save panels without the JavaScript bridge. UiApp binds them behind the app's dialog permission.
  • App-owned pixels. acquireFrameSink and releaseFrameSink claim a media-surface texture channel for an app-owned producer (an embedded renderer, a pixel pipeline). decodeImage decodes encoded bytes into an app-owned RGBA8 buffer without registering them. The root module re-exports VideoFrameSink and DecodedImage.
  • Real-time audio output. startAudioOutput and stopAudioOutput pull interleaved float32 PCM from an app renderer on the host audio thread, for instruments, sequencers, and generated scores. Start answers the format the device opened, and stop is a fence after which the renderer is never entered. Replay and the fake executor record the request without opening a device. macOS implements it with an AVAudioEngine source node.

Verification

  • zig build test on macOS with Zig 0.16.0: passed.
  • scripts/gate.sh fast: every step passed except examples-mobile, which needs the Android NDK. The NDK isn't installed here, and upstream main fails the same way.
  • New tests: file path host requests answer the platform dialogs behind the dialog permission and audio output validates its format and records the stream under the fake executor.