souleyez 2.43.26__py3-none-any.whl → 2.43.34__py3-none-any.whl

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.

Potentially problematic release.


This version of souleyez might be problematic. Click here for more details.

Files changed (358) hide show
  1. souleyez/__init__.py +1 -2
  2. souleyez/ai/__init__.py +21 -15
  3. souleyez/ai/action_mapper.py +249 -150
  4. souleyez/ai/chain_advisor.py +116 -100
  5. souleyez/ai/claude_provider.py +29 -28
  6. souleyez/ai/context_builder.py +80 -62
  7. souleyez/ai/executor.py +158 -117
  8. souleyez/ai/feedback_handler.py +136 -121
  9. souleyez/ai/llm_factory.py +27 -20
  10. souleyez/ai/llm_provider.py +4 -2
  11. souleyez/ai/ollama_provider.py +6 -9
  12. souleyez/ai/ollama_service.py +44 -37
  13. souleyez/ai/path_scorer.py +91 -76
  14. souleyez/ai/recommender.py +176 -144
  15. souleyez/ai/report_context.py +74 -73
  16. souleyez/ai/report_service.py +84 -66
  17. souleyez/ai/result_parser.py +222 -229
  18. souleyez/ai/safety.py +67 -44
  19. souleyez/auth/__init__.py +23 -22
  20. souleyez/auth/audit.py +36 -26
  21. souleyez/auth/engagement_access.py +65 -48
  22. souleyez/auth/permissions.py +14 -3
  23. souleyez/auth/session_manager.py +54 -37
  24. souleyez/auth/user_manager.py +109 -64
  25. souleyez/commands/audit.py +40 -43
  26. souleyez/commands/auth.py +35 -15
  27. souleyez/commands/deliverables.py +55 -50
  28. souleyez/commands/engagement.py +47 -28
  29. souleyez/commands/license.py +32 -23
  30. souleyez/commands/screenshots.py +36 -32
  31. souleyez/commands/user.py +82 -36
  32. souleyez/config.py +52 -44
  33. souleyez/core/credential_tester.py +87 -81
  34. souleyez/core/cve_mappings.py +179 -192
  35. souleyez/core/cve_matcher.py +162 -148
  36. souleyez/core/msf_auto_mapper.py +100 -83
  37. souleyez/core/msf_chain_engine.py +294 -256
  38. souleyez/core/msf_database.py +153 -70
  39. souleyez/core/msf_integration.py +679 -673
  40. souleyez/core/msf_rpc_client.py +40 -42
  41. souleyez/core/msf_rpc_manager.py +77 -79
  42. souleyez/core/msf_sync_manager.py +241 -181
  43. souleyez/core/network_utils.py +22 -15
  44. souleyez/core/parser_handler.py +34 -25
  45. souleyez/core/pending_chains.py +114 -63
  46. souleyez/core/templates.py +158 -107
  47. souleyez/core/tool_chaining.py +9526 -2879
  48. souleyez/core/version_utils.py +79 -94
  49. souleyez/core/vuln_correlation.py +136 -89
  50. souleyez/core/web_utils.py +33 -32
  51. souleyez/data/wordlists/ad_users.txt +378 -0
  52. souleyez/data/wordlists/api_endpoints_large.txt +769 -0
  53. souleyez/data/wordlists/home_dir_sensitive.txt +39 -0
  54. souleyez/data/wordlists/lfi_payloads.txt +82 -0
  55. souleyez/data/wordlists/passwords_brute.txt +1548 -0
  56. souleyez/data/wordlists/passwords_crack.txt +2479 -0
  57. souleyez/data/wordlists/passwords_spray.txt +386 -0
  58. souleyez/data/wordlists/subdomains_large.txt +5057 -0
  59. souleyez/data/wordlists/usernames_common.txt +694 -0
  60. souleyez/data/wordlists/web_dirs_large.txt +4769 -0
  61. souleyez/detection/__init__.py +1 -1
  62. souleyez/detection/attack_signatures.py +12 -17
  63. souleyez/detection/mitre_mappings.py +61 -55
  64. souleyez/detection/validator.py +97 -86
  65. souleyez/devtools.py +23 -10
  66. souleyez/docs/README.md +4 -4
  67. souleyez/docs/api-reference/cli-commands.md +2 -2
  68. souleyez/docs/developer-guide/adding-new-tools.md +562 -0
  69. souleyez/docs/user-guide/auto-chaining.md +30 -8
  70. souleyez/docs/user-guide/getting-started.md +1 -1
  71. souleyez/docs/user-guide/installation.md +26 -3
  72. souleyez/docs/user-guide/metasploit-integration.md +2 -2
  73. souleyez/docs/user-guide/rbac.md +1 -1
  74. souleyez/docs/user-guide/scope-management.md +1 -1
  75. souleyez/docs/user-guide/siem-integration.md +1 -1
  76. souleyez/docs/user-guide/tools-reference.md +1 -8
  77. souleyez/docs/user-guide/worker-management.md +1 -1
  78. souleyez/engine/background.py +1239 -535
  79. souleyez/engine/base.py +4 -1
  80. souleyez/engine/job_status.py +17 -49
  81. souleyez/engine/log_sanitizer.py +103 -77
  82. souleyez/engine/manager.py +38 -7
  83. souleyez/engine/result_handler.py +2200 -1550
  84. souleyez/engine/worker_manager.py +50 -41
  85. souleyez/export/evidence_bundle.py +72 -62
  86. souleyez/feature_flags/features.py +16 -20
  87. souleyez/feature_flags.py +5 -9
  88. souleyez/handlers/__init__.py +11 -0
  89. souleyez/handlers/base.py +188 -0
  90. souleyez/handlers/bash_handler.py +277 -0
  91. souleyez/handlers/bloodhound_handler.py +243 -0
  92. souleyez/handlers/certipy_handler.py +311 -0
  93. souleyez/handlers/crackmapexec_handler.py +486 -0
  94. souleyez/handlers/dnsrecon_handler.py +344 -0
  95. souleyez/handlers/enum4linux_handler.py +400 -0
  96. souleyez/handlers/evil_winrm_handler.py +493 -0
  97. souleyez/handlers/ffuf_handler.py +815 -0
  98. souleyez/handlers/gobuster_handler.py +1114 -0
  99. souleyez/handlers/gpp_extract_handler.py +334 -0
  100. souleyez/handlers/hashcat_handler.py +444 -0
  101. souleyez/handlers/hydra_handler.py +563 -0
  102. souleyez/handlers/impacket_getuserspns_handler.py +343 -0
  103. souleyez/handlers/impacket_psexec_handler.py +222 -0
  104. souleyez/handlers/impacket_secretsdump_handler.py +426 -0
  105. souleyez/handlers/john_handler.py +286 -0
  106. souleyez/handlers/katana_handler.py +425 -0
  107. souleyez/handlers/kerbrute_handler.py +298 -0
  108. souleyez/handlers/ldapsearch_handler.py +636 -0
  109. souleyez/handlers/lfi_extract_handler.py +464 -0
  110. souleyez/handlers/msf_auxiliary_handler.py +408 -0
  111. souleyez/handlers/msf_exploit_handler.py +380 -0
  112. souleyez/handlers/nikto_handler.py +413 -0
  113. souleyez/handlers/nmap_handler.py +821 -0
  114. souleyez/handlers/nuclei_handler.py +359 -0
  115. souleyez/handlers/nxc_handler.py +371 -0
  116. souleyez/handlers/rdp_sec_check_handler.py +353 -0
  117. souleyez/handlers/registry.py +292 -0
  118. souleyez/handlers/responder_handler.py +232 -0
  119. souleyez/handlers/service_explorer_handler.py +434 -0
  120. souleyez/handlers/smbclient_handler.py +344 -0
  121. souleyez/handlers/smbmap_handler.py +510 -0
  122. souleyez/handlers/smbpasswd_handler.py +296 -0
  123. souleyez/handlers/sqlmap_handler.py +1116 -0
  124. souleyez/handlers/theharvester_handler.py +601 -0
  125. souleyez/handlers/web_login_test_handler.py +327 -0
  126. souleyez/handlers/whois_handler.py +277 -0
  127. souleyez/handlers/wpscan_handler.py +554 -0
  128. souleyez/history.py +32 -16
  129. souleyez/importers/msf_importer.py +106 -75
  130. souleyez/importers/smart_importer.py +208 -147
  131. souleyez/integrations/siem/__init__.py +10 -10
  132. souleyez/integrations/siem/base.py +17 -18
  133. souleyez/integrations/siem/elastic.py +108 -122
  134. souleyez/integrations/siem/factory.py +207 -80
  135. souleyez/integrations/siem/googlesecops.py +146 -154
  136. souleyez/integrations/siem/rule_mappings/__init__.py +1 -1
  137. souleyez/integrations/siem/rule_mappings/wazuh_rules.py +8 -5
  138. souleyez/integrations/siem/sentinel.py +107 -109
  139. souleyez/integrations/siem/splunk.py +246 -212
  140. souleyez/integrations/siem/wazuh.py +65 -71
  141. souleyez/integrations/wazuh/__init__.py +5 -5
  142. souleyez/integrations/wazuh/client.py +70 -93
  143. souleyez/integrations/wazuh/config.py +85 -57
  144. souleyez/integrations/wazuh/host_mapper.py +28 -36
  145. souleyez/integrations/wazuh/sync.py +78 -68
  146. souleyez/intelligence/__init__.py +4 -5
  147. souleyez/intelligence/correlation_analyzer.py +309 -295
  148. souleyez/intelligence/exploit_knowledge.py +661 -623
  149. souleyez/intelligence/exploit_suggestions.py +159 -139
  150. souleyez/intelligence/gap_analyzer.py +132 -97
  151. souleyez/intelligence/gap_detector.py +251 -214
  152. souleyez/intelligence/sensitive_tables.py +266 -129
  153. souleyez/intelligence/service_parser.py +137 -123
  154. souleyez/intelligence/surface_analyzer.py +407 -268
  155. souleyez/intelligence/target_parser.py +159 -162
  156. souleyez/licensing/__init__.py +6 -6
  157. souleyez/licensing/validator.py +17 -19
  158. souleyez/log_config.py +79 -54
  159. souleyez/main.py +1505 -687
  160. souleyez/migrations/fix_job_counter.py +16 -14
  161. souleyez/parsers/bloodhound_parser.py +41 -39
  162. souleyez/parsers/crackmapexec_parser.py +178 -111
  163. souleyez/parsers/dalfox_parser.py +72 -77
  164. souleyez/parsers/dnsrecon_parser.py +103 -91
  165. souleyez/parsers/enum4linux_parser.py +183 -153
  166. souleyez/parsers/ffuf_parser.py +29 -25
  167. souleyez/parsers/gobuster_parser.py +301 -41
  168. souleyez/parsers/hashcat_parser.py +324 -79
  169. souleyez/parsers/http_fingerprint_parser.py +350 -103
  170. souleyez/parsers/hydra_parser.py +131 -111
  171. souleyez/parsers/impacket_parser.py +231 -178
  172. souleyez/parsers/john_parser.py +98 -86
  173. souleyez/parsers/katana_parser.py +316 -0
  174. souleyez/parsers/msf_parser.py +943 -498
  175. souleyez/parsers/nikto_parser.py +346 -65
  176. souleyez/parsers/nmap_parser.py +262 -174
  177. souleyez/parsers/nuclei_parser.py +40 -44
  178. souleyez/parsers/responder_parser.py +26 -26
  179. souleyez/parsers/searchsploit_parser.py +74 -74
  180. souleyez/parsers/service_explorer_parser.py +279 -0
  181. souleyez/parsers/smbmap_parser.py +180 -124
  182. souleyez/parsers/sqlmap_parser.py +434 -308
  183. souleyez/parsers/theharvester_parser.py +75 -57
  184. souleyez/parsers/whois_parser.py +135 -94
  185. souleyez/parsers/wpscan_parser.py +278 -190
  186. souleyez/plugins/afp.py +44 -36
  187. souleyez/plugins/afp_brute.py +114 -46
  188. souleyez/plugins/ard.py +48 -37
  189. souleyez/plugins/bloodhound.py +95 -61
  190. souleyez/plugins/certipy.py +303 -0
  191. souleyez/plugins/crackmapexec.py +186 -85
  192. souleyez/plugins/dalfox.py +120 -59
  193. souleyez/plugins/dns_hijack.py +146 -41
  194. souleyez/plugins/dnsrecon.py +97 -61
  195. souleyez/plugins/enum4linux.py +91 -66
  196. souleyez/plugins/evil_winrm.py +291 -0
  197. souleyez/plugins/ffuf.py +166 -90
  198. souleyez/plugins/firmware_extract.py +133 -29
  199. souleyez/plugins/gobuster.py +387 -190
  200. souleyez/plugins/gpp_extract.py +393 -0
  201. souleyez/plugins/hashcat.py +100 -73
  202. souleyez/plugins/http_fingerprint.py +854 -267
  203. souleyez/plugins/hydra.py +566 -200
  204. souleyez/plugins/impacket_getnpusers.py +117 -69
  205. souleyez/plugins/impacket_psexec.py +84 -64
  206. souleyez/plugins/impacket_secretsdump.py +103 -69
  207. souleyez/plugins/impacket_smbclient.py +89 -75
  208. souleyez/plugins/john.py +86 -69
  209. souleyez/plugins/katana.py +313 -0
  210. souleyez/plugins/kerbrute.py +237 -0
  211. souleyez/plugins/lfi_extract.py +541 -0
  212. souleyez/plugins/macos_ssh.py +117 -48
  213. souleyez/plugins/mdns.py +35 -30
  214. souleyez/plugins/msf_auxiliary.py +253 -130
  215. souleyez/plugins/msf_exploit.py +239 -161
  216. souleyez/plugins/nikto.py +134 -78
  217. souleyez/plugins/nmap.py +275 -91
  218. souleyez/plugins/nuclei.py +180 -89
  219. souleyez/plugins/nxc.py +285 -0
  220. souleyez/plugins/plugin_base.py +35 -36
  221. souleyez/plugins/plugin_template.py +13 -5
  222. souleyez/plugins/rdp_sec_check.py +130 -0
  223. souleyez/plugins/responder.py +112 -71
  224. souleyez/plugins/router_http_brute.py +76 -65
  225. souleyez/plugins/router_ssh_brute.py +118 -41
  226. souleyez/plugins/router_telnet_brute.py +124 -42
  227. souleyez/plugins/routersploit.py +91 -59
  228. souleyez/plugins/routersploit_exploit.py +77 -55
  229. souleyez/plugins/searchsploit.py +91 -77
  230. souleyez/plugins/service_explorer.py +1160 -0
  231. souleyez/plugins/smbmap.py +122 -72
  232. souleyez/plugins/smbpasswd.py +215 -0
  233. souleyez/plugins/sqlmap.py +301 -113
  234. souleyez/plugins/theharvester.py +127 -75
  235. souleyez/plugins/tr069.py +79 -57
  236. souleyez/plugins/upnp.py +65 -47
  237. souleyez/plugins/upnp_abuse.py +73 -55
  238. souleyez/plugins/vnc_access.py +129 -42
  239. souleyez/plugins/vnc_brute.py +109 -38
  240. souleyez/plugins/web_login_test.py +417 -0
  241. souleyez/plugins/whois.py +77 -58
  242. souleyez/plugins/wpscan.py +173 -69
  243. souleyez/reporting/__init__.py +2 -1
  244. souleyez/reporting/attack_chain.py +411 -346
  245. souleyez/reporting/charts.py +436 -501
  246. souleyez/reporting/compliance_mappings.py +334 -201
  247. souleyez/reporting/detection_report.py +126 -125
  248. souleyez/reporting/formatters.py +828 -591
  249. souleyez/reporting/generator.py +386 -302
  250. souleyez/reporting/metrics.py +72 -75
  251. souleyez/scanner.py +35 -29
  252. souleyez/security/__init__.py +37 -11
  253. souleyez/security/scope_validator.py +175 -106
  254. souleyez/security/validation.py +223 -149
  255. souleyez/security.py +22 -6
  256. souleyez/storage/credentials.py +247 -186
  257. souleyez/storage/crypto.py +296 -129
  258. souleyez/storage/database.py +73 -50
  259. souleyez/storage/db.py +58 -36
  260. souleyez/storage/deliverable_evidence.py +177 -128
  261. souleyez/storage/deliverable_exporter.py +282 -246
  262. souleyez/storage/deliverable_templates.py +134 -116
  263. souleyez/storage/deliverables.py +135 -130
  264. souleyez/storage/engagements.py +109 -56
  265. souleyez/storage/evidence.py +181 -152
  266. souleyez/storage/execution_log.py +31 -17
  267. souleyez/storage/exploit_attempts.py +93 -57
  268. souleyez/storage/exploits.py +67 -36
  269. souleyez/storage/findings.py +48 -61
  270. souleyez/storage/hosts.py +176 -144
  271. souleyez/storage/migrate_to_engagements.py +43 -19
  272. souleyez/storage/migrations/_001_add_credential_enhancements.py +22 -12
  273. souleyez/storage/migrations/_002_add_status_tracking.py +10 -7
  274. souleyez/storage/migrations/_003_add_execution_log.py +14 -8
  275. souleyez/storage/migrations/_005_screenshots.py +13 -5
  276. souleyez/storage/migrations/_006_deliverables.py +13 -5
  277. souleyez/storage/migrations/_007_deliverable_templates.py +12 -7
  278. souleyez/storage/migrations/_008_add_nuclei_table.py +10 -4
  279. souleyez/storage/migrations/_010_evidence_linking.py +17 -10
  280. souleyez/storage/migrations/_011_timeline_tracking.py +20 -13
  281. souleyez/storage/migrations/_012_team_collaboration.py +34 -21
  282. souleyez/storage/migrations/_013_add_host_tags.py +12 -6
  283. souleyez/storage/migrations/_014_exploit_attempts.py +22 -10
  284. souleyez/storage/migrations/_015_add_mac_os_fields.py +15 -7
  285. souleyez/storage/migrations/_016_add_domain_field.py +10 -4
  286. souleyez/storage/migrations/_017_msf_sessions.py +16 -8
  287. souleyez/storage/migrations/_018_add_osint_target.py +10 -6
  288. souleyez/storage/migrations/_019_add_engagement_type.py +10 -6
  289. souleyez/storage/migrations/_020_add_rbac.py +36 -15
  290. souleyez/storage/migrations/_021_wazuh_integration.py +20 -8
  291. souleyez/storage/migrations/_022_wazuh_indexer_columns.py +6 -4
  292. souleyez/storage/migrations/_023_fix_detection_results_fk.py +16 -6
  293. souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +26 -10
  294. souleyez/storage/migrations/_025_multi_siem_support.py +3 -5
  295. souleyez/storage/migrations/_026_add_engagement_scope.py +31 -12
  296. souleyez/storage/migrations/_027_multi_siem_persistence.py +32 -15
  297. souleyez/storage/migrations/__init__.py +26 -26
  298. souleyez/storage/migrations/migration_manager.py +19 -19
  299. souleyez/storage/msf_sessions.py +100 -65
  300. souleyez/storage/osint.py +17 -24
  301. souleyez/storage/recommendation_engine.py +269 -235
  302. souleyez/storage/screenshots.py +33 -32
  303. souleyez/storage/smb_shares.py +136 -92
  304. souleyez/storage/sqlmap_data.py +183 -128
  305. souleyez/storage/team_collaboration.py +135 -141
  306. souleyez/storage/timeline_tracker.py +122 -94
  307. souleyez/storage/wazuh_vulns.py +64 -66
  308. souleyez/storage/web_paths.py +33 -37
  309. souleyez/testing/credential_tester.py +221 -205
  310. souleyez/ui/__init__.py +1 -1
  311. souleyez/ui/ai_quotes.py +12 -12
  312. souleyez/ui/attack_surface.py +2439 -1516
  313. souleyez/ui/chain_rules_view.py +914 -382
  314. souleyez/ui/correlation_view.py +312 -230
  315. souleyez/ui/dashboard.py +2382 -1130
  316. souleyez/ui/deliverables_view.py +148 -62
  317. souleyez/ui/design_system.py +13 -13
  318. souleyez/ui/errors.py +49 -49
  319. souleyez/ui/evidence_linking_view.py +284 -179
  320. souleyez/ui/evidence_vault.py +393 -285
  321. souleyez/ui/exploit_suggestions_view.py +555 -349
  322. souleyez/ui/export_view.py +100 -66
  323. souleyez/ui/gap_analysis_view.py +315 -171
  324. souleyez/ui/help_system.py +105 -97
  325. souleyez/ui/intelligence_view.py +436 -293
  326. souleyez/ui/interactive.py +23434 -10286
  327. souleyez/ui/interactive_selector.py +75 -68
  328. souleyez/ui/log_formatter.py +47 -39
  329. souleyez/ui/menu_components.py +22 -13
  330. souleyez/ui/msf_auxiliary_menu.py +184 -133
  331. souleyez/ui/pending_chains_view.py +336 -172
  332. souleyez/ui/progress_indicators.py +5 -3
  333. souleyez/ui/recommendations_view.py +195 -137
  334. souleyez/ui/rule_builder.py +343 -225
  335. souleyez/ui/setup_wizard.py +678 -284
  336. souleyez/ui/shortcuts.py +217 -165
  337. souleyez/ui/splunk_gap_analysis_view.py +452 -270
  338. souleyez/ui/splunk_vulns_view.py +139 -86
  339. souleyez/ui/team_dashboard.py +498 -335
  340. souleyez/ui/template_selector.py +196 -105
  341. souleyez/ui/terminal.py +6 -6
  342. souleyez/ui/timeline_view.py +198 -127
  343. souleyez/ui/tool_setup.py +264 -164
  344. souleyez/ui/tutorial.py +202 -72
  345. souleyez/ui/tutorial_state.py +40 -40
  346. souleyez/ui/wazuh_vulns_view.py +235 -141
  347. souleyez/ui/wordlist_browser.py +260 -107
  348. souleyez/ui.py +464 -312
  349. souleyez/utils/tool_checker.py +427 -367
  350. souleyez/utils.py +33 -29
  351. souleyez/wordlists.py +134 -167
  352. {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/METADATA +1 -1
  353. souleyez-2.43.34.dist-info/RECORD +443 -0
  354. {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/WHEEL +1 -1
  355. souleyez-2.43.26.dist-info/RECORD +0 -379
  356. {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/entry_points.txt +0 -0
  357. {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/licenses/LICENSE +0 -0
  358. {souleyez-2.43.26.dist-info → souleyez-2.43.34.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,7 @@ from typing import Dict, List, Optional
10
10
 
11
11
  class HelpContext:
12
12
  """Enum-like class for help contexts."""
13
+
13
14
  MAIN_MENU = "main_menu"
14
15
  ENGAGEMENT_MENU = "engagement_menu"
15
16
  TOOLS_MENU = "tools_menu"
@@ -32,16 +33,15 @@ HELP_CONTENT: Dict[str, Dict] = {
32
33
  "shortcuts": {
33
34
  "1-9": "Select a menu option",
34
35
  "q": "Quit / Go back",
35
- "?": "Show this help"
36
+ "?": "Show this help",
36
37
  },
37
38
  "tips": [
38
39
  "Start by creating or selecting an engagement",
39
40
  "Use 'Run Tools' to queue scans against your target",
40
41
  "Check 'Dashboard' to monitor active scans",
41
- "View 'Findings' to see discovered vulnerabilities"
42
- ]
42
+ "View 'Findings' to see discovered vulnerabilities",
43
+ ],
43
44
  },
44
-
45
45
  HelpContext.ENGAGEMENT_MENU: {
46
46
  "title": "Engagement Management Help",
47
47
  "description": "Engagements keep your pentest data organized and isolated.",
@@ -49,39 +49,37 @@ HELP_CONTENT: Dict[str, Dict] = {
49
49
  "1-9": "Select an engagement",
50
50
  "+": "Create new engagement",
51
51
  "-": "Delete an engagement",
52
- "q": "Go back"
52
+ "q": "Go back",
53
53
  },
54
54
  "tips": [
55
55
  "Each engagement is like a project folder",
56
56
  "All hosts, findings, and credentials are scoped to the engagement",
57
57
  "Use presets for quick setup (Web, Network, AD)",
58
- "You can have multiple engagements active"
59
- ]
58
+ "You can have multiple engagements active",
59
+ ],
60
60
  },
61
-
62
61
  HelpContext.TOOLS_MENU: {
63
62
  "title": "Tools Menu Help",
64
63
  "description": "Run pentesting tools against your targets.",
65
64
  "shortcuts": {
66
65
  "1-9": "Select a tool category",
67
66
  "s": "Search for a tool",
68
- "q": "Go back"
67
+ "q": "Go back",
69
68
  },
70
69
  "tips": [
71
70
  "Tools are organized by category (Recon, Enum, Exploit, etc.)",
72
71
  "Tool chaining automatically queues follow-up scans",
73
72
  "Check 'souleyez setup' if tools are missing",
74
- "View tool output in the Dashboard"
73
+ "View tool output in the Dashboard",
75
74
  ],
76
75
  "tool_categories": {
77
76
  "Reconnaissance": "nmap, masscan, whatweb - Discover hosts and services",
78
77
  "Enumeration": "enum4linux, smbclient, snmpwalk - Gather details",
79
78
  "Web Testing": "nikto, gobuster, sqlmap - Web vulnerabilities",
80
79
  "Exploitation": "metasploit, searchsploit - Exploit vulns",
81
- "Password Attacks": "hydra, john, hashcat - Crack credentials"
82
- }
80
+ "Password Attacks": "hydra, john, hashcat - Crack credentials",
81
+ },
83
82
  },
84
-
85
83
  HelpContext.DASHBOARD: {
86
84
  "title": "Dashboard Help",
87
85
  "description": "Real-time monitoring of scans and results.",
@@ -91,16 +89,15 @@ HELP_CONTENT: Dict[str, Dict] = {
91
89
  "f": "Findings view - See vulnerabilities",
92
90
  "l": "Logs view - See tool output",
93
91
  "r": "Refresh data",
94
- "q": "Quit dashboard"
92
+ "q": "Quit dashboard",
95
93
  },
96
94
  "tips": [
97
95
  "Dashboard auto-refreshes every few seconds",
98
96
  "Jobs show real-time progress of running scans",
99
97
  "Findings are color-coded by severity",
100
- "Use 'l' to see raw tool output for debugging"
101
- ]
98
+ "Use 'l' to see raw tool output for debugging",
99
+ ],
102
100
  },
103
-
104
101
  HelpContext.CREDENTIALS: {
105
102
  "title": "Credential Vault Help",
106
103
  "description": "Securely store discovered credentials.",
@@ -108,21 +105,20 @@ HELP_CONTENT: Dict[str, Dict] = {
108
105
  "+": "Add a credential",
109
106
  "-": "Delete a credential",
110
107
  "e": "Export credentials",
111
- "q": "Go back"
108
+ "q": "Go back",
112
109
  },
113
110
  "tips": [
114
111
  "Credentials are encrypted with AES-256-GCM",
115
112
  "Each credential is scoped to its engagement",
116
113
  "Test credentials with 'hydra' or 'crackmapexec'",
117
- "Export to use with other tools"
114
+ "Export to use with other tools",
118
115
  ],
119
116
  "security": [
120
117
  "Never store production credentials in test environments",
121
118
  "Use strong master password for encryption",
122
- "Credentials cannot be recovered if password is lost"
123
- ]
119
+ "Credentials cannot be recovered if password is lost",
120
+ ],
124
121
  },
