Skip to content

Release 2.1.0.0: ciclo 2.1 da main, sem Comunidades e sem a nova janela de configurações - #576

Merged
gabrielhhaber merged 452 commits into
release/v2.1.0.0from
claude/release-2.1.0.0
Oct 21, 2026
Merged

gabrielhhaber merged 452 commits into
release/v2.1.0.0from
claude/release-2.1.0.0

Conversation

@gabrielhhaber

Copy link
Copy Markdown
Owner

Before: release/v2.1.0.0 was still the 2.0.2.0 line (version 2.0.2.0), without the 2.1 features.

After: the branch carries the 2.1.0.0 cycle: AI features, bug fixes, shortcuts and the rest of the V2.1.0.0 changelog. client/version.py is 2.1.0.0 and the changelog (7 locales) starts at V2.1.0.0.

How: the tree is main at 0b85f08 ("2.1 + old communities, no new settings window") minus the Communities feature, which ships in 3.0.0.0 (core, UI, TS patches, routes, Alt+8, translations, guide text, tests). Nothing added to main after 10-18 is included. The commit has two parents so the stable history is kept.

Review tip: compare git diff 0b85f08f..HEAD (the Communities removal, 106 files), not the full diff against the release branch. Please also check the unusual files and .github for anything malicious.

Known risks: the "Nova conversa" layout went back to a BoxSizer (check ro/pl), and the guide anchor #grupos-comunidades became #grupos. No wx/GUI tests ran; Linux-only failures match the baseline. Tag, signing and publishing stay with the maintainer.


Generated by Claude Code

rfiorentino1 and others added 30 commits October 10, 2026 11:39
…levation, only stop WinZapp's own Node (#453)

- core/npm_environment.py: every npm/npx WinZapp runs gets its own cache
  (data/global/npm/cache), its own (empty) userconfig and no update
  notifier; plain settings from the user's .npmrc are forwarded as
  npm_config_*, and an .npmrc with credentials is still read directly.
- update_relaunch.py: after an install that needed UAC, a non-elevated
  waiter relaunches WinZapp once the installer ends; a handoff marker the
  waiter creates itself guarantees exactly one relaunch. Relaunches get a
  fresh environment. An already-elevated WinZapp is logged, not demoted.
- update_node_kill.py: the installer kills only WinZapp's own node.exe on
  exactly the API port, re-checked before the kill, independent of
  netstat's translated state column. The :5433 PostgreSQL kill is gone.

Not tested on Windows.

Claude-Session: https://claude.ai/code/session_01Jt3yMGDd8R7HCrRfG7QZHd
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019pakxPtWay6qsNgZUx5BNN
* Add a "Groups in common" tab to the personal chat info

Reads the server's existing GET /common-groups/<wid> route (wa-js
WPP.contact.getCommonGroups) and lists the groups the user shares with
the contact. Client-only: nothing in WPPConnect or client/api_patches
changes.

wa-js answers [] both for "no groups in common" and for "contact not
loaded in the page", so an empty answer also asks the other JID form of
the person (phone <-> @lid) before settling on "none", and a failed
request is told apart from an empty one ("unavailable" vs "none").
The reply is the bare Wid array, read as strings or objects, envelope
tolerated. Names come from the local chat list, never a raw JID.

The tab is last, so Overview and Media keep their positions. Enter or
Space on a group opens that conversation. Logic is in core/common_groups.py
and the tab in a mixin, keeping the 2000-line dialog from growing.
The existing tab-order test now expects the third tab.

* Changelog: Groups in common tab in the personal chat info

---------

