zen-ai-pentest 2.0.4__tar.gz → 2.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/PKG-INFO +46 -3
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/README.md +45 -2
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/api/main.py +14 -2
- zen_ai_pentest-2.2.0/api/websocket_v2.py +181 -0
- zen_ai_pentest-2.2.0/docs/architecture.md +119 -0
- zen_ai_pentest-2.2.0/docs/architecture.svg +112 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/__init__.py +2 -2
- zen_ai_pentest-2.2.0/modules/report_export.py +207 -0
- zen_ai_pentest-2.2.0/modules/siem_integration.py +501 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/pyproject.toml +1 -1
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/requirements.txt +6 -1
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/__init__.py +3 -1
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/PKG-INFO +46 -3
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/SOURCES.txt +5 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/CONTRIBUTING.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/CONTRIBUTORS.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/LICENSE +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/MANIFEST.in +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/agent_base.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/agent_orchestrator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/analysis_agent.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/cli.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/exploit_agent.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/integration.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/post_scan_agent.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/react_agent.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/react_agent_enhanced.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/react_agent_vm.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/agents/research_agent.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/api/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/api/auth.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/api/schemas.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/api/websocket.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/agent.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/agent_loop.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/exploit_validator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/memory.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/react.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/autonomous/tool_executor.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/backends/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/backends/chatgpt_direct.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/backends/claude_direct.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/backends/duckduckgo.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/backends/openrouter.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/benchmarks/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/benchmarks/benchmark_engine.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/benchmarks/ci_benchmark.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/benchmarks/comparison.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/benchmarks/metrics.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/benchmarks/run_benchmarks.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/ci_cd/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/__init__.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/async_pool.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/asyncio_fix.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/cache.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/container.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/database.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/input_validator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/models.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/orchestrator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/plugin_manager.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/rate_limiter.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/secure_config.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/core/shield_integration.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/.gitkeep +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/API.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/API_DOCUMENTATION.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/ATTACKERS_MINDSET_TTPs.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/BRANCH_PROTECTION.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/CI_CD_MONITORING.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/CONTAINER_INTEGRATION.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/DEPENDABOT.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/DOCKER_SETUP.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/GITHUB_SETUP.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/NOTIFICATIONS.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/OSINT_MODULE.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/PENTESTER_VS_ATTACKER_MINDSET.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/PLUGIN_SYSTEM.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/POSTMAN.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/POST_SCAN_AGENT.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/PROTONVPN_INTEGRATION.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/REACT_AGENT.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/README.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/REAL_LIFE_SCENARIOS.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/ROADMAP-2026.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/TOOLS_SUMMARY.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/VIRTUALIZATION_SUMMARY.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/WEBHOOK_SETUP.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/ZEN_SHIELD.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/_config.yml +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/0001-record-architecture-decisions.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/0002-multi-agent-architecture.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/0003-llm-backend-routing.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/0004-autonomous-agent-architecture.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/0005-tool-execution-framework.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/0006-risk-scoring-methodology.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/adr/README.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/api/autonomous.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/api/risk_engine.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/index.html +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/index.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/research/FUNDAMENTAL_PENTEST_TOOLS.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/roadmap/2026/Q1_Q2_Q3_Q4_SUMMARY.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/setup/VIRTUALBOX_SETUP.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/docs/tutorials/getting-started.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/cve_database.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/exploit_assist.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/nuclei_integration.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/osint.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/protonvpn.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/recon.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/sql_injection_db.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/tool_orchestrator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/vuln_scanner.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/modules/wordlist_generator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/business_impact.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/business_impact_calculator.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/cvss.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/epss.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/example_usage.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/false_positive_engine.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/risk_engine/scorer.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/setup.cfg +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/setup.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/templates/reports/executive_summary.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/templates/reports/technical_report.md +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/web_ui/backend/main.py +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/dependency_links.txt +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/entry_points.txt +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/not-zip-safe +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/requires.txt +0 -0
- {zen_ai_pentest-2.0.4 → zen_ai_pentest-2.2.0}/zen_ai_pentest.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: zen-ai-pentest
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.2.0
|
|
4
4
|
Summary: Advanced AI-Powered Penetration Testing Framework with Multi-Agent Orchestration
|
|
5
5
|
Home-page: https://github.com/SHAdd0WTAka/zen-ai-pentest
|
|
6
6
|
Author: SHAdd0WTAka
|
|
@@ -63,10 +63,53 @@ Dynamic: requires-python
|
|
|
63
63
|
[](docker/)
|
|
64
64
|
[](tests/)
|
|
65
65
|
[](https://pypi.org/project/zen-ai-pentest/)
|
|
66
|
-
[](https://github.com/SHAdd0WTAka/zen-ai-pentest/releases)
|
|
67
67
|
[](#-authors--team)
|
|
68
68
|
[](ROADMAP_2026.md)
|
|
69
|
-
|
|
69
|
+
[](docs/architecture.md)
|
|
70
|
+
```mermaid
|
|
71
|
+
graph TB
|
|
72
|
+
subgraph "User Interface"
|
|
73
|
+
CLI[CLI]
|
|
74
|
+
API[REST API]
|
|
75
|
+
WebUI[Web UI]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
subgraph "Core Engine"
|
|
79
|
+
Orchestrator[Agent Orchestrator]
|
|
80
|
+
StateMachine[State Machine]
|
|
81
|
+
RiskEngine[Risk Engine]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
subgraph "AI Agents"
|
|
85
|
+
Recon[Reconnaissance]
|
|
86
|
+
Vuln[Vulnerability]
|
|
87
|
+
Exploit[Exploit]
|
|
88
|
+
Report[Report]
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
subgraph "Tools"
|
|
92
|
+
Nmap[Nmap]
|
|
93
|
+
SQLMap[SQLMap]
|
|
94
|
+
Metasploit[Metasploit]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
subgraph "External APIs"
|
|
98
|
+
OpenAI[OpenAI]
|
|
99
|
+
Anthropic[Anthropic]
|
|
100
|
+
ThreatIntel[Threat Intelligence]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
CLI --> API
|
|
104
|
+
WebUI --> API
|
|
105
|
+
API --> Orchestrator
|
|
106
|
+
Orchestrator --> StateMachine
|
|
107
|
+
StateMachine --> Recon
|
|
108
|
+
StateMachine --> Vuln
|
|
109
|
+
StateMachine --> Exploit
|
|
110
|
+
Exploit --> OpenAI
|
|
111
|
+
RiskEngine --> ThreatIntel
|
|
112
|
+
```
|
|
70
113
|
**Zen-AI-Pentest** is an autonomous, AI-powered penetration testing framework that combines cutting-edge language models with professional security tools. Built for security professionals, bug bounty hunters, and enterprise security teams.
|
|
71
114
|
|
|
72
115
|
---
|
|
@@ -8,10 +8,53 @@
|
|
|
8
8
|
[](docker/)
|
|
9
9
|
[](tests/)
|
|
10
10
|
[](https://pypi.org/project/zen-ai-pentest/)
|
|
11
|
-
[](https://github.com/SHAdd0WTAka/zen-ai-pentest/releases)
|
|
12
12
|
[](#-authors--team)
|
|
13
13
|
[](ROADMAP_2026.md)
|
|
14
|
-
|
|
14
|
+
[](docs/architecture.md)
|
|
15
|
+
```mermaid
|
|
16
|
+
graph TB
|
|
17
|
+
subgraph "User Interface"
|
|
18
|
+
CLI[CLI]
|
|
19
|
+
API[REST API]
|
|
20
|
+
WebUI[Web UI]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
subgraph "Core Engine"
|
|
24
|
+
Orchestrator[Agent Orchestrator]
|
|
25
|
+
StateMachine[State Machine]
|
|
26
|
+
RiskEngine[Risk Engine]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
subgraph "AI Agents"
|
|
30
|
+
Recon[Reconnaissance]
|
|
31
|
+
Vuln[Vulnerability]
|
|
32
|
+
Exploit[Exploit]
|
|
33
|
+
Report[Report]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
subgraph "Tools"
|
|
37
|
+
Nmap[Nmap]
|
|
38
|
+
SQLMap[SQLMap]
|
|
39
|
+
Metasploit[Metasploit]
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
subgraph "External APIs"
|
|
43
|
+
OpenAI[OpenAI]
|
|
44
|
+
Anthropic[Anthropic]
|
|
45
|
+
ThreatIntel[Threat Intelligence]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
CLI --> API
|
|
49
|
+
WebUI --> API
|
|
50
|
+
API --> Orchestrator
|
|
51
|
+
Orchestrator --> StateMachine
|
|
52
|
+
StateMachine --> Recon
|
|
53
|
+
StateMachine --> Vuln
|
|
54
|
+
StateMachine --> Exploit
|
|
55
|
+
Exploit --> OpenAI
|
|
56
|
+
RiskEngine --> ThreatIntel
|
|
57
|
+
```
|
|
15
58
|
**Zen-AI-Pentest** is an autonomous, AI-powered penetration testing framework that combines cutting-edge language models with professional security tools. Built for security professionals, bug bounty hunters, and enterprise security teams.
|
|
16
59
|
|
|
17
60
|
---
|
|
@@ -60,7 +60,7 @@ async def lifespan(app: FastAPI):
|
|
|
60
60
|
app = FastAPI(
|
|
61
61
|
title="Zen-AI-Pentest API",
|
|
62
62
|
description="Professional Pentesting Framework API",
|
|
63
|
-
version="2.
|
|
63
|
+
version="2.2.0",
|
|
64
64
|
lifespan=lifespan
|
|
65
65
|
)
|
|
66
66
|
|
|
@@ -500,7 +500,7 @@ async def health_check():
|
|
|
500
500
|
"""Health check endpoint"""
|
|
501
501
|
return {
|
|
502
502
|
"status": "healthy",
|
|
503
|
-
"version": "2.
|
|
503
|
+
"version": "2.2.0",
|
|
504
504
|
"timestamp": datetime.utcnow().isoformat()
|
|
505
505
|
}
|
|
506
506
|
|
|
@@ -1022,6 +1022,18 @@ async def create_jira_ticket(
|
|
|
1022
1022
|
# Import models for reports
|
|
1023
1023
|
from database.models import Report
|
|
1024
1024
|
|
|
1025
|
+
# ============================================================================
|
|
1026
|
+
# API v1.0 (Q1 2026)
|
|
1027
|
+
# ============================================================================
|
|
1028
|
+
|
|
1029
|
+
# Import v1 router
|
|
1030
|
+
try:
|
|
1031
|
+
from api.v1.siem import router as siem_v1_router
|
|
1032
|
+
app.include_router(siem_v1_router, prefix="/api/v1/siem", tags=["SIEM v1.0"])
|
|
1033
|
+
logger.info("API v1.0 SIEM endpoints loaded")
|
|
1034
|
+
except ImportError as e:
|
|
1035
|
+
logger.warning(f"Could not load API v1.0 endpoints: {e}")
|
|
1036
|
+
|
|
1025
1037
|
if __name__ == "__main__":
|
|
1026
1038
|
import uvicorn
|
|
1027
1039
|
uvicorn.run(app, host="0.0.0.0", port=8000)
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""
|
|
2
|
+
WebSocket v2.0 - Real-time Updates
|
|
3
|
+
Q2 2026 Feature
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
import logging
|
|
8
|
+
from typing import Dict, Set
|
|
9
|
+
from fastapi import WebSocket, WebSocketDisconnect
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger(__name__)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ConnectionManagerV2:
|
|
16
|
+
"""Advanced WebSocket connection manager with rooms"""
|
|
17
|
+
|
|
18
|
+
def __init__(self):
|
|
19
|
+
# Active connections by room
|
|
20
|
+
self.rooms: Dict[str, Set[WebSocket]] = {
|
|
21
|
+
"dashboard": set(),
|
|
22
|
+
"scans": set(),
|
|
23
|
+
"findings": set(),
|
|
24
|
+
"notifications": set()
|
|
25
|
+
}
|
|
26
|
+
# User connections
|
|
27
|
+
self.user_connections: Dict[str, WebSocket] = {}
|
|
28
|
+
|
|
29
|
+
async def connect(self, websocket: WebSocket, room: str = "dashboard", user_id: str = None):
|
|
30
|
+
"""Connect client to room"""
|
|
31
|
+
await websocket.accept()
|
|
32
|
+
|
|
33
|
+
if room in self.rooms:
|
|
34
|
+
self.rooms[room].add(websocket)
|
|
35
|
+
|
|
36
|
+
if user_id:
|
|
37
|
+
self.user_connections[user_id] = websocket
|
|
38
|
+
|
|
39
|
+
logger.info(f"Client connected to room: {room}")
|
|
40
|
+
|
|
41
|
+
# Send welcome message
|
|
42
|
+
await websocket.send_json({
|
|
43
|
+
"type": "connection",
|
|
44
|
+
"status": "connected",
|
|
45
|
+
"room": room,
|
|
46
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
def disconnect(self, websocket: WebSocket, room: str = None):
|
|
50
|
+
"""Disconnect client"""
|
|
51
|
+
if room and room in self.rooms:
|
|
52
|
+
self.rooms[room].discard(websocket)
|
|
53
|
+
else:
|
|
54
|
+
# Remove from all rooms
|
|
55
|
+
for room_set in self.rooms.values():
|
|
56
|
+
room_set.discard(websocket)
|
|
57
|
+
|
|
58
|
+
# Remove from user connections
|
|
59
|
+
for user_id, conn in list(self.user_connections.items()):
|
|
60
|
+
if conn == websocket:
|
|
61
|
+
del self.user_connections[user_id]
|
|
62
|
+
|
|
63
|
+
logger.info("Client disconnected")
|
|
64
|
+
|
|
65
|
+
async def broadcast_to_room(self, room: str, message: dict):
|
|
66
|
+
"""Broadcast message to all clients in room"""
|
|
67
|
+
if room not in self.rooms:
|
|
68
|
+
return
|
|
69
|
+
|
|
70
|
+
disconnected = set()
|
|
71
|
+
for connection in self.rooms[room]:
|
|
72
|
+
try:
|
|
73
|
+
await connection.send_json(message)
|
|
74
|
+
except Exception:
|
|
75
|
+
disconnected.add(connection)
|
|
76
|
+
|
|
77
|
+
# Clean up disconnected clients
|
|
78
|
+
for conn in disconnected:
|
|
79
|
+
self.rooms[room].discard(conn)
|
|
80
|
+
|
|
81
|
+
async def send_to_user(self, user_id: str, message: dict):
|
|
82
|
+
"""Send message to specific user"""
|
|
83
|
+
if user_id in self.user_connections:
|
|
84
|
+
try:
|
|
85
|
+
await self.user_connections[user_id].send_json(message)
|
|
86
|
+
except Exception:
|
|
87
|
+
del self.user_connections[user_id]
|
|
88
|
+
|
|
89
|
+
async def broadcast_scan_update(self, scan_id: str, status: str, progress: int = None):
|
|
90
|
+
"""Broadcast scan progress update"""
|
|
91
|
+
await self.broadcast_to_room("scans", {
|
|
92
|
+
"type": "scan_update",
|
|
93
|
+
"scan_id": scan_id,
|
|
94
|
+
"status": status,
|
|
95
|
+
"progress": progress,
|
|
96
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
async def broadcast_finding(self, finding: dict):
|
|
100
|
+
"""Broadcast new finding discovery"""
|
|
101
|
+
await self.broadcast_to_room("findings", {
|
|
102
|
+
"type": "new_finding",
|
|
103
|
+
"finding": finding,
|
|
104
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
async def broadcast_notification(self, title: str, message: str, severity: str = "info"):
|
|
108
|
+
"""Broadcast system notification"""
|
|
109
|
+
await self.broadcast_to_room("notifications", {
|
|
110
|
+
"type": "notification",
|
|
111
|
+
"title": title,
|
|
112
|
+
"message": message,
|
|
113
|
+
"severity": severity,
|
|
114
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
def get_room_stats(self) -> dict:
|
|
118
|
+
"""Get connection statistics"""
|
|
119
|
+
return {
|
|
120
|
+
room: len(connections)
|
|
121
|
+
for room, connections in self.rooms.items()
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
# Global manager instance
|
|
126
|
+
manager_v2 = ConnectionManagerV2()
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
async def websocket_dashboard_endpoint(websocket: WebSocket):
|
|
130
|
+
"""Dashboard real-time updates"""
|
|
131
|
+
await manager_v2.connect(websocket, room="dashboard")
|
|
132
|
+
try:
|
|
133
|
+
while True:
|
|
134
|
+
# Receive ping from client
|
|
135
|
+
data = await websocket.receive_text()
|
|
136
|
+
message = json.loads(data)
|
|
137
|
+
|
|
138
|
+
if message.get("action") == "ping":
|
|
139
|
+
await websocket.send_json({
|
|
140
|
+
"type": "pong",
|
|
141
|
+
"timestamp": datetime.utcnow().isoformat()
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
except WebSocketDisconnect:
|
|
145
|
+
manager_v2.disconnect(websocket, room="dashboard")
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
async def websocket_scans_endpoint(websocket: WebSocket):
|
|
149
|
+
"""Scan progress real-time updates"""
|
|
150
|
+
await manager_v2.connect(websocket, room="scans")
|
|
151
|
+
try:
|
|
152
|
+
while True:
|
|
153
|
+
data = await websocket.receive_text()
|
|
154
|
+
# Handle scan subscription requests
|
|
155
|
+
message = json.loads(data)
|
|
156
|
+
|
|
157
|
+
if message.get("action") == "subscribe_scan":
|
|
158
|
+
scan_id = message.get("scan_id")
|
|
159
|
+
await websocket.send_json({
|
|
160
|
+
"type": "subscribed",
|
|
161
|
+
"scan_id": scan_id,
|
|
162
|
+
"message": f"Subscribed to scan {scan_id} updates"
|
|
163
|
+
})
|
|
164
|
+
|
|
165
|
+
except WebSocketDisconnect:
|
|
166
|
+
manager_v2.disconnect(websocket, room="scans")
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
async def websocket_notifications_endpoint(websocket: WebSocket, user_id: str = None):
|
|
170
|
+
"""User-specific notifications"""
|
|
171
|
+
await manager_v2.connect(websocket, room="notifications", user_id=user_id)
|
|
172
|
+
try:
|
|
173
|
+
while True:
|
|
174
|
+
data = await websocket.receive_text()
|
|
175
|
+
# Acknowledge receipt
|
|
176
|
+
await websocket.send_json({
|
|
177
|
+
"type": "ack",
|
|
178
|
+
"received": True
|
|
179
|
+
})
|
|
180
|
+
except WebSocketDisconnect:
|
|
181
|
+
manager_v2.disconnect(websocket, room="notifications")
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Zen AI Pentest Architecture
|
|
2
|
+
|
|
3
|
+
## System Architecture Diagram
|
|
4
|
+
|
|
5
|
+
```mermaid
|
|
6
|
+
graph TB
|
|
7
|
+
subgraph "User Interface Layer"
|
|
8
|
+
CLI[CLI Interface]
|
|
9
|
+
API[REST API / FastAPI]
|
|
10
|
+
WebUI[React Web UI]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
subgraph "Core Engine"
|
|
14
|
+
Orchestrator[Agent Orchestrator]
|
|
15
|
+
StateMachine[State Machine<br/>IDLE → PLANNING → EXECUTING → OBSERVING]
|
|
16
|
+
Memory[Memory System<br/>Short-term / Long-term]
|
|
17
|
+
RiskEngine[Risk Engine<br/>Scoring & Validation]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
subgraph "AI Agents"
|
|
21
|
+
ReconAgent[Reconnaissance Agent]
|
|
22
|
+
VulnAgent[Vulnerability Agent]
|
|
23
|
+
ExploitAgent[Exploit Agent]
|
|
24
|
+
ReportAgent[Report Agent]
|
|
25
|
+
Consensus[LLM Voting Consensus]
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
subgraph "Tool Integration"
|
|
29
|
+
Nmap[Nmap]
|
|
30
|
+
Gobuster[Gobuster]
|
|
31
|
+
SQLMap[SQLMap]
|
|
32
|
+
Metasploit[Metasploit]
|
|
33
|
+
CustomTools[Custom Tools]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
subgraph "Data Storage"
|
|
37
|
+
Evidence[Evidence Collection]
|
|
38
|
+
Logs[Audit Logs]
|
|
39
|
+
Reports[Generated Reports]
|
|
40
|
+
CVE_DB[CVE Database]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
subgraph "External APIs"
|
|
44
|
+
OpenAI[OpenAI API]
|
|
45
|
+
Anthropic[Anthropic API]
|
|
46
|
+
Ollama[Local Ollama]
|
|
47
|
+
ThreatIntel[Threat Intelligence<br/>ThreatFox / URLhaus]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
CLI --> API
|
|
51
|
+
WebUI --> API
|
|
52
|
+
API --> Orchestrator
|
|
53
|
+
|
|
54
|
+
Orchestrator --> StateMachine
|
|
55
|
+
Orchestrator --> Memory
|
|
56
|
+
Orchestrator --> RiskEngine
|
|
57
|
+
|
|
58
|
+
StateMachine --> ReconAgent
|
|
59
|
+
StateMachine --> VulnAgent
|
|
60
|
+
StateMachine --> ExploitAgent
|
|
61
|
+
StateMachine --> ReportAgent
|
|
62
|
+
|
|
63
|
+
ReconAgent --> Nmap
|
|
64
|
+
ReconAgent --> Gobuster
|
|
65
|
+
VulnAgent --> SQLMap
|
|
66
|
+
ExploitAgent --> Metasploit
|
|
67
|
+
|
|
68
|
+
ReconAgent --> Consensus
|
|
69
|
+
VulnAgent --> Consensus
|
|
70
|
+
ExploitAgent --> Consensus
|
|
71
|
+
|
|
72
|
+
Consensus --> OpenAI
|
|
73
|
+
Consensus --> Anthropic
|
|
74
|
+
Consensus --> Ollama
|
|
75
|
+
|
|
76
|
+
RiskEngine --> ThreatIntel
|
|
77
|
+
RiskEngine --> CVE_DB
|
|
78
|
+
|
|
79
|
+
ExploitAgent --> Evidence
|
|
80
|
+
ReportAgent --> Reports
|
|
81
|
+
Orchestrator --> Logs
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Component Overview
|
|
85
|
+
|
|
86
|
+
### 1. User Interface Layer
|
|
87
|
+
- **CLI**: Command-line interface for scripting and automation
|
|
88
|
+
- **REST API**: FastAPI-based backend for web integration
|
|
89
|
+
- **Web UI**: React-based dashboard for interactive use
|
|
90
|
+
|
|
91
|
+
### 2. Core Engine
|
|
92
|
+
- **Agent Orchestrator**: Manages multi-agent workflow and task distribution
|
|
93
|
+
- **State Machine**: Implements ReAct pattern (Reason → Act → Observe → Reflect)
|
|
94
|
+
- **Memory System**: Maintains context across sessions
|
|
95
|
+
- **Risk Engine**: Validates findings and calculates risk scores
|
|
96
|
+
|
|
97
|
+
### 3. AI Agents
|
|
98
|
+
Specialized agents for different penetration testing phases:
|
|
99
|
+
- **Reconnaissance**: Network scanning and enumeration
|
|
100
|
+
- **Vulnerability**: Identifies security weaknesses
|
|
101
|
+
- **Exploit**: Attempts controlled exploitation
|
|
102
|
+
- **Report**: Generates comprehensive reports
|
|
103
|
+
|
|
104
|
+
### 4. Tool Integration
|
|
105
|
+
Integrates with industry-standard security tools:
|
|
106
|
+
- Nmap, Gobuster, SQLMap, Metasploit
|
|
107
|
+
- Custom exploitation modules
|
|
108
|
+
|
|
109
|
+
### 5. External APIs
|
|
110
|
+
- **LLM Providers**: OpenAI, Anthropic, Local Ollama
|
|
111
|
+
- **Threat Intelligence**: Real-time threat data
|
|
112
|
+
|
|
113
|
+
## Data Flow
|
|
114
|
+
|
|
115
|
+
1. User input → API → Orchestrator
|
|
116
|
+
2. Orchestrator selects appropriate agent
|
|
117
|
+
3. Agent uses tools and AI consensus
|
|
118
|
+
4. Results validated by Risk Engine
|
|
119
|
+
5. Evidence collected and reports generated
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<svg viewBox="0 0 1000 700" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<!-- Background -->
|
|
3
|
+
<rect width="1000" height="700" fill="#f8f9fa"/>
|
|
4
|
+
|
|
5
|
+
<!-- Title -->
|
|
6
|
+
<text x="500" y="30" text-anchor="middle" font-size="24" font-weight="bold" fill="#212529">Zen AI Pentest Architecture</text>
|
|
7
|
+
|
|
8
|
+
<!-- User Interface Layer -->
|
|
9
|
+
<rect x="50" y="60" width="280" height="100" rx="10" fill="#e3f2fd" stroke="#1976d2" stroke-width="2"/>
|
|
10
|
+
<text x="190" y="85" text-anchor="middle" font-size="14" font-weight="bold" fill="#1565c0">User Interface Layer</text>
|
|
11
|
+
<rect x="70" y="100" width="70" height="40" rx="5" fill="#fff" stroke="#1976d2"/>
|
|
12
|
+
<text x="105" y="125" text-anchor="middle" font-size="11" fill="#1565c0">CLI</text>
|
|
13
|
+
<rect x="155" y="100" width="70" height="40" rx="5" fill="#fff" stroke="#1976d2"/>
|
|
14
|
+
<text x="190" y="125" text-anchor="middle" font-size="11" fill="#1565c0">REST API</text>
|
|
15
|
+
<rect x="240" y="100" width="70" height="40" rx="5" fill="#fff" stroke="#1976d2"/>
|
|
16
|
+
<text x="275" y="125" text-anchor="middle" font-size="11" fill="#1565c0">Web UI</text>
|
|
17
|
+
|
|
18
|
+
<!-- Core Engine -->
|
|
19
|
+
<rect x="350" y="60" width="300" height="120" rx="10" fill="#fff3e0" stroke="#f57c00" stroke-width="2"/>
|
|
20
|
+
<text x="500" y="85" text-anchor="middle" font-size="14" font-weight="bold" fill="#e65100">Core Engine</text>
|
|
21
|
+
<rect x="370" y="100" width="120" height="30" rx="5" fill="#fff" stroke="#f57c00"/>
|
|
22
|
+
<text x="430" y="120" text-anchor="middle" font-size="11" fill="#e65100">Agent Orchestrator</text>
|
|
23
|
+
<rect x="510" y="100" width="120" height="30" rx="5" fill="#fff" stroke="#f57c00"/>
|
|
24
|
+
<text x="570" y="120" text-anchor="middle" font-size="11" fill="#e65100">State Machine</text>
|
|
25
|
+
<rect x="370" y="140" width="120" height="30" rx="5" fill="#fff" stroke="#f57c00"/>
|
|
26
|
+
<text x="430" y="160" text-anchor="middle" font-size="11" fill="#e65100">Memory System</text>
|
|
27
|
+
<rect x="510" y="140" width="120" height="30" rx="5" fill="#fff" stroke="#f57c00"/>
|
|
28
|
+
<text x="570" y="160" text-anchor="middle" font-size="11" fill="#e65100">Risk Engine</text>
|
|
29
|
+
|
|
30
|
+
<!-- AI Agents -->
|
|
31
|
+
<rect x="50" y="200" width="280" height="140" rx="10" fill="#e8f5e9" stroke="#388e3c" stroke-width="2"/>
|
|
32
|
+
<text x="190" y="225" text-anchor="middle" font-size="14" font-weight="bold" fill="#2e7d32">AI Agents</text>
|
|
33
|
+
<rect x="70" y="245" width="110" height="35" rx="5" fill="#fff" stroke="#388e3c"/>
|
|
34
|
+
<text x="125" y="267" text-anchor="middle" font-size="10" fill="#2e7d32">Reconnaissance</text>
|
|
35
|
+
<rect x="200" y="245" width="110" height="35" rx="5" fill="#fff" stroke="#388e3c"/>
|
|
36
|
+
<text x="255" y="267" text-anchor="middle" font-size="10" fill="#2e7d32">Vulnerability</text>
|
|
37
|
+
<rect x="70" y="290" width="110" height="35" rx="5" fill="#fff" stroke="#388e3c"/>
|
|
38
|
+
<text x="125" y="312" text-anchor="middle" font-size="10" fill="#2e7d32">Exploit Agent</text>
|
|
39
|
+
<rect x="200" y="290" width="110" height="35" rx="5" fill="#fff" stroke="#388e3c"/>
|
|
40
|
+
<text x="255" y="312" text-anchor="middle" font-size="10" fill="#2e7d32">Report Agent</text>
|
|
41
|
+
|
|
42
|
+
<!-- Tool Integration -->
|
|
43
|
+
<rect x="50" y="360" width="280" height="100" rx="10" fill="#fce4ec" stroke="#c2185b" stroke-width="2"/>
|
|
44
|
+
<text x="190" y="385" text-anchor="middle" font-size="14" font-weight="bold" fill="#ad1457">Tool Integration</text>
|
|
45
|
+
<rect x="70" y="400" width="50" height="30" rx="5" fill="#fff" stroke="#c2185b"/>
|
|
46
|
+
<text x="95" y="420" text-anchor="middle" font-size="10" fill="#ad1457">Nmap</text>
|
|
47
|
+
<rect x="130" y="400" width="70" height="30" rx="5" fill="#fff" stroke="#c2185b"/>
|
|
48
|
+
<text x="165" y="420" text-anchor="middle" font-size="10" fill="#ad1457">Gobuster</text>
|
|
49
|
+
<rect x="210" y="400" width="50" height="30" rx="5" fill="#fff" stroke="#c2185b"/>
|
|
50
|
+
<text x="235" y="420" text-anchor="middle" font-size="10" fill="#ad1457">SQLMap</text>
|
|
51
|
+
<rect x="70" y="440" width="80" height="30" rx="5" fill="#fff" stroke="#c2185b"/>
|
|
52
|
+
<text x="110" y="458" text-anchor="middle" font-size="9" fill="#ad1457">Metasploit</text>
|
|
53
|
+
<rect x="160" y="440" width="100" height="30" rx="5" fill="#fff" stroke="#c2185b"/>
|
|
54
|
+
<text x="210" y="458" text-anchor="middle" font-size="9" fill="#ad1457">Custom Tools</text>
|
|
55
|
+
|
|
56
|
+
<!-- External APIs -->
|
|
57
|
+
<rect x="670" y="60" width="280" height="120" rx="10" fill="#f3e5f5" stroke="#7b1fa2" stroke-width="2"/>
|
|
58
|
+
<text x="810" y="85" text-anchor="middle" font-size="14" font-weight="bold" fill="#6a1b9a">External APIs</text>
|
|
59
|
+
<rect x="690" y="100" width="70" height="35" rx="5" fill="#fff" stroke="#7b1fa2"/>
|
|
60
|
+
<text x="725" y="122" text-anchor="middle" font-size="10" fill="#6a1b9a">OpenAI</text>
|
|
61
|
+
<rect x="775" y="100" width="80" height="35" rx="5" fill="#fff" stroke="#7b1fa2"/>
|
|
62
|
+
<text x="815" y="122" text-anchor="middle" font-size="10" fill="#6a1b9a">Anthropic</text>
|
|
63
|
+
<rect x="690" y="145" width="70" height="35" rx="5" fill="#fff" stroke="#7b1fa2"/>
|
|
64
|
+
<text x="725" y="165" text-anchor="middle" font-size="10" fill="#6a1b9a">Ollama</text>
|
|
65
|
+
<rect x="775" y="145" width="155" height="35" rx="5" fill="#fff" stroke="#7b1fa2"/>
|
|
66
|
+
<text x="852" y="165" text-anchor="middle" font-size="9" fill="#6a1b9a">Threat Intelligence</text>
|
|
67
|
+
|
|
68
|
+
<!-- Data Storage -->
|
|
69
|
+
<rect x="670" y="200" width="280" height="140" rx="10" fill="#e0f2f1" stroke="#00796b" stroke-width="2"/>
|
|
70
|
+
<text x="810" y="225" text-anchor="middle" font-size="14" font-weight="bold" fill="#00695c">Data Storage</text>
|
|
71
|
+
<rect x="690" y="245" width="110" height="35" rx="5" fill="#fff" stroke="#00796b"/>
|
|
72
|
+
<text x="745" y="267" text-anchor="middle" font-size="10" fill="#00695c">Evidence</text>
|
|
73
|
+
<rect x="820" y="245" width="110" height="35" rx="5" fill="#fff" stroke="#00796b"/>
|
|
74
|
+
<text x="875" y="267" text-anchor="middle" font-size="10" fill="#00695c">Audit Logs</text>
|
|
75
|
+
<rect x="690" y="290" width="110" height="35" rx="5" fill="#fff" stroke="#00796b"/>
|
|
76
|
+
<text x="745" y="312" text-anchor="middle" font-size="10" fill="#00695c">Reports</text>
|
|
77
|
+
<rect x="820" y="290" width="110" height="35" rx="5" fill="#fff" stroke="#00796b"/>
|
|
78
|
+
<text x="875" y="312" text-anchor="middle" font-size="10" fill="#00695c">CVE Database</text>
|
|
79
|
+
|
|
80
|
+
<!-- Arrows -->
|
|
81
|
+
<!-- UI to Core -->
|
|
82
|
+
<line x1="330" y1="110" x2="350" y2="110" stroke="#333" stroke-width="2" marker-end="url(#arrowhead)"/>
|
|
83
|
+
|
|
84
|
+
<!-- Core to Agents -->
|
|
85
|
+
<line x1="350" y1="180" x2="330" y2="260" stroke="#333" stroke-width="2" marker-end="url(#arrowhead)"/>
|
|
86
|
+
|
|
87
|
+
<!-- Agents to Tools -->
|
|
88
|
+
<line x1="125" y1="340" x2="125" y2="360" stroke="#333" stroke-width="2" marker-end="url(#arrowhead)"/>
|
|
89
|
+
|
|
90
|
+
<!-- Core to External -->
|
|
91
|
+
<line x1="650" y1="120" x2="670" y2="120" stroke="#333" stroke-width="2" marker-end="url(#arrowhead)"/>
|
|
92
|
+
|
|
93
|
+
<!-- Core to Storage -->
|
|
94
|
+
<line x1="650" y1="200" x2="670" y2="260" stroke="#333" stroke-width="2" marker-end="url(#arrowhead)"/>
|
|
95
|
+
|
|
96
|
+
<!-- Arrow marker -->
|
|
97
|
+
<defs>
|
|
98
|
+
<marker id="arrowhead" markerWidth="10" markerHeight="7" refX="9" refY="3.5" orient="auto">
|
|
99
|
+
<polygon points="0 0, 10 3.5, 0 7" fill="#333"/>
|
|
100
|
+
</marker>
|
|
101
|
+
</defs>
|
|
102
|
+
|
|
103
|
+
<!-- Legend -->
|
|
104
|
+
<rect x="50" y="480" width="900" height="200" rx="10" fill="#fff" stroke="#ddd" stroke-width="1"/>
|
|
105
|
+
<text x="500" y="510" text-anchor="middle" font-size="16" font-weight="bold" fill="#333">Data Flow</text>
|
|
106
|
+
<text x="70" y="540" font-size="12" fill="#555">1. User input → API → Orchestrator</text>
|
|
107
|
+
<text x="70" y="565" font-size="12" fill="#555">2. Orchestrator selects appropriate agent based on state</text>
|
|
108
|
+
<text x="70" y="590" font-size="12" fill="#555">3. Agent uses security tools and AI consensus</text>
|
|
109
|
+
<text x="70" y="615" font-size="12" fill="#555">4. Risk Engine validates findings with threat intelligence</text>
|
|
110
|
+
<text x="70" y="640" font-size="12" fill="#555">5. Evidence collected, reports generated, audit trail maintained</text>
|
|
111
|
+
<text x="70" y="665" font-size="12" fill="#555">6. Results presented via CLI, API, or Web UI</text>
|
|
112
|
+
</svg>
|
|
@@ -10,7 +10,7 @@ from .osint import (DomainInfo, EmailProfile, OSINTModule, OSINTResult,
|
|
|
10
10
|
from .protonvpn import (ProtonVPNManager, VPNProtocol, VPNSecurityLevel,
|
|
11
11
|
VPNServer, VPNStatus, quick_connect, secure_connect)
|
|
12
12
|
from .recon import ReconModule
|
|
13
|
-
from .report_gen import ReportGenerator
|
|
13
|
+
# from .report_gen import ReportGenerator # Module not available
|
|
14
14
|
from .sql_injection_db import (DBType, SQLInjectionDatabase, SQLITechnique,
|
|
15
15
|
SQLPayload)
|
|
16
16
|
from .vuln_scanner import VulnScannerModule
|
|
@@ -19,7 +19,7 @@ __all__ = [
|
|
|
19
19
|
"ReconModule",
|
|
20
20
|
"VulnScannerModule",
|
|
21
21
|
"ExploitAssistModule",
|
|
22
|
-
"ReportGenerator",
|
|
22
|
+
# "ReportGenerator", # Module not available
|
|
23
23
|
"NucleiIntegration",
|
|
24
24
|
"NucleiTemplateManager",
|
|
25
25
|
"SQLInjectionDatabase",
|