Merge NeuroSploit v3.3.0 — Autonomous MD-Agent Engine into main

# Conflicts:
#	prompts/task_library.json
This commit is contained in:
CyberSecurityUP
2026-06-14 21:41:26 -03:00
264 changed files with 19889 additions and 1942 deletions
@@ -88,7 +88,7 @@ DEFAULT_PROVIDERS: List[Dict] = [
{
"id": "claude_code", "name": "Claude Code", "auth_type": "oauth",
"api_format": "anthropic", "base_url": "https://api.anthropic.com",
"tier": 1, "default_model": "claude-sonnet-4-5-20250929",
"tier": 1, "default_model": "claude-sonnet-4-20250514",
},
{
"id": "codex_cli", "name": "OpenAI Codex CLI", "auth_type": "oauth",
@@ -123,13 +123,13 @@ DEFAULT_PROVIDERS: List[Dict] = [
{
"id": "kiro", "name": "Kiro AI", "auth_type": "oauth",
"api_format": "anthropic", "base_url": "https://api.anthropic.com",
"tier": 1, "default_model": "claude-sonnet-4-5-20250929",
"tier": 1, "default_model": "claude-sonnet-4-20250514",
},
# === API Key Providers (Tier 1 - Paid) ===
{
"id": "anthropic", "name": "Anthropic", "auth_type": "api_key",
"api_format": "anthropic", "base_url": "https://api.anthropic.com",
"tier": 1, "default_model": "claude-sonnet-4-5-20250929",
"tier": 1, "default_model": "claude-sonnet-4-20250514",
"env_key": "ANTHROPIC_API_KEY",
},
{
@@ -147,7 +147,7 @@ DEFAULT_PROVIDERS: List[Dict] = [
{
"id": "openrouter", "name": "OpenRouter", "auth_type": "api_key",
"api_format": "openai_compat", "base_url": "https://openrouter.ai/api/v1",
"tier": 1, "default_model": "anthropic/claude-sonnet-4-5",
"tier": 1, "default_model": "anthropic/claude-sonnet-4-20250514",
"env_key": "OPENROUTER_API_KEY",
},
# === API Key Providers (Tier 2 - Cheap) ===
+8 -8
View File
@@ -173,41 +173,41 @@ class SmartRouter:
) -> List[Tuple[Provider, Account]]:
"""Build ordered list of (provider, account) candidates.
If preferred is set, ONLY that provider is used (no fallback to others).
This ensures the user's explicit choice is respected.
If preferred is set, that provider is tried FIRST, then falls back
to other providers of the same tier if all accounts fail.
If preferred is not set, all providers are tried by tier.
"""
candidates = []
seen_account_ids = set()
if preferred:
# Strict mode: only the preferred provider
# Preferred provider goes first in candidate list
provider = self.registry.get_provider(preferred)
if provider:
accounts = self.registry.get_active_accounts(preferred)
for acct in accounts:
if self.quota.is_available(acct.id):
candidates.append((provider, acct))
seen_account_ids.add(acct.id)
if not candidates:
logger.warning(
f"SmartRouter: Preferred provider '{preferred}' has no active accounts! "
f"Falling back to all providers."
)
else:
return candidates # Only preferred provider candidates
# Auto mode or preferred has no active accounts: try all by tier
# Add remaining providers as fallback (by tier)
for tier in (1, 2, 3):
providers = self.registry.get_providers_by_tier(tier)
for provider in providers:
# Skip disabled providers
if not getattr(provider, "enabled", True):
continue
acct = self.quota.next_account(
provider.id,
self.registry.get_active_accounts(provider.id),
)
if acct:
if acct and acct.id not in seen_account_ids:
candidates.append((provider, acct))
seen_account_ids.add(acct.id)
return candidates