Repository navigation
Release 2.1.0.0: ciclo 2.1 da main, sem Comunidades e sem a nova janela de configurações - #576
Merged
Merged
Conversation
…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
…ar PRs (#464) Claude-Session: https://claude.ai/code/session_01Dp5rfU2NgpBdGYjwHkx1sr Co-authored-by: Claude <noreply@anthropic.com>
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
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
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>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UvtN18a6gg8VKcjLzLZq1u
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
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
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TeWibD51pMWi1VMz4mKWnT
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TeWibD51pMWi1VMz4mKWnT
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
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>
…2.0.1.0 (#546) Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj Co-authored-by: Claude <noreply@anthropic.com>
…p update (#548) Claude-Session: https://claude.ai/code/session_01AQAEGneXzbt7UZU7tPx9xj Co-authored-by: Claude <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
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.
Before:
release/v2.1.0.0was 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.pyis 2.1.0.0 and the changelog (7 locales) starts at V2.1.0.0.How: the tree is
mainat 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 tomainafter 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.githubfor anything malicious.Known risks: the "Nova conversa" layout went back to a BoxSizer (check ro/pl), and the guide anchor
#grupos-comunidadesbecame#grupos. No wx/GUI tests ran; Linux-only failures match the baseline. Tag, signing and publishing stay with the maintainer.Generated by Claude Code