docs(wiki): Expand wiki to comprehensive SecuBox documentation

- Update Home.md with full SecuBox system overview
- Add Architecture-Boot.md (5-layer boot chain, CSPN compliance)
- Add Design-System.md (6-module color system, typography)
- Add Developer-Guide.md (stack, conventions, patterns)
- Add Modules.md (all 125 modules with screenshots)
- Update _Sidebar.md with comprehensive navigation
- Fix fb_dashboard.py type hint for _read_from_socket

Wiki now covers: system overview, architecture, modules, security,
development guidelines, Eye Remote, and all hardware platforms.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
CyberMind-FR 2026-04-22 10:08:37 +02:00
parent 92343fb19d
commit fec2ec11d3
7 changed files with 2436 additions and 42 deletions

View File

@ -0,0 +1,137 @@
# Boot Architecture
**SecuBox-DEB** uses a five-layer boot chain from hardware firmware to user space. Three exclusive execution modes are available: maintenance (`PROMPT`), display (`KIOSK`), or production (`API`).
---
## Boot Chain Overview
### Layer 1 — HW / BootLoader
| Platform | Firmware | Notes |
|----------|----------|-------|
| Lenovo ThinkCentre M710q | BIOS/UEFI | x86_64, Secure Boot capable |
| MOCHAbin (Armada 7040) | U-Boot | ARM64, eMMC or NVMe boot |
| ESPRESSObin (Armada 3720) | U-Boot | ARM64, SD or eMMC boot |
### Layer 2 — OS / UEFI (GRUB2)
GRUB2 handles kernel selection, signature verification (Secure Boot), and optional TPM2 unsealing (`tpm2_unseal`).
**CSPN Compliance Points:**
- `/boot` partition is unencrypted (FAT32/ext4) but protected by UEFI signature verification
- Kernel command line parameters are locked in production
- GRUB password is mandatory on production targets
### Layer 3 — Kernel + InitRamfs
#### Hardened Linux Kernel
```
CONFIG_SECURITY_LOCKDOWN_LSM=y
CONFIG_MODULE_SIG=y
CONFIG_MODULE_SIG_SHA512=y
CONFIG_HARDENED_USERCOPY=y
CONFIG_RANDOMIZE_BASE=y # KASLR
```
Built-in modules: `nftables`, `WireGuard`, `eBPF` (restricted), MOCHAbin network drivers (mvneta/mvpp2).
#### InitRamfs Operations
1. Mount encrypted LUKS2 disk (`cryptsetup luksOpen`)
2. Verify ZKP pre-mount proof (GK·HAM-HASH L1)
3. Mount encrypted root on `/sysroot`
4. `switch_root` to Rootfs
### Layer 4 — Rootfs / INIT (systemd)
After `pivot_root`, systemd orchestrates the 10-phase SecuBox-DEB startup:
| Phase | Services | SecuBox Pairs |
|-------|----------|---------------|
| 1 — Network | nftables, WireGuard, Tailscale | MESH↔AUTH |
| 2 — Perimeter Security | CrowdSec, HAProxy | WALL↔MIND |
| 3 — DPI dual-stream | nDPId (active/shadow) | WALL↔MIND |
| 4 — Runtime API | FastAPI/Uvicorn, 4R buffer | BOOT↔ROOT |
| 5 — ZKP auth | GK·HAM-HASH (L1/L2/L3) | BOOT↔ROOT |
| 6 — MirrorNet P2P | WireGuard + did:plc | MESH↔AUTH |
| 7 — Notarization | ALERTE·DÉPÔT blind notarization | WALL↔MIND |
| 8 — Display | HyperPixel / RPi Zero coprocessor | MESH↔AUTH |
| 9 — Monitoring | Metrics, alerts, SIEM | WALL↔MIND |
| 10 — Finalization | Health-check, seal TPM2 | BOOT↔ROOT |
---
## Execution Modes
### PROMPT `<LOG>` — Maintenance Mode
**Target:** `secubox-prompt.target`
- Shell access via physical console or restricted SSH
- Full audit logging (`auditd` + `systemd-journal`, 90-day retention)
- Production services (API, DPI, MirrorNet) are stopped
```bash
echo "MODE=PROMPT" > /etc/secubox/runtime.conf
systemctl isolate secubox-prompt.target
```
### KIOSK `[UI]` — Display Mode
**Target:** `secubox-kiosk.target`
- Locked UI for metrics display on HyperPixel
- No shell access, no inbound network interfaces
- Communication via Unix socket (read-only)
- Auto-restart on crash
```bash
echo "MODE=KIOSK" > /etc/secubox/runtime.conf
systemctl isolate secubox-kiosk.target
```
### API `(RT)` — Production Mode
**Target:** `secubox-api.target` (default)
- FastAPI/Uvicorn on Unix socket (HAProxy TLS frontend)
- 4R double-buffer active on L2
- nDPId dual-stream listening
- CrowdSec in agent mode
- No interactive shell, no external SSH
```bash
echo "MODE=API" > /etc/secubox/runtime.conf
systemctl isolate secubox-api.target
```
---
## Module Color Correspondence
| Color | Hex | Layer / Mode |
|-------|-----|--------------|
| BOOT | `#803018` | HW / BootLoader |
| WALL | `#9A6010` | OS / UEFI |
| MIND | `#3D35A0` | Kernel + InitRamfs |
| ROOT | `#0A5840` | Rootfs / INIT — API Mode |
| MESH | `#104A88` | KIOSK Mode [UI] |
| AUTH | `#C04E24` | PROMPT Mode \<LOG\> |
---
## CSPN Control Points
- [ ] Kernel and module signatures verified by Secure Boot
- [ ] InitRD without plaintext secrets (`lsinitrd | grep -i key`)
- [ ] TPM2 sealing to PCR 0+7+14 validated after kernel updates
- [ ] PROMPT mode only accessible via physical console or certificate SSH
- [ ] Audit logs exported and signed before each PROMPT session
- [ ] API mode won't start if ZKP L1 proof fails
- [ ] Network isolation between modes verified by `nft list ruleset`
---
*See also: [[Architecture-Security]], [[Architecture-Modules]]*