125
-
126
122
  HelpContext.FINDINGS: {
127
123
  "title": "Findings Help",
128
124
  "description": "View and manage discovered vulnerabilities.",
@@ -131,23 +127,22 @@ HELP_CONTENT: Dict[str, Dict] = {
131
127
  "c": "Change severity",
132
128
  "n": "Add notes",
133
129
  "e": "Export findings",
134
- "q": "Go back"
130
+ "q": "Go back",
135
131
  },
136
132
  "severity_levels": {
137
133
  "Critical": "Immediate exploitation risk (CVSS 9.0-10.0)",
138
134
  "High": "Significant vulnerability (CVSS 7.0-8.9)",
139
135
  "Medium": "Moderate risk (CVSS 4.0-6.9)",
140
136
  "Low": "Minor issue (CVSS 0.1-3.9)",
141
- "Info": "Informational finding"
137
+ "Info": "Informational finding",
142
138
  },
143
139
  "tips": [
144
140
  "Verify findings manually before reporting",
145
141
  "Add notes with reproduction steps",
146
142
  "Link findings to evidence screenshots",
147
- "Export to include in final report"
148
- ]
143
+ "Export to include in final report",
144
+ ],
149
145
  },
150
-
151
146
  HelpContext.HOSTS: {
152
147
  "title": "Hosts Help",
153
148
  "description": "View discovered hosts and their services.",
@@ -155,39 +150,37 @@ HELP_CONTENT: Dict[str, Dict] = {
155
150
  "1-9": "Select a host",
156
151
  "s": "Show services for host",
157
152
  "n": "Add notes",
158
- "q": "Go back"
153
+ "q": "Go back",
159
154
  },
160
155
  "tips": [
161
156
  "Hosts are discovered by nmap and other recon tools",
162
157
  "Each host shows open ports and services",
163
158
  "Click on a host to see detailed information",
164
- "Services link to potential vulnerabilities"
165
- ]
159
+ "Services link to potential vulnerabilities",
160
+ ],
166
161
  },
