fix(audio): reap owned server on client shutdown - #7
Closed
Origamii520 wants to merge 37 commits into
Closed
Conversation
…o-ui-20260707-170529 feat: add Robonix client demo WebUI
- Added .DS_Store, .vscode/, .venv/, and .cursor/ to .gitignore. - Renamed script from `robonix-audio-bridge` to `robonix-client-audio-bridge` in pyproject.toml and updated README accordingly. - Updated README for clarity on the client-server architecture and connection setup. - Adjusted audio bridge documentation to reflect changes in endpoint configuration. - Enhanced client-side JavaScript and HTML for improved user experience and settings management. - Refactored CSS for better layout and responsiveness in the WebUI.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add persistent client settings for robot host, Atlas port, session identity, audio primitive selection, and per-primitive device selection. Add Audio and Settings views, F2 voice capture, a hands-free control, and Liaison status rendering. Audio I/O is selected by primitive and device for each direction. The client starts its local audio server but only creates a reverse relay after Atlas identifies a selected audio provider as a reverse bridge. The robot endpoint is obtained from the provider bridge_info capability; no client IP address or assumed robot-side port is stored in the client configuration. The chat transport exposes the Liaison hands-free contracts and keeps task/audio state local to the client browser. Verified: python3 -m compileall -q src/robonix_client node --check src/robonix_client/static/app.js git diff --check Python fixture: reverse endpoint validation Python fixture: Atlas bridge discovery transport.
When hands-free is enabled, inspect the currently selected input/output providers through Atlas. If either declares the reverse bridge capability, establish the client-owned WebSocket before enabling Liaison. This keeps USB audio routes unchanged and avoids recording loops after a client restart. Also rewrite a loopback WebSocket advertisement using the user-supplied Atlas host, matching the existing gRPC endpoint behavior. Verified with compileall, Node syntax, a provider-selection fixture, and a live Atlas/Liaison reverse connection on the Ranger deployment.
Split the Audio page into independently scrollable configuration and log columns. Configuration cards now retain their natural height; only the containing column scrolls when needed, while the log content keeps its own scroll region.
- Added support for persisting client settings, including robot host and audio device configurations. - Implemented new API endpoints for loading and saving settings. - Introduced microphone testing functionality to verify audio input. - Updated the client UI to reflect changes in settings and added visual feedback for audio tests. - Enhanced the audio device management section with improved diagnostics and status reporting. This update improves user experience by ensuring settings persist across sessions and providing tools for testing audio devices effectively.
Add Windows to SUPPORTED_AUDIO_PLATFORMS so the local audio device server can start on Windows. sounddevice ships its own PortAudio DLL on Windows, so no system library is required. - Add "Windows" to SUPPORTED_AUDIO_PLATFORMS set - Add PortAudio/WASAPI backend label for Windows - Add Windows install hint (no system PortAudio install needed) - Replace Windows-rejection test with Windows-support test - Update unsupported-platform test to use FreeBSD as the example Co-Authored-By: Xiangrui Cheng <ccc_7020@qq.com> Assisted-by: Claude Code:deepseek-v4-pro
Document that Windows is now supported. The sounddevice extra ships its own PortAudio DLL by default. If device enumeration still fails, users can install a pre-built PyAudio wheel from elibroftw/pyaudio_portaudio which provides a system-wide PortAudio that sounddevice can use. Co-Authored-By: Xiangrui Cheng <ccc_7020@qq.com> Assisted-by: Claude Code:deepseek-v4-pro
…pport feat: support Windows local audio via PortAudio/WASAPI
Always stop and reap the client-owned audio device server, close its log handle, preserve external servers, and run cleanup even when the reverse bridge stop path fails. Assisted-by: Codex:gpt-5.6-sol [TOOL Codex]
Member
|
Maintainer note: |
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Validation
python3 -m py_compilefor the two implementation files and two test filesgit diff --check origin/mainA full dependency-installed Client test environment was not created for this draft; no dependencies were installed or changed on the host.