whatsapp-ng 1.1.0 → 1.1.1
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/CHANGELOG.md +8 -0
- package/DEPENDENCIES.md +3 -1
- package/README.md +15 -19
- package/SECURITY.md +1 -1
- package/docs/crispasr.md +257 -126
- package/docs/reference.md +27 -9
- package/docs/releases.md +47 -67
- package/package.json +1 -1
- package/src/services/audio.service.ts +7 -3
- package/src/services/managed-speech.service.ts +245 -0
- package/src/services/managed-speech.worker.mjs +170 -0
- package/src/services/remote-tts.service.ts +1 -0
- package/src/services/session.manager.ts +9 -0
- package/src/services/speech-settings.ts +1 -1
- package/src/services/tts-config.ts +20 -7
- package/whatsapp-ng.ts +40 -12
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.1.1 — 2026-10-30
|
|
6
|
+
|
|
7
|
+
- Add explicit `ttsUseServerVoice` for compatible OpenAI-style servers such as Chatterbox: omit the HTTP voice field to use the server's built-in voice without requiring a separate voice pack. Preserve strict named-voice defaults, Fish/Edge validation, atomic settings and separate speech consent; reselect the default after endpoint/provider/model changes.
|
|
8
|
+
|
|
9
|
+
- Add optional connection-time CrispASR server management through trusted shell-free JSON descriptors: independent STT/TTS startup, owned listener/model checks, request fencing, exclusive endpoint leases and parent-IPC watchdog cleanup. Preserve unmanaged providers, consent and request budgets. Correct `/stop`, terminal HUP, transient probes and teardown fencing after Opus review. Local macOS Whisper/Kokoro STT, TTS and combined pipelines produced expected results, with maintainer-accepted native auxiliary resources; Windows management and broader platform/WhatsApp qualification remain open.
|
|
10
|
+
|
|
11
|
+
- Clarify operator-owned speech setup, shorten current guides/plans and refresh dated SDK risk disclosures without changing dependencies or broadening platform/live-support claims.
|
|
12
|
+
|
|
5
13
|
## 1.1.0 — 2026-10-29
|
|
6
14
|
|
|
7
15
|
The maintainer approved promoting the prepared, unpublished RC2 source to stable `1.1.0` under `latest`. The release adds the outcomes below to published RC1; broader platform/live qualification and the documented inherited SDK findings are unchanged. `next` is not advanced by this promotion.
|
package/DEPENDENCIES.md
CHANGED
|
@@ -135,9 +135,11 @@ The SDK, AI and TUI development dependencies and their Pi dependencies use versi
|
|
|
135
135
|
|
|
136
136
|
### Latest audit refresh
|
|
137
137
|
|
|
138
|
+
The 2026-10-30 release 1.1.1 source refresh reports **0 production findings** and **2 affected development-tree packages (one high, one moderate)**. Package counts are unchanged, but the Undici 8.10.2 record now includes **eight advisories**, not three. In addition to the dated findings below, it reports [cross-origin redirect cache poisoning/disclosure](https://github.com/advisories/GHSA-4w7w-5xrc-9h26), [dropped Agent TLS options](https://github.com/advisories/GHSA-2m5v-pch6-74hx), [TLS renegotiation denial of service](https://github.com/advisories/GHSA-qrxm-fqhp-jwvm), [automatic WebSocket PONG buffering](https://github.com/advisories/GHSA-9fm3-97px-rjf6) and [decompress-interceptor exceptions](https://github.com/advisories/GHSA-55wc-3pg8-jfw6). No dependency override/change was applied. This is a fresh source dependency audit, **not** a new installed-host/bundled-code or native-binary reassessment; the existing upstream-remediation policy and unresolved host limits remain.
|
|
139
|
+
|
|
138
140
|
The 2026-10-24 publication-review refresh with Pi 1.4.0 still reports **0 production findings**, but **2 affected packages in the full tree: one high and one moderate**. The development SDK cohort is **1.4.0**; the recorded host assessment also used Pi **1.4.0**, pinning `undici@8.10.2`. That alignment did not remove the Undici findings. The later Edge-update production-only audit remains clean, but is not a fresh full-tree or installed-host reassessment.
|
|
139
141
|
|
|
140
|
-
|
|
142
|
+
That dated Undici record included three advisories, all patched at **8.12.2**:
|
|
141
143
|
|
|
142
144
|
- Moderate: [EventSource parser memory exhaustion](https://github.com/advisories/GHSA-4qv8-2p9j-2685).
|
|
143
145
|
- Moderate: [SRI algorithm-token validation](https://github.com/advisories/GHSA-f72v-6w45-q472).
|
package/README.md
CHANGED
|
@@ -18,10 +18,12 @@ Use WhatsApp to talk to your [Pi](https://pi.dev) agent: send tasks, share files
|
|
|
18
18
|
- **Group-only mode:** bind Pi to one WhatsApp group with `--whatsapp-group <jid>`.
|
|
19
19
|
- **Media support:**
|
|
20
20
|
- **Images:** forward incoming WhatsApp images to Pi for analysis with a vision-capable model.
|
|
21
|
-
- **Audio transcription:**
|
|
21
|
+
- **Audio transcription:** local Whisper.cpp/CrispASR/native Whisper, or an OpenAI-compatible STT API such as OpenAI, Groq, Mistral or a self-hosted server. Configure the model, endpoint and credential-variable name independently of Pi's chat model; FFmpeg prepares the audio.
|
|
22
22
|
- **Documents:** save documents for agent access, with bounded text previews for readable PDFs and optional local OCR for scans.
|
|
23
23
|
- **Outgoing attachments:** explicitly send documents, images, audio, voice notes and video, with optional native quotes.
|
|
24
|
-
- **Spoken replies:**
|
|
24
|
+
- **Spoken replies:** WhatsApp voice notes through Fish Audio, OpenAI-compatible speech APIs, local CrispASR or unofficial Microsoft Edge voices. Choose STT and TTS independently, with text/voice/both/Mirror modes, per-chat preferences and separate group consent.
|
|
25
|
+
|
|
26
|
+
Providers must implement the matching speech API. OpenRouter or another gateway's chat/audio-input support alone does not establish STT/TTS compatibility. See [transcription](#remote) and [speech configuration](#speech-replies-opt-in).
|
|
25
27
|
|
|
26
28
|
**All allowed chats share one Pi session and its context. Only allow people and groups you trust with that shared access.**
|
|
27
29
|
|
|
@@ -33,7 +35,7 @@ With Pi already installed, install the stable channel:
|
|
|
33
35
|
pi install npm:whatsapp-ng@latest
|
|
34
36
|
```
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
Check the channel with `npm view whatsapp-ng@latest version`; `next` is independent. See [security and qualification limits](SECURITY.md).
|
|
37
39
|
|
|
38
40
|
Restart Pi, then:
|
|
39
41
|
|
|
@@ -41,13 +43,11 @@ Restart Pi, then:
|
|
|
41
43
|
2. Add contacts under **Chats / Owner → Allowed Contacts**, or groups under **Groups → Allowed Groups**.
|
|
42
44
|
3. Send a message from an allowed chat. Pi answers in that conversation.
|
|
43
45
|
|
|
44
|
-
The login is saved.
|
|
45
|
-
|
|
46
|
-
The saved preference applies to **TUI and RPC sessions using the same profile**, across workspaces, including `/reload` and `/new`. Any RPC process that loads the extension, including an extension-enabled subagent, follows that preference; print/JSON runs need an explicit online flag. Only one Pi process can own the profile: preference-based startup skips an occupied/unverified profile lock with one notice rather than repeated retries.
|
|
46
|
+
The login is saved. **Connection → Auto-connect on startup → Enabled** saves a default-off preference for TUI/RPC sessions using that profile, including reload/new sessions and extension-enabled subagents. It requires saved credentials and does not immediately connect/disconnect. Print/JSON runs require the explicit online flag.
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Only one process may own a profile. Explicit **Off** overrides auto-connect across reload/session replacement in that process; a fresh process follows the saved preference. See the [startup contract](docs/reference.md#startup-connection-preference) for locking and concurrent writes.
|
|
49
49
|
|
|
50
|
-
The
|
|
50
|
+
The flag explicitly requests connection even when the saved preference is disabled:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
53
|
pi --whatsapp-ng-online
|
|
@@ -88,13 +88,9 @@ Local transcription runs on CPU. Without a model override, the base model downlo
|
|
|
88
88
|
|
|
89
89
|
### Local CrispASR speech servers (beta)
|
|
90
90
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
We added **`http://` support for STT/TTS endpoints** to open the way for local servers such as CrispASR, without needing TLS just for localhost. Loopback HTTP is allowed; non-loopback HTTP requires an explicit launch-environment opt-in and is unencrypted. See the [setup, model examples and transport safeguards](docs/crispasr.md).
|
|
94
|
-
|
|
95
|
-
CrispASR provides **Windows, Linux and macOS** builds, with **CPU, NVIDIA CUDA, Apple Metal and Vulkan** execution options depending on the build, hardware and model—not every combination on every OS. Multilingual Whisper covers **99 STT languages**, while upstream OmniVoice advertises **600+ TTS languages**; coverage is model/voice-specific, not a promise that every engine supports all languages. These are upstream capabilities, not a full `whatsapp-ng` validation matrix. Our direct CLI path remains CPU-only and requires a compatible Whisper GGML model; use a separate compatible HTTP server for other model families or GPU acceleration. OmniVoice's reference-audio HTTP flow still has [additional integration limits](docs/crispasr.md#multilingual-and-omnivoice-limits).
|
|
91
|
+
CrispASR offers local STT/TTS model families, cache/download options and build-dependent CPU/CUDA/Metal/Vulkan support. Direct CLI integration remains CPU-only Whisper; other models use compatible HTTP endpoints. Loopback HTTP is allowed; non-loopback HTTP requires an explicit unencrypted-transport opt-in. See the [model choices and compatibility limits](docs/crispasr.md).
|
|
96
92
|
|
|
97
|
-
|
|
93
|
+
Optional managed startup uses trusted `CRISPASR_STT_CMD` / `CRISPASR_TTS_CMD` JSON descriptors. Matching servers start on WhatsApp connection; Off/disconnect/reload/session replacement retire only owned processes. Unset descriptors preserve manually operated servers. Management supports macOS/Linux, not Windows, and does not enable speech or grant consent. Follow the [complete Spanish Whisper Turbo + Chatterbox setup](docs/crispasr.md#complete-example-spanish-whisper-turbo-and-chatterbox) for model preparation, CMDs, client settings and credentials.
|
|
98
94
|
|
|
99
95
|
### Remote
|
|
100
96
|
|
|
@@ -127,11 +123,11 @@ Open `/whatsapp` → **Voice** to choose a speech backend, voice, speed and repl
|
|
|
127
123
|
| Voice + text | Both formats. |
|
|
128
124
|
| Mirror | Voice for verified audio input; text otherwise. |
|
|
129
125
|
|
|
130
|
-
Backends include Fish, OpenAI-compatible speech APIs and the unofficial Microsoft Edge speech service. A compatible [CrispASR TTS server](docs/crispasr.md#tts-server), such as the Kokoro example, can provide local synthesis through the same endpoint client. Edge requires no configured API key but is an online service, not offline synthesis. The transcription and speech backends are independent.
|
|
126
|
+
Backends include Fish, OpenAI-compatible speech APIs and the unofficial Microsoft Edge speech service. A compatible [CrispASR TTS server](docs/crispasr.md#tts-server), such as the Kokoro example, can provide local synthesis through the same endpoint client. Edge requires no configured API key but is an online service, not offline synthesis. The transcription and speech backends are independent. Compatible servers with a built-in voice, including Chatterbox, can explicitly use [`ttsUseServerVoice: true`](docs/crispasr.md#built-in-server-voice); this omits `voice`, not a substitute voice ID.
|
|
131
127
|
|
|
132
128
|
Speech is disabled until you approve its destination in the terminal Voice menu. Groups need separate opt-in. Changing the endpoint requires new approval; configuring a backend with `configure_wa_tts` does not enable speech or grant consent.
|
|
133
129
|
|
|
134
|
-
Voice settings
|
|
130
|
+
Voice settings include per-chat pause controls and a confirmed preview. Speech uses a cleaned plain-text copy without changing the displayed answer. Long/code-heavy replies, tables and links that would lose their address remain complete text. See the [speech reference](docs/reference.md#speech-replies) for formatting, fields and failure behavior.
|
|
135
131
|
|
|
136
132
|
<a id="settings-off-and-diagnostic-privacy"></a>
|
|
137
133
|
|
|
@@ -164,7 +160,7 @@ Allowed people can use `/help` and `/status`. State-changing commands require th
|
|
|
164
160
|
| `/off` | Confirm WhatsApp shutdown without logging out. Re-enable from the terminal Connection menu. |
|
|
165
161
|
| `/quit` | Confirm graceful Pi shutdown. |
|
|
166
162
|
|
|
167
|
-
|
|
163
|
+
`/model` browses authenticated models; `/model anthropic` or `/model anthropic/opus` searches case-insensitively with fuzzy matching. Search results require numbered confirmation, even for one match; exact `provider/model` selects directly. Pagination preserves the search, and no match leaves the current model unchanged. Private filesystem identifiers are available through browsing, not fuzzy search.
|
|
168
164
|
|
|
169
165
|
Menus use numbered replies. Group selections must quote the menu. Native polls are experimental and require `--whatsapp-ng-native-polls`. Configuration changes require idle Pi; stop active work explicitly rather than interrupting it through a settings change.
|
|
170
166
|
|
|
@@ -208,13 +204,13 @@ The development baseline is Node 26.x and Pi 1.4.0.
|
|
|
208
204
|
git clone https://github.com/jagaliano/whatsapp-ng.git
|
|
209
205
|
cd whatsapp-ng
|
|
210
206
|
npm ci --ignore-scripts --legacy-peer-deps --no-audit --no-fund
|
|
211
|
-
npm test
|
|
207
|
+
npm test -- --maxWorkers=2
|
|
212
208
|
npm run lint
|
|
213
209
|
npm run typecheck
|
|
214
210
|
pi --no-extensions -e ./whatsapp-ng.ts
|
|
215
211
|
```
|
|
216
212
|
|
|
217
|
-
|
|
213
|
+
Use the [release guide](docs/releases.md) for versioning, artifact checks and separately authorized publication. The checkout version is in `package.json`; registry tags must be queried explicitly. Preparation does not bump/publish a version or activate the default-off OIDC workflow.
|
|
218
214
|
|
|
219
215
|
Use a disposable HOME/Pi agent directory and credential-free environment for validation; the isolated setup in `scripts/release.mjs` is the reference. A deliberate source launch with your normal HOME shares saved settings/auth and may auto-connect. Do not run a second same-profile owner.
|
|
220
216
|
|
package/SECURITY.md
CHANGED
|
@@ -30,6 +30,6 @@ Baileys is an unofficial personal-account transport. Protocol changes, platform
|
|
|
30
30
|
|
|
31
31
|
Auth adoption occurs only during requested connection under source/destination ownership, never as an offline-history side effect. Initialized profiles are not merged; legacy originals remain preserved. Private non-secret profile metadata blocks re-adoption after reset and implicit recovery from interrupted/unsupported state. Auth directories are `0700`; saved credentials/config/control files and archive snapshots are `0600`. Native key-file leaf modes may follow the umask, so their private directory is the confidentiality boundary. The pinned multi-file store is not a transactional database; individual file failures are not an automatic credential rollback or repair guarantee. See [auth recovery guidance](README.md#auth-adoption-and-recovery).
|
|
32
32
|
|
|
33
|
-
Dependency updates removed vulnerable PDF-processing and outdated development-tool dependencies, but known Pi SDK/host findings remain. The
|
|
33
|
+
Dependency updates removed vulnerable PDF-processing and outdated development-tool dependencies, but known Pi SDK/host findings remain. The **October 30 release 1.1.1 source refresh** reports zero production findings and two affected development-tree packages (one high, one moderate) via Undici 8.10.2. Its record includes eight advisories, expanding the earlier October 24 three-advisory assessment despite unchanged package counts. This is not a new installed-host/bundled-code reassessment; production-only auditing excludes host-supplied packages and does not certify native binaries. The project is waiting for a patched Pi release; no local override, audit suppression or forced SDK downgrade has been applied. These findings are not resolved or certified harmless. See [DEPENDENCIES.md](DEPENDENCIES.md) for dependency versions, retained GPL components and audit details, and [LICENSING.md](LICENSING.md) for attribution.
|
|
34
34
|
|
|
35
35
|
If a session appears compromised, stop the extension/services and review linked devices through WhatsApp. Do not publish sensitive evidence or delete/migrate state automatically as a recovery procedure.
|