184
docs/wiki/Design-System.md Normal file
View File

@ -0,0 +1,184 @@
# Design System
SecuBox uses a **six-module color system** with complementary pairs for visual consistency across all interfaces.
---
## Module Colors
| Module | Code | Color | Hex | Description |
|--------|------|-------|-----|-------------|
| **AUTH** | 01 | Orange (Coral Auth) | `#C04E24` | Authentication, zero-trust |
| **WALL** | 02 | Yellow (Amber Shield) | `#9A6010` | Firewall, nftables |
| **BOOT** | 03 | Red (Coral Launch) | `#803018` | Deployment, provisioning |
| **MIND** | 04 | Violet (Violet Mind) | `#3D35A0` | AI, behavioral analysis, nDPId |
| **ROOT** | 05 | Green (Teal Root) | `#0A5840` | Terminal CLI, Debian system |
| **MESH** | 06 | Blue (Blue Mesh) | `#104A88` | Network, WireGuard, Tailscale |
### Complementary Pairs
- **Red ↔ Green** (BOOT ↔ ROOT) — System deployment and operation
- **Yellow ↔ Violet** (WALL ↔ MIND) — Security and intelligence
- **Blue ↔ Orange** (MESH ↔ AUTH) — Network and access control
---
## Color Palette Details
### AUTH (Orange)
```css
--auth-main: #C04E24;
--auth-light: #E8845A;
--auth-xlt: #FAECE7;
--auth-dark: #7A2A10;
```
### WALL (Yellow/Amber)
```css
--wall-main: #9A6010;
--wall-light: #CC8820;
--wall-xlt: #FDF3E0;
--wall-dark: #5A3808;
```
### BOOT (Red)
```css
--boot-main: #803018;
--boot-light: #C06040;
--boot-xlt: #FAECE7;
--boot-dark: #5A1E0A;
```
### MIND (Violet)
```css
--mind-main: #3D35A0;
--mind-light: #7068D0;
--mind-xlt: #EEEDFE;
--mind-dark: #241D6A;
```
### ROOT (Green/Teal)
```css
--root-main: #0A5840;
--root-light: #148C66;
--root-xlt: #E1F5EE;
--root-dark: #063828;
```
### MESH (Blue)
```css
--mesh-main: #104A88;
--mesh-light: #2C70C0;
--mesh-xlt: #E6F1FB;
--mesh-dark: #08305A;
```
---
## Light Theme Base Colors
```css
--bg: #FFFFFF;
--surface: #FAFAF8;
--surface2: #F4F3EF;
--border: #E2E0D8;
--border2: #C8C6BE;
--text: #1A1A18;
--muted: #6B6963;
```
---
## Dark Theme (Eye Remote / Dashboard)
```css
--cosmos-black: #0a0a0f;
--gold-hermetic: #c9a84c;
--cinnabar: #e63946;
--matrix-green: #00ff41;
--void-purple: #6e40c9;
--cyber-cyan: #00d4ff;
--text-primary: #e8e6d9;
--text-muted: #6b6b7a;
```
---
## Typography
### Font Stack
- **Display/Heading**: Space Grotesk (300-700)
- **Body**: Space Grotesk 400
- **Monospace/Code**: JetBrains Mono (400, 700)
### Usage
```css
/* Display - titles */
font-size: 56px;
font-weight: 700;
letter-spacing: -2px;
color: var(--root-main);
/* Heading */
font-size: 24px;
font-weight: 600;
letter-spacing: -0.4px;
/* Body */
font-size: 14-16px;
font-weight: 400;
line-height: 1.6-1.7;
/* Code/Terminal */
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
```
---
## Brand Identities
| Brand | Color | Usage |
|-------|-------|-------|
| **SecuBox·** | Green (Root) | Main product brand |
| **Gondwana** | Violet (Mind) | Public/external brand |
| **CyberMind** | Orange (Auth) | Internal/confidential brand |
---
## Module Icons/Symbols
| Module | Symbol | Description |
|--------|--------|-------------|
| AUTH | Hexagonal target | Controlled access, verified identity |
| WALL | Flaming brick wall | nftables, inbound/outbound rules |
| BOOT | Rocket | Provisioning, fast boot, deployment |
| MIND | Robot | Automation, behavioral analysis |
| ROOT | $>_ prompt | Console access, low-level system |
| MESH | Network gear | WireGuard, Tailscale, mesh topology |
---
## Spacing System
| Size | Pixels | Usage |
|------|--------|-------|
| XS | 4px | Icon gaps |
| S | 8px | Chips |
| M | 16px | Padding |
| L | 24px | Sections |
| XL | 40px | Margins |
| 2XL | 56px | Cover |
---
## Grid System
- 12-column grid
- Gap: 8px
- Border radius: 14px (cards), 6px (swatches), 3px (small elements)
---
*© 2026 CyberMind · Notre-Dame-du-Cruet, Savoie*