Co-authored-by: Claude <noreply@anthropic.com>
Retry WPPConnect npm install online on ETARGET
…on (#458)

* Fix wxAssertionError when a modal completion arrives after its loop ended (#457)

Late wx.CallAfter completions in the updater and Node download dialogs called EndModal on a stopped loop. Route them through end_modal_if_running.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PVPUtygg7ZJA7isAc15orB

* Tests: give updater dialog stubs IsModal (#457)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PVPUtygg7ZJA7isAc15orB

---------

Co-authored-by: Claude <noreply@anthropic.com>
…pdate report

Restores the accented text in the es-ES, pl, pt-BR, pt-PT, ro and tr-TR
changelogs and PO entries, rewords the npm logs path in test-api-update.md
so the docs path test passes, and adds a test against '??' corruption.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FfXA6CuHFrtzccWDN1NfxX
* Feat: adding the possibility of reviwing and replying to communities anouncements.

* Fix community reply test fixture and refresh translation catalogs

* Address community comments review: changelog placement and safe failure logs

* Guard changelog introductions against misplaced feature entries
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FfXA6CuHFrtzccWDN1NfxX
WPPConnect: corrige validação da atualização e mostra erros copiáveis (continuação do #461)
…ge e push (#465)

* CLAUDE.md: PR de fork que precisa de ajustes vira PR novo numa branch do repo

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dp5rfU2NgpBdGYjwHkx1sr

* CLAUDE.md: ajusta a regra de PR de fork apos revisao

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dp5rfU2NgpBdGYjwHkx1sr

* Settings: permitir merge de PRs e push por URL (fork)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dp5rfU2NgpBdGYjwHkx1sr

* Settings: restringir push por URL ao repositorio do projeto

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dp5rfU2NgpBdGYjwHkx1sr

---------

Co-authored-by: Claude <noreply@anthropic.com>
Release builds that carry a Sparkle key update through Sparkle 2.10.0's
standard windows. Before Sparkle offers a release, when the user chooses
Install, and again at Ready to Install, the release's tag must exist in
gabrielhhaber/WinZapp_Python, point at the declared commit, be newer than
the running tag, and the appcast item must be exactly that tag's full
zip; anything else cancels Sparkle's installer. Other accounts close
before the download and cannot start until the update is over (Sparkle's
installer watches one process). Background updates are announced by
speech and a notification; Ready to Install is announced. The Mac build
ships psutil so leaked account leases no longer block updates or start-up.
Without the Sparkle key, or if Sparkle cannot load, the existing Mac
updater runs unchanged. Release tooling (appcast, fork workflow patch) in
macos/release/.

Claude-Session: https://claude.ai/code/session_01Jt3yMGDd8R7HCrRfG7QZHd
…v, one liveness rule)

- release patch: gh() treats only an HTTP 404 as ok=True, so a 5xx or rate
  limit no longer reads as an empty appcast feed and re-signs 30 releases.
- release patch: the appcast commit message takes the tags from env.
- sparkle_mac._other_accounts uses coord_mac.lease_alive, the rule the slot
  claim uses, with a test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWFyjch8X3D5ZZzYRxMjmq
update_accounts.py holds the decisions (other accounts, quitting them,
claiming and releasing the update slot, which accounts to reopen, the stored
verdict) as plain functions that take the client collaborators as arguments.
sparkle_mac keeps thin wrappers with the same names, so its Mac tests are
unchanged, and tests/test_macos_update_accounts.py covers the logic on every
platform.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWFyjch8X3D5ZZzYRxMjmq
…ngelog menu wording

- mac-release-sparkle.patch regenerated against rocco-labs/WinZapp_Python
  mac-releases at 011b923 (the env block gained WINZAPP_CI_GITHUB_TOKEN, so
  the second hunk no longer applied); git apply --check passes on a fresh
  checkout of that commit. The README names the new base.
- pl and es changelog entries name the alpha updates option as the catalogs do.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWFyjch8X3D5ZZzYRxMjmq
macOS: update through Sparkle 2, gated by the official release tag
faster-whisper opens a path with PyAV (av.open(..., metadata_errors=...)),
which fails on an old av after the model has loaded and surfaces only as
backend_error. The prepared file is our own 16 kHz mono PCM WAV, so read it
with the wave module and pass the float32 samples; fall back to the path if
it cannot be read.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…lt field, downloads follow the background setting

- All seventeen action buttons get an Alt key in every locale; the same word
  shares one letter across rows and none takes OK/Cancel/Apply.
- Verifying (model, CUDA, whisper.cpp, folder in another location) moves the
  focus to the result field; picking another model/backend/build/folder
  drops the old outcome so the field hides when empty.
- Model, CUDA and whisper.cpp downloads/repairs honour 'download in the
  background': the main window runs the job, the tab adopts it, nothing moves
  the focus when it ends. The setting's label now says it covers them.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…ist, download the marked ones in sequence

- A Cancel button shows while a download runs in the background; it stops the
  current job and drops the queue, and the app quitting does the same.
- The model drop-down is a list with the selection mode of the chat and
  message lists: Ctrl+Space marks, Space marks while something is marked, Esc
  unmarks, following the same two user-interface settings.
- Download with models marked fetches them one after another after a single
  confirmation sized as the sum, behind the progress dialog or as one
  background run; the first failure or cancellation stops the rest.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…line; Enter/Space can transcribe instead of play

- A transcription stored as inline shows in the row (', transcrição: texto'),
  is read aloud, and opens no window; a fresh result that cannot be kept still
  opens the window so the text is not lost.
- Ctrl+Shift+T alternates with the new User Interface option 'Enter and Space
  on a voice message transcribe it into its line' (off by default): off, it
  transcribes into the line and Enter plays; on, Enter/Space transcribe and it
  plays or pauses. Menu item, F1 list and the option's label say which.
- Alt+L reads the rest of a long inline transcription.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
… Alt+Shift+N

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…nd sweep old leftovers

The installer script only deleted itself, so every update left a full copy of
the release in winzapp_ext_*. The script now removes it after a successful copy
and the relaunch (never on failure paths), and the next start sweeps what older
updates, failed installs and killed downloads left, with a grace period so a
package another account staged in the background is not taken.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…eply to me

The forward halves of Alt+Shift+M and Alt+Shift+P, with the same wrap-around.
Both are catalogue shortcuts (customisable in the Shortcuts tab); their
defaults were checked against every locale with the tab's own conflict rule.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…by position

Each reads the Nth newest message aloud without moving the focus, and pressing
the same key twice quickly copies it. They ship with no key (Alt+1..Alt+9 belong
to the main window): they are ten rows of the shortcut catalogue that the
Shortcuts tab can bind, free of conflicts like any other command.

Closes #462

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…a message box

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
The sync and backfill pools fired get-messages from up to six threads into the
one WhatsApp Web page, which serialises them anyway and costs CPU and memory on
small machines. Their requests (and only theirs) now share a gate of two, with
the pools, timeouts, retries and every foreground fetch unchanged; the wait is
bounded and is never counted as a request fault. Launch flags and forced GC from
the issue are deliberately left for later measurement.

Refs #379

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
…ed transcriptions

A saved transcription now belongs to the model that made it: changing the
model asks for a new run and the earlier model's text stays for when the user
goes back. Settings > Local transcription gets a button that deletes, in every
chat, only what the selected model transcribed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RitkxPiQTUgQNToYouWF9
zersiax and others added 27 commits October 17, 2026 20:31
Select WAWebFindChatAction explicitly instead of resolving the first module
exporting findOrCreateLatestChat. Keep the patch idempotent and apply it
through setup, build, and startup paths, with offline regression coverage.
…can be removed

Deleting an account used to remove its data directory and registry entry
only. The browser profile that carries the WhatsApp login and that profile's
restore points live in directories shared by the whole install, so they stayed
on disk after the account was gone.

client/account_removal.py now finds the account's sessions by name and removes
their profile, every generation of restore point and any token folder, never
touching a session another account still has active or pairing, never turning
an unsafe name into a path, and giving up on the profile (fail-closed) when a
sessions.json cannot be read. Whatever cannot be removed keeps the account in
the 'deleting' state, with its sessions.json, and the next start finishes it.

The account in use can be removed when it is the only account. Its files are
open, so the manager marks it 'deleting' and closes WinZapp; the shutdown
removes it after the browser has stopped and the database is closed. With no
account left the next start is a first run.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fix Windows CUDA loading before faster-whisper inference (continua #529)
…urge tests

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DBqa9AkSPsLMsCbbLJ5PC7
Removing an account removes everything it owns, and the only account can be removed
…gelog and guide

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DBqa9AkSPsLMsCbbLJ5PC7
…-labels

Fix menu labels and Romanian register in the account removal texts
Adds Settings > User interface > "Automatically play voice messages in
sequence" (on by default). Off, a voice message ends without starting the
next one. The existing option keeps controlling only the keyboard focus.

Closes #538

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015mDZd4hnRG92JnehrwDr29
…uence

Settings: option to play voice messages in sequence automatically
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TeWibD51pMWi1VMz4mKWnT
Fix cached-chat lookup in the wa-js runtime (continua #530)
…critos (#542)

* Pin WPPConnect Server 2.10.58 and port its changes into the overridden files

auth.ts keeps our timing-safe compare next to upstream's verified-token
cache; sessionController.ts takes the secret-key returns and the 503 during
backup/restore; createSessionUtil.ts gates starts in opendata() and awaits
setToken, keeping our ownership design. Changelog in every locale.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEtXDpastEQ2XS7a471X2E

* Register the 2.10.58 changelog item in the user guide coverage

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEtXDpastEQ2XS7a471X2E

---------

Co-authored-by: Claude <noreply@anthropic.com>
* WPPConnect Server: install and offer only the pinned version

The periodic check no longer asks GitHub or recommends optional updates;
Force Reinstall, ApiSetupDialog and setup_api.py use wpp_minimum_version.txt
and never fall back to the newest release or main. Changelog in every locale.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEtXDpastEQ2XS7a471X2E

* Register the pinned-server changelog item in the user guide coverage

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEtXDpastEQ2XS7a471X2E

* Drop the unused recommended-update strings and fix a stale comment

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YEtXDpastEQ2XS7a471X2E

---------

Co-authored-by: Claude <noreply@anthropic.com>
#544)

* WPPConnect Server: offer releases the maintainers approved for this build's pin

client/wpp_approved_versions.json, read live from main, lists upstream
releases that run on the patches of builds pinned at min_pin or later
(usually dependency-only security releases). The periodic check offers the
newest one as a recommended update (restored wording, No by default,
declined/failed remembered for the session); a required update goes straight
to it; Force Reinstall uses it, else the pin. audit_wpp_upgrade.py --approve
writes an entry only after a clean audit with no compiled source change.
Changelog item from #543 reworded in every locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Address review: pin fallback, Node check on approval, timer after Force Reinstall

- A required update whose approved target already failed this session
  offers the pin instead of the same failing install every 12 h.
- --approve refuses when engines.node moved between the tags unless
  --min-winzapp is given (shipped builds bundle the old Node), and
  re-approving keeps the older min_pin.
- Force Reinstall reschedules the periodic check it cancelled.
- The committed list approves nothing yet; docstring matches the code;
  source-text assertions replaced by behaviour tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Address re-review: resume only a cancelled timer, keep min_winzapp on re-approval

Force Reinstall puts back the periodic check only when it cancelled one, so
a checker created just for it (updates turned off) never starts prompting.
Re-approving keeps the stricter min_winzapp along with the older min_pin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Takes out the communities window and its New conversation button, the
navigation row and Alt+8 shortcut, the announcement replies menu and
panel, the core helpers, the WinZapp-owned API controllers/routes and
their tests and docs. Upstream wppconnect-server community routes stay.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj
Drops the 58 communities_*/community_comments_* keys and the Alt+8
shortcut label from the POT and the seven PO files; references refreshed
by translations-update, translations-check passes.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj
Takes the V2.1.0.0 section from main (which has no Communities items)
in all seven locales, and drops the Alt+8 / communities clause from the
"New shortcuts" item. Older versions are untouched.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj
…ures

Drops the Communities text and the Alt+8 row from the seven guide
languages (the groups section is now just "Groups"), regenerates
client/data/help_guide, refreshes cobertura.json and the glossary, and
swaps the sample changelog line used by the diff/release-notes tests.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj
…nd the new settings window)

Tree is main at 0b85f08 (the 2.1 cycle, before the V3.0.0.0 work) minus the Communities
feature, which ships in 3.0.0.0. Parents: release/v2.1.0.0 (2.0.2.0 line) and the prepared branch.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj
@gabrielhhaber
gabrielhhaber marked this pull request as ready for review October 21, 2026 23:34
@gabrielhhaber
gabrielhhaber merged commit 30cc5fa into release/v2.1.0.0 Oct 21, 2026
2 checks passed
@gabrielhhaber
gabrielhhaber deleted the claude/release-2.1.0.0 branch October 22, 2026 00:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.