167
-
168
162
  HelpContext.METASPLOIT: {
169
163
  "title": "Metasploit Integration Help",
170
164
  "description": "Use Metasploit Framework for exploitation.",
171
165
  "shortcuts": {
172
166
  "1-9": "Select an option",
173
167
  "c": "Open msfconsole",
174
- "q": "Go back"
168
+ "q": "Go back",
175
169
  },
176
170
  "tips": [
177
171
  "Database is shared between SoulEyez and MSF",
178
172
  "Hosts and services sync automatically",
179
173
  "Use 'search' in msfconsole to find exploits",
180
- "Run 'db_nmap' to import nmap results"
174
+ "Run 'db_nmap' to import nmap results",
181
175
  ],
182
176
  "common_commands": {
183
177
  "search": "Find modules (search type:exploit name:smb)",
184
178
  "use": "Select a module (use exploit/windows/smb/ms17_010_eternalblue)",
185
179
  "set": "Set options (set RHOSTS 192.168.1.1)",
186
180
  "run": "Execute the module",
187
- "sessions": "List active sessions"
188
- }
181
+ "sessions": "List active sessions",
182
+ },
189
183
  },
190
-
191
184
  HelpContext.CHAIN_RULES: {
192
185
  "title": "Tool Chaining Help",
193
186
  "description": "Automatic follow-up scans based on discoveries.",
@@ -195,21 +188,20 @@ HELP_CONTENT: Dict[str, Dict] = {
195
188
  "+": "Create new rule",
196
189
  "-": "Delete a rule",
197
190
  "t": "Toggle rule on/off",
198
- "q": "Go back"
191
+ "q": "Go back",
199
192
  },
200
193
  "tips": [
201
194
  "Rules trigger when specific conditions are met",
202
195
  "Example: HTTP found -> auto-queue nikto scan",
203
196
  "Priorities control which rules run first",
204
- "Disable rules to prevent unwanted scans"
197
+ "Disable rules to prevent unwanted scans",
205
198
  ],
206
199
  "examples": [
207
200
  "nmap finds HTTP (80/443) -> nikto, gobuster",
208
201
  "nmap finds SMB (445) -> enum4linux",
209
- "nmap finds MySQL (3306) -> hydra with mysql module"
210
- ]
202
+ "nmap finds MySQL (3306) -> hydra with mysql module",
203
+ ],
211
204
  },
