feat: Emberwake, Crucible phases, Linux agent, musical dashboard, e2e
Emberwake spread/waterhole UI, campaign DB, spread handler, spread-kit web publisher, and SPREAD_TECHNIQUES doc. Crucible Phase A-C: expanded ops, port-forward matrix, remote dir browser, crucible help/tests. Linux agent hardening: credential vault, persistence audit, firewall/defender deploy, SMB spread status, CPU stats, screenshots/crypt/file-ops split. Docker compose and agent/server images with e2e validation script and docs. Musical dashboard: ambient music player, hover SFX, SoundContext/AmbientMusicContext, steampunk polish. Public builds API, dropper handler updates, SessionGate and fleet UX. README and PROBLEMS.md refresh.
This commit is contained in:
88
server/web/src/help/spreadProfiles.ts
Normal file
88
server/web/src/help/spreadProfiles.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import type { BuildRequest } from '../types';
|
||||
|
||||
export type SpreadProfileId = 'web_drop' | 'desktop_fusion' | 'lan_kindling' | 'crucible_ops';
|
||||
|
||||
export interface SpreadProfile {
|
||||
id: SpreadProfileId;
|
||||
label: string;
|
||||
color: string;
|
||||
blurb: string;
|
||||
apply: (form: BuildRequest) => BuildRequest;
|
||||
}
|
||||
|
||||
export const SPREAD_PROFILES: SpreadProfile[] = [
|
||||
{
|
||||
id: 'web_drop',
|
||||
label: 'Web Drop',
|
||||
color: '#3dd6c6',
|
||||
blurb: 'Headless Linux — small, systemd, no screenshot, minimal spread',
|
||||
apply: (f) => ({
|
||||
...f,
|
||||
target_os: 'linux',
|
||||
target_arch: 'amd64',
|
||||
spread_kit: false,
|
||||
fusion_enabled: false,
|
||||
stealth_mode: true,
|
||||
file_logging: false,
|
||||
remote_aggressive: false,
|
||||
auto_spread: false,
|
||||
usb_spread: false,
|
||||
share_spread: false,
|
||||
run_as: 'service',
|
||||
autostart_mode: 'boot_task',
|
||||
}),
|
||||
},
|
||||
{
|
||||
id: 'desktop_fusion',
|
||||
label: 'Desktop Fusion',
|
||||
color: '#f0abfc',
|
||||
blurb: 'Big stealth fusion — garble on, visible UI off',
|
||||
apply: (f) => ({
|
||||
...f,
|
||||
target_os: 'universal',
|
||||
target_arch: 'all',
|
||||
spread_kit: false,
|
||||
fusion_enabled: true,
|
||||
stealth_mode: true,
|
||||
display_mode: 'background',
|
||||
obfuscate: true,
|
||||
remote_aggressive: false,
|
||||
auto_spread: false,
|
||||
}),
|
||||
},
|
||||
{
|
||||
id: 'lan_kindling',
|
||||
label: 'LAN Kindling',
|
||||
color: '#ff6b2c',
|
||||
blurb: 'Universal spread kit + autospread for LAN/USB',
|
||||
apply: (f) => ({
|
||||
...f,
|
||||
target_os: 'universal',
|
||||
target_arch: 'all',
|
||||
spread_kit: true,
|
||||
fusion_enabled: false,
|
||||
stealth_mode: true,
|
||||
auto_spread: true,
|
||||
usb_spread: true,
|
||||
share_spread: true,
|
||||
remote_aggressive: false,
|
||||
}),
|
||||
},
|
||||
{
|
||||
id: 'crucible_ops',
|
||||
label: 'Crucible Ops',
|
||||
color: '#c9a227',
|
||||
blurb: 'Aggressive remote ops enabled for Crucible',
|
||||
apply: (f) => ({
|
||||
...f,
|
||||
remote_aggressive: true,
|
||||
hole_punch: true,
|
||||
auto_spread: false,
|
||||
}),
|
||||
},
|
||||
];
|
||||
|
||||
export function applySpreadProfile(form: BuildRequest, id: SpreadProfileId): BuildRequest {
|
||||
const profile = SPREAD_PROFILES.find((p) => p.id === id);
|
||||
return profile ? profile.apply(form) : form;
|
||||
}
|
||||
Reference in New Issue
Block a user