souleyez 2.43.3__py3-none-any.whl → 2.43.8__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.3'
1
+ __version__ = '2.43.8'
2
2
 
souleyez/docs/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # SoulEyez Documentation
2
2
 
3
- **Version:** 2.43.3
4
- **Last Updated:** January 11, 2026
3
+ **Version:** 2.43.8
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.
@@ -3285,9 +3285,12 @@ def parse_http_fingerprint_job(engagement_id: int, log_path: str, job: Dict[str,
3285
3285
  # Get tool recommendations
3286
3286
  recommendations = get_tool_recommendations(parsed)
3287
3287
 
3288
- # Determine status
3288
+ # Determine status and build summary
3289
+ summary_parts = []
3290
+
3289
3291
  if parsed.get('error'):
3290
3292
  status = STATUS_ERROR
3293
+ summary_parts.append(f"Error: {parsed.get('error')}")
3291
3294
  elif parsed.get('managed_hosting') or parsed.get('waf') or parsed.get('cdn'):
3292
3295
  status = STATUS_DONE # Found useful info
3293
3296
  elif parsed.get('server'):
@@ -3295,11 +3298,31 @@ def parse_http_fingerprint_job(engagement_id: int, log_path: str, job: Dict[str,
3295
3298
  else:
3296
3299
  status = STATUS_NO_RESULTS
3297
3300
 
3301
+ # Build summary for successful scans
3302
+ if not parsed.get('error'):
3303
+ if parsed.get('server'):
3304
+ summary_parts.append(f"Server: {parsed.get('server')}")
3305
+ if parsed.get('managed_hosting'):
3306
+ summary_parts.append(f"Platform: {parsed.get('managed_hosting')}")
3307
+ if parsed.get('waf'):
3308
+ summary_parts.append(f"WAF: {', '.join(parsed.get('waf', []))}")
3309
+ if parsed.get('cdn'):
3310
+ summary_parts.append(f"CDN: {', '.join(parsed.get('cdn', []))}")
3311
+ if parsed.get('technologies'):
3312
+ techs = parsed.get('technologies', [])
3313
+ if len(techs) <= 3:
3314
+ summary_parts.append(f"Tech: {', '.join(techs)}")
3315
+ else:
3316
+ summary_parts.append(f"Tech: {', '.join(techs[:3])} +{len(techs)-3} more")
3317
+
3318
+ summary = ' | '.join(summary_parts) if summary_parts else 'No fingerprint data detected'
3319
+
3298
3320
  return {
3299
3321
  'tool': 'http_fingerprint',
3300
3322
  'status': status,
3301
3323
  'target': target,
3302
3324
  'target_host': target_host,
3325
+ 'summary': summary,
3303
3326
  # Core fingerprint data
3304
3327
  'server': parsed.get('server'),
3305
3328
  'managed_hosting': parsed.get('managed_hosting'),
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.3')
176
+ @click.version_option(version='2.43.8')
177
177
  def cli():
178
178
  """SoulEyez - AI-Powered Pentesting Platform by CyberSoul Security"""
179
179
  from souleyez.log_config import init_logging
@@ -125,8 +125,12 @@ class EngagementManager:
125
125
  # File contains invalid data, reset to default
126
126
  pass
127
127
 
128
- # Reset to default engagement
129
- default_id = self.create("default", "Default engagement")
128
+ # Reset to default engagement - use existing or create new
129
+ default_eng = self.get("default")
130
+ if default_eng:
131
+ default_id = default_eng['id']
132
+ else:
133
+ default_id = self.create("default", "Default engagement")
130
134
  self.set_current("default")
131
135
  return self.get_by_id(default_id)
132
136
 
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
 
souleyez/ui/tutorial.py CHANGED
@@ -355,14 +355,15 @@ def _cleanup_tutorial_data():
355
355
  except Exception:
356
356
  pass
357
357
 
358
- # Delete the engagement if it exists
358
+ # Reset current engagement BEFORE deleting tutorial engagement
359
+ # (otherwise get_current() will fail trying to load deleted engagement)
359
360
  if tutorial_eng:
360
- em.delete("Tutorial Engagement")
361
+ current = em.get_current()
362
+ if current and current.get('id') == tutorial_eng['id']:
363
+ em.set_current("default")
361
364
 
362
- # Clear current engagement if it was the tutorial
363
- current = em.get_current()
364
- if current and current.get('name') == 'Tutorial Engagement':
365
- em.set_current(None)
365
+ # Now safe to delete the tutorial engagement
366
+ em.delete("Tutorial Engagement")
366
367
 
367
368
  except Exception as e:
368
369
  click.echo(click.style(f" Note: Could not fully clean up: {e}", fg='yellow'))
@@ -320,8 +320,8 @@ EXTERNAL_TOOLS = {
320
320
  },
321
321
  'responder': {
322
322
  'command': 'responder',
323
- 'install_kali': 'sudo apt install responder && sudo pip install --break-system-packages aioquic',
324
- 'install_ubuntu': 'sudo git clone https://github.com/lgandx/Responder.git /opt/Responder && sudo pip install --break-system-packages -r /opt/Responder/requirements.txt aioquic && sudo ln -sf /opt/Responder/Responder.py /usr/local/bin/responder',
323
+ 'install_kali': 'sudo apt install responder && sudo pip install --break-system-packages --ignore-installed aioquic',
324
+ 'install_ubuntu': 'sudo git clone https://github.com/lgandx/Responder.git /opt/Responder && sudo pip install --break-system-packages --ignore-installed -r /opt/Responder/requirements.txt aioquic && sudo ln -sf /opt/Responder/Responder.py /usr/local/bin/responder',
325
325
  'install_method': 'kali_only',
326
326
  'description': 'LLMNR, NBT-NS and MDNS poisoner',
327
327
  'needs_sudo': True # Required for network poisoning
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: souleyez
3
- Version: 2.43.3
3
+ Version: 2.43.8
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=hQfhNFZmys4vpRUV0tekkwul1bHV-z9AHclh8q4E4WQ,24
1
+ souleyez/__init__.py,sha256=Ik_sQ3aj5yrqnHIFTdhRKvESiPg5lT1RwJDJhI4sfHI,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=eQpWyYeCz8IvNFBJmqOqFv6x05FT8gOtUC62M_a-0UI,129100
7
+ souleyez/main.py,sha256=skDRnYRjaB7t_6KkMMCITyQqCoq5Ta5n6qupas7TIdg,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=yY6yvWMHZZXVEQC2JeQ8Tui0TyXKbWNabPlh0X5BdO8,7187
107
+ souleyez/docs/README.md,sha256=-eCQcjyhWcq2_E14G7DlTWGAdJLYe0qBGoUJXC-qr_8,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
@@ -152,7 +152,7 @@ souleyez/engine/job_status.py,sha256=OAEf2rAzapm55m4tc3PSilotdA5ONX15JavUMLre0is
152
152
  souleyez/engine/loader.py,sha256=ke6QQVVWozDnqGNBotajC3RBYOa2_DZmv5DAnDZVgIc,2769
153
153
  souleyez/engine/log_sanitizer.py,sha256=QHF6zSms-wHo6SbL6fHXIh1GG-8G34lE7kl45nbPn70,7130
154
154
  souleyez/engine/manager.py,sha256=aBQMoib-VWNXtIp5Qn34tRj1P1jiLpwAIoo1fexAaLU,3629
155
- souleyez/engine/result_handler.py,sha256=vFWKydlWMhE8jjvVI29ZzRODMX2o3jtrreqKqAVkIT4,141198
155
+ souleyez/engine/result_handler.py,sha256=iJBGy9apzYYp8nQn70wnqd09iYieGeB8GNm9ESkBFag,142311
156
156
  souleyez/engine/worker_manager.py,sha256=B7b8RbkKTNofmiIyHTNgdikoZCLXpB-iIl1S4-U3q9o,6127
157
157
  souleyez/export/__init__.py,sha256=2kFHftSqqrRUG6PhtfhCyhnkpkjc-8Zb4utGo-Nb6B4,61
158
158
  souleyez/export/evidence_bundle.py,sha256=hqPn_h2CidhL-1VAT0qraZ8r1yfnUTnLZ3RfPPCK5Ds,9966
@@ -282,7 +282,7 @@ souleyez/storage/deliverable_evidence.py,sha256=XRagZV6Ol3SySZjk9joc8elvaqBwvi1s
282
282
  souleyez/storage/deliverable_exporter.py,sha256=2c7CHiuCo40Z9WRfzjujSkdZCjKSJmk_BzxsJPswELM,16320
283
283
  souleyez/storage/deliverable_templates.py,sha256=DxsIqkUd54qr7nFByFmF9st6btteKV9bLM2RbgL7MHk,10875
284
284
  souleyez/storage/deliverables.py,sha256=AR2hIRjXIhf3NxzQouh38zZrH5-RIx6Yo0d8i16oHxo,11976
285
- souleyez/storage/engagements.py,sha256=y4PoKJp28nEsFTpcj1cR13r-0UPfYae_Bp96GHao_I0,10263
285
+ souleyez/storage/engagements.py,sha256=0w6P2AVDoXPkakIZ3sgN2tWW-OiIiqOe6E_R_WSxAJ0,10419
286
286
  souleyez/storage/evidence.py,sha256=mG4stROZL3hjA1EJNpGpW_ytbMbyOpLfPT3WgSAPvR4,11643
287
287
  souleyez/storage/execution_log.py,sha256=HiU44zk5txbwJvGVuGFrzrEHjTOfEvKUuaSyOvnsS1M,4049
288
288
  souleyez/storage/exploit_attempts.py,sha256=1ygYOuvmmRq2FASUinEZh_JYgdItu06Kf-GM1HbJgkc,10188
@@ -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
@@ -365,14 +365,14 @@ souleyez/ui/template_selector.py,sha256=qQJkFNnVjYctb-toeYlupP_U1asGrJWYi5-HR89A
365
365
  souleyez/ui/terminal.py,sha256=Sw9ma1-DZclJE1sENjTZ3Q7r-Ct1NiB3Lpmv-RZW5tE,2372
366
366
  souleyez/ui/timeline_view.py,sha256=Ze8Mev9VE4_ECdNFEJwZK2V42EBguR83uCCdwAbJqmc,11111
367
367
  souleyez/ui/tool_setup.py,sha256=HkRTjzN7FHUs_XKtNYnphkdXb5kC4P6ghpI8TeCuEjU,36375
368
- souleyez/ui/tutorial.py,sha256=XxF06vNVbuzHjkbHbft6fDPj6RSH0tqr4FZ3K8DPSrY,14800
368
+ souleyez/ui/tutorial.py,sha256=efDF6nWRek6fySppjmq3qMQ3J2WfW89LOcaeltqnWH4,14917
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
- souleyez/utils/tool_checker.py,sha256=YZjEeHudjglvJk_MA-iQLzqEItFybhCy6PfaPoBANtE,30830
373
- souleyez-2.43.3.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
374
- souleyez-2.43.3.dist-info/METADATA,sha256=SgqKTr7vd8TI_8YKA8yOHU1-QJez9VJH8HlFr9cAJvU,10425
375
- souleyez-2.43.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
376
- souleyez-2.43.3.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
377
- souleyez-2.43.3.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
378
- souleyez-2.43.3.dist-info/RECORD,,
372
+ souleyez/utils/tool_checker.py,sha256=YzNajZpFyKJA5fp0Kq_gQ0YnKb7J1BaKJSZ8vP-IWj8,30868
373
+ souleyez-2.43.8.dist-info/licenses/LICENSE,sha256=J7vDD5QMF4w2oSDm35eBgosATE70ah1M40u9W4EpTZs,1090
374
+ souleyez-2.43.8.dist-info/METADATA,sha256=7gYfKwNQcehNCgKHrpSM_Tc4HLHOJfQNfrsRa2HY_d8,10425
375
+ souleyez-2.43.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
376
+ souleyez-2.43.8.dist-info/entry_points.txt,sha256=bN5W1dhjDZJl3TKclMjRpfQvGPmyrJLwwDuCj_X39HE,48
377
+ souleyez-2.43.8.dist-info/top_level.txt,sha256=afAMzS9p4lcdBNxhGo6jl3ipQE9HUvvNIPOdjtPjr_Q,9
378
+ souleyez-2.43.8.dist-info/RECORD,,