Two fixes:
1. Terminal font rendering: xterm.js was calling fitAddon.fit() before
fonts loaded. canvas.measureText() used a fallback font, got wrong
cell dimensions (2-3px per char instead of 8-9px), producing 200+
column terminals where text appeared as tiny dashes with colored
blocks. Fixed by waiting for document.fonts.ready before fitting.
Also prioritized Windows-native fonts (Cascadia Mono, Consolas)
in the font stack.
2. Updater download URL: tagVersion used raw release.TagName ("v0.8.3")
but CI uploads packages under stripped version ("0.8.3"). Download
URL was .../v0.8.3/wraith-v0.8.3-setup.exe but the actual package
is at .../0.8.3/wraith-0.8.3-setup.exe. Now uses latestVer (stripped).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
CI now creates a proper Gitea Release after uploading packages. The
updater queries /api/v1/repos/{owner}/{repo}/releases/latest which
requires a Release object (not just a tag). Previous tags won't have
releases — the updater will start working from this build forward.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Gitea's generic package list endpoint wasn't returning 200. Switched to
/api/v1/repos/{owner}/{repo}/releases/latest which is the standard
Gitea releases API. Download URLs still use the packages registry.
Repo is now public — no auth token needed for version checks.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Logs the raw API response body and status from Gitea package API,
plus parsed version count and current version comparison. This will
show exactly why updates aren't being detected.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ConnectSSH returns NO_CREDENTIALS error when no credential is stored
- Frontend catches auth failures and prompts for username/password
- ConnectSSHWithPassword method for ad-hoc password auth
- Version loaded from Go backend (build-time -ldflags) in settings + unlock screen
- Connection errors shown as alert() instead of silent console.error
- Added UpdateService.CurrentVersion() and WraithApp.GetVersion()
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add internal/updater package with UpdateService that queries the Gitea
generic-package API for newer releases, downloads the installer with
SHA256 verification, and launches it to apply the update. Includes
semver comparison (CompareVersions) and comprehensive test coverage
with httptest-based mock servers.
Wire UpdateService into WraithApp (app.go accepts version param) and
register as a Wails service in main.go. Frontend StatusBar shows a
blue pill notification when an update is available; SettingsModal About
section displays the current version and a "Check for Updates" button
with idle/checking/found/up-to-date/error states.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>