Add Android forensics, IOC threat-intel DB, Compose companion; scrub secrets from configs
This commit is contained in:
@@ -4,225 +4,300 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{% block title %}AUTARCH{% endblock %}</title>
|
||||
<!-- Critical inline CSS — prevents white flash / FOUC if external sheet delays -->
|
||||
<style>
|
||||
:root{--bg-primary:#0f1117;--bg-secondary:#1a1d27;--bg-card:#222536;--bg-input:#2a2d3e;--border:#333650;--text-primary:#e4e6f0;--text-secondary:#8b8fa8;--text-muted:#5c6078;--accent:#6366f1;--accent-hover:#818cf8;--danger:#ef4444;--radius:8px}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg-primary);color:var(--text-primary);line-height:1.6}
|
||||
.layout{display:flex;min-height:100vh}
|
||||
.sidebar{width:240px;background:var(--bg-secondary);border-right:1px solid var(--border);display:flex;flex-direction:column;position:fixed;height:100vh;overflow-y:auto}
|
||||
.content{flex:1;margin-left:240px;padding:32px;max-width:1200px}
|
||||
.login-wrapper{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;padding:20px}
|
||||
a{color:var(--accent);text-decoration:none}
|
||||
</style>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
|
||||
<link rel="stylesheet" href="{{ url_for('static', filename='css/autarchos.css') }}">
|
||||
{% block extra_head %}{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
{% if session.get('user') %}
|
||||
<div class="layout">
|
||||
<nav class="sidebar">
|
||||
<div class="sidebar-header">
|
||||
<h2>AUTARCH</h2>
|
||||
<span class="subtitle">Security Platform</span>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<ul class="nav-links">
|
||||
<li><a href="{{ url_for('dashboard.index') }}" class="{% if request.endpoint == 'dashboard.index' %}active{% endif %}">Dashboard</a></li>
|
||||
<li><a href="{{ url_for('port_scanner.index') }}" class="{% if request.blueprint == 'port_scanner' %}active{% endif %}">🔍 Port Scanner</a></li>
|
||||
<li><a href="{{ url_for('targets.index') }}" class="{% if request.blueprint == 'targets' %}active{% endif %}">Investigations</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<div class="nav-section-title">Categories</div>
|
||||
<ul class="nav-links">
|
||||
<li><a href="{{ url_for('autonomy.index') }}" class="{% if request.blueprint == 'autonomy' %}active{% endif %}" style="color:var(--accent)">Autonomy</a></li>
|
||||
<li><a href="{{ url_for('defense.index') }}" class="{% if request.blueprint == 'defense' and request.endpoint not in ('defense.linux_index', 'defense.windows_index', 'defense.monitor_index') %}active{% endif %}">Defense</a></li>
|
||||
<li><a href="{{ url_for('defense.linux_index') }}" class="{% if request.endpoint == 'defense.linux_index' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Linux</a></li>
|
||||
<li><a href="{{ url_for('defense.windows_index') }}" class="{% if request.endpoint == 'defense.windows_index' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Windows</a></li>
|
||||
<li><a href="{{ url_for('defense.monitor_index') }}" class="{% if request.endpoint == 'defense.monitor_index' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Threat Monitor</a></li>
|
||||
<li><a href="{{ url_for('threat_intel.index') }}" class="{% if request.blueprint == 'threat_intel' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Threat Intel</a></li>
|
||||
<li><a href="{{ url_for('log_correlator.index') }}" class="{% if request.blueprint == 'log_correlator' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Log Correlator</a></li>
|
||||
<li><a href="{{ url_for('container_sec.index') }}" class="{% if request.blueprint == 'container_sec' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Container Sec</a></li>
|
||||
<li><a href="{{ url_for('email_sec.index') }}" class="{% if request.blueprint == 'email_sec' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Email Sec</a></li>
|
||||
<li><a href="{{ url_for('offense.index') }}" class="{% if request.blueprint == 'offense' %}active{% endif %}">Offense</a></li>
|
||||
<li><a href="{{ url_for('loadtest.index') }}" class="{% if request.blueprint == 'loadtest' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Load Test</a></li>
|
||||
<li><a href="{{ url_for('phishmail.index') }}" class="{% if request.blueprint == 'phishmail' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Gone Fishing</a></li>
|
||||
<li><a href="{{ url_for('social_eng.index') }}" class="{% if request.blueprint == 'social_eng' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Social Eng</a></li>
|
||||
<li><a href="{{ url_for('hack_hijack.index') }}" class="{% if request.blueprint == 'hack_hijack' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Hack Hijack</a></li>
|
||||
<li><a href="{{ url_for('webapp_scanner.index') }}" class="{% if request.blueprint == 'webapp_scanner' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Web Scanner</a></li>
|
||||
<li><a href="{{ url_for('c2_framework.index') }}" class="{% if request.blueprint == 'c2_framework' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ C2 Framework</a></li>
|
||||
<li><a href="{{ url_for('api_fuzzer.index') }}" class="{% if request.blueprint == 'api_fuzzer' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ API Fuzzer</a></li>
|
||||
<li><a href="{{ url_for('cloud_scan.index') }}" class="{% if request.blueprint == 'cloud_scan' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Cloud Scan</a></li>
|
||||
<li><a href="{{ url_for('vuln_scanner.index') }}" class="{% if request.blueprint == 'vuln_scanner' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Vuln Scanner</a></li>
|
||||
<li><a href="{{ url_for('exploit_dev.index') }}" class="{% if request.blueprint == 'exploit_dev' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Exploit Dev</a></li>
|
||||
<li><a href="{{ url_for('ad_audit.index') }}" class="{% if request.blueprint == 'ad_audit' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ AD Audit</a></li>
|
||||
<li><a href="{{ url_for('counter.index') }}" class="{% if request.blueprint == 'counter' %}active{% endif %}">Counter</a></li>
|
||||
<li><a href="{{ url_for('steganography.index') }}" class="{% if request.blueprint == 'steganography' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Steganography</a></li>
|
||||
<li><a href="{{ url_for('anti_forensics.index') }}" class="{% if request.blueprint == 'anti_forensics' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Anti-Forensics</a></li>
|
||||
<li><a href="{{ url_for('analyze.index') }}" class="{% if request.blueprint == 'analyze' and request.endpoint != 'analyze.hash_detection' %}active{% endif %}">Analyze</a></li>
|
||||
<li><a href="{{ url_for('analyze.hash_detection') }}" class="{% if request.endpoint == 'analyze.hash_detection' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Hash Toolkit</a></li>
|
||||
<li><a href="{{ url_for('llm_trainer.index') }}" class="{% if request.blueprint == 'llm_trainer' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ LLM Trainer</a></li>
|
||||
<li><a href="{{ url_for('password_toolkit.index') }}" class="{% if request.blueprint == 'password_toolkit' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Password Toolkit</a></li>
|
||||
<li><a href="{{ url_for('report_engine.index') }}" class="{% if request.blueprint == 'report_engine' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Reports</a></li>
|
||||
<li><a href="{{ url_for('ble_scanner.index') }}" class="{% if request.blueprint == 'ble_scanner' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ BLE Scanner</a></li>
|
||||
<li><a href="{{ url_for('forensics.index') }}" class="{% if request.blueprint == 'forensics' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Forensics</a></li>
|
||||
<li><a href="{{ url_for('rfid_tools.index') }}" class="{% if request.blueprint == 'rfid_tools' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ RFID/NFC</a></li>
|
||||
<li><a href="{{ url_for('malware_sandbox.index') }}" class="{% if request.blueprint == 'malware_sandbox' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Malware Sandbox</a></li>
|
||||
<li><a href="{{ url_for('reverse_eng.index') }}" class="{% if request.blueprint == 'reverse_eng' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Reverse Eng</a></li>
|
||||
<li><a href="{{ url_for('osint.index') }}" class="{% if request.blueprint == 'osint' %}active{% endif %}">OSINT</a></li>
|
||||
<li><a href="{{ url_for('ipcapture.index') }}" class="{% if request.blueprint == 'ipcapture' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ IP Capture</a></li>
|
||||
<li><a href="{{ url_for('simulate.index') }}" class="{% if request.blueprint == 'simulate' and request.endpoint != 'simulate.legendary_creator' %}active{% endif %}">Simulate</a></li>
|
||||
<li><a href="{{ url_for('simulate.legendary_creator') }}" class="{% if request.endpoint == 'simulate.legendary_creator' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Legendary Creator</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<div class="nav-section-title">Network</div>
|
||||
<ul class="nav-links">
|
||||
<li><a href="{{ url_for('network.index') }}" class="{% if request.blueprint == 'network' %}active{% endif %}">🛡 Network Security</a></li>
|
||||
<li><a href="{{ url_for('wireshark.index') }}" class="{% if request.blueprint == 'wireshark' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Wireshark</a></li>
|
||||
<li><a href="{{ url_for('net_mapper.index') }}" class="{% if request.blueprint == 'net_mapper' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Net Mapper</a></li>
|
||||
<li><a href="{{ url_for('wifi_audit.index') }}" class="{% if request.blueprint == 'wifi_audit' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ WiFi Audit</a></li>
|
||||
<li><a href="{{ url_for('deauth.index') }}" class="{% if request.blueprint == 'deauth' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem;color:var(--danger,#f55)">└ Deauth</a></li>
|
||||
<li><a href="{{ url_for('pineapple.index') }}" class="{% if request.blueprint == 'pineapple' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem;color:var(--danger,#f55)">└ Evil Twin / Pineapple</a></li>
|
||||
<li><a href="{{ url_for('mitm_proxy.index') }}" class="{% if request.blueprint == 'mitm_proxy' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem;color:var(--danger,#f55)">└ MITM Proxy</a></li>
|
||||
<li><a href="{{ url_for('remote_monitor.index') }}" class="{% if request.blueprint == 'remote_monitor' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Remote Monitor</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<div class="nav-section-title">Tools</div>
|
||||
<ul class="nav-links">
|
||||
<li><a href="{{ url_for('module_creator.index') }}" class="{% if request.blueprint == 'module_creator' %}active{% endif %}" style="color:var(--accent)">➕ Create Module</a></li>
|
||||
<li><a href="{{ url_for('encmodules.index') }}" class="{% if request.blueprint == 'encmodules' %}active{% endif %}" style="color:var(--danger,#f55)">🔒 Enc Modules</a></li>
|
||||
<li><a href="{{ url_for('hardware.index') }}" class="{% if request.blueprint == 'hardware' %}active{% endif %}">Hardware</a></li>
|
||||
<li><a href="{{ url_for('android_exploit.index') }}" class="{% if request.blueprint == 'android_exploit' %}active{% endif %}">Android Exploit</a></li>
|
||||
<li><a href="{{ url_for('sms_forge.index') }}" class="{% if request.blueprint == 'sms_forge' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ SMS Forge</a></li>
|
||||
<li><a href="{{ url_for('rcs_tools.index') }}" class="{% if request.blueprint == 'rcs_tools' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ RCS Tools</a></li>
|
||||
<li><a href="{{ url_for('iphone_exploit.index') }}" class="{% if request.blueprint == 'iphone_exploit' %}active{% endif %}">iPhone Exploit</a></li>
|
||||
<li><a href="{{ url_for('android_protect.index') }}" class="{% if request.blueprint == 'android_protect' %}active{% endif %}">Shield</a></li>
|
||||
<li><a href="{{ url_for('revshell.index') }}" class="{% if request.blueprint == 'revshell' %}active{% endif %}">Reverse Shell</a></li>
|
||||
<li><a href="{{ url_for('archon.index') }}" class="{% if request.blueprint == 'archon' %}active{% endif %}">Archon</a></li>
|
||||
<li><a href="{{ url_for('sdr_tools.index') }}" class="{% if request.blueprint == 'sdr_tools' %}active{% endif %}">SDR/RF Tools</a></li>
|
||||
<li><a href="{{ url_for('starlink_hack.index') }}" class="{% if request.blueprint == 'starlink_hack' %}active{% endif %}">Starlink Hack</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="nav-section">
|
||||
<div class="nav-section-title">System</div>
|
||||
<ul class="nav-links">
|
||||
<li><a href="{{ url_for('ssh_manager.index') }}" class="{% if request.blueprint == 'ssh_manager' %}active{% endif %}">SSH / SSHD</a></li>
|
||||
<li><a href="{{ url_for('upnp.index') }}" class="{% if request.blueprint == 'upnp' %}active{% endif %}">UPnP</a></li>
|
||||
<li><a href="{{ url_for('wireguard.index') }}" class="{% if request.blueprint == 'wireguard' %}active{% endif %}">WireGuard</a></li>
|
||||
<li><a href="{{ url_for('msf.index') }}" class="{% if request.blueprint == 'msf' %}active{% endif %}">MSF Console</a></li>
|
||||
<li><a href="{{ url_for('dns_service.index') }}" class="{% if request.blueprint == 'dns_service' and request.endpoint != 'dns_service.nameserver' %}active{% endif %}">DNS Server</a></li>
|
||||
<li><a href="{{ url_for('dns_service.nameserver') }}" class="{% if request.endpoint == 'dns_service.nameserver' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Nameserver</a></li>
|
||||
<li><a href="{{ url_for('settings.index') }}" class="{% if request.blueprint == 'settings' and request.endpoint not in ('settings.llm_settings', 'settings.deps_index') %}active{% endif %}">Settings</a></li>
|
||||
<li><a href="{{ url_for('settings.llm_settings') }}" class="{% if request.endpoint == 'settings.llm_settings' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ LLM Config</a></li>
|
||||
<li><a href="{{ url_for('settings.mcp_settings') }}" class="{% if request.endpoint == 'settings.mcp_settings' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ MCP Server</a></li>
|
||||
<li><a href="{{ url_for('settings.deps_index') }}" class="{% if request.endpoint == 'settings.deps_index' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Dependencies</a></li>
|
||||
<li><a href="{{ url_for('dashboard.manual') }}" class="{% if request.endpoint == 'dashboard.manual' %}active{% endif %}">User Manual</a></li>
|
||||
<li><a href="{{ url_for('dashboard.manual_windows') }}" class="{% if request.endpoint == 'dashboard.manual_windows' %}active{% endif %}" style="padding-left:1.5rem;font-size:0.85rem">└ Windows Guide</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div style="padding:6px 12px">
|
||||
<button id="btn-reload-modules" onclick="reloadModules()" class="btn btn-small"
|
||||
style="width:100%;font-size:0.75rem;padding:5px 0;background:var(--bg-input);border:1px solid var(--border);color:var(--text-secondary)"
|
||||
title="Re-scan modules/ directory for new or changed modules">
|
||||
↻ Refresh Modules
|
||||
</button>
|
||||
</div>
|
||||
<div class="sidebar-footer">
|
||||
<span class="admin-name">{{ session.get('user', 'admin') }}</span>
|
||||
<a href="{{ url_for('auth.logout') }}" class="logout-link">Logout</a>
|
||||
<div style="margin-top:0.55rem;padding:0.4rem 0.5rem;border-top:1px solid rgba(255,255,255,0.06);
|
||||
font-size:0.62rem;color:#555;line-height:1.4;text-align:center">
|
||||
🔒 RESTRICTED PUBLIC RELEASE<br>
|
||||
Certain features are limited or disabled.<br>
|
||||
Authorized use only — activity is logged.
|
||||
<body data-blueprint="{{ request.blueprint or '' }}">
|
||||
{% if session.get('user') %}
|
||||
<div class="desktop-bg"></div>
|
||||
<div class="watermark">Λ</div>
|
||||
|
||||
<!-- ── Top system bar ─────────────────────────────────────── -->
|
||||
<div class="aos-topbar">
|
||||
<a class="logo" href="{{ url_for('dashboard.index') }}">
|
||||
<span class="mk">Λ</span>Aut<b>archOS</b>
|
||||
</a>
|
||||
<a class="mi" href="#" data-aos-action="open-launcher">Apps</a>
|
||||
<a class="mi" href="{{ url_for('settings.index') }}">Settings</a>
|
||||
<a class="mi" href="{{ url_for('dashboard.manual') }}">Help</a>
|
||||
<span class="sp"></span>
|
||||
<span class="posture">
|
||||
<span class="pulse" style="background:var(--amber);box-shadow:0 0 10px rgba(255,177,61,.6)"></span>
|
||||
Authed
|
||||
</span>
|
||||
<span class="tray">
|
||||
<svg class="shield" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M12 3l8 3v5c0 5-3.5 8-8 10-4.5-2-8-5-8-10V6z"/></svg>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M5 12.5a10 10 0 0 1 14 0M8 15.5a6 6 0 0 1 8 0M12 19h.01"/></svg>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6"><rect x="3" y="8" width="18" height="8" rx="1"/><path d="M16 12h2"/></svg>
|
||||
</span>
|
||||
<span class="user">
|
||||
<b>{{ session.get('user', 'admin') }}</b>
|
||||
</span>
|
||||
<span class="clock" id="aos-clock">--:--:--</span>
|
||||
</div>
|
||||
|
||||
<!-- ── Workspace ─────────────────────────────────────────── -->
|
||||
<main class="aos-workspace">
|
||||
{% with messages = get_flashed_messages(with_categories=true) %}
|
||||
{% if messages %}
|
||||
<div class="flash-messages">
|
||||
{% for category, message in messages %}
|
||||
<div class="flash flash-{{ category }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<!-- ── Dock ──────────────────────────────────────────────── -->
|
||||
<nav class="aos-dock">
|
||||
<a class="app" data-app="dashboard" href="{{ url_for('dashboard.index') }}">
|
||||
<div class="tip">Overview</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="3" width="7" height="9"/><rect x="14" y="3" width="7" height="5"/><rect x="14" y="12" width="7" height="9"/><rect x="3" y="16" width="7" height="5"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="defense" href="{{ url_for('defense.index') }}">
|
||||
<div class="tip">Defense</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M12 3l8 3v5c0 5-3.5 8-8 10-4.5-2-8-5-8-10V6z"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="offense" href="{{ url_for('offense.index') }}">
|
||||
<div class="tip">Offense</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M14 4l-7 8 4 0-2 8 7-8-4 0z"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="counter" href="{{ url_for('counter.index') }}">
|
||||
<div class="tip">Counter</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="net_mapper" href="{{ url_for('net_mapper.index') }}">
|
||||
<div class="tip">Topology</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="5" r="2.2"/><circle cx="5" cy="18" r="2.2"/><circle cx="19" cy="18" r="2.2"/><path d="M12 7.2 6.5 15.8M12 7.2l5.5 8.6"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="android_forensics" href="{{ url_for('android_forensics.index') }}">
|
||||
<div class="tip">Forensics</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="6" y="3" width="12" height="18" rx="2"/><path d="M10 18h4"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="msf" href="{{ url_for('msf.index') }}">
|
||||
<div class="tip">MSF Console</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="4" width="18" height="16" rx="1"/><path d="M7 9l3 3-3 3M13 15h4"/></svg>
|
||||
</a>
|
||||
<span class="divider"></span>
|
||||
<a class="app" data-app="chat" href="#" onclick="if(typeof halToggle==='function'){halToggle();}return false;">
|
||||
<div class="tip">HAL</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="4" y="6" width="16" height="12" rx="1.5"/><path d="M9 11h.01M15 11h.01M9 15h6"/></svg>
|
||||
</a>
|
||||
<a class="app" data-app="settings" href="{{ url_for('settings.index') }}">
|
||||
<div class="tip">Settings</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.7 1.7 0 0 0 .3 1.8l.1.1a2 2 0 1 1-2.8 2.8l-.1-.1a1.7 1.7 0 0 0-1.8-.3 1.7 1.7 0 0 0-1 1.5V21a2 2 0 1 1-4 0v-.1a1.7 1.7 0 0 0-1.1-1.5 1.7 1.7 0 0 0-1.8.3l-.1.1a2 2 0 1 1-2.8-2.8l.1-.1a1.7 1.7 0 0 0 .3-1.8 1.7 1.7 0 0 0-1.5-1H3a2 2 0 1 1 0-4h.1a1.7 1.7 0 0 0 1.5-1.1 1.7 1.7 0 0 0-.3-1.8l-.1-.1A2 2 0 1 1 7 4.6l.1.1a1.7 1.7 0 0 0 1.8.3H9a1.7 1.7 0 0 0 1-1.5V3a2 2 0 1 1 4 0v.1a1.7 1.7 0 0 0 1 1.5 1.7 1.7 0 0 0 1.8-.3l.1-.1a2 2 0 1 1 2.8 2.8l-.1.1a1.7 1.7 0 0 0-.3 1.8V9a1.7 1.7 0 0 0 1.5 1H21a2 2 0 1 1 0 4h-.1a1.7 1.7 0 0 0-1.5 1z"/></svg>
|
||||
</a>
|
||||
<a class="app" data-aos-action="open-launcher" href="#">
|
||||
<div class="tip">All Apps</div>
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="5" cy="5" r="2"/><circle cx="12" cy="5" r="2"/><circle cx="19" cy="5" r="2"/><circle cx="5" cy="12" r="2"/><circle cx="12" cy="12" r="2"/><circle cx="19" cy="12" r="2"/><circle cx="5" cy="19" r="2"/><circle cx="12" cy="19" r="2"/><circle cx="19" cy="19" r="2"/></svg>
|
||||
</a>
|
||||
</nav>
|
||||
|
||||
<!-- ── Apps launcher modal ───────────────────────────────── -->
|
||||
<div class="aos-launcher-backdrop" id="aos-launcher">
|
||||
<div class="aos-launcher">
|
||||
<h2>All Apps</h2>
|
||||
<input id="aos-launcher-search" class="search" type="text" placeholder="search apps... (Ctrl+Space to toggle)">
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">Core</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('dashboard.index') }}"><span class="ico">▦</span><span class="meta"><b>Dashboard</b><small>Command overview</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('autonomy.index') }}"><span class="ico">⚙</span><span class="meta"><b>Autonomy</b><small>Autonomous HAL agent</small></span></a>
|
||||
<a class="app-card" href="#" onclick="if(typeof halToggle==='function'){halToggle();}return false;"><span class="ico">◉</span><span class="meta"><b>HAL Chat</b><small>AI copilot</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('targets.index') }}"><span class="ico">⊕</span><span class="meta"><b>Investigations</b><small>Target dossiers</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('port_scanner.index') }}"><span class="ico">◐</span><span class="meta"><b>Port Scanner</b><small>Quick host scan</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<main class="content">
|
||||
{% with messages = get_flashed_messages(with_categories=true) %}
|
||||
{% if messages %}
|
||||
<div class="flash-messages">
|
||||
{% for category, message in messages %}
|
||||
<div class="flash flash-{{ category }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">Defense</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('defense.index') }}"><span class="ico">▤</span><span class="meta"><b>Defense</b><small>Hardening & audits</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('defense.linux_index') }}"><span class="ico">└</span><span class="meta"><b>Linux Audit</b><small>System hardening</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('defense.windows_index') }}"><span class="ico">└</span><span class="meta"><b>Windows Audit</b><small>System hardening</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('defense.monitor_index') }}"><span class="ico">⊙</span><span class="meta"><b>Threat Monitor</b><small>Live detection</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('threat_intel.index') }}"><span class="ico">◬</span><span class="meta"><b>Threat Intel</b><small>IoC lookups</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('log_correlator.index') }}"><span class="ico">▥</span><span class="meta"><b>Log Correlator</b><small>SIEM-style</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('container_sec.index') }}"><span class="ico">▣</span><span class="meta"><b>Container Sec</b><small>Docker / Podman</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('email_sec.index') }}"><span class="ico">✉</span><span class="meta"><b>Email Sec</b><small>SPF / DKIM / DMARC</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% block content %}{% endblock %}
|
||||
</main>
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">Offense</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('offense.index') }}"><span class="ico">⚔</span><span class="meta"><b>Offense</b><small>Pentesting tools</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('msf.index') }}"><span class="ico">⌗</span><span class="meta"><b>MSF Console</b><small>Metasploit</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('exploit_dev.index') }}"><span class="ico">⌬</span><span class="meta"><b>Exploit Dev</b><small>Workshop</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('vuln_scanner.index') }}"><span class="ico">◯</span><span class="meta"><b>Vuln Scanner</b><small>CVE scanner</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('webapp_scanner.index') }}"><span class="ico">◍</span><span class="meta"><b>Web Scanner</b><small>WebApp audit</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('c2_framework.index') }}"><span class="ico">⚐</span><span class="meta"><b>C2 Framework</b><small>Command & control</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('api_fuzzer.index') }}"><span class="ico">≋</span><span class="meta"><b>API Fuzzer</b><small>API testing</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('cloud_scan.index') }}"><span class="ico">☁</span><span class="meta"><b>Cloud Scan</b><small>AWS / Azure / GCP</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('ad_audit.index') }}"><span class="ico">⛒</span><span class="meta"><b>AD Audit</b><small>Active Directory</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('hack_hijack.index') }}"><span class="ico">◑</span><span class="meta"><b>Hack Hijack</b><small>Session takeover</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('phishmail.index') }}"><span class="ico">⌖</span><span class="meta"><b>Phishmail</b><small>Phishing simulation</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('social_eng.index') }}"><span class="ico">⛁</span><span class="meta"><b>Social Eng</b><small>SET toolkit</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('loadtest.index') }}"><span class="ico">⏚</span><span class="meta"><b>Load Test</b><small>Stress testing</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('password_toolkit.index') }}"><span class="ico">⚷</span><span class="meta"><b>Password Toolkit</b><small>Hashes & cracking</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('revshell.index') }}"><span class="ico">⌥</span><span class="meta"><b>Reverse Shell</b><small>Multi-language gen</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">Counter / Analyze</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('counter.index') }}"><span class="ico">⌗</span><span class="meta"><b>Counter</b><small>Threat hunting</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('analyze.index') }}"><span class="ico">⌕</span><span class="meta"><b>Analyze</b><small>Forensics & hex</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('analyze.hash_detection') }}"><span class="ico">⌖</span><span class="meta"><b>Hash Toolkit</b><small>Hash ID & crack</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('forensics.index') }}"><span class="ico">⌬</span><span class="meta"><b>Forensics</b><small>File analysis</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('anti_forensics.index') }}"><span class="ico">⌧</span><span class="meta"><b>Anti-Forensics</b><small>Evidence removal</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('steganography.index') }}"><span class="ico">⌗</span><span class="meta"><b>Steganography</b><small>Hidden data</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('malware_sandbox.index') }}"><span class="ico">⌘</span><span class="meta"><b>Malware Sandbox</b><small>Behavior analysis</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('reverse_eng.index') }}"><span class="ico">↺</span><span class="meta"><b>Reverse Eng</b><small>Disassembly</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('android_forensics.index') }}"><span class="ico">◫</span><span class="meta"><b>Android Forensics</b><small>Acquisition & IOC</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">OSINT & Simulate</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('osint.index') }}"><span class="ico">⌥</span><span class="meta"><b>OSINT</b><small>25,475 indexed sites</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('ipcapture.index') }}"><span class="ico">⊜</span><span class="meta"><b>IP Capture</b><small>Honey-link</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('simulate.index') }}"><span class="ico">⌕</span><span class="meta"><b>Simulate</b><small>Attack simulation</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('simulate.legendary_creator') }}"><span class="ico">⋄</span><span class="meta"><b>Legendary Creator</b><small>Profile builder</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">Network</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('network.index') }}"><span class="ico">▦</span><span class="meta"><b>Network Security</b><small>8-tab suite</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('net_mapper.index') }}"><span class="ico">⌬</span><span class="meta"><b>Net Mapper</b><small>Topology</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('wireshark.index') }}"><span class="ico">◯</span><span class="meta"><b>Wireshark</b><small>Packet capture</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('wifi_audit.index') }}"><span class="ico">≋</span><span class="meta"><b>WiFi Audit</b><small>Wireless scan</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('deauth.index') }}"><span class="ico">⌅</span><span class="meta"><b>Deauth</b><small>WiFi disruption</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('pineapple.index') }}"><span class="ico">⌖</span><span class="meta"><b>Pineapple</b><small>Evil twin</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('mitm_proxy.index') }}"><span class="ico">⌗</span><span class="meta"><b>MITM Proxy</b><small>Intercept</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('remote_monitor.index') }}"><span class="ico">◉</span><span class="meta"><b>Remote Monitor</b><small>PIAP devices</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">Hardware & Mobile</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('hardware.index') }}"><span class="ico">⌘</span><span class="meta"><b>Hardware</b><small>ADB / Fastboot / ESP32</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('android_exploit.index') }}"><span class="ico">▤</span><span class="meta"><b>Android Exploit</b><small>Recon & payload</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('android_protect.index') }}"><span class="ico">⛨</span><span class="meta"><b>Android Shield</b><small>Anti-stalkerware</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('iphone_exploit.index') }}"><span class="ico">▢</span><span class="meta"><b>iPhone Exploit</b><small>iOS research</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('sms_forge.index') }}"><span class="ico">✉</span><span class="meta"><b>SMS Forge</b><small>SMS / RCS</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('rcs_tools.index') }}"><span class="ico">✉</span><span class="meta"><b>RCS Tools</b><small>Rich messaging</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('ble_scanner.index') }}"><span class="ico">⌬</span><span class="meta"><b>BLE Scanner</b><small>Bluetooth LE</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('rfid_tools.index') }}"><span class="ico">⊜</span><span class="meta"><b>RFID / NFC</b><small>Proximity tools</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('sdr_tools.index') }}"><span class="ico">≋</span><span class="meta"><b>SDR Tools</b><small>Software-defined radio</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('starlink_hack.index') }}"><span class="ico">⌬</span><span class="meta"><b>Starlink</b><small>Satellite research</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('archon.index') }}"><span class="ico">Λ</span><span class="meta"><b>Archon</b><small>Companion app</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="group">
|
||||
<div class="group-title">System</div>
|
||||
<div class="apps">
|
||||
<a class="app-card" href="{{ url_for('settings.index') }}"><span class="ico">⚙</span><span class="meta"><b>Settings</b><small>System config</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('settings.llm_settings') }}"><span class="ico">⌗</span><span class="meta"><b>LLM Config</b><small>Backend & models</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('settings.mcp_settings') }}"><span class="ico">⌘</span><span class="meta"><b>MCP Server</b><small>Claude / MCP</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('settings.deps_index') }}"><span class="ico">⊞</span><span class="meta"><b>Dependencies</b><small>System tools</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('ssh_manager.index') }}"><span class="ico">⌬</span><span class="meta"><b>SSH / SSHD</b><small>Key management</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('upnp.index') }}"><span class="ico">⌃</span><span class="meta"><b>UPnP</b><small>Port forwarding</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('wireguard.index') }}"><span class="ico">⌕</span><span class="meta"><b>WireGuard</b><small>VPN tunnels</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('dns_service.index') }}"><span class="ico">⌬</span><span class="meta"><b>DNS Server</b><small>Local resolver</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('report_engine.index') }}"><span class="ico">⌗</span><span class="meta"><b>Reports</b><small>Output engine</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('module_creator.index') }}"><span class="ico">+</span><span class="meta"><b>Module Creator</b><small>Build modules</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('encmodules.index') }}"><span class="ico">⌗</span><span class="meta"><b>Enc Modules</b><small>Encrypted modules</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('llm_trainer.index') }}"><span class="ico">⌬</span><span class="meta"><b>LLM Trainer</b><small>Fine-tuning</small></span></a>
|
||||
<a class="app-card" href="{{ url_for('dashboard.manual') }}"><span class="ico">⌘</span><span class="meta"><b>User Manual</b><small>Docs</small></span></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{% else %}
|
||||
<div class="login-wrapper">
|
||||
{% with messages = get_flashed_messages(with_categories=true) %}
|
||||
{% if messages %}
|
||||
<div class="flash-messages">
|
||||
{% for category, message in messages %}
|
||||
<div class="flash flash-{{ category }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if messages %}
|
||||
<div class="flash-messages">
|
||||
{% for category, message in messages %}
|
||||
<div class="flash flash-{{ category }}">{{ message }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
{% block login_content %}{% endblock %}
|
||||
</div>
|
||||
{% endif %}
|
||||
<script src="{{ url_for('static', filename='js/lib/adb-bundle.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/lib/fastboot-bundle.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/lib/esptool-bundle.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/hardware-direct.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
|
||||
{% endif %}
|
||||
|
||||
<!-- Agent Hal Global Chat Panel -->
|
||||
{% if session.get('user') %}
|
||||
<div id="hal-panel" class="hal-panel" style="display:none">
|
||||
<div class="hal-header">
|
||||
<span>● Hal</span>
|
||||
<label class="hal-mode-switch" title="Toggle Agent mode (tools) vs Direct chat">
|
||||
<input type="checkbox" id="hal-mode-toggle" onchange="halModeChanged(this)">
|
||||
<span class="hal-mode-slider"></span>
|
||||
<span class="hal-mode-label" id="hal-mode-label">Chat</span>
|
||||
</label>
|
||||
<button onclick="halToggleFeedback()" id="hal-feedback-btn" class="hal-feedback-btn"
|
||||
title="Toggle auto-analysis feedback on tool results"
|
||||
style="font-size:0.6rem;padding:1px 5px;border-radius:3px;border:1px solid var(--accent);color:var(--accent);background:transparent;cursor:pointer">FB</button>
|
||||
<button onclick="halToggle()" class="hal-close" title="Close">✕</button>
|
||||
<script src="{{ url_for('static', filename='js/lib/adb-bundle.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/lib/fastboot-bundle.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/lib/esptool-bundle.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/hardware-direct.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/app.js') }}"></script>
|
||||
<script src="{{ url_for('static', filename='js/autarchos.js') }}"></script>
|
||||
|
||||
{% if session.get('user') %}
|
||||
<!-- ── HAL global panel ─────────────────────────────────────── -->
|
||||
<div id="hal-panel" class="hal-panel" style="display:none">
|
||||
<div class="hal-header">
|
||||
<span>● Hal</span>
|
||||
<label class="hal-mode-switch" title="Toggle Agent mode (tools) vs Direct chat">
|
||||
<input type="checkbox" id="hal-mode-toggle" onchange="halModeChanged(this)">
|
||||
<span class="hal-mode-slider"></span>
|
||||
<span class="hal-mode-label" id="hal-mode-label">Chat</span>
|
||||
</label>
|
||||
<button onclick="halToggleFeedback()" id="hal-feedback-btn" class="hal-feedback-btn"
|
||||
title="Toggle auto-analysis feedback on tool results"
|
||||
style="font-size:0.6rem;padding:1px 5px;border-radius:3px;border:1px solid var(--accent);color:var(--accent);background:transparent;cursor:pointer">FB</button>
|
||||
<button onclick="halToggle()" class="hal-close" title="Close">✕</button>
|
||||
</div>
|
||||
<div id="hal-messages" class="hal-messages"></div>
|
||||
<div class="hal-footer">
|
||||
<input id="hal-input" type="text" placeholder="Ask Hal..." onkeypress="if(event.key==='Enter')halSend()">
|
||||
<button onclick="halSend()" class="btn btn-sm btn-primary" id="hal-send-btn">Send</button>
|
||||
<button onclick="halStop()" class="btn btn-sm" id="hal-stop-btn" title="Stop generation" style="display:none;background:var(--danger,#ff3b30);color:#fff">Stop</button>
|
||||
<button onclick="halClear()" class="btn btn-sm" title="Clear history">↺</button>
|
||||
</div>
|
||||
</div>
|
||||
<button id="hal-toggle-btn" class="hal-toggle-btn" onclick="halToggle()">HAL</button>
|
||||
|
||||
<!-- ── Debug console ─────────────────────────────────────── -->
|
||||
<div id="debug-panel" class="debug-panel" style="display:none">
|
||||
<div class="debug-header" id="debug-drag-handle">
|
||||
<div style="display:flex;align-items:center;gap:0.5rem">
|
||||
<span id="debug-live-dot" class="debug-live-dot"></span>
|
||||
<span style="font-weight:700;letter-spacing:0.08em;font-size:0.8rem">AUTARCH DEBUG</span>
|
||||
</div>
|
||||
<div id="hal-messages" class="hal-messages"></div>
|
||||
<div class="hal-footer">
|
||||
<input id="hal-input" type="text" placeholder="Ask Hal..." onkeypress="if(event.key==='Enter')halSend()">
|
||||
<button onclick="halSend()" class="btn btn-sm btn-primary" id="hal-send-btn">Send</button>
|
||||
<button onclick="halStop()" class="btn btn-sm" id="hal-stop-btn" title="Stop generation" style="display:none;background:var(--danger,#ff3b30);color:#fff">Stop</button>
|
||||
<button onclick="halClear()" class="btn btn-sm" title="Clear history">↺</button>
|
||||
<div style="display:flex;align-items:center;gap:0.5rem">
|
||||
<span id="debug-msg-count" style="font-size:0.7rem;color:#666;font-family:monospace">0 msgs</span>
|
||||
<button class="debug-btn" onclick="debugClear()" title="Clear output">⌫</button>
|
||||
<button class="debug-btn" onclick="debugClose()" title="Close">✕</button>
|
||||
</div>
|
||||
</div>
|
||||
<button id="hal-toggle-btn" class="hal-toggle-btn" onclick="halToggle()">HAL</button>
|
||||
|
||||
<!-- Debug Console Window -->
|
||||
<div id="debug-panel" class="debug-panel" style="display:none">
|
||||
<div class="debug-header" id="debug-drag-handle">
|
||||
<div style="display:flex;align-items:center;gap:0.5rem">
|
||||
<span id="debug-live-dot" class="debug-live-dot"></span>
|
||||
<span style="font-weight:700;letter-spacing:0.08em;font-size:0.8rem">AUTARCH DEBUG</span>
|
||||
</div>
|
||||
<div style="display:flex;align-items:center;gap:0.5rem">
|
||||
<span id="debug-msg-count" style="font-size:0.7rem;color:#666;font-family:monospace">0 msgs</span>
|
||||
<button class="debug-btn" onclick="debugClear()" title="Clear output">⌫</button>
|
||||
<button class="debug-btn" onclick="debugClose()" title="Close">✕</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="debug-output" class="debug-output"></div>
|
||||
<div class="debug-controls">
|
||||
<span style="font-size:0.7rem;color:#555;margin-right:0.5rem;font-weight:600">FILTER:</span>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="warn" checked onchange="debugSetMode(this)"> Warnings & Errors</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="verbose" onchange="debugSetMode(this)"> Full Verbose</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="debug" onchange="debugSetMode(this)"> Full Debug + Symbols</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="output" onchange="debugSetMode(this)"> Output Only</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="all" onchange="debugSetMode(this)"> Show Everything</label>
|
||||
</div>
|
||||
<div id="debug-output" class="debug-output"></div>
|
||||
<div class="debug-controls">
|
||||
<span style="font-size:0.7rem;color:#555;margin-right:0.5rem;font-weight:600">FILTER:</span>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="warn" checked onchange="debugSetMode(this)"> Warnings & Errors</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="verbose" onchange="debugSetMode(this)"> Full Verbose</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="debug" onchange="debugSetMode(this)"> Full Debug + Symbols</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="output" onchange="debugSetMode(this)"> Output Only</label>
|
||||
<label class="debug-check-label"><input type="checkbox" name="dbg-mode" value="all" onchange="debugSetMode(this)"> Show Everything</label>
|
||||
</div>
|
||||
<button id="debug-toggle-btn" class="debug-toggle-btn" style="display:none" onclick="debugOpen()" title="Open Debug Console">DBG</button>
|
||||
{% endif %}
|
||||
</div>
|
||||
<button id="debug-toggle-btn" class="debug-toggle-btn" style="display:none" onclick="debugOpen()" title="Open Debug Console">DBG</button>
|
||||
{% endif %}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user