Update src/streamlit_app.py
Browse files- src/streamlit_app.py +26 -24
src/streamlit_app.py
CHANGED
@@ -3,38 +3,40 @@ import numpy as np
|
|
3 |
import pandas as pd
|
4 |
import streamlit as st
|
5 |
|
6 |
-
"""
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
""
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
indices = np.linspace(0, 1, num_points)
|
20 |
theta = 2 * np.pi * num_turns * indices
|
21 |
radius = indices
|
22 |
-
|
23 |
x = radius * np.cos(theta)
|
24 |
y = radius * np.sin(theta)
|
25 |
|
|
|
26 |
df = pd.DataFrame({
|
27 |
"x": x,
|
28 |
"y": y,
|
29 |
-
"
|
30 |
-
"
|
|
|
31 |
})
|
32 |
|
33 |
-
|
34 |
-
|
35 |
-
.
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
|
|
|
|
|
3 |
import pandas as pd
|
4 |
import streamlit as st
|
5 |
|
6 |
+
st.set_page_config(layout="wide", page_title="AI Recon Visualizer")
|
7 |
+
st.title("π§ AI Recon Visualizer")
|
8 |
+
st.markdown("""
|
9 |
+
This interactive spiral chart simulates discovered targets during an automated reconnaissance workflow.
|
10 |
+
Each point represents a discovered service or subdomain, with random weights simulating risk or exposure levels.
|
11 |
+
""")
|
12 |
+
|
13 |
+
# User-controlled parameters
|
14 |
+
num_points = st.slider("π Number of discovered endpoints", 10, 10000, 800)
|
15 |
+
num_turns = st.slider("π Spiral depth (rotations)", 1, 300, 40)
|
16 |
+
|
17 |
+
# Spiral coordinates
|
|
|
18 |
indices = np.linspace(0, 1, num_points)
|
19 |
theta = 2 * np.pi * num_turns * indices
|
20 |
radius = indices
|
|
|
21 |
x = radius * np.cos(theta)
|
22 |
y = radius * np.sin(theta)
|
23 |
|
24 |
+
# Simulated recon data
|
25 |
df = pd.DataFrame({
|
26 |
"x": x,
|
27 |
"y": y,
|
28 |
+
"target_score": indices,
|
29 |
+
"risk": np.random.randn(num_points),
|
30 |
+
"endpoint": [f"host{i}.recon.local" for i in range(num_points)]
|
31 |
})
|
32 |
|
33 |
+
# Chart definition
|
34 |
+
chart = alt.Chart(df, height=700, width=700).mark_point(filled=True).encode(
|
35 |
+
x=alt.X("x", axis=None),
|
36 |
+
y=alt.Y("y", axis=None),
|
37 |
+
color=alt.Color("target_score", legend=None, scale=alt.Scale(scheme="viridis")),
|
38 |
+
size=alt.Size("risk", legend=None, scale=alt.Scale(range=[10, 150])),
|
39 |
+
tooltip=["endpoint", "risk", "target_score"]
|
40 |
+
).interactive()
|
41 |
+
|
42 |
+
st.altair_chart(chart, use_container_width=True)
|