Commit Graph

58 Commits

Author SHA1 Message Date
Vantz Stockwell
02b3ee053d feat: connection status indicators + draggable tab reordering
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m52s
Status indicators:
- Session.status field tracks connected/disconnected state
- Listens for ssh:close and ssh:exit backend events
- Tab dot turns red when connection drops (green=SSH, blue=RDP, red=dead)

Draggable tabs:
- HTML5 drag-and-drop on tab buttons
- Blue left-border indicator shows drop target
- moveSession() in store reorders the sessions array

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:30:20 -04:00
Vantz Stockwell
087b00c886 ui: double copilot panel width to 640px for ultrawide displays
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m49s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:24:13 -04:00
Vantz Stockwell
37c9b46a51 fix: PTY crash — use std:🧵:spawn instead of tokio::spawn_blocking
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m49s
tokio::task::spawn_blocking panics when called without a tokio runtime
context. Sync Tauri command handlers may not have one. The PTY reader
loop is long-lived anyway — std:🧵:spawn is more correct for
persistent blocking I/O and doesn't require a runtime guard.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 21:13:42 -04:00
Vantz Stockwell
512347af5f feat: Local PTY Copilot Panel — replace Gemini stub with real terminal
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 3m6s
Ripped out the Gemini API stub (ai/mod.rs, ai_commands.rs, GeminiPanel.vue)
and replaced it with a local PTY terminal in the sidebar panel. Users select
a shell (bash/zsh/sh on Unix, PowerShell/CMD/Git Bash on Windows), launch it,
and run claude/gemini/codex or any CLI tool directly.

Backend:
- New PtyService module using portable-pty (cross-platform PTY)
- DashMap session registry (same pattern as SshService)
- spawn_blocking output loop (portable-pty reader is synchronous)
- 5 Tauri commands: list_available_shells, spawn_local_shell, pty_write,
  pty_resize, disconnect_pty

Frontend:
- Parameterized useTerminal composable: backend='ssh'|'pty'
- convertEol=false for PTY (PTY driver handles LF→CRLF)
- CopilotPanel.vue with shell selector, launch/kill, session ended prompt
- Ctrl+Shift+G toggle preserved

Tests: 87 total (5 new PTY tests), zero warnings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:43:18 -04:00
Vantz Stockwell
a845d42661 docs: Local PTY Copilot implementation plan — 9 tasks
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:38:26 -04:00
Vantz Stockwell
2d92ff806c docs: Local PTY Copilot Panel design spec
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:34:52 -04:00
Vantz Stockwell
eda36c937b fix: pure Rust EC key decryption — no openssl dependency
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 3m3s
Replaced the openssl CLI fallback with pure Rust crypto for EC private
keys in SEC1 format (-----BEGIN EC PRIVATE KEY-----). Handles PKCS#5
encrypted keys (AES-128-CBC + MD5 EVP_BytesToKey KDF) and converts to
PKCS#8 PEM that russh can parse natively.

All crypto crates (md5, aes, cbc, sec1, pkcs8) were already in the dep
tree via russh — just promoted to direct dependencies. Zero new binary
dependencies, works on Windows without openssl installed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:08:55 -04:00
Vantz Stockwell
74b9be3046 fix: remove desktop shortcut from NSIS installer by default
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Has been cancelled
Tauri's NSIS bundler creates a desktop shortcut unconditionally. Added
a POSTINSTALL hook that deletes it immediately after creation. Start
menu shortcut remains. Users who want a desktop shortcut can create
one manually.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 20:04:06 -04:00
Vantz Stockwell
f825692ecc feat: SSH key file browser — Browse button to load keys from disk
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m54s
Adds a file picker next to the Private Key textarea in the credential
dialog. Users can browse for key files (.pem, .key, id_rsa, id_ed25519,
etc.) instead of copy-pasting PEM content. Uses standard FileReader API
— no additional Tauri plugins needed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:20:00 -04:00
Vantz Stockwell
4a0c2c9790 fix: SSH key auth — handle EC/DSA keys via openssl pkey fallback
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Has been cancelled
russh only parses 4 PEM headers: OPENSSH, RSA, PKCS8, ENCRYPTED PKCS8.
EC keys (-----BEGIN EC PRIVATE KEY-----) with PKCS5 encryption silently
failed with "Could not read key".

