Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
ef03d9f
feat(desktop): GPUI desktop app as a standalone nested workspace
jlucaso1 Jul 9, 2026
aefcb96
fix(desktop): record outgoing messages before sending
claude Jul 10, 2026
68595ce
fix(desktop): correct durable-history hydration semantics
claude Jul 10, 2026
6101959
fix(desktop): review round — dedupe, history merge, UI correctness
claude Jul 10, 2026
46f0011
fix(desktop): pass the input area's own context to set_recording
claude Jul 10, 2026
5b14a5c
style(desktop): rustfmt the call-overwrite warnings
claude Jul 10, 2026
b750fe6
fix(desktop): same-second live siblings still badge
claude Jul 10, 2026
655f80d
fix(desktop): real ids for optimistic bubbles + receipt cache refresh
claude Jul 10, 2026
6df4721
fix(desktop): honor a cancel that lands before the call starts
claude Jul 10, 2026
40e7787
fix(desktop): render the renamed optimistic bubble immediately
claude Jul 10, 2026
f67380e
fix(desktop): scope the client mutex, keep image metadata on failure
claude Jul 10, 2026
d84b247
feat(desktop): hydrate media metadata from stored history
claude Jul 10, 2026
22c58be
fix(desktop): read-tick cache refresh on open, cancelled-set cleanup
claude Jul 10, 2026
502c453
fix(desktop): audio/video pipeline correctness batch
claude Jul 10, 2026
9b08c87
ci(desktop): the apt-cache action's major tag is v1, not v2
claude Jul 10, 2026
7d5d4bb
fix(desktop): review batch — send failures surfaced, history via Stor…
claude Jul 10, 2026
2074e76
docs+ci(desktop): run tests in CI, tighten workflow, refresh README
claude Jul 10, 2026
5a93fcc
fix(desktop): correctness batch — receipts, media lifecycle, call setup
claude Jul 10, 2026
cd785fe
fix(desktop): keep sort invariant on id rename, sticker retry, merge …
claude Jul 10, 2026
672da10
fix(desktop): id-dedup on hydration, per-chat typing presence, format…
claude Jul 10, 2026
8c27b25
fix(desktop): voice notes go to the recording chat, preview stickers …
claude Jul 10, 2026
7fc0cd1
fix(desktop): surface SendFailed when the client handle is unavailable
claude Jul 10, 2026
6b9d0d5
fix(desktop): hydrated rows replace bubbles, PTT audio fidelity batch
claude Jul 10, 2026
bfa9003
fix(desktop): failed sends persist to the store, hydration keeps live…
claude Jul 10, 2026
71d22ba
fix(desktop): scale the decimation FIR with the input rate
claude Jul 10, 2026
da3b27f
fix(desktop): stable per-user db path, stale playback edges
claude Jul 10, 2026
7c37563
fix(desktop): retry shutdown signal, media graft, document download
claude Jul 10, 2026
720ed16
fix(desktop): harden document saves (Windows dirs, no clobber, drive …
claude Jul 10, 2026
50ae345
fix(desktop): prefix Windows-reserved device names on document saves
claude Jul 10, 2026
64089a1
fix(desktop): count out-of-order incoming messages in the unread badge
claude Jul 10, 2026
a023bed
fix(desktop): paused voice notes render paused, DM row sizes match pa…
claude Jul 10, 2026
8c041b0
fix(desktop): adopt display names when collapsing PN/LID history rows
claude Jul 10, 2026
2ace6bc
fix(desktop): per-chat drafts on switch, retryable failed video playback
claude Jul 10, 2026
6b49dec
fix(chat-store): skip the messages invalidation when SendFailed is a …
claude Jul 10, 2026
449655d
fix(desktop): call button only for user JIDs, durable manual-unread c…
claude Jul 10, 2026
bd24be2
fix(desktop): prune store-removed chats on reload, bound manual read …
claude Jul 10, 2026
2ebaab8
fix(desktop): empty reloads clear the list, keyed read covers the who…
claude Jul 10, 2026
2af67b0
fix(desktop): route retry rebuild failures to the error screen
claude Jul 10, 2026
8fcfb82
chore(desktop): update dependencies to latest
claude Jul 10, 2026
dad25e6
fix(desktop): failed JID parse marks the optimistic bubble as failed
claude Jul 10, 2026
786dfb6
fix(desktop): only prune the chat list against a complete store load
claude Jul 10, 2026
8fcc810
fix(desktop): derive load completeness from the raw store entry count
claude Jul 10, 2026
8c9bcee
fix(history): learn per-conversation LID mappings
jlucaso1 Jul 14, 2026
a0ed6ff
fix(desktop): reconcile chat identity and read state
jlucaso1 Jul 14, 2026
7803e79
fix(logging): avoid exposing push names
jlucaso1 Jul 14, 2026
3130abe
fix(history): preserve optional sync state
jlucaso1 Jul 14, 2026
d390e42
fix(desktop): reconcile alias history state
jlucaso1 Jul 14, 2026
dcdd7e5
fix(desktop): spare live-only chats from the empty/complete-load prune
claude Jul 14, 2026
7ac4c59
docs(history): lid_mappings collects bulk and per-conversation pairs
claude Jul 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions .github/workflows/desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Desktop app (apps/desktop): a standalone cargo workspace excluded from the
# root one, so the library jobs never build the gpui tree. It still runs on
# library-path changes: the app is the library's consumer test.
name: Desktop App

on:
push:
branches: ["main"]
paths:
- "apps/desktop/**"
- "src/**"
- "wacore/**"
- "waproto/**"
- "storages/**"
- "transports/**"
- "http_clients/**"
- "Cargo.toml"
- ".github/workflows/desktop.yml"
pull_request:
paths:
- "apps/desktop/**"
- "src/**"
- "wacore/**"
- "waproto/**"
- "storages/**"
- "transports/**"
- "http_clients/**"
- "Cargo.toml"
- ".github/workflows/desktop.yml"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
CARGO_TERM_COLOR: always

jobs:
desktop:
name: Check desktop app
runs-on: ubuntu-latest
defaults:
run:
working-directory: apps/desktop
steps:
- uses: actions/checkout@v6
Comment thread
jlucaso1 marked this conversation as resolved.
Comment thread
jlucaso1 marked this conversation as resolved.
with:
persist-credentials: false
- uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2026-06-16
components: rustfmt, clippy
- name: Install system dependencies (cached)
uses: awalsh128/cache-apt-pkgs-action@v1
with:
packages: libasound2-dev libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libfontconfig1-dev libfreetype6-dev
version: 1.2
- name: Install protoc
uses: taiki-e/install-action@v2
with:
tool: protoc
- uses: Swatinem/rust-cache@v2
with:
workspaces: apps/desktop
- name: Check formatting
run: cargo fmt --all -- --check
- name: Clippy (deny warnings)
run: cargo clippy --all-targets -- -D warnings
Comment thread
jlucaso1 marked this conversation as resolved.
- name: Tests
run: cargo test
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ dhat-heap*.json
# proptest persists failure seeds next to the test on failure; these are
# environment-local replay caches, not source.
*.proptest-regressions

# Nested workspaces build output
apps/*/target/
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ readme = "README.md"
description = "Rust client for WhatsApp Web"

[workspace]
# apps/desktop is its own workspace (heavy gpui tree, own Cargo.lock and
# [patch]); it consumes this workspace's crates via path deps.
exclude = ["apps/desktop"]
members = [
".",
"examples/voip-cli",
Expand Down
Loading
Loading