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 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
- The current Undici record includes three advisories, all patched at **8.12.2**:
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:** use Whisper.cpp/CrispASR locally, a compatible native Whisper addon, or a configured transcription API. FFmpeg first converts voice notes to 16 kHz mono WAV.
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:** opt into text, voice, voice + text or input-mirroring output, with per-chat preferences and separate group consent.
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
- The `1.1.0` release line includes saved startup preferences and fuzzy `/model` search. Check the actual channel version with `npm view whatsapp-ng@latest version`; `next` is independent and may still point to an older prerelease. Stable versioning does not imply an SLA, all-platform qualification or guaranteed npm/Pi catalog indexing. See the [security and qualification limits](SECURITY.md).
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. To reconnect automatically without a launch flag, open **Connection → Auto-connect on startup → Enabled**. This saves `autoConnect: true` in the extension's `config.json`; the default is disabled. Only the literal boolean `true` enables it.
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
- Changing the preference does not immediately connect or disconnect WhatsApp. Existing saved credentials are required; first-time pairing still uses **Connect WhatsApp**. Explicit **Off** survives reload/session changes in the current process even with auto-connect enabled; it does not disable other Pi processes. A fresh TUI/RPC process follows the shared saved preference. Cooperative config writes preserve newer auto-connect selections made by another updated Pi process.
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 launch flag remains an explicit auto-connect request, even if the saved preference is disabled:
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
- [CrispASR](https://github.com/CrispStrobe/CrispASR) is a unified C++ speech toolkit, originally based on Whisper.cpp, with many STT and TTS model families and model auto-download/cache options. Treat this optional setup as **beta/experimental**: it is a fast-moving 0.x project, and model/build compatibility needs checking. STT choices include Whisper, Parakeet, Canary and Qwen3-ASR; TTS choices include Kokoro, Piper, Qwen3-TTS and OmniVoice.
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
- The guide explicitly downloads `ggml-large-v3-turbo-q5_0.bin` using CrispASR's **`--hf-repo` / `--hf-file`** selectors rather than accepting a base-model default. **It is an example: choose the model that fits your languages, accuracy, memory and latency needs.**
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 also let you pause automatic replies for individual chats and send a confirmed preview. Speech uses a separate plain-text copy: emphasis markers, headings, bullets and escaped quotes are cleaned up; short labels such as `config.json` can be spoken normally. Ordinary approximate values such as “~5 minutes” remain eligible. Voice and audio Mirror keep an answer as text when speaking its link label would omit the address. Voice + text speaks link labels only if the full text send succeeds. The displayed answer is unchanged. Long answers, code/command-like snippets and tables stay as complete text. See the [speech reference](docs/reference.md#speech-replies) for backend fields and failure behavior.
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
- Use `/model` to browse, `/model anthropic` to filter by provider, or `/model anthropic/opus` (also `opus anthropic`) for case-insensitive fuzzy matching across provider/model identifiers. `/model DeepSeek`, `/model Deepseek` and `/model deepseek` show matching models across all authenticated providers, with provider/model labels kept distinct. Search results require a numbered selection even when only one matches; an exact `provider/model` still selects directly. Previous/next pages retain the search. Only currently authenticated models are offered; no match leaves the current model unchanged. Private filesystem identifiers stay redacted and are reachable through browsing, not fuzzy search.
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
- Maintainers can use the [release guide](docs/releases.md) for explicit local version bumps, validated tarball preparation and separately confirmed publication. PR/main CI and a default-off, environment-gated tag-triggered OIDC workflow are provided; npm requires a first manual package publication before trusted publishing can be configured. RC1 is published; the working version is `1.1.0-rc.2`. Preparing a candidate does not bump or publish it.
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 recorded **October 24** full-tree npm assessment reports two affected packages (one high, one moderate) via Undici 8.10.2. The later Edge-update production-only audit reports zero findings, but is not a new full-tree/host reassessment; it 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.
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.