Fix adds two fallbacks:
1. If russh can't parse the key, convert to PKCS8 via `openssl pkey`
   which handles EC, DSA, and all other OpenSSL-supported formats
2. If the input doesn't start with -----BEGIN, try reading it as a
   file path (supports ~ expansion) for keys stored on disk

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 19:18:01 -04:00
Vantz Stockwell
6e5f08fd09 docs: update CLAUDE.md test count to 82
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m54s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:34:03 -04:00
Vantz Stockwell
633087633e test: full test coverage — 82 tests across all modules, zero warnings
Added tests for 3 uncovered modules:
- db: open, migrate, idempotent migration, FK/WAL pragmas, clone shares conn
- theme: seed_builtins (7 themes), idempotent seed, get_by_name, hex color
  validation, sort ordering, case sensitivity
- rdp/input: scancode lookup, extended key detection, value extraction,
  mouse flag composition, map coverage assertion

Existing test count: 52 (vault, connections, credentials, settings, host_keys)
New tests added: 30
Total: 82 tests, all passing, zero compiler warnings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:33:36 -04:00
Vantz Stockwell
8c431d3d12 fix: SSH input deadlock — output loop held channel mutex across await
Root cause: The output reader loop held Arc<TokioMutex<Channel>> while
calling ch.wait().await. After the initial prompt rendered and the server
went idle, wait() blocked indefinitely holding the lock. ssh_write()
could never acquire the mutex to send keystrokes. Permanent deadlock.

Fix: Separated read/write paths. The output loop now owns the Channel
exclusively via tokio::select!, receiving resize/shutdown commands through
an mpsc channel. Writes go through Handle::data(channel_id, data) which
bypasses the Channel entirely — no shared mutex, no deadlock.

Also killed all compiler warnings (unused imports in rdp module).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:28:09 -04:00
Vantz Stockwell
99ecbe739e feat: RDP clipboard paste, keyboard grab default ON, frame dirty flag
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m49s
1. Clipboard paste (rdp_send_clipboard): simulates typing each character
   via scancode key press/release events. Full ASCII coverage including
   all symbols, numbers, and shifted characters. Handles 32-char
   generated passwords without manual typing.

2. Keyboard grab defaults to ON so RDP sessions accept keyboard input
   immediately without requiring the user to click the toolbar toggle.

3. Frame dirty flag: GraphicsUpdate sets an AtomicBool, get_frame only
   encodes + returns base64 when dirty (returns empty string otherwise).
   Eliminates ~8MB/frame base64 encoding on unchanged frames at 30fps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:57:16 -04:00
Vantz Stockwell
2dfe4f9d7a fix: focus terminal on mount so keyboard input works immediately
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Has been cancelled
The watch on isActive never fired on initial mount because the value
starts as true (Vue watch only triggers on changes). Added explicit
focus + fit in onMounted with a short delay for DOM readiness.
Also added @click handler on container as fallback focus mechanism.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:47:16 -04:00
Vantz Stockwell
76c5ddbfb5 fix: correct parameter name mismatches in sidebar CRUD invoke calls
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m47s
Tauri v2 matches JS keys to Rust parameter names. The frontend was
sending connectionId/groupId but Rust expects id. Fixed:
- delete_connection: connectionId → id
- delete_group: groupId → id
- rename_group: groupId → id
- create_group: parentId → parent_id

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:20:47 -04:00
Vantz Stockwell
ffe79e9a54 fix: add Tauri v2 capabilities — unblock event:listen for SSH terminal
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m50s
The app had no capabilities file, so Tauri v2's ACL blocked all
frontend listen() calls. SSH connections succeeded on the Rust side
but the terminal never received data events, appearing as "nothing
happened." Grants core:default, core:event:default, core🪟default,
and shell:allow-open.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:00:54 -04:00
Vantz Stockwell
6e33bbdcf1 fix: serialize tags as array (not JSON string), DevTools debug-only
- ConnectionRecord.tags changed from String to Vec<String> so the
  frontend receives a proper array instead of a raw JSON string.
  The old behavior caused v-for to iterate characters, corrupting
  the connection display in the sidebar.
- DevTools now only auto-opens in debug builds (cfg(debug_assertions)),
  not in production.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:58:58 -04:00
