feat: alive UI wave, galaxy presence, spread and fleet enhancements
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled

Dashboard ambient layer, comrade presence, Mission Deck and War Room, Emberwake supply chain, spread/docs publishing, fleet policy and modules API, CI docker mining, and refreshed USB pack.
This commit is contained in:
AetherForge
2026-06-04 22:36:17 -07:00
parent 1551bd5dad
commit a32860b0d9
154 changed files with 17383 additions and 601 deletions

View File

@@ -17,6 +17,8 @@ import FileManager from '../components/Fleet/FileManager';
import RemoteDirBrowser from '../components/Fleet/RemoteDirBrowser';
import ProtocolTunnelPanel from '../components/Fleet/ProtocolTunnelPanel';
import CrucibleExpandedOps from '../components/Fleet/CrucibleExpandedOps';
import FleetHeatMiniMap from '../components/Fleet/FleetHeatMiniMap';
import AlsoHere from '../components/Presence/AlsoHere';
import '../components/Fleet/FullSysCheckPanel.css';
import '../components/Fleet/ProtocolTunnelPanel.css';
import './CruciblePage.css';
@@ -524,6 +526,8 @@ export default function CruciblePage() {
return next;
});
const selectAgent = (id: string) => setSelectedIds(new Set([id]));
const selectAll = () => setSelectedIds(new Set(agents.filter(online).map((a) => a.id)));
const clearSel = () => setSelectedIds(new Set());
@@ -885,7 +889,7 @@ export default function CruciblePage() {
// ── Render ─────────────────────────────────────────────────────────────
return (
<div className="page fade-in crucible-page">
<div className="page fade-in crucible-page operator-deck-page">
<header className="deck-hero" style={{ marginBottom: '1rem' }}>
<div className="deck-hero-text">
<p className="deck-eyebrow font-tech">REMOTE OPERATIONS THEATER</p>
@@ -911,6 +915,8 @@ export default function CruciblePage() {
</div>
</header>
<AlsoHere page="/crucible" />
<FleetGroupsStrip
groups={groups}
liveAgentIds={onlineAgentIds}
@@ -920,8 +926,26 @@ export default function CruciblePage() {
onCreateGroup={() => setShowGroupModal(true)}
/>
<div className="crucible-layout">
<aside className="crucible-sidebar">
<NeonCard
accent="cyan"
className="crucible-heat-card operator-deck-card operator-interactive"
tilt3d={false}
>
<FleetHeatMiniMap
agents={agents}
groups={groups}
allIds={allIds}
selectedIds={selectedIds}
onSelectAgent={selectAgent}
/>
</NeonCard>
</aside>
<div className="crucible-main">
{/* ── Node Roster ─────────────────────────────────────────────────── */}
<NeonCard accent="cyan" className="crucible-roster-card" hud tilt3d={false}>
<NeonCard accent="cyan" className="crucible-roster-card operator-deck-card operator-interactive" hud tilt3d={false}>
<div className="crucible-section-title font-tech">
<span className="section-ornament"></span> NODE ROSTER
</div>
@@ -939,7 +963,7 @@ export default function CruciblePage() {
return (
<div
key={a.id}
className={`crucible-node-card ${sel ? 'selected' : ''} ${isOn ? '' : 'offline'}`}
className={`crucible-node-card operator-interactive ${sel ? 'selected' : ''} ${isOn ? '' : 'offline'}`}
style={{
...(sel ? { '--sel-color': color } : {}),
...(pg ? { borderLeft: `3px solid ${pg.color}` } : {}),
@@ -1098,7 +1122,7 @@ export default function CruciblePage() {
{/* ── Groups & Actions ────────────────────────────────────────────── */}
<div className="crucible-row">
<NeonCard accent="purple" className="crucible-groups-card" tilt3d={false}>
<NeonCard accent="purple" className="crucible-groups-card operator-deck-card operator-interactive" tilt3d={false}>
<div className="crucible-section-title font-tech">
<span className="section-ornament"></span> GROUPS
</div>
@@ -1141,7 +1165,7 @@ export default function CruciblePage() {
)}
</NeonCard>
<NeonCard accent="amber" className="crucible-actions-card" tilt3d={false}>
<NeonCard accent="amber" className="crucible-actions-card operator-deck-card operator-interactive" tilt3d={false}>
<div className="crucible-section-title font-tech">
<span className="section-ornament"></span> OPERATIONS
{selectedIds.size > 0 && (
@@ -1810,7 +1834,7 @@ export default function CruciblePage() {
</div>
{/* ── Terminal ────────────────────────────────────────────────────── */}
<NeonCard accent="green" className="crucible-term-card" tilt3d={false}>
<NeonCard accent="green" className="crucible-term-card operator-deck-card operator-interactive" tilt3d={false}>
<div className="crucible-term-header">
<div className="crucible-section-title font-tech" style={{ marginBottom: 0 }}>
<span className="section-ornament"></span> TERMINAL
@@ -1883,7 +1907,7 @@ export default function CruciblePage() {
</NeonCard>
{/* ── SSH Access Info ─────────────────────────────────────────────── */}
<NeonCard accent="brass" className="crucible-ssh-info" tilt3d={false}>
<NeonCard accent="brass" className="crucible-ssh-info operator-deck-card operator-interactive" tilt3d={false}>
<div className="crucible-section-title font-tech">
<span className="section-ornament"></span> SSH ACCESS NOTES
</div>
@@ -1916,7 +1940,7 @@ export default function CruciblePage() {
</NeonCard>
{singleSelectedAgent && (
<NeonCard accent="cyan" className="crucible-tunnel-panel-wrap" tilt3d={false}>
<NeonCard accent="cyan" className="crucible-tunnel-panel-wrap operator-deck-card operator-interactive" tilt3d={false}>
<ProtocolTunnelPanel
agentId={singleSelectedAgent.id}
agentName={singleSelectedAgent.name}
@@ -1953,6 +1977,8 @@ export default function CruciblePage() {
setShowGroupModal(false);
}}
/>
</div>
</div>
</div>
);
}