Add the real FreeRDP3 RDP backend that loads libfreerdp3.dll at runtime
via syscall.NewLazyDLL (no CGO required). The Windows implementation
(freerdp_windows.go) calls FreeRDP3 functions for instance lifecycle,
settings configuration, input forwarding, and event handling. A stub
(freerdp_stub.go) compiles on non-Windows platforms and returns errors,
keeping macOS/Linux development and tests working. A factory function
(freerdp_factory.go) selects the right backend based on runtime.GOOS,
and app.go now uses NewProductionBackend instead of always using mock.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implements the plugin.Importer interface to parse MobaXTerm config
exports. Extracts SSH (#109#) and RDP (#91#) sessions from Bookmarks
sections, host keys from SSH_Hostkeys, and terminal colors from the
Colors section. Passwords are intentionally skipped (encrypted).
Tested against the real config export at docs/config-export.mobaconf.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Register RDPService on WraithApp with a mock backend factory and expose
it as a Wails service in main.go so the frontend can call RDP methods
via bindings. The factory will be swapped to a FreeRDP purego backend
when running on Windows.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add RDPService with session lifecycle management (connect, disconnect,
input forwarding, frame retrieval) using an injected backend factory.
Implement MockBackend that generates animated test frames with a
blue-purple gradient, bouncing color-cycling rectangle, pulsing circle,
and grid overlay for canvas renderer verification on macOS without
FreeRDP. The real FreeRDP purego bindings are deferred to Windows.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Define the RDPBackend interface, RDPConfig, and FrameUpdate types that
abstract FreeRDP behind a pluggable backend. Add PixelBuffer for shared
RGBA frame management with partial-update support and dirty tracking.
Implement full 104-key US keyboard scancode map (JS KeyboardEvent.code
to RDP hardware scancodes) with extended-key detection helpers and
mouse event flag constants matching MS-RDPBCGR.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add SSHService, SFTPService, and CredentialService to the WraithApp
struct. SSH service uses a no-op output handler (Wails event emission
will be wired at runtime). CredentialService is created lazily after
vault unlock. Both SSH and SFTP services are registered with Wails
in main.go.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create WraithApp struct in internal/app that initializes SQLite,
runs migrations, seeds themes, and exposes vault management methods
(IsFirstRun, CreateVault, Unlock, IsUnlocked) to the frontend.
Register WraithApp, ConnectionService, ThemeService, and SettingsService
as Wails v3 bound services.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>