souleyez 2.43.4__py3-none-any.whl → 2.43.6__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.43.4'
1
+ __version__ = '2.43.6'
2
2
 
souleyez/docs/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # SoulEyez Documentation
2
2
 
3
- **Version:** 2.43.4
4
- **Last Updated:** January 11, 2026
3
+ **Version:** 2.43.6
4
+ **Last Updated:** January 12, 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.43.4')
176
+ @click.version_option(version='2.43.6')
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/dashboard.py CHANGED
@@ -1392,9 +1392,20 @@ def render_active_jobs(width: int, engagement_id: Optional[int] = None):
1392
1392
  if engagement_id is not None and job_eng_id != engagement_id:
1393
1393
  warning = click.style(" [!other]", fg='red')
1394
1394
 
1395
- job_line = f" [{jid:>3}] {tool:<10} {target:<30} {status_str:<18} {elapsed}{warning}"
1395
+ # Check for scope warnings
1396
+ job_warnings = job.get('metadata', {}).get('warnings', [])
1397
+ scope_warning = any('SCOPE' in w for w in job_warnings)
1398
+ scope_indicator = click.style("⚠ ", fg='yellow') if scope_warning else ""
1399
+
1400
+ job_line = f" [{jid:>3}] {scope_indicator}{tool:<10} {target:<30} {status_str:<18} {elapsed}{warning}"
1396
1401
  lines.append(job_line)
1397
1402
 
1403
+ # Show scope warning details on next line if present
1404
+ if scope_warning:
1405
+ for w in job_warnings:
1406
+ if 'SCOPE' in w:
1407
+ lines.append(click.style(f" └─ {w}", fg='yellow'))
1408
+
1398
1409
  return lines
1399
1410
 
1400
1411
 
@@ -17,6 +17,7 @@ from rich.table import Table
17
17
  from souleyez.ui.design_system import DesignSystem
18
18
  from souleyez.engine.loader import discover_plugins
19
19
  from souleyez.engine.background import enqueue_job, list_jobs, get_job
20
+ from souleyez.security.scope_validator import ScopeViolationError
20
21
  from souleyez.storage.engagements import EngagementManager
21
22
  from souleyez.storage.hosts import HostManager
22
23
  from souleyez.storage.findings import FindingsManager
@@ -3955,19 +3956,29 @@ def launch_job(job_params: Dict[str, Any]) -> Optional[int]:
3955
3956
  click.echo()
3956
3957
 
3957
3958
  job_ids = []
3959
+ blocked_targets = []
3958
3960
  for t in targets:
3959
- job_id = enqueue_job(
3960
- tool=tool_name,
3961
- target=t,
3962
- args=args,
3963
- label=label,
3964
- metadata=metadata if metadata else None
3965
- )
3966
- job_ids.append(job_id)
3967
- click.echo(click.style(f"✓ Job #{job_id} enqueued for {t}", fg='green'))
3961
+ try:
3962
+ job_id = enqueue_job(
3963
+ tool=tool_name,
3964
+ target=t,
3965
+ args=args,
3966
+ label=label,
3967
+ metadata=metadata if metadata else None
3968
+ )
3969
+ job_ids.append(job_id)
3970
+ click.echo(click.style(f"✓ Job #{job_id} enqueued for {t}", fg='green'))
3971
+ except ScopeViolationError:
3972
+ blocked_targets.append(t)
3973
+ click.echo(click.style(f"✗ BLOCKED (out of scope): {t}", fg='red', bold=True))
3968
3974
 
3969
3975
  click.echo()
3970
- click.echo(click.style(f"✓ {len(job_ids)} jobs enqueued successfully!", fg='green', bold=True))
3976
+ if blocked_targets:
3977
+ click.echo(click.style(f"⚠ {len(blocked_targets)} targets blocked (out of scope)", fg='yellow', bold=True))
3978
+ if job_ids:
3979
+ click.echo(click.style(f"✓ {len(job_ids)} jobs enqueued successfully!", fg='green', bold=True))
3980
+ else:
3981
+ click.echo(click.style("✗ No jobs created - all targets blocked", fg='red', bold=True))
3971
3982
  click.echo(f"Tool: {tool_name}")
3972
3983
  if label:
3973
3984
  click.echo(f"Label: {label}")
@@ -3998,6 +4009,15 @@ def launch_job(job_params: Dict[str, Any]) -> Optional[int]:
3998
4009
 
3999
4010
  return job_id # Return the job_id
4000
4011
 
