Skip to content

Latest commit

 

History

History
116 lines (85 loc) · 5.87 KB

plugin_development_guide.md

File metadata and controls

116 lines (85 loc) · 5.87 KB

Panduan Pengembangan Plugin

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.


1. Struktur Folder Plugin

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 memiliki init.sh-nya sendiri yang dimuat oleh devmenu.sh secara deterministik. Plugin di plugins/ menggunakan konvensi yang sama — init.sh sebagai entry-point.


2. Pendaftaran Plugin (The Registration)

Sistem akan otomatis memindai seluruh file init.sh. Untuk mendaftarkan Plugin ke dalam Menu Utama Dashboard, Anda WAJIB memanggil API Registration Engine.

Struktur Pemanggilan API:

register_plugin "[id-unik]" "[Nama Visual]" "[Nama Fungsi Eksekusi]" "[Deskripsi Singkat]"

Contoh File init.sh yang Sah:

#!/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"

3. Komponen Antarmuka yang Diizinkan (UI Toolkits)

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_separator atau print_footer Membuat garis pemisah atau garis tegas penutup antarmuka.
  • pause Digunakan di akhir eksekusi plugin agar layar tidak langsung tertutup sebelum user selesai membaca hasilnya.
  • fzf (Standard Selection) Gunakan fzf untuk pilihan interaktif. Gunakan parameter --reverse --height=15 --border=rounded untuk menjaga konsistensi visual Pro Edition.

4. Keamanan dan Etika Plugin

  1. Isolasi Konfigurasi: Dilarang menimpa file kredensial induk .project_manager_creds. Simpan data tersendiri di dalam folder plugin.
  2. Naming Convention: Biasakan menamai fungsi plugin Anda dengan awalan plugin_[nama]_ untuk menghindari "tabrakan" (collision) dengan fungsi asli sistem operasi atau modul inti DevMenu.
  3. Eksekusi Perintah Secara Aman: Hindari menggunakan eval atau bash -c dengan string mentah untuk mencegah celah command injection. Gunakan pembungkus aman try_execute_cmd atau safe_execute_cmd (untuk timeout/retry) yang menerima perintah sebagai argumen terpisah/array.
  4. 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).
  5. Silent Fails: Gunakan arahan standard error nulling (2>/dev/null) untuk mencegah pesan error dari sistem meledak ke dalam dashboard UI.

5. Plugin Resmi sebagai Referensi (Official Plugins)

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 komando ps sistem 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/hosts dan virtual host Apache, serta menghasilkan SSL Certificates dengan skrip bash atomik.

6. Internasionalisasi (i18n) untuk Plugin

Untuk standar aplikasi modern, hindari penggunaan teks hardcoded. Gunakan sistem delegasi teks:

  1. Gunakan Variabel Global: Gunakan variabel yang sudah disediakan sistem seperti TXT_SYS_SUCCESS, TXT_SYS_FAILED, atau TXT_SYS_CANCEL.
  2. Kamus Mandiri: Simpan teks spesifik plugin di folder i18n/ dalam folder plugin Anda (misal: id.sh, en.sh).
  3. Loading: Muat kamus tersebut di init.sh berdasarkan variabel lingkungan PREFERRED_LANG.

Contoh implementasi di init.sh plugin:

_LANG_FILE="$(dirname "${BASH_SOURCE[0]}")/i18n/${PREFERRED_LANG:-id}.sh"
[ -f "$_LANG_FILE" ] && source "$_LANG_FILE"