212
-
213
205
  HelpContext.EVIDENCE: {
214
206
  "title": "Evidence & Artifacts Help",
215
207
  "description": "Collect screenshots and artifacts for reporting.",
@@ -217,16 +209,15 @@ HELP_CONTENT: Dict[str, Dict] = {
217
209
  "+": "Add evidence",
218
210
  "s": "Take screenshot",
219
211
  "e": "Export evidence",
220
- "q": "Go back"
212
+ "q": "Go back",
221
213
  },
222
214
  "tips": [
223
215
  "Screenshots are organized by pentesting phase",
224
216
  "Add descriptions for context in reports",
225
217
  "Link evidence to specific findings",
226
- "Export includes all metadata"
227
- ]
218
+ "Export includes all metadata",
219
+ ],
228
220
  },
229
-
230
221
  HelpContext.EXPORT: {
231
222
  "title": "Export Help",
232
223
  "description": "Export data for reporting and integration.",
@@ -234,15 +225,14 @@ HELP_CONTENT: Dict[str, Dict] = {
234
225
  "CSV": "Excel-compatible, good for data analysis",
235
226
  "JSON": "API integration, programmatic access",
236
227
  "Markdown": "Documentation, reports",
237
- "HTML": "Standalone report viewing"
228
+ "HTML": "Standalone report viewing",
238
229
  },
239
230
  "tips": [
240
231
  "CSV is best for importing into other tools",
241
232
  "JSON preserves all data fields",
242
- "Markdown is great for including in reports"
243
- ]
233
+ "Markdown is great for including in reports",
234
+ ],
244
235
  },