4012
+ except ScopeViolationError as e:
4013
+ click.echo()
4014
+ click.echo(click.style("✗ JOB BLOCKED - OUT OF SCOPE", fg='red', bold=True))
4015
+ click.echo(click.style(f" Target: {job_params.get('target', 'unknown')}", fg='red'))
4016
+ click.echo(click.style(f" Reason: {e}", fg='yellow'))
4017
+ click.echo()
4018
+ click.echo(click.style(" Scope enforcement is set to 'block' for this engagement.", fg='cyan'))
4019
+ click.echo(click.style(" Use 'souleyez scope' to view or modify scope settings.", fg='cyan'))
4020
+ return None
4001
4021
  except Exception as e:
4002
4022
  click.echo(click.style(f"✗ Error enqueueing job: {e}", fg='red'))
4003
4023
  return None
@@ -4599,6 +4619,12 @@ def view_jobs_menu():
4599
4619
  rule_id = job.get('rule_id') or job.get('metadata', {}).get('rule_id')
4600
4620
  rule_display = f"#{rule_id}" if rule_id else '-'
4601
4621
 
4622
+ # Check for scope warnings
4623
+ job_warnings = job.get('metadata', {}).get('warnings', [])
4624
+ scope_warning = any('SCOPE' in w for w in job_warnings)
4625
+ if scope_warning:
4626
+ target = f"[yellow]⚠[/yellow] {target}"
4627
+
4602
4628
  # Checkbox based on selection
4603
4629
  checkbox = '●' if job_id_int in selected_jobs else '○'
4604
4630
  table.add_row(checkbox, jid, status_display, tool, target, label, parent_display, rule_display)
@@ -5048,6 +5074,7 @@ def _view_ai_suggestions(engagement_id: int):
5048
5074
  # Accept all suggestions
5049
5075
  if click.confirm(f" Queue all {len(suggestions)} AI suggestions?", default=True):
5050
5076
  queued = 0
5077
+ blocked = 0
5051
5078
  for sug in suggestions:
5052
5079
  try:
5053
5080
  job_id = enqueue_job(
@@ -5059,12 +5086,17 @@ def _view_ai_suggestions(engagement_id: int):
5059
5086
  )
5060
5087
  if job_id:
5061
5088
  queued += 1
5089
+ except ScopeViolationError:
5090
+ blocked += 1
5091
+ click.echo(click.style(f" ✗ BLOCKED: {sug['target']} (out of scope)", fg='red'))
5062
5092
  except Exception as e:
5063
5093
  pass
5064
5094
 
5065
5095
  # Mark all as approved
5066
5096
  _mark_suggestions_approved(engagement_id, [s for s in suggestions])
5067
- click.echo(click.style(f"\n ✓ Queued {queued} job(s)", fg='green'))
5097
+ if blocked:
5098
+ click.echo(click.style(f"\n ⚠ {blocked} job(s) blocked (out of scope)", fg='yellow'))
5099
+ click.echo(click.style(f" ✓ Queued {queued} job(s)", fg='green'))
5068
5100
  click.pause()
5069
5101
  return
5070
5102
  continue
@@ -5147,6 +5179,11 @@ def _view_suggestion_detail(engagement_id: int, suggestion: dict, all_suggestion
5147
5179
  )
5148
5180
  _mark_suggestions_approved(engagement_id, [suggestion])
5149
5181
  click.echo(click.style(f"\n ✓ Queued job #{job_id}", fg='green'))
5182
+ except ScopeViolationError as e:
5183
+ click.echo()
5184
+ click.echo(click.style(" ✗ JOB BLOCKED - OUT OF SCOPE", fg='red', bold=True))
5185
+ click.echo(click.style(f" Target: {suggestion['target']}", fg='red'))
5186
+ click.echo(click.style(f" Reason: {e}", fg='yellow'))
5150
5187
  except Exception as e:
5151
5188
  click.echo(click.style(f"\n ✗ Failed to queue: {e}", fg='red'))
5152
5189
  click.pause()
@@ -5435,6 +5472,13 @@ def view_job_detail(job_id: int):
5435
5472
  else:
5436
5473
  click.echo(f"Reason: Manual (created by user)")
5437
5474
 
5475
+ # Show scope warnings if any
5476
+ warnings = metadata.get('warnings', [])
5477
+ if warnings:
5478
+ click.echo()
5479
+ for warning in warnings:
5480
+ click.echo(click.style(f" ⚠ {warning}", fg='yellow', bold=True))
5481
+
5438
5482
  if job.get('pid'):
5439
5483
  click.echo(f"PID: {click.style(str(job['pid']), fg='cyan')}")
