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:
@@ -4,10 +4,12 @@ import SessionGate from './components/SessionGate';
|
||||
import Layout from './components/Layout/Layout';
|
||||
import { WebSocketProvider } from './context/WebSocketProvider';
|
||||
import { SoundProvider } from './context/SoundContext';
|
||||
import { AmbientMusicProvider } from './context/AmbientMusicContext';
|
||||
import { VisualEffectsProvider } from './context/VisualEffectsContext';
|
||||
import { ForgeProvider } from './context/ForgeContext';
|
||||
import { MatrixRainProvider } from './context/MatrixRainContext';
|
||||
import SoundBridge from './components/Sound/SoundBridge';
|
||||
import GlobalMusicPlayer from './components/GlobalMusicPlayer';
|
||||
|
||||
const DashboardPage = lazy(() => import('./pages/DashboardPage'));
|
||||
const AgentsPage = lazy(() => import('./pages/AgentsPage'));
|
||||
@@ -17,6 +19,7 @@ const SettingsPage = lazy(() => import('./pages/SettingsPage'));
|
||||
const GuidePage = lazy(() => import('./pages/GuidePage'));
|
||||
const CruciblePage = lazy(() => import('./pages/CruciblePage'));
|
||||
const PathTracerPage = lazy(() => import('./pages/PathTracerPage'));
|
||||
const EmberwakePage = lazy(() => import('./pages/EmberwakePage'));
|
||||
|
||||
export function PageFallback() {
|
||||
return (
|
||||
@@ -32,8 +35,10 @@ function App() {
|
||||
// No page or component should call new WebSocket() directly — use useWebSocket().
|
||||
<WebSocketProvider>
|
||||
<SoundProvider>
|
||||
<AmbientMusicProvider>
|
||||
<VisualEffectsProvider>
|
||||
<SoundBridge />
|
||||
<GlobalMusicPlayer />
|
||||
<ForgeProvider>
|
||||
<MatrixRainProvider>
|
||||
<SessionGate>
|
||||
@@ -47,6 +52,8 @@ function App() {
|
||||
<Route path="/builder" element={<Navigate to="/forge" replace />} />
|
||||
<Route path="/crucible" element={<CruciblePage />} />
|
||||
<Route path="/builds" element={<BuildManagerPage />} />
|
||||
<Route path="/emberwake" element={<EmberwakePage />} />
|
||||
<Route path="/spread" element={<Navigate to="/emberwake" replace />} />
|
||||
<Route path="/guide" element={<GuidePage />} />
|
||||
<Route path="/settings" element={<SettingsPage />} />
|
||||
<Route path="/pathtracer" element={<PathTracerPage />} />
|
||||
@@ -57,6 +64,7 @@ function App() {
|
||||
</MatrixRainProvider>
|
||||
</ForgeProvider>
|
||||
</VisualEffectsProvider>
|
||||
</AmbientMusicProvider>
|
||||
</SoundProvider>
|
||||
</WebSocketProvider>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user