245
-
246
236
  HelpContext.GENERAL: {
247
237
  "title": "SoulEyez Help",
248
238
  "description": "AI-Powered Penetration Testing Platform",
@@ -252,18 +242,18 @@ HELP_CONTENT: Dict[str, Dict] = {
252
242
  "souleyez setup": "Install pentesting tools",
253
243
  "souleyez doctor": "Diagnose issues",
254
244
  "souleyez tutorial": "Guided walkthrough",
255
- "souleyez run <tool>": "Run a specific tool"
245
+ "souleyez run <tool>": "Run a specific tool",
256
246
  },
257
247
  "tips": [
258
248
  "Start with 'souleyez tutorial' if you're new",
259
249
  "Use 'souleyez doctor' to fix common issues",
260
- "Press '?' in any menu for context help"
250
+ "Press '?' in any menu for context help",
261
251
  ],
262
252
  "resources": [
263
253
  "Docs: https://github.com/cyber-soul-security/SoulEyez",
264
- "Issues: https://github.com/cyber-soul-security/SoulEyez/issues"
265
- ]
266
- }
254
+ "Issues: https://github.com/cyber-soul-security/SoulEyez/issues",
255
+ ],
256
+ },
267
257
  }
268
258
 
269
259
 
@@ -277,11 +267,12 @@ def get_template_tips(engagement_type: Optional[str] = None) -> List[str]:
277
267
  Returns:
