souleyez 2.39.0__py3-none-any.whl → 2.41.1__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.
souleyez/__init__.py CHANGED
@@ -1,2 +1,2 @@
1
- __version__ = '2.39.0'
1
+ __version__ = '2.41.1'
2
2
 
souleyez/docs/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # SoulEyez Documentation
2
2
 
3
- **Version:** 2.39.0
4
- **Last Updated:** January 9, 2026
3
+ **Version:** 2.41.1
4
+ **Last Updated:** January 10, 2026
5
5
  **Organization:** CyberSoul Security
6
6
 
7
7
  Welcome to the SoulEyez documentation! This documentation covers architecture, development, user guides, and operational information for the SoulEyez penetration testing platform.
souleyez/main.py CHANGED
@@ -173,7 +173,7 @@ def _check_privileged_tools():
173
173
 
174
174
 
175
175
  @click.group()
176
- @click.version_option(version='2.39.0')
176
+ @click.version_option(version='2.41.1')
177
177
  def cli():
178
178
  """SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
179
179
  from souleyez.log_config import init_logging
souleyez/ui/tool_setup.py CHANGED
@@ -24,6 +24,19 @@ from souleyez.utils.tool_checker import (
24
24
  )
25
25
  from souleyez.ui.design_system import DesignSystem
26
26
 
27
+
28
+ def _reset_terminal():
29
+ """Reset terminal to sane state after interrupt."""
30
+ try:
31
+ # Reset terminal using stty
32
+ subprocess.run(['stty', 'sane'], check=False, timeout=5)
33
+ # Also try the reset command for good measure
34
+ subprocess.run(['reset', '-I'], check=False, timeout=5,
35
+ stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
36
+ except Exception:
37
+ pass
38
+
39
+
27
40
  # Prerequisites needed for various install methods
28
41
  PREREQUISITES = {
29
42
  'build-deps': {
@@ -118,10 +131,15 @@ def _add_paths_to_shell_rc():
118
131
 
119
132
  def _run_command(cmd: str, console, description: str = "", capture: bool = False) -> tuple:
120
133
  """Run a command with proper error handling."""
134
+ import sys
121
135
  try:
122
136
  # Never capture sudo commands - password prompt needs to be visible
123
137
  if cmd.strip().startswith('sudo'):
124
138
  capture = False
139
+ # Flush output and print newline so sudo prompt appears on new line
140
+ sys.stdout.flush()
141
+ sys.stderr.flush()
142
+ print() # Newline for sudo password prompt
125
143
 
126
144
  if capture:
127
145
  result = subprocess.run(
@@ -136,6 +154,7 @@ def _run_command(cmd: str, console, description: str = "", capture: bool = False
136
154
  result = subprocess.run(
137
155
  cmd,
138
156
  shell=True,
157
+ stdin=sys.stdin, # Ensure stdin is connected for password input
139
158
  timeout=600
140
159
  )
141
160
  return result.returncode == 0, "", ""
@@ -374,6 +393,17 @@ def _ensure_msfdb_initialized(console):
374
393
 
375
394
  def run_tool_setup(check_only: bool = False, install_all: bool = False):
376
395
  """Run the tool setup wizard."""
396
+ try:
397
+ _run_tool_setup_impl(check_only, install_all)
398
+ except KeyboardInterrupt:
399
+ # Reset terminal to sane state after Ctrl+C
400
+ _reset_terminal()
401
+ print("\n\n Setup cancelled.")
402
+ raise
403
+
404
+
405
+ def _run_tool_setup_impl(check_only: bool = False, install_all: bool = False):
406
+ """Internal implementation of tool setup wizard."""
377
407
  console = DesignSystem.get_console()
378
408
  distro = detect_distro()
379
409
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: souleyez
3
- Version: 2.39.0
3
+ Version: 2.41.1
4
4
  Summary: AI-Powered Penetration Testing Platform with 40+ integrated tools
5
5
  Author-email: CyberSoul Security <contact@cybersoulsecurity.com>
6
6
  Maintainer-email: CyberSoul Security <contact@cybersoulsecurity.com>
@@ -1,10 +1,10 @@
1
- souleyez/__init__.py,sha256=vZEZEEqlAugXgxZEHdfoEvw0Uw_BhNS7Xv645UwJkEQ,24
1
+ souleyez/__init__.py,sha256=26kgoCJ4eEfGRxAEbffQaXjfIlKVHN4QQoHIoKKPCVI,24
2
2
  souleyez/config.py,sha256=av357I3GYRWAklv8Dto-9-5Db699Wq5znez7zo7241Q,11595
3
3
  souleyez/devtools.py,sha256=rptmUY4a5eVvYjdEc6273MSagL-D9xibPOFgohVqUno,3508
4
4
  souleyez/feature_flags.py,sha256=mo6YAq07lc6sR3lEFKmIwTKxXZ2JPxwa5X97uR_mu50,4642
5
5
  souleyez/history.py,sha256=gzs5I_j-3OigIP6yfmBChdqxaFmyUIxvTpzWUPe_Q6c,2853
6
6
  souleyez/log_config.py,sha256=MMhPAJOqgXDfuE-xm5g0RxAfWndcmbhFHvIEMm1a_Wo,5830
7
- souleyez/main.py,sha256=7c4VBgWwrHJ4s-Qkwq2FEquQt0GIrZhVdoHRUj36-XA,129100
7
+ souleyez/main.py,sha256=9nDwo5vNeZqPCbNR5w5s4ohvuAim8vRXASkdWOjmfRM,129100
8
8
  souleyez/scanner.py,sha256=U3IWHRrJ5aQ32dSHiVAHB60w1R_z0E0QxfM99msYNlw,3124
9
9
  souleyez/security.py,sha256=S84m1QmnKz_6NgH2I6IBIAorMHxRPNYVFSnks5xjihQ,2479
10
10
  souleyez/ui.py,sha256=15pfsqoDPnojAqr5S0TZHJE2ZkSHzkHpNVfVvsRj66A,34301
@@ -104,7 +104,7 @@ souleyez/detection/__init__.py,sha256=QIhvXjFdjrquQ6A0VQ7GZQkK_EXB59t8Dv9PKXhEUe
104
104
  souleyez/detection/attack_signatures.py,sha256=akgWwiIkh6WYnghCuLhRV0y6FS0SQ0caGF8tZUc49oA,6965
105
105
  souleyez/detection/mitre_mappings.py,sha256=xejE80YK-g8kKaeQoo-vBl8P3t8RTTItbfN0NaVZw6s,20558
106
106
  souleyez/detection/validator.py,sha256=-AJ7QSJ3-6jFKLnPG_Rc34IXyF4JPyI82BFUgTA9zw0,15641
107
- souleyez/docs/README.md,sha256=bMTFL--4gkLDfxhTAAHDWYl95Z1jDOkblZhN25-CM9A,7183
107
+ souleyez/docs/README.md,sha256=avSEhY-woSW1nZptOU_4uScXJCr3ko8XVWarxeCZDCI,7184
108
108
  souleyez/docs/api-reference/cli-commands.md,sha256=lTLFnILN3YRVdqCaag7WgsYXfDGglb1TuPexkxDsVdE,12917
109
109
  souleyez/docs/api-reference/engagement-api.md,sha256=nd-EvQMtiJrobg2bzFEADp853HP1Uhb9dmgok0_-neE,11672
110
110
  souleyez/docs/api-reference/integration-guide.md,sha256=c96uX79ukHyYotLa54wZ20Kx-EUZnrKegTeGkfLD-pw,16285
@@ -364,15 +364,15 @@ souleyez/ui/team_dashboard.py,sha256=ejM_44nbJbEIPxxxdEK7SCPcqQtcuJLjoO-C53qED2Y
364
364
  souleyez/ui/template_selector.py,sha256=qQJkFNnVjYctb-toeYlupP_U1asGrJWYi5-HR89Ab9g,19103
365
365
  souleyez/ui/terminal.py,sha256=Sw9ma1-DZclJE1sENjTZ3Q7r-Ct1NiB3Lpmv-RZW5tE,2372
366
366
  souleyez/ui/timeline_view.py,sha256=Ze8Mev9VE4_ECdNFEJwZK2V42EBguR83uCCdwAbJqmc,11111
367
- souleyez/ui/tool_setup.py,sha256=pkOUr-1inZlYnvaIc8Kj-Qaxk2KHWR2opJAgI_Er-Wo,32591
367
+ souleyez/ui/tool_setup.py,sha256=Ah-EfuAZm6POJc9I6KSkMVPBD4LafEeXOqBzvcemvfs,33669
368
368
  souleyez/ui/tutorial.py,sha256=GGbBsze0ioL00WBWKEwPKy1ikegP1eusI2REDVMx4gY,14262
369
369
  souleyez/ui/tutorial_state.py,sha256=Thf7_qCj4VKjG7UqgJqa9kjIqiFUU-7Q7kG4v-u2B4A,8123
370
370
  souleyez/ui/wazuh_vulns_view.py,sha256=3vJJEmrjgS2wD6EDB7ZV7WxgytBHTm-1WqNDjp7lVEI,21830
371
371
  souleyez/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
372
372
  souleyez/utils/tool_checker.py,sha256=kQcXJVY5NiO-orQAUnpHhpQvR5UOBNHJ0PaT0fBxYoQ,30782
373
- souleyez-2.39.0.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
374
- souleyez-2.39.0.dist-info/METADATA,sha256=kbSZdDfyv3Vif9JWf11i9z9ZLM3BC6qWnX3gP-NFHMQ,9434
375
- souleyez-2.39.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
376
- souleyez-2.39.0.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
377
- souleyez-2.39.0.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
378
- souleyez-2.39.0.dist-info/RECORD,,
373
+ souleyez-2.41.1.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
374
+ souleyez-2.41.1.dist-info/METADATA,sha256=MYl43AV080tfKIx_8f8r8Ii4pbg6oGEIztCrzTRgUBY,9434
375
+ souleyez-2.41.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
376
+ souleyez-2.41.1.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
377
+ souleyez-2.41.1.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
378
+ souleyez-2.41.1.dist-info/RECORD,,