@baiworcode/baiworcode 0.0.0-stage → 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +450 -3
  3. package/bin/baiwor.js +2415 -0
  4. package/package.json +60 -6
  5. package/scripts/audit-provider.mjs +286 -0
  6. package/scripts/e2e-dogfood.mjs +274 -0
  7. package/scripts/instabox-sync.mjs +124 -0
  8. package/scripts/run-tests.mjs +40 -0
  9. package/src/agents/agentCreator.js +308 -0
  10. package/src/assets/baworLogo.js +31 -0
  11. package/src/auth/device.js +153 -0
  12. package/src/auth/index.js +452 -0
  13. package/src/auth/pkce.js +218 -0
  14. package/src/auth/registry.js +45 -0
  15. package/src/auth/resolve.js +157 -0
  16. package/src/branding.js +26 -0
  17. package/src/chat/answerStyle.js +374 -0
  18. package/src/chat/client.js +928 -0
  19. package/src/chat/compact.js +252 -0
  20. package/src/chat/context.js +186 -0
  21. package/src/chat/conversation.js +450 -0
  22. package/src/chat/deliverables.js +140 -0
  23. package/src/chat/index.js +894 -0
  24. package/src/chat/liveActivity.js +206 -0
  25. package/src/chat/multimodal.js +258 -0
  26. package/src/chat/outputWriter.js +216 -0
  27. package/src/chat/permissionMode.js +98 -0
  28. package/src/chat/planMode.js +252 -0
  29. package/src/chat/reasoningPlaceholder.js +14 -0
  30. package/src/chat/selfHealing.js +186 -0
  31. package/src/chat/sessionManager.js +684 -0
  32. package/src/chat/systemPrompt.js +160 -0
  33. package/src/chat/timeline.js +594 -0
  34. package/src/chat/todoReminder.js +142 -0
  35. package/src/chat/wrapText.js +235 -0
  36. package/src/cliHelp.js +81 -0
  37. package/src/colors.js +121 -0
  38. package/src/config.js +503 -0
  39. package/src/cron/cronManager.js +344 -0
  40. package/src/doctor.js +185 -0
  41. package/src/goals/goalManager.js +365 -0
  42. package/src/hooks/hookManager.js +437 -0
  43. package/src/mcp/client.js +841 -0
  44. package/src/mcp/index.js +15 -0
  45. package/src/mcp/server.js +122 -0
  46. package/src/modelAlias.js +625 -0
  47. package/src/modelMenu.js +971 -0
  48. package/src/platforms/platformManager.js +172 -0
  49. package/src/platforms/telegramBot.js +176 -0
  50. package/src/platforms/whatsappBaileys.js +207 -0
  51. package/src/prompt.js +1093 -0
  52. package/src/rules/ruleManager.js +205 -0
  53. package/src/security/dependencyAuditor.js +345 -0
  54. package/src/security/scanner.js +135 -0
  55. package/src/security/secretDetector.js +278 -0
  56. package/src/skills/bundled/instabox/SKILL.md +151 -0
  57. package/src/skills/skillManager.js +147 -0
  58. package/src/spinner.js +62 -0
  59. package/src/statusLine.js +156 -0
  60. package/src/theme.js +177 -0
  61. package/src/tools/approval.js +155 -0
  62. package/src/tools/definitions.js +448 -0
  63. package/src/tools/diagnosticsTool.js +133 -0
  64. package/src/tools/diffView.js +295 -0
  65. package/src/tools/editUtil.js +344 -0
  66. package/src/tools/handlers.js +918 -0
  67. package/src/tools/index.js +156 -0
  68. package/src/tools/instaboxTool.js +247 -0
  69. package/src/tools/questionnaireTool.js +105 -0
  70. package/src/tools/registry.js +246 -0
  71. package/src/tools/sandbox.js +695 -0
  72. package/src/tools/searchTool.js +334 -0
  73. package/src/tools/snapshot.js +263 -0
  74. package/src/tools/subagentTool.js +421 -0
  75. package/src/tools/todoTool.js +260 -0
  76. package/src/tools/webTool.js +713 -0
  77. package/src/update.js +192 -0
  78. package/src/workflows/workflowEngine.js +328 -0
  79. package/src/workspace.js +140 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 bAIwor
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,450 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
1
+ # 🎭 bAIwor Code
2
+
3
+ <p align="left">
4
+ <a href="https://github.com/bAIwor/baiworcode"><img src="https://img.shields.io/badge/Status-Alpha%20%7C%20Penyempurnaan%20Aktif-orange?style=flat-square" alt="Status: Alpha" /></a>
5
+ <a href="https://baiwor.my.id"><img src="https://img.shields.io/badge/Website-baiwor.my.id-blue?style=flat-square" alt="Website" /></a>
6
+ <a href="https://agentik.my.id"><img src="https://img.shields.io/badge/Bonus%20Token-agentik.my.id-10B981?style=flat-square" alt="Bonus Token" /></a>
7
+ <a href="https://nodejs.org"><img src="https://img.shields.io/badge/Node.js-%3E%3D18-green?style=flat-square" alt="Node.js" /></a>
8
+ <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-purple?style=flat-square" alt="License: MIT" /></a>
9
+ </p>
10
+
11
+ > *"Saka Bawor dadi bAIwor — Jiwa Punakawan, Pikiran AI, Guardian Banyumas"*
12
+ > **Website Resmi:** [https://baiwor.my.id](https://baiwor.my.id) · **Bonus Token AI:** [https://agentik.my.id](https://agentik.my.id)
13
+
14
+ > [!NOTE]
15
+ > **Status Proyek: Tahap Alpha (Penyempurnaan Aktif) 🚧**
16
+ > bAIwor Code saat ini berada dalam tahap **Alpha** dan sedang terus disempurnakan secara aktif. Fitur baru, stabilitas, dan optimasi performa terus diperbarui setiap hari. Dokumentasi resmi, update, dan ekosistem bAIwor dapat diakses di [baiwor.my.id](https://baiwor.my.id). Masukan dan laporan kendala dapat disampaikan melalui [GitHub Issues](https://github.com/bAIwor/baiworcode/issues).
17
+
18
+ CLI coding agent pintar berbahasa Indonesia — ngobrol santai di terminal, dan bAIwor langsung bekerja di berkas proyekmu.
19
+
20
+ ```text
21
+ ╭───▲───╮ PT. bAIwor Agentic Indonesia
22
+ ▄▀▀ │ ▀▀▄ ██████╗ █████╗ ██╗██╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗ ██████╗ ███████╗
23
+ ( (O) ( o ) (O) ) ██╔══██╗██╔══██╗██║██║ ██║██╔═══██╗██╔══██╗ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
24
+ ▄███████████████▄ ██████╔╝███████║██║██║ █╗ ██║██║ ██║██████╔╝ ██║ ██║ ██║██║ ██║█████╗
25
+ █ █ █ █ █ █ █ █ █ ██╔══██╗██╔══██║██║██║███╗██║██║ ██║██╔══██╗ ██║ ██║ ██║██║ ██║██╔══╝
26
+ ▀█████████████▀ ██████╔╝██║ ██║██║╚███╔███╔╝╚██████╔╝██║ ██║ ╚██████╗╚██████╔╝██████╔╝███████╗
27
+ ╰───┴───╯ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
28
+ 🎭 "Saka Bawor dadi bAIwor — Jiwa Punakawan, Pikiran AI, Guardian Banyumas"
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 🚀 Instalasi Cepat
34
+
35
+ ### ⚡ Cara Instan (One-Line Installer — Sangat Direkomendasikan untuk Pemula)
36
+
37
+ **Windows (PowerShell):**
38
+ ```powershell
39
+ irm https://raw.githubusercontent.com/bAIwor/baiworcode/main/install.ps1 | iex
40
+ ```
41
+
42
+ **Linux / macOS (Bash):**
43
+ ```bash
44
+ curl -fsSL https://raw.githubusercontent.com/bAIwor/baiworcode/main/install.sh | bash
45
+ ```
46
+
47
+ Installer di atas otomatis mengecek Node.js (minimal v18), memasang bAIwor Code secara global, dan langsung siap dipakai.
48
+
49
+ ### Cara 2 — Install global via npm (tahap beta)
50
+ ```bash
51
+ npm install -g @baiworcode/baiworcode@beta
52
+ ```
53
+ Setelah itu, perintah `baiworcode` (atau `baiwor`) bisa dipakai di mana saja.
54
+ > Paket npm dirilis dengan dist-tag **beta** selama proyek masih menuju 1.0.0 stabil. Setelah stabil, `npm install -g baiworcode` akan menjadi jalur utama.
55
+
56
+ ### Cara 3 — Coba dulu tanpa install
57
+ ```bash
58
+ npx @baiworcode/baiworcode@beta
59
+ ```
60
+
61
+ ### Cara 4 — Dari sumber (untuk kontributor)
62
+ ```bash
63
+ git clone https://github.com/bAIwor/baiworcode.git
64
+ cd baiworcode
65
+ npm install
66
+ npm link
67
+ ```
68
+
69
+ ### Prasyarat
70
+ - [Node.js](https://nodejs.org/) versi **18 atau lebih baru**. Node.js 22 LTS direkomendasikan karena Node 18/20 sudah melewati masa dukungan resmi.
71
+
72
+ Cek versi Node kamu:
73
+ ```bash
74
+ node --version
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 🎓 Mulai dari Sini (Panduan Pemula)
80
+
81
+ Belum pernah pakai? Ikuti tiga langkah ini.
82
+
83
+ **1. Jalankan bAIwor Code**
84
+ ```bash
85
+ baiworcode
86
+ ```
87
+
88
+ **2. Pilih model AI-nya (sekali saja)**
89
+ ```bash
90
+ /model
91
+ ```
92
+ Pilih **Agentik AI** (paling praktis, ada bonus token gratis di [agentik.my.id](https://agentik.my.id)), atau **Google Gemini** kalau mau login pakai akun Google.
93
+
94
+ **3. Langsung ngobrol**
95
+
96
+ Ketik pertanyaan atau instruksi coding seperti sedang chat biasa:
97
+
98
+ ```bash
99
+ baiworcode "jelaskan struktur proyek ini"
100
+ baiworcode "perbaiki error di src/index.js"
101
+ baiworcode "buatkan test untuk fungsi hitungTotal"
102
+ ```
103
+
104
+ Atau masuk ke mode interaktif lalu ketik langsung tanpa keluar aplikasi.
105
+
106
+ ### Contoh hal yang bisa kamu minta
107
+ | Mau apa | Tulis apa |
108
+ |---|---|
109
+ | Paham kode orang lain | `"jelaskan cara kerja fungsi login di file ini"` |
110
+ | Cari sesuatu di proyek | `"cari semua tempat yang memanggil fungsi hitungTotal"` |
111
+ | Perbaiki bug | `"kenapa hasilnya NaN? tolong perbaiki"` |
112
+ | Bikin fitur baru | `"tambahkan validasi email di form pendaftaran"` |
113
+ | Bikin test | `"buatkan test untuk src/utils/format.js"` |
114
+ | Rapikan kode | `"refactor fungsi ini supaya lebih mudah dibaca"` |
115
+ | Jalankan & cek | `"jalankan npm test dan perbaiki yang gagal"` |
116
+
117
+ ---
118
+
119
+ ## ⚡ Fitur Utama
120
+
121
+ - **Antarmuka Elegan & Bersih**:
122
+ - Maskot Wajah Topeng Bawor presisi tinggi (19 kolom × 7 baris, simetris dan anti-menceng).
123
+ - Banner 3D ASCII Shadow Merah-Putih.
124
+ - Kotak informasi terminal dinamis anti-pecah (*visual column aware*).
125
+ - Area input dibingkai dua garis pemisah, dengan baris status yang ikut bergerak saat kamu mengetik — `~ │ Safe │ ✦ <model> · <provider> │ Konteks 92% tersisa`. Label mode izin memakai warna pastel Google (Safe biru, Auto hijau, Plan kuning, YOLO merah).
126
+ - Kedua garis memakai jumlah tanda pisah yang sama dan hanya berbeda empat kolom, memberi kesan undakan. Baris status menyesuaikan diri bila terminal sempit: rincian token, nama provider, dan keterangan akses dikorbankan berurutan agar tidak pernah melewati lebar terminal dan merusak kotak layout.
127
+ - **Timeline Aktivitas**:
128
+ - Setiap tool yang dijalankan dicatat sebagai pohon: nama tool, durasi, dan jumlah baris output.
129
+ - **Nama tool diwarnai per kategori** agar jenis langkah langsung terbaca sekilas — baca (cyan) untuk `read_file`/`webfetch`, jelajah (biru) untuk `list_directory`/`search_files`/`websearch`, tulis & ubah (hijau) untuk `write_file`/`edit_file`/`patch_file`, jalankan `run_command` (merah), rencana `todo_list` dan pemeriksaan `diagnostics` (oranye tua). Batang pohon ikut mengambil warna tool-nya.
130
+ - Setiap langkah juga menampilkan **nama Punakawan** pelakunya (semAIr, bAIwor, pAItruk, gAIreng) dengan satu warna kuning emas yang seragam — jadi jelas "siapa" yang bertindak, sementara warna nama tool menunjukkan "aksi apa" yang dilakukan.
131
+ - Pohon digambar **secara langsung**: langkah muncul satu per satu begitu selesai, sementara langkah yang sedang berjalan ditandai penanda berputar (`⠋`) amber dan durasi `…` — jadi progres terlihat mengalir, bukan menunggu semua tool usai.
132
+ - Prompt persetujuan perintah menyembunyikan blok aktivitas dulu agar tampilan tidak rusak, lalu menggambarnya kembali.
133
+ - Tool yang gagal ditandai merah agar mudah dipindai sekilas, dan keluarannya ikut diringkas.
134
+ - Daftar tugas dari `todo_list` dirender sebagai checklist di bawah node-nya, lengkap dengan progres `3/5 selesai`.
135
+ - Saat keluaran dialihkan (`baiworcode "prompt" > hasil.txt`), animasi dilewati dan pohon dicetak sekali tanpa karakter escape.
136
+ - **Anggun Konteks**:
137
+ - Indikator `Konteks 92% tersisa` tampil di banner awal dan sekali lagi setelah setiap jawaban.
138
+ - Riwayat dipangkas otomatis berdasarkan perkiraan **token**, bukan jumlah pesan — hasil `read_file` yang berukuran besar tidak lagi membuat request ditolak provider.
139
+ - Pesan `tool` tidak pernah dilepas dari pesan `assistant` yang memanggilnya, karena pasangan yang terpotong akan membuat provider menolak request.
140
+ - Peringatan muncul dan menyarankan `/clear` saat konteks tinggal sedikit.
141
+ - **Angkanya adalah estimasi** (sekitar 4 karakter per token), bukan hitungan token dari provider: sebagian endpoint tidak mengirim `usage`, dan model kustom tidak punya angka jendela konteks yang bisa dikutip dengan jujur. Karena itu label selalu ditandai `≈`.
142
+ - **Navigasi Perintah Cerdas (Slash Commands & Subcommands)**:
143
+ - Ketik `/` untuk memunculkan menu dropdown perintah secara real-time.
144
+ - Navigasi cepat dengan tombol panah (`↑` / `↓`).
145
+ - **Auto-complete presisi dengan `Tab`**: Menekan `Tab` langsung melengkapi nama perintah/subperintah ke dalam frame input dan menutup dropdown secara instan, siap dieksekusi via `Enter` atau ditambah argumen kustom.
146
+ - Dukungan subperintah bertingkat untuk `/timeline` (`compact` / `detail`), `/session` (`list`, `resume`, `delete`, `clear`), dan `/skill` (`list`, `info`).
147
+ - Riwayat prompt cerdas: tombol panah `↑` / `↓` saat dropdown tertutup memanggil kembali riwayat perintah sebelumnya.
148
+ - **Aturan Proyek Otomatis (Project Rules Engine)**:
149
+ - Otomatis mendeteksi dan menerapkan panduan koding proyek dari `BAIWORS.md`, `BAIWORS.local.md`, atau berkas aturan di `.baiwor/rules/*.md`.
150
+ - bAIwor otomatis mematuhi standar arsitektur, konvensi penamaan, dan batasan teknologi yang kamu tetapkan untuk proyekmu tanpa perlu diingatkan berulang kali.
151
+ - **Sistem Keahlian & Plugin (.baiwor/skills)**:
152
+ - Kelola instruksi spesifik domain dan modul keahlian di `.baiwor/skills/` untuk memperkaya wawasan bAIwor dalam menangani alur kerja khusus timmu.
153
+ - **Arsitektur Autentikasi & Provider**:
154
+ - **Google Gemini OAuth** via PKCE (loopback + S256) — login tanpa menyimpan API key di disk.
155
+ - **Agentik AI** sebagai provider bawaan (endpoint OpenAI-compatible + bonus token).
156
+ - Dukungan **Custom OpenAI-compatible endpoints** lengkap dengan fetch otomatis `/models` dan ganti model aktif.
157
+ - Konfigurasi tersimpan otomatis & atomik di `~/.baiwor/config.json` dengan proteksi backup bila file korup.
158
+ - **Mesin Chat Streaming & Agentic Loop**:
159
+ - Panggilan `/chat/completions` streaming (SSE) dengan line-buffering agar aman dari potongan TCP.
160
+ - Percobaan ulang otomatis (retry + backoff) saat jaringan tersendat atau provider mengembalikan error 5xx — sebelum byte pertama diterima, jadi jawaban tidak pernah terduplikasi.
161
+ - Pesan kegagalan yang ramah dan spesifik: autentikasi, rate limit, server provider, hingga timeout/jaringan (tidak lagi menampilkan `fetch failed` mentah).
162
+ - Dukungan token `reasoning_content` (model reasoning seperti DeepSeek R1) dan pembatalan via `Ctrl+C`.
163
+ - Menekan `Ctrl+C` juga menghentikan perintah terminal yang sedang berjalan, termasuk mematikan seluruh pohon proses di Windows.
164
+ - Riwayat percakapan multi-turn dengan pemangkasan otomatis agar tidak melebihi context window.
165
+ - Berkas berakhiran baris CRLF (khas Windows) dibaca dan disunting tanpa menyisakan `\r` atau mengubah akhir baris seluruh berkas.
166
+ - Loop agentic hingga 100 putaran: model bisa memanggil tool, membaca hasilnya, lalu melanjutkan sendiri.
167
+ - **Selalu berakhir dengan jawaban**: bila batas putaran tercapai — atau terdeteksi model mengulang rangkaian tool yang sama tiga kali — bAIwor otomatis meminta satu giliran kesimpulan **tanpa tool**, jadi pekerjaan tidak berhenti tanpa keputusan.
168
+ - **🛠️ 15 Tool Bawaan** — bAIwor tidak hanya menjawab, tapi benar-benar mengerjakan:
169
+ - `read_file`, `write_file`, `edit_file`, `patch_file`, `list_directory` — baca, tulis, dan sunting berkas proyek. Dilengkapi **Visual Diff Review berwarna** di timeline aktivitas dan **Snapshot Rollback instan (`/undo`)** untuk membatalkan seluruh perubahan putaran terakhir secara aman.
170
+ - `edit_file` **tahan banting** — pencocokannya toleran terhadap perbedaan indentasi, spasi ujung baris, dan CRLF/LF, jadi refactor tidak gagal hanya karena spasi. Ada `replace_all` untuk mengganti semua kemunculan, dan `edits` untuk banyak perubahan sekaligus secara **atomik** (semua berhasil atau tidak ada yang ditulis).
171
+ - `patch_file` — menerapkan unified diff (format `git diff`); blok konteksnya dicari ulang sehingga patch tetap kena walau nomor baris bergeser.
172
+ - `search_files` — cari fungsi/teks di seluruh proyek tanpa membuka berkas satu per satu, dengan pengaman anti-ReDoS agar pola berat tidak membuat proses menggantung.
173
+ - `run_command` — jalankan `npm test`, linter, git, dan perintah terminal lain.
174
+ - `webfetch` & `websearch` — baca dokumentasi/halaman web dan cari solusi di internet. Didukung **TinyFish Web Intelligence** (rendering JavaScript modern, anti-bot bypass, hasil terstruktur & markdown bersih untuk LLM) dengan fallback mulus ke DuckDuckGo & native fetch.
175
+ - `webautomate` — mengemudikan browser headless (Web Agent TinyFish / Mako) untuk menyelesaikan misi interaktif, ekstraksi data dinamis, dan pengisian formulir.
176
+ - `diagnostics` — deteksi & jalankan pemeriksaan mutu proyek (script `lint`/`typecheck`/`check`, atau `tsc`/`eslint`) supaya bAIwor memverifikasi pekerjaannya sebelum menyatakan selesai.
177
+ - **Self-Healing Diagnostics Loop** — setelah bAIwor selesai mengedit berkas, sistem otomatis menjalankan pemeriksaan diagnostik (lint/typecheck). Jika ada error syntax atau tipe, model langsung diberi konteks error dan diminta memperbaiki secara otomatis (maksimal 2x retry) sebelum memberikan jawaban akhir. Jika auto-repair gagal, pengguna mendapat peringatan jelas dengan rincian error.
178
+ - `todo_list` — susun rencana tugas untuk pekerjaan besar dan lacak progresnya.
179
+ - `delegate_task` & `ask_user` — orkestrasi subagent (satu tugas atau **mode paralel hingga 6 tugas, 3 berjalan bersamaan**) dan konfirmasi interaktif.
180
+ - Mode paralel cocok untuk eksplorasi/audit independen: setiap subagent Punakawan punya histori, tool, dan laporan terisolasi; hasilnya disintesis kembali ke agen utama.
181
+ - **🔗 Hooks System (Event-Driven Automation)**:
182
+ - Otomatis menjalankan shell command saat event tertentu terjadi: `pre-tool-execute`, `post-tool-execute`, `session-start`, `session-end`.
183
+ - **Pre-hook** bisa memblokir eksekusi tool (misal: validasi command berbahaya sebelum `run_command`).
184
+ - **Post-hook** untuk logging/notifikasi setelah tool selesai (misal: auto-format setelah `edit_file`).
185
+ - Konfigurasi fleksibel di `.baiwor/hooks.json` (per-proyek) atau `~/.baiwor/hooks.json` (global).
186
+ - Kondisi opsional untuk trigger selektif (misal: hanya untuk tool tertentu).
187
+ - Timeout default 30 detik per hook untuk mencegah hang.
188
+ - **🔄 Workflows (Multi-Stage Orchestration)**:
189
+ - Skrip JavaScript untuk orkestrasi multi-agent deterministik dengan fase (pipeline/parallel).
190
+ - API sederhana: `agent()`, `parallel()`, `pipeline()`, `phase()` untuk membangun alur kerja kompleks.
191
+ - Workflow disimpan di `.baiwor/workflows/*.js` dan bisa dijalankan ulang kapan saja.
192
+ - Contoh use case: Review kode → Verifikasi temuan → Generate laporan, semua berjalan paralel per dimensi.
193
+ - Execution log terstruktur untuk debugging dan audit trail.
194
+ - **🎯 Goal/Task Management System**:
195
+ - Structured task tracking dengan dependencies, turn budgets, dan status management.
196
+ - **Goals**: Objective besar dengan optional turn budget untuk kontrol cost.
197
+ - **Tasks**: Unit kerja individual dengan status (pending → in_progress → completed/deleted).
198
+ - **Dependencies**: `blocks`/`blockedBy` untuk urutan eksekusi — task hanya bisa dijalankan jika semua blocker sudah completed.
199
+ - Persistence otomatis ke `.baiwor/goals.json` (project) atau `~/.baiwor/goals.json` (global).
200
+ - API lengkap: `createGoal`, `getGoal`, `updateGoalStatus`, `createTask`, `getTask`, `updateTask`, `addDependency`, `getAvailableTasks`.
201
+ - **🔒 Security Scanning Integration**:
202
+ - **Secret Detection**: Scan hardcoded secrets (API keys, passwords, tokens) di berkas kode dengan pattern matching. Mendeteksi AWS keys, GitHub tokens, JWT, private keys, dan generic secrets.
203
+ - **Dependency Audit**: Wrapper untuk `npm audit` dan `pip-audit` untuk mendeteksi vulnerable dependencies dengan severity levels (critical, high, medium, low).
204
+ - **Auto-redaction**: Secret value otomatis di-redact di laporan (tampilkan hanya 4 karakter pertama).
205
+ - **Skip patterns**: Otomatis skip `node_modules`, `.git`, binary files, dan lock files.
206
+ - Laporan human-readable dengan rekomendasi perbaikan.
207
+ - **⏰ Cron/Scheduled Tasks**:
208
+ - Jadwalkan prompt/perintah untuk dijalankan secara berkala (cron expression) atau one-shot.
209
+ - **Cron expression parser**: 5-field format (minute hour day month weekday) dengan support untuk wildcards (`*`), step values (`*/5`), ranges (`9-17`), dan lists (`0,15,30,45`).
210
+ - **Recurring tasks**: Task berulang sesuai cron schedule.
211
+ - **One-shot tasks**: Task sekali jalan pada waktu tertentu (ScheduleWakeup).
212
+ - **Background scheduler**: Berjalan di background dan trigger task saat waktunya tiba.
213
+ - Persistence ke `~/.baiwor/cron-tasks.json`.
214
+ - **🤖 Custom Agent Creator**:
215
+ - Buat custom agents dengan konfigurasi spesifik: system prompt kustom, tool access yang dibatasi, model/temperature/max_tokens override.
216
+ - **Default agents**: Punakawan Squad (pAItruk 🔭, gAIreng ⚖️, bAIwor 🔨) sudah predefined.
217
+ - **Custom agents**: Disimpan di `.baiwor/agents/*.json` dan bisa dipanggil via `delegate_task`.
218
+ - **Tool filtering**: Otomatis filter tool definitions berdasarkan `allowedTools` agent.
219
+ - API: `createAgent`, `updateAgent`, `deleteAgent`, `getAgent`, `listAgents`, `filterToolsForAgent`.
220
+ - **💬 Messaging Platforms (Telegram & WhatsApp)**:
221
+ - Akses bAIwor Code dari Telegram Bot atau WhatsApp (Baileys) dengan unified API.
222
+ - **Telegram Bot**: Integrasi dengan `node-telegram-bot-api`, long polling, Markdown formatting, typing indicator.
223
+ - **WhatsApp Baileys**: Integrasi dengan `@whiskeysockets/baileys`, QR code authentication, session persistence, auto-reconnect.
224
+ - **PlatformManager**: Abstraction layer untuk multi-platform dengan event-driven message routing.
225
+ - Commands: `/platform start telegram|whatsapp`, `/platform stop`, `/platform status`.
226
+ - Requirements: `npm install node-telegram-bot-api @whiskeysockets/baileys`
227
+ - **🔒 Keamanan Berlapis**:
228
+ - **Sandbox workspace** — akses berkas dibatasi pada folder proyek; area kredensial seperti `.ssh` dan `~/.baiwor` selalu ditolak.
229
+ - **Approval Gate (Y/n)** — perintah berisiko seperti `git push`, `npm publish`, atau penghapusan rekursif akan meminta konfirmasi lebih dulu, dengan default **Tidak**.
230
+
231
+ ---
232
+
233
+ ## 📖 Daftar Perintah
234
+
235
+ ### Di Dalam Mode Interaktif (`baiworcode` / `baiwor`)
236
+ - `/help` — Panduan bantuan & daftar perintah
237
+ - `/permission [safe|auto|plan|yolo]` — Mode izin terpadu (satu konsep, empat level): **safe** (biru: semua perubahan tanya), **auto** (hijau: berkas langsung, perintah berisiko tetap tanya), **plan** (kuning: arsitek read-only), **yolo** (merah: tanpa tanya; kelas deny tetap ditolak). Shift+Tab untuk siklus cepat.
238
+ - `/compact` — Ringkas konteks percakapan untuk menghemat ruang token
239
+ - `/timeline [compact|detail]` — Ganti mode tampilan timeline: compact (satu baris cepat) atau detail (pohon lengkap)
240
+ - `/session [list|resume|delete|clear]` — Kelola sesi percakapan proyek (daftar sesi, lanjutkan, hapus satu, atau hapus semua)
241
+ - `/cd <folder>` — Pindah folder kerja (workspace) aktif secara langsung di dalam sesi
242
+ - `/workspace [folder]` — Lihat status ruang kerja aktif atau ganti folder kerja
243
+ - `/sandbox [status|exec|sync|open|screenshot|pause|resume|key]` — Kelola MicroVM Cloud Sandbox Linux InstaBox
244
+ - `/update [sandbox]` — Perbarui bAIwor Code ke versi terbaru dari GitHub (opsional: sinkronkan ke InstaBox)
245
+ - `/doctor` — Inspeksi kesehatan komprehensif sistem, AI provider, dan sandbox cloud
246
+ - `/skill [list|info]` — Kelola modul keahlian & plugin (`.baiwor/skills` dan bawaan)
247
+ - `/rules` — Tampilkan aturan koding aktif proyek & global (`BAIWORS.md` / `.baiwor/rules`)
248
+ - `/status` — Status konfigurasi, provider aktif, **latency**, dan sesi login
249
+ - `/tinyfish [status|search|fetch|key]` — Kelola integrasi TinyFish Web Intelligence
250
+ - `/mcp [list|refresh]` — Kelola server & tool Model Context Protocol (MCP) eksternal
251
+ - `/model [target]` — Ganti model AI & provider. Tanpa argumen membuka menu; dengan argumen switch langsung: `/model <alias>` atau `/model <provider>/<model>`. Kelola alias: `/model alias list|add|remove`
252
+ - `/provider [target]` — Alias untuk perintah `/model`
253
+ - `/login` — Login ke provider OAuth (Google Gemini)
254
+ - `/logout` — Logout dari sesi provider OAuth
255
+ - `/undo` — Batalkan seluruh perubahan berkas pada putaran (turn) terakhir secara aman tanpa merusak riwayat Git
256
+ - `/clear` — Bersihkan layar & reset riwayat percakapan
257
+ - `/reset` — Reset konteks percakapan tanpa membersihkan layar
258
+ - `/exit` — Keluar dari bAIwor Code (alias: `/q`, `/quit`)
259
+ - `/q` — Keluar dari bAIwor Code (alias `/exit`)
260
+
261
+ ### Perintah Langsung CLI
262
+ - `baiworcode [folder] [prompt...]` — Buka bAIwor di folder proyek tertentu atau jalankan instruksi coding langsung
263
+ - `baiworcode -C, --cwd <folder>` — Tentukan folder kerja (workspace) aktif (alias: `-d`, `--dir`)
264
+ - `baiworcode session [list|resume|delete|clear]` — Kelola riwayat sesi proyek (lihat, lanjutkan, hapus satu, atau hapus semua)
265
+ - `baiworcode skill [action] [target]` — Kelola modul keahlian & plugin (`.baiwor/skills`)
266
+ - `baiworcode rules` — Tampilkan aturan koding aktif proyek & global (`BAIWORS.md` / `.baiwor/rules`)
267
+ - `baiworcode doctor` — Inspeksi kesehatan komprehensif sistem, AI provider, dan sandbox cloud
268
+ - `baiworcode update [sandbox] [--yes]` — Perbarui bAIwor Code ke versi terbaru dari GitHub (verifikasi origin + konfirmasi; `--yes` untuk skrip)
269
+ - `baiworcode status` — Status konfigurasi dan sesi login
270
+ - `baiworcode mcp` — Jalankan bAIwor Code sebagai MCP Server (stdio) untuk berbagai klien MCP eksternal
271
+ - `baiworcode model [target]` — Tanpa argumen: menu kelola model/provider. Dengan argumen: switch langsung (`baiworcode model step`, `baiworcode model stepfun/step-5-preview`, `baiworcode model alias add ...`)
272
+ - `baiworcode provider [target]` — Alias untuk perintah `model`
273
+ - `baiworcode login [provider]` — Login langsung ke provider OAuth
274
+ - `baiworcode logout [provider]` — Logout langsung dari provider OAuth
275
+
276
+ ### ⚡ Model Aliases — Switch Model Sekali Ketik
277
+
278
+ Selain menu interaktif, model & provider bisa di-switch langsung pakai nama pendek (alias) atau short form `provider/model`:
279
+
280
+ ```bash
281
+ baiworcode model step # lewat alias tersimpan
282
+ baiworcode model stepfun/step-5-preview # short form: provider/model
283
+ baiworcode model gemini # alias bawaan (Google Gemini)
284
+ baiworcode model agentik # alias bawaan (Agentik AI)
285
+ ```
286
+
287
+ Kelola alias (tersimpan di `~/.baiwor/config.json`, key `modelAliases`):
288
+
289
+ ```bash
290
+ baiworcode model alias list # lihat semua alias
291
+ baiworcode model alias add step stepfun/step-5-preview # simpan alias baru
292
+ baiworcode model alias remove step # hapus alias
293
+ ```
294
+
295
+ Di dalam mode interaktif, cara pakainya sama — cukup `/model step`, `/model alias list`, dan seterusnya. Alias bentuk panjang (dengan `baseUrl` + `apiKey` sendiri) bisa disunting langsung di `config.json` untuk endpoint kustom yang butuh kredensial terpisah:
296
+
297
+ ```json
298
+ {
299
+ "modelAliases": {
300
+ "theta": {
301
+ "model": "theta-1",
302
+ "provider": "custom",
303
+ "baseUrl": "https://theta.example.com/v1",
304
+ "apiKey": "${THETA_API_KEY}"
305
+ }
306
+ }
307
+ }
308
+ ```
309
+
310
+ > Placeholder `${THETA_API_KEY}` (atau `$VAR` / `key_env`) diekspansi **saat request**, bukan saat disimpan. `config.json` tetap menyimpan placeholder sehingga nilai rahasia tidak ikut tersimpan ke disk.
311
+ >
312
+ > Endpoint yang hanya mendukung **OpenAI Responses API** bisa dipaksa lewat `"apiStyle": "responses"` pada entri `customProviders` di `config.json` (atau `"apiStyle": "chat"` untuk memaksa Chat Completions). Tanpa itu, bAIwor mendeteksi dari URL `/responses` atau nama model.
313
+
314
+ ---
315
+
316
+ ## 🛠️ Daftar Tool (15 Tools)
317
+
318
+ | Tool | Kegunaan |
319
+ |---|---|
320
+ | `read_file` | Membaca isi berkas beserta nomor baris |
321
+ | `write_file` | Membuat berkas baru atau menimpa berkas yang ada |
322
+ | `edit_file` | Mengganti potongan kode (toleran indentasi/spasi; mendukung `replace_all` & `edits` sekaligus) |
323
+ | `patch_file` | Menerapkan unified diff (`git diff`) ke sebuah berkas |
324
+ | `list_directory` | Melihat daftar berkas & folder (mengabaikan `node_modules`) |
325
+ | `search_files` | Mencari teks/fungsi di seluruh proyek, atau mencari nama berkas |
326
+ | `run_command` | Menjalankan perintah terminal di dalam workspace |
327
+ | `webfetch` | Mengambil & mengekstrak URL bersih (didukung **TinyFish** rendering JS & anti-bot, fallback fetch standar) |
328
+ | `websearch` | Mencari di web terstruktur & berperingkat (didukung **TinyFish Search**, fallback DuckDuckGo) |
329
+ | `webautomate` | Menjalankan otomasi browser headless (**TinyFish Web Agent / Mako**) untuk misi interaktif web |
330
+ | `diagnostics` | Menjalankan pemeriksaan mutu proyek (lint/typecheck/tsc/eslint) |
331
+ | `todo_list` | Menyusun dan memperbarui daftar tugas multi-langkah, ditampilkan sebagai checklist |
332
+ | `delegate_task` | Mendelegasikan satu tugas, atau 2-6 tugas **paralel** (maks 3 sekaligus), ke subagent Punakawan terisolasi |
333
+ | `ask_user` | Mengajukan pertanyaan atau mengonfirmasi pilihan interaktif kepada pengguna |
334
+ | `instabox_exec` | Menjalankan perintah di MicroVM Linux InstaBox (aktif bila API key sandbox dikonfigurasi) |
335
+
336
+ ### 🐟 Integrasi TinyFish Web Intelligence
337
+
338
+ bAIwor Code kini terintegrasi secara bawaan dengan ekosistem [TinyFish](https://www.tinyfish.ai/):
339
+ - **Search API**: Pencarian web berperingkat tinggi, terstruktur, dan cepat tanpa risiko bot blocking.
340
+ - **Fetch API**: Mengambil konten web dengan rendering JavaScript lengkap, bypass Cloudflare/anti-bot secara otomatis, dan mengembalikan Markdown bersih yang hemat token LLM.
341
+ - **Web Automate (Mako Agent)**: Mengemudikan browser nyata via perintah alami untuk menyelesaikan alur multi-langkah di web.
342
+ - **Perintah REPL `/tinyfish`**:
343
+ - `/tinyfish status` — Menampilkan status koneksi, API key aktif, dan saldo wallet TinyFish.
344
+ - `/tinyfish search <query>` — Uji pencarian web langsung dari terminal.
345
+ - `/tinyfish fetch <url>` — Uji ekstraksi halaman web langsung dari terminal.
346
+ - `/tinyfish key <apiKey>` — Mengatur atau memperbarui TinyFish API Key.
347
+
348
+ ### 🔌 Model Context Protocol (MCP)
349
+
350
+ bAIwor Code mendukung standar terbuka **Model Context Protocol (MCP)** secara dua arah:
351
+
352
+ #### 1. Sebagai MCP Client (Konsumsi Tool Eksternal)
353
+ bAIwor Code dapat terhubung ke berbagai server MCP (baik via **remote HTTP** maupun **stdio command**), membaca seluruh tools yang diekspos server tersebut, dan langsung menyediakannya ke dalam loop agentic bAIwor.
354
+ - Server dari konfigurasi **global** (`~/.baiwor/config.json` / `~/.baiwor/mcp.json`) aktif otomatis.
355
+ - Server dari berkas **proyek** (`.mcp.json` / `.baiwor/mcp.json`) **tidak dijalankan otomatis**. Saat masuk sesi interaktif, bAIwor menampilkan perintah/URL yang akan dijalankan dan meminta persetujuan. Persetujuan disimpan per folder + hash berkas; jika isi berkas berubah, persetujuan diminta ulang. Di mode non-TTY, server proyek dilewati.
356
+ - Konfigurasi server MCP tersimpan di `~/.baiwor/config.json` (key `"mcpServers"`) atau berkas lokal proyek `.baiwor/mcp.json`:
357
+ ```json
358
+ {
359
+ "mcpServers": {
360
+ "github": {
361
+ "command": "npx",
362
+ "args": ["-y", "@modelcontextprotocol/server-github"],
363
+ "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "..." }
364
+ },
365
+ "custom_remote": {
366
+ "type": "remote",
367
+ "url": "https://mcp.example.com",
368
+ "headers": { "Authorization": "Bearer ..." }
369
+ }
370
+ }
371
+ }
372
+ ```
373
+ - Integrasi TinyFish MCP otomatis aktif bila `tinyfishApiKey` tersedia di konfigurasi bAIwor.
374
+ - **Penyedia bawaan dengan kuota gratis** — cukup isi API key, servernya terdaftar & tersambung otomatis (kunci dikirim lewat header `Authorization`, tidak tersimpan di URL):
375
+ - **Tavily** (`tvly-…`) → [`https://mcp.tavily.com/mcp/`](https://docs.tavily.com/documentation/mcp): `tavily_search`, `tavily_extract`, `tavily_crawl`, `tavily_map`, `tavily_research`. Isi: `/mcp key tavily <tvly-…>` atau env `TAVILY_API_KEY`.
376
+ - **Firecrawl** (`fc-…`) → [`https://mcp.firecrawl.dev/v2/mcp`](https://docs.firecrawl.dev/mcp-server): `firecrawl_scrape`, `firecrawl_search`, `firecrawl_parse`. Isi: `/mcp key firecrawl <fc-…>` atau env `FIRECRAWL_API_KEY`.
377
+ - **Nilai `${VAR}` pada konfigurasi** (di `url`, `headers`, `env`, maupun `args`) diambil dari environment saat baiworcode berjalan, jadi API key tidak perlu tertulis di berkas. Dukungan cadangan: `${VAR:-nilai_cadangan}`. Bila `VAR` kosong dan tidak ada cadangannya, server tersebut dilewati dengan pesan yang menyebut nama variabelnya.
378
+ - **Perintah REPL `/mcp`**:
379
+ - `/mcp list` — Tampilkan seluruh server MCP dan daftar tool dinamis yang terhubung.
380
+ - `/mcp add [nama]` — Wizard tambah server: pilih remote/stdio, isi URL, tempel kunci (input tersembunyi), lalu langsung diuji koneksi. Konfigurasinya ditulis ke `~/.baiwor/config.json`.
381
+ - `/mcp remove <nama>` — Lepas server dari konfigurasi global sekaligus melepas tool-nya.
382
+ - `/mcp key <tavily|firecrawl|tinyfish> [apiKey]` — Isi/lihat API key penyedia bawaan lalu sambungkan ulang.
383
+ - `/mcp refresh` — Muat ulang dan sambungkan kembali seluruh koneksi server MCP.
384
+
385
+ Contoh nyata — email untuk agen lewat [AgentMail](https://docs.agentmail.to/integrations/mcp): jalankan `/mcp add agentmail`, pilih *URL jarak jauh*, isi `https://mcp.agentmail.to/mcp`, pilih header `x-api-key`, lalu tempel kunci dari console.agentmail.to. Setelah tersambung, tool seperti `create_inbox` dan `send_email` langsung bisa diminta dengan bahasa sehari-hari.
386
+
387
+ #### 2. Sebagai MCP Server (Gunakan bAIwor Code di Klien MCP Eksternal)
388
+ bAIwor Code dapat bertindak sebagai server MCP berstandar stdio JSON-RPC 2.0 untuk mengekspos **15 tools bawaan bAIwor Code** ke berbagai aplikasi klien MCP eksternal:
389
+ ```bash
390
+ baiworcode mcp
391
+ ```
392
+ Contoh konfigurasi di file konfigurasi MCP klien Anda:
393
+ ```json
394
+ {
395
+ "mcpServers": {
396
+ "baiworcode": {
397
+ "command": "baiworcode",
398
+ "args": ["mcp"]
399
+ }
400
+ }
401
+ }
402
+ ```
403
+
404
+ ### Contoh Pemakaian Tool Baru
405
+
406
+ Cukup tulis dalam bahasa sehari-hari — bAIwor memilih tool-nya sendiri:
407
+
408
+ | Mau apa | Tulis apa |
409
+ |---|---|
410
+ | Baca dokumentasi | `"buka https://nodejs.org/api/fs.html lalu ringkas bagian promises"` |
411
+ | Cari solusi galat | `"cari di web kenapa fetch gagal dengan 'ECONNRESET' di Node.js"` |
412
+ | Ganti semua sekaligus | `"ganti semua console.log di src/ menjadi logger.info"` |
413
+ | Terapkan patch/diff | `"terapkan patch berikut ke src/utils.js: <tempel unified diff>"` |
414
+ | Periksa sebelum selesai | `"jalankan diagnostics dan perbaiki semua yang gagal"` |
415
+ | Cek tipe & lint | `"cek lint dan tipe proyek ini, lalu rapikan"` |
416
+
417
+ ---
418
+
419
+ ## 🔒 Keamanan
420
+
421
+ bAIwor Code dapat membaca, menulis, dan menjalankan perintah di komputermu. Karena itu ada beberapa lapis pengaman:
422
+
423
+ 1. **Sandbox workspace** — akses berkas dibatasi pada folder proyek (dan folder temp). Pemeriksaan memakai **realpath**, sehingga symlink/junction yang mengarah ke luar workspace (`~/.ssh`, `~/.baiwor`, folder lain) ditolak. Upaya keluar lewat `cd ..`, `cd ./..`, path `..\\`, `$env:USERPROFILE`, dan UNC path juga ditolak. Pencocokannya sadar konteks: **menyebut** `.ssh` di dalam pesan commit tidak diblokir, tetapi **akses berkasnya** tetap ditolak.
424
+ 2. **Approval Gate** — perintah berisiko (`git push`, `npm publish`, `rm -rf`, `git reset --hard`, `rmdir /s`, `Remove-Item -Recurse`, dan sejenisnya) tidak dijalankan sebelum kamu menyetujuinya. Jawaban default adalah **Tidak**.
425
+ 3. **Trust MCP proyek** — server MCP dari `.mcp.json` proyek harus disetujui dulu; perintah yang akan dijalankan ditampilkan sebelum eksekusi. Environment MCP juga dibatasi (allowlist), tidak lagi mewariskan seluruh token/API key.
426
+ 4. **Proteksi web fetch** — alamat loopback/privat/link-local dan hostname yang resolve ke IP privat ditolak (anti-SSRF), redirect divalidasi per hop, ukuran body dibatasi, dan konten web ditandai sebagai tidak tepercaya. Untuk pengembangan lokal, set `BAIWOR_ALLOW_PRIVATE_FETCH=1`.
427
+ 5. **Update terkendali** — `baiwor update` memverifikasi origin repositori resmi, meminta konfirmasi, memakai `git pull --ff-only`, dan memasang dependensi dengan `--ignore-scripts`. Gunakan `--yes` hanya di skrip yang sudah kamu kontrol.
428
+
429
+ > **Catatan:** pengaman perintah bekerja dengan mengenali pola, jadi sifatnya berlapis — bukan isolasi tingkat sistem operasi. Untuk pekerjaan yang sangat sensitif, tetap periksa perintah yang diminta bAIwor sebelum menyetujuinya.
430
+ >
431
+ > **Repo tidak tepercaya:** saat agen diminta menjalankan test/lint/diagnostics, script dari `package.json` proyek ikut dieksekusi. Buka hanya proyek yang kamu percaya, atau jalankan dulu di InstaBox/container terpisah.
432
+
433
+ ---
434
+
435
+ ## 🎁 Bonus Kredit & Komunitas
436
+ Pengguna dan instalasi bAIwor Code berkesempatan mendapatkan bonus token/kredit API melalui partner resmi di [agentik.my.id](https://agentik.my.id) dengan kode kupon **"baiworcode"**.
437
+
438
+ ---
439
+
440
+ ## 🌐 Tentang bAIwor & Website Resmi
441
+
442
+ - **Website Resmi**: [https://baiwor.my.id](https://baiwor.my.id)
443
+ - **Ekosistem & Pembaruan**: Kunjungi [baiwor.my.id](https://baiwor.my.id) untuk dokumentasi lengkap, panduan setup, dan informasi rilis terbaru.
444
+ - **Bonus Token AI**: Dapatkan kuota token tambahan melalui [https://agentik.my.id](https://agentik.my.id) (Kupon: `baiworcode`).
445
+ - **Pengembang**: PT. bAIwor Agentic Indonesia.
446
+
447
+ ---
448
+
449
+ ## 📜 Lisensi
450
+ MIT License © 2026 [bAIwor](https://baiwor.my.id) — lihat berkas [LICENSE](LICENSE).