roomsync 0.0.0-stage → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,164 @@
1
- # Temporary Holding Version
1
+ # RoomSync npm launcher (Windows preview)
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ A small, dependency-free launcher for the **Windows x64 RoomSync 0.1.6 host**.
4
+ It bundles the native executable and opens its local setup page. No Rust compiler,
5
+ extra runtime download, install script or paid service is needed. The launcher
6
+ does not install a virtual driver; optional synchronized Windows speakers require
7
+ one to be installed and routed separately by the user.
8
+ Requires Node.js 20+ and Windows 10 version 1703 or newer with x64 Node.js.
9
+ The Android receiver app is still installed separately. Use Android **0.1.6** for
10
+ the matching receive-side diagnostics; earlier revision-3 receivers remain
11
+ wire-compatible.
12
+
13
+ **0.1.6 is a diagnostic update, not a verified fix for silence or cutouts.** It
14
+ adds bounded host queue/send timing counters to Connection details. They help
15
+ separate host dispatch delay from downstream delay, but do not measure Wi-Fi
16
+ transit or prove the physical cause. The shared timeline and playback buffering
17
+ are unchanged by this update.
18
+
19
+ The npm package name is **roomsync**, with **nyaughh** as its designated publisher.
20
+ The source repository remains private. This preview is **UNLICENSED**; no
21
+ open-source license is granted. Third-party notices are included separately.
22
+
23
+ ## Install and run
24
+
25
+ After a registry release is confirmed, in **Windows PowerShell**, with Node.js 20+ installed:
26
+
27
+ ```powershell
28
+ npx roomsync@0.1.6 start
29
+
30
+ # Or install the package, then use the short command:
31
+ npm install --global roomsync@0.1.6
32
+ roomsync start
33
+ ```
34
+
35
+ ## Use the preview tarball
36
+
37
+ After obtaining the verified `roomsync-0.1.6.tgz`, in **Windows PowerShell**:
38
+
39
+ ```powershell
40
+ # Run directly from the local tarball, without a global installation:
41
+ npx --package .\roomsync-0.1.6.tgz roomsync start
42
+
43
+ # Or install the local package, then use the short command:
44
+ npm install --global .\roomsync-0.1.6.tgz
45
+ roomsync start
46
+ ```
47
+
48
+ To use the latest published version, run `npx roomsync start` or
49
+ `npm install --global roomsync` followed by `roomsync start`.
50
+
51
+ ## Commands
52
+
53
+ ```text
54
+ roomsync start Open the local control page
55
+ roomsync start --no-browser Start controls and print their address
56
+ roomsync devices List Windows playback endpoints
57
+ roomsync doctor Verify platform and packaged-host integrity
58
+ roomsync --version
59
+ roomsync --help
60
+ ```
61
+
62
+ Keep the terminal open. Ctrl+C reaches the native host's stop handler. The local
63
+ page binds to a random `127.0.0.1` port; opening it does not start sharing audio.
64
+ Create a private setup code, connect the Android receiver and choose **Start
65
+ listening** in the page. No firewall or audio-routing settings change automatically.
66
+
67
+ macOS, Linux, WSL, Windows 32-bit and native ARM64 Node.js are not supported.
68
+ Help/version and package inspection still work there, but no host is launched.
69
+ Use Windows PowerShell/Command Prompt, not a WSL shell.
70
+
71
+ In default phone-only capture mode, original Windows audio is not muted or delayed.
72
+ Keep it inaudible in the listening room, for example through headphones, to avoid
73
+ echo. For synchronized Windows speakers, use the explicit routing below. This is an
74
+ unsigned preview, not a claim of zero latency or physically measured speaker
75
+ synchronization. The launcher does not validate audio hardware; `doctor` verifies
76
+ only package integrity/platform support.
77
+
78
+ ## Optional synchronized Windows speakers
79
+
80
+ This opt-in preview sends the same timestamped PCM and common presentation
81
+ timeline to Windows speakers and Android. It does not retroactively delay audio
82
+ already playing through the captured physical endpoint.
83
+
84
+ 1. Separately install a virtual cable from its official provider, such as
85
+ [VB-Audio's VB-CABLE](https://vb-audio.com/Cable/), following its driver,
86
+ administrator/restart and license instructions. No driver is bundled here.
87
+ 2. Route the source applications you intend to share to the cable's **playback**
88
+ endpoint, normally **CABLE Input**. RoomSync captures that output by loopback;
89
+ the recording endpoint **CABLE Output** is not the capture selection.
90
+ 3. In RoomSync Advanced settings, select that explicit virtual capture source,
91
+ enable local speaker playback, and select a different physical speaker output.
92
+ Review and confirm the route. RoomSync will not change Windows/app routing.
93
+ 4. Do not enable Windows **Listen to this device** or another monitor/mixer path
94
+ that duplicates the source or routes speaker output back into the cable.
95
+ 5. Pair the Android receivers and start the group. The local output is measured
96
+ while silent and included in the same budget as the phones. Keep the source
97
+ and speaker selection unchanged during playback.
98
+ 6. Stop the group before changing devices. Restore your usual app/Windows output
99
+ afterward if you changed it, otherwise audio routed into the cable may be silent.
100
+
101
+ Same-endpoint routes are rejected. Strict queue and clock checks can reject
102
+ unsupported outputs or stop a session instead of silently shifting its timeline;
103
+ guarded local playback requires at least two engine periods of actual shared
104
+ buffer capacity. This remains a cloud-built preview, not physically verified
105
+ speaker synchronization. Bluetooth/DSP can add unmeasured delay. Use built-in or
106
+ wired speakers for initial testing.
107
+
108
+ ## Safety and packaging
109
+
110
+ - The complete Windows executable is in the package. No `postinstall`, dynamic
111
+ downloader, PowerShell script, shell command or PATH-selected executable runs.
112
+ - `start` maps only to the native `web` command. `--no-browser` maps to
113
+ `web-headless`; `devices` maps to `list-devices`. Unknown options fail explicitly.
114
+ - SHA256, architecture, package/manifest version consistency and manifest fields
115
+ are checked before execution. The manifest version is release metadata, not a
116
+ runtime query of the executable; CI checks the native source version matches.
117
+ This detects accidental modification/mismatched packages, **not** a compromise
118
+ of both the package binary and manifest. The preview is not code-signed.
119
+ - No telemetry or automatic updater is added. No secret is stored in this package.
120
+ The native app's private pairing and local-controller protections remain intact.
121
+ - npm's tarball integrity covers distribution. Verify the supplied tarball checksum
122
+ and only install a release from the project's confirmed owner.
123
+
124
+ ## Build a package from source (maintainers)
125
+
126
+ The release target is **x86_64-pc-windows-gnu**, matching the bundled preview and
127
+ the dependency-notice inventory. The default Windows MSVC target is not a drop-in
128
+ replacement: it may introduce different notice entries and VC runtime dependencies.
129
+ On Linux with the official distribution's MinGW cross-linker installed:
130
+
131
+ ```sh
132
+ rustup target add x86_64-pc-windows-gnu
133
+ export CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc
134
+ cargo build --release --locked --target x86_64-pc-windows-gnu --manifest-path apps/desktop/Cargo.toml
135
+ binary=apps/desktop/target/x86_64-pc-windows-gnu/release/roomsync-desktop.exe
136
+ hash=$(sha256sum "$binary" | cut -d' ' -f1)
137
+ node packages/npm/scripts/stage-native.cjs --binary "$binary" --notices docs/THIRD_PARTY_NOTICES.txt --source-commit "$(git rev-parse HEAD)" --expected-sha256 "$hash"
138
+ npm --prefix packages/npm test
139
+ mkdir -p dist
140
+ npm pack ./packages/npm --pack-destination dist
141
+ ```
142
+
143
+ The stage command accepts a known,
144
+ locally built or independently verified Windows x64 executable; it never fetches
145
+ one. The manifest is written last and `prepack` refuses an incomplete or mismatched
146
+ bundle. Existing release inputs require their published/previously verified binary
147
+ digest, not a guessed digest. Keep npm/native versions in sync. If registry
148
+ dependencies change, regenerate the upstream notice inventory rather than merely
149
+ replacing its lock fingerprint.
150
+
151
+ Cloud packaging can use the existing verified Windows release without changing
152
+ its native audio implementation. Native builds/tests, JavaScript wrapper tests,
153
+ real tarball installation and physical hardware testing are separate checks;
154
+ passing one does not imply the others passed.
155
+
156
+ The repository's npm workflow tests the wrapper on Linux and Windows, builds the
157
+ Windows GNU host, audits DLL imports, stages the bundle and uploads a tarball artifact.
158
+ A separate Windows job installs the artifact and invokes native `--help` without
159
+ starting capture. These future CI jobs have not run merely because this file exists.
160
+ It deliberately contains **no publish step, npm credentials, or auto-release**.
161
+ Each public release is published separately with the owner's authorization.
162
+
163
+ References: [npm bin/files metadata](https://docs.npmjs.com/cli/v11/configuring-npm/package-json/),
164
+ [Node child-process execution](https://nodejs.org/api/child_process.html).