Summary
The campaign status page currently renders the attack dependency graph (DAG) as a static flowchart image. This feature replaces that static image with a dynamic, interactive visualization that communicates real-time execution state — which step is running, which agent is executing it, and the outcome of each completed step.
Background & Context
HashHive campaigns execute as a directed acyclic graph (DAG) of attack steps. Each step can depend on one or more upstream steps completing before it begins. Agents pick up and execute individual steps. Currently, users must infer execution progress from raw status fields in the UI; there is no visual representation of live campaign state mapped onto the graph structure.
This creates friction for operators monitoring long-running campaigns with many interdependent steps — they cannot quickly identify bottlenecks, failed paths, or which agents are active on which nodes.
Problem Statement
- The existing DAG image is static and does not reflect runtime state.
- Users cannot visually identify which steps are pending, running, succeeded, or failed.
- There is no indication of which agent is executing a given step.
- Operators must cross-reference multiple UI panels to get a full picture of campaign execution.
Proposed Solution
Replace the static DAG image with a live, interactive graph component (e.g., using a library such as React Flow or D3.js) that renders each attack step as a node and each dependency relationship as a directed edge.
Node Visual States
Each node should communicate its execution state via color, icon, and optionally animation:
| State |
Color |
Icon |
Animation |
| Pending |
Gray |
⏳ Clock |
None |
| Running |
Blue |
▶ Play / Spinner |
Pulsing border |
| Completed (success) |
Green |
✅ Check |
None |
| Completed (with errors / partial) |
Yellow/Amber |
⚠️ Warning |
None |
| Failed |
Red |
❌ X |
None |
| Skipped |
Light gray |
⏭ Skip |
None |
Agent Indicators
- Each running node should display the avatar or short identifier of the agent currently executing it (e.g., agent hostname badge or icon).
- Hovering a node should reveal a tooltip with: step name, current state, assigned agent (if any), start time, and elapsed time.
Edge Rendering
- Satisfied dependency edges: solid line.
- Unsatisfied/blocked dependency edges: dashed line.
- Edges leading into a running node: animated dash to indicate active data flow.
Interactivity
- Nodes should be clickable, navigating to the relevant step detail view.
- The graph should auto-layout (top-to-bottom or left-to-right) using a DAG layout algorithm (e.g., Dagre).
- The visualization should poll or subscribe (WebSocket/SSE) for live state updates without requiring a full page reload.
Acceptance Criteria
Technical Notes
- Evaluate React Flow vs. D3.js vs. Cytoscape.js for the graph renderer — React Flow preferred if the frontend is React-based.
- The DAG layout engine should be Dagre or ELK for hierarchical layout.
- Live update mechanism should align with whatever pattern the rest of the frontend uses (polling, WebSocket, or SSE).
- Agent identifier display should reuse existing agent avatar/badge components.
- Consider accessibility: ensure color is not the sole differentiator for state — pair with icons and ARIA labels.
References
- Existing campaign status page component
- Agent management: see
agent / agent-management labels for related issues
- Campaign DAG data model
Summary
The campaign status page currently renders the attack dependency graph (DAG) as a static flowchart image. This feature replaces that static image with a dynamic, interactive visualization that communicates real-time execution state — which step is running, which agent is executing it, and the outcome of each completed step.
Background & Context
HashHive campaigns execute as a directed acyclic graph (DAG) of attack steps. Each step can depend on one or more upstream steps completing before it begins. Agents pick up and execute individual steps. Currently, users must infer execution progress from raw status fields in the UI; there is no visual representation of live campaign state mapped onto the graph structure.
This creates friction for operators monitoring long-running campaigns with many interdependent steps — they cannot quickly identify bottlenecks, failed paths, or which agents are active on which nodes.
Problem Statement
Proposed Solution
Replace the static DAG image with a live, interactive graph component (e.g., using a library such as React Flow or D3.js) that renders each attack step as a node and each dependency relationship as a directed edge.
Node Visual States
Each node should communicate its execution state via color, icon, and optionally animation:
Agent Indicators
Edge Rendering
Interactivity
Acceptance Criteria
Technical Notes
References
agent/agent-managementlabels for related issues