From 3b4bbf09bccf8aad1a63e4885f988017b9afeb97 Mon Sep 17 00:00:00 2001 From: oxpoe <324556608+oxpoe@users.noreply.github.com> Date: Thu, 15 Oct 2026 06:55:42 +0700 Subject: [PATCH] refactor: nama binary final tia-love (cmd/, Makefile, README, PRD) --- .gitignore | 2 +- Makefile | 4 +-- README.md | 12 ++++---- cmd/{tia => tia-love}/main.go | 9 +++--- docs/PRD.md | 56 +++++++++++++++++------------------ docs/rea/composerize.md | 2 +- 6 files changed, 44 insertions(+), 41 deletions(-) rename cmd/{tia => tia-love}/main.go (84%) diff --git a/.gitignore b/.gitignore index 2b1cec7..c4defbf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ # Build artifacts -/tia +/tia-love /dist/ *.exe diff --git a/Makefile b/Makefile index f08d5da..6c0eedb 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,9 @@ -BINARY := tia +BINARY := tia-love .PHONY: build run test vet fmt clean build: - go build -o $(BINARY) ./cmd/tia + go build -o $(BINARY) ./cmd/tia-love run: build ./$(BINARY) diff --git a/README.md b/README.md index f115031..e6a9654 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,18 @@ Status: **Phase 0 — fondasi** (lihat roadmap di `docs/PRD.md` §8). ## Build & jalankan ```bash -make build # menghasilkan ./tia -./tia # buka TUI -./tia version # versi & build info -make test # unit test +make build # menghasilkan ./tia-love +./tia-love # buka TUI +./tia-love version # versi & build info +make test # unit test ``` +Nama binary final: **`tia-love`** (nama produk tetap **tia**). + ## Struktur repo ``` -cmd/tia/ entry point — router TUI default vs CLI companion +cmd/tia-love/ entry point — router TUI default vs CLI companion internal/app/ root Bubble Tea model internal/ (menyusul) docker, stack, config, ui, i18n, host, cli, audio docs/PRD.md product requirements diff --git a/cmd/tia/main.go b/cmd/tia-love/main.go similarity index 84% rename from cmd/tia/main.go rename to cmd/tia-love/main.go index 63179b0..fae8b99 100644 --- a/cmd/tia/main.go +++ b/cmd/tia-love/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "runtime/debug" + "strings" tea "charm.land/bubbletea/v2" @@ -13,8 +14,8 @@ import ( const usage = `tia — Terminal Is A My Way (Just Work) Pemakaian: - tia Buka TUI interaktif - tia version Tampilkan versi & build info + tia-love Buka TUI interaktif + tia-love version Tampilkan versi & build info Subcommand CLI pendamping (convert, ps, up, down, update, doctor) menyusul di Phase 1–3 — lihat docs/PRD.md §F-028. @@ -33,7 +34,7 @@ func main() { } if _, err := tea.NewProgram(app.New()).Run(); err != nil { - fmt.Fprintln(os.Stderr, "tia:", err) + fmt.Fprintln(os.Stderr, "tia-love:", err) os.Exit(1) } } @@ -45,7 +46,7 @@ func versionString() string { return "tia dev" } ver := info.Main.Version - if ver == "" || ver == "(devel)" { + if ver == "" || ver == "(devel)" || strings.HasPrefix(ver, "v0.0.0-") { ver = "dev" } rev, dirty := "", false diff --git a/docs/PRD.md b/docs/PRD.md index 5c859d7..3324516 100644 --- a/docs/PRD.md +++ b/docs/PRD.md @@ -26,11 +26,11 @@ Tagline: "Just Work" ### Prinsip Produk: Satu Binary Multifungsi (TUI Utama + CLI Pendamping) tia hadir sebagai **satu binary mandiri (single static binary)** yang fleksibel dengan filosofi **"Just Work"**: 1. **Pengalaman Utama = TUI Interaktif Penuh:** - Menjalankan `tia` tanpa argumen langsung meluncurkan TUI modern lengkap dengan dashboard keren (logo, jam digital ASCII), animasi dinamis, mouse support penuh, efek suara interaktif, dan notifikasi toast status. + Menjalankan `tia-love` tanpa argumen langsung meluncurkan TUI modern lengkap dengan dashboard keren (logo, jam digital ASCII), animasi dinamis, mouse support penuh, efek suara interaktif, dan notifikasi toast status. 2. **Mode CLI Pendamping (Scriptable & Headless):** - Untuk kebutuhan otomatisasi, CI/CD, atau perintah kilat tanpa membuka antarmuka TUI, binary yang sama dapat dipanggil dengan subcommand CLI (misal: `tia convert ...`, `tia ps`, `tia up `, `tia doctor`). Seluruh logika inti di-share dari `internal/core`, sehingga output dan perilakunya 100% konsisten. + Untuk kebutuhan otomatisasi, CI/CD, atau perintah kilat tanpa membuka antarmuka TUI, binary yang sama dapat dipanggil dengan subcommand CLI (misal: `tia-love convert ...`, `tia-love ps`, `tia-love up `, `tia-love doctor`). Seluruh logika inti di-share dari `internal/core`, sehingga output dan perilakunya 100% konsisten. 3. **Instalasi Instan:** - Dapat diinstal dengan **1 baris perintah (`curl -fsSL ... | sh`)** atau cukup unduh binary Go precompiled secara manual dan langsung jalankan (`./tia`). + Dapat diinstal dengan **1 baris perintah (`curl -fsSL ... | sh`)** atau cukup unduh binary Go precompiled secara manual dan langsung jalankan (`./tia-love`). 4. **Mouse & Keyboard Setara:** Seluruh navigasi dan operasi di TUI ramah mouse (klik, drag, scroll, hover) maupun keyboard shortcut vim-like. 5. **Aset Bebas & Terbuka:** @@ -67,7 +67,7 @@ tia hadir sebagai **satu binary mandiri (single static binary)** yang fleksibel | **Audio Engine** | Oto v3 | `github.com/ebitengine/oto/v3` | Pure-Go audio player (`CGO_ENABLED=0`), PulseAudio/PipeWire/ALSA fallback | | **Audio Assets** | Kenney Interface Sounds | CC0 1.0 Universal | Aset audio open-source tanpa royalti, WAV 44.1kHz mono embedded (<2MB) | | **Animation Engine**| Harmonica v2 | `charm.land/harmonica/v2` | Fisika pegas (spring physics) & timer ticker 30 FPS untuk animasi TUI | -| **CLI Dispatcher** | Native Go Router | Go standard library | Router ringan untuk mode CLI pendamping (`tia convert`, `tia ps`, dll) | +| **CLI Dispatcher** | Native Go Router | Go standard library | Router ringan untuk mode CLI pendamping (`tia-love convert`, `tia-love ps`, dll) | ### Docker Interaction Strategy: Hybrid @@ -320,16 +320,16 @@ tia hadir sebagai **satu binary mandiri (single static binary)** yang fleksibel #### F-028: Satu Binary Multifungsi & CLI Companion Mode - **Priority:** P0 (arsitektur fondasi) -- **Description:** `tia` adalah satu file binary mandiri (single binary) yang multifungsi. Secara default `tia` membuka TUI interaktif penuh, namun dapat dipanggil langsung dari command line (CLI mode) untuk eksekusi skrip, CI/CD, atau konversi cepat tanpa membuka TUI. +- **Description:** `tia-love` adalah satu file binary mandiri (single binary) yang multifungsi. Secara default `tia-love` membuka TUI interaktif penuh, namun dapat dipanggil langsung dari command line (CLI mode) untuk eksekusi skrip, CI/CD, atau konversi cepat tanpa membuka TUI. - **Subcommand CLI Pendamping:** - - `tia`: Meluncurkan antarmuka TUI interaktif penuh. - - `tia convert [flags/command]`: Mengonversi perintah `docker run` menjadi compose YAML dan mencetaknya ke stdout atau menyimpannya langsung ke direktori stack (contoh: `tia convert "docker run -d -p 80:80 nginx"`). - - `tia ps`: Menampilkan ringkasan status semua stack & kontainer dalam format tabel rapi atau JSON (`--json`). - - `tia up `: Menjalankan stack di background tanpa membuka TUI. - - `tia down `: Menghentikan & menurunkan stack. - - `tia update `: Menarik image terbaru dan merefresh kontainer stack via CLI. - - `tia doctor`: Memeriksa kesehatan sistem (koneksi Docker daemon, ketersediaan sound server/driver, versi Go, direktori stack). - - `tia version` / `tia --version`: Menampilkan versi, commit git, dan build info. + - `tia-love`: Meluncurkan antarmuka TUI interaktif penuh. + - `tia-love convert [flags/command]`: Mengonversi perintah `docker run` menjadi compose YAML dan mencetaknya ke stdout atau menyimpannya langsung ke direktori stack (contoh: `tia-love convert "docker run -d -p 80:80 nginx"`). + - `tia-love ps`: Menampilkan ringkasan status semua stack & kontainer dalam format tabel rapi atau JSON (`--json`). + - `tia-love up `: Menjalankan stack di background tanpa membuka TUI. + - `tia-love down `: Menghentikan & menurunkan stack. + - `tia-love update `: Menarik image terbaru dan merefresh kontainer stack via CLI. + - `tia-love doctor`: Memeriksa kesehatan sistem (koneksi Docker daemon, ketersediaan sound server/driver, versi Go, direktori stack). + - `tia-love version` / `tia-love --version`: Menampilkan versi, commit git, dan build info. - **Acceptance Criteria:** - Berbagi basis kode logika inti yang sama di `internal/core`, menjamin kesamaan hasil antara eksekusi di TUI dan CLI. - Kode keluar (*exit codes*) standar (0 = sukses, >0 = error) untuk integrasi skrip bash. @@ -338,7 +338,7 @@ tia hadir sebagai **satu binary mandiri (single static binary)** yang fleksibel #### F-029: 1-Line Installer & Standalone Binary Distribution - **Priority:** P0 (distribusi rilis) -- **Description:** Pengguna dapat memasang `tia` dalam hitungan detik menggunakan perintah instalasi satu baris (*one-line command*) otomatis, atau dengan mengunduh binary Go mandiri tanpa proses kompilasi manual. +- **Description:** Pengguna dapat memasang `tia-love` dalam hitungan detik menggunakan perintah instalasi satu baris (*one-line command*) otomatis, atau dengan mengunduh binary Go mandiri tanpa proses kompilasi manual. - **Metode Instalasi:** 1. **One-Line Command (Rekomendasi):** ```bash @@ -347,13 +347,13 @@ tia hadir sebagai **satu binary mandiri (single static binary)** yang fleksibel - Skrip otomatis mendeteksi OS (Linux, macOS) dan arsitektur CPU (`amd64`, `arm64`). - Mengunduh rilis tarball terbaru dari GitHub Releases. - Memverifikasi checksum SHA256 secara otomatis demi keamanan sebelum mengekstrak. - - Memasang binary ke direktori pengguna (`~/.local/bin/tia` tanpa memerlukan akses `sudo`). + - Memasang binary ke direktori pengguna (`~/.local/bin/tia-love` tanpa memerlukan akses `sudo`). - Memberikan instruksi jika `~/.local/bin` belum ada di `$PATH`. 2. **Manual Download Precompiled Binary:** - - Pengguna dapat langsung menuju halaman GitHub Releases, mengunduh file binary terkompresi (misal: `tia_linux_amd64.tar.gz`), mengekstraknya, dan langsung menjalankannya (`./tia`). + - Pengguna dapat langsung menuju halaman GitHub Releases, mengunduh file binary terkompresi (misal: `tia-love_linux_amd64.tar.gz`), mengekstraknya, dan langsung menjalankannya (`./tia-love`). 3. **Go Install (untuk developer Go):** ```bash - go install github.com/oxpoe/tia/cmd/tia@latest + go install github.com/oxpoe/tia/cmd/tia-love@latest ``` - **Acceptance Criteria:** - Skrip instalasi aman (`set -euo pipefail`), transparan, dan tidak meminta privilege root/sudo secara membabi-buta. @@ -910,7 +910,7 @@ graph TD ``` tia/ ├── cmd/ -│ └── tia/ +│ └── tia-love/ │ └── main.go # Entry point (Router TUI default vs CLI companion) ├── internal/ │ ├── app/ @@ -919,10 +919,10 @@ tia/ │ │ └── messages.go # Custom tea.Msg types │ ├── cli/ # Mode CLI pendamping (single binary) │ │ ├── root.go # CLI argument parser & dispatcher -│ │ ├── convert.go # 'tia convert' command -│ │ ├── ps.go # 'tia ps' list stacks & containers -│ │ ├── stack.go # 'tia up / down / update' commands -│ │ └── doctor.go # 'tia doctor' diagnostic check +│ │ ├── convert.go # 'tia-love convert' command +│ │ ├── ps.go # 'tia-love ps' list stacks & containers +│ │ ├── stack.go # 'tia-love up / down / update' commands +│ │ └── doctor.go # 'tia-love doctor' diagnostic check │ ├── audio/ # Audio feedback engine (Pure Go, Oto v3) │ │ ├── player.go # Audio context & sound player │ │ ├── sounds.go # Sound event definitions & mapping @@ -1200,9 +1200,9 @@ Langkah wizard: **Bahasa → Direktori stack → Tema → Impor stack yang ditem | Config | Basic config load/save | | Theme | Catppuccin (Mocha/Latte), mode Otomatis/Gelap/Terang/Terminal, deteksi background terminal, semua warna via token semantik | | Status bar | Context-aware help text (hint klikable) | -| **Rilis awal** | goreleaser + GitHub Releases + `install.sh` + checksum (F-029), `tia --version` / `tia doctor` | +| **Rilis awal** | goreleaser + GitHub Releases + `install.sh` + checksum (F-029), `tia-love --version` / `tia-love doctor` | -**Exit Criteria:** Jalankan `tia` → splash → Home Dashboard (jam, ringkasan) → masuk workspace, lihat semua resource Docker, navigasi dengan keyboard **dan mouse**; setiap aksi memberi suara + toast; instal dengan satu baris perintah berhasil di mesin bersih +**Exit Criteria:** Jalankan `tia-love` → splash → Home Dashboard (jam, ringkasan) → masuk workspace, lihat semua resource Docker, navigasi dengan keyboard **dan mouse**; setiap aksi memberi suara + toast; instal dengan satu baris perintah berhasil di mesin bersih --- @@ -1235,7 +1235,7 @@ Langkah wizard: **Bahasa → Direktori stack → Tema → Impor stack yang ditem | Setup wizard | First-run setup with huh forms | | Compose CLI wrapper | docker compose up/down/pull/restart/ps | | REA modul 1, 2, 7 | Analisis composerize, Dockge (stack), dan format output Compose, hasil di `docs/rea/` + test vectors | -| CLI mode (pendamping) | `tia convert`, `tia ps`, `tia stacks`, `tia up/down/restart/update`, `--json`, kode keluar jelas (F-028) | +| CLI mode (pendamping) | `tia-love convert`, `tia-love ps`, `tia-love stacks`, `tia-love up/down/restart/update`, `--json`, kode keluar jelas (F-028) | **Exit Criteria:** Convert docker run command → save as stack → manage it, **baik dari TUI maupun dari CLI**, dengan hasil identik @@ -1316,7 +1316,7 @@ Langkah wizard: **Bahasa → Direktori stack → Tema → Impor stack yang ditem - **Satu binary statis** (`CGO_ENABLED=0`), tanpa runtime dependency selain Docker (audio memakai library pure-Go; server audio hanya dibutuhkan jika suara diaktifkan) - Instal satu baris (skrip) **atau** unduh binary manual dari GitHub Releases, detail di **F-029** - Release otomatis via goreleaser: `.tar.gz`/`.zip` + `checksums.txt`; `.deb`, `.rpm`, Homebrew, AUR menyusul -- Binary name: `tia` +- Binary name: `tia-love` (nama produk tetap: tia) ### Audio & Animasi - Suara dan animasi **opsional**: bisa dimatikan penuh dari Pengaturan, dan aplikasi tetap 100% fungsional tanpa keduanya @@ -1345,7 +1345,7 @@ Langkah wizard: **Bahasa → Direktori stack → Tema → Impor stack yang ditem | Latensi suara klik | < 100 ms dari aksi sampai terdengar | | Notifikasi (toast) muncul | < 100 ms setelah event, tampil di atas-tengah dengan status lengkap | | Animasi | Stabil 30 FPS, CPU idle < 3% saat dashboard terbuka | -| Instalasi satu baris | < 30 detik dari perintah sampai `tia` bisa dijalankan | +| Instalasi satu baris | < 30 detik dari perintah sampai `tia-love` bisa dijalankan | | Paritas CLI vs TUI | Hasil konversi & operasi stack lewat CLI identik dengan lewat TUI | | Coverage aset | 100% aset tercatat di register aset dengan lisensi valid | @@ -1363,7 +1363,7 @@ Langkah wizard: **Bahasa → Direktori stack → Tema → Impor stack yang ditem | Mouse event tidak konsisten antar terminal/tmux/SSH | Medium | Test di terminal populer (kitty, alacritty, wezterm, gnome-terminal, tmux, SSH), keyboard selalu jadi fallback penuh, toggle mouse via config | | Mouse capture mengganggu copy-paste teks native | Medium | Sediakan mode "text select" (toggle `m`) + tombol Copy di log/YAML viewer + dukungan OSC52 clipboard | | Suara tidak terdengar saat tia dijalankan lewat SSH (audio diputar di server, bukan di laptop pengguna) | High | Deteksi sesi SSH → suara default mati + info; semua suara selalu punya padanan visual; opsi terminal bell (BEL) sebagai fallback; rekomendasikan pola "tia lokal + multi-host" | -| Tidak ada audio device/server (PulseAudio/PipeWire/ALSA) di mesin | Medium | Deteksi saat start, degradasi diam-diam ke mode tanpa suara + notifikasi sekali; `tia doctor` menampilkan status audio | +| Tidak ada audio device/server (PulseAudio/PipeWire/ALSA) di mesin | Medium | Deteksi saat start, degradasi diam-diam ke mode tanpa suara + notifikasi sekali; `tia-love doctor` menampilkan status audio | | Dependensi audio merusak single static binary (cgo) | High | Pilih library audio pure-Go (Oto v3 dengan `CGO_ENABLED=0`); **spike teknis di Phase 0** untuk membuktikan sebelum dikunci | | Animasi menghabiskan CPU / flicker di terminal lambat | Medium | Batas 30 FPS, animasi dimatikan otomatis saat idle/terminal lambat, mode "reduced motion", toggle di Pengaturan | | Spam suara/notifikasi dari event Docker beruntun | Medium | Debounce, rate limit, dan pengelompokan notifikasi sejenis | diff --git a/docs/rea/composerize.md b/docs/rea/composerize.md index e0db43a..ba164a6 100644 --- a/docs/rea/composerize.md +++ b/docs/rea/composerize.md @@ -6,7 +6,7 @@ ## 1. Ringkasan & Tujuan `composerize` mengubah perintah `docker run` menjadi file compose YAML. Di tia, logika ini menjadi -**konverter inti** yang dipakai dua-duanya: modal konverter TUI (F-008) dan `tia convert` CLI (F-028). +**konverter inti** yang dipakai dua-duanya: modal konverter TUI (F-008) dan `tia-love convert` CLI (F-028). Yang diporting: **pipeline parsing, tabel pemetaan flag, dan aturan normalisasi**. Yang tidak diport: fitur merge dengan file compose existing via stdin (ditangani layer stack tia