# Hermes Agent Portable Backup Automation — Complete Operational Flow Dokumentasi arsitektur, siklus penjadwalan cron setiap 5 jam, tahapan pemadatan SQLite, kompresi 7-Zip LZMA2, integrasi folder data persisten (`data/` & `birthdays/`), WhatsApp Bridge mandiri (`bridge_script`), pengiriman Telegram Local Bot API (`:8082`), dan kebijakan retensi lokal tanpa sampah (*zero-garbage*). --- ## 1. Arsitektur & Tujuan Desain Pipeline backup otomatis ini dibangun untuk memenuhi 5 invariant utama: 1. **Zero Local Storage Bloat:** Menghindari penumpukan arsip lama di disk server VPS. Setiap kali backup baru sukses terkirim ke Telegram, seluruh arsip lama dan berkas `.md` usang langsung dihapus otomatis dari `~/backup_hermes/`. 2. **Online SQLite Safety (Non-Blocking):** Basis data `state.db` tidak pernah disalin mentah (*raw copy*) saat sedang aktif. Snapshot dibuat menggunakan perintah SQL `VACUUM INTO` untuk menghasilkan salinan database yang padat (*defragmented*) tanpa lock pada proses gateway. 3. **Penyertaan Data Persisten Penuh (`data/` & `birthdays/`):** Menyertakan direktori runtime non-skrip seperti `~/.hermes/data/` (lokasi `esa_schedule.json`) dan data eksternal `~/birthdays/` agar terbebas dari `FileNotFoundError` saat restore di mesin baru. 4. **Penyertaan WhatsApp Bridge Mandiri (Zero Git Conflict):** Menyertakan runtime Baileys bridge mandiri di `~/.hermes/whatsapp/bridge/` beserta sesi aktif `~/.hermes/whatsapp/session/` dan konfigurasi `platforms.whatsapp.extra.bridge_script`. 5. **Bypass Batasan 50 MB Telegram:** Menggunakan Local Telegram Bot API Server (`http://localhost:8082`) sehingga pengiriman arsip besar hingga 2 GB berjalan instan via local streaming loopback. --- ## 2. Diagram Alur Pipeline Backup (5-Hour Cycle) ```text Cron Trigger: Setiap 5 Jam (0 */5 * * *) │ ┌────────────────────┴────────────────────┐ │ │ OS Crontab (crontab -l) Hermes Cron (jobs.json) ~/essa/bin/python runner Job ID: 67724964b091 │ │ └────────────────────┬────────────────────┘ │ [ 1. Inisialisasi & Staging ] Path: ~/.hermes/cache/scratch/staging_/ • Copy core: README, config, auth, AGENTS, SOUL, MAP • Copy dirs: cron, memories, personalities, scripts, skills, vault, exports, whatsapp, config, data • Copy extra dirs: ~/birthdays/ • Filter sampah: node_modules, bridge.pid, *.pyc, *.wal, *.log │ [ 2. SQLite Online Compaction ] VACUUM INTO staging/state.db (Non-blocking) │ [ 3. Kompresi 7-Zip LZMA2 ] 7z a -t7z -mx=9 -mmt=on ~/backup_hermes/hermes-agent-portable-backup-.7z │ [ 4. Verifikasi & Checksum ] 7z t (Integritas) + SHA-256 Checksum Calculation │ [ 5. Generate Audit Report ] Tulis metadata lengkap ke ~/backup_hermes/EXPORT_RESULTS.md │ [ 6. Delivery via Local Bot API (:8082) ] EssaTSM_BOT (8622330582:***) Target Channel: backup-oracle-batam (-1003919247026) • Message 1: EXPORT_RESULTS.md (Audit Report) • Message 2: hermes-agent-portable-backup-.7z (Arsip) │ [ 7. Pembersihan & Retensi Zero-Garbage ] • Hapus direktori temporary staging_/ • Hapus semua file .7z dan .md lama di ~/backup_hermes/ • HANYA menyisakan 1 arsip terbaru + 1 EXPORT_RESULTS.md │ [ 8. OCI Budget & Over-Usage Safety Check ] • Menjalankan oci_budget_alert.py • Evaluasi watermark spend OCI vs threshold • Silent bila spend $0.00, alert jika ada overage • Catatan Arsitektur: Backup Essa Bot DINONAKTIFKAN (OFF) Hanya mencadangkan komponen Hermes Agent. ``` --- ## 3. Komponen Skrip Runner (`~/.hermes/scripts/hermes_backup_cron.py`) Skrip ini dieksekusi secara periodik menggunakan interpreter Python 3.12 (`~/essa/bin/python`). ### Detail Konfigurasi Utama: - **Bot Token:** `8622330582:AAFHOnma4mI7Ip6wF6YmmsoNB3SrXyfyYic` (`@EssaTSM_BOT`) - **Target Channel:** `-1003919247026` (`backup-oracle-batam`) - **Endpoint Bot API:** `http://localhost:8082` (Local Server) - **Direktori Output:** `~/backup_hermes/` (disymlink juga sebagai `~/back_hermes/`) ### Invariant Staging: File dan folder berikut selalu di-stage dan dipaketkan: ```text ~/.hermes/ ├── README.md # Deployment manual & inventaris lengkap kredensial ├── config.yaml # Konfigurasi aktif agent, model, timezone WIB, dan bridge_script ├── auth.json # Auth token store (Nous, Codex, Zen, dll) ├── AGENTS.md # System prompt operasional & limitation handling ├── SOUL.md # Core persona identity & boundary ├── SYSTEM_MAP.md # Peta topologi sistem server ├── state.db # Database SQLite hasil VACUUM INTO ├── config/ # Kredensial kustom (GitHub PAT lalaipo, OCI key, dll) ├── cron/ # Jadwal aktif cron jobs (jobs.json, terkunci WIB) ├── data/ # Data persisten non-skrip (esa_schedule.json) ├── memories/ # Memori persisten agen ├── personalities/ # Persona hacker-black & hacker-red ├── scripts/ # Utility scripts, CLI hermes_wa_send.py, & runner ├── skills/ # Skills repositori terverifikasi ├── vault/ # Knowledge objects & operating standards ├── exports/ # Chat history JSON export ├── whatsapp/ # Baileys runtime & auth session: │ ├── bridge/ # Runtime bridge.js mandiri (dukungan pin & mention) │ └── session/ # Sesi terautentikasi Baileys (creds.json, keys) └── birthdays/ # (Di-stage dari ~/birthdays/) Data ulang tahun siswa ``` File sampah yang otomatis dieksklusikan dari staging: `node_modules`, `bridge.pid`, `*.pyc`, `__pycache__`, `.git`, `*.lock`, `*.shm`, `*.wal`, `*.log`, `.locks`, `*.tmp`, `.usage.json*`. --- ## 4. Mekanisme Retensi Lokal (*Keep Only Latest*) Untuk mencegah disk VPS penuh, skrip menjalankan pembersihan otomatis di akhir proses: ```python retained = {archive_name, "EXPORT_RESULTS.md"} for item in BACKUP_DIR.iterdir(): if item.is_file() and item.name not in retained and item.suffix in (".7z", ".md", ".tmp"): item.unlink() ``` Semua riwayat arsip masa lalu tersimpan aman secara permanen di channel Telegram `-1003919247026`. Di VPS lokal, kapasitas disk yang terpakai untuk backup dibatasi tetap konstan (~23 MB). --- ## 5. Prosedur Restore / Pemulihan di Mesin Baru Untuk memulihkan sistem Hermes secara utuh di server baru: 1. **Unduh Arsip Terbaru:** Ambil berkas `hermes-agent-portable-backup-*.7z` terbaru dari channel Telegram `-1003919247026`. 2. **Ekstrak ke Home Directory Pengguna:** ```bash mkdir -p ~/.hermes 7z x hermes-agent-portable-backup-*.7z -o"$HOME/.hermes" -y ``` 3. **Pindahkan Folder Eksternal:** ```bash # Pulihkan folder birthdays ke home root jika ada di arsip if [ -d "$HOME/.hermes/birthdays" ]; then mv "$HOME/.hermes/birthdays" "$HOME/birthdays" fi ``` 4. **Restore Konfigurasi Kredensial Sistem:** ```bash # Salin kredensial OCI ke lokasi default sistem mkdir -p ~/.oci cp ~/.hermes/config/oci/* ~/.oci/ chmod 600 ~/.oci/config ~/.oci/oci_api_key.pem # Kredensial GitHub otomatis aktif di ~/.hermes/config/github_credentials.json chmod 600 ~/.hermes/config/github_credentials.json ``` 5. **Inisialisasi Dependensi WhatsApp Bridge:** ```bash cd ~/.hermes/whatsapp/bridge npm install --omit=dev ``` 6. **Jalankan Ulang Service:** ```bash systemctl --user restart hermes-gateway.service ``` --- ## 6. Perintah Pemeliharaan Cepat ```bash # Menjalankan backup manual seketika ~/essa/bin/python ~/.hermes/scripts/hermes_backup_cron.py # Memeriksa log cron backup berkala tail -n 50 ~/.hermes/cache/hermes_backup_cron.log # Melihat status file backup yang tersimpan di lokal ls -lh ~/backup_hermes/ # Memeriksa status cron job Hermes hermes cron list ```