278
268
  List of preset-specific tips
279
269
  """
280
- if not engagement_type or engagement_type == 'custom':
270
+ if not engagement_type or engagement_type == "custom":
281
271
  return []
282
272
 
283
273
  try:
284
274
  from souleyez.core.templates import get_template
275
+
285
276
  template = get_template(engagement_type)
286
277
  if template and template.tips:
287
278
  return template.tips
@@ -290,8 +281,11 @@ def get_template_tips(engagement_type: Optional[str] = None) -> List[str]:
290
281
  return []
291
282
 
292
283
 
293
- def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
294
- engagement_type: Optional[str] = None) -> None:
284
+ def show_help(
285
+ context: str = HelpContext.GENERAL,
286
+ clear_screen: bool = True,
287
+ engagement_type: Optional[str] = None,
288
+ ) -> None:
295
289
  """
296
290
  Display context-sensitive help.
297
291
 
@@ -302,6 +296,7 @@ def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
302
296
  """
303
297
  import shutil
304
298
  from souleyez.ui.design_system import DesignSystem
299
+
305
300
  help_data = HELP_CONTENT.get(context, HELP_CONTENT[HelpContext.GENERAL])
306
301
  width = shutil.get_terminal_size().columns
307
302
 
@@ -311,29 +306,35 @@ def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
311
306
  # Header box (like docs menu)
312
307
  click.echo()
313
308
  click.echo("┌" + "─" * (width - 2) + "┐")
314
- title = help_data['title'].upper()
309
+ title = help_data["title"].upper()
315
310
  padding = (width - len(title) - 2) // 2
316
- click.echo("│" + " " * padding + click.style(title, bold=True, fg='cyan') + " " * (width - len(title) - padding - 2) + "│")
311
+ click.echo(
312
+ "│"
313
+ + " " * padding
314
+ + click.style(title, bold=True, fg="cyan")
315
+ + " " * (width - len(title) - padding - 2)
316
+ + "│"
317
+ )
317
318
  click.echo("└" + "─" * (width - 2) + "┘")
318
319
  click.echo()
319
320
 
320
321
  # Description
321
- click.echo(click.style(f" {help_data['description']}", fg='white'))
322
+ click.echo(click.style(f" {help_data['description']}", fg="white"))
322
323
  click.echo()
323
324
  click.echo(" " + "─" * (width - 4))
324
325
  click.echo()
325
326
 
326
327
  # Keyboard shortcuts
327
- if 'shortcuts' in help_data:
328
- click.echo(click.style(" Keyboard Shortcuts:", fg='yellow', bold=True))
329
- for key, desc in help_data['shortcuts'].items():
328
+ if "shortcuts" in help_data:
329
+ click.echo(click.style(" Keyboard Shortcuts:", fg="yellow", bold=True))
330
+ for key, desc in help_data["shortcuts"].items():
330
331
  click.echo(f" [{click.style(key, fg='cyan')}] {desc}")
331
332
  click.echo()
332
333
 
333
334
  # Tips
334
- if 'tips' in help_data:
335
- click.echo(click.style(" Tips:", fg='yellow', bold=True))
336
- for tip in help_data['tips']:
335
+ if "tips" in help_data:
336
+ click.echo(click.style(" Tips:", fg="yellow", bold=True))
337
+ for tip in help_data["tips"]:
337
338
  click.echo(f" - {tip}")
338
339
  click.echo()
339
340
 
@@ -342,78 +343,85 @@ def show_help(context: str = HelpContext.GENERAL, clear_screen: bool = True,
342
343
  if template_tips:
343
344
  try:
344
345
  from souleyez.core.templates import get_template
346
+
345
347
  template = get_template(engagement_type)
346
348
  template_name = template.name if template else engagement_type
347
349
  except Exception:
348
350
  template_name = engagement_type
349
351
 
350
- click.echo(click.style(f" {template_name} Tips:", fg='magenta', bold=True))
352
+ click.echo(click.style(f" {template_name} Tips:", fg="magenta", bold=True))
351
353
  for tip in template_tips[:5]: # Show up to 5 preset tips
352
354
  click.echo(f" - {tip}")
353
355
  click.echo()
354
356
 
355
357
  # Tool categories (for tools menu)
356
- if 'tool_categories' in help_data:
357
- click.echo(click.style(" Tool Categories:", fg='yellow', bold=True))
358
- for category, tools in help_data['tool_categories'].items():
358
+ if "tool_categories" in help_data:
359
+ click.echo(click.style(" Tool Categories:", fg="yellow", bold=True))
360
+ for category, tools in help_data["tool_categories"].items():
359
361
  click.echo(f" {click.style(category, fg='green')}: {tools}")
360
362
  click.echo()
361
363
 
362
364
  # Severity levels (for findings)
363
- if 'severity_levels' in help_data:
364
- click.echo(click.style(" Severity Levels:", fg='yellow', bold=True))
365
- colors = {'Critical': 'red', 'High': 'red', 'Medium': 'yellow', 'Low': 'blue', 'Info': 'white'}
366
- for level, desc in help_data['severity_levels'].items():
367
- color = colors.get(level, 'white')
365
+ if "severity_levels" in help_data:
366
+ click.echo(click.style(" Severity Levels:", fg="yellow", bold=True))
367
+ colors = {
368
+ "Critical": "red",
369
+ "High": "red",
370
+ "Medium": "yellow",
371
+ "Low": "blue",
372
+ "Info": "white",
373
+ }
374
+ for level, desc in help_data["severity_levels"].items():
375
+ color = colors.get(level, "white")
368
376
  click.echo(f" {click.style(level, fg=color, bold=True)}: {desc}")
369
377
  click.echo()
370
378
 
371
379
  # Common commands (for MSF)
372
- if 'common_commands' in help_data:
373
- click.echo(click.style(" Common Commands:", fg='yellow', bold=True))
374
- for cmd, desc in help_data['common_commands'].items():
380
+ if "common_commands" in help_data:
381
+ click.echo(click.style(" Common Commands:", fg="yellow", bold=True))
382
+ for cmd, desc in help_data["common_commands"].items():
375
383
  click.echo(f" {click.style(cmd, fg='green')}: {desc}")
376
384
  click.echo()
377
385
 
378
386
  # Examples (for chain rules)
379
- if 'examples' in help_data:
380
- click.echo(click.style(" Examples:", fg='yellow', bold=True))
381
- for example in help_data['examples']:
387
+ if "examples" in help_data:
388
+ click.echo(click.style(" Examples:", fg="yellow", bold=True))
389
+ for example in help_data["examples"]:
382
390
  click.echo(f" {example}")
383
391
  click.echo()
384
392
 
385
393
  # Export formats
386
- if 'formats' in help_data:
387
- click.echo(click.style(" Export Formats:", fg='yellow', bold=True))
388
- for fmt, desc in help_data['formats'].items():
394
+ if "formats" in help_data:
395
+ click.echo(click.style(" Export Formats:", fg="yellow", bold=True))
396
+ for fmt, desc in help_data["formats"].items():
389
397
  click.echo(f" {click.style(fmt, fg='green')}: {desc}")
390
398
  click.echo()
391
399
 
392
400
  # Quick commands (for general)
393
- if 'quick_commands' in help_data:
394
- click.echo(click.style(" Quick Commands:", fg='yellow', bold=True))
395
- for cmd, desc in help_data['quick_commands'].items():
401
+ if "quick_commands" in help_data:
402
+ click.echo(click.style(" Quick Commands:", fg="yellow", bold=True))
403
+ for cmd, desc in help_data["quick_commands"].items():
396
404
  click.echo(f" {click.style(cmd, fg='green')}: {desc}")
397
405
  click.echo()
398
406
 
399
407
  # Resources (for general)
400
- if 'resources' in help_data:
401
- click.echo(click.style(" Resources:", fg='yellow', bold=True))
402
- for resource in help_data['resources']:
408
+ if "resources" in help_data:
409
+ click.echo(click.style(" Resources:", fg="yellow", bold=True))
410
+ for resource in help_data["resources"]:
403
411
  click.echo(f" {resource}")
404
412
  click.echo()
405
413
 
406
414
  # Security notes
407
- if 'security' in help_data:
408
- click.echo(click.style(" Security Notes:", fg='red', bold=True))
409
- for note in help_data['security']:
415
+ if "security" in help_data:
416
+ click.echo(click.style(" Security Notes:", fg="red", bold=True))
417
+ for note in help_data["security"]:
410
418
  click.echo(f" ! {note}")
411
419
  click.echo()
412
420
 
413
421
  # Footer (like docs menu)
414
422
  click.echo(" " + "─" * (width - 4))
415
423
  click.echo()
416
- click.echo(click.style(" [q] ← Back", fg='bright_black'))
424
+ click.echo(click.style(" [q] ← Back", fg="bright_black"))
417
425
  click.echo()
418
426
  click.echo(" " + "─" * (width - 4))
419
427
 
@@ -430,14 +438,14 @@ def show_tooltip(key: str, context: str = HelpContext.GENERAL) -> Optional[str]:
430
438
  Tooltip string or None if not found
431
439
  """
