Commit Graph

34 Commits

Author SHA1 Message Date
Vantz Stockwell
163af456b4 fix: SSH password prompt on auth failure, version from Go backend, visible errors
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m5s
- 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>
2026-03-17 11:38:08 -04:00
Vantz Stockwell
b46c20b0d0 feat: wire all remaining stubs — settings, SFTP, RDP, credentials, FreeRDP callbacks
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m4s
Four-agent parallel deployment:

1. Settings persistence — all 5 settings wired to SettingsService.Set/Get,
   theme picker persists, update check calls real UpdateService, external
   links use Browser.OpenURL, SFTP file open/save calls real service,
   Quick Connect creates real connection + session, exit uses Wails quit

2. SSH key management — credential dropdown in ConnectionEditDialog,
   collapsible "Add New Credential" panel with password/SSH key modes,
   CredentialService proxied through WraithApp (vault-locked guard),
   new CreateSSHKeyCredential method for atomic key+credential creation

3. RDP frontend wiring — useRdp.ts calls real RDPGetFrame/SendMouse/
   SendKey/SendClipboard via Wails bindings, ConnectRDP on WraithApp
   resolves credentials and builds RDPConfig, session store handles
   RDP protocol, frame pipeline uses polling at 30fps

4. FreeRDP3 callback registration — PostConnect and BitmapUpdate callbacks
   via syscall.NewCallback, GDI mode for automatic frame decoding,
   freerdp_context_new() call added, settings/input/context pointers
   extracted from struct offsets, BGRA→RGBA channel swap in frame copy,
   event loop fixed to pass context not instance

11 files changed. Zero build errors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 11:25:03 -04:00
Vantz Stockwell
df23cecdbd fix: wire connection CRUD, add Group+/Host+ buttons, fix vault stubs
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m5s
- Delete connection/group now calls real Go backend (was local array splice)
- Duplicate connection calls ConnectionService.CreateConnection
- Rename group calls new ConnectionService.RenameGroup method
- Added Group+ and Host+ buttons to sidebar header
- Vault change password wired to real unlock/create flow
- Export/import vault shows helpful path info instead of stub alert

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 11:08:40 -04:00
Vantz Stockwell
5704923b01 chore: add wraith-logo.ico for installer and shortcuts
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m4s
2026-03-17 10:55:14 -04:00
Vantz Stockwell
2cfb2c0b3b fix: use wraith-logo.ico for installer icon and desktop shortcuts
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 43s
Replaces default NSIS icon with the Wraith ghost logo. Icon included
in install directory for Start Menu and Desktop shortcut references.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:51:06 -04:00
Vantz Stockwell
8572e6e7ea fix: wire SSH/SFTP/terminal to real Go backend — kill all stubs
Critical path wired end-to-end:
- ConnectSSH on WraithApp resolves credentials from vault, builds auth methods
- SSH output handler emits Wails events (base64) to frontend
- useTerminal.ts forwards keystrokes to SSHService.Write, resize to SSHService.Resize
- useTerminal.ts listens for ssh:data:{sessionId} events and writes to xterm.js
- session.store.ts connect() calls real Go ConnectSSH, not mock
- useSftp.ts calls real SFTPService.List instead of hardcoded mock data
- SFTP client auto-registered on SSH connection via pkg/sftp
- DisconnectSession cleans up both SSH and SFTP

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:49:21 -04:00
Vantz Stockwell
e5c69106c5 fix: wire auto-updater to real Go backend — check, download, install via Wails bindings
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m3s
2026-03-17 10:30:09 -04:00
Vantz Stockwell
75afa70155 fix: OAuth redirect URI must use localhost not 127.0.0.1 + wire vault/connections/import to Go backend
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m4s
2026-03-17 10:28:48 -04:00
Vantz Stockwell
a1dce82d99 fix: wire vault persistence, connection loading, and MobaXterm import to real Go backend
Replace all TODO stubs in frontend stores with real Wails Call.ByName
bindings. The app store now calls WraithApp.IsFirstRun/CreateVault/Unlock
so vault state persists across launches. The connection store loads from
ConnectionService.ListConnections/ListGroups instead of hardcoded mock
data. The import dialog calls a new WraithApp.ImportMobaConf method that
parses the file, creates groups and connections in SQLite, and stores
host keys. ConnectionEditDialog also uses real Go CRUD calls. MainLayout
loads connections on mount after vault unlock.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:27:50 -04:00
Vantz Stockwell
fbd2fd4f80 feat: wire real Claude API — OAuth login + live chat via Wails bindings
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m2s
Replace mock responses in the XO copilot panel with real Wails binding
calls to the Go AIService backend:

- StartLogin now opens the browser via pkg/browser.OpenURL
- SendMessage returns ChatResponse (text + tool call results) instead of
  bare error, fixing the tool-call accumulation bug in messageLoop
- Add GetModel/SetModel methods for frontend model switching
- Frontend useCopilot composable calls Go via Call.ByName from
  @wailsio/runtime, with conversation auto-creation, auth checks, and
  error display in the chat panel
- Store defaults to isAuthenticated=false; panel checks auth on mount
- CopilotSettings syncs model changes and logout to the backend

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:22:07 -04:00
Vantz Stockwell
f22fbe14fa feat: auto-updater — check Gitea packages for new versions, download + install
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m5s
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>
2026-03-17 10:11:50 -04:00
Vantz Stockwell
d07ac7ce3b fix: hide console window (-H windowsgui) + wire settings/import/edit dialogs
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m5s
- Add -H windowsgui ldflags so wraith.exe launches without a terminal
- Wire Settings gear button to new SettingsModal component
- Wire Import dialog to File menu and Command Palette
- Wire Connection Edit dialog to File menu, Command Palette, and context menu
- Add File menu to toolbar (New Connection, Import, Settings, Exit)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:03:56 -04:00
Vantz Stockwell
473a25cf2a fix: wire settings modal, import dialog, and connection edit into the UI
- Settings button (gear icon) now opens SettingsModal with General, Terminal, Vault, About sections
- File menu added to toolbar with New Connection, Import MobaXTerm, Settings, Exit
- Command Palette "Settings" action now opens the settings modal
- Command Palette "New SSH/RDP Connection" actions now open ConnectionEditDialog
- ConnectionEditDialog mounted in MainLayout for File menu / palette access
- All Wails binding calls left as TODO with mock behavior

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 10:03:17 -04:00
Vantz Stockwell
5cdb96ffb8 fix: run makensis from dist/ so File directives find the binaries
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m2s
2026-03-17 09:47:17 -04:00
Vantz Stockwell
bd050b17c4 feat: NSIS installer — single signed setup.exe with Start Menu + Desktop shortcuts
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 48s
- Installs to Program Files\Wraith\
- Creates Start Menu and Desktop shortcuts
- Registers uninstaller in Add/Remove Programs
- Installer itself is EV code-signed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 09:45:40 -04:00
Vantz Stockwell
a9d61e2a0e fix: upgrade Node to 22 if <20 — Tailwind CSS v4 requires Node 20+
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m25s
2026-03-17 09:41:44 -04:00
Vantz Stockwell
855ee71e18 fix: stub out FreeRDP unwind/debug.c with empty implementations instead of deleting
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 36s
2026-03-17 09:40:24 -04:00
Vantz Stockwell
ad4f23dc1a fix: surgically remove unwind source from FreeRDP before build — dlfcn.h incompatible with MinGW
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 17s
2026-03-17 09:39:22 -04:00
Vantz Stockwell
64113e5eef fix: nuke cached FreeRDP source/build dirs before fresh download and configure
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 20s
2026-03-17 09:37:22 -04:00
Vantz Stockwell
695fabfeaf fix: rm -rf build dir before cmake configure — stale cache ignoring WITH_UNWIND=OFF
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 20s
2026-03-17 09:35:19 -04:00
Vantz Stockwell
c2e7f8336b fix: disable unwind/pcsc/smartcard in FreeRDP — dlfcn.h not available in MinGW
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 17s
2026-03-17 09:34:23 -04:00
Vantz Stockwell
39dc29b048 fix: force CFLAGS=-w via env + add verbose output on FreeRDP build failure
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 18s
2026-03-17 09:33:13 -04:00
Vantz Stockwell
3deb2d6be3 fix: suppress all FreeRDP warnings (-w) — we don't own this code, just need the DLLs
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 18s
2026-03-17 09:32:03 -04:00
Vantz Stockwell
1b04d3edeb fix: suppress MinGW format string warnings in FreeRDP build (-Wno-format)
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 18s
2026-03-17 09:31:17 -04:00
Vantz Stockwell
893b2350b6 fix: downgrade FreeRDP to 3.10.3 — 3.24.0 requires C11 threads.h missing from MinGW
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 26s
2026-03-17 09:30:01 -04:00
Vantz Stockwell
e39747850c fix: disable FreeRDP SDL/Windows clients — only need core libs, no C++
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 15s
2026-03-17 09:28:53 -04:00
Vantz Stockwell
04bf9b42c3 fix: build zlib + OpenSSL from source for MinGW FreeRDP cross-compile
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 32s
2026-03-17 09:27:15 -04:00
Vantz Stockwell
e5cc40df37 fix: replace awscli/SeaweedFS with Gitea package registry upload
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 46s
2026-03-17 09:22:10 -04:00
Vantz Stockwell
eda819c0fd fix: single-line git clone in CI workflow (Gitea Actions line continuation)
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 6s
2026-03-17 09:15:20 -04:00
Vantz Stockwell
7ee5321d69 feat: AI copilot backend — OAuth PKCE, Claude API streaming, 16 tools, conversations
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Has been cancelled
- OAuth PKCE flow for Max subscription auth (no API key needed)
- Claude API client with SSE streaming (Messages API v1)
- 16 tool definitions: terminal, SFTP, RDP, session management
- Tool dispatch router mapping to existing Wraith services
- Conversation manager with SQLite persistence
- Terminal output ring buffer for AI context
- RDP screenshot encoder (RGBA → JPEG with downscaling)
- Wired into Wails app as AIService

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 09:09:23 -04:00
Vantz Stockwell
be868e8172 feat: AI copilot panel — chat UI with streaming, tool visualization, OAuth settings
Add the XO copilot right-side panel with:
- Pinia store (copilot.store.ts) managing panel state, messages, streaming, and token tracking
- useCopilot composable with mock streaming (30-100ms/word) and context-aware responses
- CopilotPanel: 320px collapsible panel with header, scrollable message list, and input area
- CopilotMessage: markdown rendering (bold, code, lists) with streaming cursor animation
- CopilotToolViz: color-coded tool call cards (green=terminal, yellow=SFTP, blue=RDP)
  with pending spinner, done checkmark, expandable input/result JSON
- CopilotSettings: model selector, token usage, clear history, connect/disconnect
- MainLayout integration: ghost icon toggle in toolbar, Ctrl+Shift+K shortcut,
  CSS slide transition, content area resizes (not overlay)

All Wails AIService bindings are TODOs with mock behavior. Pure Tailwind CSS,
no external markdown library.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 09:03:33 -04:00
Vantz Stockwell
1793576030 docs: update AI copilot spec — OAuth PKCE auth against Max subscription (no API key) 2026-03-17 08:55:40 -04:00
Vantz Stockwell
1962d2c9bc docs: AI Copilot design spec — Claude as XO with terminal, SFTP, and RDP vision/input 2026-03-17 08:37:35 -04:00
Vantz Stockwell
8a096d7f7b Wraith v0.1.0 — Desktop SSH + RDP + SFTP Client
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Has been cancelled
Go + Wails v3 + Vue 3 + SQLite + FreeRDP3 (purego)
183 tests, 76 source files, 9,910 lines of code

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 08:19:29 -04:00