Vantz Stockwell
d844a69cdb fix: attach installer .exe to Gitea release as downloadable asset
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m53s
The workflow created a release and uploaded to the packages registry,
but never attached the .exe as a release asset — so the release page
had no downloads. Now uploads each NSIS installer to the release.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:48:01 -04:00
Vantz Stockwell
9aa911f7b8 fix: complete truncated GeminiPanel template — add chat UI and input bindings
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 3m6s
The template was cut off mid-attribute, missing the message list rendering,
chat input with @keyup.enter="handleSend", and send button. This caused
vue-tsc to flag handleSend as unused, breaking CI.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:41:31 -04:00
Vantz Stockwell
e28d0f65cd feat: integrate Gemini AI XO copilot + backend cleanup + connection timeouts
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 9s
Backend cleanup (Gemini):
- Strip verbose doc comments across SSH, RDP, and command modules
- Add 10s timeout on SSH connect/auth, 15s on RDP connection
- Fix macOS data directory to ~/Library/Application Support/Wraith
- Add generic disconnect_session command
- Simplify SFTP setup and error handling
- Inline AppState field construction

Gemini AI XO integration:
- Add GeminiService (src-tauri/src/ai/) with API Key, Service Account,
  and Google Account (OAuth2) authentication methods
- Add ai_commands (set_gemini_auth, gemini_chat, is_gemini_authenticated)
- Add GeminiPanel.vue — collapsible chat sidebar with multi-auth UI
- Wire Ctrl+Shift+G toggle and status bar AI button in MainLayout
- Add reqwest + anyhow dependencies

