File rustconn.changes of Package rustconn

-------------------------------------------------------------------
Mon Feb 16 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.6

- Update to version 0.8.6
  * - **Embedded RDP keyboard layout** — Fixed incorrect key mapping for non-US keyboard layouts (e.g. German QWERTZ) in IronRDP embedded client ([#15](https://github.com/totoshko88/RustConn/issues/15))
  * - **Secrets management** — Comprehensive fixes to vault credential storage, backend dispatch, and Bitwarden integration ([#14](https://github.com/totoshko88/RustConn/issues/14)):
  *   - All vault operations (`save_password_to_vault`, `save_group_password_to_vault`, `rename_vault_credential`, "Load from Vault") now respect `Settings → Secrets → preferred_backend` instead of being hardcoded to libsecret
  *   - Bitwarden encrypted password is decrypted and vault auto-unlocked at startup when preferred backend is Bitwarden; Unlock button now uses `--raw` flag for reliable session key extraction
  *   - `PasswordSource::Inherit` resolves group passwords through non-KeePass backends (Bitwarden, 1Password, Passbolt) with correct hierarchy traversal and consistent `group.id` lookup keys
  *   - RDP and VNC password prompts auto-save entered passwords to vault when `password_source == Vault`, even without the "Save credentials" checkbox
  *   - Toast notifications ("Failed to save password to vault") shown on all vault save error paths; previously errors were only logged
  * - **Flatpak component checksums** — Fixed kubectl installation failing with `ChecksumMismatch` by generalizing no-checksum skip for all `*-no-checksum` patterns; updated boundary v0.21.0 checksum to match current upstream binary
  * - **Flatpak component uninstall/reinstall** — Fixed `AlreadyInstalled` error when reinstalling AWS CLI and Google Cloud CLI after removal. `uninstall_component` now cleans up custom install paths (`aws-cli/`, `google-cloud-sdk/`), and `find_installed_binary` no longer searches the entire CLI directory as fallback
  * - **Terminal search Highlight All** — Fixed "Highlight All" checkbox toggling to next match instead of highlighting. Now correctly adds hover-highlight via VTE regex matching without navigating; cleans up highlights on dialog close
  * - **Dependencies** — Updated: `futures` 0.3.31→0.3.32, `libc` 0.2.181→0.2.182, `uuid` 1.20.0→1.21.0, `bitflags` 2.10.0→2.11.0, `syn` 2.0.114→2.0.116, `native-tls` 0.2.14→0.2.16, `png` 0.18.0→0.18.1, `cc` 1.2.55→1.2.56

-------------------------------------------------------------------
Sun Feb 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.5

- Update to version 0.8.5
  * - **Kubernetes Protocol** — Shell access to Kubernetes pods via `kubectl exec -it` ([#14](https://github.com/totoshko88/RustConn/issues/14)):
  *   - `KubernetesConfig` model with kubeconfig, context, namespace, pod, container, shell, busybox toggle
  *   - `KubernetesProtocol` implementing `Protocol` trait in `rustconn-core`
  *   - Two modes: exec into existing pod, or launch temporary busybox pod
  *   - GUI: Connection dialog Kubernetes tab, sidebar K8s quick filter, `application-x-executable-symbolic` icon
  *   - CLI: `kubernetes` subcommand with `--kubeconfig`/`--context`/`--namespace`/`--pod`/`--container`/`--shell`/`--busybox`
  *   - Sandbox: kubectl as Flatpak downloadable component
  *   - Property tests updated with Kubernetes coverage
  * - **Virt-Viewer (.vv) Import** — Import SPICE/VNC connections from virt-viewer files ([#13](https://github.com/totoshko88/RustConn/issues/13)):
  *   - `VirtViewerImporter` implementing `ImportSource` trait in `rustconn-core`
  *   - Parses `[virt-viewer]` INI sections: host, port, tls-port, password, proxy, CA cert, title
  *   - Supports `type=spice` (with TLS detection) and `type=vnc`
  *   - Passwords stored as `SecretString` via `Credentials`, proxy/host-subject preserved as tags
  *   - GUI: "Virt-Viewer (.vv)" option in Import dialog with `.vv` file filter
  *   - Compatible with libvirt, Proxmox VE, and oVirt generated `.vv` files
  * - **Serial Console Protocol** — Full serial console support via `picocom` ([#11](https://github.com/totoshko88/RustConn/issues/11)):
  *   - `SerialConfig` model with device path, baud rate (9600–921600), data bits, stop bits, parity, flow control
  *   - GUI: Connection dialog Serial tab, VTE terminal sessions, `phone-symbolic` icon
  *   - CLI: `serial` subcommand with `--device`/`--baud-rate`/`--data-bits`/`--stop-bits`/`--parity`/`--flow-control`
  *   - Sandbox: Flatpak `--device=all` + bundled `picocom`; Snap `serial-port` plug + bundled `picocom`
  *   - Property tests: 13 serial-specific tests
  * - **SFTP File Browser** — SFTP integration for SSH and standalone SFTP connections ([#10](https://github.com/totoshko88/RustConn/issues/10)):
  *   - "Open SFTP" action in sidebar context menu and SSH session toolbar — opens system file manager via `gtk::UriLauncher` (portal-aware, works in Flatpak/Snap/native)
  *   - "SFTP via mc" option — opens Midnight Commander with FISH VFS panel
  *   - Automatic `ssh-add` before SFTP launch for key-based auth
  *   - Standalone `ProtocolType::Sftp` — dedicated SFTP connection type reusing SSH config
  *   - CLI: `sftp` subcommand (`--cli`, `--mc`, default opens file manager)
  *   - Sandbox: Flatpak/Snap bundle Midnight Commander
  * - **Responsive / Adaptive UI** — Improved dialog sizing and window breakpoints ([#9](https://github.com/totoshko88/RustConn/issues/9)):
  *   - All 17+ dialogs: reduced default sizes, added minimum sizes via `set_size_request()`, all resizable
  *   - `adw::Clamp` (max 600px) added to 7 list-style dialogs for consistent content width
  *   - Dashboard and Active Sessions upgraded to `adw::Window` with `adw::ToolbarView`
  *   - Main window breakpoint 600sp: hides split view buttons on narrow windows
  * - **Terminal Rich Search** — Enhanced terminal search with regex and highlights ([#7](https://github.com/totoshko88/RustConn/issues/7)):
  *   - Regex toggle, "Highlight All" toggle, case-sensitive toggle, wrap-around navigation
  *   - Keyboard shortcut: Ctrl+Shift+F
  *   - Session log timestamps: `log_timestamps` setting prepends `[HH:MM:SS]` to each log line
  * - **Session Logging moved to Logging tab** — Timestamps toggle relocated from Settings → Terminal to Settings → Logging for better discoverability
  * - **CLI component versions updated** — Bumped bundled CLI download URLs to latest releases ([#14](https://github.com/totoshko88/RustConn/issues/14)): Bitwarden CLI 2024.12.0→2026.1.0, Teleport 17.1.2→18.6.8, Boundary 0.18.1→0.21.0, 1Password CLI 2.30.0→2.32.1, kubectl 1.32.0→1.35.0
  * - **Flathub linter `finish-args-home-filesystem-access`** — Replaced `--filesystem=home` with `--filesystem=xdg-download:create` in all Flatpak manifests; mc SFTP now opens XDG Downloads as local panel instead of current directory
  * - **Flathub linter `module-rustconn-source-git-no-commit-with-tag`** — Added explicit `commit` hash to Flathub manifest git source
  * - **ZeroTrust icon inconsistency** — Changed ZeroTrust icon from `folder-remote-symbolic` (same as SFTP) to `security-high-symbolic` across all UI components (sidebar, tabs, adaptive tabs, filter buttons, templates, cluster dialog)
  * - **SFTP tab icon** — SFTP mc tabs now show correct `folder-remote-symbolic` icon instead of generic terminal icon
  * - **SFTP sidebar status** — SFTP connections via mc now show connecting/connected status in sidebar and increment session count

-------------------------------------------------------------------
Sun Feb 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.5

- Update to version 0.8.5
  * - **Kubernetes Protocol** — Shell access to Kubernetes pods via `kubectl exec -it` ([#14](https://github.com/totoshko88/RustConn/issues/14)):
  *   - `KubernetesConfig` model with kubeconfig, context, namespace, pod, container, shell, busybox toggle
  *   - `KubernetesProtocol` implementing `Protocol` trait in `rustconn-core`
  *   - Two modes: exec into existing pod, or launch temporary busybox pod
  *   - GUI: Connection dialog Kubernetes tab, sidebar K8s quick filter, `application-x-executable-symbolic` icon
  *   - CLI: `kubernetes` subcommand with `--kubeconfig`/`--context`/`--namespace`/`--pod`/`--container`/`--shell`/`--busybox`
  *   - Sandbox: kubectl as Flatpak downloadable component
  *   - Property tests updated with Kubernetes coverage
  * - **Virt-Viewer (.vv) Import** — Import SPICE/VNC connections from virt-viewer files ([#13](https://github.com/totoshko88/RustConn/issues/13)):
  *   - `VirtViewerImporter` implementing `ImportSource` trait in `rustconn-core`
  *   - Parses `[virt-viewer]` INI sections: host, port, tls-port, password, proxy, CA cert, title
  *   - Supports `type=spice` (with TLS detection) and `type=vnc`
  *   - Passwords stored as `SecretString` via `Credentials`, proxy/host-subject preserved as tags
  *   - GUI: "Virt-Viewer (.vv)" option in Import dialog with `.vv` file filter
  *   - Compatible with libvirt, Proxmox VE, and oVirt generated `.vv` files
  * - **Serial Console Protocol** — Full serial console support via `picocom` ([#11](https://github.com/totoshko88/RustConn/issues/11)):
  *   - `SerialConfig` model with device path, baud rate (9600–921600), data bits, stop bits, parity, flow control
  *   - GUI: Connection dialog Serial tab, VTE terminal sessions, `phone-symbolic` icon
  *   - CLI: `serial` subcommand with `--device`/`--baud-rate`/`--data-bits`/`--stop-bits`/`--parity`/`--flow-control`
  *   - Sandbox: Flatpak `--device=all` + bundled `picocom`; Snap `serial-port` plug + bundled `picocom`
  *   - Property tests: 13 serial-specific tests
  * - **SFTP File Browser** — SFTP integration for SSH and standalone SFTP connections ([#10](https://github.com/totoshko88/RustConn/issues/10)):
  *   - "Open SFTP" action in sidebar context menu and SSH session toolbar — opens system file manager via `gtk::UriLauncher` (portal-aware, works in Flatpak/Snap/native)
  *   - "SFTP via mc" option — opens Midnight Commander with FISH VFS panel
  *   - Automatic `ssh-add` before SFTP launch for key-based auth
  *   - Standalone `ProtocolType::Sftp` — dedicated SFTP connection type reusing SSH config
  *   - CLI: `sftp` subcommand (`--cli`, `--mc`, default opens file manager)
  *   - Sandbox: Flatpak/Snap bundle Midnight Commander
  * - **Responsive / Adaptive UI** — Improved dialog sizing and window breakpoints ([#9](https://github.com/totoshko88/RustConn/issues/9)):
  *   - All 17+ dialogs: reduced default sizes, added minimum sizes via `set_size_request()`, all resizable
  *   - `adw::Clamp` (max 600px) added to 7 list-style dialogs for consistent content width
  *   - Dashboard and Active Sessions upgraded to `adw::Window` with `adw::ToolbarView`
  *   - Main window breakpoint 600sp: hides split view buttons on narrow windows
  * - **Terminal Rich Search** — Enhanced terminal search with regex and highlights ([#7](https://github.com/totoshko88/RustConn/issues/7)):
  *   - Regex toggle, "Highlight All" toggle, case-sensitive toggle, wrap-around navigation
  *   - Keyboard shortcut: Ctrl+Shift+F
  *   - Session log timestamps: `log_timestamps` setting prepends `[HH:MM:SS]` to each log line
  * - **Session Logging moved to Logging tab** — Timestamps toggle relocated from Settings → Terminal to Settings → Logging for better discoverability
  * - **CLI component versions updated** — Bumped bundled CLI download URLs to latest releases ([#14](https://github.com/totoshko88/RustConn/issues/14)): Bitwarden CLI 2024.12.0→2026.1.0, Teleport 17.1.2→18.6.8, Boundary 0.18.1→0.21.0, 1Password CLI 2.30.0→2.32.1, kubectl 1.32.0→1.35.0

-------------------------------------------------------------------
Sun Feb 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.5

- Update to version 0.8.5
  * - **Kubernetes Protocol** — Shell access to Kubernetes pods via `kubectl exec -it` ([#14](https://github.com/totoshko88/RustConn/issues/14)):
  *   - `KubernetesConfig` model with kubeconfig, context, namespace, pod, container, shell, busybox toggle
  *   - `KubernetesProtocol` implementing `Protocol` trait in `rustconn-core`
  *   - Two modes: exec into existing pod, or launch temporary busybox pod
  *   - GUI: Connection dialog Kubernetes tab, sidebar K8s quick filter, `application-x-executable-symbolic` icon
  *   - CLI: `kubernetes` subcommand with `--kubeconfig`/`--context`/`--namespace`/`--pod`/`--container`/`--shell`/`--busybox`
  *   - Sandbox: kubectl as Flatpak downloadable component
  *   - Property tests updated with Kubernetes coverage
  * - **Virt-Viewer (.vv) Import** — Import SPICE/VNC connections from virt-viewer files ([#13](https://github.com/totoshko88/RustConn/issues/13)):
  *   - `VirtViewerImporter` implementing `ImportSource` trait in `rustconn-core`
  *   - Parses `[virt-viewer]` INI sections: host, port, tls-port, password, proxy, CA cert, title
  *   - Supports `type=spice` (with TLS detection) and `type=vnc`
  *   - Passwords stored as `SecretString` via `Credentials`, proxy/host-subject preserved as tags
  *   - GUI: "Virt-Viewer (.vv)" option in Import dialog with `.vv` file filter
  *   - Compatible with libvirt, Proxmox VE, and oVirt generated `.vv` files
  * - **Serial Console Protocol** — Full serial console support via `picocom` ([#11](https://github.com/totoshko88/RustConn/issues/11)):
  *   - `SerialConfig` model with device path, baud rate (9600–921600), data bits, stop bits, parity, flow control
  *   - GUI: Connection dialog Serial tab, VTE terminal sessions, `phone-symbolic` icon
  *   - CLI: `serial` subcommand with `--device`/`--baud-rate`/`--data-bits`/`--stop-bits`/`--parity`/`--flow-control`
  *   - Sandbox: Flatpak `--device=all` + bundled `picocom`; Snap `serial-port` plug + bundled `picocom`
  *   - Property tests: 13 serial-specific tests
  * - **SFTP File Browser** — SFTP integration for SSH and standalone SFTP connections ([#10](https://github.com/totoshko88/RustConn/issues/10)):
  *   - "Open SFTP" action in sidebar context menu and SSH session toolbar — opens system file manager via `gtk::UriLauncher` (portal-aware, works in Flatpak/Snap/native)
  *   - "SFTP via mc" option — opens Midnight Commander with FISH VFS panel
  *   - Automatic `ssh-add` before SFTP launch for key-based auth
  *   - Standalone `ProtocolType::Sftp` — dedicated SFTP connection type reusing SSH config
  *   - CLI: `sftp` subcommand (`--cli`, `--mc`, default opens file manager)
  *   - Sandbox: Flatpak/Snap bundle Midnight Commander
  * - **Responsive / Adaptive UI** — Improved dialog sizing and window breakpoints ([#9](https://github.com/totoshko88/RustConn/issues/9)):
  *   - All 17+ dialogs: reduced default sizes, added minimum sizes via `set_size_request()`, all resizable
  *   - `adw::Clamp` (max 600px) added to 7 list-style dialogs for consistent content width
  *   - Dashboard and Active Sessions upgraded to `adw::Window` with `adw::ToolbarView`
  *   - Main window breakpoint 600sp: hides split view buttons on narrow windows
  * - **Terminal Rich Search** — Enhanced terminal search with regex and highlights ([#7](https://github.com/totoshko88/RustConn/issues/7)):
  *   - Regex toggle, "Highlight All" toggle, case-sensitive toggle, wrap-around navigation
  *   - Keyboard shortcut: Ctrl+Shift+F
  *   - Session log timestamps: `log_timestamps` setting prepends `[HH:MM:SS]` to each log line
  * - **Session Logging moved to Logging tab** — Timestamps toggle relocated from Settings → Terminal to Settings → Logging for better discoverability

-------------------------------------------------------------------
Sun Feb 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.5

- Update to version 0.8.5
  * - **Kubernetes Protocol** — Shell access to Kubernetes pods via `kubectl exec -it` ([#14](https://github.com/totoshko88/RustConn/issues/14)):
  *   - `KubernetesConfig` model with kubeconfig, context, namespace, pod, container, shell, busybox toggle
  *   - `KubernetesProtocol` implementing `Protocol` trait in `rustconn-core`
  *   - Two modes: exec into existing pod, or launch temporary busybox pod
  *   - GUI: Connection dialog Kubernetes tab, sidebar K8s quick filter, `application-x-executable-symbolic` icon
  *   - CLI: `kubernetes` subcommand with `--kubeconfig`/`--context`/`--namespace`/`--pod`/`--container`/`--shell`/`--busybox`
  *   - Sandbox: kubectl as Flatpak downloadable component
  *   - Property tests updated with Kubernetes coverage
  * - **Virt-Viewer (.vv) Import** — Import SPICE/VNC connections from virt-viewer files ([#13](https://github.com/totoshko88/RustConn/issues/13)):
  *   - `VirtViewerImporter` implementing `ImportSource` trait in `rustconn-core`
  *   - Parses `[virt-viewer]` INI sections: host, port, tls-port, password, proxy, CA cert, title
  *   - Supports `type=spice` (with TLS detection) and `type=vnc`
  *   - Passwords stored as `SecretString` via `Credentials`, proxy/host-subject preserved as tags
  *   - GUI: "Virt-Viewer (.vv)" option in Import dialog with `.vv` file filter
  *   - Compatible with libvirt, Proxmox VE, and oVirt generated `.vv` files
  * - **Serial Console Protocol** — Full serial console support via `picocom` ([#11](https://github.com/totoshko88/RustConn/issues/11)):
  *   - `SerialConfig` model with device path, baud rate (9600–921600), data bits, stop bits, parity, flow control
  *   - GUI: Connection dialog Serial tab, VTE terminal sessions, `phone-symbolic` icon
  *   - CLI: `serial` subcommand with `--device`/`--baud-rate`/`--data-bits`/`--stop-bits`/`--parity`/`--flow-control`
  *   - Sandbox: Flatpak `--device=all` + bundled `picocom`; Snap `serial-port` plug + bundled `picocom`
  *   - Property tests: 13 serial-specific tests
  * - **SFTP File Browser** — SFTP integration for SSH and standalone SFTP connections ([#10](https://github.com/totoshko88/RustConn/issues/10)):
  *   - "Open SFTP" action in sidebar context menu and SSH session toolbar — opens system file manager via `gtk::UriLauncher` (portal-aware, works in Flatpak/Snap/native)
  *   - "SFTP via mc" option — opens Midnight Commander with FISH VFS panel
  *   - Automatic `ssh-add` before SFTP launch for key-based auth
  *   - Standalone `ProtocolType::Sftp` — dedicated SFTP connection type reusing SSH config
  *   - CLI: `sftp` subcommand (`--cli`, `--mc`, default opens file manager)
  *   - Sandbox: Flatpak/Snap bundle Midnight Commander
  * - **Responsive / Adaptive UI** — Improved dialog sizing and window breakpoints ([#9](https://github.com/totoshko88/RustConn/issues/9)):
  *   - All 17+ dialogs: reduced default sizes, added minimum sizes via `set_size_request()`, all resizable
  *   - `adw::Clamp` (max 600px) added to 7 list-style dialogs for consistent content width
  *   - Dashboard and Active Sessions upgraded to `adw::Window` with `adw::ToolbarView`
  *   - Main window breakpoint 600sp: hides split view buttons on narrow windows
  * - **Terminal Rich Search** — Enhanced terminal search with regex and highlights ([#7](https://github.com/totoshko88/RustConn/issues/7)):
  *   - Regex toggle, "Highlight All" toggle, case-sensitive toggle, wrap-around navigation
  *   - Keyboard shortcut: Ctrl+Shift+F
  *   - Session log timestamps: `log_timestamps` setting prepends `[HH:MM:SS]` to each log line
  * - **Session Logging moved to Logging tab** — Timestamps toggle relocated from Settings → Terminal to Settings → Logging for better discoverability

-------------------------------------------------------------------
Sat Feb 14 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.4

- Update to version 0.8.4
  * - **FIDO2/SecurityKey SSH authentication** — New `SshAuthMethod::SecurityKey` variant for FIDO2 hardware key authentication; "Security Key (FIDO2)" option in connection dialog and template dialog SSH auth dropdowns; key file row shown directly without key source dropdown; validation requires key path like `PublicKey`; exports map SecurityKey to `publickey` (Asbru) or `ssh_auth=2` (Remmina); all property test strategies updated with SecurityKey coverage
  * - **CLI auth-method support** — Added `--auth-method` flag to `add` and `update` commands (accepts `password`, `publickey`, `keyboard-interactive`, `agent`, `security-key`/`fido2`); `show` command now displays SSH auth method; `ConnectionOutput` JSON includes `auth_method` field for SSH connections; `update` command supports `--key` for SSH key path changes
  * - **CLI version check timeout** — Increased `VERSION_CHECK_TIMEOUT` from 3 to 6 seconds in both `detection.rs` and `clients_tab.rs`; Azure CLI (`az --version`) loads Python runtime and takes ~3.3 s, causing false "installed (timeout)" status at the previous limit
  * - **Settings dialog startup delay** — Dialog took 3–5 s to appear because `load_secret_settings()` programmatically set 4 "save to keyring" checkboxes, each triggering a `connect_toggled` callback that called `is_secret_tool_available_sync()` → `block_on(which secret-tool)` on the main thread; replaced with a shared `Rc<RefCell<Option<bool>>>` cache populated by the existing background detection thread; removed the blocking `is_secret_tool_available_sync()` wrapper entirely
  * - **WoL MAC Entry Disabled on Edit** — Fixed WoL settings fields (MAC address, broadcast, port, wait time) remaining disabled when editing an existing connection and enabling WoL; `set_wol_config()` was setting `set_sensitive(false)` on individual widgets which conflicted with the group-level sensitivity controlled by the "Enable WOL" checkbox `connect_toggled` handler; removed per-widget sensitivity calls since `wol_settings_group` already manages this
  * - **secret-tool detection** — `is_secret_tool_available()` was using `secret-tool --version` which is not a valid argument; `secret-tool` prints usage and exits with non-zero code, causing the check to always return `false`; replaced with `which secret-tool` for reliable binary detection
  * - **Settings version label race condition** — Backend version showed "Not installed" when reopening Settings with a non-default backend (e.g. Bitwarden) because `load_secret_settings()` triggers the dropdown callback before async CLI detection completes; added `detection_complete` flag so the version label shows "Detecting..." until detection finishes
  * - **Unequal split panel sizes** — Splitting vertically then horizontally (before selecting a panel) produced unequal panels because the empty placeholder `adw::StatusPage` had a large minimum size that prevented `gtk::Paned` from honouring the 50/50 position; set `size_request(0, 0)` on panel containers and `overflow: hidden` on the placeholder overlay so panels can shrink freely
  * - **ConnectionManager watch channels** — Replaced 3× `Arc<Mutex<Option<Vec<T>>>>` + `Arc<Notify>` debounced persistence pattern with `tokio::sync::watch` channels; extracted generic `debounce_worker()` async function eliminating 3 duplicated debounce loops; `flush_persistence()` uses `send_replace(None)` for atomic take-and-save; removed `std::sync::{Arc, Mutex}` and `PendingTrash` type alias; struct fields reduced from 8 persistence-related to 3 (`conn_tx`, `group_tx`, `trash_tx`)
  * - **EmbeddingError thiserror derive** — Replaced manual `Display`/`Error` impls with `#[derive(Debug, Clone, Error)]` in `embedded.rs`
  * - **FreeRDP mutex consolidation** — Combined 3 separate `Arc<Mutex<T>>` (process, state, fallback_triggered) into single `Arc<Mutex<FreeRdpSharedState>>` struct; `frame_buffer` remains separate for independent rendering access
  * - **Embedded RDP module directory** — Reorganized 7 flat `embedded_rdp_*.rs` files into `embedded_rdp/` module directory with `mod.rs`, `buffer.rs`, `detect.rs`, `launcher.rs`, `thread.rs`, `types.rs`, `ui.rs`; updated all internal imports to use `super::` and `crate::embedded_rdp::` paths
  * - **ConnectionDialog LoggingTab extraction** — Extracted 5 logging widget fields from `ConnectionDialog` into `LoggingTab` struct in `logging_tab.rs` with `new()`/`set()`/`build()` methods; `ConnectionDialogData::build_log_config()` and `set_log_config()` now delegate to `LoggingTab`; deleted legacy `create_logging_tab()` and dead `create_wol_tab()` methods (~310 lines removed)
  * - **OverlaySplitView sidebar** — Replaced `gtk::Paned` with `adw::OverlaySplitView` for main window sidebar; added sidebar toggle button (`sidebar-show-symbolic`) in header bar with F9 keyboard shortcut; sidebar supports show/hide gestures and saves width on close
  * - **Responsive sidebar breakpoint** — Added `adw::Breakpoint` (max-width: 400sp) that collapses sidebar to overlay mode on narrow windows; sidebar unpins automatically and can be toggled via F9 or swipe gestures; uses `sp` units for GNOME Large Text accessibility
  * - **Window module directory** — Reorganized 14 flat `window_*.rs` files into `window/` module directory with `mod.rs`; submodules use `super::` imports for `MainWindow` and sibling references; removed 14 `mod window_*` declarations from `main.rs`
  * - **State access error thiserror** — Replaced manual `Display`/`Error` impls for `StateAccessError` in `state.rs` with `#[derive(Debug, Clone, thiserror::Error)]`; audited all `#[allow(dead_code)]` annotations — safe state access API (`with_state`, `try_with_state`, `with_state_mut`, `try_with_state_mut`) retained with justification comments
  * - **Workspace clippy suppression audit** — Removed ~80 redundant per-item and per-module `#[allow(clippy::*)]` annotations that duplicate workspace-level allows in `Cargo.toml` (`cast_precision_loss`, `cast_possible_truncation`, `missing_const_for_fn`, `needless_pass_by_value`, `unused_self`, `doc_markdown`); cleaned up blanket module-level suppressions in `performance/mod.rs` (10→7), `search/mod.rs` (6→3), `rdp_client/` (3 files), `embedded_rdp/mod.rs`, `embedded_vnc.rs`, `wayland_surface.rs`, `audio.rs`, `testing/mod.rs`; removed stale `needless_collect` from `freerdp.rs`; fixed exposed `let_and_return` in `password_generator.rs` and `needless_collect` in `freerdp.rs` tests; trimmed 8 redundant lints from `property_tests.rs` and `properties/mod.rs` test harnesses
  * - **Protocol trait capabilities and command builder** — Extended `Protocol` trait with `capabilities()` returning `ProtocolCapabilities` struct (7 flags: `embedded`, `external_fallback`, `file_transfer`, `audio`, `clipboard`, `split_view`, `terminal_based`) and `build_command()` returning `Option<Vec<String>>` for CLI command generation; implemented `capabilities()` for all 5 protocols (SSH/Telnet: terminal, RDP: graphical with file/audio/clipboard, VNC: graphical with clipboard, SPICE: external-only with clipboard); implemented `build_command()` for SSH (delegates to `SshConfig::build_command_args()`) and Telnet (host + port + custom args); both new methods have default impls so existing `Protocol` implementors are unaffected
  * - **Dependencies** — Updated `resvg` 0.46→0.47 (also updates `usvg` 0.46→0.47, `tiny-skia` 0.11→0.12, `tiny-skia-path` 0.11→0.12)

-------------------------------------------------------------------
Sat Feb 14 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.4

- Update to version 0.8.4
  * - **FIDO2/SecurityKey SSH authentication** — New `SshAuthMethod::SecurityKey` variant for FIDO2 hardware key authentication; "Security Key (FIDO2)" option in connection dialog and template dialog SSH auth dropdowns; key file row shown directly without key source dropdown; validation requires key path like `PublicKey`; exports map SecurityKey to `publickey` (Asbru) or `ssh_auth=2` (Remmina); all property test strategies updated with SecurityKey coverage
  * - **CLI auth-method support** — Added `--auth-method` flag to `add` and `update` commands (accepts `password`, `publickey`, `keyboard-interactive`, `agent`, `security-key`/`fido2`); `show` command now displays SSH auth method; `ConnectionOutput` JSON includes `auth_method` field for SSH connections; `update` command supports `--key` for SSH key path changes
  * - **CLI version check timeout** — Increased `VERSION_CHECK_TIMEOUT` from 3 to 6 seconds in both `detection.rs` and `clients_tab.rs`; Azure CLI (`az --version`) loads Python runtime and takes ~3.3 s, causing false "installed (timeout)" status at the previous limit
  * - **Settings dialog startup delay** — Dialog took 3–5 s to appear because `load_secret_settings()` programmatically set 4 "save to keyring" checkboxes, each triggering a `connect_toggled` callback that called `is_secret_tool_available_sync()` → `block_on(which secret-tool)` on the main thread; replaced with a shared `Rc<RefCell<Option<bool>>>` cache populated by the existing background detection thread; removed the blocking `is_secret_tool_available_sync()` wrapper entirely
  * - **WoL MAC Entry Disabled on Edit** — Fixed WoL settings fields (MAC address, broadcast, port, wait time) remaining disabled when editing an existing connection and enabling WoL; `set_wol_config()` was setting `set_sensitive(false)` on individual widgets which conflicted with the group-level sensitivity controlled by the "Enable WOL" checkbox `connect_toggled` handler; removed per-widget sensitivity calls since `wol_settings_group` already manages this
  * - **secret-tool detection** — `is_secret_tool_available()` was using `secret-tool --version` which is not a valid argument; `secret-tool` prints usage and exits with non-zero code, causing the check to always return `false`; replaced with `which secret-tool` for reliable binary detection
  * - **Settings version label race condition** — Backend version showed "Not installed" when reopening Settings with a non-default backend (e.g. Bitwarden) because `load_secret_settings()` triggers the dropdown callback before async CLI detection completes; added `detection_complete` flag so the version label shows "Detecting..." until detection finishes
  * - **Unequal split panel sizes** — Splitting vertically then horizontally (before selecting a panel) produced unequal panels because the empty placeholder `adw::StatusPage` had a large minimum size that prevented `gtk::Paned` from honouring the 50/50 position; set `size_request(0, 0)` on panel containers and `overflow: hidden` on the placeholder overlay so panels can shrink freely
  * - **ConnectionManager watch channels** — Replaced 3× `Arc<Mutex<Option<Vec<T>>>>` + `Arc<Notify>` debounced persistence pattern with `tokio::sync::watch` channels; extracted generic `debounce_worker()` async function eliminating 3 duplicated debounce loops; `flush_persistence()` uses `send_replace(None)` for atomic take-and-save; removed `std::sync::{Arc, Mutex}` and `PendingTrash` type alias; struct fields reduced from 8 persistence-related to 3 (`conn_tx`, `group_tx`, `trash_tx`)
  * - **EmbeddingError thiserror derive** — Replaced manual `Display`/`Error` impls with `#[derive(Debug, Clone, Error)]` in `embedded.rs`
  * - **FreeRDP mutex consolidation** — Combined 3 separate `Arc<Mutex<T>>` (process, state, fallback_triggered) into single `Arc<Mutex<FreeRdpSharedState>>` struct; `frame_buffer` remains separate for independent rendering access
  * - **Embedded RDP module directory** — Reorganized 7 flat `embedded_rdp_*.rs` files into `embedded_rdp/` module directory with `mod.rs`, `buffer.rs`, `detect.rs`, `launcher.rs`, `thread.rs`, `types.rs`, `ui.rs`; updated all internal imports to use `super::` and `crate::embedded_rdp::` paths
  * - **ConnectionDialog LoggingTab extraction** — Extracted 5 logging widget fields from `ConnectionDialog` into `LoggingTab` struct in `logging_tab.rs` with `new()`/`set()`/`build()` methods; `ConnectionDialogData::build_log_config()` and `set_log_config()` now delegate to `LoggingTab`; deleted legacy `create_logging_tab()` and dead `create_wol_tab()` methods (~310 lines removed)
  * - **OverlaySplitView sidebar** — Replaced `gtk::Paned` with `adw::OverlaySplitView` for main window sidebar; added sidebar toggle button (`sidebar-show-symbolic`) in header bar with F9 keyboard shortcut; sidebar supports show/hide gestures and saves width on close
  * - **Responsive sidebar breakpoint** — Added `adw::Breakpoint` (max-width: 400sp) that collapses sidebar to overlay mode on narrow windows; sidebar unpins automatically and can be toggled via F9 or swipe gestures; uses `sp` units for GNOME Large Text accessibility
  * - **Window module directory** — Reorganized 14 flat `window_*.rs` files into `window/` module directory with `mod.rs`; submodules use `super::` imports for `MainWindow` and sibling references; removed 14 `mod window_*` declarations from `main.rs`
  * - **State access error thiserror** — Replaced manual `Display`/`Error` impls for `StateAccessError` in `state.rs` with `#[derive(Debug, Clone, thiserror::Error)]`; audited all `#[allow(dead_code)]` annotations — safe state access API (`with_state`, `try_with_state`, `with_state_mut`, `try_with_state_mut`) retained with justification comments
  * - **Workspace clippy suppression audit** — Removed ~80 redundant per-item and per-module `#[allow(clippy::*)]` annotations that duplicate workspace-level allows in `Cargo.toml` (`cast_precision_loss`, `cast_possible_truncation`, `missing_const_for_fn`, `needless_pass_by_value`, `unused_self`, `doc_markdown`); cleaned up blanket module-level suppressions in `performance/mod.rs` (10→7), `search/mod.rs` (6→3), `rdp_client/` (3 files), `embedded_rdp/mod.rs`, `embedded_vnc.rs`, `wayland_surface.rs`, `audio.rs`, `testing/mod.rs`; removed stale `needless_collect` from `freerdp.rs`; fixed exposed `let_and_return` in `password_generator.rs` and `needless_collect` in `freerdp.rs` tests; trimmed 8 redundant lints from `property_tests.rs` and `properties/mod.rs` test harnesses
  * - **Protocol trait capabilities and command builder** — Extended `Protocol` trait with `capabilities()` returning `ProtocolCapabilities` struct (7 flags: `embedded`, `external_fallback`, `file_transfer`, `audio`, `clipboard`, `split_view`, `terminal_based`) and `build_command()` returning `Option<Vec<String>>` for CLI command generation; implemented `capabilities()` for all 5 protocols (SSH/Telnet: terminal, RDP: graphical with file/audio/clipboard, VNC: graphical with clipboard, SPICE: external-only with clipboard); implemented `build_command()` for SSH (delegates to `SshConfig::build_command_args()`) and Telnet (host + port + custom args); both new methods have default impls so existing `Protocol` implementors are unaffected
  * - **Dependencies** — Updated `resvg` 0.46→0.47 (also updates `usvg` 0.46→0.47, `tiny-skia` 0.11→0.12, `tiny-skia-path` 0.11→0.12)

-------------------------------------------------------------------
Fri Feb 13 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.3

- Update to version 0.8.3
  * - **Wake On LAN from GUI** — Send WoL magic packets directly from the GUI ([#8](https://github.com/totoshko88/RustConn/issues/8)):
  *   - Right-click connection → "Wake On LAN" sends packet using configured MAC address
  *   - Auto-WoL before connecting: if a connection has WoL configured, a magic packet is sent automatically on connect (fire-and-forget, does not block connection)
  *   - Standalone WoL dialog (Menu → Tools → "Wake On LAN...") with connection picker and manual MAC entry
  *   - Retry with 3 packets at 500 ms intervals for reliability
  *   - Non-blocking: all sends run on background threads via `spawn_blocking_with_callback`
  *   - Toast notifications for success/failure
  * - **Flatpak libsecret Build** — Fixed Flatpak build failure: disabled `bash_completion` in libsecret module (EROFS in sandbox)
  * - **Flatpak libsecret Crypto Option** — Fixed libsecret 0.21.7 build: renamed `gcrypt` option to `crypto`
  * - **Thread Safety** — Removed `std::env::set_var` calls from FreeRDP spawned thread (`embedded_rdp_thread.rs`); env vars (`QT_LOGGING_RULES`, `QT_QPA_PLATFORM`) are already set per-process via `Command::env()` in `launch_freerdp()`, eliminating a data race (unsafe since Rust 1.66+)
  * - **Flatpak Machine Key** — `get_machine_key()` now generates and persists an app-specific key file in `$XDG_DATA_HOME/rustconn/.machine-key` as first priority; `/etc/machine-id` (inaccessible in Flatpak sandbox) is now a fallback, with hostname+username as last resort
  * - **Variables Dialog Panic** — Replaced `expect()` on `btn.root().and_downcast::<Window>()` in vault load callback with `if let Some(window)` pattern and `tracing::warn!` fallback
  * - **Keyring `secret-tool` Check** — `keyring::store()` now checks `is_secret_tool_available()` before attempting to store; returns `SecretError::BackendUnavailable` with user-friendly message if `secret-tool` is not installed
  * - **Flatpak CLI Paths** — Secret backend CLI detection (`bw`, `op`, `passbolt`) no longer adds hardcoded `/snap/bin/` and `/usr/local/bin/` paths when running inside Flatpak; checks `get_cli_install_dir()` for Flatpak-installed tools instead
  * - **Settings Dialog Performance** — Moved all secret backend CLI detection (`keepassxc-cli`, `bw`, `op`, `passbolt`) and keyring auto-load operations (Bitwarden auto-unlock, 1Password token, Passbolt passphrase, KeePassXC password) from synchronous main-thread execution to background threads via `glib::spawn_future`; Settings dialog now opens instantly with "Detecting..." placeholders, updating widgets asynchronously when detection and keyring lookups complete (~10 s → instant)
  * - **Settings Clients Tab Performance** — Added 3-second timeout to all CLI version checks (`get_version` in `detection.rs`, `get_version_with_env` in `clients_tab.rs`) preventing slow CLIs (`gcloud`, `az`, `oci`) from blocking detection; parallelized all 9 zero trust CLI detections and core/zero trust groups via `std::thread::scope`; moved SSH agent `get_status()` (`ssh-add -l`) from GTK main thread to background thread via `glib::spawn_future` — total Clients tab detection time reduced from ~15 s sequential to ~3 s parallel
  * - **Settings Dialog Instant Display** — Moved `dialog.present()` before `load_settings()` in `SettingsDialog::run()` so the window appears immediately; all widget population and async background operations (CLI detection, keyring lookups, SSH agent status) now run after the dialog is already visible
  * - **Settings Dialog Visual Render Blocking** — Replaced `glib::spawn_future_local` + `glib::spawn_future` async pattern with `std::thread::spawn` + `std::sync::mpsc::channel` + `glib::idle_add_local` in all three Settings tabs (Clients, Secrets, SSH Agent); the previous pattern kept pending futures in the GTK main loop which prevented frame rendering until background tasks completed (~6 s delay); the new pattern fully decouples background work from the main loop so the dialog renders instantly while CLI detection runs in parallel

-------------------------------------------------------------------
Wed Feb 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.2

- Update to version 0.8.2
  * - **Shared Keyring Module** — New `rustconn-core::secret::keyring` module with generic `store()`, `lookup()`, `clear()`, and `is_secret_tool_available()` functions for all backends
  * - **Keyring Support for All Secret Backends** — System keyring (GNOME Keyring / KDE Wallet) integration for all backends:
  *   - Bitwarden: refactored to use shared keyring module
  *   - 1Password: `store_token_in_keyring()` / `get_token_from_keyring()` / `delete_token_from_keyring()`
  *   - Passbolt: `store_passphrase_in_keyring()` / `get_passphrase_from_keyring()` / `delete_passphrase_from_keyring()`
  *   - KeePassXC: `store_kdbx_password_in_keyring()` / `get_kdbx_password_from_keyring()` / `delete_kdbx_password_from_keyring()`
  * - **Auto-Load Credentials from Keyring** — On settings load, all backends with "Save to system keyring" enabled automatically restore credentials:
  *   - 1Password: loads token and sets `OP_SERVICE_ACCOUNT_TOKEN` env var
  *   - Passbolt: loads GPG passphrase into entry field
  *   - KeePassXC: loads KDBX password into entry field
  *   - Bitwarden: auto-unlocks vault (existing behavior)
  * - **`secret-tool` Availability Check** — Toggling "Save to system keyring" for any backend now checks if `secret-tool` is installed; if missing, unchecks the checkbox and shows "Install libsecret-tools for keyring" warning
  * - **Flatpak `secret-tool` Support** — Added `libsecret` 0.21.7 as a Flatpak build module in all manifests (flatpak, local, flathub), providing `secret-tool` binary inside the sandbox for system keyring integration
  * - **Passbolt Server URL Setting** — New `passbolt_server_url` field in `SecretSettings` for configuring Passbolt server address
  * - **Passbolt UI in Settings** — Secrets tab now includes Server URL entry and "Open Vault" button for Passbolt:
  *   - Server URL auto-fills from `go-passbolt-cli` config on startup
  *   - "Open Vault" button opens configured URL in browser
  * - **Unified Credential Save Options** — All secret backends now offer consistent "Save password" (encrypted local) and "Save to system keyring" (libsecret/KWallet) options with mutual exclusion:
  *   - KeePassXC: Added "Save to system keyring" checkbox alongside existing "Save password"
  *   - Bitwarden: Added mutual exclusion between "Save password" and "Save to system keyring"
  *   - 1Password: Added Service Account Token entry with "Save token" and "Save to system keyring"
  *   - Passbolt: Added GPG Passphrase entry with "Save passphrase" and "Save to system keyring"
  * - **New `SecretSettings` fields** — `kdbx_save_to_keyring`, `onepassword_service_account_token`, `onepassword_save_to_keyring`, `passbolt_passphrase`, `passbolt_save_to_keyring` for unified credential persistence
  * - **Secret Lookup Key Mismatch** — Fixed credential store/retrieve inconsistency across all secret backends:
  *   - libsecret: `store_unified()` now uses `"{name} ({protocol})"` key format matching `resolve_from_keyring` lookup
  *   - Bitwarden/1Password/Passbolt: resolve functions now try `rustconn/{name}` first (matching store), then UUID fallback, then `{name} ({protocol})`
  *   - Previously stored credentials were unretrievable because store and retrieve used different lookup keys
  * - **Passbolt Server Address Always None** — `get_passbolt_status()` now reads server address from `~/.config/go-passbolt-cli/config.json` via new `read_passbolt_server_address()` function
  * - **Passbolt "Open Password Vault" URL** — Button now opens the configured Passbolt server URL instead of hardcoded `https://passbolt.local`; reads URL from Settings or falls back to CLI config
  * - **Variable Secrets Ignoring Preferred Backend** — `save_variable_to_vault()` and `load_variable_from_vault()` now respect `preferred_backend` setting; previously they always used KeePass/libsecret regardless of configured backend (Bitwarden, 1Password, Passbolt)
  * - **Bitwarden Folder Parsing Crash** — `BitwardenFolder.id` now accepts `null` values from Bitwarden CLI (e.g. "No Folder" system entry); previously caused `Failed to parse folders` error
  * - **Bitwarden Vault Auto-Unlock** — Variable save/load now automatically unlocks Bitwarden vault using saved master password from keyring or encrypted settings; previously required manual `bw unlock` or `BW_SESSION` env var
  * - **Dependencies** — Updated: `clap` 4.5.57→4.5.58, `clap_builder` 4.5.57→4.5.58, `clap_lex` 0.7.7→1.0.0, `deranged` 0.5.5→0.5.6
  * - **Unused `picky` pin** — Removed `picky = "=7.0.0-rc.20"` version pin from `rustconn-core`; cargo resolves the correct version transitively via ironrdp/sspi without an explicit pin
  * - **Workspace dependency consistency** — Moved `regex` in `rustconn` crate from inline `"1.11"` to `{ workspace = true }` for unified version management
  * - **Description consistency** — Unified short description ("Manage remote connections easily") and long description across all packaging metadata, README, Welcome screen, About dialog, Cargo.toml, .desktop, metainfo.xml, and Snap manifest; added missing `telnet` and `zerotrust` keywords; fixed About dialog `developer_name` field to show author name instead of product description

-------------------------------------------------------------------
Wed Feb 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.2

- Update to version 0.8.2
  * - **Shared Keyring Module** — New `rustconn-core::secret::keyring` module with generic `store()`, `lookup()`, `clear()`, and `is_secret_tool_available()` functions for all backends
  * - **Keyring Support for All Secret Backends** — System keyring (GNOME Keyring / KDE Wallet) integration for all backends:
  *   - Bitwarden: refactored to use shared keyring module
  *   - 1Password: `store_token_in_keyring()` / `get_token_from_keyring()` / `delete_token_from_keyring()`
  *   - Passbolt: `store_passphrase_in_keyring()` / `get_passphrase_from_keyring()` / `delete_passphrase_from_keyring()`
  *   - KeePassXC: `store_kdbx_password_in_keyring()` / `get_kdbx_password_from_keyring()` / `delete_kdbx_password_from_keyring()`
  * - **Auto-Load Credentials from Keyring** — On settings load, all backends with "Save to system keyring" enabled automatically restore credentials:
  *   - 1Password: loads token and sets `OP_SERVICE_ACCOUNT_TOKEN` env var
  *   - Passbolt: loads GPG passphrase into entry field
  *   - KeePassXC: loads KDBX password into entry field
  *   - Bitwarden: auto-unlocks vault (existing behavior)
  * - **`secret-tool` Availability Check** — Toggling "Save to system keyring" for any backend now checks if `secret-tool` is installed; if missing, unchecks the checkbox and shows "Install libsecret-tools for keyring" warning
  * - **Flatpak `secret-tool` Support** — Added `libsecret` 0.21.7 as a Flatpak build module in all manifests (flatpak, local, flathub), providing `secret-tool` binary inside the sandbox for system keyring integration
  * - **Passbolt Server URL Setting** — New `passbolt_server_url` field in `SecretSettings` for configuring Passbolt server address
  * - **Passbolt UI in Settings** — Secrets tab now includes Server URL entry and "Open Vault" button for Passbolt:
  *   - Server URL auto-fills from `go-passbolt-cli` config on startup
  *   - "Open Vault" button opens configured URL in browser
  * - **Unified Credential Save Options** — All secret backends now offer consistent "Save password" (encrypted local) and "Save to system keyring" (libsecret/KWallet) options with mutual exclusion:
  *   - KeePassXC: Added "Save to system keyring" checkbox alongside existing "Save password"
  *   - Bitwarden: Added mutual exclusion between "Save password" and "Save to system keyring"
  *   - 1Password: Added Service Account Token entry with "Save token" and "Save to system keyring"
  *   - Passbolt: Added GPG Passphrase entry with "Save passphrase" and "Save to system keyring"
  * - **New `SecretSettings` fields** — `kdbx_save_to_keyring`, `onepassword_service_account_token`, `onepassword_save_to_keyring`, `passbolt_passphrase`, `passbolt_save_to_keyring` for unified credential persistence
  * - **Secret Lookup Key Mismatch** — Fixed credential store/retrieve inconsistency across all secret backends:
  *   - libsecret: `store_unified()` now uses `"{name} ({protocol})"` key format matching `resolve_from_keyring` lookup
  *   - Bitwarden/1Password/Passbolt: resolve functions now try `rustconn/{name}` first (matching store), then UUID fallback, then `{name} ({protocol})`
  *   - Previously stored credentials were unretrievable because store and retrieve used different lookup keys
  * - **Passbolt Server Address Always None** — `get_passbolt_status()` now reads server address from `~/.config/go-passbolt-cli/config.json` via new `read_passbolt_server_address()` function
  * - **Passbolt "Open Password Vault" URL** — Button now opens the configured Passbolt server URL instead of hardcoded `https://passbolt.local`; reads URL from Settings or falls back to CLI config
  * - **Variable Secrets Ignoring Preferred Backend** — `save_variable_to_vault()` and `load_variable_from_vault()` now respect `preferred_backend` setting; previously they always used KeePass/libsecret regardless of configured backend (Bitwarden, 1Password, Passbolt)
  * - **Bitwarden Folder Parsing Crash** — `BitwardenFolder.id` now accepts `null` values from Bitwarden CLI (e.g. "No Folder" system entry); previously caused `Failed to parse folders` error
  * - **Bitwarden Vault Auto-Unlock** — Variable save/load now automatically unlocks Bitwarden vault using saved master password from keyring or encrypted settings; previously required manual `bw unlock` or `BW_SESSION` env var
  * - **Dependencies** — Updated: `clap` 4.5.57→4.5.58, `clap_builder` 4.5.57→4.5.58, `clap_lex` 0.7.7→1.0.0, `deranged` 0.5.5→0.5.6
  * - **Unused `picky` pin** — Removed `picky = "=7.0.0-rc.20"` version pin from `rustconn-core`; cargo resolves the correct version transitively via ironrdp/sspi without an explicit pin
  * - **Workspace dependency consistency** — Moved `regex` in `rustconn` crate from inline `"1.11"` to `{ workspace = true }` for unified version management
  * - **Description consistency** — Unified short description ("Manage remote connections easily") and long description across all packaging metadata, README, Welcome screen, About dialog, Cargo.toml, .desktop, metainfo.xml, and Snap manifest; added missing `telnet` and `zerotrust` keywords; fixed About dialog `developer_name` field to show author name instead of product description

-------------------------------------------------------------------
Wed Feb 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.2

- Update to version 0.8.2
  * - **Shared Keyring Module** — New `rustconn-core::secret::keyring` module with generic `store()`, `lookup()`, `clear()`, and `is_secret_tool_available()` functions for all backends
  * - **Keyring Support for All Secret Backends** — System keyring (GNOME Keyring / KDE Wallet) integration for all backends:
  *   - Bitwarden: refactored to use shared keyring module
  *   - 1Password: `store_token_in_keyring()` / `get_token_from_keyring()` / `delete_token_from_keyring()`
  *   - Passbolt: `store_passphrase_in_keyring()` / `get_passphrase_from_keyring()` / `delete_passphrase_from_keyring()`
  *   - KeePassXC: `store_kdbx_password_in_keyring()` / `get_kdbx_password_from_keyring()` / `delete_kdbx_password_from_keyring()`
  * - **Auto-Load Credentials from Keyring** — On settings load, all backends with "Save to system keyring" enabled automatically restore credentials:
  *   - 1Password: loads token and sets `OP_SERVICE_ACCOUNT_TOKEN` env var
  *   - Passbolt: loads GPG passphrase into entry field
  *   - KeePassXC: loads KDBX password into entry field
  *   - Bitwarden: auto-unlocks vault (existing behavior)
  * - **`secret-tool` Availability Check** — Toggling "Save to system keyring" for any backend now checks if `secret-tool` is installed; if missing, unchecks the checkbox and shows "Install libsecret-tools for keyring" warning
  * - **Flatpak `secret-tool` Support** — Added `libsecret` 0.21.7 as a Flatpak build module in all manifests (flatpak, local, flathub), providing `secret-tool` binary inside the sandbox for system keyring integration
  * - **Passbolt Server URL Setting** — New `passbolt_server_url` field in `SecretSettings` for configuring Passbolt server address
  * - **Passbolt UI in Settings** — Secrets tab now includes Server URL entry and "Open Vault" button for Passbolt:
  *   - Server URL auto-fills from `go-passbolt-cli` config on startup
  *   - "Open Vault" button opens configured URL in browser
  * - **Unified Credential Save Options** — All secret backends now offer consistent "Save password" (encrypted local) and "Save to system keyring" (libsecret/KWallet) options with mutual exclusion:
  *   - KeePassXC: Added "Save to system keyring" checkbox alongside existing "Save password"
  *   - Bitwarden: Added mutual exclusion between "Save password" and "Save to system keyring"
  *   - 1Password: Added Service Account Token entry with "Save token" and "Save to system keyring"
  *   - Passbolt: Added GPG Passphrase entry with "Save passphrase" and "Save to system keyring"
  * - **New `SecretSettings` fields** — `kdbx_save_to_keyring`, `onepassword_service_account_token`, `onepassword_save_to_keyring`, `passbolt_passphrase`, `passbolt_save_to_keyring` for unified credential persistence
  * - **Secret Lookup Key Mismatch** — Fixed credential store/retrieve inconsistency across all secret backends:
  *   - libsecret: `store_unified()` now uses `"{name} ({protocol})"` key format matching `resolve_from_keyring` lookup
  *   - Bitwarden/1Password/Passbolt: resolve functions now try `rustconn/{name}` first (matching store), then UUID fallback, then `{name} ({protocol})`
  *   - Previously stored credentials were unretrievable because store and retrieve used different lookup keys
  * - **Passbolt Server Address Always None** — `get_passbolt_status()` now reads server address from `~/.config/go-passbolt-cli/config.json` via new `read_passbolt_server_address()` function
  * - **Passbolt "Open Password Vault" URL** — Button now opens the configured Passbolt server URL instead of hardcoded `https://passbolt.local`; reads URL from Settings or falls back to CLI config
  * - **Variable Secrets Ignoring Preferred Backend** — `save_variable_to_vault()` and `load_variable_from_vault()` now respect `preferred_backend` setting; previously they always used KeePass/libsecret regardless of configured backend (Bitwarden, 1Password, Passbolt)
  * - **Bitwarden Folder Parsing Crash** — `BitwardenFolder.id` now accepts `null` values from Bitwarden CLI (e.g. "No Folder" system entry); previously caused `Failed to parse folders` error
  * - **Bitwarden Vault Auto-Unlock** — Variable save/load now automatically unlocks Bitwarden vault using saved master password from keyring or encrypted settings; previously required manual `bw unlock` or `BW_SESSION` env var
  * - **Dependencies** — Updated: `clap` 4.5.57→4.5.58, `clap_builder` 4.5.57→4.5.58, `clap_lex` 0.7.7→1.0.0, `deranged` 0.5.5→0.5.6
  * - **Unused `picky` pin** — Removed `picky = "=7.0.0-rc.20"` version pin from `rustconn-core`; cargo resolves the correct version transitively via ironrdp/sspi without an explicit pin
  * - **Workspace dependency consistency** — Moved `regex` in `rustconn` crate from inline `"1.11"` to `{ workspace = true }` for unified version management
  * - **Description consistency** — Unified short description ("Manage remote connections easily") and long description across all packaging metadata, README, Welcome screen, About dialog, Cargo.toml, .desktop, metainfo.xml, and Snap manifest; added missing `telnet` and `zerotrust` keywords; fixed About dialog `developer_name` field to show author name instead of product description

-------------------------------------------------------------------
Wed Feb 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.1

- Update to version 0.8.1
  * - **Passbolt Secret Backend** — Passbolt password manager integration ([#6](https://github.com/totoshko88/RustConn/issues/6)):
  *   - `PassboltBackend` implementing `SecretBackend` trait via `go-passbolt-cli`
  *   - Store, retrieve, and delete credentials as Passbolt resources
  *   - CLI detection and version display in Settings → Secrets
  *   - Server configuration status check (configured/not configured/auth failed)
  *   - `PasswordSource::Passbolt` option in connection dialog password source dropdown
  *   - `SecretBackendType::Passbolt` option in settings backend selector
  *   - Credential resolution and rename support in `CredentialResolver`
  *   - Requires `passbolt configure` CLI setup before use
  * - **Unified Secret Backends** — Replaced individual `PasswordSource` variants (KeePass, Keyring, Bitwarden, OnePassword, Passbolt) with single `Vault` variant:
  *   - Connection dialog password source dropdown: Prompt, Vault, Variable, Inherit, None
  *   - Serde aliases preserve backward compatibility with existing configs
  *   - `PasswordSource` is now `Clone` only (no longer `Copy`) due to `Variable(String)`
  * - **Variable Password Source** — New `PasswordSource::Variable(String)` reads credentials from a named secret global variable:
  *   - Connection dialog shows variable dropdown when "Variable" is selected
  *   - Dropdown populated with secret global variables only
  * - **Variables Dialog Improvements** — Show/Hide and Load from Vault buttons for secret variables:
  *   - Toggle password visibility with `view-reveal-symbolic`/`view-conceal-symbolic` icon
  *   - Load secret value from vault with key `rustconn/var/{name}`
  *   - Secret variable values auto-saved to vault on dialog save, cleared from settings file
  * - **Secret Variable Vault Backend** — Fixed secret variables always using libsecret instead of configured backend:
  *   - Save/load secret variable values now respects Settings → Secrets backend (KeePassXC, libsecret)
  *   - Added `save_variable_to_vault()` and `load_variable_from_vault()` functions using settings snapshot
  *   - Toast notification on vault save/load failure with message to check Settings
  * - **Variable Dropdown Empty in Connection Dialog** — Fixed Variable dropdown showing "(Немає)" when editing connections:
  *   - `set_global_variables()` was never called when creating/editing connections
  *   - Added call to all three `ConnectionDialog` creation sites (new, edit, template)
  *   - Edit dialog: `set_global_variables()` called before `set_connection()` so variable selection works
  * - **Telnet Backspace/Delete Key Handling** — Fixed keyboard settings not working correctly for Telnet connections ([#5](https://github.com/totoshko88/RustConn/issues/5)):
  *   - Replaced `stty erase` shell wrapper approach with VTE native `EraseBinding` API
  *   - Backspace/Delete settings now applied directly on the VTE terminal widget before process spawn
  *   - `Automatic` mode uses VTE defaults (termios for Backspace, VT220 `\e[3~` for Delete)
  *   - `Backspace (^H)` sends ASCII `0x08`, `Delete (^?)` sends ASCII `0x7F` as expected
  *   - Fixes Delete key showing `3~` escape artifacts on servers that don't support VT220 sequences
  * - **Split View Panel Sizing** — Fixed left panel shrinking when splitting vertically then horizontally:
  *   - Use model's fractional position (0.0–1.0) instead of hardcoded `size / 2` for divider placement
  *   - Disable `shrink_start_child`/`shrink_end_child` to prevent panels from collapsing below minimum size
  *   - One-shot position initialization via `connect_map` prevents repeated resets on widget remap
  *   - Save user-dragged divider positions back to the model via `connect_notify_local("position")`
  *   - Each split now correctly divides the current panel in half without affecting other panels

-------------------------------------------------------------------
Wed Feb 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.1

- Update to version 0.8.1
  * - **Passbolt Secret Backend** — Passbolt password manager integration ([#6](https://github.com/totoshko88/RustConn/issues/6)):
  *   - `PassboltBackend` implementing `SecretBackend` trait via `go-passbolt-cli`
  *   - Store, retrieve, and delete credentials as Passbolt resources
  *   - CLI detection and version display in Settings → Secrets
  *   - Server configuration status check (configured/not configured/auth failed)
  *   - `PasswordSource::Passbolt` option in connection dialog password source dropdown
  *   - `SecretBackendType::Passbolt` option in settings backend selector
  *   - Credential resolution and rename support in `CredentialResolver`
  *   - Requires `passbolt configure` CLI setup before use
  * - **Unified Secret Backends** — Replaced individual `PasswordSource` variants (KeePass, Keyring, Bitwarden, OnePassword, Passbolt) with single `Vault` variant:
  *   - Connection dialog password source dropdown: Prompt, Vault, Variable, Inherit, None
  *   - Serde aliases preserve backward compatibility with existing configs
  *   - `PasswordSource` is now `Clone` only (no longer `Copy`) due to `Variable(String)`
  * - **Variable Password Source** — New `PasswordSource::Variable(String)` reads credentials from a named secret global variable:
  *   - Connection dialog shows variable dropdown when "Variable" is selected
  *   - Dropdown populated with secret global variables only
  * - **Variables Dialog Improvements** — Show/Hide and Load from Vault buttons for secret variables:
  *   - Toggle password visibility with `view-reveal-symbolic`/`view-conceal-symbolic` icon
  *   - Load secret value from vault with key `rustconn/var/{name}`
  *   - Secret variable values auto-saved to vault on dialog save, cleared from settings file
  * - **Secret Variable Vault Backend** — Fixed secret variables always using libsecret instead of configured backend:
  *   - Save/load secret variable values now respects Settings → Secrets backend (KeePassXC, libsecret)
  *   - Added `save_variable_to_vault()` and `load_variable_from_vault()` functions using settings snapshot
  *   - Toast notification on vault save/load failure with message to check Settings
  * - **Variable Dropdown Empty in Connection Dialog** — Fixed Variable dropdown showing "(Немає)" when editing connections:
  *   - `set_global_variables()` was never called when creating/editing connections
  *   - Added call to all three `ConnectionDialog` creation sites (new, edit, template)
  *   - Edit dialog: `set_global_variables()` called before `set_connection()` so variable selection works
  * - **Telnet Backspace/Delete Key Handling** — Fixed keyboard settings not working correctly for Telnet connections ([#5](https://github.com/totoshko88/RustConn/issues/5)):
  *   - Replaced `stty erase` shell wrapper approach with VTE native `EraseBinding` API
  *   - Backspace/Delete settings now applied directly on the VTE terminal widget before process spawn
  *   - `Automatic` mode uses VTE defaults (termios for Backspace, VT220 `\e[3~` for Delete)
  *   - `Backspace (^H)` sends ASCII `0x08`, `Delete (^?)` sends ASCII `0x7F` as expected
  *   - Fixes Delete key showing `3~` escape artifacts on servers that don't support VT220 sequences
  * - **Split View Panel Sizing** — Fixed left panel shrinking when splitting vertically then horizontally:
  *   - Use model's fractional position (0.0–1.0) instead of hardcoded `size / 2` for divider placement
  *   - Disable `shrink_start_child`/`shrink_end_child` to prevent panels from collapsing below minimum size
  *   - One-shot position initialization via `connect_map` prevents repeated resets on widget remap
  *   - Save user-dragged divider positions back to the model via `connect_notify_local("position")`
  *   - Each split now correctly divides the current panel in half without affecting other panels

-------------------------------------------------------------------
Tue Feb 10 2026 Anton Isaiev <totoshko88@gmail.com> - 0.8.0

- Update to version 0.8.0
  * - **Telnet Backspace/Delete Configuration** — Configurable keyboard behavior for Telnet connections ([#5](https://github.com/totoshko88/RustConn/issues/5)):
  *   - `TelnetBackspaceSends` and `TelnetDeleteSends` enums with Automatic/Backspace/Delete options
  *   - Connection dialog Keyboard group with two dropdowns for Backspace and Delete key behavior
  *   - `stty erase` shell wrapper in `spawn_telnet()` to apply key settings before connecting
  *   - Addresses common backspace/delete inversion issue reported by users
  * - **Flatpak Telnet Support** — GNU inetutils built as Flatpak module:
  *   - `telnet` binary available at `/app/bin/` in Flatpak sandbox
  *   - Built from inetutils 2.7 source with `--disable-servers` (client tools only)
  *   - Added to all three Flatpak manifests (flatpak, flatpak-local, flathub)
  * - **Dependencies** — Updated: `libc` 0.2.180→0.2.181, `tempfile` 3.24.0→3.25.0, `unicode-ident` 1.0.22→1.0.23
  * - **OBS Screenshot Display** — Updated `_service` revision from `v0.5.3` to current version tag for proper AppStream metadata processing on software.opensuse.org
  * - **Flatpak AWS CLI** — Replaced `awscliv2` pip package (Docker wrapper) with official AWS CLI v2 binary installer from `awscli.amazonaws.com`; `aws --version` now shows real AWS CLI instead of Docker error
  * - **Flatpak Component Detection** — Fixed SSM Plugin, Azure CLI, and OCI CLI showing as "Not installed" after installation:
  *   - Added explicit search paths for SSM Plugin (`usr/local/sessionmanagerplugin/bin`) and AWS CLI (`v2/current/bin`)
  *   - Increased recursive binary search depth from 3 to 5/6 levels
  * - **Flatpak Python Version** — Wrapper scripts for pip-installed CLIs (Azure CLI, OCI CLI) now dynamically detect Python version instead of hardcoding `python3.13`

-------------------------------------------------------------------
Mon Feb 09 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.9

- Update to version 0.7.9
  * - **Telnet Protocol Support** — Full Telnet protocol implementation across all crates ([#5](https://github.com/totoshko88/RustConn/issues/5)):
  *   - Core model: `TelnetConfig`, `ProtocolType::Telnet`, `ProtocolConfig::Telnet` with configurable host, port (default 23), and extra arguments
  *   - Protocol trait implementation with external `telnet` client
  *   - Import support: Remmina, Asbru, MobaXterm, RDM importers recognize Telnet connections
  *   - Export support: Remmina, Asbru, MobaXterm exporters write Telnet connections
  *   - CLI: `rustconn-cli telnet` subcommand with `--host`, `--port`, `--extra-args` options
  *   - GUI: Connection dialog with Telnet-specific configuration tab
  *   - Template dialog: Telnet protocol option with default port 23
  *   - Sidebar: Telnet filter button with `network-wired-symbolic` icon
  *   - Terminal: `spawn_telnet()` method for launching telnet sessions
  *   - Quick Connect: Telnet protocol option in quick connect bar
  *   - Cluster dialog: Telnet connections selectable for cluster membership
  *   - Property tests: All existing property tests updated with Telnet coverage
  * - **Sidebar Icon Missing** — Added missing `"telnet"` mapping in sidebar `get_protocol_icon()` function; Telnet connections now display the correct icon in the connection tree
  * - **Telnet Icon Mismatch** — Changed Telnet protocol icon from `network-wired-symbolic` to `call-start-symbolic` across all views (sidebar, filter buttons, dialogs, templates); the previous icon resembled a shield in breeze-dark theme, which was misleading for an insecure protocol
  * - **ZeroTrust Sidebar Icon** — Unified ZeroTrust sidebar icon to `folder-remote-symbolic` for all providers; previously showed provider-specific icons that were inconsistent with the filter button icon

-------------------------------------------------------------------
Mon Feb 09 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.9

- Update to version 0.7.9
  * - **Telnet Protocol Support** — Full Telnet protocol implementation across all crates ([#5](https://github.com/totoshko88/RustConn/issues/5)):
  *   - Core model: `TelnetConfig`, `ProtocolType::Telnet`, `ProtocolConfig::Telnet` with configurable host, port (default 23), and extra arguments
  *   - Protocol trait implementation with external `telnet` client
  *   - Import support: Remmina, Asbru, MobaXterm, RDM importers recognize Telnet connections
  *   - Export support: Remmina, Asbru, MobaXterm exporters write Telnet connections
  *   - CLI: `rustconn-cli telnet` subcommand with `--host`, `--port`, `--extra-args` options
  *   - GUI: Connection dialog with Telnet-specific configuration tab
  *   - Template dialog: Telnet protocol option with default port 23
  *   - Sidebar: Telnet filter button with `network-wired-symbolic` icon
  *   - Terminal: `spawn_telnet()` method for launching telnet sessions
  *   - Quick Connect: Telnet protocol option in quick connect bar
  *   - Cluster dialog: Telnet connections selectable for cluster membership
  *   - Property tests: All existing property tests updated with Telnet coverage
  * - **Sidebar Icon Missing** — Added missing `"telnet"` mapping in sidebar `get_protocol_icon()` function; Telnet connections now display the correct icon in the connection tree
  * - **Telnet Icon Mismatch** — Changed Telnet protocol icon from `network-wired-symbolic` to `call-start-symbolic` across all views (sidebar, filter buttons, dialogs, templates); the previous icon resembled a shield in breeze-dark theme, which was misleading for an insecure protocol
  * - **ZeroTrust Sidebar Icon** — Unified ZeroTrust sidebar icon to `folder-remote-symbolic` for all providers; previously showed provider-specific icons that were inconsistent with the filter button icon

-------------------------------------------------------------------
Mon Feb 09 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.9

- Update to version 0.7.9
  * - **Telnet Protocol Support** — Full Telnet protocol implementation across all crates ([#5](https://github.com/totoshko88/RustConn/issues/5)):
  *   - Core model: `TelnetConfig`, `ProtocolType::Telnet`, `ProtocolConfig::Telnet` with configurable host, port (default 23), and extra arguments
  *   - Protocol trait implementation with external `telnet` client
  *   - Import support: Remmina, Asbru, MobaXterm, RDM importers recognize Telnet connections
  *   - Export support: Remmina, Asbru, MobaXterm exporters write Telnet connections
  *   - CLI: `rustconn-cli telnet` subcommand with `--host`, `--port`, `--extra-args` options
  *   - GUI: Connection dialog with Telnet-specific configuration tab
  *   - Template dialog: Telnet protocol option with default port 23
  *   - Sidebar: Telnet filter button with `network-wired-symbolic` icon
  *   - Terminal: `spawn_telnet()` method for launching telnet sessions
  *   - Quick Connect: Telnet protocol option in quick connect bar
  *   - Cluster dialog: Telnet connections selectable for cluster membership
  *   - Property tests: All existing property tests updated with Telnet coverage
  * - **Sidebar Icon Missing** — Added missing `"telnet"` mapping in sidebar `get_protocol_icon()` function; Telnet connections now display the correct icon in the connection tree

-------------------------------------------------------------------
Sun Feb 08 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.8

- Update to version 0.7.8
  * - **Remmina Password Import** — Importing from Remmina now automatically transfers saved passwords into the configured secret backend (libsecret, KeePassXC, etc.); connections are marked with `PasswordSource::Keyring` so credentials resolve seamlessly on first connect
  * - **Import Error Swallowing** — Replaced 14 `.unwrap_or_default()` calls in import dialog with proper error propagation; import failures now display user-friendly messages instead of silently returning empty results
  * - **MobaXterm Import Double Allocation** — Removed unnecessary `.clone()` on byte buffer during UTF-8 conversion; recovers original bytes from error on fallback path instead of cloning upfront
  * - **Import File Size Guard** — Added 50 MB file size limit check in `read_import_file()` to prevent OOM on accidentally selected large files
  * - **Native Export Streaming I/O** — `NativeExport::to_file()` now uses `BufWriter` with `serde_json::to_writer_pretty()` instead of serializing entire JSON to `String` first; eliminates intermediate allocation
  * - **Native Import Streaming I/O** — `NativeExport::from_file()` now uses `BufReader` with `serde_json::from_reader()` instead of reading entire file to `String`; reduces peak memory by ~50%
  * - **Native Import Version Pre-Check** — Version validation now runs before full deserialization; rejects unsupported format versions without parsing all connections and groups
  * - **Export File Writing** — Added centralized `write_export_file()` helper with `BufWriter` for consistent buffered writes across all exporters
  * - **Export Write Consolidation** — Replaced duplicated `fs::write` + error mapping boilerplate in SSH config, Ansible, Remmina, Asbru, Royal TS, and MobaXterm exporters with shared `write_export_file()` helper
  * - **TOCTOU Elimination** — Removed redundant `path.exists()` checks before file reads in importers; the subsequent `read_import_file()` already returns `ImportError` on failure
  * - **Unused Imports Cleanup** — Removed unused `ExportError` import from Asbru exporter and moved `std::fs` import to `#[cfg(test)]` in MobaXterm exporter
  * - Updated `memchr` 2.7.6 → 2.8.0
  * - Updated `ryu` 1.0.22 → 1.0.23
  * - Updated `zerocopy` 0.8.38 → 0.8.39
  * - Updated `zmij` 1.0.19 → 1.0.20

-------------------------------------------------------------------
Sun Feb 08 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.7

- Update to version 0.7.7
  * - **Keyboard Shortcuts** — `Delete`, `Ctrl+E`, and `Ctrl+D` no longer intercept input when VTE terminal or embedded viewers have focus; these shortcuts now only activate from the sidebar ([#4](https://github.com/totoshko88/RustConn/issues/4))
  * - **Thread Safety** — Audio mutex locks use graceful fallback instead of `unwrap()`, preventing potential panics in real-time audio callbacks
  * - **Thread Safety** — Search engine mutex locks use graceful recovery patterns throughout `DebouncedSearchEngine`
  * - **Security** — VNC client logs a warning when connection is attempted without a password
  * - **Runtime Consolidation** — Replaced 23 redundant `tokio::runtime::Runtime::new()` calls across GUI code with shared `with_runtime()` pattern, reducing resource overhead
  * - **Collection Optimization** — Snippet tag collection uses `flat_map` with `iter().cloned()` instead of `clone()`, and `sort_unstable()` for better performance
  * - **Dead Code Removal** — Removed 3 deprecated blocking credential methods from `AppState` (`store_credentials`, `retrieve_credentials`, `delete_credentials`)
  * - **Dead Code Removal** — Removed unused `build_pane_context_menu` from `MainWindow`

-------------------------------------------------------------------
Sat Feb 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.6

- Update to version 0.7.6
  * - **Flatpak Components Manager** — On-demand CLI download for Flatpak environment:
  *   - Menu → Flatpak Components... (visible only in Flatpak)
  *   - Download and install CLIs to `~/.var/app/io.github.totoshko88.RustConn/cli/`
  *   - Supports: AWS CLI, AWS SSM Plugin, Google Cloud CLI, Azure CLI, OCI CLI, Teleport, Tailscale, Cloudflare Tunnel, Boundary, Bitwarden CLI, 1Password CLI, TigerVNC
  *   - Python-based CLIs installed via pip, .deb packages extracted automatically
  *   - Install/Remove/Update with progress indicators and cancel support
  *   - SHA256 checksum verification (except AWS SSM Plugin which uses "latest" URL)
  *   - Settings → Clients detects CLIs installed via Flatpak Components
  * - **Snap Strict Confinement** — Migrated from classic to strict confinement:
  *   - Snap-aware path resolution for data, config, and SSH directories
  *   - Interface connection detection with user-friendly messages
  *   - Uses embedded clients (IronRDP, vnc-rs, spice-gtk) — no bundled external CLIs
  *   - External CLIs accessed from host via `system-files` interface
  * - **Flatpak Permissions** — Simplified security model:
  *   - Removed `--talk-name=org.freedesktop.Flatpak` (no host command access)
  *   - SSH available in runtime, embedded clients for RDP/VNC/SPICE
  *   - Use Flatpak Components dialog to install additional CLIs
  * - **Snap Package** — Strict confinement with host CLI access:
  *   - Added plugs for ssh-keys, personal-files, system-files
  *   - Data stored in `~/snap/rustconn/current/`
  *   - Smaller package (~50 MB) using host-installed binaries
  * - **Settings → Clients** — Improved client detection display:
  *   - All protocols (SSH, RDP, VNC, SPICE) show embedded client status
  *   - Blue indicator (●) for embedded clients, green (✓) for external
  *   - Fixed AWS SSM Plugin detection (was looking for wrong binary name)
  * - **UI/UX** — GNOME HIG compliance:
  *   - Accessible labels for status icons and protocol filter buttons
  *   - Sidebar minimum width increased to 200px
  *   - Connection dialog uses adaptive `adw::ViewSwitcherTitle`
  *   - Toast notifications with proper priority levels
  * - **Thread Safety** — Mutex poisoning recovery in FreeRDP thread
  * - **RDP Variable Substitution** — Global variables now resolve in username/domain fields
  * - **Dialog Widget Builders** — Reusable UI components (`CheckboxRowBuilder`, `EntryRowBuilder`, `SpinRowBuilder`, `DropdownRowBuilder`, `SwitchRowBuilder`)
  * - **Protocol Dialogs** — Applied widget builders to SSH, RDP, VNC, SPICE panels
  * - **Legacy Cleanup** — Removed unused `TabDisplayMode`, `TabLabelWidgets` types
  * - **New**: `docs/SNAP.md` — Snap user guide with interface setup
  * - **Updated**: `docs/INSTALL.md`, `docs/USER_GUIDE.md`

-------------------------------------------------------------------
Sat Feb 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.6

- Update to version 0.7.6
  * - **Flatpak Components Manager** — On-demand CLI download for Flatpak environment:
  *   - Menu → Flatpak Components... (visible only in Flatpak)
  *   - Download and install CLIs to `~/.var/app/io.github.totoshko88.RustConn/cli/`
  *   - Supports: AWS CLI, AWS SSM Plugin, Google Cloud CLI, Azure CLI, OCI CLI, Teleport, Tailscale, Cloudflare Tunnel, Boundary, Bitwarden CLI, 1Password CLI, TigerVNC
  *   - Python-based CLIs installed via pip, .deb packages extracted automatically
  *   - Install/Remove/Update with progress indicators and cancel support
  *   - SHA256 checksum verification (except AWS SSM Plugin which uses "latest" URL)
  *   - Settings → Clients detects CLIs installed via Flatpak Components
  * - **Snap Strict Confinement** — Migrated from classic to strict confinement:
  *   - Snap-aware path resolution for data, config, and SSH directories
  *   - Interface connection detection with user-friendly messages
  *   - Uses embedded clients (IronRDP, vnc-rs, spice-gtk) — no bundled external CLIs
  *   - External CLIs accessed from host via `system-files` interface
  * - **Flatpak Permissions** — Simplified security model:
  *   - Removed `--talk-name=org.freedesktop.Flatpak` (no host command access)
  *   - SSH available in runtime, embedded clients for RDP/VNC/SPICE
  *   - Use Flatpak Components dialog to install additional CLIs
  * - **Snap Package** — Strict confinement with host CLI access:
  *   - Added plugs for ssh-keys, personal-files, system-files
  *   - Data stored in `~/snap/rustconn/current/`
  *   - Smaller package (~50 MB) using host-installed binaries
  * - **Settings → Clients** — Improved client detection display:
  *   - All protocols (SSH, RDP, VNC, SPICE) show embedded client status
  *   - Blue indicator (●) for embedded clients, green (✓) for external
  *   - Fixed AWS SSM Plugin detection (was looking for wrong binary name)
  * - **UI/UX** — GNOME HIG compliance:
  *   - Accessible labels for status icons and protocol filter buttons
  *   - Sidebar minimum width increased to 200px
  *   - Connection dialog uses adaptive `adw::ViewSwitcherTitle`
  *   - Toast notifications with proper priority levels
  * - **Thread Safety** — Mutex poisoning recovery in FreeRDP thread
  * - **RDP Variable Substitution** — Global variables now resolve in username/domain fields
  * - **Dialog Widget Builders** — Reusable UI components (`CheckboxRowBuilder`, `EntryRowBuilder`, `SpinRowBuilder`, `DropdownRowBuilder`, `SwitchRowBuilder`)
  * - **Protocol Dialogs** — Applied widget builders to SSH, RDP, VNC, SPICE panels
  * - **Legacy Cleanup** — Removed unused `TabDisplayMode`, `TabLabelWidgets` types
  * - **New**: `docs/SNAP.md` — Snap user guide with interface setup
  * - **Updated**: `docs/INSTALL.md`, `docs/USER_GUIDE.md`

-------------------------------------------------------------------
Sat Feb 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.6

- Update to version 0.7.6
  * - **Flatpak Components Manager** — On-demand CLI download for Flatpak environment:
  *   - Menu → Flatpak Components... (visible only in Flatpak)
  *   - Download and install CLIs to `~/.var/app/io.github.totoshko88.RustConn/cli/`
  *   - Supports: AWS CLI, AWS SSM Plugin, Google Cloud CLI, Azure CLI, OCI CLI, Teleport, Tailscale, Cloudflare Tunnel, Boundary, Bitwarden CLI, 1Password CLI, TigerVNC
  *   - Python-based CLIs installed via pip, .deb packages extracted automatically
  *   - Install/Remove/Update with progress indicators and cancel support
  *   - SHA256 checksum verification (except AWS SSM Plugin which uses "latest" URL)
  *   - Settings → Clients detects CLIs installed via Flatpak Components
  * - **Snap Strict Confinement** — Migrated from classic to strict confinement:
  *   - Snap-aware path resolution for data, config, and SSH directories
  *   - Interface connection detection with user-friendly messages
  *   - Uses embedded clients (IronRDP, vnc-rs, spice-gtk) — no bundled external CLIs
  *   - External CLIs accessed from host via `system-files` interface
  * - **Flatpak Permissions** — Simplified security model:
  *   - Removed `--talk-name=org.freedesktop.Flatpak` (no host command access)
  *   - SSH available in runtime, embedded clients for RDP/VNC/SPICE
  *   - Use Flatpak Components dialog to install additional CLIs
  * - **Snap Package** — Strict confinement with host CLI access:
  *   - Added plugs for ssh-keys, personal-files, system-files
  *   - Data stored in `~/snap/rustconn/current/`
  *   - Smaller package (~50 MB) using host-installed binaries
  * - **Settings → Clients** — Improved client detection display:
  *   - All protocols (SSH, RDP, VNC, SPICE) show embedded client status
  *   - Blue indicator (●) for embedded clients, green (✓) for external
  *   - Fixed AWS SSM Plugin detection (was looking for wrong binary name)
  * - **UI/UX** — GNOME HIG compliance:
  *   - Accessible labels for status icons and protocol filter buttons
  *   - Sidebar minimum width increased to 200px
  *   - Connection dialog uses adaptive `adw::ViewSwitcherTitle`
  *   - Toast notifications with proper priority levels
  * - **Thread Safety** — Mutex poisoning recovery in FreeRDP thread
  * - **RDP Variable Substitution** — Global variables now resolve in username/domain fields
  * - **Dialog Widget Builders** — Reusable UI components (`CheckboxRowBuilder`, `EntryRowBuilder`, `SpinRowBuilder`, `DropdownRowBuilder`, `SwitchRowBuilder`)
  * - **Protocol Dialogs** — Applied widget builders to SSH, RDP, VNC, SPICE panels
  * - **Legacy Cleanup** — Removed unused `TabDisplayMode`, `TabLabelWidgets` types
  * - **New**: `docs/SNAP.md` — Snap user guide with interface setup
  * - **Updated**: `docs/INSTALL.md`, `docs/USER_GUIDE.md`

-------------------------------------------------------------------
Sat Feb 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.6

- Update to version 0.7.6
  * - **Flatpak Components Manager** — On-demand CLI download for Flatpak environment:
  *   - Menu → Flatpak Components... (visible only in Flatpak)
  *   - Download and install CLIs to `~/.var/app/io.github.totoshko88.RustConn/cli/`
  *   - Supports: AWS CLI, AWS SSM Plugin, Google Cloud CLI, Azure CLI, OCI CLI, Teleport, Tailscale, Cloudflare Tunnel, Boundary, Bitwarden CLI, 1Password CLI, TigerVNC
  *   - Python-based CLIs installed via pip, .deb packages extracted automatically
  *   - Install/Remove/Update with progress indicators and cancel support
  *   - SHA256 checksum verification (except AWS SSM Plugin which uses "latest" URL)
  *   - Settings → Clients detects CLIs installed via Flatpak Components
  * - **Snap Strict Confinement** — Migrated from classic to strict confinement:
  *   - Snap-aware path resolution for data, config, and SSH directories
  *   - Interface connection detection with user-friendly messages
  *   - Uses embedded clients (IronRDP, vnc-rs, spice-gtk) — no bundled external CLIs
  *   - External CLIs accessed from host via `system-files` interface
  * - **Flatpak Permissions** — Simplified security model:
  *   - Removed `--talk-name=org.freedesktop.Flatpak` (no host command access)
  *   - SSH available in runtime, embedded clients for RDP/VNC/SPICE
  *   - Use Flatpak Components dialog to install additional CLIs
  * - **Snap Package** — Strict confinement with host CLI access:
  *   - Added plugs for ssh-keys, personal-files, system-files
  *   - Data stored in `~/snap/rustconn/current/`
  *   - Smaller package (~50 MB) using host-installed binaries
  * - **Settings → Clients** — Improved client detection display:
  *   - All protocols (SSH, RDP, VNC, SPICE) show embedded client status
  *   - Blue indicator (●) for embedded clients, green (✓) for external
  *   - Fixed AWS SSM Plugin detection (was looking for wrong binary name)
  * - **UI/UX** — GNOME HIG compliance:
  *   - Accessible labels for status icons and protocol filter buttons
  *   - Sidebar minimum width increased to 200px
  *   - Connection dialog uses adaptive `adw::ViewSwitcherTitle`
  *   - Toast notifications with proper priority levels
  * - **Thread Safety** — Mutex poisoning recovery in FreeRDP thread
  * - **RDP Variable Substitution** — Global variables now resolve in username/domain fields
  * - **Dialog Widget Builders** — Reusable UI components (`CheckboxRowBuilder`, `EntryRowBuilder`, `SpinRowBuilder`, `DropdownRowBuilder`, `SwitchRowBuilder`)
  * - **Protocol Dialogs** — Applied widget builders to SSH, RDP, VNC, SPICE panels
  * - **Legacy Cleanup** — Removed unused `TabDisplayMode`, `TabLabelWidgets` types
  * - **New**: `docs/SNAP.md` — Snap user guide with interface setup
  * - **Updated**: `docs/INSTALL.md`, `docs/USER_GUIDE.md`

-------------------------------------------------------------------
Sat Feb 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.6

- Update to version 0.7.6
  * - **Flatpak Components Manager** — On-demand CLI download for Flatpak environment:
  *   - Menu → Flatpak Components... (visible only in Flatpak)
  *   - Download and install CLIs to `~/.var/app/io.github.totoshko88.RustConn/cli/`
  *   - Supports: AWS CLI, AWS SSM Plugin, Google Cloud CLI, Azure CLI, OCI CLI, Teleport, Tailscale, Cloudflare Tunnel, Boundary, Bitwarden CLI, 1Password CLI, TigerVNC
  *   - Python-based CLIs installed via pip, .deb packages extracted automatically
  *   - Install/Remove/Update with progress indicators and cancel support
  *   - SHA256 checksum verification (except AWS SSM Plugin which uses "latest" URL)
  *   - Settings → Clients detects CLIs installed via Flatpak Components
  * - **Snap Strict Confinement** — Migrated from classic to strict confinement:
  *   - Snap-aware path resolution for data, config, and SSH directories
  *   - Interface connection detection with user-friendly messages
  *   - Uses embedded clients (IronRDP, vnc-rs, spice-gtk) — no bundled external CLIs
  *   - External CLIs accessed from host via `system-files` interface
  * - **Flatpak Permissions** — Simplified security model:
  *   - Removed `--talk-name=org.freedesktop.Flatpak` (no host command access)
  *   - SSH available in runtime, embedded clients for RDP/VNC/SPICE
  *   - Use Flatpak Components dialog to install additional CLIs
  * - **Snap Package** — Strict confinement with host CLI access:
  *   - Added plugs for ssh-keys, personal-files, system-files
  *   - Data stored in `~/snap/rustconn/current/`
  *   - Smaller package (~50 MB) using host-installed binaries
  * - **Settings → Clients** — Improved client detection display:
  *   - All protocols (SSH, RDP, VNC, SPICE) show embedded client status
  *   - Blue indicator (●) for embedded clients, green (✓) for external
  *   - Fixed AWS SSM Plugin detection (was looking for wrong binary name)
  * - **UI/UX** — GNOME HIG compliance:
  *   - Accessible labels for status icons and protocol filter buttons
  *   - Sidebar minimum width increased to 200px
  *   - Connection dialog uses adaptive `adw::ViewSwitcherTitle`
  *   - Toast notifications with proper priority levels
  * - **Thread Safety** — Mutex poisoning recovery in FreeRDP thread
  * - **RDP Variable Substitution** — Global variables now resolve in username/domain fields
  * - **Dialog Widget Builders** — Reusable UI components (`CheckboxRowBuilder`, `EntryRowBuilder`, `SpinRowBuilder`, `DropdownRowBuilder`, `SwitchRowBuilder`)
  * - **Protocol Dialogs** — Applied widget builders to SSH, RDP, VNC, SPICE panels
  * - **Legacy Cleanup** — Removed unused `TabDisplayMode`, `TabLabelWidgets` types
  * - **New**: `docs/SNAP.md` — Snap user guide with interface setup
  * - **Updated**: `docs/INSTALL.md`, `docs/USER_GUIDE.md`

-------------------------------------------------------------------
Thu Feb 05 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.5

- Update to version 0.7.5

-------------------------------------------------------------------
Thu Feb 05 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.4

- Update to version 0.7.4
  * - **Split View Protocol Restriction** - Split view is now disabled for RDP, VNC, and SPICE tabs:
  *   - Only SSH, Local Shell, and ZeroTrust tabs support split view
  *   - Attempting to split an embedded protocol tab shows a toast notification
  *   - Prevents UI issues with embedded widgets that cannot be reparented
  * - **Split View Tab Close Cleanup** - Closing a tab now properly clears its panel in split view:
  *   - Panel shows "Empty Panel" placeholder with "Select Tab" button after tab is closed
  *   - Works for both per-session split bridges and global split view
  *   - Added `on_split_cleanup` callback to `TerminalNotebook` for proper cleanup coordination
  *   - Fixes issue where terminal content remained visible after closing tab
  * - **Document Close Dialog** - Fixed potential panic when closing document without parent window:
  *   - `CloseDocumentDialog::present()` now gracefully handles missing parent window
  *   - Logs error and calls callback with `None` instead of panicking
  * - **Zero Trust Entry Field Alignment** - Fixed inconsistent width of input fields in Zero Trust provider panels:
  *   - Converted all Zero Trust provider fields from `ActionRow` + `Entry` to `adw::EntryRow`
  *   - All 10 provider panels (AWS SSM, GCP IAP, Azure Bastion, Azure SSH, OCI Bastion, Cloudflare, Teleport, Tailscale, Boundary, Generic) now have consistent field widths
  *   - Follows GNOME HIG guidelines for proper libadwaita input field usage
  * - **Import File I/O** - Extracted common file reading pattern into `read_import_file()` helper:
  *   - Reduces code duplication across 5 import sources (SSH config, Ansible, Remmina, Asbru, Royal TS)
  *   - Consistent error handling with `ImportError::ParseError`
  *   - Added async variant `read_import_file_async()` for future use
  * - **Protocol Client Errors** - Consolidated duplicate error types into unified `EmbeddedClientError`:
  *   - Merged `RdpClientError`, `VncClientError`, `SpiceClientError` (~60 lines reduced)
  *   - Type aliases maintain backward compatibility
  *   - Common variants: `ConnectionFailed`, `AuthenticationFailed`, `ProtocolError`, `IoError`, `Timeout`
  * - **Config Atomic Writes** - Improved reliability of configuration file saves:
  *   - Now uses temp file + atomic rename pattern
  *   - Prevents config corruption on crash during write
  *   - Applied to `save_toml_file_async()` in `ConfigManager`
  * - **Connection Dialog Modularization** - Refactored monolithic `connection.rs` into modular structure:
  *   - Created `rustconn/src/dialogs/connection/` directory with protocol-specific modules
  *   - `dialog.rs` - Main `ConnectionDialog` implementation (~6,600 lines)
  *   - `ssh.rs` - SSH options panel (~460 lines, prepared for future integration)
  *   - `rdp.rs` - RDP options panel (~414 lines, prepared for future integration)
  *   - `vnc.rs` - VNC options panel (~249 lines, prepared for future integration)
  *   - `spice.rs` - SPICE options panel (~240 lines, reuses rdp:: folder functions)
  *   - Improves code organization and maintainability
  * - **GTK Lifecycle Documentation** - Added module-level documentation explaining `#[allow(dead_code)]` pattern:
  *   - Documents why GTK widget fields must be kept alive for signal handlers
  *   - Prevents accidental removal of "unused" fields that would cause segfaults
  * - **Type Alias Documentation** - Added documentation explaining why `Rc` is used instead of `Arc`:
  *   - GTK4 is single-threaded, so atomic operations are unnecessary overhead
  *   - `Rc<RefCell<_>>` pattern matches GTK's single-threaded model
  *   - Documented in `window_types.rs` module header
  * - **Code Quality** - Comprehensive cleanup based on code audit:
  *   - Removed legacy `TabDisplayMode`, `SessionWidgetStorage`, `TabLabelWidgets` types
  *   - Standardized error type patterns with `#[from]` attribute
  *   - Reduced unnecessary `.clone()` calls in callback chains
  *   - Improved `expect()` messages to clarify provably impossible states
  *   - Added `# Panics` documentation for functions with justified `expect()` calls
  * - **Dependencies** - Updated: clap 4.5.56→4.5.57, criterion 0.8.1→0.8.2, hybrid-array 0.4.6→0.4.7, zerocopy 0.8.37→0.8.38
  * - Updated property tests for consolidated error types
  * - Verified all changes pass `cargo clippy --all-targets` and `cargo fmt --check`

-------------------------------------------------------------------
Tue Feb 03 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.3

- Update to version 0.7.3

-------------------------------------------------------------------
Mon Feb 02 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.2

- Update to version 0.7.2
  * - **Flatpak Host Command Support** - New `flatpak` module for running host commands from sandbox:
  *   - `is_flatpak()` - Detects if running inside Flatpak sandbox
  *   - `host_command()` - Creates command that runs on host via `flatpak-spawn --host`
  *   - `host_has_command()`, `host_which()` - Check for host binaries
  *   - `host_exec()`, `host_spawn()` - Execute/spawn host commands
  *   - Enables external clients (xfreerdp, vncviewer, aws, gcloud) to work in Flatpak
  * - **Dependencies** - Updated: hyper-util 0.1.19→0.1.20, system-configuration 0.6.1→0.7.0, zmij 1.0.18→1.0.19
  * - **Flatpak Permissions** - Extended sandbox permissions for full functionality:
  *   - `xdg-config/rustconn:create` - Config directory access
  *   - `org.freedesktop.Flatpak` - Host command execution (xfreerdp, vncviewer, aws, etc.)
  *   - `org.freedesktop.secrets` - GNOME Keyring access
  *   - `org.kde.kwalletd5/6` - KWallet access
  *   - `org.keepassxc.KeePassXC.BrowserServer` - KeePassXC proxy
  *   - `org.kde.StatusNotifierWatcher` - System tray support
  * - **Flatpak Config Access** - Added `xdg-config/rustconn:create` permission to Flatpak manifests:
  *   - Connections, groups, snippets, and settings now persist correctly in Flatpak sandbox
  *   - Previously, Flatpak sandbox blocked access to `~/.config/rustconn`
  * - **Split View Equal Proportions** - Fixed split panels having unequal sizes:
  *   - Changed from timeout-based to `connect_map` + `idle_add` for reliable size detection
  *   - Panels now correctly split 50/50 regardless of timing or rendering delays
  *   - Added `shrink_start_child` and `shrink_end_child` for balanced resizing

-------------------------------------------------------------------
Sun Feb 01 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.1

- Update to version 0.7.1
  * - **Undo/Trash Functionality** - Safely recover deleted items (COMP-FUNC-01):
  *   - Deleted items are moved to Trash and can be restored via "Undo" notification
  *   - Implemented persisted Trash storage for recovery across sessions
  * - **Group Inheritance** - Simplify connection configuration (COMP-FUNC-03):
  *   - Added ability to inherit Username and Domain from parent Group
  *   - "Load from Group" buttons auto-fill credential fields from group settings
  * - **Dependencies** - Updated: bytemuck 1.24.0→1.25.0, portable-atomic 1.13.0→1.13.1, slab 0.4.11→0.4.12, zerocopy 0.8.36→0.8.37, zerocopy-derive 0.8.36→0.8.37, zmij 1.0.17→1.0.18
  * - **Persistence Optimization** - Implemented debounced persistence for connections and groups (TECH-02):
  *   - Changes are now batched and saved after 2 seconds of inactivity
  *   - Reduces disk I/O during rapid modifications (e.g., drag-and-drop reordering)
  *   - Added `flush_persistence` to ensure data safety on application exit
  * - **Sort Optimization** - Improved rendering performance (COMP-FUNC-02):
  *   - Sorting is now skipped when data order hasn't changed, reducing CPU usage
  *   - Optimized `sort_all` calls during UI updates
  * - **Connection History Sorting** - History entries now sorted by date descending (newest first)
  * - **Credential Inheritance from Groups** - Fixed password inheritance not working for connections:
  *   - Connections with `password_source=Inherit` now correctly resolve credentials from parent group's KeePass entry
  *   - Added direct KeePass lookup for group credentials in `resolve_credentials_blocking`
  * - **GTK Widget Parenting** - Fixed `gtk_widget_set_parent` assertion failure in split view:
  *   - `set_panel_content` now checks if widget has parent before calling `unparent()`
  * - **Connection History Reconnect** - Fixed reconnecting from Connection History not opening tab:
  *   - History reconnect now uses `start_connection_with_credential_resolution` for proper credential handling
  *   - Previously showed warning about missing credentials for RDP connections
  * - **Blocking I/O** - Fixed UI freezing during save operations by moving persistence to background tasks (Async Persistence):
  *   - Added global Tokio runtime to main application
  *   - Implemented async save methods in `ConfigManager`
  *   - `ConnectionManager` now saves connections and groups in non-blocking background tasks
  * - **Code Quality** - Comprehensive code cleanup and optimization:
  *   - Fixed `future_not_send` issues in async persistence layer
  *   - Resolved type complexity warnings in `ConnectionManager`
  *   - Removed dead code and unused imports across sidebar modules
  *   - Enforced `clippy` pedantic checks for better robustness
  * - **Sidebar Module** - Decomposed monolithic `sidebar.rs` into focused submodules (TECH-03):
  *   - `search.rs`: Encapsulated search logic, predicates, and history management
  *   - `filter.rs`: centralized protocol filter button creation and state management
  *   - `view.rs`: Isolated UI list item creation, binding, and signal handling
  *   - `drag_drop.rs`: Prepared structure for drag-and-drop logic separation
  *   - Improved compile times and navigation by splitting 2300+ line file
  * - **Drag and Drop Refactoring** - Replaced string-based payloads with strongly typed `DragPayload` enum (TECH-04):
  *   - Uses `serde_json` for robust serialization instead of manual string parsing
  *   - Centralized drag logic in `drag_drop.rs`
  *   - Improved type safety for drag-and-drop operations
  * - **Search Highlighting** - Added visual feedback for search matches (TECH-05):
  *   - Matched text substrings are now highlighted in bold
  *   - Implemented case-insensitive fuzzier matching with Pango markup
  *   - Improved `Regex`-based search logic

-------------------------------------------------------------------
Sun Feb 01 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.1

- Update to version 0.7.1
  * - **Undo/Trash Functionality** - Safely recover deleted items (COMP-FUNC-01):
  *   - Deleted items are moved to Trash and can be restored via "Undo" notification
  *   - Implemented persisted Trash storage for recovery across sessions
  * - **Group Inheritance** - Simplify connection configuration (COMP-FUNC-03):
  *   - Added ability to inherit Username and Domain from parent Group
  *   - "Load from Group" buttons auto-fill credential fields from group settings
  * - **Dependencies** - Updated: bytemuck 1.24.0→1.25.0, portable-atomic 1.13.0→1.13.1, slab 0.4.11→0.4.12, zerocopy 0.8.36→0.8.37, zerocopy-derive 0.8.36→0.8.37, zmij 1.0.17→1.0.18
  * - **Persistence Optimization** - Implemented debounced persistence for connections and groups (TECH-02):
  *   - Changes are now batched and saved after 2 seconds of inactivity
  *   - Reduces disk I/O during rapid modifications (e.g., drag-and-drop reordering)
  *   - Added `flush_persistence` to ensure data safety on application exit
  * - **Sort Optimization** - Improved rendering performance (COMP-FUNC-02):
  *   - Sorting is now skipped when data order hasn't changed, reducing CPU usage
  *   - Optimized `sort_all` calls during UI updates
  * - **Connection History Sorting** - History entries now sorted by date descending (newest first)
  * - **Credential Inheritance from Groups** - Fixed password inheritance not working for connections:
  *   - Connections with `password_source=Inherit` now correctly resolve credentials from parent group's KeePass entry
  *   - Added direct KeePass lookup for group credentials in `resolve_credentials_blocking`
  * - **GTK Widget Parenting** - Fixed `gtk_widget_set_parent` assertion failure in split view:
  *   - `set_panel_content` now checks if widget has parent before calling `unparent()`
  * - **Connection History Reconnect** - Fixed reconnecting from Connection History not opening tab:
  *   - History reconnect now uses `start_connection_with_credential_resolution` for proper credential handling
  *   - Previously showed warning about missing credentials for RDP connections
  * - **Blocking I/O** - Fixed UI freezing during save operations by moving persistence to background tasks (Async Persistence):
  *   - Added global Tokio runtime to main application
  *   - Implemented async save methods in `ConfigManager`
  *   - `ConnectionManager` now saves connections and groups in non-blocking background tasks
  * - **Code Quality** - Comprehensive code cleanup and optimization:
  *   - Fixed `future_not_send` issues in async persistence layer
  *   - Resolved type complexity warnings in `ConnectionManager`
  *   - Removed dead code and unused imports across sidebar modules
  *   - Enforced `clippy` pedantic checks for better robustness
  * - **Sidebar Module** - Decomposed monolithic `sidebar.rs` into focused submodules (TECH-03):
  *   - `search.rs`: Encapsulated search logic, predicates, and history management
  *   - `filter.rs`: centralized protocol filter button creation and state management
  *   - `view.rs`: Isolated UI list item creation, binding, and signal handling
  *   - `drag_drop.rs`: Prepared structure for drag-and-drop logic separation
  *   - Improved compile times and navigation by splitting 2300+ line file
  * - **Drag and Drop Refactoring** - Replaced string-based payloads with strongly typed `DragPayload` enum (TECH-04):
  *   - Uses `serde_json` for robust serialization instead of manual string parsing
  *   - Centralized drag logic in `drag_drop.rs`
  *   - Improved type safety for drag-and-drop operations
  * - **Search Highlighting** - Added visual feedback for search matches (TECH-05):
  *   - Matched text substrings are now highlighted in bold
  *   - Implemented case-insensitive fuzzier matching with Pango markup
  *   - Improved `Regex`-based search logic

-------------------------------------------------------------------
Sat Jan 31 2026 Anton Isaiev <totoshko88@gmail.com> - 0.7.0

- Update to version 0.7.0
  * - **Asbru Import Nested Groups** - Fixed group hierarchy being lost when importing from Asbru-CM:
  *   - Groups with subgroups (e.g., Group1 containing Group11, Group12, etc.) now correctly preserve parent-child relationships
  *   - Previously, HashMap iteration order caused child groups to be processed before their parents were added to the UUID map, resulting in orphaned root-level groups
  *   - Now uses two-pass algorithm: first creates all groups and populates UUID map, then resolves parent references
  *   - Special Asbru parent keys (`__PAC__EXPORTED__`, `__PAC__ROOT__`) are now properly skipped
  * - **Asbru Export Description Field** - Fixed description not being exported for connections and groups:
  *   - Connection description now exports from `connection.description` field directly
  *   - Falls back to legacy `desc:` tags only if description field is empty
  *   - Group description now exports when present
  * - **Group Description Field** - Groups can now have a description field for storing project info, contacts, notes:
  *   - Added `description: Option<String>` to `ConnectionGroup` model
  *   - Asbru importer now imports group descriptions
  *   - Edit Group dialog now includes Description text area for viewing/editing
  *   - New Group dialog now includes Description text area (unified with Edit Group)
  * - **Asbru Global Variable Conversion** - Asbru-CM global variable syntax is now converted during import:
  *   - `<GV:VAR_NAME>` is automatically converted to RustConn syntax `${VAR_NAME}`
  *   - Applies to username field (e.g., `<GV:US_Parrallels_User>` → `${US_Parrallels_User}`)
  *   - Plain usernames remain unchanged
  * - **Variable Substitution at Connection Time** - Global variables are now resolved when connecting:
  *   - `${VAR_NAME}` in host and username fields are replaced with variable values
  *   - Works for SSH, RDP, VNC, and SPICE connections
  *   - Variables are defined in Settings → Variables
  * - **Export Dialog** - Added informational message about credential storage:
  *   - New info row explains that passwords are stored in password manager and not exported by default
  *   - Reminds users to export credential structure separately if needed for team sharing
  * - **Dialog Size Unification** - Standardized dialog window sizes for visual consistency:
  *   - New Group dialog: 450×550 (added Description field, unified with Edit Group)
  *   - Export dialog: 750×650 (increased height for content)
  *   - Import dialog: 750×800 (increased height for content)
  *   - Medium forms (550×550): New Snippet, New Cluster, Statistics
  *   - Info dialogs (500×500): Keyboard Shortcuts, Connection History
  *   - Simple forms (450): Quick Connect, Edit Group, Rename
  *   - Password Generator: 750×650 (unified with Connection/Template dialogs)

-------------------------------------------------------------------
Sat Jan 31 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.9

- Update to version 0.6.9
  * - **Password Caching TTL** - Cached credentials now expire after configurable time (default 5 minutes):
  *   - `CachedCredentials` with `cached_at` timestamp and `is_expired()` method
  *   - `cleanup_expired_credentials()` for automatic cleanup
  *   - `refresh_cached_credentials()` to extend TTL on use
  * - **Connection Retry Logic** - Automatic retry with exponential backoff for failed connections:
  *   - `RetryConfig` with max_attempts, base_delay, max_delay, jitter settings
  *   - `RetryState` for tracking retry progress
  *   - Preset configurations: `aggressive()`, `conservative()`, `no_retry()`
  * - **Loading States** - Visual feedback for long-running operations:
  *   - `LoadingOverlay` component for inline loading indicators
  *   - `LoadingDialog` for modal operations with cancel support
  *   - `with_loading_dialog()` helper for async operations
  * - **Keyboard Navigation Helpers** - Improved dialog keyboard support:
  *   - `setup_dialog_shortcuts()` for Escape/Ctrl+S/Ctrl+W
  *   - `setup_entry_activation()` for Enter key handling
  *   - `make_default_button()` and `make_destructive_button()` styling helpers
  * - **Session State Persistence** - Split layouts preserved across restarts:
  *   - `SessionRestoreData` and `SplitLayoutRestoreData` structs
  *   - JSON serialization for session state
  *   - Automatic save/load from config directory
  * - **Connection Health Check** - Periodic monitoring of active sessions:
  *   - `HealthStatus` enum (Healthy, Unhealthy, Unknown, Terminated)
  *   - `HealthCheckConfig` with interval and auto_cleanup settings
  *   - `perform_health_check()` and `get_session_health()` methods
  * - **Log Sanitization** - Automatic removal of sensitive data from logs:
  *   - `SanitizeConfig` with patterns for passwords, API keys, tokens
  *   - AWS credentials and private key detection
  *   - `contains_sensitive_prompt()` helper
  * - **Async Architecture Helpers** - Improved async handling in GUI:
  *   - `spawn_async()` for non-blocking operations
  *   - `spawn_async_with_callback()` for result handling
  *   - `block_on_async_with_timeout()` for bounded blocking
  *   - `is_main_thread()` and `ensure_main_thread()` utilities
  * - **RDP Backend Selector** - Centralized RDP backend selection:
  *   - `RdpBackend` enum (IronRdp, WlFreeRdp, XFreeRdp3, XFreeRdp, FreeRdp)
  *   - `RdpBackendSelector` with detection caching
  *   - `select_embedded()`, `select_external()`, `select_best()` methods
  * - **Import/Export Enhancement** - Detailed import statistics:
  *   - `SkippedField` and `SkippedFieldReason` for tracking skipped data
  *   - `ImportStatistics` with detailed reporting
  *   - `detailed_report()` for human-readable summaries
  * - **Bulk Credential Operations** - Mass credential management:
  *   - `store_bulk()`, `delete_bulk()`, `update_bulk()` methods
  *   - `update_credentials_for_group()` for group-wide updates
  *   - `copy_credentials()` between connections
  * - **1Password as PasswordSource** - 1Password can now be selected per-connection:
  *   - Added `OnePassword` variant to `PasswordSource` enum
  *   - 1Password option in password source dropdown (index 4)
  *   - Password save/load support for 1Password backend
  *   - Default selection based on `preferred_backend` setting
  * - **Credential Rename on Connection Rename** - Credentials are now automatically renamed in secret backends when connection is renamed:
  *   - KeePass: Entry path updated to match new connection name
  *   - Keyring: Entry key updated from old to new name format
  *   - Bitwarden: Entry name updated to match new connection name
  *   - 1Password: Uses connection ID, no rename needed
  * - **Safe State Access** - New helpers to reduce RefCell borrow panics:
  *   - `with_state()` and `try_with_state()` for read access
  *   - `with_state_mut()` and `try_with_state_mut()` for write access
  * - **Toast Queue** - Fixed toast message sequencing with `schedule_toast_hide()` helper
  * - **KeePass Password Retrieval for Subgroups** - Fixed password not being retrieved when connection is in nested groups:
  *   - Save and read operations now both use hierarchical paths via `KeePassHierarchy::build_entry_path()`
  *   - Paths like `RustConn/Group1/Group2/ConnectionName (protocol)` are now consistent
  * - **Keyring Password Retrieval** - Fixed password never found after saving:
  *   - Save used `"{name} ({protocol})"` format, read used UUID
  *   - Now both use `"{name} ({protocol})"` with legacy UUID fallback
  * - **Bitwarden Password Retrieval** - Fixed password never found after saving:
  *   - Save used `"{name} ({protocol})"` format, read used `"rustconn/{name}"`
  *   - Now both use `"{name} ({protocol})"` with legacy format fallback
  * - **Status Icon on Tab Close** - Status icons now clear when closing RDP/SSH tabs:
  *   - Previously showed red/green status for closed connections
  *   - Now clears status (empty string) instead of setting "failed"/"disconnected"
  * - Added 370+ new property tests (total: 1241 tests):
  *   - `vnc_client_tests.rs` - VNC client configuration and events (28 tests)
  *   - `terminal_theme_tests.rs` - Terminal theme parsing (26 tests)
  *   - `error_tests.rs` - Error type coverage (45 tests)
  *   - `retry_tests.rs` - Retry logic (14 tests)
  *   - `session_restore_tests.rs` - Session persistence (10 tests)
  *   - `rdp_backend_tests.rs` - RDP backend selection (13 tests)
  *   - `log_sanitization_tests.rs` - Log sanitization (19 tests)
  *   - `health_check_tests.rs` - Health monitoring (13 tests)
  *   - `bulk_credential_tests.rs` - Bulk operations (25 tests)
  *   - `import_statistics_tests.rs` - Import statistics (28 tests)
  *   - And more...
  * - **Local Shell in Split View** - Local Shell tabs can now be added to split view panels:
  *   - Fixed protocol filter that excluded "local" protocol from available sessions
  *   - Multiple Local Shell tabs now appear in "Select Tab" dialog for split panels

-------------------------------------------------------------------
Sat Jan 31 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.9

- Update to version 0.6.9
  * - **Password Caching TTL** - Cached credentials now expire after configurable time (default 5 minutes):
  *   - `CachedCredentials` with `cached_at` timestamp and `is_expired()` method
  *   - `cleanup_expired_credentials()` for automatic cleanup
  *   - `refresh_cached_credentials()` to extend TTL on use
  * - **Connection Retry Logic** - Automatic retry with exponential backoff for failed connections:
  *   - `RetryConfig` with max_attempts, base_delay, max_delay, jitter settings
  *   - `RetryState` for tracking retry progress
  *   - Preset configurations: `aggressive()`, `conservative()`, `no_retry()`
  * - **Loading States** - Visual feedback for long-running operations:
  *   - `LoadingOverlay` component for inline loading indicators
  *   - `LoadingDialog` for modal operations with cancel support
  *   - `with_loading_dialog()` helper for async operations
  * - **Keyboard Navigation Helpers** - Improved dialog keyboard support:
  *   - `setup_dialog_shortcuts()` for Escape/Ctrl+S/Ctrl+W
  *   - `setup_entry_activation()` for Enter key handling
  *   - `make_default_button()` and `make_destructive_button()` styling helpers
  * - **Session State Persistence** - Split layouts preserved across restarts:
  *   - `SessionRestoreData` and `SplitLayoutRestoreData` structs
  *   - JSON serialization for session state
  *   - Automatic save/load from config directory
  * - **Connection Health Check** - Periodic monitoring of active sessions:
  *   - `HealthStatus` enum (Healthy, Unhealthy, Unknown, Terminated)
  *   - `HealthCheckConfig` with interval and auto_cleanup settings
  *   - `perform_health_check()` and `get_session_health()` methods
  * - **Log Sanitization** - Automatic removal of sensitive data from logs:
  *   - `SanitizeConfig` with patterns for passwords, API keys, tokens
  *   - AWS credentials and private key detection
  *   - `contains_sensitive_prompt()` helper
  * - **Async Architecture Helpers** - Improved async handling in GUI:
  *   - `spawn_async()` for non-blocking operations
  *   - `spawn_async_with_callback()` for result handling
  *   - `block_on_async_with_timeout()` for bounded blocking
  *   - `is_main_thread()` and `ensure_main_thread()` utilities
  * - **RDP Backend Selector** - Centralized RDP backend selection:
  *   - `RdpBackend` enum (IronRdp, WlFreeRdp, XFreeRdp3, XFreeRdp, FreeRdp)
  *   - `RdpBackendSelector` with detection caching
  *   - `select_embedded()`, `select_external()`, `select_best()` methods
  * - **Import/Export Enhancement** - Detailed import statistics:
  *   - `SkippedField` and `SkippedFieldReason` for tracking skipped data
  *   - `ImportStatistics` with detailed reporting
  *   - `detailed_report()` for human-readable summaries
  * - **Bulk Credential Operations** - Mass credential management:
  *   - `store_bulk()`, `delete_bulk()`, `update_bulk()` methods
  *   - `update_credentials_for_group()` for group-wide updates
  *   - `copy_credentials()` between connections
  * - **1Password as PasswordSource** - 1Password can now be selected per-connection:
  *   - Added `OnePassword` variant to `PasswordSource` enum
  *   - 1Password option in password source dropdown (index 4)
  *   - Password save/load support for 1Password backend
  *   - Default selection based on `preferred_backend` setting
  * - **Credential Rename on Connection Rename** - Credentials are now automatically renamed in secret backends when connection is renamed:
  *   - KeePass: Entry path updated to match new connection name
  *   - Keyring: Entry key updated from old to new name format
  *   - Bitwarden: Entry name updated to match new connection name
  *   - 1Password: Uses connection ID, no rename needed
  * - **Safe State Access** - New helpers to reduce RefCell borrow panics:
  *   - `with_state()` and `try_with_state()` for read access
  *   - `with_state_mut()` and `try_with_state_mut()` for write access
  * - **Toast Queue** - Fixed toast message sequencing with `schedule_toast_hide()` helper
  * - **KeePass Password Retrieval for Subgroups** - Fixed password not being retrieved when connection is in nested groups:
  *   - Save and read operations now both use hierarchical paths via `KeePassHierarchy::build_entry_path()`
  *   - Paths like `RustConn/Group1/Group2/ConnectionName (protocol)` are now consistent
  * - **Keyring Password Retrieval** - Fixed password never found after saving:
  *   - Save used `"{name} ({protocol})"` format, read used UUID
  *   - Now both use `"{name} ({protocol})"` with legacy UUID fallback
  * - **Bitwarden Password Retrieval** - Fixed password never found after saving:
  *   - Save used `"{name} ({protocol})"` format, read used `"rustconn/{name}"`
  *   - Now both use `"{name} ({protocol})"` with legacy format fallback
  * - **Status Icon on Tab Close** - Status icons now clear when closing RDP/SSH tabs:
  *   - Previously showed red/green status for closed connections
  *   - Now clears status (empty string) instead of setting "failed"/"disconnected"
  * - Added 370+ new property tests (total: 1241 tests):
  *   - `vnc_client_tests.rs` - VNC client configuration and events (28 tests)
  *   - `terminal_theme_tests.rs` - Terminal theme parsing (26 tests)
  *   - `error_tests.rs` - Error type coverage (45 tests)
  *   - `retry_tests.rs` - Retry logic (14 tests)
  *   - `session_restore_tests.rs` - Session persistence (10 tests)
  *   - `rdp_backend_tests.rs` - RDP backend selection (13 tests)
  *   - `log_sanitization_tests.rs` - Log sanitization (19 tests)
  *   - `health_check_tests.rs` - Health monitoring (13 tests)
  *   - `bulk_credential_tests.rs` - Bulk operations (25 tests)
  *   - `import_statistics_tests.rs` - Import statistics (28 tests)
  *   - And more...
  * - **Local Shell in Split View** - Local Shell tabs can now be added to split view panels:
  *   - Fixed protocol filter that excluded "local" protocol from available sessions
  *   - Multiple Local Shell tabs now appear in "Select Tab" dialog for split panels

-------------------------------------------------------------------
Sat Jan 31 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.9

- Update to version 0.6.9
  * - **Password Caching TTL** - Cached credentials now expire after configurable time (default 5 minutes):
  *   - `CachedCredentials` with `cached_at` timestamp and `is_expired()` method
  *   - `cleanup_expired_credentials()` for automatic cleanup
  *   - `refresh_cached_credentials()` to extend TTL on use
  * - **Connection Retry Logic** - Automatic retry with exponential backoff for failed connections:
  *   - `RetryConfig` with max_attempts, base_delay, max_delay, jitter settings
  *   - `RetryState` for tracking retry progress
  *   - Preset configurations: `aggressive()`, `conservative()`, `no_retry()`
  * - **Loading States** - Visual feedback for long-running operations:
  *   - `LoadingOverlay` component for inline loading indicators
  *   - `LoadingDialog` for modal operations with cancel support
  *   - `with_loading_dialog()` helper for async operations
  * - **Keyboard Navigation Helpers** - Improved dialog keyboard support:
  *   - `setup_dialog_shortcuts()` for Escape/Ctrl+S/Ctrl+W
  *   - `setup_entry_activation()` for Enter key handling
  *   - `make_default_button()` and `make_destructive_button()` styling helpers
  * - **Session State Persistence** - Split layouts preserved across restarts:
  *   - `SessionRestoreData` and `SplitLayoutRestoreData` structs
  *   - JSON serialization for session state
  *   - Automatic save/load from config directory
  * - **Connection Health Check** - Periodic monitoring of active sessions:
  *   - `HealthStatus` enum (Healthy, Unhealthy, Unknown, Terminated)
  *   - `HealthCheckConfig` with interval and auto_cleanup settings
  *   - `perform_health_check()` and `get_session_health()` methods
  * - **Log Sanitization** - Automatic removal of sensitive data from logs:
  *   - `SanitizeConfig` with patterns for passwords, API keys, tokens
  *   - AWS credentials and private key detection
  *   - `contains_sensitive_prompt()` helper
  * - **Async Architecture Helpers** - Improved async handling in GUI:
  *   - `spawn_async()` for non-blocking operations
  *   - `spawn_async_with_callback()` for result handling
  *   - `block_on_async_with_timeout()` for bounded blocking
  *   - `is_main_thread()` and `ensure_main_thread()` utilities
  * - **RDP Backend Selector** - Centralized RDP backend selection:
  *   - `RdpBackend` enum (IronRdp, WlFreeRdp, XFreeRdp3, XFreeRdp, FreeRdp)
  *   - `RdpBackendSelector` with detection caching
  *   - `select_embedded()`, `select_external()`, `select_best()` methods
  * - **Import/Export Enhancement** - Detailed import statistics:
  *   - `SkippedField` and `SkippedFieldReason` for tracking skipped data
  *   - `ImportStatistics` with detailed reporting
  *   - `detailed_report()` for human-readable summaries
  * - **Bulk Credential Operations** - Mass credential management:
  *   - `store_bulk()`, `delete_bulk()`, `update_bulk()` methods
  *   - `update_credentials_for_group()` for group-wide updates
  *   - `copy_credentials()` between connections
  * - **1Password as PasswordSource** - 1Password can now be selected per-connection:
  *   - Added `OnePassword` variant to `PasswordSource` enum
  *   - 1Password option in password source dropdown (index 4)
  *   - Password save/load support for 1Password backend
  *   - Default selection based on `preferred_backend` setting
  * - **Credential Rename on Connection Rename** - Credentials are now automatically renamed in secret backends when connection is renamed:
  *   - KeePass: Entry path updated to match new connection name
  *   - Keyring: Entry key updated from old to new name format
  *   - Bitwarden: Entry name updated to match new connection name
  *   - 1Password: Uses connection ID, no rename needed
  * - **Safe State Access** - New helpers to reduce RefCell borrow panics:
  *   - `with_state()` and `try_with_state()` for read access
  *   - `with_state_mut()` and `try_with_state_mut()` for write access
  * - **Toast Queue** - Fixed toast message sequencing with `schedule_toast_hide()` helper
  * - **KeePass Password Retrieval for Subgroups** - Fixed password not being retrieved when connection is in nested groups:
  *   - Save and read operations now both use hierarchical paths via `KeePassHierarchy::build_entry_path()`
  *   - Paths like `RustConn/Group1/Group2/ConnectionName (protocol)` are now consistent
  * - **Keyring Password Retrieval** - Fixed password never found after saving:
  *   - Save used `"{name} ({protocol})"` format, read used UUID
  *   - Now both use `"{name} ({protocol})"` with legacy UUID fallback
  * - **Bitwarden Password Retrieval** - Fixed password never found after saving:
  *   - Save used `"{name} ({protocol})"` format, read used `"rustconn/{name}"`
  *   - Now both use `"{name} ({protocol})"` with legacy format fallback
  * - **Status Icon on Tab Close** - Status icons now clear when closing RDP/SSH tabs:
  *   - Previously showed red/green status for closed connections
  *   - Now clears status (empty string) instead of setting "failed"/"disconnected"
  * - Added 370+ new property tests (total: 1241 tests):
  *   - `vnc_client_tests.rs` - VNC client configuration and events (28 tests)
  *   - `terminal_theme_tests.rs` - Terminal theme parsing (26 tests)
  *   - `error_tests.rs` - Error type coverage (45 tests)
  *   - `retry_tests.rs` - Retry logic (14 tests)
  *   - `session_restore_tests.rs` - Session persistence (10 tests)
  *   - `rdp_backend_tests.rs` - RDP backend selection (13 tests)
  *   - `log_sanitization_tests.rs` - Log sanitization (19 tests)
  *   - `health_check_tests.rs` - Health monitoring (13 tests)
  *   - `bulk_credential_tests.rs` - Bulk operations (25 tests)
  *   - `import_statistics_tests.rs` - Import statistics (28 tests)
  *   - And more...
  * - **Local Shell in Split View** - Local Shell tabs can now be added to split view panels:
  *   - Fixed protocol filter that excluded "local" protocol from available sessions
  *   - Multiple Local Shell tabs now appear in "Select Tab" dialog for split panels

-------------------------------------------------------------------
Fri Jan 30 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.8

- Update to version 0.6.8
  * - **1Password CLI Integration** - New secret backend for 1Password password manager:
  *   - Full `SecretBackend` trait implementation with async credential resolution
  *   - Uses `op` CLI v2 with desktop app integration (biometric authentication)
  *   - Service account support via `OP_SERVICE_ACCOUNT_TOKEN` environment variable
  *   - Automatic vault creation ("RustConn" vault) for storing credentials
  *   - Items tagged with "rustconn" for easy filtering
  *   - Account status checking with `op whoami`
  *   - Settings UI with version display and sign-in status indicator
  *   - "Sign In" button opens terminal for interactive `op signin`
  * - **1Password Detection** - `detect_onepassword()` function in detection module:
  *   - Checks multiple paths for `op` CLI installation
  *   - Reports version, sign-in status, and account email
  *   - Integrated into `detect_password_managers()` for unified discovery
  * - **Bitwarden API Key Authentication** - New `login_with_api_key()` function:
  *   - Uses `BW_CLIENTID` and `BW_CLIENTSECRET` environment variables
  *   - Recommended for automated workflows and CI/CD pipelines
  * - **Bitwarden Self-Hosted Support** - New `configure_server()` function:
  *   - Configure CLI to use self-hosted Bitwarden server
  * - **Bitwarden Logout** - New `logout()` function for session cleanup
  * - `SecretBackendType` enum extended with `OnePassword` variant
  * - Connection dialog password source dropdown now includes 1Password (index 4)
  * - Settings → Secrets tab shows 1Password configuration group when selected
  * - Property test generators updated to include `Bitwarden` and `OnePassword` variants
  * - **Bitwarden unlock** now uses `--passwordenv` option as recommended by official documentation (more secure than stdin)
  * - **Bitwarden retrieve** now syncs vault before lookup to ensure latest credentials
  * - **Dependencies** - Updated: cc 1.2.54→1.2.55, find-msvc-tools 0.1.8→0.1.9

-------------------------------------------------------------------
Thu Jan 29 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.7

- Update to version 0.6.7

-------------------------------------------------------------------
Wed Jan 28 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.6

- Update to version 0.6.6

-------------------------------------------------------------------
Wed Jan 28 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.6

- Update to version 0.6.6

-------------------------------------------------------------------
Wed Jan 21 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.5

- Update to version 0.6.5
  * - **Split View Redesign** - Complete rewrite of split view functionality with tab-scoped layouts:
  *   - Each tab now maintains its own independent split layout (no more global split state)
  *   - Tree-based panel structure supporting unlimited nested splits
  *   - Color-coded panel borders (6 colors) to visually identify split containers
  *   - All panels within the same split container now share the same border color (per design spec)
  *   - Tab color indicators match their container's color when in split view
  *   - "Select Tab" button in empty panels as alternative to drag-and-drop
  *   - Proper cleanup when closing split view (colors released, terminals reparented)
  *   - When last panel is closed, split view closes and session returns to regular tab
  *   - New `rustconn-core/src/split/` module with GUI-free split layout logic
  *   - Comprehensive property tests for split view operations
  * - **Terminal Tabs Migration** - Migrated terminal notebook from `gtk::Notebook` to `adw::TabView`:
  *   - Modern GNOME HIG compliant tab bar with `adw::TabBar`
  *   - Native tab drag-and-drop support
  *   - Automatic tab overflow handling
  *   - Better integration with libadwaita theming
  *   - Improved accessibility with proper ARIA labels
  * - **Dependencies** - Updated: thiserror 2.0.18, zbus 5.13.2, zvariant 5.9.2, euclid 0.22.13, openssl-probe 0.2.1, zmij 1.0.16, zune-jpeg 0.5.11
  * - **KeePass Password Saving** - Fixed "Failed to Save Password" error when connection name contains `/` character (e.g., connections in subgroups). Now sanitizes lookup keys by replacing `/` with `-`
  * - **Connection Dialog Password Field** - Renamed "Password:" label to "Value:" and added show/hide toggle button. Field visibility now depends on password source selection (hidden for Prompt/Inherit/None, shown for Stored/KeePass/Keyring)
  * - **Group Dialog Password Source** - Added password source dropdown (Prompt, Stored, KeePass, Keyring, Inherit, None) with Value field and show/hide toggle to group dialogs
  * - **Template Dialog Field Alignment** - Changed Basic tab fields from `Entry` to `adw::EntryRow` for proper width stretching consistent with Connection dialog
  * - **CSS Parser Errors** - Removed unsupported `:has()` pseudoclass from CSS rules, eliminating 6 "Unknown pseudoclass" errors on startup
  * - **zbus DEBUG Spam** - Added tracing filter to suppress verbose zbus DEBUG messages (`zbus=warn` directive)
  * - **Split View "Loading..." Panels** - Fixed panels getting stuck showing "Loading..." after multiple splits and "Select Tab" operations:
  *   - Terminals moved via "Select Tab" are now stored in bridge's internal map for restoration
  *   - `restore_panel_contents()` is now called after each split to restore terminal content
  *   - `show_session()` is only called on first split; subsequent splits preserve existing panel content
  * - **Split View Context Menu Freeze** - Fixed window freeze when right-clicking in split view panels. Context menu popover is now created dynamically on each click to avoid GTK popup grabbing conflicts
  * - **Split View Tab Colors** - Fixed tabs in the same split container having different colors. Now all tabs/panels within a split container share a single container color (allocated once on first split)
  * - Empty panel close button now properly triggers panel removal and split view cleanup
  * - Focus rectangle properly follows active panel when clicking or switching tabs

-------------------------------------------------------------------
Sat Jan 17 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.4

- Update to version 0.6.4
  * - **Snap Package** - New distribution format for easy installation via Snapcraft:
  *   - Classic confinement for full system access (SSH keys, network, etc.)
  *   - Automatic updates via Snap Store
  *   - Available via `sudo snap install rustconn --classic`
  * - **GitHub Actions Snap Workflow** - Automated Snap package builds:
  *   - Builds on tag push (`v*`) and manual trigger
  *   - Uploads artifacts for testing
  *   - Publishes to Snap Store stable channel on release tags
  * - **RDP/VNC Performance Modes** - New dropdown in connection dialog to optimize for different network conditions:
  *   - Quality: Best visual quality (32-bit color for RDP, Tight encoding with high quality for VNC)
  *   - Balanced: Good balance of quality and performance (24-bit color, medium compression)
  *   - Speed: Optimized for slow connections (16-bit color for RDP, ZRLE encoding with high compression for VNC)
  * - Updated documentation with Snap installation instructions
  * - **RDP Initial Resolution** - Embedded RDP sessions now start with correct resolution matching actual widget size
  *   - Previously used saved window settings which could differ from actual content area
  *   - Now waits for GTK layout (100ms) to get accurate widget dimensions
  * - **RDP Dynamic Resolution** - Window resize now triggers automatic reconnect with new resolution
  *   - Debounced reconnect after 500ms of no resize activity
  *   - Preserves shared folders and credentials during reconnect
  *   - Works around Windows RDP servers not supporting Display Control channel
  * - **Sidebar Fixed Width** - Sidebar no longer resizes when window is resized
  *   - Content area (RDP/VNC/terminal) now properly expands to fill available space
  * - **RDP Cursor Colors** - Fixed inverted cursor colors in embedded RDP sessions (BGRA→ARGB conversion)
  * - `ironrdp` 0.13 → 0.14 (embedded RDP client)
  * - `ironrdp-tokio` 0.7 → 0.8
  * - `ironrdp-tls` 0.1 → 0.2
  * - `sspi` 0.16 → 0.18.7 (Windows authentication)
  * - `picky` 7.0.0-rc.17 → 7.0.0-rc.20
  * - `picky-krb` 0.11 → 0.12 (Kerberos support)
  * - `hickory-proto` 0.24 → 0.25
  * - `hickory-resolver` 0.24 → 0.25
  * - `cc` 1.2.52 → 1.2.53
  * - `find-msvc-tools` 0.1.7 → 0.1.8
  * - `js-sys` 0.3.83 → 0.3.85
  * - `rand_core` 0.9.3 → 0.9.5
  * - `rustls-pki-types` 1.13.2 → 1.14.0
  * - `rustls-webpki` 0.103.8 → 0.103.9
  * - `wasm-bindgen` 0.2.106 → 0.2.108
  * - `web-sys` 0.3.83 → 0.3.85
  * - `wit-bindgen` 0.46.0 → 0.51.0

-------------------------------------------------------------------
Fri Jan 16 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.3

- Update to version 0.6.3
  * - **Bitwarden CLI Integration** - New secret backend for Bitwarden password manager:
  *   - Full `SecretBackend` trait implementation with async credential resolution
  *   - Vault status checking (locked/unlocked/unauthenticated)
  *   - Session token management with automatic refresh
  *   - Secure credential lookup by connection name or host
  *   - Settings UI with vault status indicator and unlock functionality
  * - **Password Manager Detection** - Automatic detection of installed password managers:
  *   - Detects GNOME Secrets, KeePassXC, KeePass2, Bitwarden CLI, 1Password CLI
  *   - Shows installed managers with version info in Settings → Secrets tab
  *   - New "Installed Password Managers" section for quick overview
  * - **Enhanced Secrets Settings UI** - Improved backend selection experience:
  *   - Backend dropdown now includes all 4 options: KeePassXC, libsecret, KDBX File, Bitwarden
  *   - Dynamic configuration groups based on selected backend
  *   - Bitwarden-specific settings with vault status checking
  * - `SecretBackendType` enum extended with `Bitwarden` variant
  * - `SecretError` extended with `Bitwarden` variant for CLI-specific errors

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Thu Jan 15 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.2

- Update to version 0.6.2

-------------------------------------------------------------------
Tue Jan 13 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.1

- Update to version 0.6.1
  * - **Credential Inheritance** - Simplify connection management by inheriting credentials from parent groups:
  *   - New "Inherit" option in password source dropdown
  *   - Recursively resolves credentials up the group hierarchy
  *   - Reduces duplication for environments sharing same credentials
  * - **Jump Host Support** - Native SSH Jump Host configuration:
  *   - New "Jump Host" dropdown in SSH connection settings
  *   - Select any existing SSH connection as a jump host
  *   - Supports chained jump hosts (Jump Host -> Jump Host -> Target)
  *   - Automatically configures `-J` argument for SSH connections
  * - **Adwaita Empty States** - Migrated empty state views to `adw::StatusPage`:
  *   - Modern, consistent look for empty connection lists, terminals, and search results
  *   - Proper theming support
  * - **Group Improvements**:
  *   - **Sorting**: Group lists in sidebar and dropdowns are now sorted alphabetically by full path
  *   - **Credentials UI**: New fields in Group Dialogs to set default Username/Password/Domain
  *   - **Move Group**: Added "Parent" dropdown to Edit Group dialog to move groups (with cycle prevention)
  * - Updated `libadwaita` to `0.7`
  * - Updated `gtk4` to `0.10`
  * - Updated `vte4` to `0.9`

-------------------------------------------------------------------
Tue Jan 13 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.1

- Update to version 0.6.1
  * - **Credential Inheritance** - Simplify connection management by inheriting credentials from parent groups:
  *   - New "Inherit" option in password source dropdown
  *   - Recursively resolves credentials up the group hierarchy
  *   - Reduces duplication for environments sharing same credentials
  * - **Jump Host Support** - Native SSH Jump Host configuration:
  *   - New "Jump Host" dropdown in SSH connection settings
  *   - Select any existing SSH connection as a jump host
  *   - Supports chained jump hosts (Jump Host -> Jump Host -> Target)
  *   - Automatically configures `-J` argument for SSH connections
  * - **Adwaita Empty States** - Migrated empty state views to `adw::StatusPage`:
  *   - Modern, consistent look for empty connection lists, terminals, and search results
  *   - Proper theming support
  * - **Group Improvements**:
  *   - **Sorting**: Group lists in sidebar and dropdowns are now sorted alphabetically by full path
  *   - **Credentials UI**: New fields in Group Dialogs to set default Username/Password/Domain
  *   - **Move Group**: Added "Parent" dropdown to Edit Group dialog to move groups (with cycle prevention)
  * - Updated `libadwaita` to `0.7`
  * - Updated `gtk4` to `0.10`
  * - Updated `vte4` to `0.9`

-------------------------------------------------------------------
Tue Jan 13 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.1

- Update to version 0.6.1
  * - **Credential Inheritance** - Simplify connection management by inheriting credentials from parent groups:
  *   - New "Inherit" option in password source dropdown
  *   - Recursively resolves credentials up the group hierarchy
  *   - Reduces duplication for environments sharing same credentials
  * - **Jump Host Support** - Native SSH Jump Host configuration:
  *   - New "Jump Host" dropdown in SSH connection settings
  *   - Select any existing SSH connection as a jump host
  *   - Supports chained jump hosts (Jump Host -> Jump Host -> Target)
  *   - Automatically configures `-J` argument for SSH connections
  * - **Adwaita Empty States** - Migrated empty state views to `adw::StatusPage`:
  *   - Modern, consistent look for empty connection lists, terminals, and search results
  *   - Proper theming support
  * - **Group Improvements**:
  *   - **Sorting**: Group lists in sidebar and dropdowns are now sorted alphabetically by full path
  *   - **Credentials UI**: New fields in Group Dialogs to set default Username/Password/Domain
  *   - **Move Group**: Added "Parent" dropdown to Edit Group dialog to move groups (with cycle prevention)
  * - Updated `libadwaita` to `0.7`
  * - Updated `gtk4` to `0.9`
  * - Updated `vte4` to `0.8`

-------------------------------------------------------------------
Mon Jan 12 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.1

- Update to version 0.6.1
  * - **Credential Inheritance** - Simplify connection management by inheriting credentials from parent groups:
  *   - New "Inherit" option in password source dropdown
  *   - Recursively resolves credentials up the group hierarchy
  *   - Reduces duplication for environments sharing same credentials
  * - **Jump Host Support** - Native SSH Jump Host configuration:
  *   - New "Jump Host" dropdown in SSH connection settings
  *   - Select any existing SSH connection as a jump host
  *   - Supports chained jump hosts (Jump Host -> Jump Host -> Target)
  *   - Automatically configures `-J` argument for SSH connections
  * - **Adwaita Empty States** - Migrated empty state views to `adw::StatusPage`:
  *   - Modern, consistent look for empty connection lists, terminals, and search results
  *   - Proper theming support
  * - **Group Improvements**:
  *   - **Sorting**: Group lists in sidebar and dropdowns are now sorted alphabetically by full path
  *   - **Credentials UI**: New fields in Group Dialogs to set default Username/Password/Domain
  *   - **Move Group**: Added "Parent" dropdown to Edit Group dialog to move groups (with cycle prevention)
  * - Updated `libadwaita` to `0.7`
  * - Updated `gtk4` to `0.9`
  * - Updated `vte4` to `0.8`

-------------------------------------------------------------------
Mon Jan 12 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.0

- Update to version 0.6.0
  * - **Pre-connect Port Check** - Fast TCP port reachability check before launching RDP/VNC/SPICE connections:
  *   - Provides faster feedback (2-3s vs 30-60s timeout) when hosts are unreachable
  *   - Configurable globally in Settings → Connection with timeout setting (default: 3s)
  *   - Per-connection "Skip port check" option for special cases (firewalls, port knocking, VPN)
  *   - New `ConnectionSettings` struct in `AppSettings` for connection-related settings
  *   - New `skip_port_check` field on `Connection` model
  * - **CLI Feature Parity** - CLI now supports all major GUI features:
  *   - `template list/show/create/delete/apply` - Connection template management
  *   - `cluster list/show/create/delete/add-connection/remove-connection` - Cluster management
  *   - `var list/show/set/delete` - Global variables management
  *   - `duplicate` - Duplicate existing connections
  *   - `stats` - Show connection statistics (counts by protocol, groups, templates, clusters, snippets, variables, usage)
  * - **GitHub CI RPM Build** - Added Fedora RPM package build to release workflow:
  *   - Builds in Fedora 41 container with Rust 1.87
  *   - RPM package included in GitHub releases alongside .deb and AppImage
  *   - Installation instructions for Fedora in release notes
  * - Added `load_variables()` and `save_variables()` methods to `ConfigManager` for global variables persistence
  * - Added `<icon>` element to metainfo.xml for explicit AppStream icon declaration
  * - Added `<developer_name>` tag to metainfo.xml for backward compatibility with older AppStream parsers
  * - Added `author` and `license` fields to AppImage packaging (AppImageBuilder.yml)
  * - Added `debian.copyright` file to OBS debian packaging
  * - **Code Audit & Cleanup Release** - comprehensive codebase audit and modernization
  * - Removed `check_structs.rs` development artifact containing unsafe code (violated `unsafe_code = "forbid"` policy)
  * - Replaced `blocking_send()` with `try_send()` in VNC input handlers to prevent UI freezes
  * - Replaced `unwrap()` with safe alternatives in `sidebar.rs` iterator access
  * - Replaced `expect()` with proper error handling in `validation.rs` regex compilation
  * - Replaced module-level `#![allow(clippy::unwrap_used)]` with targeted function-level annotations in `embedded_rdp_thread.rs`
  * - Improved `app.rs` initialization to return proper error instead of panicking
  * - Updated `Cargo.toml` license from MIT to GPL-3.0-or-later (matches actual LICENSE file)
  * - Updated `Cargo.toml` authors to "Anton Isaiev <totoshko88@gmail.com>"
  * - Fixed `remote-viewer` version detection for localized output (e.g., Ukrainian "версія" instead of "version")
  * - Fixed Asbru-CM import skipping RDP/VNC connections with client info (e.g., "rdp (rdesktop)", "rdp (xfreerdp)", "vnc (vncviewer)")
  * - VNC keyboard/mouse input no longer blocks GTK main thread on channel send
  * - Sidebar protocol filter no longer panics on empty filter set
  * - Regex validation errors now return `Result` instead of panicking
  * - FreeRDP thread mutex operations now have documented safety invariants
  * - Package metadata now correctly shows author and license in all package formats
  * - Updated `base64ct` 1.8.2 → 1.8.3
  * - Updated `cc` 1.2.51 → 1.2.52
  * - Updated `data-encoding` 2.9.0 → 2.10.0
  * - Updated `find-msvc-tools` 0.1.6 → 0.1.7
  * - Updated `flate2` 1.1.5 → 1.1.8
  * - Updated `getrandom` 0.2.16 → 0.2.17
  * - Updated `libc` 0.2.179 → 0.2.180
  * - Updated `toml` 0.9.10 → 0.9.11
  * - Updated `zbus` 5.12.0 → 5.13.1
  * - Updated `zbus_macros` 5.12.0 → 5.13.1
  * - Updated `zbus_names` 4.2.0 → 4.3.1
  * - Updated `zmij` 1.0.12 → 1.0.13
  * - Updated `zvariant` 5.8.0 → 5.9.1
  * - Updated `zvariant_derive` 5.8.0 → 5.9.1
  * - Updated `zvariant_utils` 3.2.1 → 3.3.0
  * - Removed unused `cfg_aliases`, `nix`, `static_assertions` dependencies
  * - Note: `sspi` and `picky-krb` kept at 0.16.0/0.11.0 due to `rand_core` version conflict
  * - `rustconn-core/src/check_structs.rs` - development artifact with unsafe code

-------------------------------------------------------------------
Mon Jan 12 2026 Anton Isaiev <totoshko88@gmail.com> - 0.6.0

- Update to version 0.6.0
  * - **Pre-connect Port Check** - Fast TCP port reachability check before launching RDP/VNC/SPICE connections:
  *   - Provides faster feedback (2-3s vs 30-60s timeout) when hosts are unreachable
  *   - Configurable globally in Settings → Connection with timeout setting (default: 3s)
  *   - Per-connection "Skip port check" option for special cases (firewalls, port knocking, VPN)
  *   - New `ConnectionSettings` struct in `AppSettings` for connection-related settings
  *   - New `skip_port_check` field on `Connection` model
  * - **CLI Feature Parity** - CLI now supports all major GUI features:
  *   - `template list/show/create/delete/apply` - Connection template management
  *   - `cluster list/show/create/delete/add-connection/remove-connection` - Cluster management
  *   - `var list/show/set/delete` - Global variables management
  *   - `duplicate` - Duplicate existing connections
  *   - `stats` - Show connection statistics (counts by protocol, groups, templates, clusters, snippets, variables, usage)
  * - **GitHub CI RPM Build** - Added Fedora RPM package build to release workflow:
  *   - Builds in Fedora 41 container with Rust 1.87
  *   - RPM package included in GitHub releases alongside .deb and AppImage
  *   - Installation instructions for Fedora in release notes
  * - Added `load_variables()` and `save_variables()` methods to `ConfigManager` for global variables persistence
  * - Added `<icon>` element to metainfo.xml for explicit AppStream icon declaration
  * - Added `<developer_name>` tag to metainfo.xml for backward compatibility with older AppStream parsers
  * - Added `author` and `license` fields to AppImage packaging (AppImageBuilder.yml)
  * - Added `debian.copyright` file to OBS debian packaging
  * - **Code Audit & Cleanup Release** - comprehensive codebase audit and modernization
  * - Removed `check_structs.rs` development artifact containing unsafe code (violated `unsafe_code = "forbid"` policy)
  * - Replaced `blocking_send()` with `try_send()` in VNC input handlers to prevent UI freezes
  * - Replaced `unwrap()` with safe alternatives in `sidebar.rs` iterator access
  * - Replaced `expect()` with proper error handling in `validation.rs` regex compilation
  * - Replaced module-level `#![allow(clippy::unwrap_used)]` with targeted function-level annotations in `embedded_rdp_thread.rs`
  * - Improved `app.rs` initialization to return proper error instead of panicking
  * - Updated `Cargo.toml` license from MIT to GPL-3.0-or-later (matches actual LICENSE file)
  * - Updated `Cargo.toml` authors to "Anton Isaiev <totoshko88@gmail.com>"
  * - Fixed `remote-viewer` version detection for localized output (e.g., Ukrainian "версія" instead of "version")
  * - VNC keyboard/mouse input no longer blocks GTK main thread on channel send
  * - Sidebar protocol filter no longer panics on empty filter set
  * - Regex validation errors now return `Result` instead of panicking
  * - FreeRDP thread mutex operations now have documented safety invariants
  * - Package metadata now correctly shows author and license in all package formats
  * - Updated `base64ct` 1.8.2 → 1.8.3
  * - Updated `cc` 1.2.51 → 1.2.52
  * - Updated `data-encoding` 2.9.0 → 2.10.0
  * - Updated `find-msvc-tools` 0.1.6 → 0.1.7
  * - Updated `flate2` 1.1.5 → 1.1.8
  * - Updated `getrandom` 0.2.16 → 0.2.17
  * - Updated `libc` 0.2.179 → 0.2.180
  * - Updated `toml` 0.9.10 → 0.9.11
  * - Updated `zbus` 5.12.0 → 5.13.1
  * - Updated `zbus_macros` 5.12.0 → 5.13.1
  * - Updated `zbus_names` 4.2.0 → 4.3.1
  * - Updated `zmij` 1.0.12 → 1.0.13
  * - Updated `zvariant` 5.8.0 → 5.9.1
  * - Updated `zvariant_derive` 5.8.0 → 5.9.1
  * - Updated `zvariant_utils` 3.2.1 → 3.3.0
  * - Removed unused `cfg_aliases`, `nix`, `static_assertions` dependencies
  * - Note: `sspi` and `picky-krb` kept at 0.16.0/0.11.0 due to `rand_core` version conflict
  * - `rustconn-core/src/check_structs.rs` - development artifact with unsafe code

-------------------------------------------------------------------
Sun Jan 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.9

- Update to version 0.5.9
  * - Migrated Settings dialog from deprecated `PreferencesWindow` to `PreferencesDialog` (libadwaita 1.5+)
  * - Updated libadwaita feature from `v1_4` to `v1_5` for PreferencesDialog support
  * - Updated workspace dependencies:
  *   - `uuid` 1.6 → 1.11
  *   - `regex` 1.10 → 1.11
  *   - `proptest` 1.4 → 1.6
  *   - `tempfile` 3.24 → 3.15
  *   - `zip` 2.1 → 2.2
  * - Removed unnecessary `macos_kqueue` feature from `notify` crate
  * - Note: `ksni` 0.3.3 and `sspi`/`picky-krb` kept at current versions due to `zvariant`/`rand_core` version conflicts
  * - Migrated all dialogs to use `adw::ToolbarView` for proper libadwaita layout:
  * - Migrated Template dialog to modern libadwaita patterns:
  *   - Basic tab: `adw::PreferencesGroup` with `adw::ActionRow` for template info and default values
  *   - SSH options: `adw::PreferencesGroup` with Authentication, Connection, and Session groups
  *   - RDP options: Display, Features, and Advanced groups with dynamic visibility (resolution/color hidden in Embedded mode)
  *   - VNC options: Display, Encoding, Features, and Advanced groups
  *   - SPICE options: Security, Features, and Performance groups with dynamic visibility (TLS-related fields)
  *   - Zero Trust options: Provider selection with `adw::ActionRow`, provider-specific groups for all 10 providers
  * - Fixed missing icon for "Embedded SSH terminals" feature on Welcome page (`display-symbolic` → `utilities-terminal-symbolic`)
  * - Fixed missing Quick Connect header bar icon (`network-transmit-symbolic` → `go-jump-symbolic`)
  * - Fixed missing Split Horizontal header bar icon (`view-paged-symbolic` → `object-flip-horizontal-symbolic`)
  * - Fixed missing Interface tab icon in Settings (`preferences-desktop-appearance-symbolic` → `applications-graphics-symbolic`)
  * - Fixed KeePass Settings: Browse buttons for Database File and Key File now open file chooser dialogs
  * - Fixed KeePass Settings: Dynamic visibility for Authentication fields (password/key file rows show/hide based on switches)
  * - Fixed KeePass Settings: Added "Check" button to verify database connection
  * - Fixed KeePass Settings: `verify_kdbx_credentials` now correctly handles key-file-only authentication with `--no-password` flag
  * - Fixed SSH Agent Settings: "Start Agent" button now properly starts ssh-agent and updates UI
  * - Fixed Zero Trust (AWS SSM) connection status icon showing as failed despite successful connection
  * - Migrated About dialog from `gtk4::AboutDialog` to `adw::AboutDialog` for modern GNOME look
  * - Migrated Password Generator dialog switches from `ActionRow` + `Switch` to `adw::SwitchRow` for cleaner code
  * - Migrated Cluster dialog broadcast switch from `ActionRow` + `Switch` to `adw::SwitchRow`
  * - Migrated Export dialog switches from `ActionRow` + `Switch` to `adw::SwitchRow`
  * - Enhanced About dialog with custom links and credits:
  *   - Added short description under logo
  *   - Added Releases, Details, and License links
  *   - Added "Made with ❤️ in Ukraine 🇺🇦" to Acknowledgments
  *   - Added legal sections for key dependencies (GTK4, IronRDP, VTE)
  * - Migrated group dialogs from `ActionRow` + `Entry` to `adw::EntryRow`:
  *   - New Group dialog
  *   - Edit Group dialog
  *   - Rename dialog (connections and groups)
  * - Migrated Settings UI tab from `SpinButton` to `adw::SpinRow` for session max age
  * - Added `alert.rs` helper module for modern `adw::AlertDialog` API
  * - Migrated all `gtk4::AlertDialog` usages to `adw::AlertDialog` via helper module (50+ usages across 12 files)
  * - Updated documentation (INSTALL.md, USER_GUIDE.md) for version 0.5.9
  *   - Connection dialog (`dialogs/connection.rs`)
  *   - SSH Agent passphrase dialog (`dialogs/settings/ssh_agent_tab.rs`)
  * - Enabled libadwaita `v1_4` feature for `adw::ToolbarView` support
  * - Replaced hardcoded CSS colors with Adwaita semantic colors:
  *   - Status indicators now use `@success_color`, `@warning_color`, `@error_color`
  *   - Toast notifications use semantic colors for success/warning states
  *   - Form validation styles use semantic colors
  * - Reduced global clippy suppressions in `main.rs` from 30+ to 5 essential ones
  * - Replaced `unwrap()` calls in Cairo drawing code with proper error handling (`if let Ok(...)`)
  * - Cairo text rendering in embedded RDP/VNC widgets no longer panics on font errors

-------------------------------------------------------------------
Sun Jan 11 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.9

- Update to version 0.5.9
  * - Migrated Settings dialog from deprecated `PreferencesWindow` to `PreferencesDialog` (libadwaita 1.5+)
  * - Updated libadwaita feature from `v1_4` to `v1_5` for PreferencesDialog support
  * - Updated workspace dependencies:
  *   - `uuid` 1.6 → 1.11
  *   - `regex` 1.10 → 1.11
  *   - `proptest` 1.4 → 1.6
  *   - `tempfile` 3.24 → 3.15
  *   - `zip` 2.1 → 2.2
  * - Removed unnecessary `macos_kqueue` feature from `notify` crate
  * - Note: `ksni` 0.3.3 and `sspi`/`picky-krb` kept at current versions due to `zvariant`/`rand_core` version conflicts
  * - Migrated all dialogs to use `adw::ToolbarView` for proper libadwaita layout:
  * - Migrated Template dialog to modern libadwaita patterns:
  *   - Basic tab: `adw::PreferencesGroup` with `adw::ActionRow` for template info and default values
  *   - SSH options: `adw::PreferencesGroup` with Authentication, Connection, and Session groups
  *   - RDP options: Display, Features, and Advanced groups with dynamic visibility (resolution/color hidden in Embedded mode)
  *   - VNC options: Display, Encoding, Features, and Advanced groups
  *   - SPICE options: Security, Features, and Performance groups with dynamic visibility (TLS-related fields)
  *   - Zero Trust options: Provider selection with `adw::ActionRow`, provider-specific groups for all 10 providers
  * - Fixed missing icon for "Embedded SSH terminals" feature on Welcome page (`display-symbolic` → `utilities-terminal-symbolic`)
  * - Fixed missing Quick Connect header bar icon (`network-transmit-symbolic` → `go-jump-symbolic`)
  * - Fixed missing Split Horizontal header bar icon (`view-paged-symbolic` → `object-flip-horizontal-symbolic`)
  * - Fixed missing Interface tab icon in Settings (`preferences-desktop-appearance-symbolic` → `applications-graphics-symbolic`)
  * - Fixed KeePass Settings: Browse buttons for Database File and Key File now open file chooser dialogs
  * - Fixed KeePass Settings: Dynamic visibility for Authentication fields (password/key file rows show/hide based on switches)
  * - Fixed KeePass Settings: Added "Check" button to verify database connection
  * - Fixed KeePass Settings: `verify_kdbx_credentials` now correctly handles key-file-only authentication with `--no-password` flag
  * - Fixed SSH Agent Settings: "Start Agent" button now properly starts ssh-agent and updates UI
  * - Fixed Zero Trust (AWS SSM) connection status icon showing as failed despite successful connection
  * - Migrated About dialog from `gtk4::AboutDialog` to `adw::AboutDialog` for modern GNOME look
  * - Migrated Password Generator dialog switches from `ActionRow` + `Switch` to `adw::SwitchRow` for cleaner code
  * - Migrated Cluster dialog broadcast switch from `ActionRow` + `Switch` to `adw::SwitchRow`
  * - Migrated Export dialog switches from `ActionRow` + `Switch` to `adw::SwitchRow`
  * - Enhanced About dialog with custom links and credits:
  *   - Added short description under logo
  *   - Added Releases, Details, and License links
  *   - Added "Made with ❤️ in Ukraine 🇺🇦" to Acknowledgments
  *   - Added legal sections for key dependencies (GTK4, IronRDP, VTE)
  * - Migrated group dialogs from `ActionRow` + `Entry` to `adw::EntryRow`:
  *   - New Group dialog
  *   - Edit Group dialog
  *   - Rename dialog (connections and groups)
  * - Migrated Settings UI tab from `SpinButton` to `adw::SpinRow` for session max age
  * - Added `alert.rs` helper module for modern `adw::AlertDialog` API
  * - Migrated all `gtk4::AlertDialog` usages to `adw::AlertDialog` via helper module (50+ usages across 12 files)
  * - Updated documentation (INSTALL.md, USER_GUIDE.md) for version 0.5.9
  *   - Connection dialog (`dialogs/connection.rs`)
  *   - SSH Agent passphrase dialog (`dialogs/settings/ssh_agent_tab.rs`)
  * - Enabled libadwaita `v1_4` feature for `adw::ToolbarView` support
  * - Replaced hardcoded CSS colors with Adwaita semantic colors:
  *   - Status indicators now use `@success_color`, `@warning_color`, `@error_color`
  *   - Toast notifications use semantic colors for success/warning states
  *   - Form validation styles use semantic colors
  * - Reduced global clippy suppressions in `main.rs` from 30+ to 5 essential ones
  * - Replaced `unwrap()` calls in Cairo drawing code with proper error handling (`if let Ok(...)`)
  * - Cairo text rendering in embedded RDP/VNC widgets no longer panics on font errors

-------------------------------------------------------------------
Wed Jan 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.8

- Update to version 0.5.8
  * - Migrated Connection Dialog tabs to libadwaita components (GNOME HIG compliance):
  *   - Display tab: `adw::PreferencesGroup` + `adw::ActionRow` for window mode settings
  *   - Logging tab: `adw::PreferencesGroup` + `adw::ActionRow` for session logging configuration
  *   - WOL tab: `adw::PreferencesGroup` + `adw::ActionRow` for Wake-on-LAN settings
  *   - Variables tab: `adw::PreferencesGroup` for local variable management
  *   - Automation tab: `adw::PreferencesGroup` for expect rules configuration
  *   - Tasks tab: `adw::PreferencesGroup` for pre/post connection tasks
  *   - Custom Properties tab: `adw::PreferencesGroup` for metadata fields
  * - All migrated tabs now use `adw::Clamp` for proper content width limiting
  * - Removed deprecated `gtk4::Frame` usage in favor of `adw::PreferencesGroup`
  * - Settings dialog now loads asynchronously for faster startup:
  *   - Clients tab: CLI detection runs in background with spinner placeholders
  *   - SSH Agent tab: Agent status and key lists load asynchronously
  *   - Available SSH keys scan runs in background
  * - Cursor Shape/Blink toggle buttons in Terminal settings now have uniform width (240px)
  * - KeePassXC debug output now uses `tracing::debug!` instead of `eprintln!`
  * - KeePass entry path format changed to `RustConn/{name} ({protocol})` to support same name for different protocols
  * - Updated dependencies: indexmap 2.12.1→2.13.0, syn 2.0.113→2.0.114, zerocopy 0.8.32→0.8.33, zmij 1.0.10→1.0.12
  * - Note: sspi and picky-krb kept at previous versions due to rand_core compatibility issues
  * - SSH Agent "Add Key" button now opens file chooser to select any SSH key file
  * - SSH Agent "+" buttons in Available Key Files list now load keys with passphrase dialog
  * - SSH Agent "Remove Key" (trash) button now actually removes keys from the agent
  * - SSH Agent Refresh button updates both loaded keys and available keys lists
  * - VNC password dialog now correctly loads password from KeePass using consistent lookup key (name or host)
  * - KeePass passwords for connections with same name but different protocols no longer overwrite each other
  * - Welcome tab now displays correctly when switching back from connections (fallback to first pane if none focused)

-------------------------------------------------------------------
Wed Jan 07 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.7

- Update to version 0.5.7
  * - Updated dependencies: h2 0.4.12→0.4.13, proc-macro2 1.0.104→1.0.105, quote 1.0.42→1.0.43, rsa 0.9.9→0.9.10, rustls 0.23.35→0.23.36, serde_json 1.0.148→1.0.149, url 2.5.7→2.5.8, zerocopy 0.8.31→0.8.32
  * - Note: sspi and picky-krb kept at previous versions due to rand_core compatibility issues
  * - Test button in New Connection dialog now works correctly (fixed async runtime issue with GTK)

-------------------------------------------------------------------
Mon Jan 05 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.6

- Update to version 0.5.6

-------------------------------------------------------------------
Sat Jan 03 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.5

- Update to version 0.5.5
  * - Kiro steering rules for development workflow:
  *   - `commit-checklist.md` - pre-commit cargo fmt/clippy checks
  *   - `release-checklist.md` - version files and packaging verification
  * - Rename action in sidebar context menu for both connections and groups
  * - Double-click on import source to start import
  * - Double-click on template to create connection from it
  * - Group dropdown in Connection dialog Basic tab for selecting parent group
  * - Info tab for viewing connection details (like Asbru-CM) - replaces popover with full tab view
  * - Default alphabetical sorting for connections and groups with drag-drop reordering support
  * - Manage Templates dialog: "Create" button now creates connection from template, "Create Template" button creates new template
  * - View Details action now opens Info tab instead of popover
  * - Sidebar now uses sorted rebuild for consistent alphabetical ordering
  * - All dialogs now follow GNOME HIG button layout: Close/Cancel on left, Action on right
  * - Removed window close button (X) from all dialogs - use explicit Close/Cancel buttons instead
  * - Flatpak manifest version references updated correctly
  * - Connection group_id preserved when editing connections (no longer falls to root)
  * - Import dialog now returns to source selection when file chooser is cancelled
  * - Drag-and-drop to groups now works correctly (connections can be dropped into groups)

-------------------------------------------------------------------
Sat Jan 03 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.5

- Update to version 0.5.5
  * - Kiro steering rules for development workflow:
  *   - `commit-checklist.md` - pre-commit cargo fmt/clippy checks
  *   - `release-checklist.md` - version files and packaging verification
  * - Rename action in sidebar context menu for both connections and groups
  * - Double-click on import source to start import
  * - Double-click on template to create connection from it
  * - Group dropdown in Connection dialog Basic tab for selecting parent group
  * - Info tab for viewing connection details (like Asbru-CM) - replaces popover with full tab view
  * - Default alphabetical sorting for connections and groups with drag-drop reordering support
  * - Manage Templates dialog: "Create" button now creates connection from template, "Create Template" button creates new template
  * - View Details action now opens Info tab instead of popover
  * - Sidebar now uses sorted rebuild for consistent alphabetical ordering
  * - All dialogs now follow GNOME HIG button layout: Close/Cancel on left, Action on right
  * - Removed window close button (X) from all dialogs - use explicit Close/Cancel buttons instead
  * - Flatpak manifest version references updated correctly
  * - Connection group_id preserved when editing connections (no longer falls to root)
  * - Import dialog now returns to source selection when file chooser is cancelled
  * - Drag-and-drop to groups now works correctly (connections can be dropped into groups)

-------------------------------------------------------------------
Sat Jan 03 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.5

- Update to version 0.5.5
  * - Kiro steering rules for development workflow:
  *   - `commit-checklist.md` - pre-commit cargo fmt/clippy checks
  *   - `release-checklist.md` - version files and packaging verification
  * - Rename action in sidebar context menu for both connections and groups
  * - Double-click on import source to start import
  * - Double-click on template to create connection from it
  * - Group dropdown in Connection dialog Basic tab for selecting parent group
  * - Info tab for viewing connection details (like Asbru-CM) - replaces popover with full tab view
  * - Default alphabetical sorting for connections and groups with drag-drop reordering support
  * - Manage Templates dialog: "Create" button now creates connection from template, "Create Template" button creates new template
  * - View Details action now opens Info tab instead of popover
  * - Sidebar now uses sorted rebuild for consistent alphabetical ordering
  * - All dialogs now follow GNOME HIG button layout: Close/Cancel on left, Action on right
  * - Removed window close button (X) from all dialogs - use explicit Close/Cancel buttons instead
  * - Flatpak manifest version references updated correctly
  * - Connection group_id preserved when editing connections (no longer falls to root)
  * - Import dialog now returns to source selection when file chooser is cancelled
  * - Drag-and-drop to groups now works correctly (connections can be dropped into groups)

-------------------------------------------------------------------
Fri Jan 02 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.4

- Update to version 0.5.4
  * - Updated dependencies: cc, iri-string, itoa, libredox, proc-macro2, rustls-native-certs, ryu, serde_json, signal-hook-registry, syn, zeroize_derive
  * - Note: sspi and picky-krb kept at previous versions due to rand_core compatibility issues
  * - Close Tab action implementation for terminal notebook
  * - Session Restore feature with UI settings in Settings dialog:
  *   - Enable/disable session restore on startup
  *   - Option to prompt before restoring sessions
  *   - Configurable maximum session age (hours)
  *   - Sessions saved on app close, restored on next startup
  * - `AppState` methods for session restore: `save_active_sessions()`, `get_sessions_to_restore()`, `clear_saved_sessions()`
  * - `TerminalNotebook.get_all_sessions()` method for collecting active sessions
  * - Password Generator feature:
  *   - New `password_generator` module in `rustconn-core` with secure password generation using `ring::rand`
  *   - Configurable character sets: lowercase, uppercase, digits, special, extended special
  *   - Option to exclude ambiguous characters (0, O, l, 1, I)
  *   - Password strength evaluation with entropy calculation
  *   - Crack time estimation based on entropy
  *   - Password Generator dialog accessible from Tools menu
  *   - Real-time strength indicator with level bar
  *   - Copy to clipboard functionality
  * - Advanced session logging modes with three configurable options:
  *   - Activity logging (default) - tracks session activity changes
  *   - User input logging - captures commands typed by user
  *   - Terminal output logging - records full terminal transcript
  *   - Settings UI with checkboxes in Session Logging tab
  * - Royal TS (.rtsz XML) import support:
  *   - SSH, RDP, and VNC connection import
  *   - Folder hierarchy preservation as connection groups
  *   - Credential reference resolution (username/domain)
  *   - Trash folder filtering (deleted connections are skipped)
  *   - Accessible via Import dialog
  * - Royal TS (.rtsz XML) export support:
  *   - SSH, RDP, and VNC connection export
  *   - Folder hierarchy export as Royal TS folders
  *   - Username and domain export for credentials
  *   - Accessible via Export dialog
  * - RDPDR directory change notifications with inotify integration:
  *   - `dir_watcher` module using `notify` crate for file system monitoring
  *   - `FileAction` enum matching MS-FSCC `FILE_ACTION_*` constants
  *   - `CompletionFilter` struct with MS-SMB2 `FILE_NOTIFY_CHANGE_*` flags
  *   - `DirectoryWatcher` with recursive/non-recursive watch support
  *   - `build_file_notify_info()` for MS-FSCC 2.4.42 `FILE_NOTIFY_INFORMATION` structures
  *   - Note: RDP responses pending ironrdp upstream support for `ClientDriveNotifyChangeDirectoryResponse`
  * - Close Tab keyboard shortcut (Ctrl+W) now properly closes active session tab

-------------------------------------------------------------------
Fri Jan 02 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.4

- Update to version 0.5.4
  * - Updated dependencies: cc, iri-string, itoa, libredox, proc-macro2, rustls-native-certs, ryu, serde_json, signal-hook-registry, syn, zeroize_derive
  * - Note: sspi and picky-krb kept at previous versions due to rand_core compatibility issues
  * - Close Tab action implementation for terminal notebook
  * - Session Restore feature with UI settings in Settings dialog:
  *   - Enable/disable session restore on startup
  *   - Option to prompt before restoring sessions
  *   - Configurable maximum session age (hours)
  *   - Sessions saved on app close, restored on next startup
  * - `AppState` methods for session restore: `save_active_sessions()`, `get_sessions_to_restore()`, `clear_saved_sessions()`
  * - `TerminalNotebook.get_all_sessions()` method for collecting active sessions
  * - Password Generator feature:
  *   - New `password_generator` module in `rustconn-core` with secure password generation using `ring::rand`
  *   - Configurable character sets: lowercase, uppercase, digits, special, extended special
  *   - Option to exclude ambiguous characters (0, O, l, 1, I)
  *   - Password strength evaluation with entropy calculation
  *   - Crack time estimation based on entropy
  *   - Password Generator dialog accessible from Tools menu
  *   - Real-time strength indicator with level bar
  *   - Copy to clipboard functionality
  * - Advanced session logging modes with three configurable options:
  *   - Activity logging (default) - tracks session activity changes
  *   - User input logging - captures commands typed by user
  *   - Terminal output logging - records full terminal transcript
  *   - Settings UI with checkboxes in Session Logging tab
  * - Royal TS (.rtsz XML) import support:
  *   - SSH, RDP, and VNC connection import
  *   - Folder hierarchy preservation as connection groups
  *   - Credential reference resolution (username/domain)
  *   - Trash folder filtering (deleted connections are skipped)
  *   - Accessible via Import dialog
  * - Royal TS (.rtsz XML) export support:
  *   - SSH, RDP, and VNC connection export
  *   - Folder hierarchy export as Royal TS folders
  *   - Username and domain export for credentials
  *   - Accessible via Export dialog
  * - RDPDR directory change notifications with inotify integration:
  *   - `dir_watcher` module using `notify` crate for file system monitoring
  *   - `FileAction` enum matching MS-FSCC `FILE_ACTION_*` constants
  *   - `CompletionFilter` struct with MS-SMB2 `FILE_NOTIFY_CHANGE_*` flags
  *   - `DirectoryWatcher` with recursive/non-recursive watch support
  *   - `build_file_notify_info()` for MS-FSCC 2.4.42 `FILE_NOTIFY_INFORMATION` structures
  *   - Note: RDP responses pending ironrdp upstream support for `ClientDriveNotifyChangeDirectoryResponse`
  * - Close Tab keyboard shortcut (Ctrl+W) now properly closes active session tab

-------------------------------------------------------------------
Fri Jan 02 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.4

- Update to version 0.5.4
  * - Updated dependencies: cc, iri-string, itoa, libredox, proc-macro2, rustls-native-certs, ryu, serde_json, signal-hook-registry, syn, zeroize_derive
  * - Note: sspi and picky-krb kept at previous versions due to rand_core compatibility issues
  * - Close Tab action implementation for terminal notebook
  * - Session Restore feature with UI settings in Settings dialog:
  *   - Enable/disable session restore on startup
  *   - Option to prompt before restoring sessions
  *   - Configurable maximum session age (hours)
  *   - Sessions saved on app close, restored on next startup
  * - `AppState` methods for session restore: `save_active_sessions()`, `get_sessions_to_restore()`, `clear_saved_sessions()`
  * - `TerminalNotebook.get_all_sessions()` method for collecting active sessions
  * - Password Generator feature:
  *   - New `password_generator` module in `rustconn-core` with secure password generation using `ring::rand`
  *   - Configurable character sets: lowercase, uppercase, digits, special, extended special
  *   - Option to exclude ambiguous characters (0, O, l, 1, I)
  *   - Password strength evaluation with entropy calculation
  *   - Crack time estimation based on entropy
  *   - Password Generator dialog accessible from Tools menu
  *   - Real-time strength indicator with level bar
  *   - Copy to clipboard functionality
  * - Advanced session logging modes with three configurable options:
  *   - Activity logging (default) - tracks session activity changes
  *   - User input logging - captures commands typed by user
  *   - Terminal output logging - records full terminal transcript
  *   - Settings UI with checkboxes in Session Logging tab
  * - Royal TS (.rtsz XML) import support:
  *   - SSH, RDP, and VNC connection import
  *   - Folder hierarchy preservation as connection groups
  *   - Credential reference resolution (username/domain)
  *   - Trash folder filtering (deleted connections are skipped)
  *   - Accessible via Import dialog
  * - Royal TS (.rtsz XML) export support:
  *   - SSH, RDP, and VNC connection export
  *   - Folder hierarchy export as Royal TS folders
  *   - Username and domain export for credentials
  *   - Accessible via Export dialog
  * - RDPDR directory change notifications with inotify integration:
  *   - `dir_watcher` module using `notify` crate for file system monitoring
  *   - `FileAction` enum matching MS-FSCC `FILE_ACTION_*` constants
  *   - `CompletionFilter` struct with MS-SMB2 `FILE_NOTIFY_CHANGE_*` flags
  *   - `DirectoryWatcher` with recursive/non-recursive watch support
  *   - `build_file_notify_info()` for MS-FSCC 2.4.42 `FILE_NOTIFY_INFORMATION` structures
  *   - Note: RDP responses pending ironrdp upstream support for `ClientDriveNotifyChangeDirectoryResponse`
  * - Close Tab keyboard shortcut (Ctrl+W) now properly closes active session tab

-------------------------------------------------------------------
Thu Jan 01 2026 Anton Isaiev <totoshko88@gmail.com> - 0.5.3

- Update to version 0.5.3
  * - Connection history recording for all protocols (SSH, VNC, SPICE, RDP, ZeroTrust)
  * - "New Group" button in Group Operations Mode bulk actions bar
  * - "Reset" buttons in Connection History and Statistics dialogs (header bar)
  * - "Clear Statistics" functionality in AppState
  * - Protocol-specific tabs in Template Dialog matching Connection Dialog functionality:
  *   - SSH: auth method, key source, proxy jump, agent forwarding, startup command, custom options
  *   - RDP: client mode, resolution, color depth, audio, gateway, custom args
  *   - VNC: client mode, encoding, compression, quality, view only, scaling, clipboard
  *   - SPICE: TLS, CA cert, USB, clipboard, image compression
  *   - ZeroTrust: all 10 providers (AWS SSM, GCP IAP, Azure Bastion/SSH, OCI, Cloudflare, Teleport, Tailscale, Boundary, Generic)
  * - Connection history dialog (`HistoryDialog`) for viewing and searching session history
  * - Connection statistics dialog (`StatisticsDialog`) with success rate visualization
  * - Common embedded widget trait (`EmbeddedWidget`) for RDP/VNC/SPICE deduplication
  * - `EmbeddedConnectionState` enum for unified connection state handling
  * - `EmbeddedWidgetState` helper for managing common widget state
  * - `create_embedded_toolbar()` helper for consistent toolbar creation
  * - `draw_status_overlay()` helper for status rendering
  * - Quick Connect dialog now supports connection templates (auto-fills protocol, host, port, username)
  * - History/Statistics menu items in Tools section
  * - `AppState` methods for recording connection history (`record_connection_start`, `record_connection_end`, etc.)
  * - `ConfigManager.load_history()` and `save_history()` for history persistence
  * - Property tests for history models (`history_tests.rs`):
  *   - Entry creation, quick connect, end/fail operations
  *   - Statistics update consistency, success rate bounds
  *   - Serialization round-trips for all history types
  * - Property tests for session restore models (`session_restore_tests.rs`):
  *   - `SavedSession` creation and serialization
  *   - `SessionRestoreSettings` configuration and serialization
  *   - Round-trip tests with multiple saved sessions
  * - Quick Connect now supports RDP and VNC protocols (previously only SSH worked)
  * - RDP Quick Connect uses embedded IronRDP widget with state callbacks and reconnect support
  * - VNC Quick Connect uses native VncSessionWidget with full embedded mode support
  * - Quick Connect password field for RDP and VNC connections
  * - Connection history model (`ConnectionHistoryEntry`) for tracking session history
  * - Connection statistics model (`ConnectionStatistics`) with success rate, duration tracking
  * - History settings (`HistorySettings`) with configurable retention and max entries
  * - Session restore settings (`SessionRestoreSettings`) for restoring sessions on startup
  * - `SavedSession` model for persisting session state across restarts
  * - UI Unification: All dialogs now use consistent 750×500px dimensions
  * - Removed duplicate Close/Cancel buttons from all dialogs (window X button is sufficient)
  * - Renamed action buttons for consistency:
  *   - "New X" → "Create" (moved to left side of header bar)
  *   - "Quick Connect" → "Connect" in Quick Connect dialog
  *   - "Clear History/Statistics" → "Reset" (moved to header bar with destructive style)
  * - Create Connection now always opens blank New Connection dialog (removed template picker)
  * - Templates can be used from Manage Templates dialog
  * - Button styling: All action buttons (Create, Save, Import, Export) use `suggested-action` CSS class
  * - When editing existing items, button label changes from "Create" to "Save"
  * - Extracted common embedded widget patterns to `embedded_trait.rs`
  * - `show_quick_connect_dialog()` now accepts optional `SharedAppState` for template access
  * - Refactored `terminal.rs` into modular structure (`rustconn/src/terminal/`):
  *   - `mod.rs` - Main `TerminalNotebook` implementation
  *   - `types.rs` - `TabDisplayMode`, `TerminalSession`, `SessionWidgetStorage`, `TabLabelWidgets`
  *   - `config.rs` - Terminal appearance and behavior configuration
  *   - `tabs.rs` - Tab creation, display modes, overflow menu management
  * - `EmbeddedSpiceWidget` now implements `EmbeddedWidget` trait for unified interface
  * - Updated `gtk4` dependency from 0.10 to 0.10.2
  * - Improved picky dependency documentation with monitoring notes for future ironrdp compatibility
  * - `AppSettings` now includes `history` field for connection history configuration
  * - `UiSettings` now includes `session_restore` field for session restore configuration
  * - Connection History "Connect" button now actually connects (was only logging)
  * - History statistics labels (Total/Successful/Failed) now update correctly
  * - Statistics dialog content no longer cut off (increased size)
  * - Quick Connect RDP/VNC no longer shows placeholder tabs — actual connections are established

-------------------------------------------------------------------
Sun Dec 28 2025 Anton Isaiev <totoshko88@gmail.com> - 0.5.2

- Update to version 0.5.2
  * - `wayland-native` feature flag with `gdk4-wayland` integration for improved Wayland detection
  * - Sidebar integration with lazy loading and virtual scrolling APIs
  * - Improved display server detection using GDK4 Wayland bindings when available
  * - Refactored `window.rs` into modular structure (reduced from 7283 to 2396 lines, -67%):
  *   - `window_types.rs` - Type aliases and `get_protocol_string()` utility
  *   - `window_snippets.rs` - Snippet management methods
  *   - `window_templates.rs` - Template management methods
  *   - `window_sessions.rs` - Session management methods
  *   - `window_groups.rs` - Group management dialogs (move to group, error toast)
  *   - `window_clusters.rs` - Cluster management methods
  *   - `window_connection_dialogs.rs` - New connection/group dialogs, template picker, import dialog
  *   - `window_sorting.rs` - Sorting and drag-drop reordering operations
  *   - `window_operations.rs` - Connection operations (delete, duplicate, copy, paste, reload)
  *   - `window_edit_dialogs.rs` - Edit dialogs (edit connection, connection details, edit group, quick connect)
  *   - `window_rdp_vnc.rs` - RDP and VNC connection methods with password dialogs
  *   - `window_protocols.rs` - Protocol-specific connection handlers (SSH, VNC, SPICE, ZeroTrust)
  *   - `window_document_actions.rs` - Document management actions (new, open, save, close, export, import)
  * - Refactored `embedded_rdp.rs` into modular structure (reduced from 4234 to 2803 lines, -34%):
  *   - `embedded_rdp_types.rs` - Error types, enums, config structs, callback types
  *   - `embedded_rdp_buffer.rs` - PixelBuffer and WaylandSurfaceHandle
  *   - `embedded_rdp_launcher.rs` - SafeFreeRdpLauncher with Qt warning suppression
  *   - `embedded_rdp_thread.rs` - FreeRdpThread, ClipboardFileTransfer, FileDownloadState
  *   - `embedded_rdp_detect.rs` - FreeRDP detection utilities (detect_wlfreerdp, detect_xfreerdp, is_ironrdp_available)
  *   - `embedded_rdp_ui.rs` - UI helpers (clipboard buttons, Ctrl+Alt+Del, draw_status_overlay)
  * - Refactored `sidebar.rs` into modular structure (reduced from 2787 to 1937 lines, -30%):
  *   - `sidebar_types.rs` - TreeState, SessionStatusInfo, DropPosition, DropIndicator, SelectionModelWrapper, DragDropData
  *   - `sidebar_ui.rs` - UI helper functions (popovers, context menus, button boxes, protocol icons)
  * - Refactored `embedded_vnc.rs` into modular structure (reduced from 2304 to 1857 lines, -19%):
  *   - `embedded_vnc_types.rs` - Error types, VncConnectionState, VncConfig, VncPixelBuffer, VncWaylandSurface, callback types
  * - Tab icons now match sidebar icons for all protocols (SSH, RDP, VNC, SPICE, ZeroTrust providers)
  * - SSH and ZeroTrust sessions now show correct protocol-specific icons in tabs
  * - Cluster list not refreshing after deleting a cluster (borrow conflict in callback)
  * - Snippet dialog Save button not clickable (unreliable widget tree traversal replaced with direct reference)
  * - Template dialog not showing all fields (missing vexpand on notebook and scrolled window)
  * - Extracted coordinate transformation utilities to `embedded_rdp_ui.rs` and `embedded_vnc_ui.rs`
  * - Added `transform_widget_to_rdp()`, `gtk_button_to_rdp_mask()`, `gtk_button_to_rdp_button()` helpers
  * - Added `transform_widget_to_vnc()`, `gtk_button_to_vnc_mask()` helpers
  * - Reduced code duplication in mouse input handlers (4 duplicate blocks → 1 shared function)
  * - Added unit tests for coordinate transformation and button conversion functions
  * - Made RDP event polling interval configurable via `RdpConfig::polling_interval_ms` (default 16ms = ~60 FPS)
  * - Added `RdpConfig::with_polling_interval()` builder method for custom polling rates
  * - CI: Added `libadwaita-1-dev` dependency to all build jobs
  * - CI: Added dedicated property tests job for better test visibility
  * - CI: Consolidated OBS publish workflow into release workflow
  * - CI: Auto-generate OBS changelog from CHANGELOG.md during release
  * - Added `#![warn(missing_docs)]` and documentation for public APIs in `rustconn-core`

-------------------------------------------------------------------
Sat Dec 28 2025 Anton Isaiev <totoshko88@gmail.com> - 0.5.1

- Update to version 0.5.1
  * CLI: Wake-on-LAN command (wol) - send magic packets by MAC or connection name
  * CLI: Snippet management commands (snippet list/show/add/delete/run)
  * CLI: Group management commands (group list/show/create/delete/add-connection/remove-connection)
  * CLI: Connection list filters (--group, --tag) for list command
  * CLI: Native format (.rcn) support for import/export
  * Search debouncing with visual spinner indicator (100ms delay)
  * Pre-search state preservation (expanded groups, scroll position)
  * Clipboard file transfer UI for embedded RDP sessions
  * Dead code cleanup with targeted #[allow(dead_code)] annotations
  * Refactored export dialog to eliminate code duplication

-------------------------------------------------------------------
Sat Dec 27 2025 Anton Isaiev <totoshko88@gmail.com> - 0.5.0

- Update to version 0.5.0
  * RDP clipboard file transfer support (CF_HDROP format)
  * RDPDR directory change notifications and file locking
  * Native SPICE protocol embedding using spice-client crate 0.2.0
  * Real-time connection status indicators in sidebar
  * Custom cursors in RDP sessions
  * Full Expect automation engine integration
  * Terminal context menu and keyboard shortcuts
  * Performance: lock-free audio, optimized search, cached tokio runtime
  * Fixed SSH Agent key discovery for all private key formats
  * Fixed system tray menu intermittent issues
  * Updated thiserror from 1.0 to 2.0
  * Added ALSA dependency for RDP audio support
  * Updated MSRV to 1.87

-------------------------------------------------------------------
Thu Dec 25 2025 Anton Isaiev <totoshko88@gmail.com> - 0.4.2

- Update to version 0.4.2
  * Fixed Asbru-CM import for installed configuration (environments key)
  * Fixed application icon resolution for all installation scenarios
  * Extended icon theme search paths

-------------------------------------------------------------------
Thu Dec 25 2025 Anton Isaiev <totoshko88@gmail.com> - 0.4.1

- Update to version 0.4.1
  * IronRDP audio backend (RDPSND) with PCM format support
  * Optional rdp-audio feature for audio playback via cpal
  * Bidirectional clipboard improvements for embedded RDP
  * Updated MSRV to 1.86
  * Updated dependencies: tempfile 3.24, criterion 0.8, cpal 0.17

-------------------------------------------------------------------
Tue Dec 24 2025 Anton Isaiev <totoshko88@gmail.com> - 0.4.0

- Update to version 0.4.0
  * Zero Trust: Improved UI by hiding irrelevant fields

-------------------------------------------------------------------
Mon Dec 23 2025 Anton Isaiev <totoshko88@gmail.com> - 0.3.1

- Update to version 0.3.1
  * Code cleanup: fixed all Clippy warnings (pedantic, nursery)
  * Applied rustfmt formatting across all crates
  * Added Deactivation-Reactivation sequence handling for RDP sessions
  * Removed sensitive clipboard debug logging (security improvement)

-------------------------------------------------------------------
Mon Dec 23 2025 Anton Isaiev <totoshko88@gmail.com> - 0.3.0

- Update to version 0.3.0
  * IronRDP clipboard integration (bidirectional copy/paste)
  * IronRDP shared folders (RDPDR) support
  * RemoteFX codec for better RDP image quality
  * Migrated IronRDP from GitHub to crates.io (v0.11)

-------------------------------------------------------------------
Mon Dec 23 2024 Anton Isaiev <totoshko88@gmail.com> - 0.2.0

- Update to version 0.2.0
  * Tree view state persistence (expanded/collapsed folders saved)
  * Native format (.rcn) import/export with proper group hierarchy
  * Fixed RDP embedded mode window sizing
  * Updated dependencies: ksni 0.3, resvg 0.45, dirs 6.0, criterion 0.6

-------------------------------------------------------------------
Sun Dec 22 2024 Anton Isaiev <totoshko88@gmail.com> - 0.1.0

- Initial release 0.1.0
  * GTK4 GUI for managing remote connections
  * SSH support with embedded VTE terminal
  * RDP support via FreeRDP
  * VNC support via TigerVNC
  * SPICE support via virt-viewer
  * Zero Trust providers (AWS SSM, GCP IAP, Azure Bastion, OCI Bastion)
  * Connection groups and tags
  * Import/export (Remmina, Asbru-CM, SSH config, Ansible)
  * Credential backends (libsecret, KeePassXC)
  * Session logging
  * Command snippets
  * Wake-on-LAN
openSUSE Build Service is sponsored by