View File

@ -0,0 +1,196 @@
# Developer Guide
Getting started with SecuBox-DEB development.
---
## Tech Stack
### Base System
- **OS**: Debian 12 (Bookworm) ARM64
- **Kernel**: 6.x with netfilter, tc, eBPF modules
- **Transport**: Tailscale (WireGuard-based mesh)
- **Containers**: Docker / Podman
### Security Stack
- **Firewall**: nftables (not iptables)
- **IDS/IPS**: Suricata + CrowdSec
- **WAF**: HAProxy + mitmproxy
- **DNS**: Unbound (Vortex DNS) + blocklists
- **DPI**: nDPId + netifyd (dual-stream via tc mirred)
- **Auth**: SecuBox-ZKP (Hamiltonian NP / GK-HAM-2025)
- **P2P Mesh**: MirrorNet (did:plc + WireGuard + Chain of Hamiltonians)
### Application Stack
- **Backend**: Python 3.11+ (FastAPI / Flask), Bash, C
- **Frontend**: HTML/CSS/JS vanilla or React
- **Config**: YAML + TOML, double-buffer / 4R versioning
- **Pipeline**: 5-stage production pipeline (collect → process → analyze → report → alert)
---
## Code Conventions
### Python
```python
"""
SecuBox-Deb :: <ModuleName>
CyberMind — https://cybermind.fr
Author: Gérald Kerma <gandalf@gk2.net>
License: Proprietary / ANSSI CSPN candidate
"""
from fastapi import APIRouter, Depends
from pydantic import BaseModel
router = APIRouter(prefix="/api/v1/module", tags=["module"])
class MetricsResponse(BaseModel):
cpu_percent: float
mem_percent: float
```
### Bash
```bash
#!/usr/bin/env bash
# SecuBox-Deb :: <script_name>
# CyberMind — Gérald Kerma
set -euo pipefail
readonly MODULE="<name>"
readonly VERSION="<semver>"
```
### nftables
```nft
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
log prefix "[SECUBOX-MODULE] " level info
}
}
```
---
## Double-Buffer / 4R Pattern
All configuration uses the PARAMETERS module with 4R versioning:
```
/etc/secubox/<module>/
├── active/ → live config (read-only in prod)
├── shadow/ → editable, validation before swap
├── rollback/ → 4 timestamped snapshots (R1..R4)
└── pending/ → awaiting ZKP validation
```
### Operations
```bash
# Swap double-buffer (atomic)
secubox-params swap --module <name> --validate-zkp
# Rollback to R1
secubox-params rollback --module <name> --target R1
# Check config status
secubox-params status --module <name>
```
---
## FastAPI Module Structure
```
packages/secubox-<module>/
├── api/
│ ├── __init__.py
│ ├── main.py ← FastAPI app with router
│ └── routers/
│ └── metrics.py ← Endpoint implementations
├── core/
│ ├── config.py ← TOML configuration
│ └── service.py ← Business logic
├── models/
│ └── schemas.py ← Pydantic models
├── www/
│ ├── index.html ← Web UI (from OpenWrt port)
│ └── static/
├── debian/
│ ├── control
│ ├── rules
│ ├── postinst
│ └── prerm
└── README.md
```
---
## Common Commands
```bash
# Build .deb package (cross-compile for ARM64)
cd packages/secubox-<module>
dpkg-buildpackage -a arm64 --host-arch arm64 -us -uc -b
# Deploy to device via SSH
bash scripts/deploy.sh secubox-<module> root@192.168.1.1
# Run API in development mode
uvicorn api.main:app --reload --uds /tmp/<module>.sock
# Run tests
pytest tests/ -v
# Check system status
systemctl status secubox-* --no-pager
# View live logs
journalctl -u secubox-* -f --output json | jq '.MESSAGE'
```
---
## ANSSI CSPN Compliance
1. **Privilege separation** by layer (L1/L2/L3)
2. **Encryption**: TLS 1.3 minimum
3. **Authentication**: ZKP Hamiltonian (GK-HAM-2025) — no plaintext secrets
4. **Logs**: Immutable, RFC 3339 timestamped, secure rotation
5. **Rollback**: Every config change → 4R snapshot mandatory
6. **Attack surface**: Minimal — disable unused services
7. **Tests**: Coverage ≥ 80%, regression tests on every PR
---
## What NOT to Do
- Use `iptables` (replaced by nftables)
- Use `uci` / LuCI (that's SecuBox-OpenWrt — abandoned)
- Write secrets in plaintext in code
- Use ACCEPT default firewall policies
- Suggest Python libraries with known vulnerabilities
- Ignore double-buffer schema for configs
- Mention "CrowdSec Ambassador" or "CyberMind Produits SASU"
---
## References
- [ANSSI CSPN](https://www.ssi.gouv.fr/entreprise/certification_cspn/)
- [nDPId](https://github.com/utoni/nDPId)
- [CrowdSec Docs](https://docs.crowdsec.net)
- [Suricata Docs](https://docs.suricata.io)
- [nftables Wiki](https://wiki.nftables.org)
---
*See also: [[Developer-Patterns]], [[Architecture-Boot]], [[Design-System]]*

View File

@ -1,54 +1,176 @@
# SecuBox-DEB Wiki
# SecuBox
Welcome to the SecuBox-DEB documentation wiki.
**CyberMind · Gondwana · Notre-Dame-du-Cruet · Savoie** | [FR](Home-FR) | [DE](Home-DE) | [中文](Home-ZH)
## Eye Remote
Complete security appliance solution ported from OpenWrt to Debian bookworm. Designed for GlobalScale ARM64 boards (MOCHAbin, ESPRESSObin) and x86_64 systems. **125 packages** with **2000+ API endpoints**.
The Eye Remote is a compact USB gadget display for monitoring SecuBox metrics.
---
## 🔴 BOOT — Quick Start
### VirtualBox (2 Minutes) ⭐
Test SecuBox instantly in VirtualBox — no USB drive needed:
```bash
# Download latest image
wget https://github.com/CyberMind-FR/secubox-deb/releases/latest/download/secubox-live-amd64-bookworm.img.gz
gunzip secubox-live-amd64-bookworm.img.gz
# Convert to VDI format
VBoxManage convertfromraw secubox-live-amd64-bookworm.img secubox-live.vdi --format VDI
# Create and start VM
curl -sLO https://raw.githubusercontent.com/CyberMind-FR/secubox-deb/master/image/create-vbox-vm.sh
chmod +x create-vbox-vm.sh
./create-vbox-vm.sh secubox-live.vdi
```
**One-liner with auto-download:**
```bash
curl -sL https://raw.githubusercontent.com/CyberMind-FR/secubox-deb/master/image/create-vbox-vm.sh | bash -s -- --download
```
See [[Live-USB-VirtualBox]] for full documentation.
### Live USB (Hardware) ⚡
Boot directly from USB on physical hardware:
```bash
wget https://github.com/CyberMind-FR/secubox-deb/releases/latest/download/secubox-live-amd64-bookworm.img.gz
zcat secubox-live-amd64-bookworm.img.gz | sudo dd of=/dev/sdX bs=4M status=progress
```
See [[Live-USB]] for complete guide.
### APT Installation (Existing Debian)
```bash
curl -fsSL https://apt.secubox.in/install.sh | sudo bash
sudo apt install secubox-full # or secubox-lite
```
See [[Installation]] for detailed instructions.
---
## 🟠 AUTH — Access Credentials
| Service | Username | Password |
|---------|----------|----------|
| **Web UI** | admin | secubox |
| **SSH** | root | secubox |
| **Access** | https://localhost:9443 | SSH port 2222 |
---
## 🟢 ROOT — System Requirements
| Board | SoC | Profile | Use Case |
|-------|-----|---------|----------|
| MOCHAbin | Armada 7040 | Full | Enterprise Gateway |
| ESPRESSObin v7 | Armada 3720 | Lite | Home/SMB Router |
| ESPRESSObin Ultra | Armada 3720 | Lite+ | Home with Wi-Fi |
| Raspberry Pi 400 | BCM2711 | Full | Maker Projects |
| VM x86_64 | Any | Full | Testing/Development |
| QEMU ARM64 | Emulated | Full | ARM testing on x86 |
---
## 🟣 MIND — Feature Overview
| Stack | Description | Modules |
|-------|-------------|---------|
| 🟠 **AUTH** | Authentication, ZeroTrust, MFA | auth, portal, users, nac |
| 🟡 **WALL** | Firewall, CrowdSec, WAF, IDS/IPS | crowdsec, waf, threats, ipblock |
| 🔴 **BOOT** | Deployment, provisioning | cloner, vault, vm, rezapp |
| 🟣 **MIND** | AI, behavioral analysis, DPI | dpi, netifyd, ai-insights, soc |
| 🟢 **ROOT** | System, CLI, hardening | core, hub, system, console |
| 🔵 **MESH** | Network, WireGuard, QoS | wireguard, haproxy, netmodes, turn |
**Total: 125 packages**
See [[Modules]] for complete module documentation.
---
## 🔵 MESH — Documentation Index
### Getting Started
- [[Live-USB-VirtualBox|VirtualBox Quick Start]] ⭐
- [[Live-USB]] — Bootable USB guide
- [[ARM-Installation]] — ARM boards & U-Boot ⚡
- [[QEMU-ARM64]] — ARM emulation on x86 🖥️
### Configuration
- [[Configuration]] — System configuration
- [[Troubleshooting]] — Common issues
### Architecture
- [[Architecture-Boot]] — 5-layer boot architecture
- [[Architecture-Modules]] — Module interaction design
- [[Architecture-Security]] — CSPN compliance & ZKP
### Development
- [[Developer-Guide]] — Getting started with development
- [[Developer-Patterns]] — FastAPI migration patterns
- [[Design-System]] — UI/UX guidelines and module colors
### Reference
- [[Modules]] — All 125 modules
- [[API-Reference]] — REST API (2000+ endpoints)
- [[Hardware-ESPRESSObin]] — ESPRESSObin setup
- [[Hardware-MOCHAbin]] — MOCHAbin setup
---
## 👁️ Eye Remote
The Eye Remote is a compact USB gadget display for monitoring SecuBox metrics in real-time.
| Page | Description |
|------|-------------|
| [Eye Remote Implementation](Eye-Remote-Implementation.md) | Architecture, API, and implementation guide |
| [Eye Remote Hardware](Eye-Remote-Hardware.md) | Hardware setup, GPIO pinout, display configuration |
| [Eye Remote Gateway](Eye-Remote-Gateway.md) | Gateway emulator for development and testing |
| [[Eye-Remote-Implementation]] | Architecture, API, and implementation guide |
| [[Eye-Remote-Hardware]] | Hardware setup, GPIO pinout, display configuration |
| [[Eye-Remote-Gateway]] | Gateway emulator for development and testing |
### Quick Start
1. **Hardware**: Raspberry Pi Zero W + HyperPixel 2.1 Round (480×480)
2. **Connection**: USB OTG (10.55.0.0/30) or WiFi
3. **Dashboard**: Python framebuffer rendering (no browser needed)
### Build Image
**Hardware**: Raspberry Pi Zero W + HyperPixel 2.1 Round (480×480)
**Connection**: USB OTG (10.55.0.0/30) or WiFi
**Dashboard**: Python framebuffer rendering (no browser needed)
```bash
# Lightweight framebuffer mode (recommended)
# Build Eye Remote image (lightweight framebuffer mode)
cd remote-ui/round
sudo ./build-eye-remote-image.sh -i raspios-lite.img.xz --framebuffer
# With WiFi pre-configured
sudo ./build-eye-remote-image.sh -i raspios-lite.img.xz -s "SSID" -p "password"
```
### Test with Emulator
```bash
# Start gateway emulator
# Test with gateway emulator
cd tools/secubox-eye-gateway
pip install -e .
secubox-eye-gateway --profile stressed --port 8765
# Test on desktop (requires pygame)
cd remote-ui/round
python3 test-dashboard-amd64.py --api http://localhost:8765
python3 remote-ui/round/test-dashboard-amd64.py --api http://localhost:8765
```
---
## Other Documentation
## 🟡 WALL — Security Features
- [CLAUDE.md](../../CLAUDE.md) — Project conventions and migration guide
- [Porting Guide](../PORTING-GUIDE.md) — OpenWrt to Debian migration
- **CrowdSec** — Community-driven IDS/IPS
- **WAF** — 300+ ModSecurity rules
- **nftables** — Default DROP policy
- **AI-Insights** — ML threat detection
- **IPBlock** — Automated blocklist management
- **MAC-Guard** — MAC address control
---
*CyberMind · SecuBox-DEB · April 2026*
## Links
- [GitHub Repository](https://github.com/CyberMind-FR/secubox-deb)
- [Releases](https://github.com/CyberMind-FR/secubox-deb/releases)
- [Issues](https://github.com/CyberMind-FR/secubox-deb/issues)
- [CyberMind](https://cybermind.fr)
---
*© 2026 CyberMind · Notre-Dame-du-Cruet, Savoie*

1723
docs/wiki/Modules.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +1,44 @@
## Navigation
**[SecuBox](Home)** | [FR](Home-FR) | [DE](Home-DE) | [中文](Home-ZH) | **v2.0.0**
**[Home](Home)**
### 🔴 BOOT — Getting Started
* [[Live-USB-VirtualBox|VirtualBox]] ⭐
* [[Live-USB-QEMU|QEMU]] 🖥️
* [[Live-USB]]
* [[Installation]]
* [[ARM-Installation|ARM / U-Boot]] ⚡
* [[Hardware-ESPRESSObin|ESPRESSObin]]
* [[Hardware-MOCHAbin|MOCHAbin]]
* [[QEMU-ARM64]] 🖥️
### Eye Remote
- [Implementation](Eye-Remote-Implementation)
- [Hardware](Eye-Remote-Hardware)
- [Gateway & Emulator](Eye-Remote-Gateway)
### 🟢 ROOT — Configuration
* [[Configuration]]
* [[Configuration-Advanced]]
* [[Troubleshooting]]
### Project
- [Migration Guide](../PORTING-GUIDE)
- [CLAUDE.md](../../CLAUDE)
### 🟣 MIND — Architecture
* [[Architecture-Boot|Boot Architecture]]
* [[Architecture-Modules|Module Design]]
* [[Architecture-Security|Security Model]]
* [[Design-System|UI/UX Design]]
### 🟡 WALL — Modules
* [[Modules|All Modules (125)]]
* [[Modules-Security]]
* [[Modules-Networking]]
* [[Modules-Monitoring]]
### 🔵 MESH — Reference
* [[API-Reference]]
* [[Developer-Guide]]
* [[Developer-Patterns]]
* [[UI-Comparison]]
### 👁️ Eye Remote
* [[Eye-Remote-Implementation]]
* [[Eye-Remote-Hardware]]
* [[Eye-Remote-Gateway]]
### Links
* [Releases](https://github.com/CyberMind-FR/secubox-deb/releases)
* [Issues](https://github.com/CyberMind-FR/secubox-deb/issues)
* [CyberMind](https://cybermind.fr)

View File

@ -71,7 +71,7 @@ class AgentMetricsSource:
self.sim = SimulatedMetrics()
self._last_data = None
def _read_from_socket(self) -> dict:
def _read_from_socket(self) -> dict | None:
"""Read metrics from agent Unix socket."""
try:
s = sock_module.socket(sock_module.AF_UNIX, sock_module.SOCK_STREAM)