5440
5484
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: souleyez
3
- Version: 2.43.4
3
+ Version: 2.43.6
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=zfc_tb2fUJNve5tdMRndwvdZNA4497yAvrqr6J6TkQQ,24
1
+ souleyez/__init__.py,sha256=vVSk_skOILY9eSW1r86Nhmh7JKMXU5OwHFPBN7nuO70,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=prVcX01pUDaxPnZApNlC4IDqg4NCnr_jaIEiaNZpRm4,129100
7
+ souleyez/main.py,sha256=h_kWBWR3Bm32I6iepDomN_BOfg2xHmu7eUZfCVFlbpQ,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=UrsYDaxEXk9O4zvUldAokUlj5K_6Qq-de3pPMs9RcaI,7187
107
+ souleyez/docs/README.md,sha256=jIHgHz1PuAZqawL354iek_c3czdc0Yenk7Tw55Ah4VI,7187
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
@@ -336,7 +336,7 @@ souleyez/ui/ai_quotes.py,sha256=Ho2QCYIFfks6tPIRFwVUKpvfGChUduWLMpmIDJV4xh0,5489
336
336
  souleyez/ui/attack_surface.py,sha256=PMClCqiw1fIFFpYTghGKnXykamWFWgvraEBQzkiyuF8,196226
337
337
  souleyez/ui/chain_rules_view.py,sha256=BZ7I3UnQEDtt9AWVqufdu1soZLkBn3cMu5lfArnx9aI,63228
338
338
  souleyez/ui/correlation_view.py,sha256=BxJytk8Zq2-MhrMFgf4ZgN5G0-xU3ZdxqNWdRqMghxU,24674
339
- souleyez/ui/dashboard.py,sha256=zIRVFaRsx-AO1VXXpoKhs0_qmseyf71F2PtNPNheDn0,178462
339
+ souleyez/ui/dashboard.py,sha256=36XIGCMULMpzU7mhZMaUNof9Q5A0YdlZGrQRipc57kI,179004
340
340
  souleyez/ui/deliverables_view.py,sha256=hxYCwcZNzT0loZMSQXODRuZXDNZFrHZ8FTKwcwuZdoI,9604
341
341
  souleyez/ui/design_system.py,sha256=wyI73gwBGQDzo3L_JYn7DiEGXWByFkRjlDkp5MEpZ3s,3415
342
342
  souleyez/ui/errors.py,sha256=vk4gMP5UyLd3W-Gfz06C2B_v4ra8qcie6NFmz1VjY8o,10645
@@ -347,7 +347,7 @@ souleyez/ui/export_view.py,sha256=0nQvVsKk7FU4uRzSfJ_qBZh_Lfn8hgGA2rbJ5bNg5-Y,65
347
347
  souleyez/ui/gap_analysis_view.py,sha256=AytAOEBq010wwo9hne1TE-uJpY_xicjLrFANbvN3r3w,30727
348
348
  souleyez/ui/help_system.py,sha256=nKGxLaMi-TKYs6xudTyw_tZqBb1cGFEuYYh6N-MAsJE,16648
349
349
  souleyez/ui/intelligence_view.py,sha256=VeAQ-3mANRnLIVpRqocL3JV0HUmJtADdxDeC5lzQhE0,32168
350
- souleyez/ui/interactive.py,sha256=RxfZ3yOfCnpWV0K1ta5Op3hP82eYGN0UYV8ME-41fuY,1406653
350
+ souleyez/ui/interactive.py,sha256=3WUuQMTNvVjcklkKbxmZCSFL0PqcQEeiaONTDtl4duU,1409094
351
351
  souleyez/ui/interactive_selector.py,sha256=6A51fgmFRnemBY0aCPHIhK2Rpba16NjSGKLzC0Q5vI8,16407
352
352
  souleyez/ui/log_formatter.py,sha256=akhIkYoO_cCaKxS1V5N3iPmIrHzgsU7pmsedx70s9TI,3845
353
353
  souleyez/ui/menu_components.py,sha256=N8zq2QXGmfaLJ08l53MMYt1y-5LRWgpZH6r8nXHonj8,3519
@@ -370,9 +370,9 @@ souleyez/ui/tutorial_state.py,sha256=Thf7_qCj4VKjG7UqgJqa9kjIqiFUU-7Q7kG4v-u2B4A
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=YZjEeHudjglvJk_MA-iQLzqEItFybhCy6PfaPoBANtE,30830
373
- souleyez-2.43.4.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
374
- souleyez-2.43.4.dist-info/METADATA,sha256=FWfMbx_zgti5XhEjgqXQgu3hzEvHq0ro1haCCfm1rf8,10425
375
- souleyez-2.43.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
376
- souleyez-2.43.4.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
377
- souleyez-2.43.4.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
378
- souleyez-2.43.4.dist-info/RECORD,,
373
+ souleyez-2.43.6.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
374
+ souleyez-2.43.6.dist-info/METADATA,sha256=XLeqpZvidpaBjrKIkGf8i7lDYfvhkQMHTMEkE6SPwgQ,10425
375
+ souleyez-2.43.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
376
+ souleyez-2.43.6.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
377
+ souleyez-2.43.6.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
378
+ souleyez-2.43.6.dist-info/RECORD,,