Same change as Guará: update_apply used to flatly refuse to run for
the GUI binary and point the user to a manual download instead. Since
the desktop app already elevates to root before showing its window,
the process applying the update already has everything it needs — no
second authentication round is required.
- New sabia_core::update::apply_desktop[_with_progress], alongside the
existing CLI-only apply() (left untouched): detects the install kind
at runtime (AppImage via the APPIMAGE env var, same FUSE-mount issue
elevated_exe() already works around and this reuses; Deb otherwise
on Linux; WindowsInstaller on Windows), matches the right release
asset by the GUI bundle naming (_amd64/_aarch64.AppImage,
_amd64/_arm64.deb, _x64-setup.exe), verifies SHA-256 when a sidecar
is published, and installs:
- AppImage: downloads to a temp file in the same directory, renames
over the running file, execs it in place (same PID, already root).
- .deb: runs dpkg -i directly (already root), execs current_exe()
again now that dpkg replaced it on disk.
- Windows: runs the installer silently and detached, exits
immediately to release the file lock. Does not claim to relaunch
the app afterwards — no documented NSIS or Tauri flag does that;
needs a real Windows machine to confirm actual post-install
behavior.
- Engine::update_apply_desktop wires it into the Tauri update_apply
command (now takes AppHandle, emits update-progress events).
- Fixed a real gap: the existing update button handler changed its own
label when an update was available but never actually called apply
— wired it for real, with per-phase progress feedback in the
interface's existing language (download/verify/install/restart).
- scripts/build-gui.sh: generates a checksum file next to every file
in dist-gui/, matching the CLI release archive convention.
- 3 new unit tests: install-kind detection, GUI asset suffix matching
against real release naming, existing CLI-refusal test unchanged.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VAyr8d7HuAdUGB6aA5xmDD
Completes the English-only standardization for code, comments, scripts
and CI templates (UI/CLI-facing strings stay bilingual pt-BR/en,
untouched). Covers the remaining crates/, apps/gui/ui/ and
apps/gui/src-tauri/ comments, .gitea/ workflow and template comments,
.githooks/ hooks, and the scripts/ source comments for the files
already renamed in a prior commit (check.sh, generate-logo.py,
install-hooks.sh).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VAyr8d7HuAdUGB6aA5xmDD
- app.js/app.css/index.html: telas novas para Evil Twin (PSK e
Enterprise), regras de mutação/máscara na quebra de senha, WPS,
indicador de modo (monitor/gerenciado) movido para baixo do seletor de
interface, e aviso específico quando a placa não entrega captura de
verdade (ver bug de ScanSnapshot.warning no engine).
- Lista de redes/BSSIDs não reordena mais a cada poll: ordem de chegada
como critério de desempate e sinal arredondado em buckets de 4 dBm,
porque reordenar pelo sinal instantâneo fazia as linhas flutuarem de
posição debaixo do cursor a cada atualização.
- "Forçar handshake" religa a captura sozinho se ela tiver sido parada
(esperando o AP reaparecer no canal certo antes de disparar o job, e
travando o alvo numa variável local pra não perder o BSSID se o diálogo
fechar no meio da espera).
- Grid da aba Ataques trocado de CSS grid pra colunas (alvenaria): cards
com alturas muito diferentes na mesma linha deixavam buracos vazios
enormes com align-items:start.
- check-ui-i18n.mjs: ajustes de cobertura para as novas telas.
- Logo oficial (sabia.png) e conjunto de ícones do app desktop.
- Interface em português e inglês: tradutor por observação do DOM, seletor
de idioma e checagem de cobertura de tradução no CI.
- CI/CD com caches (rust-cache, .deb do Tauri em cache) e pipeline de release
multiplataforma (CLI em 5 alvos + app desktop via tauri-action), templates
de issue/PR.
- Suíte de testes de integração do sabia-core (scan e2e, handshake/crack
4-way e PMKID, pcap, trilha de auditoria) — 46 testes verdes.
- Documentação completa pt/en: README, ROADMAP, SECURITY, CONTRIBUTING,
CHANGELOG e docs/ (cli, interface, arquitetura), com enquadramento de uso
autorizado.
- Correções de clippy (-D warnings) e formatação em toda a árvore.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Move a UI de crates/sabia-cli/src/web/ para apps/gui/ui/: fonte única
servida tanto pelo `sabia ui` quanto pelo app desktop.
- sabia-core::engine::Engine centraliza sessões de scan/monitor/update —
usado pelo servidor local da CLI e pelo app Tauri, sem duplicar lógica.
- apps/gui/src-tauri: app desktop Tauri 2, mesma interface, comandos IPC
espelhando a API HTTP. Pede elevação de administrador/root
automaticamente ao abrir (modo monitor e captura crua exigem):
manifesto requireAdministrator no Windows (UAC antes mesmo do app
abrir), pkexec no Linux e osascript no macOS, com reinício automático
e aviso + botão de nova tentativa na interface se for negada.
- Ícone gerado a partir do logo (apps/gui/src-tauri/icons/source.png).
- .github/workflows/ci.yml: fmt, clippy, testes (Linux/Windows/macOS),
auditoria de dependências, compilação do app desktop.
- .github/workflows/release.yml: ao empurrar uma tag vX.Y.Z, builda a
CLI (Linux x86_64/aarch64, macOS x86_64/aarch64, Windows x86_64) e o
app desktop pras mesmas plataformas, publica tudo numa release do
GitHub com checksums SHA-256.
- sabia-core::update: corrige o nome do asset esperado (casava pelo
nome fixo, mas o release empacota com a versão no nome) e a extração
(tar.gz no Linux/macOS, zip no Windows).
- LICENSE-MIT, LICENSE-APACHE, CHANGELOG.md com a entrada 0.1.0.
- cargo fmt + clippy (-D warnings) limpos em todo o workspace.