Bugfix:
- Fix dropped modulo operator in Ctrl+Tab/Ctrl+Shift+Tab handlers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:38:52 -04:00
Vantz Stockwell
8e335f92b5 refactor: clean up backend — strip verbose docs, add connection timeouts, fix macOS data dir
- Remove redundant doc comments and section headers across SSH, RDP, and command modules
- Add 10s timeout on SSH connect/auth, 15s timeout on RDP connection
- Fix macOS data directory to use ~/Library/Application Support/Wraith
- Add generic disconnect_session command alongside disconnect_ssh
- Simplify SFTP setup and RDP error handling
- Add explicit label/url to main window config

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 16:30:02 -04:00
Vantz Stockwell
429f41d853 fix: auto-patch tauri.conf.json version from git tag in CI
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m48s
Never manually sync version again. CI reads the tag, patches
the config before building. Also bumped to 1.1.5.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 03:37:30 -04:00
Vantz Stockwell
0cdc865483 debug: enable DevTools in release builds
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m44s
Added devtools Cargo feature, auto-open DevTools on startup
so we can see frontend console errors on Windows.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 03:23:59 -04:00
Vantz Stockwell
ee857474e3 fix: TS type error — invoke returns array not single object
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m49s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 03:09:23 -04:00
Vantz Stockwell
6c7b277494 fix: SSH auth — decrypt credentials from vault before connecting
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 6s
Added decrypt_password and decrypt_ssh_key Tauri commands.
Connect flow now resolves credentialId → decrypted credentials
from the vault. Falls back to window.prompt on auth failure.
Fixed case-sensitive error string matching.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 03:04:47 -04:00
Vantz Stockwell
3a260f6a2c feat: remove MobaXTerm import entirely
Removed ImportDialog, MobaXTerm first-run prompt, import menu
item, and all related refs. 6 connections — entered by hand.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:53:44 -04:00
Vantz Stockwell
9cf64f99c7 fix: remove updater plugin — missing pubkey crashes on startup
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m41s
Will re-enable after generating Tauri signing keypair.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:40:55 -04:00
Vantz Stockwell
8602f1779b debug: add file-based startup log to diagnose silent crash
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m47s
Writes to %APPDATA%\Wraith\wraith-startup.log since release
builds suppress all console output via windows_subsystem.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:35:08 -04:00
Vantz Stockwell
db1bd39030 fix: bump version in tauri.conf.json to 1.1.0
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m49s
Tauri uses this for the installer filename, not the git tag.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:29:02 -04:00
Vantz Stockwell
4eb304222d fix: use Tauri bundler for NSIS — runner now under ActRunner account
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 5m30s
Re-enable Tauri NSIS bundler (embeds frontend in exe). Runner
runs as ActRunner service account with proper user profile,
so Tauri's downloaded NSIS/tools should work. Removed manual
NSIS step and template file from workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:17:28 -04:00
Vantz Stockwell
24e5bcbf4d fix: debug installer signing — log path and list exe files
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m44s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:07:37 -04:00
Vantz Stockwell
15ee82ef53 fix: move NSIS script to template file — avoid YAML !include parse error
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 2m43s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 02:01:42 -04:00
Vantz Stockwell
348d8c842d fix: CI rewrite — no GITHUB_OUTPUT, absolute paths, inline version
act_runner v0.2.11 doesn't support step outputs. Extract version
from github.ref_name inline in every step. Use absolute paths
for NSIS. Write nsi file with System.IO to avoid encoding issues.
Store Azure token in temp file instead of step output.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:56:25 -04:00
Vantz Stockwell
372689fa03 fix: NSIS script — single-quoted here-string, no PS interpolation
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 2m27s
PowerShell was eating $INSTDIR/$PROGRAMFILES64 and $version.
Use single-quoted here-string with placeholder replacement.
Pass full path to makensis instead of Push-Location.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:50:52 -04:00
Vantz Stockwell
5910e7a849 fix: skip Tauri bundler, build NSIS installer manually
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 2m34s
Tauri's bundled makensis can't run under SYSTEM account.
Use --no-bundle, then build installer with system NSIS
directly — same pattern as the old Go pipeline.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:47:16 -04:00
Vantz Stockwell
8ed99a4919 fix: set TAURI_NSIS_PATH to system NSIS install
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 2m34s
Tauri's downloaded NSIS can't run under SYSTEM account.
Point to system-installed NSIS at Program Files (x86).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:32:40 -04:00
Vantz Stockwell
b0d56a775d fix: add NSIS to EXTRA_PATH for SYSTEM account
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 2m37s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:26:51 -04:00
Vantz Stockwell
84a2fc8618 fix: bundle target NSIS only — skip WiX/MSI
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 2m34s
WiX candle.exe fails under SYSTEM account. NSIS is all we need.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:18:53 -04:00
Vantz Stockwell
96cbd74f84 fix: CI — inline EXTRA_PATH in every step, no GITHUB_PATH
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 4m59s
act_runner v0.2.11 doesn't support GITHUB_PATH reliably.
Set env.EXTRA_PATH at job level, prepend in each step.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:12:56 -04:00
Vantz Stockwell
8cf13d657b fix: suppress rustup stderr in PowerShell CI
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 1s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:09:55 -04:00
Vantz Stockwell
57381566b8 fix: CI — configure rustup default + PATH for SYSTEM account
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 17s
Runner runs as SYSTEM which has no rustup default and missing
tool paths. Add GITHUB_PATH entries for Java, cargo, rustup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:04:33 -04:00
Vantz Stockwell
d6f84306c9 fix: use 'powershell' not 'pwsh' — Windows PowerShell on runner
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 2s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 00:03:03 -04:00
Vantz Stockwell
3d50c7c894 fix: CI workflow — native Windows build on STORMBREAKER
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 0s
Replaced Linux/MinGW cross-compilation with native MSVC build
on Windows runner. PowerShell throughout. No more silent crash
binaries. runs-on: windows targets the STORMBREAKER runner.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 23:59:24 -04:00
Vantz Stockwell
08ebf35c66 fix: NSIS installMode perMachine — install to Program Files
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m39s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:43:01 -04:00
Vantz Stockwell
c286e19190 fix: cargo config.toml — rustflags as key, not section
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m44s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:38:32 -04:00
Vantz Stockwell
bec58fe096 fix: install tauri-cli via cargo, not npx
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 54s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:36:18 -04:00
Vantz Stockwell
76c0439f4e fix: add stub ImportDialog, unblock vite build
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 6s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:25:39 -04:00
Vantz Stockwell
b486679a49 fix: add ContextMenu component, fix TS errors in ConnectionTree
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 5s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:19:52 -04:00
Vantz Stockwell
c1f4875dfd fix: CI workflow — use linux runner with MinGW cross-compilation
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 35s
Matched runner label to existing 'linux' runner on asgard.
Manual git clone checkout, apt-get toolchain install, rustup
with x86_64-pc-windows-gnu target, .cargo/config.toml for
MinGW linker. Mirrors old Go workflow patterns.

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