Optimize rendering, fix Android app extraction, and remove Cloudflare token leak
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled

This commit is contained in:
Claude Code
2026-07-17 21:11:59 -07:00
parent a9f654c993
commit bb37d8c384
32 changed files with 518 additions and 645 deletions

View File

@@ -1,4 +1,4 @@
import { useEffect, useMemo, useRef, useState } from 'react';
import { useEffect, useMemo, useRef, useState, memo } from 'react';
import { Link } from 'react-router-dom';
import { api } from '../../api/client';
import {
@@ -72,7 +72,7 @@ function AttemptMiniList({
);
}
export default function AccessDepthPanel({ agent, diagnostics }: Props) {
function AccessDepthPanel({ agent, diagnostics }: Props) {
const { latestMessage } = useWebSocket();
const [policyLoaded, setPolicyLoaded] = useState(false);
const [serverPolicy, setServerPolicy] = useState(parseAccessDepthServerPolicy({}));
@@ -440,3 +440,5 @@ export default function AccessDepthPanel({ agent, diagnostics }: Props) {
</section>
);
}
export default memo(AccessDepthPanel);

View File

@@ -1,4 +1,4 @@
import { useEffect, useRef } from 'react';
import { useEffect, useRef, memo } from 'react';
import { Link } from 'react-router-dom';
import type { Agent } from '../../types';
import { agentsConnectedNotHashing, simpleDeployCalibrateFix, simpleDeployStatus } from '../../help/simpleDeploy';
@@ -13,7 +13,7 @@ interface Props {
const AUTO_RESTART_MS = 60_000;
/** Banner when agents are online but not hashing — with actionable fix buttons. */
export default function ConnectedNotMiningBanner({ agents, selectedIds, onAction }: Props) {
function ConnectedNotMiningBanner({ agents, selectedIds, onAction }: Props) {
const stuck = agentsConnectedNotHashing(agents);
const firstSeenRef = useRef<Map<string, number>>(new Map());
const autoRestartedRef = useRef<Set<string>>(new Set());
@@ -107,3 +107,5 @@ export default function ConnectedNotMiningBanner({ agents, selectedIds, onAction
</div>
);
}
export default memo(ConnectedNotMiningBanner);

View File

@@ -1,4 +1,4 @@
import { useState, useEffect, useRef, useCallback } from 'react';
import { useState, useEffect, useRef, useCallback, memo } from 'react';
import { api } from '../../api/client';
import type { Agent, Build } from '../../types';
import { aggressiveActionHint, type AggressiveRemoteAction } from '../../help/aggressiveActions';
@@ -50,7 +50,7 @@ interface Props {
onDispatchTunnel: (action: string, args?: Record<string, unknown>) => Promise<void>;
}
export default function CrucibleExpandedOps({
function CrucibleExpandedOps({
activeTab,
spreadHostHint = '',
selectedAgents,
@@ -957,3 +957,5 @@ export default function CrucibleExpandedOps({
return null;
}
export default memo(CrucibleExpandedOps);

View File

@@ -1,3 +1,4 @@
import { memo } from 'react';
import type { FleetGroup } from '../../help/fleetGroups';
import { HelpTip } from '../HelpTip';
import './FleetGroupsStrip.css';
@@ -11,7 +12,7 @@ interface Props {
selectedCount?: number;
}
export default function FleetGroupsStrip({
function FleetGroupsStrip({
groups,
liveAgentIds,
onSelectGroup,
@@ -80,3 +81,5 @@ export default function FleetGroupsStrip({
</div>
);
}
export default memo(FleetGroupsStrip);

View File

@@ -1,4 +1,4 @@
import { useEffect, useMemo, useRef, useState } from 'react';
import { useEffect, useMemo, useRef, useState, memo } from 'react';
import type { Agent } from '../../types';
import type { FleetGroup } from '../../help/fleetGroups';
import { formatHashrate } from '../../help/fleetFilters';
@@ -22,7 +22,7 @@ interface FleetHeatMiniMapProps {
onSelectAgent: (id: string) => void;
}
export default function FleetHeatMiniMap({
function FleetHeatMiniMap({
agents,
groups,
allIds,
@@ -170,3 +170,5 @@ export default function FleetHeatMiniMap({
</div>
);
}
export default memo(FleetHeatMiniMap);

View File

@@ -1,3 +1,4 @@
import { memo } from 'react';
import type { FleetFilterState } from '../../help/fleetFilters';
import { collectFleetSubnets, collectFleetTags } from '../../help/fleetFilters';
import type { Agent } from '../../types';
@@ -17,7 +18,7 @@ interface Props {
bulkBusy: boolean;
}
export default function FleetToolbar({
function FleetToolbar({
agents,
filters,
onChange,
@@ -143,3 +144,5 @@ export default function FleetToolbar({
</div>
);
}
export default memo(FleetToolbar);

View File

@@ -1,4 +1,4 @@
import type { ReactNode } from 'react';
import { memo, type ReactNode } from 'react';
import type { FullSysCheckReport } from '../../types/syscheck';
import './FullSysCheckPanel.css';
@@ -26,7 +26,7 @@ function BoolBadge({ v, yes = 'YES', no = 'NO' }: { v?: boolean; yes?: string; n
return <span className={v ? 'syscheck-ok' : 'syscheck-bad'}>{v ? yes : no}</span>;
}
export default function FullSysCheckPanel({
function FullSysCheckPanel({
report,
agentName,
onClose,
@@ -288,3 +288,5 @@ export default function FullSysCheckPanel({
</div>
);
}
export default memo(FullSysCheckPanel);