Ultimate Linux Tool Project Manager - Plugin API v1.0
Sistem Ultimate Linux Tool mendukung ekstensibilitas penuh melalui Arsitektur Plugin Dinamis. Anda dapat menambahkan modul, fitur, atau pemantauan (monitoring) eksternal tanpa memodifikasi kode inti sistem.
Seluruh plugin pihak ketiga wajib ditempatkan di dalam folder utama plugins/. Setiap plugin harus menggunakan ruang terisolasi (isolated folder) untuk mencegah konflik.
devmenu/
├── modules/ ← Modul inti (pure directory-based, jangan disentuh)
│ ├── core/ ← init.sh + sub-modul inti
│ ├── service/ ← init.sh + engine, manager, dashboard
│ ├── project/ ← init.sh + seluruh engine proyek
│ └── ... ← (ports, database, git, system, search, monitor, menu)
│
└── plugins/ ← Tempat plugin pihak ketiga
└── nama-plugin-anda/
├── init.sh (Wajib: Titik awal masuk & registrasi plugin)
├── module.sh (Opsional: File logika terpisah)
└── config.conf (Opsional: Konfigurasi plugin)
Catatan Arsitektur: Modul inti di
modules/kini 100% berbasis direktori. Setiap direktori modul memilikiinit.sh-nya sendiri yang dimuat olehdevmenu.shsecara deterministik. Plugin diplugins/menggunakan konvensi yang sama —init.shsebagai entry-point.
Sistem akan otomatis memindai seluruh file init.sh. Untuk mendaftarkan Plugin ke dalam Menu Utama Dashboard, Anda WAJIB memanggil API Registration Engine.
register_plugin "[id-unik]" "[Nama Visual]" "[Nama Fungsi Eksekusi]" "[Deskripsi Singkat]"#!/bin/bash
# ============================================
# PLUGIN: SYSTEM RESOURCE PRO
# ============================================
# 1. Definisikan Logika Plugin Anda
plugin_sysres_main() {
print_header "SYSTEM RESOURCE PRO"
print_color "Melakukan pemindaian resource mendalam..." "$YELLOW"
# Skrip bash Anda di sini
df -h / | tail -n 1
pause # Menahan antarmuka (harus dipanggil jika mencetak output text)
}
# 2. Registrasi ke Core Engine
register_plugin \
"sys-res-pro" \
"System Resource Pro" \
"plugin_sysres_main" \
"Pemantau memori tingkat lanjut"Untuk menjaga konsistensi tampilan antar plugin, DILARANG KERAS menggunakan echo standar saat mendesain UI. Gunakan UI Helpers bawaan dari modul dasar (modules/core/ui.sh):
print_header "JUDUL"Membuat pembungkus (header) tabel/halaman yang estetis.print_color "Teks" "$WARNA"Mencetak teks ke layar. Tersedia warna:$RED,$GREEN,$YELLOW,$BLUE,$PURPLE,$CYAN.print_separatoratauprint_footerMembuat garis pemisah atau garis tegas penutup antarmuka.pauseDigunakan di akhir eksekusi plugin agar layar tidak langsung tertutup sebelum user selesai membaca hasilnya.fzf(Standard Selection) Gunakanfzfuntuk pilihan interaktif. Gunakan parameter--reverse --height=15 --border=roundeduntuk menjaga konsistensi visual Pro Edition.
- Isolasi Konfigurasi: Dilarang menimpa file kredensial induk
.project_manager_creds. Simpan data tersendiri di dalam folder plugin. - Naming Convention: Biasakan menamai fungsi plugin Anda dengan awalan
plugin_[nama]_untuk menghindari "tabrakan" (collision) dengan fungsi asli sistem operasi atau modul inti DevMenu. - Eksekusi Perintah Secara Aman: Hindari menggunakan
evalataubash -cdengan string mentah untuk mencegah celah command injection. Gunakan pembungkus amantry_execute_cmdatausafe_execute_cmd(untuk timeout/retry) yang menerima perintah sebagai argumen terpisah/array. - Penanganan File Sementara Secara Aman: Jika plugin membuat berkas konfigurasi sementara (misal: kredensial atau config API), wajib membungkus proses tersebut dalam subshell dan memasang signal traps (
trap 'rm -f "$temp_file"' EXIT ERR INT TERM) untuk menjamin berkas rahasia selalu terhapus secara aman jika proses dihentikan paksa (SIGINT/SIGTERM/Ctrl-C). - Silent Fails: Gunakan arahan standard error nulling (
2>/dev/null) untuk mencegah pesanerrordari sistem meledak ke dalam dashboard UI.
Sebagai bahan pembelajaran, Anda dapat membedah langsung kode sumber (source code) dari dua plugin tingkat lanjut yang sudah terpasang secara bawaan di platform ini:
- Top Process Monitor (
plugins/sys-top/init.sh): Contoh sempurna untuk plugin pemantauan data interaktif, yang merender keluaran baris komandopssistem ke dalam format tabel UI DevMenu. - Local Domain & SSL Router (
plugins/localdns/init.sh): Referensi tingkat pro untuk plugin berskala Administrator. Menunjukkan cara meminta password sudo dengan aman, memodifikasi/etc/hostsdan virtual host Apache, serta menghasilkan SSL Certificates dengan skrip bash atomik.
Untuk standar aplikasi modern, hindari penggunaan teks hardcoded. Gunakan sistem delegasi teks:
- Gunakan Variabel Global: Gunakan variabel yang sudah disediakan sistem seperti
TXT_SYS_SUCCESS,TXT_SYS_FAILED, atauTXT_SYS_CANCEL. - Kamus Mandiri: Simpan teks spesifik plugin di folder
i18n/dalam folder plugin Anda (misal:id.sh,en.sh). - Loading: Muat kamus tersebut di
init.shberdasarkan variabel lingkunganPREFERRED_LANG.
Contoh implementasi di init.sh plugin:
_LANG_FILE="$(dirname "${BASH_SOURCE[0]}")/i18n/${PREFERRED_LANG:-id}.sh"
[ -f "$_LANG_FILE" ] && source "$_LANG_FILE"