432
440
  help_data = HELP_CONTENT.get(context, {})
433
- shortcuts = help_data.get('shortcuts', {})
441
+ shortcuts = help_data.get("shortcuts", {})
434
442
  return shortcuts.get(key)
435
443
 
436
444
 
437
445
  def show_quick_help() -> None:
438
446
  """Show a quick help overlay (minimal version)."""
439
447
  click.echo()
440
- click.echo(click.style(" Quick Help:", fg='cyan', bold=True))
448
+ click.echo(click.style(" Quick Help:", fg="cyan", bold=True))
441
449
  click.echo(" [?] Show full help")
442
450
  click.echo(" [q] Go back / Quit")
443
451
  click.echo(" [1-9] Select option")
@@ -460,6 +468,6 @@ def get_feature_tip(feature: str) -> str:
460
468
  "credentials": "Tip: Credentials are encrypted - never store production creds in test DBs",
461
469
  "dashboard": "Tip: Press 'j' for jobs, 'h' for hosts, 'f' for findings",
462
470
  "metasploit": "Tip: Use 'db_nmap' in msfconsole to import scan results",
463
- "export": "Tip: CSV format works great with Excel and other analysis tools"
471
+ "export": "Tip: CSV format works great with Excel and other analysis tools",
464
472
  }
465
473
  return feature_tips.get(feature, "Tip: Press '?' for help in any menu")