Opencode-Cli / ARCHITECTURE.md
Hermes Agent
feat: completely remove Open WebUI and streamline multi-service container hub
58d7eda
|
Raw History Blame Contribute Delete
9.61 kB
# OpenCode Space β€” Production System Architecture & Design Specification
This document provides a comprehensive technical overview of the **`Jishnupg/Opencode-Cli`** multi-service gateway architecture, service discovery, database persistence model, security boundaries, and protocol proxies.
---
## 1. System Ingress Topology & Port Matrix
All client traffic terminates at **Port 4096** (the exposed public port on Hugging Face Spaces). The system operates a dual-layer reverse proxy architecture to guarantee sub-second platform readiness and unified routing.
```
[🌐 Public Internet Client]
β”‚
[Nginx Edge Proxy (Port 4096)]
β”‚
[FastAPI Master Gateway (:8000)]
β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”‚ β”‚ β”‚
[Portal Hub / Dashboard] [OmniRoute API & Dash] [Hermes Autonomous Agent] [Jellyfin & TG]
(FastAPI Internal) (Port 20128) (Port 8642) (Port 8096 / 8080)
Path: / Path: /v1, /dashboard Path: /hermes/v1/* Path: /jellyfin, /tg-stream
```
### Complete Ingress Routing Matrix
| Ingress Path / Pattern | Upstream Host:Port | Microservice | Protocol / Handler | Header Sanitization |
| :--- | :--- | :--- | :--- | :--- |
| `GET /health/live` | Internal Gateway | FastAPI Gateway | Native ASGI JSON | Instant 200 OK (<1ms) |
| `/`, `/index.html` | Internal Gateway | Multi-Service Portal | HTML File Response | Portal Landing UI |
| `/omniroute`, `/omniroute/`| `127.0.0.1:8000` | FastAPI Gateway | HTTP 307 Redirect | Redirects to `/dashboard` |
| `/dashboard/*` | `127.0.0.1:20128` | OmniRoute Dashboard | HTTP / Next.js SSR | Strip X-Frame-Options |
| `/v1/*`, `/api/v1/*` | `127.0.0.1:20128` | OmniRoute AI API | OpenAI SSE Stream | CORS `*`, `Host` forward |
| `/v1beta/*`, `/api/v1beta/*`| `127.0.0.1:20128` | Gemini Web Bridge | Gemini JSON / Stream | CORS `*`, `Host` forward |
| `/hermes/v1/*` | `127.0.0.1:8642` | Hermes Autonomous Agent | OpenAI / Tool SSE | Bearer Auth Forward |
| `/api/providers/*` | `127.0.0.1:20128` | OmniRoute Management | REST JSON API | Encrypted DB read |
| `/api/custom-models/*` | `127.0.0.1:20128` | OmniRoute Management | REST JSON API | Referer-based proxy |
| `/api/connections/*` | `127.0.0.1:20128` | OmniRoute Management | REST JSON API | Referer-based proxy |
| `/api/oauth/*` | `127.0.0.1:20128` | OmniRoute OAuth | Remote OAuth Flow | `ALLOW_REMOTE_OAUTH` |
| `/live-ws/*` | `127.0.0.1:20128` | Live Telemetry WS | WebSocket Stream | `Host`, `X-Forwarded-*` |
| `/jellyfin/*` | `127.0.0.1:8096` | Jellyfin Media Server | Range Video / HTTP | `X-Forwarded-Prefix` |
| `/tg-stream/*`, `/tg_stream/*`| `127.0.0.1:8080` | Pyrogram 5G Streamer | 5G Chunk Streamer | Direct Pyrogram Stream |
---
## 2. Gateway Core Engine Architecture (`gateway/`)
The master gateway (`gateway/main.py`, `gateway/utils.py`, `gateway/omniroute.py`, `gateway/hermes.py`) provides intelligent request classification and routing.
```
[Incoming HTTP Request]
β”‚
[Security Path Traversal Check]
β”‚
[Lightweight Probe /health/live?] ──(Yes)──> 200 OK
β”‚ (No)
[Referer Header Inspection]
/ \
(Referer has /dashboard) (No OmniRoute Referer)
β”‚ β”‚
[Route to OmniRoute :20128] [Match Path Prefix Matrix]
/ β”‚ \
(OmniRoute) (Hermes) (Jellyfin / TG)
β”‚ β”‚ β”‚
[:20128] [:8642] [:8096 / :8080]
β”‚
[Root Fallback /]
β”‚
[Multi-Service Portal]
```
### Key Gateway Design Patterns:
1. **Async Connection Pooling (`httpx.AsyncClient`)**: Managed via FastAPI `@asynccontextmanager` lifespan. Connection keep-alive prevents TCP handshake overhead across internal microservice proxies.
2. **Referer-Aware Routing**: Requests originating from OmniRoute UI pages (`Referer` containing `/dashboard` or `/omniroute`) are routed directly to OmniRoute port `20128`. This prevents auxiliary requests (`/api/custom-models`, `/api/connections`, `/providers/*.svg`) from breaking.
3. **CORS & iFrame Security Normalization**: Automatically strips restrictive `X-Frame-Options` headers and injects `Content-Security-Policy: frame-ancestors 'self' https://huggingface.co https://*.hf.space;` to enable embedding on Hugging Face Spaces.
---
## 3. Storage Persistence & SQLite Synchronization Model
OmniRoute uses `better-sqlite3`. To bypass FUSE network drive lock limitations while maintaining persistence, a dual-layer storage architecture is implemented:
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” 120s Cron Daemon / β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ High-Speed Ext4 Container Disk β”‚ Shutdown Backup Loop β”‚ Persistent Volume Mount β”‚
β”‚ (/root/.omniroute/storage.sqlite) β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€>β”‚ (/data/omniroute/storage.sqlite) β”‚
β”‚ - Active runtime POSIX file locks (fcntl) β”‚ β”‚ - Persistent across Space rebuilds & sleep β”‚
β”‚ - Active WAL (-wal) & SHM (-shm) sidecars β”‚<───────────────────────────── - Rotating backups (/data/omniroute/backups) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ Boot Restoration Sync β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
### Database Lifecycle & Safety Guarantees:
1. **Boot Initialization**:
- `entrypoint.sh` checks for persistent snapshot at `/data/omniroute/storage.sqlite`.
- Validates integrity using `sqlite3 "PRAGMA quick_check;"`.
- Restores clean snapshot into `/root/.omniroute/storage.sqlite`.
2. **Runtime Backup Loop**:
- Every 120 seconds, a background daemon executes `sync_omniroute_db()`.
- Issues `PRAGMA wal_checkpoint(PASSIVE);` and `sqlite3 .backup`.
- Syncs `-wal` and `-shm` sidecars to preserve uncommitted transactions.
- Rotates up to 5 rolling backups in `/data/omniroute/backups/storage-YYYYMMDD-HHMM.sqlite`.
3. **Shutdown Hook**:
- Shell traps (`trap sync_omniroute_db EXIT INT TERM`) flush runtime state before container termination.
---
## 4. Encryption & Security Model
- **AES-256-GCM Encryption**: All provider credentials (API keys, OAuth access tokens, refresh tokens) are encrypted at rest with `STORAGE_ENCRYPTION_KEY`.
- **Secrets Fallback Engine**: If secrets are not passed via Hugging Face Space Secrets during local development, safe default fallbacks prevent container crash:
- `STORAGE_ENCRYPTION_KEY`
- `JWT_SECRET`
- `API_KEY_SECRET`
- `INITIAL_PASSWORD`
- **Path Traversal Gate**: The gateway inspects all requested paths and rejects directory traversal patterns (`..`, `.env`, `.sqlite`, `.git`) with HTTP 403.
---
## 5. Process Lifecycle & Self-Healing Supervisor
The container supervisor (`entrypoint.sh`) maintains 24/7 uptime for all background daemons:
```
[PID 1 Process Supervisor Loop]
β”‚ (every 5s)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β–Ό β–Ό β–Ό
[Kill -0 $FASTAPI_PID] [Kill -0 $NGINX_PID] [Kill -0 $OMNIROUTE_PID]
β”‚ β”‚ β”‚
(Dead? Restart) (Dead? Restart) (Dead? Restart)
python3 -m uvicorn proxy:app nginx -g 'daemon off;' cd /omniroute && node server.js
```
- **Fast Gateway Readiness**: FastAPI (`:8000`) and Nginx (`:4096`) start within **300ms**, allowing Hugging Face to report `RUNNING` status instantly.
- **Asynchronous Heavy Boot**: OmniRoute Next.js server, Hermes Agent, Jellyfin, and TG Streamer initialize in parallel background tasks without blocking public ingress.