# OrbitHub Progress ## Milestone 0 - Restart in C++/Qt Widgets Status: Completed Delivered: - Fresh C++17/Qt6 Widgets scaffold with CMake - `ProfilesWindow` (`QMainWindow`) with search, profile list, and New/Edit/Delete controls - Double-click in Profiles opens a `SessionWindow` - `SessionWindow` (`QMainWindow`) with `QTabWidget` - Placeholder tab content showing `OrbitHub Native Surface` - `main.cpp` wiring for application startup - Cross-platform build command guide in `docs/BUILDING.md` Git: - Tag: `v0-m0-done` ## Milestone 1 - Storage and CRUD Status: Completed Delivered: - SQLite integration via Qt SQL (`QSQLITE`) - Persistent profile database bootstrap (`profiles` table) - Profiles CRUD (New / Edit / Delete) in `ProfilesWindow` - Search-backed profile listing from storage - Double-click connect opens `SessionWindow` tab with selected profile name Git: - Tag: `v0-m1-done` ## Milestone 2 - Profile Details and Connect Lifecycle Status: Completed Delivered: - SQLite schema migration for profile details (`host`, `port`, `username`, `protocol`, `auth_mode`) - New `ProfileDialog` form for New/Edit profile workflows - Profiles list now shows endpoint metadata and supports search by name or host - Connect now loads complete profile details into `SessionWindow` - Session tab lifecycle status updates (`Connecting`, `Connected`, `Failed`) via non-blocking timer flow Git: - Tag: `v0-m2-done` ## Milestone 3 - Real SSH Backend and Session Controls Status: Completed Delivered: - Backend architecture introduced (`SessionBackend` + protocol-specific implementations) - Worker-thread backend execution for connection lifecycle operations - Real SSH process backend (`ssh`) with connect/disconnect/reconnect - Unsupported protocol backend with explicit not-implemented messaging (RDP/VNC) - Session tab controls: `Connect`, `Disconnect`, `Reconnect`, `Copy Error` - Connect-time credential flow (password prompt / private-key path selection) - Session event log pane with timestamps and user-friendly error mapping - SQLite profile schema migration for `private_key_path` and `known_hosts_policy` Git: - Tag: `v0-m3-done` ## Milestone 4 - Interactive SSH Session UX Status: Completed Delivered: - Embedded interactive SSH terminal using `KodoTerm` + vendored `libvterm` - Native in-terminal typing for SSH sessions (no separate input box) - ANSI/color rendering with selectable terminal themes (`Dark`, `Light`, `Solarized Dark`) - Cross-platform SSH auth path improvements (`ssh-askpass` handling and host-key policy wiring) - Session UX simplification: auto-connect on tab open, disconnect on tab close - Tab-state indicators via tab color and state suffix (`Connecting`, `Connected`, `Disconnected`, `Failed`) - Right-click tab menu for `Disconnect`, `Reconnect`, `Theme`, and `Clear` - Collapsible events panel retained as primary diagnostics surface; inline detail/status banners removed - Terminal behavior polish: better fixed-width font selection, cursor visibility, backspace handling, and terminal-size negotiation stability Git: - Tag: `v0-m4-done` ## Milestone 5 - RDP Fully Working Status: Completed Delivered: - Added `RdpSessionBackend` and wired protocol selection so `RDP` no longer routes to unsupported backend - Pivoted RDP design to embedded-only integration (no external RDP process launches) - Implemented embedded FreeRDP client thread with connect/disconnect lifecycle and event-loop handling - Added in-window `RdpDisplayWidget` rendering surface with frame updates from FreeRDP GDI - Wired direct keyboard/mouse input from the embedded RDP surface to the backend - Added RDP connect-time password prompt flow and settings wiring (host/port/user/password, desktop size) - Added explicit profile `Domain` support for RDP auth (with `DOMAIN\username` fallback parsing) - Updated session tab/context-menu behavior so terminal-only actions are hidden on RDP tabs - Implemented dynamic in-session RDP resolution renegotiation from viewport resize events - Enabled minimal FreeRDP client-channel build (`drdynvc` + `disp`) and channel loading for runtime resize support - Added RDP profile-level security mode and performance profile options, wired into FreeRDP connection settings - Hardened RDP lifecycle handling for disconnect/reconnect/abort flows to avoid false failure states on user-initiated stops - Expanded RDP error/disconnect diagnostics with richer FreeRDP code mapping and raw disconnect detail events - Pulled FreeRDP source for integration planning and API review Git: - Tag: `v0-m5-done` ## Milestone 6 - VNC Fully Working Status: Deferred (temporarily postponed) Planned Scope: - Replace current unsupported VNC path with complete VNC implementation - Deliver usable in-app VNC session behavior aligned to SSH/RDP UX - Implement VNC connect/disconnect/reconnect lifecycle handling - Extend profile/session connect options needed by VNC - Standardize event log and error mapping behavior with SSH/RDP ## Milestone 7 - Cross-Platform Protocol Hardening Status: Planned Planned Scope: - Validate SSH/RDP/VNC workflows on Windows, Linux, and macOS - Fix platform-specific runtime/process/auth issues - Add repeatable protocol validation checklist/scripts ## Milestone 8 - Profile and Session UX Completion Status: Completed Delivered: - Added profile `tags` field to storage + schema migration and profile editor UX - Added profile `folder_path` field + nested folder/subfolder profile view mode - Added profile tree context actions (`New Folder`, `New Connection`) and drag-to-folder profile moves with persistence - Added `Help -> About OrbitHub` dialog with third-party library inventory and MIT/Apache-2.0 license links - Extended profile search to include tags/folder path and added profile sort controls (`Name`, `Protocol`, `Host`) - Persisted profile list UX preferences (`search text`, `view mode`, protocol/tag filters, `sort order`) across app restarts - Added protocol-aware profile validation/normalization for SSH/RDP/VNC (repository + dialog) - Improved profile form protocol UX hints and SSH private-key path validation - Added session events filtering and tab-context actions (`Show/Hide Events`, `Copy Events`, `Clear Events`) - Added session diagnostics QoL: severity quick-filter (`All/Warnings/Errors`) and `Export Events` action - Persisted session UI defaults (`terminal theme`, `events panel visibility`) for new tabs/windows - Added profile quick filters (`Protocol`, `Tag`) with persistence to speed profile browsing Validation: - Local build verification passed (`cmake --build build`) - No automated tests are currently configured in CTest Git: - Tag: Pending user approval (`v0-m8-done`) ## Milestone 9 - Packaging and Distribution Status: Planned Planned Scope: - Build distributable artifacts for Windows/Linux/macOS - Document runtime dependencies and install prerequisites - Add reproducible release packaging steps/scripts ## Milestone 10 - v1.0 Stabilization Status: Planned Planned Scope: - Run final regression and acceptance testing across all protocols - Resolve release-blocking defects - Finalize docs and publish v1.0 release notes/checklist