diff --git a/docs/id/automation/tasks.md b/docs/id/automation/tasks.md
index 6849dce8d..bd05d9190 100644
--- a/docs/id/automation/tasks.md
+++ b/docs/id/automation/tasks.md
@@ -1,46 +1,46 @@
---
read_when:
- Memeriksa pekerjaan latar belakang yang sedang berlangsung atau baru saja selesai
- - Men-debug kegagalan pengiriman untuk eksekusi agen terpisah
- - Memahami bagaimana eksekusi latar belakang berkaitan dengan sesi, Cron, dan Heartbeat
+ - Melakukan debug kegagalan pengiriman untuk eksekusi agen terpisah
+ - Memahami hubungan eksekusi latar belakang dengan sesi, Cron, dan Heartbeat
sidebarTitle: Background tasks
summary: Pelacakan tugas latar belakang untuk eksekusi ACP, subagen, pekerjaan Cron terisolasi, dan operasi CLI
title: Tugas latar belakang
x-i18n:
- generated_at: "2026-05-01T09:22:19Z"
+ generated_at: "2026-05-05T01:44:27Z"
model: gpt-5.5
provider: openai
- source_hash: 8782987a79989264ae3bd1ca4b16755bdfb7e295e4f77933bf3a38c136d837f4
+ source_hash: 60d6ea6178535b19b95d761b8e8b05a665234584ae69852fd21097988aa32991
source_path: automation/tasks.md
workflow: 16
---
-Mencari penjadwalan? Lihat [Automasi dan tugas](/id/automation) untuk memilih mekanisme yang tepat. Halaman ini adalah buku besar aktivitas untuk pekerjaan latar belakang, bukan penjadwal.
+Mencari penjadwalan? Lihat [Otomatisasi dan tugas](/id/automation) untuk memilih mekanisme yang tepat. Halaman ini adalah catatan aktivitas untuk pekerjaan latar belakang, bukan penjadwal.
-Tugas latar belakang melacak pekerjaan yang berjalan **di luar sesi percakapan utama Anda**: proses ACP, pemijahan subagen, eksekusi pekerjaan cron terisolasi, dan operasi yang dimulai oleh CLI.
+Tugas latar belakang melacak pekerjaan yang berjalan **di luar sesi percakapan utama Anda**: eksekusi ACP, pemunculan subagen, eksekusi tugas cron terisolasi, dan operasi yang dimulai dari CLI.
-Tugas **tidak** menggantikan sesi, pekerjaan cron, atau Heartbeat — tugas adalah **buku besar aktivitas** yang mencatat pekerjaan terlepas apa yang terjadi, kapan, dan apakah berhasil.
+Tugas **tidak** menggantikan sesi, tugas cron, atau heartbeat — tugas adalah **catatan aktivitas** yang merekam pekerjaan terpisah apa yang terjadi, kapan, dan apakah berhasil.
-Tidak setiap proses agen membuat tugas. Giliran Heartbeat dan chat interaktif normal tidak membuatnya. Semua eksekusi cron, pemijahan ACP, pemijahan subagen, dan perintah agen CLI membuatnya.
+Tidak setiap eksekusi agen membuat tugas. Giliran Heartbeat dan obrolan interaktif normal tidak. Semua eksekusi cron, pemunculan ACP, pemunculan subagen, dan perintah agen CLI melakukannya.
-## TL;DR
+## Ringkasan
-- Tugas adalah **catatan**, bukan penjadwal — cron dan Heartbeat menentukan _kapan_ pekerjaan berjalan, tugas melacak _apa yang terjadi_.
-- ACP, subagen, semua pekerjaan cron, dan operasi CLI membuat tugas. Giliran Heartbeat tidak.
+- Tugas adalah **catatan**, bukan penjadwal — cron dan heartbeat menentukan _kapan_ pekerjaan berjalan, tugas melacak _apa yang terjadi_.
+- ACP, subagen, semua tugas cron, dan operasi CLI membuat tugas. Giliran Heartbeat tidak.
- Setiap tugas bergerak melalui `queued → running → terminal` (succeeded, failed, timed_out, cancelled, atau lost).
-- Tugas cron tetap aktif selama runtime cron masih memiliki pekerjaan tersebut; jika
- status runtime dalam memori hilang, pemeliharaan tugas terlebih dahulu memeriksa riwayat
- proses cron yang tahan lama sebelum menandai tugas sebagai hilang.
-- Penyelesaian didorong oleh push: pekerjaan terlepas dapat memberi tahu secara langsung atau membangunkan
- sesi/Heartbeat peminta saat selesai, sehingga loop polling status
+- Tugas cron tetap aktif selama runtime cron masih memiliki tugas tersebut; jika
+ status runtime dalam memori hilang, pemeliharaan tugas terlebih dahulu memeriksa
+ riwayat eksekusi cron yang tahan lama sebelum menandai tugas sebagai hilang.
+- Penyelesaian didorong secara push: pekerjaan terpisah dapat memberi tahu secara langsung atau membangunkan
+ sesi/heartbeat peminta saat selesai, sehingga loop polling status
biasanya bukan bentuk yang tepat.
-- Proses cron terisolasi dan penyelesaian subagen melakukan upaya terbaik untuk membersihkan tab/proses browser terlacak bagi sesi anaknya sebelum pembukuan pembersihan akhir.
-- Pengiriman cron terisolasi menekan balasan induk sementara yang usang ketika pekerjaan subagen turunan masih dikuras, dan lebih memilih output turunan akhir ketika output itu tiba sebelum pengiriman.
-- Notifikasi penyelesaian dikirim langsung ke channel atau diantrekan untuk Heartbeat berikutnya.
+- Eksekusi cron terisolasi dan penyelesaian subagen melakukan upaya terbaik untuk membersihkan tab/proses browser yang dilacak untuk sesi anaknya sebelum pembukuan pembersihan akhir.
+- Pengiriman cron terisolasi menekan balasan induk sementara yang sudah basi saat pekerjaan subagen turunan masih dikuras, dan lebih memilih output turunan akhir saat output itu tiba sebelum pengiriman.
+- Notifikasi penyelesaian dikirim langsung ke saluran atau diantrekan untuk heartbeat berikutnya.
- `openclaw tasks list` menampilkan semua tugas; `openclaw tasks audit` memunculkan masalah.
- Catatan terminal disimpan selama 7 hari, lalu dipangkas secara otomatis.
@@ -49,10 +49,10 @@ Tidak setiap proses agen membuat tugas. Giliran Heartbeat dan chat interaktif no
```bash
- # Cantumkan semua tugas (terbaru lebih dulu)
+ # List all tasks (newest first)
openclaw tasks list
- # Filter berdasarkan runtime atau status
+ # Filter by runtime or status
openclaw tasks list --runtime acp
openclaw tasks list --status running
```
@@ -60,26 +60,26 @@ Tidak setiap proses agen membuat tugas. Giliran Heartbeat dan chat interaktif no
```bash
- # Tampilkan detail untuk tugas tertentu (berdasarkan ID, ID proses, atau kunci sesi)
+ # Show details for a specific task (by ID, run ID, or session key)
openclaw tasks show
```
```bash
- # Batalkan tugas yang sedang berjalan (membunuh sesi anak)
+ # Cancel a running task (kills the child session)
openclaw tasks cancel
- # Ubah kebijakan notifikasi untuk sebuah tugas
+ # Change notification policy for a task
openclaw tasks notify state_changes
```
```bash
- # Jalankan audit kesehatan
+ # Run a health audit
openclaw tasks audit
- # Pratinjau atau terapkan pemeliharaan
+ # Preview or apply maintenance
openclaw tasks maintenance
openclaw tasks maintenance --apply
```
@@ -87,7 +87,7 @@ Tidak setiap proses agen membuat tugas. Giliran Heartbeat dan chat interaktif no
```bash
- # Periksa status TaskFlow
+ # Inspect TaskFlow state
openclaw tasks flow list
openclaw tasks flow show
openclaw tasks flow cancel
@@ -98,27 +98,27 @@ Tidak setiap proses agen membuat tugas. Giliran Heartbeat dan chat interaktif no
## Apa yang membuat tugas
| Sumber | Jenis runtime | Kapan catatan tugas dibuat | Kebijakan notifikasi default |
-| ---------------------- | ------------ | ------------------------------------------------------ | --------------------- |
-| Proses latar belakang ACP | `acp` | Memijahkan sesi ACP anak | `done_only` |
-| Orkestrasi subagen | `subagent` | Memijahkan subagen melalui `sessions_spawn` | `done_only` |
-| Pekerjaan cron (semua jenis) | `cron` | Setiap eksekusi cron (sesi utama dan terisolasi) | `silent` |
-| Operasi CLI | `cli` | Perintah `openclaw agent` yang berjalan melalui Gateway | `silent` |
-| Pekerjaan media agen | `cli` | Proses `music_generate`/`video_generate` yang didukung sesi | `silent` |
+| ---------------------- | ------------ | ------------------------------------------------------ | ---------------------------- |
+| Eksekusi latar belakang ACP | `acp` | Memunculkan sesi ACP anak | `done_only` |
+| Orkestrasi subagen | `subagent` | Memunculkan subagen melalui `sessions_spawn` | `done_only` |
+| Tugas cron (semua jenis) | `cron` | Setiap eksekusi cron (sesi utama dan terisolasi) | `silent` |
+| Operasi CLI | `cli` | Perintah `openclaw agent` yang berjalan melalui gateway | `silent` |
+| Tugas media agen | `cli` | Eksekusi `music_generate`/`video_generate` berbasis sesi | `silent` |
- Tugas cron sesi utama menggunakan kebijakan notifikasi `silent` secara default — tugas tersebut membuat catatan untuk pelacakan tetapi tidak menghasilkan notifikasi. Tugas cron terisolasi juga default ke `silent` tetapi lebih terlihat karena berjalan dalam sesinya sendiri.
+ Tugas cron sesi utama menggunakan kebijakan notifikasi `silent` secara default — tugas membuat catatan untuk pelacakan tetapi tidak menghasilkan notifikasi. Tugas cron terisolasi juga default ke `silent` tetapi lebih terlihat karena berjalan dalam sesi mereka sendiri.
- Proses `music_generate` dan `video_generate` yang didukung sesi juga menggunakan kebijakan notifikasi `silent`. Proses tersebut tetap membuat catatan tugas, tetapi penyelesaian dikembalikan ke sesi agen asli sebagai wake internal sehingga agen dapat menulis pesan tindak lanjut dan melampirkan media yang selesai itu sendiri. Jika Anda memilih `tools.media.asyncCompletion.directSend`, penyelesaian `video_generate` asinkron dapat mencoba pengiriman channel langsung terlebih dahulu; penyelesaian `music_generate` asinkron tetap berada pada jalur wake sesi peminta.
+ Eksekusi `music_generate` dan `video_generate` berbasis sesi juga menggunakan kebijakan notifikasi `silent`. Eksekusi tersebut tetap membuat catatan tugas, tetapi penyelesaian dikembalikan ke sesi agen asli sebagai wake internal sehingga agen dapat menulis pesan tindak lanjut dan melampirkan media yang sudah selesai itu sendiri. Penyelesaian grup/saluran mengikuti kebijakan balasan terlihat yang normal, sehingga agen menggunakan alat pesan saat pengiriman sumber memerlukannya.
- Saat tugas `video_generate` yang didukung sesi masih aktif, alat tersebut juga bertindak sebagai pagar pengaman: panggilan `video_generate` berulang dalam sesi yang sama mengembalikan status tugas aktif, bukan memulai pembuatan konkuren kedua. Gunakan `action: "status"` ketika Anda menginginkan pencarian progres/status eksplisit dari sisi agen.
+ Saat tugas `video_generate` berbasis sesi masih aktif, alat tersebut juga bertindak sebagai pembatas: panggilan `video_generate` berulang dalam sesi yang sama mengembalikan status tugas aktif, bukan memulai generasi konkuren kedua. Gunakan `action: "status"` saat Anda menginginkan pencarian progres/status eksplisit dari sisi agen.
- Giliran Heartbeat — sesi utama; lihat [Heartbeat](/id/gateway/heartbeat)
- - Giliran chat interaktif normal
- - Respons `/command` langsung
+ - Giliran obrolan interaktif normal
+ - Respons langsung `/command`
@@ -137,58 +137,58 @@ stateDiagram-v2
running --> lost : session gone > 5 min
```
-| Status | Artinya |
+| Status | Artinya |
| ----------- | -------------------------------------------------------------------------- |
-| `queued` | Dibuat, menunggu agen dimulai |
-| `running` | Giliran agen sedang aktif dieksekusi |
+| `queued` | Dibuat, menunggu agen dimulai |
+| `running` | Giliran agen sedang aktif dieksekusi |
| `succeeded` | Selesai dengan sukses |
-| `failed` | Selesai dengan kesalahan |
-| `timed_out` | Melebihi batas waktu yang dikonfigurasi |
-| `cancelled` | Dihentikan oleh operator melalui `openclaw tasks cancel` |
+| `failed` | Selesai dengan kesalahan |
+| `timed_out` | Melebihi timeout yang dikonfigurasi |
+| `cancelled` | Dihentikan oleh operator melalui `openclaw tasks cancel` |
| `lost` | Runtime kehilangan status pendukung otoritatif setelah masa tenggang 5 menit |
-Transisi terjadi secara otomatis — ketika proses agen terkait berakhir, status tugas diperbarui agar sesuai.
+Transisi terjadi secara otomatis — saat eksekusi agen terkait berakhir, status tugas diperbarui agar sesuai.
-Penyelesaian proses agen bersifat otoritatif untuk catatan tugas aktif. Proses terlepas yang berhasil diselesaikan sebagai `succeeded`, kesalahan proses biasa diselesaikan sebagai `failed`, dan hasil timeout atau abort diselesaikan sebagai `timed_out`. Jika operator sudah membatalkan tugas, atau runtime sudah mencatat status terminal yang lebih kuat seperti `failed`, `timed_out`, atau `lost`, sinyal sukses yang datang belakangan tidak menurunkan status terminal tersebut.
+Penyelesaian eksekusi agen bersifat otoritatif untuk catatan tugas aktif. Eksekusi terpisah yang berhasil diselesaikan sebagai `succeeded`, kesalahan eksekusi biasa diselesaikan sebagai `failed`, dan hasil timeout atau abort diselesaikan sebagai `timed_out`. Jika operator sudah membatalkan tugas, atau runtime sudah mencatat status terminal yang lebih kuat seperti `failed`, `timed_out`, atau `lost`, sinyal sukses yang datang kemudian tidak menurunkan status terminal tersebut.
`lost` sadar runtime:
- Tugas ACP: metadata sesi anak ACP pendukung menghilang.
- Tugas subagen: sesi anak pendukung menghilang dari penyimpanan agen target.
- Tugas cron: runtime cron tidak lagi melacak pekerjaan sebagai aktif dan riwayat
- proses cron yang tahan lama tidak menunjukkan hasil terminal untuk proses tersebut. Audit CLI
- offline tidak memperlakukan status runtime cron dalam prosesnya sendiri yang kosong sebagai otoritas.
-- Tugas CLI: tugas sesi anak terisolasi menggunakan sesi anak; CLI berbasis chat
- menggunakan konteks proses live sebagai gantinya, sehingga baris sesi
- channel/grup/langsung yang tersisa tidak mempertahankannya tetap hidup. Proses
- `openclaw agent` yang didukung Gateway juga diselesaikan dari hasil prosesnya, sehingga proses yang selesai
- tidak tetap aktif sampai penyapu menandainya `lost`.
+ eksekusi cron yang tahan lama tidak menunjukkan hasil terminal untuk eksekusi tersebut. Audit CLI
+ offline tidak memperlakukan status runtime cron dalam prosesnya yang kosong sebagai otoritas.
+- Tugas CLI: tugas sesi anak terisolasi menggunakan sesi anak; tugas CLI
+ berbasis obrolan menggunakan konteks eksekusi langsung sebagai gantinya, sehingga baris sesi
+ saluran/grup/langsung yang tersisa tidak membuatnya tetap hidup. Eksekusi
+ `openclaw agent` berbasis Gateway juga diselesaikan dari hasil eksekusinya, sehingga eksekusi yang selesai
+ tidak tetap aktif sampai sweeper menandainya `lost`.
## Pengiriman dan notifikasi
-Ketika sebuah tugas mencapai status terminal, OpenClaw memberi tahu Anda. Ada dua jalur pengiriman:
+Saat tugas mencapai status terminal, OpenClaw memberi tahu Anda. Ada dua jalur pengiriman:
-**Pengiriman langsung** — jika tugas memiliki target channel (`requesterOrigin`), pesan penyelesaian langsung masuk ke channel itu (Telegram, Discord, Slack, dll.). Untuk penyelesaian subagen, OpenClaw juga mempertahankan perutean thread/topik terikat jika tersedia dan dapat mengisi `to` / akun yang hilang dari rute tersimpan sesi peminta (`lastChannel` / `lastTo` / `lastAccountId`) sebelum menyerah pada pengiriman langsung.
+**Pengiriman langsung** — jika tugas memiliki target saluran (`requesterOrigin`), pesan penyelesaian langsung masuk ke saluran tersebut (Telegram, Discord, Slack, dll.). Untuk penyelesaian subagen, OpenClaw juga mempertahankan perutean thread/topik terikat saat tersedia dan dapat mengisi `to` / akun yang hilang dari rute tersimpan sesi peminta (`lastChannel` / `lastTo` / `lastAccountId`) sebelum menyerah pada pengiriman langsung.
-**Pengiriman yang diantrekan sesi** — jika pengiriman langsung gagal atau tidak ada origin yang ditetapkan, pembaruan diantrekan sebagai event sistem dalam sesi peminta dan muncul pada Heartbeat berikutnya.
+**Pengiriman antrean sesi** — jika pengiriman langsung gagal atau tidak ada origin yang ditetapkan, pembaruan diantrekan sebagai peristiwa sistem dalam sesi peminta dan muncul pada heartbeat berikutnya.
-Penyelesaian tugas memicu wake Heartbeat langsung sehingga Anda melihat hasilnya dengan cepat — Anda tidak perlu menunggu tick Heartbeat terjadwal berikutnya.
+Penyelesaian tugas memicu wake heartbeat langsung sehingga Anda melihat hasilnya dengan cepat — Anda tidak perlu menunggu tick heartbeat terjadwal berikutnya.
-Itu berarti alur kerja biasanya berbasis push: mulai pekerjaan terlepas sekali, lalu biarkan runtime membangunkan atau memberi tahu Anda saat selesai. Poll status tugas hanya ketika Anda memerlukan debugging, intervensi, atau audit eksplisit.
+Artinya alur kerja biasa berbasis push: mulai pekerjaan terpisah sekali, lalu biarkan runtime membangunkan atau memberi tahu Anda saat selesai. Poll status tugas hanya saat Anda perlu debugging, intervensi, atau audit eksplisit.
### Kebijakan notifikasi
Kontrol seberapa banyak yang Anda dengar tentang setiap tugas:
-| Kebijakan | Yang dikirim |
+| Kebijakan | Yang dikirim |
| --------------------- | ----------------------------------------------------------------------- |
| `done_only` (default) | Hanya status terminal (succeeded, failed, dll.) — **ini adalah default** |
-| `state_changes` | Setiap transisi status dan pembaruan progres |
-| `silent` | Tidak ada sama sekali |
+| `state_changes` | Setiap transisi status dan pembaruan progres |
+| `silent` | Tidak ada sama sekali |
-Ubah kebijakan saat tugas berjalan:
+Ubah kebijakan saat tugas sedang berjalan:
```bash
openclaw tasks notify state_changes
@@ -202,7 +202,7 @@ openclaw tasks notify state_changes
openclaw tasks list [--runtime ] [--status ] [--json]
```
- Kolom output: ID Tugas, Jenis, Status, Pengiriman, ID Proses, Sesi Anak, Ringkasan.
+ Kolom output: ID Tugas, Jenis, Status, Pengiriman, ID Eksekusi, Sesi Anak, Ringkasan.
@@ -210,7 +210,7 @@ openclaw tasks notify state_changes
openclaw tasks show
```
- Token pencarian menerima ID tugas, ID proses, atau kunci sesi. Menampilkan catatan lengkap termasuk waktu, status pengiriman, kesalahan, dan ringkasan terminal.
+ Token pencarian menerima ID tugas, ID eksekusi, atau kunci sesi. Menampilkan catatan lengkap termasuk waktu, status pengiriman, kesalahan, dan ringkasan terminal.
@@ -218,7 +218,7 @@ openclaw tasks notify state_changes
openclaw tasks cancel
```
- Untuk tugas ACP dan subagen, ini membunuh sesi anak. Untuk tugas yang dilacak CLI, pembatalan dicatat di registri tugas (tidak ada handle runtime anak terpisah). Status bertransisi ke `cancelled` dan notifikasi pengiriman dikirim jika berlaku.
+ Untuk tugas ACP dan subagen, ini mematikan sesi anak. Untuk tugas yang dilacak CLI, pembatalan dicatat dalam registri tugas (tidak ada handle runtime anak terpisah). Status berubah menjadi `cancelled` dan notifikasi pengiriman dikirim jika berlaku.
@@ -231,59 +231,59 @@ openclaw tasks notify state_changes
openclaw tasks audit [--json]
```
- Memunculkan masalah operasional. Temuan juga muncul di `openclaw status` ketika masalah terdeteksi.
+ Memunculkan masalah operasional. Temuan juga muncul di `openclaw status` saat masalah terdeteksi.
- | Temuan | Tingkat keparahan | Pemicu |
+ | Temuan | Tingkat Keparahan | Pemicu |
| ------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------ |
- | `stale_queued` | warn | Diantrekan selama lebih dari 10 menit |
- | `stale_running` | error | Berjalan selama lebih dari 30 menit |
+ | `stale_queued` | warn | Dalam antrean lebih dari 10 menit |
+ | `stale_running` | error | Berjalan lebih dari 30 menit |
| `lost` | warn/error | Kepemilikan tugas yang didukung runtime menghilang; tugas hilang yang dipertahankan memberi peringatan hingga `cleanupAfter`, lalu menjadi error |
- | `delivery_failed` | warn | Pengiriman gagal dan kebijakan notifikasi bukan `silent` |
- | `missing_cleanup` | warn | Tugas terminal tanpa timestamp pembersihan |
- | `inconsistent_timestamps` | warn | Pelanggaran lini masa (misalnya berakhir sebelum dimulai) |
+ | `delivery_failed` | warn | Pengiriman gagal dan kebijakan notifikasi bukan `silent` |
+ | `missing_cleanup` | warn | Tugas terminal tanpa stempel waktu pembersihan |
+ | `inconsistent_timestamps` | warn | Pelanggaran linimasa (misalnya berakhir sebelum dimulai) |
-
+
```bash
openclaw tasks maintenance [--json]
openclaw tasks maintenance --apply [--json]
```
- Gunakan ini untuk mempratinjau atau menerapkan rekonsiliasi, pencatatan pembersihan, dan pemangkasan untuk tugas serta status Task Flow.
+ Gunakan ini untuk mempratinjau atau menerapkan rekonsiliasi, penandaan pembersihan, dan pemangkasan untuk tugas dan status Task Flow.
Rekonsiliasi sadar runtime:
- - Tugas ACP/subagent memeriksa sesi anak yang mendukungnya.
- - Tugas subagent yang sesi anaknya memiliki tombstone pemulihan-restart ditandai hilang alih-alih diperlakukan sebagai sesi pendukung yang dapat dipulihkan.
- - Tugas Cron memeriksa apakah runtime cron masih memiliki job tersebut, lalu memulihkan status terminal dari log eksekusi cron/status job yang dipersistenkan sebelum kembali ke `lost`. Hanya proses Gateway yang otoritatif untuk kumpulan job aktif cron dalam memori; audit CLI offline menggunakan riwayat tahan lama tetapi tidak menandai tugas cron hilang semata-mata karena Set lokal tersebut kosong.
- - Tugas CLI yang didukung chat memeriksa konteks eksekusi live pemiliknya, bukan hanya baris sesi chat.
+ - Tugas ACP/subagen memeriksa sesi anak yang mendukungnya.
+ - Tugas subagen yang sesi anaknya memiliki tombstone pemulihan-mulai-ulang ditandai hilang, bukan diperlakukan sebagai sesi pendukung yang dapat dipulihkan.
+ - Tugas Cron memeriksa apakah runtime cron masih memiliki pekerjaan tersebut, lalu memulihkan status terminal dari log eksekusi cron/status pekerjaan yang dipersistenkan sebelum kembali ke `lost`. Hanya proses Gateway yang otoritatif untuk set pekerjaan aktif cron dalam memori; audit CLI offline menggunakan riwayat tahan lama tetapi tidak menandai tugas cron sebagai hilang hanya karena Set lokal itu kosong.
+ - Tugas CLI yang didukung chat memeriksa konteks live run pemiliknya, bukan hanya baris sesi chat.
Pembersihan penyelesaian juga sadar runtime:
- - Penyelesaian subagent berupaya sebaik mungkin menutup tab/proses browser yang dilacak untuk sesi anak sebelum pembersihan pengumuman berlanjut.
- - Penyelesaian cron terisolasi berupaya sebaik mungkin menutup tab/proses browser yang dilacak untuk sesi cron sebelum eksekusi sepenuhnya dibongkar.
- - Pengiriman cron terisolasi menunggu tindak lanjut subagent turunan bila perlu dan menekan teks pengakuan induk yang basi alih-alih mengumumkannya.
- - Pengiriman penyelesaian subagent mengutamakan teks asisten terbaru yang terlihat; jika kosong, ia kembali ke teks tool/toolResult terbaru yang telah disanitasi, dan eksekusi panggilan tool yang hanya timeout dapat diringkas menjadi ringkasan kemajuan parsial singkat. Eksekusi terminal yang gagal mengumumkan status kegagalan tanpa memutar ulang teks balasan yang ditangkap.
- - Kegagalan pembersihan tidak menyamarkan hasil tugas yang sebenarnya.
+ - Penyelesaian subagen menutup tab/proses browser yang dilacak untuk sesi anak secara best-effort sebelum pembersihan pengumuman berlanjut.
+ - Penyelesaian cron terisolasi menutup tab/proses browser yang dilacak untuk sesi cron secara best-effort sebelum eksekusi sepenuhnya dibongkar.
+ - Pengiriman cron terisolasi menunggu tindak lanjut subagen turunan bila perlu dan menekan teks pengakuan induk yang basi alih-alih mengumumkannya.
+ - Pengiriman penyelesaian subagen memilih teks asisten terlihat terbaru; jika kosong, ia kembali ke teks tool/toolResult terbaru yang telah disanitasi, dan eksekusi panggilan alat yang hanya timeout dapat diringkas menjadi ringkasan progres parsial singkat. Eksekusi terminal yang gagal mengumumkan status kegagalan tanpa memutar ulang teks balasan yang tertangkap.
+ - Kegagalan pembersihan tidak menutupi hasil tugas yang sebenarnya.
-
+
```bash
openclaw tasks flow list [--status ] [--json]
openclaw tasks flow show [--json]
openclaw tasks flow cancel
```
- Gunakan ini ketika Task Flow yang mengorkestrasi adalah hal yang Anda pedulikan, bukan satu catatan tugas latar belakang individual.
+ Gunakan ini ketika Task Flow pengorkestrasi adalah hal yang Anda pedulikan, bukan satu catatan tugas latar belakang individual.
## Papan tugas chat (`/tasks`)
-Gunakan `/tasks` di sesi chat mana pun untuk melihat tugas latar belakang yang tertaut ke sesi tersebut. Papan menampilkan tugas aktif dan yang baru selesai beserta runtime, status, waktu, dan detail kemajuan atau error.
+Gunakan `/tasks` di sesi chat mana pun untuk melihat tugas latar belakang yang ditautkan ke sesi tersebut. Papan menampilkan tugas aktif dan yang baru saja selesai beserta runtime, status, waktu, dan detail progres atau error.
-Ketika sesi saat ini tidak memiliki tugas tertaut yang terlihat, `/tasks` kembali ke jumlah tugas lokal agen sehingga Anda tetap mendapat gambaran umum tanpa membocorkan detail sesi lain.
+Ketika sesi saat ini tidak memiliki tugas tertaut yang terlihat, `/tasks` kembali ke jumlah tugas lokal agen sehingga Anda tetap mendapatkan ikhtisar tanpa membocorkan detail sesi lain.
Untuk ledger operator lengkap, gunakan CLI: `openclaw tasks list`.
@@ -297,15 +297,15 @@ Tasks: 3 queued · 2 running · 1 issues
Ringkasan melaporkan:
-- **active** — jumlah `queued` + `running`
-- **failures** — jumlah `failed` + `timed_out` + `lost`
-- **byRuntime** — rincian menurut `acp`, `subagent`, `cron`, `cli`
+- **aktif** — jumlah `queued` + `running`
+- **kegagalan** — jumlah `failed` + `timed_out` + `lost`
+- **byRuntime** — perincian menurut `acp`, `subagent`, `cron`, `cli`
-Baik `/status` maupun tool `session_status` menggunakan snapshot tugas yang sadar pembersihan: tugas aktif diutamakan, baris selesai yang basi disembunyikan, dan kegagalan terbaru hanya muncul ketika tidak ada pekerjaan aktif yang tersisa. Ini menjaga kartu status tetap berfokus pada hal yang penting saat ini.
+Baik `/status` maupun alat `session_status` menggunakan snapshot tugas yang sadar pembersihan: tugas aktif diprioritaskan, baris selesai yang basi disembunyikan, dan kegagalan terbaru hanya ditampilkan ketika tidak ada pekerjaan aktif yang tersisa. Ini menjaga kartu status tetap fokus pada hal yang penting saat ini.
## Penyimpanan dan pemeliharaan
-### Lokasi tugas berada
+### Tempat tugas berada
Catatan tugas dipersistenkan di SQLite pada:
@@ -313,8 +313,8 @@ Catatan tugas dipersistenkan di SQLite pada:
$OPENCLAW_STATE_DIR/tasks/runs.sqlite
```
-Registry dimuat ke memori saat gateway dimulai dan menyinkronkan penulisan ke SQLite agar tahan lama lintas restart.
-Gateway menjaga log write-ahead SQLite tetap terbatas dengan menggunakan ambang autocheckpoint default SQLite plus checkpoint `TRUNCATE` berkala dan saat shutdown.
+Registry dimuat ke memori saat Gateway dimulai dan menyinkronkan penulisan ke SQLite untuk ketahanan lintas mulai ulang.
+Gateway menjaga log write-ahead SQLite tetap terbatas dengan menggunakan ambang batas autocheckpoint default SQLite ditambah checkpoint `TRUNCATE` berkala dan saat shutdown.
### Pemeliharaan otomatis
@@ -322,13 +322,13 @@ Sweeper berjalan setiap **60 detik** dan menangani empat hal:
- Memeriksa apakah tugas aktif masih memiliki dukungan runtime otoritatif. Tugas ACP/subagent menggunakan status sesi anak, tugas cron menggunakan kepemilikan job aktif, dan tugas CLI yang didukung chat menggunakan konteks eksekusi pemilik. Jika status pendukung tersebut hilang selama lebih dari 5 menit, tugas ditandai `lost`.
+ Memeriksa apakah tugas aktif masih memiliki dukungan runtime otoritatif. Tugas ACP/subagen menggunakan status sesi anak, tugas cron menggunakan kepemilikan pekerjaan aktif, dan tugas CLI yang didukung chat menggunakan konteks eksekusi pemilik. Jika status pendukung itu hilang selama lebih dari 5 menit, tugas ditandai `lost`.
- Menutup sesi ACP one-shot milik induk yang terminal atau yatim, dan menutup sesi ACP persisten yang terminal atau yatim yang basi hanya ketika tidak ada binding percakapan aktif yang tersisa.
+ Menutup sesi ACP one-shot terminal atau yatim milik induk, dan menutup sesi ACP persisten terminal atau yatim yang basi hanya ketika tidak ada binding percakapan aktif yang tersisa.
-
- Menetapkan timestamp `cleanupAfter` pada tugas terminal (endedAt + 7 hari). Selama retensi, tugas hilang masih muncul dalam audit sebagai peringatan; setelah `cleanupAfter` kedaluwarsa atau ketika metadata pembersihan hilang, tugas tersebut menjadi error.
+
+ Menetapkan stempel waktu `cleanupAfter` pada tugas terminal (endedAt + 7 hari). Selama retensi, tugas hilang masih muncul dalam audit sebagai peringatan; setelah `cleanupAfter` kedaluwarsa atau ketika metadata pembersihan hilang, tugas tersebut menjadi error.
Menghapus catatan yang melewati tanggal `cleanupAfter`.
@@ -339,32 +339,32 @@ Sweeper berjalan setiap **60 detik** dan menangani empat hal:
**Retensi:** catatan tugas terminal disimpan selama **7 hari**, lalu dipangkas otomatis. Tidak perlu konfigurasi.
-## Bagaimana tugas berhubungan dengan sistem lain
+## Bagaimana tugas terkait dengan sistem lain
- [Task Flow](/id/automation/taskflow) adalah lapisan orkestrasi alur di atas tugas latar belakang. Satu alur dapat mengoordinasikan beberapa tugas selama masa hidupnya menggunakan mode sinkronisasi terkelola atau tercermin. Gunakan `openclaw tasks` untuk memeriksa catatan tugas individual dan `openclaw tasks flow` untuk memeriksa alur yang mengorkestrasi.
+ [Task Flow](/id/automation/taskflow) adalah lapisan orkestrasi alur di atas tugas latar belakang. Satu alur dapat mengoordinasikan beberapa tugas selama masa pakainya menggunakan mode sinkronisasi terkelola atau tercermin. Gunakan `openclaw tasks` untuk memeriksa catatan tugas individual dan `openclaw tasks flow` untuk memeriksa alur pengorkestrasi.
Lihat [Task Flow](/id/automation/taskflow) untuk detail.
- **Definisi** job cron berada di `~/.openclaw/cron/jobs.json`; status eksekusi runtime berada di sebelahnya dalam `~/.openclaw/cron/jobs-state.json`. **Setiap** eksekusi cron membuat catatan tugas — baik sesi utama maupun terisolasi. Tugas cron sesi utama secara default menggunakan kebijakan notifikasi `silent` sehingga tugas dilacak tanpa menghasilkan notifikasi.
+ **Definisi** pekerjaan cron berada di `~/.openclaw/cron/jobs.json`; status eksekusi runtime berada di sebelahnya dalam `~/.openclaw/cron/jobs-state.json`. **Setiap** eksekusi cron membuat catatan tugas — baik sesi utama maupun terisolasi. Tugas cron sesi utama secara default menggunakan kebijakan notifikasi `silent` sehingga tugas tersebut dilacak tanpa menghasilkan notifikasi.
- Lihat [Job Cron](/id/automation/cron-jobs).
+ Lihat [Cron Jobs](/id/automation/cron-jobs).
-
- Eksekusi Heartbeat adalah giliran sesi utama — eksekusi tersebut tidak membuat catatan tugas. Ketika tugas selesai, tugas dapat memicu wake Heartbeat sehingga Anda segera melihat hasilnya.
+
+ Eksekusi Heartbeat adalah giliran sesi utama — eksekusi tersebut tidak membuat catatan tugas. Ketika tugas selesai, tugas dapat memicu pembangkitan heartbeat sehingga Anda melihat hasilnya dengan segera.
Lihat [Heartbeat](/id/gateway/heartbeat).
- Tugas dapat merujuk ke `childSessionKey` (tempat pekerjaan berjalan) dan `requesterSessionKey` (pihak yang memulainya). Sesi adalah konteks percakapan; tugas adalah pelacakan aktivitas di atasnya.
+ Tugas dapat mereferensikan `childSessionKey` (tempat pekerjaan berjalan) dan `requesterSessionKey` (yang memulainya). Sesi adalah konteks percakapan; tugas adalah pelacakan aktivitas di atasnya.
- `runId` milik tugas tertaut ke eksekusi agen yang melakukan pekerjaan. Peristiwa siklus hidup agen (mulai, selesai, error) secara otomatis memperbarui status tugas — Anda tidak perlu mengelola siklus hidup secara manual.
+ `runId` milik tugas ditautkan ke eksekusi agen yang melakukan pekerjaan. Peristiwa siklus hidup agen (mulai, selesai, error) secara otomatis memperbarui status tugas — Anda tidak perlu mengelola siklus hidup secara manual.
diff --git a/docs/id/channels/slack.md b/docs/id/channels/slack.md
index 28d40ccc2..ece49fd98 100644
--- a/docs/id/channels/slack.md
+++ b/docs/id/channels/slack.md
@@ -1,47 +1,204 @@
---
read_when:
- - Menyiapkan Slack atau memecahkan masalah mode soket/HTTP Slack
-summary: Pengaturan Slack dan perilaku runtime (Mode Socket + URL Permintaan HTTP)
+ - Menyiapkan Slack atau men-debug mode soket/HTTP Slack
+summary: Penyiapan Slack dan perilaku saat berjalan (Mode Soket + URL Permintaan HTTP)
title: Slack
x-i18n:
- generated_at: "2026-05-04T07:02:48Z"
+ generated_at: "2026-05-05T01:44:11Z"
model: gpt-5.5
provider: openai
- source_hash: d4a91fc1ae5f1e03f714308be54e164ef204809e74efabed8dc75c3035c14228
+ source_hash: 9a8e1cbfd3d99bfc24d79b56ee762d1ab399402391b241ff40698249b0828008
source_path: channels/slack.md
workflow: 16
---
-Siap untuk produksi bagi DM dan saluran melalui integrasi aplikasi Slack. Mode default adalah Socket Mode; URL Permintaan HTTP juga didukung.
+Siap produksi untuk DM dan channel melalui integrasi aplikasi Slack. Mode bawaan adalah Socket Mode; URL HTTP Request juga didukung.
-
- DM Slack secara default menggunakan mode penyandingan.
+
+ DM Slack secara bawaan menggunakan mode pairing.
-
- Perilaku perintah native dan katalog perintah.
+
+ Perilaku command native dan katalog command.
-
- Diagnostik lintas saluran dan playbook perbaikan.
+
+ Diagnostik lintas-channel dan playbook perbaikan.
+## Memilih Socket Mode atau URL HTTP Request
+
+Kedua transport siap produksi dan mencapai paritas fitur untuk olah pesan, slash command, App Home, dan interaktivitas. Pilih berdasarkan bentuk deployment, bukan fitur.
+
+| Pertimbangan | Socket Mode (bawaan) | URL HTTP Request |
+| ---------------------------- | ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
+| URL Gateway publik | Tidak diperlukan | Diperlukan (DNS, TLS, proxy balik atau tunnel) |
+| Jaringan keluar | WSS keluar ke `wss-primary.slack.com` harus dapat dijangkau | Tidak ada WS keluar; hanya HTTPS masuk |
+| Token yang diperlukan | Token bot (`xoxb-...`) + App-Level Token (`xapp-...`) dengan `connections:write` | Token bot (`xoxb-...`) + Signing Secret |
+| Laptop dev / di balik firewall | Berfungsi apa adanya | Memerlukan tunnel publik (ngrok, Cloudflare Tunnel, Tailscale Funnel) atau Gateway staging |
+| Penskalaan horizontal | Satu sesi Socket Mode per aplikasi per host; beberapa Gateway memerlukan aplikasi Slack terpisah | Handler POST tanpa state; beberapa replika Gateway dapat berbagi satu aplikasi di balik load balancer |
+| Multi-akun pada satu Gateway | Didukung; setiap akun membuka WS-nya sendiri | Didukung; setiap akun memerlukan `webhookPath` unik (bawaan `/slack/events`) agar registrasi tidak bertabrakan |
+| Transport slash command | Dikirim melalui koneksi WS; `slash_commands[].url` diabaikan | Slack melakukan POST ke `slash_commands[].url`; field diperlukan agar command dikirim |
+| Penandatanganan request | Tidak digunakan (auth adalah App-Level Token) | Slack menandatangani setiap request; OpenClaw memverifikasi dengan `signingSecret` |
+| Pemulihan saat koneksi terputus | SDK Slack otomatis terhubung ulang; tuning transport pong-timeout Gateway berlaku | Tidak ada koneksi persisten yang bisa terputus; percobaan ulang dilakukan per request dari Slack |
+
+
+ **Pilih Socket Mode** untuk host Gateway tunggal, laptop dev, dan jaringan on-prem yang dapat menjangkau `*.slack.com` keluar tetapi tidak dapat menerima HTTPS masuk.
+
+**Pilih URL HTTP Request** saat menjalankan beberapa replika Gateway di balik load balancer, saat WSS keluar diblokir tetapi HTTPS masuk diizinkan, atau saat Anda sudah menghentikan Webhook Slack di proxy balik.
+
+
## Penyiapan cepat
-
- Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
+
+ Buka [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App** → **From a manifest** → pilih workspace Anda → tempel salah satu manifest di bawah → **Next** → **Create**.
- - pilih **from a manifest** dan pilih workspace untuk aplikasi Anda
- - tempel [contoh manifest](#manifest-and-scope-checklist) di bawah ini dan lanjutkan untuk membuat
- - buat **App-Level Token** (`xapp-...`) dengan `connections:write`
- - instal aplikasi dan salin **Bot Token** (`xoxb-...`) yang ditampilkan
+
+
+```json Recommended
+{
+ "display_information": {
+ "name": "OpenClaw",
+ "description": "Slack connector for OpenClaw"
+ },
+ "features": {
+ "bot_user": { "display_name": "OpenClaw", "always_online": true },
+ "app_home": {
+ "home_tab_enabled": true,
+ "messages_tab_enabled": true,
+ "messages_tab_read_only_enabled": false
+ },
+ "slash_commands": [
+ {
+ "command": "/openclaw",
+ "description": "Send a message to OpenClaw",
+ "should_escape": false
+ }
+ ]
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": [
+ "app_mentions:read",
+ "assistant:write",
+ "channels:history",
+ "channels:read",
+ "chat:write",
+ "commands",
+ "emoji:read",
+ "files:read",
+ "files:write",
+ "groups:history",
+ "groups:read",
+ "im:history",
+ "im:read",
+ "im:write",
+ "mpim:history",
+ "mpim:read",
+ "mpim:write",
+ "pins:read",
+ "pins:write",
+ "reactions:read",
+ "reactions:write",
+ "usergroups:read",
+ "users:read"
+ ]
+ }
+ },
+ "settings": {
+ "socket_mode_enabled": true,
+ "event_subscriptions": {
+ "bot_events": [
+ "app_home_opened",
+ "app_mention",
+ "channel_rename",
+ "member_joined_channel",
+ "member_left_channel",
+ "message.channels",
+ "message.groups",
+ "message.im",
+ "message.mpim",
+ "pin_added",
+ "pin_removed",
+ "reaction_added",
+ "reaction_removed"
+ ]
+ }
+ }
+}
+```
+
+```json Minimal
+{
+ "display_information": {
+ "name": "OpenClaw",
+ "description": "Slack connector for OpenClaw"
+ },
+ "features": {
+ "bot_user": { "display_name": "OpenClaw", "always_online": true },
+ "app_home": {
+ "home_tab_enabled": true,
+ "messages_tab_enabled": true,
+ "messages_tab_read_only_enabled": false
+ },
+ "slash_commands": [
+ {
+ "command": "/openclaw",
+ "description": "Send a message to OpenClaw",
+ "should_escape": false
+ }
+ ]
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": [
+ "app_mentions:read",
+ "assistant:write",
+ "channels:history",
+ "channels:read",
+ "chat:write",
+ "commands",
+ "groups:history",
+ "groups:read",
+ "im:history",
+ "im:read",
+ "im:write",
+ "users:read"
+ ]
+ }
+ },
+ "settings": {
+ "socket_mode_enabled": true,
+ "event_subscriptions": {
+ "bot_events": [
+ "app_home_opened",
+ "app_mention",
+ "message.channels",
+ "message.groups",
+ "message.im"
+ ]
+ }
+ }
+}
+```
+
+
+
+
+ **Direkomendasikan** cocok dengan set fitur lengkap Plugin Slack bawaan: App Home, slash command, file, reaksi, pin, DM grup, serta pembacaan emoji/usergroup. Pilih **Minimal** saat kebijakan workspace membatasi scope — ini mencakup DM, riwayat channel/grup, mention, dan slash command tetapi mengecualikan file, reaksi, pin, DM grup (`mpim:*`), `emoji:read`, dan `usergroups:read`. Lihat [Checklist manifest dan scope](#manifest-and-scope-checklist) untuk alasan per-scope dan opsi tambahan seperti slash command ekstra.
+
+
+ Setelah Slack membuat aplikasi:
+
+ - **Basic Information → App-Level Tokens → Generate Token and Scopes**: tambahkan `connections:write`, simpan, salin nilai `xapp-...`.
+ - **Install App → Install to Workspace**: salin Bot User OAuth Token `xoxb-...`.
-
+
Penyiapan SecretRef yang direkomendasikan:
@@ -64,7 +221,7 @@ openclaw config patch --file ./slack.socket.patch.json5 --dry-run
openclaw config patch --file ./slack.socket.patch.json5
```
- Fallback env (hanya akun default):
+ Fallback env (hanya akun bawaan):
```bash
SLACK_APP_TOKEN=xapp-...
@@ -73,7 +230,7 @@ SLACK_BOT_TOKEN=xoxb-...
-
+
```bash
openclaw gateway
@@ -84,19 +241,170 @@ openclaw gateway
-
+
-
- Di pengaturan aplikasi Slack, tekan tombol **[Create New App](https://api.slack.com/apps/new)**:
+
+ Buka [api.slack.com/apps](https://api.slack.com/apps/new) → **Create New App** → **From a manifest** → pilih workspace Anda → tempel salah satu manifest di bawah → ganti `https://gateway-host.example.com/slack/events` dengan URL Gateway publik Anda → **Next** → **Create**.
- - pilih **from a manifest** dan pilih workspace untuk aplikasi Anda
- - tempel [contoh manifest](#manifest-and-scope-checklist) dan perbarui URL sebelum membuat
- - simpan **Signing Secret** untuk verifikasi permintaan
- - instal aplikasi dan salin **Bot Token** (`xoxb-...`) yang ditampilkan
+
+
+```json Recommended
+{
+ "display_information": {
+ "name": "OpenClaw",
+ "description": "Slack connector for OpenClaw"
+ },
+ "features": {
+ "bot_user": { "display_name": "OpenClaw", "always_online": true },
+ "app_home": {
+ "home_tab_enabled": true,
+ "messages_tab_enabled": true,
+ "messages_tab_read_only_enabled": false
+ },
+ "slash_commands": [
+ {
+ "command": "/openclaw",
+ "description": "Send a message to OpenClaw",
+ "should_escape": false,
+ "url": "https://gateway-host.example.com/slack/events"
+ }
+ ]
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": [
+ "app_mentions:read",
+ "assistant:write",
+ "channels:history",
+ "channels:read",
+ "chat:write",
+ "commands",
+ "emoji:read",
+ "files:read",
+ "files:write",
+ "groups:history",
+ "groups:read",
+ "im:history",
+ "im:read",
+ "im:write",
+ "mpim:history",
+ "mpim:read",
+ "mpim:write",
+ "pins:read",
+ "pins:write",
+ "reactions:read",
+ "reactions:write",
+ "usergroups:read",
+ "users:read"
+ ]
+ }
+ },
+ "settings": {
+ "event_subscriptions": {
+ "request_url": "https://gateway-host.example.com/slack/events",
+ "bot_events": [
+ "app_home_opened",
+ "app_mention",
+ "channel_rename",
+ "member_joined_channel",
+ "member_left_channel",
+ "message.channels",
+ "message.groups",
+ "message.im",
+ "message.mpim",
+ "pin_added",
+ "pin_removed",
+ "reaction_added",
+ "reaction_removed"
+ ]
+ },
+ "interactivity": {
+ "is_enabled": true,
+ "request_url": "https://gateway-host.example.com/slack/events",
+ "message_menu_options_url": "https://gateway-host.example.com/slack/events"
+ }
+ }
+}
+```
+
+```json Minimal
+{
+ "display_information": {
+ "name": "OpenClaw",
+ "description": "Slack connector for OpenClaw"
+ },
+ "features": {
+ "bot_user": { "display_name": "OpenClaw", "always_online": true },
+ "app_home": {
+ "home_tab_enabled": true,
+ "messages_tab_enabled": true,
+ "messages_tab_read_only_enabled": false
+ },
+ "slash_commands": [
+ {
+ "command": "/openclaw",
+ "description": "Send a message to OpenClaw",
+ "should_escape": false,
+ "url": "https://gateway-host.example.com/slack/events"
+ }
+ ]
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": [
+ "app_mentions:read",
+ "assistant:write",
+ "channels:history",
+ "channels:read",
+ "chat:write",
+ "commands",
+ "groups:history",
+ "groups:read",
+ "im:history",
+ "im:read",
+ "im:write",
+ "users:read"
+ ]
+ }
+ },
+ "settings": {
+ "event_subscriptions": {
+ "request_url": "https://gateway-host.example.com/slack/events",
+ "bot_events": [
+ "app_home_opened",
+ "app_mention",
+ "message.channels",
+ "message.groups",
+ "message.im"
+ ]
+ },
+ "interactivity": {
+ "is_enabled": true,
+ "request_url": "https://gateway-host.example.com/slack/events",
+ "message_menu_options_url": "https://gateway-host.example.com/slack/events"
+ }
+ }
+}
+```
+
+
+
+
+ **Direkomendasikan** cocok dengan set fitur lengkap Plugin Slack bawaan; **Minimal** menghapus file, reaksi, pin, group-DM (`mpim:*`), `emoji:read`, dan `usergroups:read` untuk workspace yang restriktif. Lihat [Daftar periksa manifes dan cakupan](#manifest-and-scope-checklist) untuk alasan per cakupan.
+
+
+
+ Tiga kolom URL (`slash_commands[].url`, `event_subscriptions.request_url`, dan `interactivity.request_url` / `message_menu_options_url`) semuanya mengarah ke endpoint OpenClaw yang sama. Skema manifes Slack mengharuskan semuanya diberi nama secara terpisah, tetapi OpenClaw merutekan berdasarkan jenis payload sehingga satu `webhookPath` (default `/slack/events`) sudah cukup. Perintah slash tanpa `slash_commands[].url` akan diam-diam tidak melakukan apa pun dalam mode HTTP.
+
+
+ Setelah Slack membuat aplikasi:
+
+ - **Basic Information → App Credentials**: salin **Signing Secret** untuk verifikasi permintaan.
+ - **Install App → Install to Workspace**: salin Token OAuth Pengguna Bot `xoxb-...`.
-
+
Penyiapan SecretRef yang direkomendasikan:
@@ -123,12 +431,12 @@ openclaw config patch --file ./slack.http.patch.json5
Gunakan jalur Webhook unik untuk HTTP multi-akun
- Beri setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak bertabrakan.
+ Berikan setiap akun `webhookPath` yang berbeda (default `/slack/events`) agar pendaftaran tidak bertabrakan.
-
+
```bash
openclaw gateway
@@ -140,9 +448,9 @@ openclaw gateway
-## Penyesuaian transport Socket Mode
+## Penyetelan transport Mode Socket
-OpenClaw menetapkan batas waktu pong klien Slack SDK ke 15 detik secara default untuk Socket Mode. Ganti pengaturan transport hanya saat Anda membutuhkan penyesuaian khusus workspace atau host:
+OpenClaw menetapkan timeout pong klien SDK Slack ke 15 detik secara default untuk Mode Socket. Timpa pengaturan transport hanya saat Anda memerlukan penyetelan khusus workspace atau host:
```json5
{
@@ -159,13 +467,13 @@ OpenClaw menetapkan batas waktu pong klien Slack SDK ke 15 detik secara default
}
```
-Gunakan ini hanya untuk workspace Socket Mode yang mencatat batas waktu websocket pong/server-ping Slack atau berjalan pada host dengan starvation event-loop yang diketahui. `clientPingTimeout` adalah waktu tunggu pong setelah SDK mengirim ping klien; `serverPingTimeout` adalah waktu tunggu untuk ping server Slack. Pesan dan event aplikasi tetap merupakan status aplikasi, bukan sinyal keaktifan transport.
+Gunakan ini hanya untuk workspace Mode Socket yang mencatat timeout pong websocket/ping-server Slack atau berjalan pada host dengan kelaparan event-loop yang diketahui. `clientPingTimeout` adalah waktu tunggu pong setelah SDK mengirim ping klien; `serverPingTimeout` adalah waktu tunggu untuk ping server Slack. Pesan dan peristiwa aplikasi tetap merupakan status aplikasi, bukan sinyal keaktifan transport.
-## Checklist manifest dan scope
+## Daftar periksa manifes dan cakupan
-Manifest dasar aplikasi Slack sama untuk Socket Mode dan URL Permintaan HTTP. Hanya blok `settings` (dan `url` perintah slash) yang berbeda.
+Manifes dasar aplikasi Slack sama untuk Mode Socket dan URL Permintaan HTTP. Hanya blok `settings` (dan `url` perintah slash) yang berbeda.
-Manifest dasar (default Socket Mode):
+Manifes dasar (default Mode Socket):
```json
{
@@ -282,21 +590,21 @@ Untuk **mode URL Permintaan HTTP**, ganti `settings` dengan varian HTTP dan tamb
}
```
-### Pengaturan manifest tambahan
+### Pengaturan manifes tambahan
Tampilkan fitur berbeda yang memperluas default di atas.
-Manifest default mengaktifkan tab **Home** Slack App Home dan berlangganan ke `app_home_opened`. Saat anggota workspace membuka tab Home, OpenClaw menerbitkan tampilan Home default yang aman dengan `views.publish`; tidak ada payload percakapan atau konfigurasi privat yang disertakan. Tab **Messages** tetap diaktifkan untuk DM Slack.
+Manifes default mengaktifkan tab **Home** di Slack App Home dan berlangganan `app_home_opened`. Saat anggota workspace membuka tab Home, OpenClaw menerbitkan tampilan Home default yang aman dengan `views.publish`; tidak ada payload percakapan atau konfigurasi privat yang disertakan. Tab **Messages** tetap diaktifkan untuk DM Slack.
-
+
- Beberapa [perintah slash native](#commands-and-slash-behavior) dapat digunakan sebagai pengganti satu perintah terkonfigurasi dengan beberapa nuansa:
+ Beberapa [perintah slash native](#commands-and-slash-behavior) dapat digunakan sebagai pengganti satu perintah terkonfigurasi dengan nuansa berikut:
- Gunakan `/agentstatus` alih-alih `/status` karena perintah `/status` dicadangkan.
- Tidak lebih dari 25 perintah slash dapat tersedia sekaligus.
- Ganti bagian `features.slash_commands` Anda yang ada dengan subset [perintah yang tersedia](/id/tools/slash-commands#command-list):
+ Ganti bagian `features.slash_commands` yang ada dengan subset [perintah yang tersedia](/id/tools/slash-commands#command-list):
@@ -422,8 +730,8 @@ Manifest default mengaktifkan tab **Home** Slack App Home dan berlangganan ke `a
```
-
- Gunakan daftar `slash_commands` yang sama seperti Socket Mode di atas, dan tambahkan `"url": "https://gateway-host.example.com/slack/events"` ke setiap entri. Contoh:
+
+ Gunakan daftar `slash_commands` yang sama seperti Mode Socket di atas, dan tambahkan `"url": "https://gateway-host.example.com/slack/events"` ke setiap entri. Contoh:
```json
{
@@ -450,13 +758,13 @@ Manifest default mengaktifkan tab **Home** Slack App Home dan berlangganan ke `a
- Tambahkan cakupan bot `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agen aktif (nama pengguna dan ikon kustom), bukan identitas aplikasi Slack bawaan.
+ Tambahkan cakupan bot `chat:write.customize` jika Anda ingin pesan keluar menggunakan identitas agen aktif (nama pengguna dan ikon kustom), bukan identitas aplikasi Slack default.
Jika Anda menggunakan ikon emoji, Slack mengharapkan sintaks `:emoji_name:`.
- Jika Anda mengonfigurasi `channels.slack.userToken`, cakupan baca umumnya adalah:
+ Jika Anda mengonfigurasi `channels.slack.userToken`, cakupan baca yang umum adalah:
- `channels:history`, `groups:history`, `im:history`, `mpim:history`
- `channels:read`, `groups:read`, `im:read`, `mpim:read`
@@ -476,8 +784,8 @@ Manifest default mengaktifkan tab **Home** Slack App Home dan berlangganan ke `a
- `botToken`, `appToken`, `signingSecret`, dan `userToken` menerima string teks biasa
atau objek SecretRef.
- Token konfigurasi menimpa fallback env.
-- Fallback env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` hanya berlaku untuk akun bawaan.
-- `userToken` (`xoxp-...`) hanya melalui konfigurasi (tanpa fallback env) dan secara bawaan berperilaku hanya-baca (`userTokenReadOnly: true`).
+- Fallback env `SLACK_BOT_TOKEN` / `SLACK_APP_TOKEN` hanya berlaku untuk akun default.
+- `userToken` (`xoxp-...`) hanya dapat dikonfigurasi melalui config (tanpa fallback env) dan secara default menggunakan perilaku hanya-baca (`userTokenReadOnly: true`).
Perilaku snapshot status:
@@ -485,30 +793,30 @@ Perilaku snapshot status:
per kredensial (`botToken`, `appToken`, `signingSecret`, `userToken`).
- Status adalah `available`, `configured_unavailable`, atau `missing`.
- `configured_unavailable` berarti akun dikonfigurasi melalui SecretRef
- atau sumber rahasia non-inline lain, tetapi jalur perintah/runtime saat ini
+ atau sumber rahasia non-inline lainnya, tetapi jalur perintah/runtime saat ini
tidak dapat menyelesaikan nilai aktualnya.
- Dalam mode HTTP, `signingSecretStatus` disertakan; dalam Socket Mode,
pasangan yang diperlukan adalah `botTokenStatus` + `appTokenStatus`.
-Untuk tindakan/pembacaan direktori, token pengguna dapat diprioritaskan saat dikonfigurasi. Untuk penulisan, token bot tetap diprioritaskan; penulisan dengan token pengguna hanya diizinkan ketika `userTokenReadOnly: false` dan token bot tidak tersedia.
+Untuk tindakan/pembacaan direktori, token pengguna dapat diprioritaskan saat dikonfigurasi. Untuk penulisan, token bot tetap diprioritaskan; penulisan dengan token pengguna hanya diizinkan saat `userTokenReadOnly: false` dan token bot tidak tersedia.
## Tindakan dan gate
Tindakan Slack dikontrol oleh `channels.slack.actions.*`.
-Grup tindakan yang tersedia di tooling Slack saat ini:
+Grup tindakan yang tersedia dalam tooling Slack saat ini:
-| Grup | Bawaan |
-| ---------- | ---------- |
+| Grup | Default |
+| ---------- | ------- |
| messages | diaktifkan |
| reactions | diaktifkan |
| pins | diaktifkan |
| memberInfo | diaktifkan |
| emojiList | diaktifkan |
-Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`. `download-file` menerima ID file Slack yang ditampilkan di placeholder file masuk dan mengembalikan pratinjau gambar untuk gambar atau metadata file lokal untuk jenis file lain.
+Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `read`, `edit`, `delete`, `pin`, `unpin`, `list-pins`, `member-info`, dan `emoji-list`. `download-file` menerima ID file Slack yang ditampilkan dalam placeholder file masuk dan mengembalikan pratinjau gambar untuk gambar atau metadata file lokal untuk jenis file lainnya.
## Kontrol akses dan perutean
@@ -516,52 +824,52 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
`channels.slack.dmPolicy` mengontrol akses DM. `channels.slack.allowFrom` adalah allowlist DM kanonis.
- - `pairing` (bawaan)
+ - `pairing` (default)
- `allowlist`
- `open` (memerlukan `channels.slack.allowFrom` untuk menyertakan `"*"`)
- `disabled`
Flag DM:
- - `dm.enabled` (bawaan true)
+ - `dm.enabled` (default true)
- `channels.slack.allowFrom`
- `dm.allowFrom` (legacy)
- - `dm.groupEnabled` (DM grup bawaan false)
+ - `dm.groupEnabled` (DM grup default false)
- `dm.groupChannels` (allowlist MPIM opsional)
- Prioritas multi-akun:
+ Presedensi multi-akun:
- `channels.slack.accounts.default.allowFrom` hanya berlaku untuk akun `default`.
- - Akun bernama mewarisi `channels.slack.allowFrom` ketika `allowFrom` miliknya sendiri tidak ditetapkan.
+ - Akun bernama mewarisi `channels.slack.allowFrom` saat `allowFrom` miliknya tidak disetel.
- Akun bernama tidak mewarisi `channels.slack.accounts.default.allowFrom`.
- `channels.slack.dm.policy` dan `channels.slack.dm.allowFrom` legacy masih dibaca untuk kompatibilitas. `openclaw doctor --fix` memigrasikannya ke `dmPolicy` dan `allowFrom` ketika hal itu dapat dilakukan tanpa mengubah akses.
+ Legacy `channels.slack.dm.policy` dan `channels.slack.dm.allowFrom` tetap dibaca untuk kompatibilitas. `openclaw doctor --fix` memigrasikannya ke `dmPolicy` dan `allowFrom` saat dapat melakukannya tanpa mengubah akses.
Pairing di DM menggunakan `openclaw pairing approve slack `.
-
- `channels.slack.groupPolicy` mengontrol penanganan kanal:
+
+ `channels.slack.groupPolicy` mengontrol penanganan channel:
- `open`
- `allowlist`
- `disabled`
- Allowlist kanal berada di bawah `channels.slack.channels` dan **harus menggunakan ID kanal Slack yang stabil** (misalnya `C12345678`) sebagai kunci konfigurasi.
+ Allowlist channel berada di bawah `channels.slack.channels` dan **harus menggunakan ID channel Slack yang stabil** (misalnya `C12345678`) sebagai kunci config.
- Catatan runtime: jika `channels.slack` sepenuhnya tidak ada (penyiapan hanya env), runtime beralih ke `groupPolicy="allowlist"` dan mencatat peringatan (meskipun `channels.defaults.groupPolicy` ditetapkan).
+ Catatan runtime: jika `channels.slack` sepenuhnya tidak ada (setup hanya-env), runtime kembali ke `groupPolicy="allowlist"` dan mencatat peringatan (meskipun `channels.defaults.groupPolicy` disetel).
Resolusi nama/ID:
- - entri allowlist kanal dan entri allowlist DM diselesaikan saat startup ketika akses token mengizinkan
- - entri nama kanal yang belum terselesaikan dipertahankan sesuai konfigurasi tetapi secara bawaan diabaikan untuk perutean
- - otorisasi masuk dan perutean kanal secara bawaan mengutamakan ID; pencocokan nama pengguna/slug langsung memerlukan `channels.slack.dangerouslyAllowNameMatching: true`
+ - entri allowlist channel dan entri allowlist DM diselesaikan saat startup ketika akses token mengizinkan
+ - entri nama channel yang belum terselesaikan dipertahankan sesuai konfigurasi tetapi secara default diabaikan untuk perutean
+ - otorisasi masuk dan perutean channel secara default mengutamakan ID; pencocokan langsung nama pengguna/slug memerlukan `channels.slack.dangerouslyAllowNameMatching: true`
- Kunci berbasis nama (`#channel-name` atau `channel-name`) **tidak** cocok dalam `groupPolicy: "allowlist"`. Pencarian kanal secara bawaan mengutamakan ID, sehingga kunci berbasis nama tidak akan pernah berhasil dirutekan dan semua pesan di kanal tersebut akan diblokir secara diam-diam. Ini berbeda dari `groupPolicy: "open"`, ketika kunci kanal tidak diperlukan untuk perutean dan kunci berbasis nama tampak berfungsi.
+ Kunci berbasis nama (`#channel-name` atau `channel-name`) **tidak** cocok di bawah `groupPolicy: "allowlist"`. Lookup channel secara default mengutamakan ID, sehingga kunci berbasis nama tidak akan pernah berhasil dirutekan dan semua pesan di channel tersebut akan diblokir secara diam-diam. Ini berbeda dari `groupPolicy: "open"`, yang tidak memerlukan kunci channel untuk perutean dan kunci berbasis nama tampak berfungsi.
- Selalu gunakan ID kanal Slack sebagai kunci. Untuk menemukannya: klik kanan kanal di Slack → **Copy link** — ID (`C...`) muncul di akhir URL.
+ Selalu gunakan ID channel Slack sebagai kunci. Untuk menemukannya: klik kanan channel di Slack → **Copy link** — ID (`C...`) muncul di akhir URL.
Benar:
@@ -578,7 +886,7 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
}
```
- Salah (diblokir secara diam-diam pada `groupPolicy: "allowlist"`):
+ Salah (diblokir diam-diam di bawah `groupPolicy: "allowlist"`):
```json5
{
@@ -596,17 +904,17 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
-
- Pesan saluran secara default dibatasi oleh penyebutan.
+
+ Pesan saluran secara default digating oleh mention.
- Sumber penyebutan:
+ Sumber mention:
- - penyebutan aplikasi eksplisit (`<@botId>`)
- - penyebutan grup pengguna Slack (``) saat pengguna bot menjadi anggota grup pengguna tersebut; memerlukan `usergroups:read`
- - pola regex penyebutan (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
- - perilaku thread balasan-ke-bot implisit (dinonaktifkan saat `thread.requireExplicitMention` adalah `true`)
+ - mention aplikasi eksplisit (`<@botId>`)
+ - mention grup pengguna Slack (``) ketika pengguna bot adalah anggota grup pengguna tersebut; memerlukan `usergroups:read`
+ - pola regex mention (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
+ - perilaku thread balasan-ke-bot implisit (dinonaktifkan ketika `thread.requireExplicitMention` adalah `true`)
- Kontrol per saluran (`channels.slack.channels.`; nama hanya melalui resolusi saat startup atau `dangerouslyAllowNameMatching`):
+ Kontrol per saluran (`channels.slack.channels.`; nama hanya melalui resolusi startup atau `dangerouslyAllowNameMatching`):
- `requireMention`
- `users` (allowlist)
@@ -615,25 +923,25 @@ Tindakan pesan Slack saat ini mencakup `send`, `upload-file`, `download-file`, `
- `systemPrompt`
- `tools`, `toolsBySender`
- format kunci `toolsBySender`: wildcard `id:`, `e164:`, `username:`, `name:`, atau `"*"`
- (kunci lama tanpa prefiks masih hanya dipetakan ke `id:`)
+ (kunci lama tanpa prefiks tetap dipetakan hanya ke `id:`)
- `allowBots` bersifat konservatif untuk saluran dan saluran privat: pesan ruang yang dibuat bot hanya diterima saat bot pengirim secara eksplisit tercantum dalam allowlist `users` ruang tersebut, atau saat setidaknya satu ID pemilik Slack eksplisit dari `channels.slack.allowFrom` saat ini menjadi anggota ruang. Wildcard dan entri pemilik berupa nama tampilan tidak memenuhi kehadiran pemilik. Kehadiran pemilik menggunakan `conversations.members` Slack; pastikan aplikasi memiliki cakupan baca yang sesuai untuk jenis ruang (`channels:read` untuk saluran publik, `groups:read` untuk saluran privat). Jika pencarian anggota gagal, OpenClaw membuang pesan ruang yang dibuat bot.
+ `allowBots` bersifat konservatif untuk saluran dan saluran pribadi: pesan ruang yang ditulis bot diterima hanya ketika bot pengirim dicantumkan secara eksplisit dalam allowlist `users` ruang tersebut, atau ketika setidaknya satu ID pemilik Slack eksplisit dari `channels.slack.allowFrom` saat ini adalah anggota ruang. Wildcard dan entri pemilik nama tampilan tidak memenuhi keberadaan pemilik. Keberadaan pemilik menggunakan `conversations.members` Slack; pastikan aplikasi memiliki cakupan baca yang sesuai untuk jenis ruang (`channels:read` untuk saluran publik, `groups:read` untuk saluran pribadi). Jika pencarian anggota gagal, OpenClaw menjatuhkan pesan ruang yang ditulis bot.
-## Thread, sesi, dan tag balasan
+## Threading, sesi, dan tag balasan
- DM dirutekan sebagai `direct`; saluran sebagai `channel`; MPIM sebagai `group`.
- Binding rute Slack menerima ID peer mentah serta bentuk target Slack seperti `channel:C12345678`, `user:U12345678`, dan `<@U12345678>`.
-- Dengan default `session.dmScope=main`, DM Slack digabungkan ke sesi utama agen.
+- Dengan default `session.dmScope=main`, DM Slack diciutkan ke sesi utama agen.
- Sesi saluran: `agent::slack:channel:`.
- Balasan thread dapat membuat sufiks sesi thread (`:thread:`) saat berlaku.
- Default `channels.slack.thread.historyScope` adalah `thread`; default `thread.inheritParent` adalah `false`.
-- `channels.slack.thread.initialHistoryLimit` mengontrol jumlah pesan thread yang sudah ada yang diambil saat sesi thread baru dimulai (default `20`; atur `0` untuk menonaktifkan).
-- `channels.slack.thread.requireExplicitMention` (default `false`): saat `true`, menekan penyebutan thread implisit sehingga bot hanya merespons penyebutan `@bot` eksplisit di dalam thread, bahkan saat bot sudah berpartisipasi dalam thread. Tanpa ini, balasan dalam thread yang diikuti bot melewati pembatasan `requireMention`.
+- `channels.slack.thread.initialHistoryLimit` mengontrol berapa banyak pesan thread yang sudah ada yang diambil ketika sesi thread baru dimulai (default `20`; atur `0` untuk menonaktifkan).
+- `channels.slack.thread.requireExplicitMention` (default `false`): ketika `true`, menekan mention thread implisit sehingga bot hanya merespons mention `@bot` eksplisit di dalam thread, bahkan ketika bot sudah berpartisipasi dalam thread. Tanpa ini, balasan dalam thread yang diikuti bot melewati gating `requireMention`.
-Kontrol thread balasan:
+Kontrol threading balasan:
- `channels.slack.replyToMode`: `off|first|all|batched` (default `off`)
- `channels.slack.replyToModeByChatType`: per `direct|group|channel`
@@ -645,7 +953,7 @@ Tag balasan manual didukung:
- `[[reply_to:]]`
-`replyToMode="off"` menonaktifkan **semua** thread balasan di Slack, termasuk tag `[[reply_to_*]]` eksplisit. Ini berbeda dari Telegram, tempat tag eksplisit tetap dihormati dalam mode `"off"`. Thread Slack menyembunyikan pesan dari saluran, sedangkan balasan Telegram tetap terlihat sebaris.
+`replyToMode="off"` menonaktifkan **semua** threading balasan di Slack, termasuk tag `[[reply_to_*]]` eksplisit. Ini berbeda dari Telegram, tempat tag eksplisit tetap dihormati dalam mode `"off"`. Thread Slack menyembunyikan pesan dari saluran sementara balasan Telegram tetap terlihat inline.
## Reaksi ack
@@ -662,20 +970,20 @@ Urutan resolusi:
Catatan:
- Slack mengharapkan shortcode (misalnya `"eyes"`).
-- Gunakan `""` untuk menonaktifkan reaksi bagi akun Slack atau secara global.
+- Gunakan `""` untuk menonaktifkan reaksi untuk akun Slack atau secara global.
## Streaming teks
`channels.slack.streaming` mengontrol perilaku pratinjau langsung:
-- `off`: menonaktifkan streaming pratinjau langsung.
-- `partial` (default): mengganti teks pratinjau dengan output parsial terbaru.
-- `block`: menambahkan pembaruan pratinjau dalam potongan.
-- `progress`: menampilkan teks status progres saat menghasilkan, lalu mengirim teks final.
-- `streaming.preview.toolProgress`: saat pratinjau draf aktif, rutekan pembaruan alat/progres ke pesan pratinjau yang sama yang diedit (default: `true`). Atur `false` untuk mempertahankan pesan alat/progres terpisah.
-- `streaming.preview.commandText` / `streaming.progress.commandText`: atur ke `status` untuk mempertahankan baris progres alat yang ringkas sambil menyembunyikan teks perintah/eksekusi mentah (default: `raw`).
+- `off`: nonaktifkan streaming pratinjau langsung.
+- `partial` (default): ganti teks pratinjau dengan output parsial terbaru.
+- `block`: tambahkan pembaruan pratinjau yang dipecah menjadi chunk.
+- `progress`: tampilkan teks status progres saat menghasilkan, lalu kirim teks final.
+- `streaming.preview.toolProgress`: ketika pratinjau draf aktif, rutekan pembaruan alat/progres ke pesan pratinjau editan yang sama (default: `true`). Atur `false` untuk mempertahankan pesan alat/progres terpisah.
+- `streaming.preview.commandText` / `streaming.progress.commandText`: atur ke `status` untuk mempertahankan baris progres alat yang ringkas sambil menyembunyikan teks command/exec mentah (default: `raw`).
-Sembunyikan teks perintah/eksekusi mentah sambil mempertahankan baris progres ringkas:
+Sembunyikan teks command/exec mentah sambil mempertahankan baris progres ringkas:
```json
{
@@ -693,14 +1001,14 @@ Sembunyikan teks perintah/eksekusi mentah sambil mempertahankan baris progres ri
}
```
-`channels.slack.streaming.nativeTransport` mengontrol streaming teks native Slack saat `channels.slack.streaming.mode` adalah `partial` (default: `true`).
+`channels.slack.streaming.nativeTransport` mengontrol streaming teks native Slack ketika `channels.slack.streaming.mode` adalah `partial` (default: `true`).
- Thread balasan harus tersedia agar streaming teks native dan status thread asisten Slack muncul. Pemilihan thread tetap mengikuti `replyToMode`.
-- Akar saluran, chat grup, dan DM tingkat atas tetap dapat menggunakan pratinjau draf normal saat streaming native tidak tersedia atau tidak ada thread balasan.
-- DM Slack tingkat atas tetap berada di luar thread secara default, sehingga tidak menampilkan pratinjau streaming/status native bergaya thread milik Slack; OpenClaw memposting dan mengedit pratinjau draf di DM sebagai gantinya.
-- Media dan payload nonteks kembali ke pengiriman normal.
-- Final media/error membatalkan edit pratinjau yang tertunda; final teks/blok yang memenuhi syarat hanya di-flush saat dapat mengedit pratinjau di tempat.
-- Jika streaming gagal di tengah balasan, OpenClaw kembali ke pengiriman normal untuk payload yang tersisa.
+- Saluran, chat grup, dan root DM level atas masih dapat menggunakan pratinjau draf normal ketika streaming native tidak tersedia atau tidak ada thread balasan.
+- DM Slack level atas tetap berada di luar thread secara default, sehingga tidak menampilkan pratinjau stream/status native bergaya thread Slack; OpenClaw memposting dan mengedit pratinjau draf di DM sebagai gantinya.
+- Media dan payload non-teks fallback ke pengiriman normal.
+- Final media/error membatalkan edit pratinjau tertunda; final teks/blok yang memenuhi syarat di-flush hanya ketika dapat mengedit pratinjau di tempat.
+- Jika streaming gagal di tengah balasan, OpenClaw fallback ke pengiriman normal untuk payload yang tersisa.
Gunakan pratinjau draf alih-alih streaming teks native Slack:
@@ -725,7 +1033,7 @@ Kunci lama:
## Fallback reaksi mengetik
-`typingReaction` menambahkan reaksi sementara ke pesan Slack masuk saat OpenClaw memproses balasan, lalu menghapusnya ketika eksekusi selesai. Ini paling berguna di luar balasan utas, yang menggunakan indikator status default "sedang mengetik...".
+`typingReaction` menambahkan reaksi sementara ke pesan Slack masuk saat OpenClaw sedang memproses balasan, lalu menghapusnya saat proses selesai. Ini paling berguna di luar balasan thread, yang menggunakan indikator status default "is typing...".
Urutan resolusi:
@@ -735,35 +1043,35 @@ Urutan resolusi:
Catatan:
- Slack mengharapkan shortcode (misalnya `"hourglass_flowing_sand"`).
-- Reaksi ini bersifat upaya terbaik dan pembersihan dicoba secara otomatis setelah jalur balasan atau kegagalan selesai.
+- Reaksi bersifat upaya terbaik dan pembersihan dicoba secara otomatis setelah jalur balasan atau kegagalan selesai.
## Media, pemotongan, dan pengiriman
-
- Lampiran file Slack diunduh dari URL privat yang dihosting Slack (alur permintaan terautentikasi token) dan ditulis ke penyimpanan media ketika pengambilan berhasil dan batas ukuran mengizinkan. Placeholder file menyertakan `fileId` Slack sehingga agen dapat mengambil file asli dengan `download-file`.
+
+ Lampiran file Slack diunduh dari URL privat yang dihosting Slack (alur permintaan terautentikasi token) dan ditulis ke penyimpanan media saat pengambilan berhasil dan batas ukuran mengizinkan. Placeholder file menyertakan `fileId` Slack agar agen dapat mengambil file asli dengan `download-file`.
- Unduhan menggunakan batas waktu idle dan total yang dibatasi. Jika pengambilan file Slack terhenti atau gagal, OpenClaw tetap memproses pesan dan kembali menggunakan placeholder file.
+ Unduhan menggunakan batas waktu idle dan total yang dibatasi. Jika pengambilan file Slack macet atau gagal, OpenClaw tetap memproses pesan dan fallback ke placeholder file.
- Batas ukuran masuk runtime secara default adalah `20MB` kecuali ditimpa oleh `channels.slack.mediaMaxMb`.
+ Batas ukuran masuk runtime default adalah `20MB` kecuali ditimpa oleh `channels.slack.mediaMaxMb`.
-
+
- potongan teks menggunakan `channels.slack.textChunkLimit` (default 4000)
- `channels.slack.chunkMode="newline"` mengaktifkan pemisahan yang mengutamakan paragraf
- - pengiriman file menggunakan API unggahan Slack dan dapat menyertakan balasan utas (`thread_ts`)
+ - pengiriman file menggunakan API unggahan Slack dan dapat menyertakan balasan thread (`thread_ts`)
- batas media keluar mengikuti `channels.slack.mediaMaxMb` saat dikonfigurasi; jika tidak, pengiriman channel menggunakan default jenis MIME dari pipeline media
-
+
Target eksplisit yang disarankan:
- `user:` untuk DM
- `channel:` untuk channel
- DM Slack khusus teks/blok dapat memposting langsung ke ID pengguna; unggahan file dan pengiriman berutas membuka DM melalui API percakapan Slack terlebih dahulu karena jalur tersebut memerlukan ID percakapan konkret.
+ DM Slack khusus teks/blok dapat memposting langsung ke ID pengguna; unggahan file dan pengiriman ber-thread membuka DM melalui API percakapan Slack terlebih dahulu karena jalur tersebut memerlukan ID percakapan konkret.
@@ -781,20 +1089,20 @@ Perintah slash muncul di Slack sebagai satu perintah terkonfigurasi atau beberap
/openclaw /help
```
-Perintah native memerlukan [pengaturan manifes tambahan](#additional-manifest-settings) di aplikasi Slack Anda dan diaktifkan dengan `channels.slack.commands.native: true` atau `commands.native: true` dalam konfigurasi global sebagai gantinya.
+Perintah native memerlukan [pengaturan manifes tambahan](#additional-manifest-settings) di aplikasi Slack Anda dan sebagai gantinya diaktifkan dengan `channels.slack.commands.native: true` atau `commands.native: true` dalam konfigurasi global.
-- Mode otomatis perintah native **nonaktif** untuk Slack sehingga `commands.native: "auto"` tidak mengaktifkan perintah native Slack.
+- Mode otomatis perintah native **mati** untuk Slack sehingga `commands.native: "auto"` tidak mengaktifkan perintah native Slack.
```txt
/help
```
-Menu argumen native menggunakan strategi rendering adaptif yang menampilkan modal konfirmasi sebelum mengirim nilai opsi yang dipilih:
+Menu argumen native menggunakan strategi perenderan adaptif yang menampilkan modal konfirmasi sebelum mengirim nilai opsi yang dipilih:
- hingga 5 opsi: blok tombol
-- 6-100 opsi: menu pilih statis
-- lebih dari 100 opsi: pilih eksternal dengan pemfilteran opsi asinkron saat handler opsi interaktivitas tersedia
-- batas Slack terlampaui: nilai opsi yang dienkode kembali ke tombol
+- 6-100 opsi: menu static select
+- lebih dari 100 opsi: external select dengan pemfilteran opsi async saat handler opsi interaktivitas tersedia
+- batas Slack terlampaui: nilai opsi terenkode fallback ke tombol
```txt
/think
@@ -843,37 +1151,37 @@ Saat diaktifkan, agen dapat memancarkan direktif balasan khusus Slack:
- `[[slack_buttons: Approve:approve, Reject:reject]]`
- `[[slack_select: Choose a target | Canary:canary, Production:production]]`
-Direktif ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan kembali melalui jalur event interaksi Slack yang ada.
+Direktif ini dikompilasi menjadi Slack Block Kit dan merutekan klik atau pilihan kembali melalui jalur peristiwa interaksi Slack yang sudah ada.
Catatan:
-- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan direktif Slack Block Kit menjadi sistem tombol mereka sendiri.
+- Ini adalah UI khusus Slack. Channel lain tidak menerjemahkan direktif Slack Block Kit ke sistem tombol mereka sendiri.
- Nilai callback interaktif adalah token buram yang dihasilkan OpenClaw, bukan nilai mentah yang dibuat agen.
-- Jika blok interaktif yang dihasilkan akan melampaui batas Slack Block Kit, OpenClaw kembali ke balasan teks asli alih-alih mengirim payload blok yang tidak valid.
+- Jika blok interaktif yang dihasilkan akan melampaui batas Slack Block Kit, OpenClaw fallback ke balasan teks asli alih-alih mengirim payload blok yang tidak valid.
## Persetujuan exec di Slack
-Slack dapat bertindak sebagai klien persetujuan native dengan tombol dan interaksi interaktif, alih-alih kembali ke UI Web atau terminal.
+Slack dapat bertindak sebagai klien persetujuan native dengan tombol dan interaksi interaktif, alih-alih fallback ke UI Web atau terminal.
-- Persetujuan exec menggunakan `channels.slack.execApprovals.*` untuk perutean native DM/channel.
-- Persetujuan Plugin tetap dapat diselesaikan melalui permukaan tombol native Slack yang sama ketika permintaan sudah mendarat di Slack dan jenis ID persetujuan adalah `plugin:`.
+- Persetujuan exec menggunakan `channels.slack.execApprovals.*` untuk perutean DM/channel native.
+- Persetujuan Plugin tetap dapat diselesaikan melalui permukaan tombol native Slack yang sama saat permintaan sudah masuk di Slack dan jenis id persetujuan adalah `plugin:`.
- Otorisasi pemberi persetujuan tetap diberlakukan: hanya pengguna yang diidentifikasi sebagai pemberi persetujuan yang dapat menyetujui atau menolak permintaan melalui Slack.
Ini menggunakan permukaan tombol persetujuan bersama yang sama seperti channel lain. Saat `interactivity` diaktifkan di pengaturan aplikasi Slack Anda, prompt persetujuan dirender sebagai tombol Block Kit langsung di percakapan.
-Saat tombol tersebut ada, tombol tersebut adalah UX persetujuan utama; OpenClaw
-seharusnya hanya menyertakan perintah manual `/approve` ketika hasil tool mengatakan persetujuan
+Saat tombol tersebut ada, tombol itu adalah UX persetujuan utama; OpenClaw
+sebaiknya hanya menyertakan perintah manual `/approve` saat hasil tool mengatakan persetujuan
chat tidak tersedia atau persetujuan manual adalah satu-satunya jalur.
Jalur konfigurasi:
- `channels.slack.execApprovals.enabled`
-- `channels.slack.execApprovals.approvers` (opsional; kembali ke `commands.ownerAllowFrom` bila memungkinkan)
+- `channels.slack.execApprovals.approvers` (opsional; fallback ke `commands.ownerAllowFrom` saat memungkinkan)
- `channels.slack.execApprovals.target` (`dm` | `channel` | `both`, default: `dm`)
- `agentFilter`, `sessionFilter`
-Slack otomatis mengaktifkan persetujuan exec native ketika `enabled` tidak diatur atau `"auto"` dan setidaknya satu
-pemberi persetujuan berhasil diselesaikan. Atur `enabled: false` untuk menonaktifkan Slack sebagai klien persetujuan native secara eksplisit.
-Atur `enabled: true` untuk memaksa persetujuan native aktif ketika pemberi persetujuan berhasil diselesaikan.
+Slack secara otomatis mengaktifkan persetujuan exec native saat `enabled` tidak disetel atau `"auto"` dan setidaknya satu
+pemberi persetujuan terselesaikan. Setel `enabled: false` untuk menonaktifkan Slack sebagai klien persetujuan native secara eksplisit.
+Setel `enabled: true` untuk memaksa persetujuan native aktif saat pemberi persetujuan terselesaikan.
Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit:
@@ -885,8 +1193,8 @@ Perilaku default tanpa konfigurasi persetujuan exec Slack eksplisit:
}
```
-Konfigurasi native Slack eksplisit hanya diperlukan ketika Anda ingin menimpa pemberi persetujuan, menambahkan filter, atau
-memilih pengiriman ke chat asal:
+Konfigurasi native Slack eksplisit hanya diperlukan saat Anda ingin menimpa pemberi persetujuan, menambahkan filter, atau
+ikut menggunakan pengiriman chat asal:
```json5
{
@@ -902,35 +1210,35 @@ memilih pengiriman ke chat asal:
}
```
-Penerusan bersama `approvals.exec` terpisah. Gunakan hanya ketika prompt persetujuan exec juga harus
-dirutekan ke chat lain atau target eksplisit di luar jalur utama. Penerusan bersama `approvals.plugin` juga
-terpisah; tombol native Slack tetap dapat menyelesaikan persetujuan Plugin ketika permintaan tersebut sudah mendarat
+Penerusan `approvals.exec` bersama terpisah. Gunakan hanya saat prompt persetujuan exec juga harus
+dirutekan ke chat lain atau target out-of-band eksplisit. Penerusan `approvals.plugin` bersama juga
+terpisah; tombol native Slack tetap dapat menyelesaikan persetujuan Plugin saat permintaan tersebut sudah masuk
di Slack.
`/approve` dalam chat yang sama juga berfungsi di channel Slack dan DM yang sudah mendukung perintah. Lihat [Persetujuan exec](/id/tools/exec-approvals) untuk model penerusan persetujuan lengkap.
-## Event dan perilaku operasional
+## Peristiwa dan perilaku operasional
-- Pengeditan/penghapusan pesan dipetakan menjadi event sistem.
-- Siaran utas (balasan utas "Juga kirim ke channel") diproses sebagai pesan pengguna normal.
-- Event tambah/hapus reaksi dipetakan menjadi event sistem.
-- Event anggota bergabung/keluar, channel dibuat/diubah namanya, dan pin ditambah/dihapus dipetakan menjadi event sistem.
-- `channel_id_changed` dapat memigrasikan kunci konfigurasi channel ketika `configWrites` diaktifkan.
+- Edit/hapus pesan dipetakan menjadi peristiwa sistem.
+- Broadcast thread (balasan thread "Also send to channel") diproses sebagai pesan pengguna normal.
+- Peristiwa tambah/hapus reaksi dipetakan menjadi peristiwa sistem.
+- Peristiwa anggota bergabung/keluar, channel dibuat/diubah nama, dan pin tambah/hapus dipetakan menjadi peristiwa sistem.
+- `channel_id_changed` dapat memigrasikan kunci konfigurasi channel saat `configWrites` diaktifkan.
- Metadata topik/tujuan channel diperlakukan sebagai konteks tidak tepercaya dan dapat disuntikkan ke konteks perutean.
-- Pembuka utas dan penyemaian konteks riwayat utas awal difilter oleh allowlist pengirim yang dikonfigurasi bila berlaku.
-- Aksi blok dan interaksi modal memancarkan event sistem `Slack interaction: ...` terstruktur dengan field payload kaya:
- - aksi blok: nilai terpilih, label, nilai picker, dan metadata `workflow_*`
- - event modal `view_submission` dan `view_closed` dengan metadata channel yang dirutekan dan input formulir
+- Starter thread dan penyemaian konteks riwayat thread awal difilter oleh allowlist pengirim yang dikonfigurasi saat berlaku.
+- Tindakan blok dan interaksi modal memancarkan peristiwa sistem `Slack interaction: ...` terstruktur dengan bidang payload kaya:
+ - tindakan blok: nilai yang dipilih, label, nilai pemilih, dan metadata `workflow_*`
+ - peristiwa modal `view_submission` dan `view_closed` dengan metadata channel yang dirutekan dan input formulir
## Referensi konfigurasi
Referensi utama: [Referensi konfigurasi - Slack](/id/gateway/config-channels#slack).
-
+
- mode/auth: `mode`, `botToken`, `appToken`, `signingSecret`, `webhookPath`, `accounts.*`
- akses DM: `dm.enabled`, `dmPolicy`, `allowFrom` (legacy: `dm.policy`, `dm.allowFrom`), `dm.groupEnabled`, `dm.groupChannels`
-- tombol kompatibilitas: `dangerouslyAllowNameMatching` (break-glass; tetap nonaktif kecuali diperlukan)
+- toggle kompatibilitas: `dangerouslyAllowNameMatching` (break-glass; tetap matikan kecuali diperlukan)
- akses channel: `groupPolicy`, `channels.*`, `channels.*.users`, `channels.*.requireMention`
- threading/riwayat: `replyToMode`, `replyToModeByChatType`, `thread.*`, `historyLimit`, `dmHistoryLimit`, `dms.*.historyLimit`
- pengiriman: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `streaming`, `streaming.nativeTransport`, `streaming.preview.toolProgress`
@@ -941,11 +1249,11 @@ Referensi utama: [Referensi konfigurasi - Slack](/id/gateway/config-channels#sla
## Pemecahan masalah
-
+
Periksa, secara berurutan:
- `groupPolicy`
- - allowlist channel (`channels.slack.channels`) — **kunci harus berupa ID channel** (`C12345678`), bukan nama (`#channel-name`). Kunci berbasis nama gagal secara diam-diam di bawah `groupPolicy: "allowlist"` karena perutean channel secara default mengutamakan ID. Untuk menemukan ID: klik kanan channel di Slack → **Salin tautan** — nilai `C...` di akhir URL adalah ID channel.
+ - allowlist channel (`channels.slack.channels`) — **kunci harus berupa ID channel** (`C12345678`), bukan nama (`#channel-name`). Kunci berbasis nama gagal diam-diam di bawah `groupPolicy: "allowlist"` karena perutean channel secara default mengutamakan ID. Untuk menemukan ID: klik kanan channel di Slack → **Copy link** — nilai `C...` di akhir URL adalah ID channel.
- `requireMention`
- allowlist `users` per channel
@@ -959,14 +1267,14 @@ openclaw doctor
-
+
Periksa:
- `channels.slack.dm.enabled`
- `channels.slack.dmPolicy` (atau legacy `channels.slack.dm.policy`)
- - persetujuan pemasangan / entri allowlist
- - event DM Slack Assistant: log verbose yang menyebut `drop message_changed`
- biasanya berarti Slack mengirim event utas Assistant yang diedit tanpa
+ - persetujuan pairing / entri allowlist
+ - peristiwa DM Slack Assistant: log verbose yang menyebut `drop message_changed`
+ biasanya berarti Slack mengirim peristiwa thread Assistant yang diedit tanpa
pengirim manusia yang dapat dipulihkan dalam metadata pesan
```bash
@@ -975,33 +1283,33 @@ openclaw pairing list slack
-
- Validasi token bot + app dan pengaktifan Socket Mode di pengaturan aplikasi Slack.
+
+ Validasi token bot + aplikasi dan pengaktifan Socket Mode di pengaturan aplikasi Slack.
Jika `openclaw channels status --probe --json` menampilkan `botTokenStatus` atau
- `appTokenStatus: "configured_unavailable"`, akun Slack telah
- dikonfigurasi tetapi runtime saat ini tidak dapat menyelesaikan nilai yang didukung SecretRef.
+ `appTokenStatus: "configured_unavailable"`, akun Slack
+ terkonfigurasi tetapi runtime saat ini tidak dapat menyelesaikan nilai yang didukung SecretRef.
-
+
Validasi:
- signing secret
- jalur Webhook
- - URL Permintaan Slack (Event + Interaktivitas + Perintah Slash)
+ - URL Permintaan Slack (Events + Interactivity + Slash Commands)
- `webhookPath` unik per akun HTTP
- Jika `signingSecretStatus: "configured_unavailable"` muncul dalam snapshot akun,
- akun HTTP telah dikonfigurasi tetapi runtime saat ini tidak dapat
+ Jika `signingSecretStatus: "configured_unavailable"` muncul di snapshot akun,
+ akun HTTP terkonfigurasi tetapi runtime saat ini tidak dapat
menyelesaikan signing secret yang didukung SecretRef.
-
+
Verifikasi apakah yang Anda maksud adalah:
- - mode perintah native (`channels.slack.commands.native: true`) dengan perintah slash yang sesuai terdaftar di Slack
+ - mode perintah native (`channels.slack.commands.native: true`) dengan perintah slash yang cocok terdaftar di Slack
- atau mode satu perintah slash (`channels.slack.slashCommand.enabled: true`)
Periksa juga `commands.useAccessGroups` dan allowlist channel/pengguna.
@@ -1011,34 +1319,34 @@ openclaw pairing list slack
## Referensi vision lampiran
-Slack dapat melampirkan media yang diunduh ke giliran agen ketika unduhan file Slack berhasil dan batas ukuran mengizinkan. File gambar dapat diteruskan melalui jalur pemahaman media atau langsung ke model balasan berkemampuan vision; file lain dipertahankan sebagai konteks file yang dapat diunduh alih-alih diperlakukan sebagai input gambar.
+Slack dapat melampirkan media yang diunduh ke giliran agen saat unduhan file Slack berhasil dan batas ukuran mengizinkan. File gambar dapat diteruskan melalui jalur pemahaman media atau langsung ke model balasan berkemampuan vision; file lain dipertahankan sebagai konteks file yang dapat diunduh, bukan diperlakukan sebagai input gambar.
### Jenis media yang didukung
-| Jenis media | Sumber | Perilaku saat ini | Catatan |
-| ----------------------------- | -------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
-| Gambar JPEG / PNG / GIF / WebP | URL file Slack | Diunduh dan dilampirkan ke giliran untuk penanganan berkemampuan visi | Batas per file: `channels.slack.mediaMaxMb` (default 20 MB) |
-| File PDF | URL file Slack | Diunduh dan diekspos sebagai konteks file untuk alat seperti `download-file` atau `pdf` | Masukan Slack tidak otomatis mengonversi PDF menjadi input visi-gambar |
-| File lain | URL file Slack | Diunduh jika memungkinkan dan diekspos sebagai konteks file | File biner tidak diperlakukan sebagai input gambar |
-| Balasan thread | File pemulai thread | File pesan root dapat dihidrasi sebagai konteks ketika balasan tidak memiliki media langsung | Pemulai yang hanya berisi file menggunakan placeholder lampiran |
-| Pesan multi-gambar | Beberapa file Slack | Setiap file dievaluasi secara independen | Pemrosesan Slack dibatasi hingga delapan file per pesan |
+| Jenis media | Sumber | Perilaku saat ini | Catatan |
+| ------------------------------ | -------------------- | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
+| Gambar JPEG / PNG / GIF / WebP | URL file Slack | Diunduh dan dilampirkan ke giliran untuk penanganan yang mendukung vision | Batas per file: `channels.slack.mediaMaxMb` (default 20 MB) |
+| File PDF | URL file Slack | Diunduh dan diekspos sebagai konteks file untuk tool seperti `download-file` atau `pdf` | Inbound Slack tidak mengonversi PDF menjadi input image-vision secara otomatis |
+| File lain | URL file Slack | Diunduh jika memungkinkan dan diekspos sebagai konteks file | File biner tidak diperlakukan sebagai input gambar |
+| Balasan thread | File pembuka thread | File pesan root dapat dihidrasi sebagai konteks ketika balasan tidak memiliki media langsung | Pembuka yang hanya berisi file menggunakan placeholder lampiran |
+| Pesan multi-gambar | Beberapa file Slack | Setiap file dievaluasi secara independen | Pemrosesan Slack dibatasi hingga delapan file per pesan |
-### Pipeline masuk
+### Pipeline inbound
Ketika pesan Slack dengan lampiran file tiba:
1. OpenClaw mengunduh file dari URL privat Slack menggunakan token bot (`xoxb-...`).
2. File ditulis ke penyimpanan media jika berhasil.
-3. Jalur media yang diunduh dan jenis konten ditambahkan ke konteks masuk.
-4. Jalur model/alat yang mendukung gambar dapat menggunakan lampiran gambar dari konteks tersebut.
-5. File non-gambar tetap tersedia sebagai metadata file atau referensi media untuk alat yang dapat menanganinya.
+3. Jalur media yang diunduh dan tipe konten ditambahkan ke konteks inbound.
+4. Jalur model/tool yang mendukung gambar dapat menggunakan lampiran gambar dari konteks tersebut.
+5. File non-gambar tetap tersedia sebagai metadata file atau referensi media untuk tool yang dapat menanganinya.
### Pewarisan lampiran root thread
-Ketika pesan tiba dalam thread (memiliki induk `thread_ts`):
+Ketika pesan tiba di thread (memiliki induk `thread_ts`):
-- Jika balasan itu sendiri tidak memiliki media langsung dan pesan root yang disertakan memiliki file, Slack dapat menghidrasi file root sebagai konteks pemulai thread.
-- Lampiran balasan langsung lebih diutamakan daripada lampiran pesan root.
+- Jika balasan itu sendiri tidak memiliki media langsung dan pesan root yang disertakan memiliki file, Slack dapat menghidrasi file root sebagai konteks pembuka thread.
+- Lampiran balasan langsung diprioritaskan dibanding lampiran pesan root.
- Pesan root yang hanya memiliki file dan tanpa teks direpresentasikan dengan placeholder lampiran sehingga fallback tetap dapat menyertakan filenya.
### Penanganan multi-lampiran
@@ -1047,52 +1355,52 @@ Ketika satu pesan Slack berisi beberapa lampiran file:
- Setiap lampiran diproses secara independen melalui pipeline media.
- Referensi media yang diunduh digabungkan ke dalam konteks pesan.
-- Urutan pemrosesan mengikuti urutan file Slack dalam payload peristiwa.
-- Kegagalan unduhan pada satu lampiran tidak memblokir lampiran lainnya.
+- Urutan pemrosesan mengikuti urutan file Slack dalam payload event.
+- Kegagalan dalam pengunduhan satu lampiran tidak memblokir lampiran lain.
-### Batas ukuran, unduhan, dan model
+### Batas ukuran, pengunduhan, dan model
- **Batas ukuran**: Default 20 MB per file. Dapat dikonfigurasi melalui `channels.slack.mediaMaxMb`.
-- **Kegagalan unduhan**: File yang tidak dapat disajikan Slack, URL kedaluwarsa, file tidak dapat diakses, file terlalu besar, dan respons HTML auth/login Slack dilewati alih-alih dilaporkan sebagai format yang tidak didukung.
-- **Model visi**: Analisis gambar menggunakan model balasan aktif ketika model tersebut mendukung visi, atau model gambar yang dikonfigurasi di `agents.defaults.imageModel`.
+- **Kegagalan pengunduhan**: File yang tidak dapat disajikan Slack, URL kedaluwarsa, file yang tidak dapat diakses, file terlalu besar, dan respons HTML autentikasi/login Slack dilewati alih-alih dilaporkan sebagai format yang tidak didukung.
+- **Model vision**: Analisis gambar menggunakan model balasan aktif ketika mendukung vision, atau model gambar yang dikonfigurasi di `agents.defaults.imageModel`.
### Batas yang diketahui
-| Skenario | Perilaku saat ini | Solusi sementara |
-| ------------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
-| URL file Slack kedaluwarsa | File dilewati; tidak ada kesalahan yang ditampilkan | Unggah ulang file di Slack |
-| Model visi tidak dikonfigurasi | Lampiran gambar disimpan sebagai referensi media, tetapi tidak dianalisis sebagai gambar | Konfigurasikan `agents.defaults.imageModel` atau gunakan model balasan berkemampuan visi |
-| Gambar sangat besar (> 20 MB secara default) | Dilewati sesuai batas ukuran | Tingkatkan `channels.slack.mediaMaxMb` jika Slack mengizinkan |
-| Lampiran yang diteruskan/dibagikan | Teks dan media gambar/file yang dihosting Slack bersifat upaya terbaik | Bagikan ulang langsung di thread OpenClaw |
-| Lampiran PDF | Disimpan sebagai konteks file/media, tidak otomatis dirutekan melalui visi gambar | Gunakan `download-file` untuk metadata file atau alat `pdf` untuk analisis PDF |
+| Skenario | Perilaku saat ini | Solusi sementara |
+| -------------------------------------- | ---------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
+| URL file Slack kedaluwarsa | File dilewati; tidak ada error yang ditampilkan | Unggah ulang file di Slack |
+| Model vision tidak dikonfigurasi | Lampiran gambar disimpan sebagai referensi media, tetapi tidak dianalisis sebagai gambar | Konfigurasikan `agents.defaults.imageModel` atau gunakan model balasan yang mendukung vision |
+| Gambar sangat besar (> 20 MB secara default) | Dilewati sesuai batas ukuran | Tingkatkan `channels.slack.mediaMaxMb` jika Slack mengizinkan |
+| Lampiran yang diteruskan/dibagikan | Teks dan media gambar/file yang di-host Slack bersifat best-effort | Bagikan ulang langsung di thread OpenClaw |
+| Lampiran PDF | Disimpan sebagai konteks file/media, tidak otomatis dirutekan melalui image vision | Gunakan `download-file` untuk metadata file atau tool `pdf` untuk analisis PDF |
### Dokumentasi terkait
- [Pipeline pemahaman media](/id/nodes/media-understanding)
-- [Alat PDF](/id/tools/pdf)
-- Epik: [#51349](https://github.com/openclaw/openclaw/issues/51349) — Pengaktifan visi lampiran Slack
-- Pengujian regresi: [#51353](https://github.com/openclaw/openclaw/issues/51353)
-- Verifikasi langsung: [#51354](https://github.com/openclaw/openclaw/issues/51354)
+- [Tool PDF](/id/tools/pdf)
+- Epic: [#51349](https://github.com/openclaw/openclaw/issues/51349) — pengaktifan vision lampiran Slack
+- Uji regresi: [#51353](https://github.com/openclaw/openclaw/issues/51353)
+- Verifikasi live: [#51354](https://github.com/openclaw/openclaw/issues/51354)
## Terkait
-
+
Pasangkan pengguna Slack ke Gateway.
-
+
Perilaku channel dan DM grup.
-
- Rutekan pesan masuk ke agen.
+
+ Rutekan pesan inbound ke agen.
-
+
Model ancaman dan pengerasan.
-
+
Tata letak konfigurasi dan presedensi.
-
- Katalog perintah dan perilaku.
+
+ Katalog dan perilaku perintah.
diff --git a/docs/id/ci.md b/docs/id/ci.md
index a80900762..9721ec5cb 100644
--- a/docs/id/ci.md
+++ b/docs/id/ci.md
@@ -1,94 +1,94 @@
---
read_when:
- - Anda perlu memahami mengapa sebuah pekerjaan CI berjalan atau tidak berjalan
+ - Anda perlu memahami mengapa suatu pekerjaan CI berjalan atau tidak berjalan
- Anda sedang men-debug pemeriksaan GitHub Actions yang gagal
- Anda sedang mengoordinasikan pelaksanaan atau pengulangan validasi rilis
- - Anda mengubah pengiriman ClawSweeper atau penerusan aktivitas GitHub
+ - Anda sedang mengubah pengiriman ClawSweeper atau penerusan aktivitas GitHub
summary: Graf pekerjaan CI, gerbang cakupan, payung rilis, dan padanan perintah lokal
title: Alur kerja CI
x-i18n:
- generated_at: "2026-05-04T07:03:05Z"
+ generated_at: "2026-05-05T01:44:28Z"
model: gpt-5.5
provider: openai
- source_hash: 72959d0feaf1339f01c9da263153fd89cc4727da6f928933819931991222714d
+ source_hash: 16771940889d1fa944a5bfafe1152a033d96625595a2d89ff2cedbd3022cee66
source_path: ci.md
workflow: 16
---
-OpenClaw CI berjalan pada setiap push ke `main` dan setiap pull request. Job `preflight` mengklasifikasikan diff dan menonaktifkan lane mahal ketika hanya area yang tidak terkait yang berubah. Eksekusi manual `workflow_dispatch` sengaja melewati pemetaan cakupan cerdas dan menyebarkan graf penuh untuk kandidat rilis dan validasi luas. Lane Android tetap opsional melalui `include_android`. Cakupan plugin khusus rilis berada di workflow [`Plugin Prerelease`](#plugin-prerelease) terpisah dan hanya berjalan dari [`Full Release Validation`](#full-release-validation) atau dispatch manual eksplisit.
+OpenClaw CI berjalan pada setiap push ke `main` dan setiap pull request. Job `preflight` mengklasifikasikan diff dan menonaktifkan lane yang mahal saat hanya area yang tidak terkait yang berubah. Run `workflow_dispatch` manual sengaja melewati smart scoping dan menyebarkan grafik penuh untuk kandidat rilis dan validasi luas. Lane Android tetap opt-in melalui `include_android`. Cakupan Plugin khusus rilis berada di workflow [`Plugin Prarilis`](#plugin-prerelease) terpisah dan hanya berjalan dari [`Validasi Rilis Penuh`](#full-release-validation) atau dispatch manual eksplisit.
## Ikhtisar pipeline
-| Job | Tujuan | Kapan berjalan |
-| -------------------------------- | --------------------------------------------------------------------------------------------------------- | ---------------------------------- |
-| `preflight` | Mendeteksi perubahan khusus docs, cakupan yang berubah, ekstensi yang berubah, dan membangun manifes CI | Selalu pada push dan PR non-draft |
-| `security-scm-fast` | Deteksi kunci privat dan audit workflow melalui `zizmor` | Selalu pada push dan PR non-draft |
-| `security-dependency-audit` | Audit lockfile produksi bebas dependensi terhadap advisori npm | Selalu pada push dan PR non-draft |
-| `security-fast` | Agregat wajib untuk job keamanan cepat | Selalu pada push dan PR non-draft |
-| `check-dependencies` | Pass Knip khusus dependensi produksi plus guard allowlist file yang tidak digunakan | Perubahan yang relevan dengan Node |
-| `build-artifacts` | Membangun `dist/`, Control UI, pemeriksaan artefak build, dan artefak downstream yang dapat digunakan ulang | Perubahan yang relevan dengan Node |
-| `checks-fast-core` | Lane kebenaran Linux cepat seperti pemeriksaan bundled/plugin-contract/protocol | Perubahan yang relevan dengan Node |
-| `checks-fast-contracts-channels` | Pemeriksaan kontrak channel yang di-shard dengan hasil pemeriksaan agregat yang stabil | Perubahan yang relevan dengan Node |
-| `checks-node-core-test` | Shard tes Node inti, mengecualikan lane channel, bundled, contract, dan extension | Perubahan yang relevan dengan Node |
-| `check` | Padanan gate lokal utama yang di-shard: tipe prod, lint, guard, tipe tes, dan smoke ketat | Perubahan yang relevan dengan Node |
-| `check-additional` | Arsitektur, drift boundary/prompt yang di-shard, guard ekstensi, boundary paket, dan gateway watch | Perubahan yang relevan dengan Node |
-| `build-smoke` | Tes smoke CLI hasil build dan smoke memori startup | Perubahan yang relevan dengan Node |
-| `checks` | Verifikator untuk tes channel artefak build | Perubahan yang relevan dengan Node |
-| `checks-node-compat-node22` | Lane build dan smoke kompatibilitas Node 22 | Dispatch CI manual untuk rilis |
-| `check-docs` | Pemformatan docs, lint, dan pemeriksaan broken link | Docs berubah |
-| `skills-python` | Ruff + pytest untuk skills berbasis Python | Perubahan yang relevan dengan skill Python |
-| `checks-windows` | Tes proses/path khusus Windows plus regresi specifier impor runtime bersama | Perubahan yang relevan dengan Windows |
-| `macos-node` | Lane tes TypeScript macOS menggunakan artefak build bersama | Perubahan yang relevan dengan macOS |
-| `macos-swift` | Swift lint, build, dan tes untuk aplikasi macOS | Perubahan yang relevan dengan macOS |
-| `android` | Tes unit Android untuk kedua flavor plus satu build APK debug | Perubahan yang relevan dengan Android |
-| `test-performance-agent` | Optimisasi tes lambat Codex harian setelah aktivitas tepercaya | CI main berhasil atau dispatch manual |
-| `openclaw-performance` | Laporan performa runtime Kova harian/berdasarkan permintaan dengan lane mock-provider, deep-profile, dan live GPT 5.4 | Terjadwal dan dispatch manual |
+| Job | Tujuan | Kapan berjalan |
+| -------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
+| `preflight` | Mendeteksi perubahan khusus docs, scope yang berubah, ekstensi yang berubah, dan membangun manifes CI | Selalu pada push dan PR non-draf |
+| `security-scm-fast` | Deteksi private key dan audit workflow melalui `zizmor` | Selalu pada push dan PR non-draf |
+| `security-dependency-audit` | Audit lockfile produksi bebas dependensi terhadap advisori npm | Selalu pada push dan PR non-draf |
+| `security-fast` | Agregat wajib untuk job keamanan cepat | Selalu pada push dan PR non-draf |
+| `check-dependencies` | Pass khusus dependensi Knip produksi plus guard allowlist unused-file | Perubahan relevan Node |
+| `build-artifacts` | Membangun `dist/`, Control UI, pemeriksaan artefak build, dan artefak downstream yang dapat digunakan ulang | Perubahan relevan Node |
+| `checks-fast-core` | Lane kebenaran Linux cepat seperti pemeriksaan bundled/plugin-contract/protocol | Perubahan relevan Node |
+| `checks-fast-contracts-channels` | Pemeriksaan kontrak channel tersharding dengan hasil pemeriksaan agregat stabil | Perubahan relevan Node |
+| `checks-node-core-test` | Shard test Core Node, mengecualikan lane channel, bundled, contract, dan extension | Perubahan relevan Node |
+| `check` | Ekuivalen gate lokal utama tersharding: tipe prod, lint, guard, tipe test, dan smoke ketat | Perubahan relevan Node |
+| `check-additional` | Arsitektur, drift boundary/prompt tersharding, guard extension, boundary package, dan gateway watch | Perubahan relevan Node |
+| `build-smoke` | Test smoke CLI hasil build dan smoke memori startup | Perubahan relevan Node |
+| `checks` | Verifier untuk test channel artefak build | Perubahan relevan Node |
+| `checks-node-compat-node22` | Build kompatibilitas Node 22 dan lane smoke | Dispatch CI manual untuk rilis |
+| `check-docs` | Pemeriksaan format docs, lint, dan broken-link | Docs berubah |
+| `skills-python` | Ruff + pytest untuk skills berbasis Python | Perubahan relevan skill Python |
+| `checks-windows` | Test proses/path khusus Windows plus regresi specifier impor runtime bersama | Perubahan relevan Windows |
+| `macos-node` | Lane test TypeScript macOS menggunakan artefak build bersama | Perubahan relevan macOS |
+| `macos-swift` | Swift lint, build, dan test untuk aplikasi macOS | Perubahan relevan macOS |
+| `android` | Test unit Android untuk kedua flavor plus satu build APK debug | Perubahan relevan Android |
+| `test-performance-agent` | Optimisasi test lambat Codex harian setelah aktivitas tepercaya | Sukses CI main atau dispatch manual |
+| `openclaw-performance` | Laporan performa runtime Kova harian/sesuai permintaan dengan lane mock-provider, deep-profile, dan GPT 5.4 live | Dispatch terjadwal dan manual |
## Urutan fail-fast
-1. `preflight` menentukan lane mana yang ada sejak awal. Logika `docs-scope` dan `changed-scope` adalah langkah di dalam job ini, bukan job mandiri.
+1. `preflight` menentukan lane mana yang ada sama sekali. Logika `docs-scope` dan `changed-scope` adalah langkah di dalam job ini, bukan job mandiri.
2. `security-scm-fast`, `security-dependency-audit`, `security-fast`, `check`, `check-additional`, `check-docs`, dan `skills-python` gagal cepat tanpa menunggu job matriks artefak dan platform yang lebih berat.
-3. `build-artifacts` berjalan beririsan dengan lane Linux cepat agar konsumen downstream dapat mulai segera setelah build bersama siap.
+3. `build-artifacts` berjalan tumpang tindih dengan lane Linux cepat sehingga konsumen downstream dapat mulai segera setelah build bersama siap.
4. Lane platform dan runtime yang lebih berat menyebar setelah itu: `checks-fast-core`, `checks-fast-contracts-channels`, `checks-node-core-test`, `checks`, `checks-windows`, `macos-node`, `macos-swift`, dan `android`.
-GitHub dapat menandai job yang tergantikan sebagai `cancelled` ketika push yang lebih baru masuk ke PR yang sama atau ref `main`. Perlakukan itu sebagai noise CI kecuali eksekusi terbaru untuk ref yang sama juga gagal. Pemeriksaan shard agregat menggunakan `!cancelled() && always()` sehingga tetap melaporkan kegagalan shard normal tetapi tidak mengantre setelah seluruh workflow sudah tergantikan. Kunci konkurensi CI otomatis diberi versi (`CI-v7-*`) sehingga zombie di sisi GitHub dalam grup antrean lama tidak dapat memblokir eksekusi main yang lebih baru tanpa batas. Eksekusi full-suite manual menggunakan `CI-manual-v1-*` dan tidak membatalkan eksekusi yang sedang berjalan.
+GitHub dapat menandai job yang tergantikan sebagai `cancelled` ketika push yang lebih baru masuk pada PR yang sama atau ref `main`. Perlakukan itu sebagai noise CI kecuali run terbaru untuk ref yang sama juga gagal. Pemeriksaan shard agregat menggunakan `!cancelled() && always()` sehingga tetap melaporkan kegagalan shard normal tetapi tidak mengantre setelah seluruh workflow sudah tergantikan. Key konkurensi CI otomatis diberi versi (`CI-v7-*`) sehingga zombie sisi GitHub dalam grup antrean lama tidak dapat memblokir run main yang lebih baru tanpa batas. Run full-suite manual menggunakan `CI-manual-v1-*` dan tidak membatalkan run yang sedang berjalan.
-## Cakupan dan routing
+## Scope dan routing
-Logika cakupan berada di `scripts/ci-changed-scope.mjs` dan dicakup oleh tes unit di `src/scripts/ci-changed-scope.test.ts`. Dispatch manual melewati deteksi changed-scope dan membuat manifes preflight bertindak seolah setiap area bercakupan berubah.
+Logika scope berada di `scripts/ci-changed-scope.mjs` dan dicakup oleh test unit di `src/scripts/ci-changed-scope.test.ts`. Dispatch manual melewati deteksi changed-scope dan membuat manifes preflight bertindak seolah setiap area terscope berubah.
-- **Edit workflow CI** memvalidasi graf CI Node plus linting workflow, tetapi tidak memaksa build native Windows, Android, atau macOS dengan sendirinya; lane platform tersebut tetap dicakup ke perubahan sumber platform.
-- **Edit khusus routing CI, edit fixture core-test murah tertentu, dan edit helper/test-routing kontrak plugin yang sempit** menggunakan jalur manifes cepat khusus Node: `preflight`, keamanan, dan satu tugas `checks-fast-core`. Jalur itu melewati artefak build, kompatibilitas Node 22, kontrak channel, shard inti penuh, shard bundled-plugin, dan matriks guard tambahan ketika perubahan terbatas pada permukaan routing atau helper yang langsung diuji tugas cepat.
-- **Pemeriksaan Node Windows** dicakup ke wrapper proses/path khusus Windows, helper runner npm/pnpm/UI, konfigurasi package manager, dan permukaan workflow CI yang mengeksekusi lane itu; perubahan sumber, plugin, install-smoke, dan khusus tes yang tidak terkait tetap berada pada lane Node Linux.
+- **Edit workflow CI** memvalidasi grafik CI Node plus linting workflow, tetapi tidak memaksa build native Windows, Android, atau macOS dengan sendirinya; lane platform tersebut tetap terscope ke perubahan sumber platform.
+- **Edit khusus routing CI, edit fixture core-test murah tertentu, dan edit helper/test-routing kontrak Plugin yang sempit** menggunakan path manifes cepat khusus Node: `preflight`, keamanan, dan satu tugas `checks-fast-core`. Path itu melewati artefak build, kompatibilitas Node 22, kontrak channel, shard core penuh, shard Plugin bawaan, dan matriks guard tambahan ketika perubahan terbatas pada permukaan routing atau helper yang dilatih langsung oleh tugas cepat tersebut.
+- **Pemeriksaan Node Windows** terscope ke wrapper proses/path khusus Windows, helper runner npm/pnpm/UI, konfigurasi package manager, dan permukaan workflow CI yang menjalankan lane tersebut; perubahan sumber, Plugin, install-smoke, dan khusus test yang tidak terkait tetap pada lane Linux Node.
-Keluarga tes Node paling lambat dipisah atau diseimbangkan agar setiap job tetap kecil tanpa memesan runner berlebihan: kontrak channel berjalan sebagai tiga shard berbobot, lane core unit fast/support berjalan terpisah, infrastruktur runtime inti dibagi antara shard state dan process/config, auto-reply berjalan sebagai worker seimbang (dengan subtree reply dipisah menjadi shard agent-runner, dispatch, dan commands/state-routing), dan konfigurasi gateway/server agentic dipisah di lane chat/auth/model/http-plugin/runtime/startup alih-alih menunggu artefak build. Tes browser, QA, media, dan plugin lain yang luas menggunakan konfigurasi Vitest khususnya, bukan catch-all plugin bersama. Shard include-pattern mencatat entri timing menggunakan nama shard CI, sehingga `.artifacts/vitest-shard-timings.json` dapat membedakan seluruh konfigurasi dari shard terfilter. `check-additional` menjaga pekerjaan compile/canary package-boundary tetap bersama dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; daftar guard boundary distriping di empat shard matriks, masing-masing menjalankan guard independen terpilih secara bersamaan dan mencetak timing per pemeriksaan, termasuk `pnpm prompt:snapshots:check` sehingga drift prompt happy-path runtime Codex dipatok ke PR yang menyebabkannya. Gateway watch, tes channel, dan shard core support-boundary berjalan bersamaan di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibangun.
+Keluarga test Node paling lambat dibagi atau diseimbangkan agar setiap job tetap kecil tanpa memesan runner berlebihan: kontrak channel berjalan sebagai tiga shard berbobot, lane core unit fast/support berjalan terpisah, infra runtime core dibagi antara shard state dan process/config, auto-reply berjalan sebagai worker seimbang (dengan subtree reply dibagi menjadi shard agent-runner, dispatch, dan commands/state-routing), dan konfigurasi gateway/server agentic dibagi di seluruh lane chat/auth/model/http-plugin/runtime/startup alih-alih menunggu artefak build. Test browser, QA, media, dan Plugin lain-lain yang luas menggunakan konfigurasi Vitest khususnya, bukan catch-all Plugin bersama. Shard include-pattern merekam entri timing menggunakan nama shard CI, sehingga `.artifacts/vitest-shard-timings.json` dapat membedakan seluruh config dari shard terfilter. `check-additional` menjaga pekerjaan compile/canary package-boundary tetap bersama dan memisahkan arsitektur topologi runtime dari cakupan gateway watch; daftar guard boundary distriping di empat shard matriks, masing-masing menjalankan guard independen terpilih secara paralel dan mencetak timing per pemeriksaan, termasuk `pnpm prompt:snapshots:check` sehingga drift prompt happy-path runtime Codex dipaku ke PR yang menyebabkannya. Gateway watch, test channel, dan shard core support-boundary berjalan bersamaan di dalam `build-artifacts` setelah `dist/` dan `dist-runtime/` sudah dibangun.
-CI Android menjalankan `testPlayDebugUnitTest` dan `testThirdPartyDebugUnitTest`, lalu membangun APK debug Play. Flavor third-party tidak memiliki source set atau manifes terpisah; lane tes unitnya tetap mengompilasi flavor dengan flag BuildConfig SMS/call-log, sekaligus menghindari job packaging APK debug duplikat pada setiap push yang relevan dengan Android.
+CI Android menjalankan `testPlayDebugUnitTest` dan `testThirdPartyDebugUnitTest` lalu membangun APK debug Play. Flavor third-party tidak memiliki source set atau manifes terpisah; lane unit-test-nya tetap mengompilasi flavor dengan flag BuildConfig SMS/call-log, sambil menghindari job packaging APK debug duplikat pada setiap push relevan Android.
-Shard `check-dependencies` menjalankan `pnpm deadcode:dependencies` (pass Knip khusus dependensi produksi yang dipatok ke versi Knip terbaru, dengan usia rilis minimum pnpm dinonaktifkan untuk instalasi `dlx`) dan `pnpm deadcode:unused-files`, yang membandingkan temuan file produksi tidak terpakai dari Knip dengan `scripts/deadcode-unused-files.allowlist.mjs`. Guard file tidak terpakai gagal ketika PR menambahkan file tidak terpakai baru yang belum ditinjau atau meninggalkan entri allowlist basi, sambil mempertahankan permukaan plugin dinamis, generated, build, live-test, dan package bridge yang disengaja yang tidak dapat diselesaikan Knip secara statis.
+Shard `check-dependencies` menjalankan `pnpm deadcode:dependencies` (pass khusus dependensi Knip produksi yang dipaku ke versi Knip terbaru, dengan usia rilis minimum pnpm dinonaktifkan untuk instalasi `dlx`) dan `pnpm deadcode:unused-files`, yang membandingkan temuan unused-file produksi Knip terhadap `scripts/deadcode-unused-files.allowlist.mjs`. Guard unused-file gagal ketika PR menambahkan file tidak terpakai baru yang belum ditinjau atau meninggalkan entri allowlist basi, sambil mempertahankan permukaan Plugin dinamis, generated, build, live-test, dan package bridge yang disengaja yang tidak dapat diselesaikan Knip secara statis.
## Penerusan aktivitas ClawSweeper
-`.github/workflows/clawsweeper-dispatch.yml` adalah bridge sisi target dari aktivitas repository OpenClaw ke ClawSweeper. Workflow ini tidak melakukan checkout atau mengeksekusi kode pull request yang tidak tepercaya. Workflow membuat token GitHub App dari `CLAWSWEEPER_APP_PRIVATE_KEY`, lalu mengirim payload `repository_dispatch` ringkas ke `openclaw/clawsweeper`.
+`.github/workflows/clawsweeper-dispatch.yml` adalah bridge sisi target dari aktivitas repositori OpenClaw ke ClawSweeper. Workflow ini tidak checkout atau mengeksekusi kode pull request tidak tepercaya. Workflow membuat token GitHub App dari `CLAWSWEEPER_APP_PRIVATE_KEY`, lalu mengirim payload `repository_dispatch` ringkas ke `openclaw/clawsweeper`.
Workflow ini memiliki empat lane:
-- `clawsweeper_item` untuk permintaan tinjauan issue dan pull request yang tepat;
-- `clawsweeper_comment` untuk perintah ClawSweeper eksplisit di komentar issue;
-- `clawsweeper_commit_review` untuk permintaan tinjauan tingkat commit pada push `main`;
-- `github_activity` untuk aktivitas GitHub umum yang dapat diperiksa agen ClawSweeper.
+- `clawsweeper_item` untuk permintaan review issue dan pull request yang tepat;
+- `clawsweeper_comment` untuk perintah ClawSweeper eksplisit dalam komentar issue;
+- `clawsweeper_commit_review` untuk permintaan review tingkat commit pada push `main`;
+- `github_activity` untuk aktivitas GitHub umum yang dapat diperiksa agent ClawSweeper.
-Lane `github_activity` hanya meneruskan metadata yang dinormalisasi: jenis event, aksi, aktor, repository, nomor item, URL, judul, status, dan kutipan singkat untuk komentar atau ulasan jika ada. Lane ini sengaja menghindari penerusan seluruh body webhook. Workflow penerima di `openclaw/clawsweeper` adalah `.github/workflows/github-activity.yml`, yang mengirim event yang dinormalisasi ke hook OpenClaw Gateway untuk agen ClawSweeper.
+Lane `github_activity` hanya meneruskan metadata yang dinormalisasi: jenis event, action, actor, repositori, nomor item, URL, judul, state, dan kutipan singkat untuk komentar atau review jika ada. Lane ini sengaja menghindari penerusan seluruh body webhook. Workflow penerima di `openclaw/clawsweeper` adalah `.github/workflows/github-activity.yml`, yang memposting event yang dinormalisasi ke hook OpenClaw Gateway untuk agent ClawSweeper.
-Aktivitas umum adalah observasi, bukan pengiriman secara default. Agen ClawSweeper menerima target Discord di prompt-nya dan hanya boleh memposting ke `#clawsweeper` ketika event mengejutkan, dapat ditindaklanjuti, berisiko, atau berguna secara operasional. Pembukaan rutin, edit, churn bot, noise webhook duplikat, dan lalu lintas ulasan normal harus menghasilkan `NO_REPLY`.
+Aktivitas umum adalah observasi, bukan pengiriman secara default. Agent ClawSweeper menerima target Discord dalam prompt-nya dan sebaiknya memposting ke `#clawsweeper` hanya ketika event tersebut mengejutkan, dapat ditindaklanjuti, berisiko, atau berguna secara operasional. Pembukaan rutin, edit, churn bot, noise webhook duplikat, dan traffic review normal sebaiknya menghasilkan `NO_REPLY`.
-Perlakukan judul, komentar, body, teks ulasan, nama branch, dan pesan commit GitHub sebagai data yang tidak tepercaya di seluruh jalur ini. Semua itu adalah input untuk peringkasan dan triase, bukan instruksi untuk workflow atau runtime agen.
+Perlakukan judul, komentar, body, teks review, nama branch, dan pesan commit GitHub sebagai data tidak tepercaya di seluruh path ini. Semuanya adalah input untuk peringkasan dan triage, bukan instruksi untuk workflow atau runtime agent.
## Dispatch manual
-Dispatch CI manual menjalankan grafik job yang sama seperti CI normal tetapi memaksa setiap lane berscope non-Android aktif: shard Linux Node, shard plugin bawaan, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, smoke build, pemeriksaan dokumen, Python skills, Windows, macOS, dan i18n Control UI. Dispatch CI manual mandiri hanya menjalankan Android dengan `include_android=true`; umbrella rilis penuh mengaktifkan Android dengan meneruskan `include_android=true`. Pemeriksaan statis prarilis Plugin, shard `agentic-plugins` khusus rilis, sweep batch ekstensi penuh, dan lane Docker prarilis Plugin dikecualikan dari CI. Suite Docker prarilis hanya berjalan saat `Full Release Validation` men-dispatch workflow `Plugin Prerelease` terpisah dengan gate validasi rilis diaktifkan.
+Dispatch CI manual menjalankan grafik job yang sama seperti CI normal, tetapi memaksa setiap lane berskop non-Android aktif: shard Linux Node, shard plugin bawaan, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, smoke build, pemeriksaan docs, Python skills, Windows, macOS, dan i18n Control UI. Dispatch CI manual mandiri hanya menjalankan Android dengan `include_android=true`; payung rilis penuh mengaktifkan Android dengan meneruskan `include_android=true`. Pemeriksaan statis prarilis Plugin, shard khusus rilis `agentic-plugins`, sweep batch ekstensi penuh, dan lane Docker prarilis plugin dikecualikan dari CI. Suite Docker prarilis hanya berjalan ketika `Full Release Validation` men-dispatch workflow `Plugin Prerelease` terpisah dengan gate validasi rilis diaktifkan.
-Run manual menggunakan grup konkurensi unik sehingga suite penuh kandidat rilis tidak dibatalkan oleh run push atau PR lain pada ref yang sama. Input opsional `target_ref` memungkinkan caller tepercaya menjalankan grafik tersebut terhadap branch, tag, atau SHA commit penuh sambil menggunakan file workflow dari ref dispatch yang dipilih.
+Run manual menggunakan grup konkurensi unik sehingga suite penuh kandidat rilis tidak dibatalkan oleh run push atau PR lain pada ref yang sama. Input opsional `target_ref` memungkinkan caller tepercaya menjalankan grafik itu terhadap branch, tag, atau SHA commit penuh sambil menggunakan file workflow dari ref dispatch yang dipilih.
```bash
gh workflow run ci.yml --ref release/YYYY.M.D
@@ -98,17 +98,17 @@ gh workflow run full-release-validation.yml --ref main -f ref=
## Runner
-| Runner | Job |
-| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `ubuntu-24.04` | `preflight`, job dan agregat keamanan cepat (`security-scm-fast`, `security-dependency-audit`, `security-fast`), pemeriksaan protokol/kontrak/bundled cepat, pemeriksaan kontrak channel tershard, shard `check` kecuali lint, shard dan agregat `check-additional`, verifier agregat pengujian Node, pemeriksaan dokumen, Python skills, workflow-sanity, labeler, auto-response; preflight install-smoke juga menggunakan Ubuntu yang dihosting GitHub agar matriks Blacksmith dapat antre lebih awal |
-| `blacksmith-4vcpu-ubuntu-2404` | `CodeQL Critical Quality`, shard ekstensi berbobot lebih rendah, `checks-fast-core`, `checks-node-compat-node22`, `check-prod-types`, dan `check-test-types` |
-| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, build-smoke, shard pengujian Linux Node, shard pengujian plugin bawaan, `android` |
-| `blacksmith-16vcpu-ubuntu-2404` | `check-lint` (cukup sensitif CPU sehingga 8 vCPU memakan biaya lebih besar daripada penghematannya); build Docker install-smoke (waktu antre 32-vCPU memakan biaya lebih besar daripada penghematannya) |
-| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
-| `blacksmith-6vcpu-macos-latest` | `macos-node` pada `openclaw/openclaw`; fork fallback ke `macos-latest` |
-| `blacksmith-12vcpu-macos-latest` | `macos-swift` pada `openclaw/openclaw`; fork fallback ke `macos-latest` |
+| Runner | Job |
+| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `ubuntu-24.04` | `preflight`, job keamanan cepat dan agregat (`security-scm-fast`, `security-dependency-audit`, `security-fast`), pemeriksaan protokol/kontrak/bawaan cepat, pemeriksaan kontrak channel yang di-shard, shard `check` kecuali lint, shard dan agregat `check-additional`, verifier agregat pengujian Node, pemeriksaan docs, Python skills, workflow-sanity, labeler, auto-response; preflight install-smoke juga menggunakan Ubuntu yang dihosting GitHub agar matriks Blacksmith bisa mengantre lebih awal |
+| `blacksmith-4vcpu-ubuntu-2404` | `CodeQL Critical Quality`, shard ekstensi berbobot lebih ringan, `checks-fast-core`, `checks-node-compat-node22`, `check-prod-types`, dan `check-test-types` |
+| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, build-smoke, shard pengujian Linux Node, shard pengujian plugin bawaan, `android` |
+| `blacksmith-16vcpu-ubuntu-2404` | `check-lint` (cukup sensitif CPU sehingga 8 vCPU lebih mahal daripada penghematannya); build Docker install-smoke (biaya waktu antre 32-vCPU lebih mahal daripada penghematannya) |
+| `blacksmith-16vcpu-windows-2025` | `checks-windows` |
+| `blacksmith-6vcpu-macos-latest` | `macos-node` pada `openclaw/openclaw`; fork fallback ke `macos-latest` |
+| `blacksmith-12vcpu-macos-latest` | `macos-swift` pada `openclaw/openclaw`; fork fallback ke `macos-latest` |
-## Padanan Lokal
+## Padanan lokal
```bash
pnpm changed:lanes # inspect the local changed-lane classifier for origin/main...HEAD
@@ -137,7 +137,7 @@ pnpm perf:kova:summary --report .artifacts/kova/reports/mock-provider/report.jso
## Performa OpenClaw
-`OpenClaw Performance` adalah workflow performa produk/runtime. Workflow ini berjalan setiap hari pada `main` dan dapat di-dispatch secara manual:
+`OpenClaw Performance` adalah workflow performa produk/runtime. Workflow ini berjalan harian pada `main` dan dapat di-dispatch secara manual:
```bash
gh workflow run openclaw-performance.yml --ref main -f profile=diagnostic -f repeat=3
@@ -145,27 +145,27 @@ gh workflow run openclaw-performance.yml --ref main -f profile=smoke -f repeat=1
gh workflow run openclaw-performance.yml --ref main -f target_ref=v2026.5.2 -f profile=diagnostic -f repeat=3
```
-Dispatch manual biasanya melakukan benchmark terhadap ref workflow. Tetapkan `target_ref` untuk melakukan benchmark terhadap tag rilis atau branch lain dengan implementasi workflow saat ini. Path laporan yang diterbitkan dan pointer terbaru dikunci berdasarkan ref yang diuji, dan setiap `index.md` mencatat ref/SHA yang diuji, ref/SHA workflow, ref Kova, profil, mode auth lane, model, jumlah pengulangan, dan filter skenario.
+Dispatch manual biasanya melakukan benchmark pada ref workflow. Atur `target_ref` untuk melakukan benchmark pada tag rilis atau branch lain dengan implementasi workflow saat ini. Path laporan yang dipublikasikan dan pointer terbaru diberi kunci berdasarkan ref yang diuji, dan setiap `index.md` mencatat ref/SHA yang diuji, ref/SHA workflow, ref Kova, profil, mode auth lane, model, jumlah pengulangan, dan filter skenario.
Workflow menginstal OCM dari rilis yang dipin dan Kova dari `openclaw/Kova` pada input `kova_ref` yang dipin, lalu menjalankan tiga lane:
-- `mock-provider`: Skenario diagnostik Kova terhadap runtime build lokal dengan auth palsu kompatibel OpenAI yang deterministik.
-- `mock-deep-profile`: Profiling CPU/heap/trace untuk hotspot startup, gateway, dan giliran agen.
-- `live-gpt54`: Giliran agen OpenAI `openai/gpt-5.4` nyata, dilewati saat `OPENAI_API_KEY` tidak tersedia.
+- `mock-provider`: skenario diagnostik Kova terhadap runtime build lokal dengan auth kompatibel OpenAI palsu yang deterministik.
+- `mock-deep-profile`: profiling CPU/heap/trace untuk hotspot startup, gateway, dan agent-turn.
+- `live-gpt54`: satu turn agen OpenAI `openai/gpt-5.4` nyata, dilewati ketika `OPENAI_API_KEY` tidak tersedia.
-Lane mock-provider juga menjalankan probe sumber native OpenClaw setelah pass Kova: timing boot gateway dan memori pada kasus startup default, hook, dan 50-plugin; loop hello `channel-chat-baseline` mock-OpenAI berulang; dan perintah startup CLI terhadap gateway yang sudah boot. Ringkasan Markdown probe sumber berada di `source/index.md` dalam bundle laporan, dengan JSON mentah di sebelahnya.
+Lane mock-provider juga menjalankan probe sumber asli OpenClaw setelah pass Kova: timing boot gateway dan memori pada kasus startup default, hook, dan 50-plugin; loop hello `channel-chat-baseline` mock-OpenAI berulang; serta perintah startup CLI terhadap gateway yang sudah di-boot. Ringkasan Markdown probe sumber berada di `source/index.md` dalam bundle laporan, dengan JSON mentah di sampingnya.
-Setiap lane mengunggah artefak GitHub. Saat `CLAWGRIT_REPORTS_TOKEN` dikonfigurasi, workflow juga meng-commit `report.json`, `report.md`, bundle, `index.md`, dan artefak probe sumber ke `openclaw/clawgrit-reports` di bawah `openclaw-performance//-//`. Pointer ref yang sedang diuji ditulis sebagai `openclaw-performance//latest-.json`.
+Setiap lane mengunggah artefak GitHub. Ketika `CLAWGRIT_REPORTS_TOKEN` dikonfigurasi, workflow juga meng-commit `report.json`, `report.md`, bundle, `index.md`, dan artefak source-probe ke `openclaw/clawgrit-reports` di bawah `openclaw-performance//-//`. Pointer ref teruji saat ini ditulis sebagai `openclaw-performance//latest-.json`.
## Validasi Rilis Penuh
-`Full Release Validation` adalah workflow umbrella manual untuk "menjalankan semuanya sebelum rilis." Workflow ini menerima branch, tag, atau SHA commit penuh, men-dispatch workflow manual `CI` dengan target tersebut, men-dispatch `Plugin Prerelease` untuk bukti plugin/paket/statis/Docker khusus rilis, dan men-dispatch `OpenClaw Release Checks` untuk install smoke, penerimaan paket, suite jalur rilis Docker, live/E2E, OpenWebUI, paritas QA Lab, Matrix, dan lane Telegram. Dengan `rerun_group=all` dan `release_profile=full`, workflow ini juga menjalankan `NPM Telegram Beta E2E` terhadap artefak `release-package-under-test` dari pemeriksaan rilis. Setelah penerbitan, teruskan `npm_telegram_package_spec` untuk menjalankan ulang lane paket Telegram yang sama terhadap paket npm yang sudah diterbitkan.
+`Full Release Validation` adalah workflow payung manual untuk "menjalankan semuanya sebelum rilis." Workflow ini menerima branch, tag, atau SHA commit penuh, men-dispatch workflow manual `CI` dengan target tersebut, men-dispatch `Plugin Prerelease` untuk pembuktian plugin/paket/statis/Docker khusus rilis, dan men-dispatch `OpenClaw Release Checks` untuk smoke install, penerimaan paket, pemeriksaan paket lintas OS, paritas QA Lab, Matrix, dan lane Telegram. Run stabil/default menjaga cakupan live/E2E dan jalur rilis Docker yang menyeluruh di balik `run_release_soak=true`; `release_profile=full` memaksa cakupan soak itu aktif agar validasi advisory luas tetap luas. Dengan `rerun_group=all` dan `release_profile=full`, workflow ini juga menjalankan `NPM Telegram Beta E2E` terhadap artefak `release-package-under-test` dari pemeriksaan rilis. Setelah publikasi, teruskan `npm_telegram_package_spec` untuk menjalankan ulang lane paket Telegram yang sama terhadap paket npm yang dipublikasikan.
-Lihat [validasi rilis penuh](/id/reference/full-release-validation) untuk
-matriks tahap, nama job workflow persis, perbedaan profil, artefak, dan
+Lihat [Validasi rilis penuh](/id/reference/full-release-validation) untuk
+matriks tahap, nama job workflow yang tepat, perbedaan profil, artefak, dan
handle rerun terfokus.
-`OpenClaw Release Publish` adalah workflow rilis manual yang mengubah state. Dispatch dari `release/YYYY.M.D` atau `main` setelah tag rilis ada dan setelah preflight npm OpenClaw berhasil. Workflow ini memverifikasi `pnpm plugins:sync:check`, men-dispatch `Plugin NPM Release` untuk semua paket plugin yang dapat diterbitkan, men-dispatch `Plugin ClawHub Release` untuk SHA rilis yang sama, dan baru kemudian men-dispatch `OpenClaw NPM Release` dengan `preflight_run_id` yang disimpan.
+`OpenClaw Release Publish` adalah workflow rilis manual yang mengubah keadaan. Dispatch dari `release/YYYY.M.D` atau `main` setelah tag rilis ada dan setelah preflight npm OpenClaw berhasil. Workflow ini memverifikasi `pnpm plugins:sync:check`, men-dispatch `Plugin NPM Release` untuk semua paket plugin yang dapat dipublikasikan, men-dispatch `Plugin ClawHub Release` untuk SHA rilis yang sama, dan baru kemudian men-dispatch `OpenClaw NPM Release` dengan `preflight_run_id` yang disimpan.
```bash
gh workflow run openclaw-release-publish.yml \
@@ -182,38 +182,33 @@ Untuk bukti commit yang dipin pada branch yang bergerak cepat, gunakan helper al
pnpm ci:full-release --sha
```
-Ref dispatch workflow GitHub harus berupa branch atau tag, bukan SHA commit mentah. Helper
-mendorong branch sementara `release-ci/-...` pada SHA target,
-men-dispatch `Full Release Validation` dari ref yang dipin tersebut, memverifikasi setiap
-workflow turunan `headSha` cocok dengan target, dan menghapus branch sementara saat
-run selesai. Verifier umbrella juga gagal jika workflow turunan mana pun berjalan pada
-SHA yang berbeda.
+Ref dispatch workflow GitHub harus berupa branch atau tag, bukan SHA commit mentah. Helper mendorong branch sementara `release-ci/-...` pada SHA target, men-dispatch `Full Release Validation` dari ref yang dipin itu, memverifikasi setiap `headSha` workflow anak cocok dengan target, dan menghapus branch sementara ketika run selesai. Verifier payung juga gagal jika ada workflow anak yang berjalan pada SHA berbeda.
-`release_profile` mengontrol cakupan langsung/penyedia yang diteruskan ke pemeriksaan rilis. Alur kerja rilis manual default ke `stable`; gunakan `full` hanya saat Anda memang menginginkan matriks penasihat penyedia/media yang luas.
+`release_profile` mengontrol cakupan live/penyedia yang diteruskan ke pemeriksaan rilis. Alur kerja rilis manual secara default menggunakan `stable`; gunakan `full` hanya ketika Anda sengaja menginginkan matriks penyedia/media advisori yang luas. `run_release_soak` mengontrol apakah pemeriksaan rilis stable/default menjalankan soak jalur rilis live/E2E dan Docker yang menyeluruh; `full` memaksa soak aktif.
-- `minimum` mempertahankan jalur OpenAI/inti yang paling cepat dan kritis untuk rilis.
+- `minimum` mempertahankan lane OpenAI/core paling cepat yang kritis untuk rilis.
- `stable` menambahkan set penyedia/backend stabil.
-- `full` menjalankan matriks penasihat penyedia/media yang luas.
+- `full` menjalankan matriks penyedia/media advisori yang luas.
-Umbrella mencatat id proses anak yang dikirim, dan pekerjaan akhir `Verify full validation` memeriksa ulang kesimpulan proses anak saat ini serta menambahkan tabel pekerjaan paling lambat untuk setiap proses anak. Jika alur kerja anak dijalankan ulang dan menjadi hijau, jalankan ulang hanya pekerjaan pemverifikasi induk untuk menyegarkan hasil umbrella dan ringkasan waktunya.
+Payung mencatat ID run anak yang didispatch, dan job final `Verify full validation` memeriksa ulang kesimpulan run anak saat ini dan menambahkan tabel job terlambat untuk setiap run anak. Jika alur kerja anak dijalankan ulang dan menjadi hijau, jalankan ulang hanya job verifier induk untuk menyegarkan hasil payung dan ringkasan waktunya.
-Untuk pemulihan, `Full Release Validation` dan `OpenClaw Release Checks` sama-sama menerima `rerun_group`. Gunakan `all` untuk kandidat rilis, `ci` hanya untuk anak CI penuh normal, `plugin-prerelease` hanya untuk anak prarilis Plugin, `release-checks` untuk setiap anak rilis, atau grup yang lebih sempit: `install-smoke`, `cross-os`, `live-e2e`, `package`, `qa`, `qa-parity`, `qa-live`, atau `npm-telegram` pada umbrella. Ini menjaga proses ulang kotak rilis yang gagal tetap terbatas setelah perbaikan terfokus.
+Untuk pemulihan, baik `Full Release Validation` maupun `OpenClaw Release Checks` menerima `rerun_group`. Gunakan `all` untuk kandidat rilis, `ci` hanya untuk anak CI penuh normal, `plugin-prerelease` hanya untuk anak prarilis plugin, `release-checks` untuk setiap anak rilis, atau grup yang lebih sempit: `install-smoke`, `cross-os`, `live-e2e`, `package`, `qa`, `qa-parity`, `qa-live`, atau `npm-telegram` pada payung. Ini menjaga agar rerun kotak rilis yang gagal tetap terbatas setelah perbaikan terfokus. Untuk satu lane cross-OS yang gagal, gabungkan `rerun_group=cross-os` dengan `cross_os_suite_filter`, misalnya `windows/packaged-upgrade`; perintah cross-OS yang panjang memancarkan baris Heartbeat dan ringkasan packaged-upgrade menyertakan timing per fase. Lane QA release-check bersifat advisori, jadi kegagalan khusus QA memberi peringatan tetapi tidak memblokir verifier release-check.
-`OpenClaw Release Checks` menggunakan ref alur kerja tepercaya untuk menyelesaikan ref yang dipilih satu kali menjadi tarball `release-package-under-test`, lalu meneruskan artefak itu ke alur kerja Docker jalur rilis langsung/E2E dan shard penerimaan paket. Ini menjaga byte paket tetap konsisten di seluruh kotak rilis dan menghindari pengemasan ulang kandidat yang sama di beberapa pekerjaan anak.
+`OpenClaw Release Checks` menggunakan ref alur kerja tepercaya untuk me-resolve ref terpilih satu kali menjadi tarball `release-package-under-test`, lalu meneruskan artefak itu ke pemeriksaan cross-OS dan Package Acceptance, ditambah alur kerja Docker jalur rilis live/E2E ketika cakupan soak berjalan. Ini menjaga byte paket tetap konsisten di seluruh kotak rilis dan menghindari pengemasan ulang kandidat yang sama di beberapa job anak.
-Proses `Full Release Validation` duplikat untuk `ref=main` dan `rerun_group=all`
-menggantikan umbrella yang lebih lama. Pemantau induk membatalkan setiap alur kerja anak yang
-telah dikirim saat induk dibatalkan, sehingga validasi main yang lebih baru
-tidak tertahan di belakang proses pemeriksaan rilis usang berdurasi dua jam. Validasi cabang/tag
-rilis dan grup proses ulang terfokus mempertahankan `cancel-in-progress: false`.
+Duplikat run `Full Release Validation` untuk `ref=main` dan `rerun_group=all`
+menggantikan payung yang lebih lama. Monitor induk membatalkan alur kerja anak mana pun yang
+telah didispatch ketika induk dibatalkan, sehingga validasi main yang lebih baru
+tidak tertahan di belakang run release-check dua jam yang basi. Validasi branch/tag
+rilis dan grup rerun terfokus mempertahankan `cancel-in-progress: false`.
-## Shard Langsung dan E2E
+## Shard Live dan E2E
-Anak langsung/E2E rilis mempertahankan cakupan native `pnpm test:live` yang luas, tetapi menjalankannya sebagai shard bernama melalui `scripts/test-live-shard.mjs`, bukan sebagai satu pekerjaan serial:
+Anak live/E2E rilis mempertahankan cakupan native `pnpm test:live` yang luas, tetapi menjalankannya sebagai shard bernama melalui `scripts/test-live-shard.mjs` alih-alih satu job serial:
- `native-live-src-agents`
- `native-live-src-gateway-core`
-- pekerjaan `native-live-src-gateway-profiles` yang difilter penyedia
+- job `native-live-src-gateway-profiles` yang difilter berdasarkan penyedia
- `native-live-src-gateway-backends`
- `native-live-test`
- `native-live-extensions-a-k`
@@ -221,61 +216,61 @@ Anak langsung/E2E rilis mempertahankan cakupan native `pnpm test:live` yang luas
- `native-live-extensions-openai`
- `native-live-extensions-o-z-other`
- `native-live-extensions-xai`
-- shard audio/video media terpisah dan shard musik yang difilter penyedia
+- shard audio/video media terpisah dan shard musik yang difilter berdasarkan penyedia
-Ini mempertahankan cakupan file yang sama sekaligus membuat kegagalan penyedia langsung yang lambat lebih mudah dijalankan ulang dan didiagnosis. Nama shard agregat `native-live-extensions-o-z`, `native-live-extensions-media`, dan `native-live-extensions-media-music` tetap valid untuk proses ulang sekali jalan secara manual.
+Ini mempertahankan cakupan file yang sama sambil membuat kegagalan penyedia live yang lambat lebih mudah dijalankan ulang dan didiagnosis. Nama shard agregat `native-live-extensions-o-z`, `native-live-extensions-media`, dan `native-live-extensions-media-music` tetap valid untuk rerun sekali jalan manual.
-Shard media langsung native berjalan di `ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`, yang dibangun oleh alur kerja `Live Media Runner Image`. Image itu memasang `ffmpeg` dan `ffprobe` terlebih dahulu; pekerjaan media hanya memverifikasi biner sebelum penyiapan. Pertahankan suite langsung berbasis Docker pada runner Blacksmith normal — pekerjaan container bukan tempat yang tepat untuk meluncurkan pengujian Docker bersarang.
+Shard media live native berjalan di `ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`, yang dibangun oleh alur kerja `Live Media Runner Image`. Image itu sudah memasang `ffmpeg` dan `ffprobe`; job media hanya memverifikasi biner sebelum setup. Pertahankan suite live berbasis Docker pada runner Blacksmith normal — job container adalah tempat yang salah untuk meluncurkan pengujian Docker bertingkat.
-Shard model/backend langsung berbasis Docker menggunakan image bersama terpisah `ghcr.io/openclaw/openclaw-live-test:` per commit yang dipilih. Alur kerja rilis langsung membangun dan mendorong image itu satu kali, lalu shard model langsung Docker, Gateway yang di-shard menurut penyedia, backend CLI, bind ACP, dan harness Codex berjalan dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. Shard Docker Gateway membawa batas `timeout` tingkat skrip eksplisit di bawah batas waktu pekerjaan alur kerja, sehingga container yang macet atau jalur pembersihan gagal cepat alih-alih menghabiskan seluruh anggaran pemeriksaan rilis. Jika shard tersebut membangun ulang target Docker sumber penuh secara independen, proses rilis salah konfigurasi dan akan membuang waktu pada build image duplikat.
+Shard model/backend live berbasis Docker menggunakan image bersama terpisah `ghcr.io/openclaw/openclaw-live-test:` per commit terpilih. Alur kerja rilis live membangun dan mendorong image itu sekali, lalu shard model live Docker, gateway yang di-shard per penyedia, backend CLI, bind ACP, dan harness Codex berjalan dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`. Shard Gateway Docker membawa batas `timeout` eksplisit di level skrip di bawah timeout job alur kerja sehingga container yang macet atau jalur cleanup gagal cepat alih-alih menghabiskan seluruh anggaran release-check. Jika shard tersebut membangun ulang target Docker sumber penuh secara independen, run rilis salah konfigurasi dan akan membuang waktu dinding pada build image duplikat.
-## Penerimaan Paket
+## Package Acceptance
-Gunakan `Package Acceptance` saat pertanyaannya adalah "apakah paket OpenClaw yang dapat diinstal ini berfungsi sebagai produk?" Ini berbeda dari CI normal: CI normal memvalidasi pohon sumber, sedangkan penerimaan paket memvalidasi satu tarball melalui harness Docker E2E yang sama dengan yang digunakan pengguna setelah memasang atau memperbarui.
+Gunakan `Package Acceptance` ketika pertanyaannya adalah "apakah paket OpenClaw yang dapat diinstal ini berfungsi sebagai produk?" Ini berbeda dari CI normal: CI normal memvalidasi pohon sumber, sedangkan package acceptance memvalidasi satu tarball melalui harness Docker E2E yang sama yang dijalankan pengguna setelah instalasi atau pembaruan.
-### Pekerjaan
+### Job
-1. `resolve_package` melakukan checkout `workflow_ref`, menyelesaikan satu kandidat paket, menulis `.artifacts/docker-e2e-package/openclaw-current.tgz`, menulis `.artifacts/docker-e2e-package/package-candidate.json`, mengunggah keduanya sebagai artefak `package-under-test`, dan mencetak sumber, ref alur kerja, ref paket, versi, SHA-256, dan profil dalam ringkasan langkah GitHub.
-2. `docker_acceptance` memanggil `openclaw-live-and-e2e-checks-reusable.yml` dengan `ref=workflow_ref` dan `package_artifact_name=package-under-test`. Alur kerja reusable mengunduh artefak itu, memvalidasi inventaris tarball, menyiapkan image Docker digest paket bila diperlukan, dan menjalankan jalur Docker yang dipilih terhadap paket tersebut alih-alih mengemas checkout alur kerja. Saat sebuah profil memilih beberapa `docker_lanes` bertarget, alur kerja reusable menyiapkan paket dan image bersama satu kali, lalu menyebarkan jalur tersebut sebagai pekerjaan Docker bertarget paralel dengan artefak unik.
-3. `package_telegram` secara opsional memanggil `NPM Telegram Beta E2E`. Ini berjalan saat `telegram_mode` bukan `none` dan memasang artefak `package-under-test` yang sama saat Penerimaan Paket menyelesaikannya; dispatch Telegram mandiri masih dapat memasang spesifikasi npm yang diterbitkan.
-4. `summary` menggagalkan alur kerja jika penyelesaian paket, penerimaan Docker, atau jalur Telegram opsional gagal.
+1. `resolve_package` melakukan checkout `workflow_ref`, me-resolve satu kandidat paket, menulis `.artifacts/docker-e2e-package/openclaw-current.tgz`, menulis `.artifacts/docker-e2e-package/package-candidate.json`, mengunggah keduanya sebagai artefak `package-under-test`, dan mencetak sumber, ref alur kerja, ref paket, versi, SHA-256, dan profil di ringkasan langkah GitHub.
+2. `docker_acceptance` memanggil `openclaw-live-and-e2e-checks-reusable.yml` dengan `ref=workflow_ref` dan `package_artifact_name=package-under-test`. Alur kerja reusable mengunduh artefak itu, memvalidasi inventaris tarball, menyiapkan image Docker package-digest bila diperlukan, dan menjalankan lane Docker terpilih terhadap paket itu alih-alih mengemas checkout alur kerja. Ketika profil memilih beberapa `docker_lanes` tertarget, alur kerja reusable menyiapkan paket dan image bersama satu kali, lalu menyebarkan lane tersebut sebagai job Docker tertarget paralel dengan artefak unik.
+3. `package_telegram` secara opsional memanggil `NPM Telegram Beta E2E`. Ini berjalan ketika `telegram_mode` bukan `none` dan memasang artefak `package-under-test` yang sama ketika Package Acceptance me-resolve satu; dispatch Telegram mandiri masih dapat memasang spesifikasi npm yang sudah dipublikasikan.
+4. `summary` menggagalkan alur kerja jika resolusi paket, Docker acceptance, atau lane Telegram opsional gagal.
-### Sumber Kandidat
+### Sumber kandidat
-- `source=npm` hanya menerima `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw yang persis seperti `openclaw@2026.4.27-beta.2`. Gunakan ini untuk penerimaan prarilis/stabil yang telah diterbitkan.
-- `source=ref` mengemas cabang, tag, atau SHA commit penuh `package_ref` tepercaya. Resolver mengambil cabang/tag OpenClaw, memverifikasi commit yang dipilih dapat dijangkau dari riwayat cabang repositori atau tag rilis, memasang dependensi dalam worktree terlepas, dan mengemasnya dengan `scripts/package-openclaw-for-docker.mjs`.
+- `source=npm` hanya menerima `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw persis seperti `openclaw@2026.4.27-beta.2`. Gunakan ini untuk acceptance prarilis/stable yang sudah dipublikasikan.
+- `source=ref` mengemas branch, tag, atau SHA commit lengkap `package_ref` tepercaya. Resolver mengambil branch/tag OpenClaw, memverifikasi commit terpilih dapat dijangkau dari riwayat branch repositori atau tag rilis, memasang dependensi di worktree terlepas, dan mengemasnya dengan `scripts/package-openclaw-for-docker.mjs`.
- `source=url` mengunduh `.tgz` HTTPS; `package_sha256` wajib.
- `source=artifact` mengunduh satu `.tgz` dari `artifact_run_id` dan `artifact_name`; `package_sha256` opsional tetapi sebaiknya diberikan untuk artefak yang dibagikan secara eksternal.
-Pisahkan `workflow_ref` dan `package_ref`. `workflow_ref` adalah kode alur kerja/harness tepercaya yang menjalankan pengujian. `package_ref` adalah commit sumber yang dikemas saat `source=ref`. Ini memungkinkan harness pengujian saat ini memvalidasi commit sumber tepercaya yang lebih lama tanpa menjalankan logika alur kerja lama.
+Pisahkan `workflow_ref` dan `package_ref`. `workflow_ref` adalah kode alur kerja/harness tepercaya yang menjalankan pengujian. `package_ref` adalah commit sumber yang dikemas ketika `source=ref`. Ini memungkinkan harness pengujian saat ini memvalidasi commit sumber tepercaya yang lebih lama tanpa menjalankan logika alur kerja lama.
-### Profil Suite
+### Profil suite
- `smoke` — `npm-onboard-channel-agent`, `gateway-network`, `config-reload`
- `package` — `npm-onboard-channel-agent`, `doctor-switch`, `update-channel-switch`, `upgrade-survivor`, `published-upgrade-survivor`, `plugins-offline`, `plugin-update`
-- `product` — `package` plus `mcp-channels`, `cron-mcp-cleanup`, `openai-web-search-minimal`, `openwebui`
-- `full` — potongan jalur rilis Docker penuh dengan OpenWebUI
-- `custom` — `docker_lanes` persis; wajib saat `suite_profile=custom`
+- `product` — `package` ditambah `mcp-channels`, `cron-mcp-cleanup`, `openai-web-search-minimal`, `openwebui`
+- `full` — chunk jalur rilis Docker penuh dengan OpenWebUI
+- `custom` — `docker_lanes` persis; wajib ketika `suite_profile=custom`
-Profil `package` menggunakan cakupan Plugin offline sehingga validasi paket yang diterbitkan tidak bergantung pada ketersediaan ClawHub langsung. Jalur Telegram opsional menggunakan kembali artefak `package-under-test` di `NPM Telegram Beta E2E`, dengan jalur spesifikasi npm yang diterbitkan tetap dipertahankan untuk dispatch mandiri.
+Profil `package` menggunakan cakupan plugin offline sehingga validasi paket yang dipublikasikan tidak bergantung pada ketersediaan live ClawHub. Lane Telegram opsional menggunakan ulang artefak `package-under-test` di `NPM Telegram Beta E2E`, dengan jalur spesifikasi npm yang dipublikasikan tetap dipertahankan untuk dispatch mandiri.
-Untuk kebijakan pembaruan dan pengujian Plugin khusus, termasuk perintah lokal,
-jalur Docker, input Penerimaan Paket, default rilis, dan triase kegagalan,
-lihat [Menguji pembaruan dan Plugin](/id/help/testing-updates-plugins).
+Untuk kebijakan pengujian pembaruan dan plugin khusus, termasuk perintah lokal,
+lane Docker, input Package Acceptance, default rilis, dan triase kegagalan,
+lihat [Menguji pembaruan dan plugin](/id/help/testing-updates-plugins).
-Pemeriksaan rilis memanggil Penerimaan Paket dengan `source=artifact`, artefak paket rilis yang disiapkan, `suite_profile=custom`, `docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`, `published_upgrade_survivor_baselines=all-since-2026.4.23`, `published_upgrade_survivor_scenarios=reported-issues`, dan `telegram_mode=mock-openai`. Ini menjaga migrasi paket, pembaruan, pembersihan dependensi Plugin usang, perbaikan pemasangan Plugin yang dikonfigurasi, Plugin offline, pembaruan Plugin, dan bukti Telegram pada tarball paket terselesaikan yang sama. Atur `package_acceptance_package_spec` pada Full Release Validation atau OpenClaw Release Checks untuk menjalankan matriks yang sama terhadap paket npm yang telah dikirim, bukan artefak yang dibangun dari SHA. Pemeriksaan rilis lintas-OS tetap mencakup onboarding, installer, dan perilaku platform khusus OS; validasi produk paket/pembaruan harus dimulai dengan Penerimaan Paket. Jalur Docker `published-upgrade-survivor` memvalidasi satu baseline paket yang diterbitkan per proses. Dalam Penerimaan Paket, tarball `package-under-test` yang diselesaikan selalu menjadi kandidat dan `published_upgrade_survivor_baseline` memilih baseline terbitan fallback, dengan default `openclaw@latest`; perintah proses ulang jalur gagal mempertahankan baseline itu. Atur `published_upgrade_survivor_baselines=all-since-2026.4.23` untuk memperluas CI Rilis Penuh ke setiap rilis npm stabil dari `2026.4.23` hingga `latest`; `release-history` tetap tersedia untuk pengambilan sampel manual yang lebih luas dengan jangkar tanggal lama. Atur `published_upgrade_survivor_scenarios=reported-issues` untuk memperluas baseline yang sama ke seluruh fixture berbentuk isu untuk konfigurasi Feishu, file bootstrap/persona yang dipertahankan, pemasangan Plugin OpenClaw yang dikonfigurasi, jalur log tilde, dan root dependensi Plugin lama yang usang. Alur kerja terpisah `Update Migration` menggunakan jalur Docker `update-migration` dengan `all-since-2026.4.23` dan `plugin-deps-cleanup` saat pertanyaannya adalah pembersihan pembaruan terbitan yang menyeluruh, bukan cakupan CI Rilis Penuh normal. Proses agregat lokal dapat meneruskan spesifikasi paket persis dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, mempertahankan satu jalur dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` seperti `openclaw@2026.4.15`, atau mengatur `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` untuk matriks skenario. Jalur terbitan mengonfigurasi baseline dengan resep perintah `openclaw config set` yang sudah dipanggang, mencatat langkah resep di `summary.json`, dan memeriksa `/healthz`, `/readyz`, plus status RPC setelah Gateway dimulai. Jalur paket Windows dan installer baru juga memverifikasi bahwa paket terpasang dapat mengimpor override kontrol browser dari jalur Windows absolut mentah. Smoke giliran agen lintas-OS OpenAI menggunakan default `OPENCLAW_CROSS_OS_OPENAI_MODEL` saat disetel, jika tidak `openai/gpt-5.4`, sehingga bukti pemasangan dan Gateway tetap memakai model pengujian GPT-5 sambil menghindari default GPT-4.x.
+Release checks memanggil Package Acceptance dengan `source=artifact`, artefak paket rilis yang disiapkan, `suite_profile=custom`, `docker_lanes='doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update'`, dan `telegram_mode=mock-openai`. Ini menjaga bukti migrasi paket, pembaruan, cleanup dependensi plugin basi, perbaikan instal plugin terkonfigurasi, plugin offline, plugin-update, dan Telegram pada tarball paket terselesaikan yang sama. Setel `package_acceptance_package_spec` pada Full Release Validation atau OpenClaw Release Checks untuk menjalankan matriks yang sama terhadap paket npm yang sudah dikirim alih-alih artefak yang dibangun dari SHA. Pemeriksaan rilis cross-OS tetap mencakup onboarding spesifik OS, installer, dan perilaku platform; validasi produk paket/pembaruan harus dimulai dengan Package Acceptance. Lane Docker `published-upgrade-survivor` memvalidasi satu baseline paket yang dipublikasikan per run di jalur rilis pemblokir. Dalam Package Acceptance, tarball `package-under-test` yang di-resolve selalu menjadi kandidat dan `published_upgrade_survivor_baseline` memilih baseline publikasi fallback, default ke `openclaw@latest`; perintah rerun lane gagal mempertahankan baseline tersebut. Full Release Validation dengan `run_release_soak=true` atau `release_profile=full` menyetel `published_upgrade_survivor_baselines=all-since-2026.4.23` dan `published_upgrade_survivor_scenarios=reported-issues` untuk memperluas ke setiap rilis npm stable dari `2026.4.23` hingga `latest` dan fixture berbentuk isu untuk konfigurasi Feishu, file bootstrap/persona yang dipertahankan, instal plugin OpenClaw terkonfigurasi, jalur log tilde, dan root dependensi plugin legacy yang basi. Alur kerja `Update Migration` terpisah menggunakan lane Docker `update-migration` dengan `all-since-2026.4.23` dan `plugin-deps-cleanup` ketika pertanyaannya adalah cleanup pembaruan publikasi yang menyeluruh, bukan cakupan CI Full Release normal. Run agregat lokal dapat meneruskan spesifikasi paket persis dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS`, mempertahankan satu lane dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` seperti `openclaw@2026.4.15`, atau menyetel `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` untuk matriks skenario. Lane publikasi mengonfigurasi baseline dengan resep perintah `openclaw config set` yang sudah dibaked, mencatat langkah resep di `summary.json`, dan memeriksa `/healthz`, `/readyz`, plus status RPC setelah Gateway mulai. Lane fresh Windows packaged dan installer juga memverifikasi bahwa paket terinstal dapat mengimpor override browser-control dari jalur Windows absolut mentah. Smoke agent-turn cross-OS OpenAI default ke `OPENCLAW_CROSS_OS_OPENAI_MODEL` ketika disetel, jika tidak `openai/gpt-5.4`, sehingga bukti instalasi dan gateway tetap menggunakan model pengujian GPT-5 sambil menghindari default GPT-4.x.
-### Jendela Kompatibilitas Lama
+### Jendela kompatibilitas legacy
-Penerimaan Paket memiliki jendela kompatibilitas lama yang terbatas untuk paket yang sudah diterbitkan. Paket hingga `2026.4.25`, termasuk `2026.4.25-beta.*`, dapat menggunakan jalur kompatibilitas:
+Package Acceptance memiliki jendela kompatibilitas legacy terbatas untuk paket yang sudah dipublikasikan. Paket hingga `2026.4.25`, termasuk `2026.4.25-beta.*`, dapat menggunakan jalur kompatibilitas:
-- entri QA privat yang diketahui dalam `dist/postinstall-inventory.json` dapat mengarah ke file yang dihilangkan dari tarball;
-- `doctor-switch` dapat melewati subkasus persistensi `gateway install --wrapper` saat paket tidak mengekspos flag tersebut;
-- `update-channel-switch` dapat memangkas `pnpm.patchedDependencies` yang hilang dari fixture git palsu turunan tarball dan dapat mencatat `update.channel` persisten yang hilang;
-- smoke Plugin dapat membaca lokasi catatan pemasangan lama atau menerima persistensi catatan pemasangan marketplace yang hilang;
-- `plugin-update` dapat mengizinkan migrasi metadata konfigurasi sambil tetap mewajibkan catatan pemasangan dan perilaku tanpa pemasangan ulang tetap tidak berubah.
+- entri QA privat yang diketahui di `dist/postinstall-inventory.json` dapat mengarah ke file yang dihilangkan dari tarball;
+- `doctor-switch` dapat melewati subkasus persistensi `gateway install --wrapper` ketika paket tidak mengekspos flag tersebut;
+- `update-channel-switch` dapat memangkas `pnpm.patchedDependencies` yang hilang dari fixture git palsu turunan tarball dan dapat mencatat `update.channel` tersimpan yang hilang;
+- smoke plugin dapat membaca lokasi install-record legacy atau menerima persistensi install-record marketplace yang hilang;
+- `plugin-update` dapat mengizinkan migrasi metadata konfigurasi sambil tetap mewajibkan install record dan perilaku tanpa-reinstall tetap tidak berubah.
-Paket `2026.4.26` yang diterbitkan juga dapat memperingatkan untuk file cap metadata build lokal yang sudah dikirim. Paket yang lebih baru harus memenuhi kontrak modern; kondisi yang sama gagal alih-alih memperingatkan atau melewati.
+Paket `2026.4.26` yang dipublikasikan juga dapat memperingatkan untuk file cap metadata build lokal yang sudah dikirim. Paket setelahnya harus memenuhi kontrak modern; kondisi yang sama gagal alih-alih memperingatkan atau melewati.
### Contoh
@@ -318,18 +313,18 @@ gh workflow run package-acceptance.yml \
-f docker_lanes='install-e2e plugin-update'
```
-Saat men-debug proses penerimaan paket yang gagal, mulai dari ringkasan `resolve_package` untuk mengonfirmasi sumber paket, versi, dan SHA-256. Lalu periksa proses turunan `docker_acceptance` dan artefak Docker-nya: `.artifacts/docker-tests/**/summary.json`, `failures.json`, log lane, pengaturan waktu fase, dan perintah rerun. Lebih baik menjalankan ulang profil paket yang gagal atau lane Docker persisnya daripada menjalankan ulang validasi rilis penuh.
+Saat men-debug eksekusi package acceptance yang gagal, mulai dari ringkasan `resolve_package` untuk mengonfirmasi sumber paket, versi, dan SHA-256. Lalu periksa eksekusi turunan `docker_acceptance` dan artefak Docker-nya: `.artifacts/docker-tests/**/summary.json`, `failures.json`, log lane, timing fase, dan perintah eksekusi ulang. Utamakan menjalankan ulang profil paket yang gagal atau lane Docker yang persis, bukan menjalankan ulang validasi rilis penuh.
-## Smoke instalasi
+## Install smoke
-Workflow `Install Smoke` yang terpisah menggunakan kembali skrip cakupan yang sama melalui job `preflight` miliknya sendiri. Workflow ini membagi cakupan smoke menjadi `run_fast_install_smoke` dan `run_full_install_smoke`.
+Workflow `Install Smoke` terpisah menggunakan ulang skrip cakupan yang sama melalui job `preflight` miliknya. Ini membagi cakupan smoke menjadi `run_fast_install_smoke` dan `run_full_install_smoke`.
-- **Jalur cepat** berjalan untuk pull request yang menyentuh permukaan Docker/paket, perubahan paket/manifest Plugin yang dibundel, atau permukaan inti Plugin/channel/gateway/Plugin SDK yang diuji oleh job smoke Docker. Perubahan Plugin bundel yang hanya menyentuh sumber, edit khusus pengujian, dan edit khusus dokumentasi tidak memesan worker Docker. Jalur cepat membangun image Dockerfile root satu kali, memeriksa CLI, menjalankan smoke CLI agents delete shared-workspace, menjalankan e2e gateway-network container, memverifikasi argumen build ekstensi bundel, dan menjalankan profil Docker Plugin bundel terbatas di bawah timeout perintah agregat 240 detik (setiap proses Docker skenario dibatasi secara terpisah).
-- **Jalur penuh** mempertahankan instalasi paket QR dan cakupan Docker/update installer untuk proses terjadwal malam hari, dispatch manual, pemeriksaan rilis workflow-call, dan pull request yang benar-benar menyentuh permukaan installer/paket/Docker. Dalam mode penuh, install-smoke menyiapkan atau menggunakan kembali satu image smoke Dockerfile root GHCR target-SHA, lalu menjalankan instalasi paket QR, smoke Dockerfile root/gateway, smoke installer/update, dan E2E Docker Plugin bundel cepat sebagai job terpisah agar pekerjaan installer tidak menunggu di belakang smoke image root.
+- **Jalur cepat** berjalan untuk pull request yang menyentuh permukaan Docker/paket, perubahan paket/manifes plugin bawaan, atau permukaan plugin/channel/gateway inti/Plugin SDK yang diuji oleh job Docker smoke. Perubahan plugin bawaan yang hanya source, edit hanya test, dan edit hanya docs tidak memesan worker Docker. Jalur cepat membangun image Dockerfile root satu kali, memeriksa CLI, menjalankan smoke CLI agents delete shared-workspace, menjalankan e2e gateway-network kontainer, memverifikasi arg build extension bawaan, dan menjalankan profil Docker plugin bawaan terbatas di bawah timeout perintah agregat 240 detik (setiap Docker run skenario dibatasi secara terpisah).
+- **Jalur penuh** mempertahankan cakupan instal paket QR dan Docker/update installer untuk eksekusi terjadwal malam, dispatch manual, pemeriksaan rilis workflow-call, dan pull request yang benar-benar menyentuh permukaan installer/paket/Docker. Dalam mode penuh, install-smoke menyiapkan atau menggunakan ulang satu image smoke Dockerfile root GHCR target-SHA, lalu menjalankan instal paket QR, smoke Dockerfile/Gateway root, smoke installer/update, dan E2E Docker plugin bawaan cepat sebagai job terpisah agar pekerjaan installer tidak menunggu di belakang smoke image root.
-Push ke `main` (termasuk commit merge) tidak memaksa jalur penuh; ketika logika cakupan perubahan akan meminta cakupan penuh pada push, workflow mempertahankan smoke Docker cepat dan menyerahkan smoke instalasi penuh ke validasi malam hari atau rilis.
+Push `main` (termasuk merge commit) tidak memaksa jalur penuh; ketika logika changed-scope akan meminta cakupan penuh pada push, workflow mempertahankan Docker smoke cepat dan menyerahkan install smoke penuh ke validasi malam atau rilis.
-Smoke image-provider instalasi global Bun yang lambat digate secara terpisah oleh `run_bun_global_install_smoke`. Ini berjalan pada jadwal malam hari dan dari workflow pemeriksaan rilis, dan dispatch manual `Install Smoke` dapat ikut mengaktifkannya, tetapi pull request dan push ke `main` tidak. Pengujian Docker QR dan installer mempertahankan Dockerfile yang berfokus pada instalasi masing-masing.
+Smoke image-provider instal global Bun yang lambat digate secara terpisah oleh `run_bun_global_install_smoke`. Ini berjalan pada jadwal malam dan dari workflow pemeriksaan rilis, dan dispatch manual `Install Smoke` dapat ikut mengaktifkannya, tetapi pull request dan push `main` tidak. Test Docker QR dan installer mempertahankan Dockerfile yang berfokus pada instal milik mereka sendiri.
## E2E Docker Lokal
@@ -338,40 +333,40 @@ Smoke image-provider instalasi global Bun yang lambat digate secara terpisah ole
- runner Node/Git polos untuk lane installer/update/plugin-dependency;
- image fungsional yang menginstal tarball yang sama ke `/app` untuk lane fungsionalitas normal.
-Definisi lane Docker berada di `scripts/lib/docker-e2e-scenarios.mjs`, logika planner berada di `scripts/lib/docker-e2e-plan.mjs`, dan runner hanya menjalankan rencana yang dipilih. Scheduler memilih image per lane dengan `OPENCLAW_DOCKER_E2E_BARE_IMAGE` dan `OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`, lalu menjalankan lane dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`.
+Definisi lane Docker berada di `scripts/lib/docker-e2e-scenarios.mjs`, logika planner berada di `scripts/lib/docker-e2e-plan.mjs`, dan runner hanya mengeksekusi plan yang dipilih. Scheduler memilih image per lane dengan `OPENCLAW_DOCKER_E2E_BARE_IMAGE` dan `OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`, lalu menjalankan lane dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`.
-### Penyetelan
+### Yang Dapat Disetel
-| Variabel | Default | Tujuan |
+| Variabel | Default | Tujuan |
| -------------------------------------- | ------- | --------------------------------------------------------------------------------------------- |
-| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | Jumlah slot pool utama untuk lane normal. |
-| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | Jumlah slot pool ekor yang sensitif terhadap penyedia. |
-| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | Batas lane live serentak agar penyedia tidak melakukan throttle. |
-| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 10 | Batas lane instalasi npm serentak. |
-| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | Batas lane multi-layanan serentak. |
-| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | Jeda bertahap antar-start lane untuk menghindari badai create daemon Docker; setel `0` untuk tanpa jeda. |
-| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7200000 | Timeout fallback per lane (120 menit); lane live/ekor terpilih memakai batas yang lebih ketat. |
-| `OPENCLAW_DOCKER_ALL_DRY_RUN` | unset | `1` mencetak rencana scheduler tanpa menjalankan lane. |
-| `OPENCLAW_DOCKER_ALL_LANES` | unset | Daftar lane persis yang dipisahkan koma; melewati smoke pembersihan agar agen dapat mereproduksi satu lane yang gagal. |
+| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | Jumlah slot main-pool untuk lane normal. |
+| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | Jumlah slot tail-pool yang sensitif terhadap provider. |
+| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | Batas lane live bersamaan agar provider tidak melakukan throttle. |
+| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 10 | Batas lane instal npm bersamaan. |
+| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | Batas lane multi-service bersamaan. |
+| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | Jeda antar-start lane untuk menghindari lonjakan create daemon Docker; setel `0` untuk tanpa jeda. |
+| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7200000 | Timeout fallback per lane (120 menit); lane live/tail terpilih memakai batas yang lebih ketat. |
+| `OPENCLAW_DOCKER_ALL_DRY_RUN` | unset | `1` mencetak plan scheduler tanpa menjalankan lane. |
+| `OPENCLAW_DOCKER_ALL_LANES` | unset | Daftar lane persis yang dipisahkan koma; melewati smoke cleanup agar agent dapat mereproduksi satu lane gagal. |
-Lane yang lebih berat daripada batas efektifnya masih dapat dimulai dari pool kosong, lalu berjalan sendiri sampai melepaskan kapasitas. Preflight agregat lokal memeriksa Docker, menghapus container E2E OpenClaw yang basi, memancarkan status lane aktif, menyimpan pengaturan waktu lane untuk pengurutan terlama lebih dulu, dan secara default berhenti menjadwalkan lane pool baru setelah kegagalan pertama.
+Lane yang lebih berat dari batas efektifnya tetap dapat dimulai dari pool kosong, lalu berjalan sendiri sampai melepas kapasitas. Agregat lokal melakukan preflight Docker, menghapus kontainer E2E OpenClaw usang, mengeluarkan status lane aktif, menyimpan timing lane untuk pengurutan longest-first, dan secara default berhenti menjadwalkan lane pooled baru setelah kegagalan pertama.
-### Workflow live/E2E yang dapat digunakan kembali
+### Workflow live/E2E yang dapat digunakan ulang
-Workflow live/E2E yang dapat digunakan kembali menanyakan `scripts/test-docker-all.mjs --plan-json` paket, jenis image, image live, lane, dan cakupan kredensial yang diperlukan. `scripts/docker-e2e.mjs` kemudian mengubah rencana itu menjadi output dan ringkasan GitHub. Workflow ini mengemas OpenClaw melalui `scripts/package-openclaw-for-docker.mjs`, mengunduh artefak paket dari proses saat ini, atau mengunduh artefak paket dari `package_artifact_run_id`; memvalidasi inventaris tarball; membangun dan mendorong image E2E Docker GHCR bare/fungsional bertag digest paket melalui cache layer Docker Blacksmith saat rencana membutuhkan lane dengan paket terinstal; dan menggunakan kembali input `docker_e2e_bare_image`/`docker_e2e_functional_image` yang disediakan atau image digest paket yang sudah ada alih-alih membangun ulang. Pull image Docker dicoba ulang dengan timeout terbatas 180 detik per percobaan agar stream registry/cache yang macet cepat dicoba ulang alih-alih menghabiskan sebagian besar jalur kritis CI.
+Workflow live/E2E yang dapat digunakan ulang menanyakan `scripts/test-docker-all.mjs --plan-json` tentang paket, jenis image, image live, lane, dan cakupan kredensial yang dibutuhkan. `scripts/docker-e2e.mjs` lalu mengonversi plan itu menjadi output dan ringkasan GitHub. Ini mengemas OpenClaw melalui `scripts/package-openclaw-for-docker.mjs`, mengunduh artefak paket current-run, atau mengunduh artefak paket dari `package_artifact_run_id`; memvalidasi inventaris tarball; membangun dan mendorong image E2E Docker GHCR bare/functional bertag package-digest melalui cache layer Docker Blacksmith saat plan membutuhkan lane dengan paket terinstal; dan menggunakan ulang input `docker_e2e_bare_image`/`docker_e2e_functional_image` yang disediakan atau image package-digest yang sudah ada alih-alih membangun ulang. Pull image Docker dicoba ulang dengan timeout terbatas 180 detik per percobaan agar stream registry/cache yang macet cepat dicoba ulang, bukan menghabiskan sebagian besar jalur kritis CI.
### Chunk jalur rilis
-Cakupan Docker rilis menjalankan job chunk yang lebih kecil dengan `OPENCLAW_SKIP_DOCKER_BUILD=1` sehingga setiap chunk hanya menarik jenis image yang dibutuhkannya dan menjalankan beberapa lane melalui scheduler berbobot yang sama:
+Cakupan Docker rilis menjalankan job chunk yang lebih kecil dengan `OPENCLAW_SKIP_DOCKER_BUILD=1` sehingga setiap chunk hanya menarik jenis image yang dibutuhkan dan mengeksekusi beberapa lane melalui scheduler berbobot yang sama:
- `OPENCLAW_DOCKER_ALL_PROFILE=release-path`
- `OPENCLAW_DOCKER_ALL_CHUNK=core | package-update-openai | package-update-anthropic | package-update-core | plugins-runtime-plugins | plugins-runtime-services | plugins-runtime-install-a..h`
-Chunk Docker rilis saat ini adalah `core`, `package-update-openai`, `package-update-anthropic`, `package-update-core`, `plugins-runtime-plugins`, `plugins-runtime-services`, dan `plugins-runtime-install-a` hingga `plugins-runtime-install-h`. `plugins-runtime-core`, `plugins-runtime`, dan `plugins-integrations` tetap menjadi alias agregat Plugin/runtime. Alias lane `install-e2e` tetap menjadi alias rerun manual agregat untuk kedua lane installer penyedia.
+Chunk Docker rilis saat ini adalah `core`, `package-update-openai`, `package-update-anthropic`, `package-update-core`, `plugins-runtime-plugins`, `plugins-runtime-services`, dan `plugins-runtime-install-a` hingga `plugins-runtime-install-h`. `plugins-runtime-core`, `plugins-runtime`, dan `plugins-integrations` tetap menjadi alias agregat plugin/runtime. Alias lane `install-e2e` tetap menjadi alias eksekusi ulang manual agregat untuk kedua lane installer provider.
-OpenWebUI digabungkan ke `plugins-runtime-services` ketika cakupan release-path penuh memintanya, dan mempertahankan chunk mandiri `openwebui` hanya untuk dispatch khusus OpenWebUI. Lane update channel bundel mencoba ulang satu kali untuk kegagalan jaringan npm sementara.
+OpenWebUI digabungkan ke `plugins-runtime-services` ketika cakupan release-path penuh memintanya, dan mempertahankan chunk mandiri `openwebui` hanya untuk dispatch khusus OpenWebUI. Lane update bundled-channel mencoba ulang sekali untuk kegagalan jaringan npm sementara.
-Setiap chunk mengunggah `.artifacts/docker-tests/` dengan log lane, pengaturan waktu, `summary.json`, `failures.json`, pengaturan waktu fase, JSON rencana scheduler, tabel lane lambat, dan perintah rerun per lane. Input `docker_lanes` workflow menjalankan lane terpilih terhadap image yang sudah disiapkan alih-alih job chunk, sehingga debug lane gagal tetap terbatas pada satu job Docker tertarget dan menyiapkan, mengunduh, atau menggunakan kembali artefak paket untuk proses tersebut; jika lane terpilih adalah lane Docker live, job tertarget membangun image live-test secara lokal untuk rerun itu. Perintah rerun GitHub per lane yang dihasilkan menyertakan `package_artifact_run_id`, `package_artifact_name`, dan input image yang disiapkan saat nilai tersebut ada, sehingga lane yang gagal dapat menggunakan kembali paket dan image persis dari proses yang gagal.
+Setiap chunk mengunggah `.artifacts/docker-tests/` dengan log lane, timing, `summary.json`, `failures.json`, timing fase, JSON plan scheduler, tabel lane lambat, dan perintah eksekusi ulang per lane. Input workflow `docker_lanes` menjalankan lane terpilih terhadap image yang sudah disiapkan alih-alih job chunk, yang menjaga debugging lane gagal tetap terbatas pada satu job Docker tertarget dan menyiapkan, mengunduh, atau menggunakan ulang artefak paket untuk eksekusi itu; jika lane terpilih adalah lane Docker live, job tertarget membangun image live-test secara lokal untuk eksekusi ulang itu. Perintah eksekusi ulang GitHub per lane yang dihasilkan menyertakan `package_artifact_run_id`, `package_artifact_name`, dan input image yang sudah disiapkan saat nilai tersebut ada, sehingga lane gagal dapat menggunakan ulang paket dan image persis dari eksekusi yang gagal.
```bash
pnpm test:docker:rerun # download Docker artifacts and print combined/per-lane targeted rerun commands
@@ -380,48 +375,48 @@ pnpm test:docker:timings # slow-lane and phase critical-path summari
Workflow live/E2E terjadwal menjalankan suite Docker release-path penuh setiap hari.
-## Prarilis Plugin
+## Plugin Prarilis
-`Plugin Prerelease` adalah cakupan produk/paket yang lebih mahal, jadi ini adalah workflow terpisah yang didispatch oleh `Full Release Validation` atau oleh operator eksplisit. Pull request normal, push ke `main`, dan dispatch CI manual mandiri menonaktifkan suite itu. Workflow ini menyeimbangkan pengujian Plugin bundel di delapan worker ekstensi; job shard ekstensi tersebut menjalankan hingga dua grup konfigurasi Plugin sekaligus dengan satu worker Vitest per grup dan heap Node yang lebih besar agar batch Plugin yang berat impor tidak membuat job CI tambahan. Jalur prarilis Docker khusus rilis mengelompokkan lane Docker tertarget dalam grup kecil untuk menghindari pemesanan puluhan runner bagi job berdurasi satu hingga tiga menit.
+`Plugin Prerelease` adalah cakupan produk/paket yang lebih mahal, sehingga menjadi workflow terpisah yang didispatch oleh `Full Release Validation` atau oleh operator eksplisit. Pull request normal, push `main`, dan dispatch CI manual mandiri menonaktifkan suite tersebut. Ini menyeimbangkan test plugin bawaan di delapan worker extension; job shard extension tersebut menjalankan hingga dua grup config plugin sekaligus dengan satu worker Vitest per grup dan heap Node yang lebih besar agar batch plugin yang berat impor tidak membuat job CI tambahan. Jalur prarilis Docker khusus rilis membatch lane Docker tertarget dalam grup kecil untuk menghindari pemesanan puluhan runner untuk job berdurasi satu hingga tiga menit.
-## Lab QA
+## QA Lab
-Lab QA memiliki lane CI khusus di luar workflow utama yang dicakup secara cerdas. Paritas agentik disarangkan di bawah harness QA dan rilis yang luas, bukan workflow PR mandiri. Gunakan `Full Release Validation` dengan `rerun_group=qa-parity` ketika paritas harus ikut dalam proses validasi luas.
+QA Lab memiliki lane CI khusus di luar workflow smart-scoped utama. Paritas agentic bersarang di bawah harness QA dan rilis yang luas, bukan workflow PR mandiri. Gunakan `Full Release Validation` dengan `rerun_group=qa-parity` saat paritas harus ikut dalam eksekusi validasi luas.
-- Workflow `QA-Lab - All Lanes` berjalan setiap malam pada `main` dan pada dispatch manual; workflow ini menyebarkan lane paritas mock, lane Matrix live, serta lane Telegram dan Discord live sebagai job paralel. Job live menggunakan environment `qa-live-shared`, dan Telegram/Discord menggunakan lease Convex.
+- Workflow `QA-Lab - All Lanes` berjalan setiap malam pada `main` dan pada dispatch manual; ini menyebarkan lane paritas mock, lane Matrix live, serta lane Telegram dan Discord live sebagai job paralel. Job live menggunakan environment `qa-live-shared`, dan Telegram/Discord menggunakan lease Convex.
-Pemeriksaan rilis menjalankan lane transport live Matrix dan Telegram dengan penyedia mock deterministik dan model yang memenuhi syarat mock (`mock-openai/gpt-5.5` dan `mock-openai/gpt-5.5-alt`) sehingga kontrak channel diisolasi dari latensi model live dan startup Plugin penyedia normal. Gateway transport live menonaktifkan pencarian memori karena paritas QA mencakup perilaku memori secara terpisah; konektivitas penyedia dicakup oleh suite model live, penyedia native, dan penyedia Docker yang terpisah.
+Pemeriksaan rilis menjalankan lane transport live Matrix dan Telegram dengan provider mock deterministik dan model mock-qualified (`mock-openai/gpt-5.5` dan `mock-openai/gpt-5.5-alt`) sehingga kontrak channel terisolasi dari latensi model live dan startup plugin provider normal. Gateway transport live menonaktifkan pencarian memori karena paritas QA mencakup perilaku memori secara terpisah; konektivitas provider dicakup oleh suite model live, provider native, dan provider Docker yang terpisah.
-Matrix menggunakan `--profile fast` untuk gate terjadwal dan rilis, menambahkan `--fail-fast` hanya ketika CLI yang di-checkout mendukungnya. Default CLI dan input workflow manual tetap `all`; dispatch manual `matrix_profile=all` selalu melakukan shard cakupan Matrix penuh ke job `transport`, `media`, `e2ee-smoke`, `e2ee-deep`, dan `e2ee-cli`.
+Matrix menggunakan `--profile fast` untuk gate terjadwal dan rilis, menambahkan `--fail-fast` hanya ketika CLI yang di-checkout mendukungnya. Default CLI dan input workflow manual tetap `all`; dispatch manual `matrix_profile=all` selalu men-shard cakupan Matrix penuh menjadi job `transport`, `media`, `e2ee-smoke`, `e2ee-deep`, dan `e2ee-cli`.
-`OpenClaw Release Checks` juga menjalankan lane Lab QA yang kritis untuk rilis sebelum persetujuan rilis; gate paritas QA-nya menjalankan paket kandidat dan baseline sebagai job lane paralel, lalu mengunduh kedua artefak ke job laporan kecil untuk perbandingan paritas akhir.
+`OpenClaw Release Checks` juga menjalankan lane QA Lab yang kritis untuk rilis sebelum persetujuan rilis; gate paritas QA-nya menjalankan pack kandidat dan baseline sebagai job lane paralel, lalu mengunduh kedua artefak ke job laporan kecil untuk perbandingan paritas final.
-Untuk PR normal, ikuti bukti CI/pemeriksaan tercakup alih-alih memperlakukan paritas sebagai status wajib.
+Untuk PR normal, ikuti bukti CI/check bercakupan alih-alih memperlakukan paritas sebagai status wajib.
## CodeQL
-Alur kerja `CodeQL` sengaja dibuat sebagai pemindai keamanan tahap awal yang sempit, bukan sapuan repositori penuh. Setiap hari, manual, dan pada guard pull request non-draf, pemindaian menjalankan kode workflow Actions ditambah permukaan JavaScript/TypeScript berisiko tertinggi dengan kueri keamanan berkeyakinan tinggi yang difilter ke `security-severity` tinggi/kritis.
+Alur kerja `CodeQL` secara sengaja merupakan pemindai keamanan lintasan pertama yang sempit, bukan pemindaian seluruh repositori. Harian, manual, dan penjaga pull request non-draf memindai kode alur kerja Actions ditambah permukaan JavaScript/TypeScript berisiko tertinggi dengan kueri keamanan berkeyakinan tinggi yang difilter ke `security-severity` tinggi/kritis.
-Guard pull request tetap ringan: guard ini hanya dimulai untuk perubahan di bawah `.github/actions`, `.github/codeql`, `.github/workflows`, `packages`, atau `src`, dan menjalankan matriks keamanan berkeyakinan tinggi yang sama seperti workflow terjadwal. CodeQL Android dan macOS tetap di luar default PR.
+Penjaga pull request tetap ringan: ia hanya dimulai untuk perubahan di bawah `.github/actions`, `.github/codeql`, `.github/workflows`, `packages`, atau `src`, dan menjalankan matriks keamanan berkeyakinan tinggi yang sama seperti alur kerja terjadwal. CodeQL Android dan macOS tetap berada di luar default PR.
### Kategori keamanan
| Kategori | Permukaan |
| ------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
-| `/codeql-security-high/core-auth-secrets` | Auth, rahasia, sandbox, cron, dan baseline gateway |
-| `/codeql-security-high/channel-runtime-boundary` | Kontrak implementasi channel inti ditambah runtime Plugin channel, Gateway, Plugin SDK, rahasia, titik sentuh audit |
+| `/codeql-security-high/core-auth-secrets` | Auth, secret, sandbox, cron, dan baseline gateway |
+| `/codeql-security-high/channel-runtime-boundary` | Kontrak implementasi channel inti ditambah runtime plugin channel, gateway, Plugin SDK, secret, titik sentuh audit |
| `/codeql-security-high/network-ssrf-boundary` | Permukaan kebijakan SSRF inti, parsing IP, penjaga jaringan, web-fetch, dan SSRF Plugin SDK |
-| `/codeql-security-high/mcp-process-tool-boundary` | Server MCP, helper eksekusi proses, pengiriman keluar, dan gate eksekusi tool agen |
-| `/codeql-security-high/plugin-trust-boundary` | Permukaan kepercayaan instalasi Plugin, loader, manifest, registry, instalasi package-manager, source-loading, dan kontrak paket Plugin SDK |
+| `/codeql-security-high/mcp-process-tool-boundary` | Server MCP, helper eksekusi proses, pengiriman keluar, dan gerbang eksekusi tool agen |
+| `/codeql-security-high/plugin-trust-boundary` | Permukaan kepercayaan instalasi Plugin, loader, manifes, registry, instalasi package-manager, pemuatan sumber, dan kontrak paket Plugin SDK |
### Shard keamanan khusus platform
-- `CodeQL Android Critical Security` — shard keamanan Android terjadwal. Membangun aplikasi Android secara manual untuk CodeQL pada runner Blacksmith Linux terkecil yang diterima oleh sanity workflow. Mengunggah di bawah `/codeql-critical-security/android`.
-- `CodeQL macOS Critical Security` — shard keamanan macOS mingguan/manual. Membangun aplikasi macOS secara manual untuk CodeQL di Blacksmith macOS, memfilter hasil build dependensi dari SARIF yang diunggah, dan mengunggah di bawah `/codeql-critical-security/macos`. Dipertahankan di luar default harian karena build macOS mendominasi runtime bahkan saat bersih.
+- `CodeQL Android Critical Security` — shard keamanan Android terjadwal. Membangun aplikasi Android secara manual untuk CodeQL pada runner Blacksmith Linux terkecil yang diterima oleh kewarasan alur kerja. Mengunggah di bawah `/codeql-critical-security/android`.
+- `CodeQL macOS Critical Security` — shard keamanan macOS mingguan/manual. Membangun aplikasi macOS secara manual untuk CodeQL di Blacksmith macOS, memfilter hasil build dependensi dari SARIF yang diunggah, dan mengunggah di bawah `/codeql-critical-security/macos`. Tetap berada di luar default harian karena build macOS mendominasi runtime bahkan saat bersih.
-### Kategori Critical Quality
+### Kategori Kualitas Kritis
-`CodeQL Critical Quality` adalah shard non-keamanan yang sepadan. Ini hanya menjalankan kueri kualitas JavaScript/TypeScript non-keamanan dengan tingkat keparahan error di permukaan sempit bernilai tinggi pada runner Blacksmith Linux yang lebih kecil. Guard pull request-nya sengaja lebih kecil daripada profil terjadwal: PR non-draf hanya menjalankan shard `agent-runtime-boundary`, `config-boundary`, `core-auth-secrets`, `channel-runtime-boundary`, `gateway-runtime-boundary`, `memory-runtime-boundary`, `mcp-process-runtime-boundary`, `provider-runtime-boundary`, `session-diagnostics-boundary`, `plugin-boundary`, `plugin-sdk-package-contract`, dan `plugin-sdk-reply-runtime` yang sesuai untuk perubahan pada kode eksekusi perintah/model/tool agen dan dispatch balasan, kode skema/migrasi/IO config, kode auth/rahasia/sandbox/keamanan, runtime channel inti dan Plugin channel bawaan, metode server/protokol gateway, runtime memori/perekat SDK, MCP/proses/pengiriman keluar, katalog model/runtime provider, antrean diagnostik/pengiriman sesi, loader Plugin, kontrak paket/Plugin SDK, atau runtime balasan Plugin SDK. Perubahan config CodeQL dan workflow kualitas menjalankan semua dua belas shard kualitas PR.
+`CodeQL Critical Quality` adalah shard non-keamanan yang sepadan. Ia hanya menjalankan kueri kualitas JavaScript/TypeScript non-keamanan dengan tingkat keparahan error pada permukaan bernilai tinggi yang sempit di runner Blacksmith Linux yang lebih kecil. Penjaga pull request-nya sengaja lebih kecil daripada profil terjadwal: PR non-draf hanya menjalankan shard `agent-runtime-boundary`, `config-boundary`, `core-auth-secrets`, `channel-runtime-boundary`, `gateway-runtime-boundary`, `memory-runtime-boundary`, `mcp-process-runtime-boundary`, `provider-runtime-boundary`, `session-diagnostics-boundary`, `plugin-boundary`, `plugin-sdk-package-contract`, dan `plugin-sdk-reply-runtime` yang sesuai untuk perubahan kode eksekusi perintah/model/tool agen dan dispatch balasan, kode skema/migrasi/IO config, kode auth/secret/sandbox/keamanan, channel inti dan runtime plugin channel bawaan, protokol/metode-server gateway, perekat runtime memori/SDK, MCP/proses/pengiriman keluar, katalog runtime/model provider, diagnostik sesi/antrean pengiriman, loader plugin, kontrak Plugin SDK/paket, atau runtime balasan Plugin SDK. Perubahan config CodeQL dan alur kerja kualitas menjalankan semua dua belas shard kualitas PR.
Dispatch manual menerima:
@@ -433,36 +428,36 @@ Profil sempit adalah hook pengajaran/iterasi untuk menjalankan satu shard kualit
| Kategori | Permukaan |
| ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `/codeql-critical-quality/core-auth-secrets` | Auth, rahasia, sandbox, cron, dan kode batas keamanan gateway |
-| `/codeql-critical-quality/config-boundary` | Skema config, migrasi, normalisasi, dan kontrak IO |
+| `/codeql-critical-quality/core-auth-secrets` | Kode batas keamanan auth, secret, sandbox, cron, dan gateway |
+| `/codeql-critical-quality/config-boundary` | Kontrak skema config, migrasi, normalisasi, dan IO |
| `/codeql-critical-quality/gateway-runtime-boundary` | Skema protokol Gateway dan kontrak metode server |
-| `/codeql-critical-quality/channel-runtime-boundary` | Kontrak implementasi channel inti dan Plugin channel bawaan |
-| `/codeql-critical-quality/agent-runtime-boundary` | Eksekusi perintah, dispatch model/provider, dispatch dan antrean auto-reply, serta kontrak runtime control-plane ACP |
-| `/codeql-critical-quality/mcp-process-runtime-boundary` | Server MCP dan bridge tool, helper supervisi proses, serta kontrak pengiriman keluar |
+| `/codeql-critical-quality/channel-runtime-boundary` | Kontrak implementasi channel inti dan plugin channel bawaan |
+| `/codeql-critical-quality/agent-runtime-boundary` | Kontrak runtime eksekusi perintah, dispatch model/provider, dispatch dan antrean auto-reply, serta control-plane ACP |
+| `/codeql-critical-quality/mcp-process-runtime-boundary` | Server MCP dan jembatan tool, helper supervisi proses, dan kontrak pengiriman keluar |
| `/codeql-critical-quality/memory-runtime-boundary` | SDK host memori, facade runtime memori, alias Plugin SDK memori, perekat aktivasi runtime memori, dan perintah doctor memori |
| `/codeql-critical-quality/session-diagnostics-boundary` | Internal antrean balasan, antrean pengiriman sesi, helper binding/pengiriman sesi keluar, permukaan bundle event/log diagnostik, dan kontrak CLI doctor sesi |
-| `/codeql-critical-quality/plugin-sdk-reply-runtime` | Dispatch balasan masuk Plugin SDK, helper payload/chunking/runtime balasan, opsi balasan channel, antrean pengiriman, dan helper binding sesi/thread |
+| `/codeql-critical-quality/plugin-sdk-reply-runtime` | Dispatch balasan masuk Plugin SDK, helper payload/pemotongan/runtime balasan, opsi balasan channel, antrean pengiriman, dan helper binding sesi/thread |
| `/codeql-critical-quality/provider-runtime-boundary` | Normalisasi katalog model, auth dan discovery provider, registrasi runtime provider, default/katalog provider, serta registry web/search/fetch/embedding |
-| `/codeql-critical-quality/ui-control-plane` | Bootstrap UI kontrol, persistensi lokal, flow kontrol Gateway, dan kontrak runtime control-plane tugas |
+| `/codeql-critical-quality/ui-control-plane` | Bootstrap UI kontrol, persistensi lokal, alur kontrol gateway, dan kontrak runtime control-plane tugas |
| `/codeql-critical-quality/web-media-runtime-boundary` | Kontrak runtime fetch/search web inti, IO media, pemahaman media, image-generation, dan media-generation |
-| `/codeql-critical-quality/plugin-boundary` | Kontrak loader, registry, public-surface, dan entrypoint Plugin SDK |
+| `/codeql-critical-quality/plugin-boundary` | Kontrak loader, registry, permukaan publik, dan entrypoint Plugin SDK |
| `/codeql-critical-quality/plugin-sdk-package-contract` | Sumber Plugin SDK sisi paket yang dipublikasikan dan helper kontrak paket plugin |
-Kualitas tetap dipisahkan dari keamanan agar temuan kualitas dapat dijadwalkan, diukur, dinonaktifkan, atau diperluas tanpa mengaburkan sinyal keamanan. Ekspansi CodeQL Swift, Python, dan bundled-plugin harus ditambahkan kembali sebagai pekerjaan lanjutan yang terskop atau di-shard hanya setelah profil sempit memiliki runtime dan sinyal yang stabil.
+Kualitas tetap dipisahkan dari keamanan agar temuan kualitas dapat dijadwalkan, diukur, dinonaktifkan, atau diperluas tanpa mengaburkan sinyal keamanan. Ekspansi CodeQL Swift, Python, dan plugin bawaan sebaiknya ditambahkan kembali sebagai pekerjaan lanjutan yang tercakup atau di-shard hanya setelah profil sempit memiliki runtime dan sinyal yang stabil.
-## Workflow pemeliharaan
+## Alur kerja pemeliharaan
-### Docs Agent
+### Agen Docs
-Workflow `Docs Agent` adalah lane pemeliharaan Codex berbasis event untuk menjaga dokumen yang ada tetap selaras dengan perubahan yang baru mendarat. Workflow ini tidak memiliki jadwal murni: run CI push non-bot yang berhasil di `main` dapat memicunya, dan dispatch manual dapat menjalankannya langsung. Invokasi workflow-run dilewati saat `main` sudah bergerak maju atau saat run Docs Agent non-skip lain dibuat dalam satu jam terakhir. Saat berjalan, workflow ini meninjau rentang commit dari SHA sumber Docs Agent non-skip sebelumnya ke `main` saat ini, sehingga satu run per jam dapat mencakup semua perubahan main yang terkumpul sejak pass dokumen terakhir.
+Alur kerja `Docs Agent` adalah lane pemeliharaan Codex berbasis event untuk menjaga dokumen yang ada tetap selaras dengan perubahan yang baru saja mendarat. Ia tidak memiliki jadwal murni: run CI push non-bot yang berhasil pada `main` dapat memicunya, dan dispatch manual dapat menjalankannya langsung. Invocation workflow-run dilewati saat `main` sudah bergerak maju atau saat run Docs Agent non-terlewati lainnya dibuat dalam satu jam terakhir. Saat berjalan, ia meninjau rentang commit dari SHA sumber Docs Agent non-terlewati sebelumnya hingga `main` saat ini, sehingga satu run per jam dapat mencakup semua perubahan main yang terkumpul sejak lintasan docs terakhir.
-### Test Performance Agent
+### Agen Performa Test
-Workflow `Test Performance Agent` adalah lane pemeliharaan Codex berbasis event untuk test lambat. Workflow ini tidak memiliki jadwal murni: run CI push non-bot yang berhasil di `main` dapat memicunya, tetapi dilewati jika invokasi workflow-run lain sudah berjalan atau sedang berjalan pada hari UTC tersebut. Dispatch manual melewati gate aktivitas harian itu. Lane ini membangun laporan performa Vitest full-suite yang dikelompokkan, mengizinkan Codex hanya membuat perbaikan performa test kecil yang mempertahankan cakupan alih-alih refactor luas, lalu menjalankan ulang laporan full-suite dan menolak perubahan yang mengurangi jumlah test baseline yang lolos. Jika baseline memiliki test yang gagal, Codex hanya boleh memperbaiki kegagalan yang jelas dan laporan full-suite setelah agen harus lolos sebelum apa pun di-commit. Saat `main` bergerak maju sebelum push bot mendarat, lane ini melakukan rebase patch yang telah divalidasi, menjalankan ulang `pnpm check:changed`, dan mencoba push lagi; patch usang yang konflik dilewati. Workflow ini menggunakan Ubuntu yang di-host GitHub agar action Codex dapat mempertahankan postur keselamatan drop-sudo yang sama seperti docs agent.
+Alur kerja `Test Performance Agent` adalah lane pemeliharaan Codex berbasis event untuk test yang lambat. Ia tidak memiliki jadwal murni: run CI push non-bot yang berhasil pada `main` dapat memicunya, tetapi ia melewati jika invocation workflow-run lain sudah berjalan atau sedang berjalan pada hari UTC tersebut. Dispatch manual melewati gerbang aktivitas harian itu. Lane ini membuat laporan performa Vitest full-suite yang dikelompokkan, mengizinkan Codex hanya membuat perbaikan performa test kecil yang mempertahankan cakupan alih-alih refactor luas, lalu menjalankan ulang laporan full-suite dan menolak perubahan yang mengurangi jumlah test baseline yang lulus. Jika baseline memiliki test yang gagal, Codex hanya boleh memperbaiki kegagalan yang jelas dan laporan full-suite pasca-agen harus lulus sebelum apa pun di-commit. Saat `main` maju sebelum push bot mendarat, lane me-rebase patch yang sudah divalidasi, menjalankan ulang `pnpm check:changed`, dan mencoba ulang push; patch basi yang konflik dilewati. Ini menggunakan Ubuntu yang di-host GitHub agar action Codex dapat mempertahankan postur keselamatan drop-sudo yang sama seperti agen docs.
### PR Duplikat Setelah Merge
-Workflow `Duplicate PRs After Merge` adalah workflow maintainer manual untuk pembersihan duplikat pasca-land. Default-nya dry-run dan hanya menutup PR yang dicantumkan secara eksplisit saat `apply=true`. Sebelum memutasi GitHub, workflow ini memverifikasi bahwa PR yang mendarat sudah di-merge dan bahwa setiap duplikat memiliki issue referensi bersama atau hunk perubahan yang tumpang tindih.
+Alur kerja `Duplicate PRs After Merge` adalah alur kerja maintainer manual untuk pembersihan duplikat pasca-land. Default-nya dry-run dan hanya menutup PR yang dicantumkan secara eksplisit saat `apply=true`. Sebelum memutasi GitHub, ia memverifikasi bahwa PR yang mendarat sudah di-merge dan bahwa setiap duplikat memiliki issue rujukan bersama atau hunk perubahan yang tumpang tindih.
```bash
gh workflow run duplicate-after-merge.yml \
@@ -471,31 +466,31 @@ gh workflow run duplicate-after-merge.yml \
-f apply=true
```
-## Gate check lokal dan routing perubahan
+## Gerbang pemeriksaan lokal dan routing perubahan
-Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dieksekusi oleh `scripts/check-changed.mjs`. Gate check lokal itu lebih ketat tentang batas arsitektur daripada cakupan platform CI yang luas:
+Logika changed-lane lokal berada di `scripts/changed-lanes.mjs` dan dieksekusi oleh `scripts/check-changed.mjs`. Gerbang pemeriksaan lokal itu lebih ketat tentang batas arsitektur daripada cakupan platform CI yang luas:
- perubahan produksi inti menjalankan typecheck prod inti dan test inti ditambah lint/guard inti;
- perubahan khusus test inti hanya menjalankan typecheck test inti ditambah lint inti;
-- perubahan produksi extension menjalankan typecheck prod extension dan test extension ditambah lint extension;
-- perubahan khusus test extension menjalankan typecheck test extension ditambah lint extension;
-- perubahan Plugin SDK publik atau kontrak plugin meluas ke typecheck extension karena extension bergantung pada kontrak inti tersebut (sapuan extension Vitest tetap berupa pekerjaan test eksplisit);
-- bump versi khusus metadata rilis menjalankan check versi/config/dependensi-root yang ditargetkan;
-- perubahan root/config yang tidak dikenal fail safe ke semua lane check.
+- perubahan produksi ekstensi menjalankan typecheck prod ekstensi dan test ekstensi ditambah lint ekstensi;
+- perubahan khusus test ekstensi menjalankan typecheck test ekstensi ditambah lint ekstensi;
+- perubahan Plugin SDK publik atau kontrak plugin meluas ke typecheck ekstensi karena ekstensi bergantung pada kontrak inti tersebut (sweep ekstensi Vitest tetap menjadi pekerjaan test eksplisit);
+- bump versi khusus metadata rilis menjalankan pemeriksaan versi/config/dependensi-root yang ditargetkan;
+- perubahan root/config yang tidak diketahui fail safe ke semua lane pemeriksaan.
-Routing changed-test lokal berada di `scripts/test-projects.test-support.mjs` dan sengaja lebih murah daripada `check:changed`: edit test langsung menjalankan dirinya sendiri, edit source memprioritaskan pemetaan eksplisit, lalu test saudara dan dependen import-graph. Config pengiriman group-room bersama adalah salah satu pemetaan eksplisit: perubahan pada config visible-reply grup, mode pengiriman balasan sumber, atau prompt sistem message-tool dirutekan melalui test balasan inti ditambah regresi pengiriman Discord dan Slack sehingga perubahan default bersama gagal sebelum push PR pertama. Gunakan `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` hanya saat perubahan cukup luas di harness sehingga set terpetakan murah bukan proxy yang dapat dipercaya.
+Routing changed-test lokal berada di `scripts/test-projects.test-support.mjs` dan secara sengaja lebih murah daripada `check:changed`: edit test langsung menjalankan dirinya sendiri, edit sumber memprioritaskan pemetaan eksplisit, lalu test saudara dan dependen import-graph. Config pengiriman ruang-grup bersama adalah salah satu pemetaan eksplisit: perubahan pada config visible-reply grup, mode pengiriman balasan sumber, atau prompt sistem message-tool dirutekan melalui test balasan inti ditambah regresi pengiriman Discord dan Slack sehingga perubahan default bersama gagal sebelum push PR pertama. Gunakan `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` hanya saat perubahan cukup luas di harness sehingga set terpetakan yang murah bukan proksi yang dapat dipercaya.
## Validasi Testbox
-Jalankan Testbox dari root repo dan utamakan box baru yang sudah di-warm untuk pembuktian luas. Sebelum menghabiskan gate yang lambat pada box yang digunakan ulang, kedaluwarsa, atau baru saja melaporkan sync yang ukurannya tak terduga besar, jalankan `pnpm testbox:sanity` di dalam box terlebih dahulu.
+Jalankan Testbox dari root repo dan utamakan box baru yang sudah di-warm untuk bukti luas. Sebelum menghabiskan gate yang lambat pada box yang digunakan ulang, kedaluwarsa, atau baru saja melaporkan sinkronisasi yang ukurannya tidak terduga besar, jalankan `pnpm testbox:sanity` di dalam box terlebih dahulu.
-Pemeriksaan sanity gagal cepat saat file root wajib seperti `pnpm-lock.yaml` menghilang atau saat `git status --short` menampilkan setidaknya 200 penghapusan terlacak. Itu biasanya berarti status sync jarak jauh bukan salinan PR yang dapat dipercaya; hentikan box itu dan warm box baru alih-alih men-debug kegagalan pengujian produk. Untuk PR penghapusan besar yang disengaja, setel `OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1` untuk run sanity tersebut.
+Pemeriksaan sanity gagal cepat saat file root yang wajib ada seperti `pnpm-lock.yaml` hilang atau saat `git status --short` menunjukkan setidaknya 200 penghapusan terlacak. Itu biasanya berarti status sinkronisasi jarak jauh bukan salinan PR yang dapat dipercaya; hentikan box tersebut dan warm box baru alih-alih men-debug kegagalan pengujian produk. Untuk PR penghapusan besar yang disengaja, setel `OPENCLAW_TESTBOX_ALLOW_MASS_DELETIONS=1` untuk proses sanity tersebut.
-`pnpm testbox:run` juga menghentikan invocation Blacksmith CLI lokal yang tetap berada dalam fase sync selama lebih dari lima menit tanpa output pasca-sync. Setel `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` untuk menonaktifkan guard itu, atau gunakan nilai milidetik yang lebih besar untuk diff lokal yang sangat besar.
+`pnpm testbox:run` juga menghentikan pemanggilan Blacksmith CLI lokal yang tetap berada di fase sinkronisasi selama lebih dari lima menit tanpa keluaran pascasinkronisasi. Setel `OPENCLAW_TESTBOX_SYNC_TIMEOUT_MS=0` untuk menonaktifkan guard tersebut, atau gunakan nilai milidetik yang lebih besar untuk diff lokal yang luar biasa besar.
-Crabbox adalah wrapper remote-box milik repo untuk pembuktian Linux maintainer. Gunakan saat sebuah pemeriksaan terlalu luas untuk local edit loop, saat paritas CI penting, atau saat pembuktian membutuhkan secret, Docker, package lane, box yang dapat digunakan ulang, atau log jarak jauh. Backend OpenClaw normal adalah `blacksmith-testbox`; kapasitas AWS/Hetzner milik sendiri adalah fallback untuk gangguan Blacksmith, masalah kuota, atau pengujian kapasitas milik sendiri secara eksplisit.
+Crabbox adalah wrapper remote-box milik repo untuk bukti Linux maintainer. Gunakan saat pemeriksaan terlalu luas untuk local loopback edit, saat paritas CI penting, atau saat bukti memerlukan secret, Docker, lane paket, box yang dapat digunakan ulang, atau log jarak jauh. Backend OpenClaw normal adalah `blacksmith-testbox`; kapasitas AWS/Hetzner milik sendiri adalah fallback untuk gangguan Blacksmith, masalah kuota, atau pengujian kapasitas milik sendiri secara eksplisit.
-Sebelum run pertama, periksa wrapper dari root repo:
+Sebelum menjalankan untuk pertama kalinya, periksa wrapper dari root repo:
```bash
pnpm crabbox:run -- --help | sed -n '1,120p'
@@ -518,7 +513,7 @@ pnpm crabbox:run -- --provider blacksmith-testbox \
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm check:changed"
```
-Rerun pengujian terfokus:
+Jalankan ulang pengujian terfokus:
```bash
pnpm crabbox:run -- --provider blacksmith-testbox \
@@ -533,7 +528,7 @@ pnpm crabbox:run -- --provider blacksmith-testbox \
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm test "
```
-Suite penuh:
+Suite lengkap:
```bash
pnpm crabbox:run -- --provider blacksmith-testbox \
@@ -548,14 +543,14 @@ pnpm crabbox:run -- --provider blacksmith-testbox \
"env CI=1 NODE_OPTIONS=--max-old-space-size=4096 OPENCLAW_TEST_PROJECTS_PARALLEL=6 OPENCLAW_VITEST_MAX_WORKERS=1 OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS=900000 pnpm test"
```
-Baca ringkasan JSON akhir. Field yang berguna adalah `provider`, `leaseId`, `syncDelegated`, `exitCode`, `commandMs`, dan `totalMs`. Run Crabbox sekali jalan yang didukung Blacksmith seharusnya menghentikan Testbox secara otomatis; jika sebuah run terinterupsi atau cleanup tidak jelas, inspeksi box live dan hentikan hanya box yang Anda buat:
+Baca ringkasan JSON akhir. Field yang berguna adalah `provider`, `leaseId`, `syncDelegated`, `exitCode`, `commandMs`, dan `totalMs`. Proses Crabbox sekali jalan yang didukung Blacksmith seharusnya menghentikan Testbox secara otomatis; jika proses terinterupsi atau pembersihan tidak jelas, periksa box aktif dan hentikan hanya box yang Anda buat:
```bash
blacksmith testbox list
blacksmith testbox stop --id
```
-Gunakan reuse hanya saat Anda sengaja membutuhkan beberapa perintah pada box terhidrasi yang sama:
+Gunakan reuse hanya saat Anda memang membutuhkan beberapa perintah pada box terhidrasi yang sama:
```bash
pnpm crabbox:run -- --provider blacksmith-testbox --id --no-sync --timing-json --shell -- "pnpm test "
@@ -570,7 +565,7 @@ blacksmith testbox run --id "env CI=1 NODE_OPTIONS=--max-old-space-size
blacksmith testbox stop --id
```
-Eskalasi ke kapasitas Crabbox milik sendiri hanya saat Blacksmith sedang down, dibatasi kuota, tidak memiliki environment yang dibutuhkan, atau kapasitas milik sendiri secara eksplisit menjadi tujuan:
+Eskalasi ke kapasitas Crabbox milik sendiri hanya saat Blacksmith down, dibatasi kuota, tidak memiliki lingkungan yang dibutuhkan, atau kapasitas milik sendiri memang menjadi tujuannya secara eksplisit:
```bash
pnpm crabbox:warmup -- --provider aws --class beast --market on-demand --idle-timeout 90m
@@ -579,9 +574,9 @@ pnpm crabbox:run -- --id --timing-json --shell -- "env NODE_OPT
pnpm crabbox:stop --
```
-`.crabbox.yaml` memiliki default provider, sync, dan hidrasi GitHub Actions untuk lane owned-cloud. File ini mengecualikan `.git` lokal agar checkout Actions terhidrasi mempertahankan metadata Git jarak jauhnya sendiri alih-alih menyinkronkan remote lokal maintainer dan object store, serta mengecualikan artefak runtime/build lokal yang tidak boleh pernah ditransfer. `.github/workflows/crabbox-hydrate.yml` memiliki checkout, penyiapan Node/pnpm, fetch `origin/main`, dan handoff environment non-secret untuk perintah owned-cloud `crabbox run --id `.
+`.crabbox.yaml` memiliki default provider, sinkronisasi, dan hidrasi GitHub Actions untuk lane owned-cloud. File ini mengecualikan `.git` lokal agar checkout Actions yang terhidrasi mempertahankan metadata Git jarak jauhnya sendiri alih-alih menyinkronkan remote lokal maintainer dan object store, serta mengecualikan artefak runtime/build lokal yang tidak boleh pernah ditransfer. `.github/workflows/crabbox-hydrate.yml` memiliki checkout, penyiapan Node/pnpm, fetch `origin/main`, dan handoff lingkungan non-secret untuk perintah owned-cloud `crabbox run --id `.
## Terkait
-- [Ringkasan instalasi](/id/install)
+- [Ikhtisar instalasi](/id/install)
- [Channel pengembangan](/id/install/development-channels)
diff --git a/docs/id/cli/dashboard.md b/docs/id/cli/dashboard.md
index a08d61778..37906093c 100644
--- a/docs/id/cli/dashboard.md
+++ b/docs/id/cli/dashboard.md
@@ -1,16 +1,16 @@
---
read_when:
- - Anda ingin membuka UI Kontrol dengan token Anda saat ini
- - Anda ingin mencetak URL tanpa meluncurkan browser
-summary: Referensi CLI untuk `openclaw dashboard` (buka UI Kontrol)
+ - Anda ingin membuka Control UI dengan token Anda saat ini
+ - Anda ingin mencetak URL tanpa membuka peramban
+summary: Referensi CLI untuk `openclaw dashboard` (buka Control UI)
title: Dasbor
x-i18n:
- generated_at: "2026-04-25T13:43:32Z"
- model: gpt-5.4
+ generated_at: "2026-05-05T01:44:14Z"
+ model: gpt-5.5
provider: openai
- source_hash: ce485388465fb93551be8ccf0aa01ea52e4feb949ef0d48c96b4f8ea65a6551c
+ source_hash: 51b3326b3884013ebcf570b417e66efe62ea89dcdedb5ab3173f39fb021de89f
source_path: cli/dashboard.md
- workflow: 15
+ workflow: 16
---
# `openclaw dashboard`
@@ -24,10 +24,14 @@ openclaw dashboard --no-open
Catatan:
-- `dashboard` me-resolve SecretRef `gateway.auth.token` yang dikonfigurasi bila memungkinkan.
-- `dashboard` mengikuti `gateway.tls.enabled`: gateway dengan TLS aktif mencetak/membuka URL UI Kontrol `https://` dan terhubung melalui `wss://`.
-- Untuk token yang dikelola SecretRef (yang berhasil maupun tidak berhasil di-resolve), `dashboard` mencetak/menyalin/membuka URL tanpa token untuk menghindari pemaparan rahasia eksternal dalam output terminal, riwayat clipboard, atau argumen peluncuran browser.
-- Jika `gateway.auth.token` dikelola SecretRef tetapi tidak berhasil di-resolve pada jalur perintah ini, perintah mencetak URL tanpa token dan panduan perbaikan yang eksplisit, alih-alih menyematkan placeholder token yang tidak valid.
+- `dashboard` menyelesaikan SecretRef `gateway.auth.token` yang dikonfigurasi jika memungkinkan.
+- `dashboard` mengikuti `gateway.tls.enabled`: gateway dengan TLS diaktifkan mencetak/membuka URL UI Kontrol
+ `https://` dan terhubung melalui `wss://`.
+- Jika pengiriman melalui clipboard/browser gagal untuk URL dashboard yang diautentikasi token,
+ `dashboard` mencatat petunjuk autentikasi manual yang aman dengan menyebut `OPENCLAW_GATEWAY_TOKEN`,
+ `gateway.auth.token`, dan kunci fragmen `token` tanpa mencetak nilai token.
+- Untuk token yang dikelola SecretRef (terselesaikan atau belum terselesaikan), `dashboard` mencetak/menyalin/membuka URL tanpa token untuk menghindari pemaparan secret eksternal dalam output terminal, riwayat clipboard, atau argumen peluncuran browser.
+- Jika `gateway.auth.token` dikelola SecretRef tetapi tidak terselesaikan di jalur perintah ini, perintah mencetak URL tanpa token dan panduan remediasi eksplisit alih-alih menyematkan placeholder token yang tidak valid.
## Terkait
diff --git a/docs/id/cli/doctor.md b/docs/id/cli/doctor.md
index 27d54381c..baaeec12b 100644
--- a/docs/id/cli/doctor.md
+++ b/docs/id/cli/doctor.md
@@ -3,23 +3,23 @@ read_when:
- Anda mengalami masalah konektivitas/autentikasi dan menginginkan perbaikan terpandu
- Anda telah memperbarui dan ingin pemeriksaan kewajaran
summary: Referensi CLI untuk `openclaw doctor` (pemeriksaan kesehatan + perbaikan terpandu)
-title: Diagnostik
+title: Dokter
x-i18n:
- generated_at: "2026-05-04T02:22:33Z"
+ generated_at: "2026-05-05T01:44:17Z"
model: gpt-5.5
provider: openai
- source_hash: cd7fb09d373c313e4be45ad9e3b19ceb187a5787ef3e70fcd2b1f1f01b50c905
+ source_hash: 079d7674ae2a259a0430e30e7577ac532135ad5461c57c4b3a6514a007bc9ea5
source_path: cli/doctor.md
workflow: 16
---
# `openclaw doctor`
-Pemeriksaan kesehatan + perbaikan cepat untuk Gateway dan channel.
+Pemeriksaan kesehatan + perbaikan cepat untuk Gateway dan saluran.
Terkait:
-- Pemecahan masalah: [Pemecahan masalah](/id/gateway/troubleshooting)
+- Pemecahan masalah: [Pemecahan Masalah](/id/gateway/troubleshooting)
- Audit keamanan: [Keamanan](/id/gateway/security)
## Contoh
@@ -35,44 +35,44 @@ openclaw doctor --generate-gateway-token
## Opsi
- `--no-workspace-suggestions`: nonaktifkan saran memori/pencarian workspace
-- `--yes`: terima nilai default tanpa prompt
+- `--yes`: terima default tanpa prompt
- `--repair`: terapkan perbaikan non-layanan yang direkomendasikan tanpa prompt; pemasangan dan penulisan ulang layanan Gateway tetap memerlukan konfirmasi interaktif atau perintah Gateway eksplisit
- `--fix`: alias untuk `--repair`
-- `--force`: terapkan perbaikan agresif, termasuk menimpa konfigurasi layanan kustom jika diperlukan
+- `--force`: terapkan perbaikan agresif, termasuk menimpa konfigurasi layanan kustom bila diperlukan
- `--non-interactive`: jalankan tanpa prompt; hanya migrasi aman dan perbaikan non-layanan
- `--generate-gateway-token`: buat dan konfigurasikan token Gateway
- `--deep`: pindai layanan sistem untuk pemasangan Gateway tambahan
Catatan:
-- Prompt interaktif (seperti perbaikan keychain/OAuth) hanya berjalan ketika stdin adalah TTY dan `--non-interactive` **tidak** disetel. Eksekusi headless (cron, Telegram, tanpa terminal) akan melewati prompt.
-- Performa: eksekusi `doctor` non-interaktif melewati pemuatan Plugin secara eager agar pemeriksaan kesehatan headless tetap cepat. Sesi interaktif tetap memuat Plugin sepenuhnya ketika pemeriksaan membutuhkan kontribusinya.
-- `--fix` (alias untuk `--repair`) menulis cadangan ke `~/.openclaw/openclaw.json.bak` dan menghapus kunci konfigurasi yang tidak dikenal, dengan mencantumkan setiap penghapusan.
-- `doctor --fix --non-interactive` melaporkan definisi layanan Gateway yang hilang atau usang tetapi tidak memasang atau menulis ulang definisi tersebut di luar mode perbaikan pembaruan. Jalankan `openclaw gateway install` untuk layanan yang hilang, atau `openclaw gateway install --force` ketika Anda memang ingin mengganti launcher.
-- Pemeriksaan integritas status kini mendeteksi file transkrip yatim di direktori sesi. Mengarsipkannya sebagai `.deleted.` memerlukan konfirmasi interaktif; `--fix`, `--yes`, dan eksekusi headless membiarkannya tetap di tempat.
-- Doctor juga memindai `~/.openclaw/cron/jobs.json` (atau `cron.store`) untuk bentuk job cron lama dan dapat menulis ulang secara langsung sebelum scheduler harus melakukan normalisasi otomatis saat runtime.
-- Di Linux, doctor memperingatkan ketika crontab pengguna masih menjalankan `~/.openclaw/bin/ensure-whatsapp.sh` lama; skrip tersebut tidak lagi dipelihara dan dapat mencatat gangguan Gateway WhatsApp palsu ketika cron tidak memiliki lingkungan user-bus systemd.
-- Doctor membersihkan status staging dependensi Plugin lama yang dibuat oleh versi OpenClaw yang lebih lama. Doctor juga memperbaiki Plugin unduhan terkonfigurasi yang hilang ketika registry dapat menyelesaikannya, dan proses doctor 2026.5.2 secara otomatis memasang Plugin unduhan yang sudah digunakan konfigurasi lama sebelum menandai konfigurasi tersentuh untuk rilis tersebut. Jika unduhan gagal, doctor melaporkan error pemasangan dan mempertahankan entri Plugin terkonfigurasi untuk upaya perbaikan berikutnya.
-- Doctor memperbaiki konfigurasi Plugin usang dengan menghapus id Plugin yang hilang dari `plugins.allow`/`plugins.entries`, serta konfigurasi channel yang menggantung, target Heartbeat, dan override model channel yang cocok ketika penemuan Plugin sehat.
-- Doctor mengarantina konfigurasi Plugin yang tidak valid dengan menonaktifkan entri `plugins.entries.` yang terdampak dan menghapus payload `config` yang tidak valid. Startup Gateway sudah melewati hanya Plugin bermasalah tersebut sehingga Plugin dan channel lain dapat tetap berjalan.
-- Setel `OPENCLAW_SERVICE_REPAIR_POLICY=external` ketika supervisor lain memiliki siklus hidup Gateway. Doctor tetap melaporkan kesehatan Gateway/layanan dan menerapkan perbaikan non-layanan, tetapi melewati pemasangan/start/restart/bootstrap layanan dan pembersihan layanan lama.
-- Di Linux, doctor mengabaikan unit systemd tambahan mirip Gateway yang tidak aktif dan tidak menulis ulang metadata command/entrypoint untuk layanan Gateway systemd yang sedang berjalan selama perbaikan. Hentikan layanan terlebih dahulu atau gunakan `openclaw gateway install --force` ketika Anda memang ingin mengganti launcher aktif.
-- Doctor melakukan migrasi otomatis konfigurasi Talk datar lama (`talk.voiceId`, `talk.modelId`, dan sejenisnya) ke `talk.provider` + `talk.providers.`.
-- Eksekusi `doctor --fix` berulang tidak lagi melaporkan/menerapkan normalisasi Talk ketika satu-satunya perbedaan adalah urutan kunci objek.
-- Doctor menyertakan pemeriksaan kesiapan pencarian memori dan dapat merekomendasikan `openclaw configure --section model` ketika kredensial embedding hilang.
-- Doctor memperingatkan ketika tidak ada pemilik command yang dikonfigurasi. Pemilik command adalah akun operator manusia yang diizinkan menjalankan command khusus pemilik dan menyetujui tindakan berbahaya. Pairing DM hanya memungkinkan seseorang berbicara dengan bot; jika Anda menyetujui pengirim sebelum bootstrap pemilik pertama ada, setel `commands.ownerAllowFrom` secara eksplisit.
-- Doctor memperingatkan ketika agen mode Codex dikonfigurasi dan aset CLI Codex pribadi ada di home Codex operator. Peluncuran server aplikasi Codex lokal menggunakan home per-agen yang terisolasi, jadi gunakan `openclaw migrate codex --dry-run` untuk menginventarisasi aset yang harus dipromosikan secara sengaja.
-- Doctor memperingatkan ketika Skills yang diizinkan untuk agen default tidak tersedia di lingkungan runtime saat ini karena bin, env vars, konfigurasi, atau persyaratan OS hilang. `doctor --fix` dapat menonaktifkan Skills yang tidak tersedia tersebut dengan `skills.entries..enabled=false`; pasang/konfigurasikan persyaratan yang hilang sebagai gantinya ketika Anda ingin mempertahankan skill tetap aktif.
-- Jika mode sandbox diaktifkan tetapi Docker tidak tersedia, doctor melaporkan peringatan bernilai tinggi dengan remediasi (`install Docker` atau `openclaw config set agents.defaults.sandbox.mode off`).
-- Jika file registry sandbox lama (`~/.openclaw/sandbox/containers.json` atau `~/.openclaw/sandbox/browsers.json`) ada, doctor melaporkannya; `openclaw doctor --fix` memigrasikan entri valid ke direktori registry bershard dan mengarantina file lama yang tidak valid.
-- Jika `gateway.auth.token`/`gateway.auth.password` dikelola SecretRef dan tidak tersedia di jalur command saat ini, doctor melaporkan peringatan hanya-baca dan tidak menulis kredensial fallback plaintext.
-- Jika inspeksi SecretRef channel gagal di jalur perbaikan, doctor melanjutkan dan melaporkan peringatan alih-alih keluar lebih awal.
-- Setelah migrasi direktori status, doctor memperingatkan ketika akun Telegram atau Discord default yang diaktifkan bergantung pada fallback env dan `TELEGRAM_BOT_TOKEN` atau `DISCORD_BOT_TOKEN` tidak tersedia untuk proses doctor.
-- Resolusi otomatis username `allowFrom` Telegram (`doctor --fix`) memerlukan token Telegram yang dapat di-resolve di jalur command saat ini. Jika inspeksi token tidak tersedia, doctor melaporkan peringatan dan melewati resolusi otomatis untuk proses tersebut.
+- Prompt interaktif (seperti perbaikan keychain/OAuth) hanya berjalan saat stdin adalah TTY dan `--non-interactive` **tidak** disetel. Proses tanpa antarmuka (cron, Telegram, tanpa terminal) akan melewati prompt.
+- Performa: proses `doctor` non-interaktif melewati pemuatan Plugin secara eager agar pemeriksaan kesehatan tanpa antarmuka tetap cepat. Sesi interaktif tetap memuat Plugin sepenuhnya saat suatu pemeriksaan membutuhkan kontribusinya.
+- `--fix` (alias untuk `--repair`) menulis cadangan ke `~/.openclaw/openclaw.json.bak` dan membuang kunci konfigurasi yang tidak dikenal, dengan mencantumkan setiap penghapusan.
+- `doctor --fix --non-interactive` melaporkan definisi layanan Gateway yang hilang atau kedaluwarsa tetapi tidak memasang atau menulis ulang definisi tersebut di luar mode perbaikan pembaruan. Jalankan `openclaw gateway install` untuk layanan yang hilang, atau `openclaw gateway install --force` saat Anda memang ingin mengganti launcher.
+- Pemeriksaan integritas state sekarang mendeteksi file transkrip yatim piatu di direktori sesi. Mengarsipkannya sebagai `.deleted.` memerlukan konfirmasi interaktif; `--fix`, `--yes`, dan proses tanpa antarmuka membiarkannya tetap ada.
+- Doctor juga memindai `~/.openclaw/cron/jobs.json` (atau `cron.store`) untuk bentuk job Cron lama dan dapat menulis ulang di tempat sebelum scheduler harus menormalisasinya otomatis saat runtime.
+- Di Linux, doctor memperingatkan saat crontab pengguna masih menjalankan `~/.openclaw/bin/ensure-whatsapp.sh` lama; skrip itu tidak lagi dipelihara dan dapat mencatat gangguan Gateway WhatsApp palsu saat cron tidak memiliki lingkungan systemd user-bus.
+- Doctor membersihkan state staging dependensi Plugin lama yang dibuat oleh versi OpenClaw yang lebih lama. Doctor juga memperbaiki Plugin unduhan yang hilang dan direferensikan oleh konfigurasi, seperti `plugins.entries`, saluran terkonfigurasi, pengaturan provider/pencarian terkonfigurasi, atau runtime agen terkonfigurasi. Selama pembaruan paket, doctor melewati perbaikan Plugin package-manager sampai penukaran paket selesai; jalankan ulang `openclaw doctor --fix` setelahnya jika Plugin terkonfigurasi masih perlu dipulihkan. Jika unduhan gagal, doctor melaporkan kesalahan pemasangan dan mempertahankan entri Plugin terkonfigurasi untuk percobaan perbaikan berikutnya.
+- Doctor memperbaiki konfigurasi Plugin kedaluwarsa dengan menghapus id Plugin yang hilang dari `plugins.allow`/`plugins.entries`, serta konfigurasi saluran menggantung yang cocok, target Heartbeat, dan override model saluran saat penemuan Plugin sehat.
+- Doctor mengarantina konfigurasi Plugin yang tidak valid dengan menonaktifkan entri `plugins.entries.` yang terdampak dan menghapus payload `config` yang tidak valid. Startup Gateway sudah melewati hanya Plugin bermasalah itu sehingga Plugin dan saluran lain dapat tetap berjalan.
+- Setel `OPENCLAW_SERVICE_REPAIR_POLICY=external` saat supervisor lain memiliki siklus hidup Gateway. Doctor tetap melaporkan kesehatan Gateway/layanan dan menerapkan perbaikan non-layanan, tetapi melewati pemasangan/mulai/mulai ulang/bootstrap layanan dan pembersihan layanan lama.
+- Di Linux, doctor mengabaikan unit systemd tambahan mirip Gateway yang tidak aktif dan tidak menulis ulang metadata perintah/entrypoint untuk layanan Gateway systemd yang sedang berjalan selama perbaikan. Hentikan layanan terlebih dahulu atau gunakan `openclaw gateway install --force` saat Anda memang ingin mengganti launcher aktif.
+- Doctor memigrasikan otomatis konfigurasi Talk datar lama (`talk.voiceId`, `talk.modelId`, dan lainnya) ke `talk.provider` + `talk.providers.`.
+- Proses `doctor --fix` berulang tidak lagi melaporkan/menerapkan normalisasi Talk saat satu-satunya perbedaan adalah urutan kunci objek.
+- Doctor menyertakan pemeriksaan kesiapan pencarian memori dan dapat merekomendasikan `openclaw configure --section model` saat kredensial embedding hilang.
+- Doctor memperingatkan saat tidak ada pemilik perintah yang dikonfigurasi. Pemilik perintah adalah akun operator manusia yang diizinkan menjalankan perintah khusus pemilik dan menyetujui tindakan berbahaya. Pairing DM hanya memungkinkan seseorang berbicara dengan bot; jika Anda menyetujui pengirim sebelum bootstrap pemilik pertama ada, setel `commands.ownerAllowFrom` secara eksplisit.
+- Doctor memperingatkan saat agen mode Codex dikonfigurasi dan aset Codex CLI pribadi ada di home Codex milik operator. Peluncuran app-server Codex lokal menggunakan home per agen yang terisolasi, jadi gunakan `openclaw migrate codex --dry-run` untuk menginventarisasi aset yang harus dipromosikan secara sengaja.
+- Doctor memperingatkan saat skills yang diizinkan untuk agen default tidak tersedia di lingkungan runtime saat ini karena bin, variabel env, konfigurasi, atau persyaratan OS hilang. `doctor --fix` dapat menonaktifkan skills yang tidak tersedia tersebut dengan `skills.entries..enabled=false`; pasang/konfigurasikan persyaratan yang hilang sebagai gantinya saat Anda ingin skill tetap aktif.
+- Jika mode sandbox diaktifkan tetapi Docker tidak tersedia, doctor melaporkan peringatan bersinyal tinggi dengan remediasi (`install Docker` atau `openclaw config set agents.defaults.sandbox.mode off`).
+- Jika file registri sandbox lama (`~/.openclaw/sandbox/containers.json` atau `~/.openclaw/sandbox/browsers.json`) ada, doctor melaporkannya; `openclaw doctor --fix` memigrasikan entri valid ke direktori registri tersharding dan mengarantina file lama yang tidak valid.
+- Jika `gateway.auth.token`/`gateway.auth.password` dikelola SecretRef dan tidak tersedia di jalur perintah saat ini, doctor melaporkan peringatan baca-saja dan tidak menulis kredensial fallback plaintext.
+- Jika inspeksi SecretRef saluran gagal di jalur perbaikan, doctor melanjutkan dan melaporkan peringatan alih-alih keluar lebih awal.
+- Setelah migrasi direktori state, doctor memperingatkan saat akun default Telegram atau Discord yang diaktifkan bergantung pada fallback env dan `TELEGRAM_BOT_TOKEN` atau `DISCORD_BOT_TOKEN` tidak tersedia bagi proses doctor.
+- Resolusi otomatis username `allowFrom` Telegram (`doctor --fix`) memerlukan token Telegram yang dapat di-resolve di jalur perintah saat ini. Jika inspeksi token tidak tersedia, doctor melaporkan peringatan dan melewati resolusi otomatis untuk proses tersebut.
## macOS: override env `launchctl`
-Jika sebelumnya Anda menjalankan `launchctl setenv OPENCLAW_GATEWAY_TOKEN ...` (atau `...PASSWORD`), nilai tersebut menimpa file konfigurasi Anda dan dapat menyebabkan error “tidak terotorisasi” yang persisten.
+Jika sebelumnya Anda menjalankan `launchctl setenv OPENCLAW_GATEWAY_TOKEN ...` (atau `...PASSWORD`), nilai tersebut menimpa file konfigurasi Anda dan dapat menyebabkan kesalahan “tidak terotorisasi” yang persisten.
```bash
launchctl getenv OPENCLAW_GATEWAY_TOKEN
@@ -85,4 +85,4 @@ launchctl unsetenv OPENCLAW_GATEWAY_PASSWORD
## Terkait
- [Referensi CLI](/id/cli)
-- [Gateway doctor](/id/gateway/doctor)
+- [Doctor Gateway](/id/gateway/doctor)
diff --git a/docs/id/cli/gateway.md b/docs/id/cli/gateway.md
index 0f4232da0..61d355f47 100644
--- a/docs/id/cli/gateway.md
+++ b/docs/id/cli/gateway.md
@@ -1,16 +1,16 @@
---
read_when:
- Menjalankan Gateway dari CLI (pengembangan atau server)
- - Men-debug autentikasi Gateway, mode pengikatan, dan konektivitas
+ - Mendiagnosis autentikasi Gateway, mode pengikatan, dan konektivitas
- Menemukan Gateway melalui Bonjour (DNS-SD lokal + area luas)
sidebarTitle: Gateway
summary: OpenClaw Gateway CLI (`openclaw gateway`) — jalankan, kueri, dan temukan Gateway
title: Gateway
x-i18n:
- generated_at: "2026-05-04T18:23:42Z"
+ generated_at: "2026-05-05T01:44:23Z"
model: gpt-5.5
provider: openai
- source_hash: 310867c59148577f2e8ce6f708da6bce936e09243ce7fbe5daeb453c6b3b370d
+ source_hash: 521558189b150b2faa22f95ec32419ac9e02c5f47c72b9095f40d1432840c038
source_path: cli/gateway.md
workflow: 16
---
@@ -37,7 +37,7 @@ Jalankan proses Gateway lokal:
openclaw gateway
```
-Alias foreground:
+Alias latar depan:
```bash
openclaw gateway run
@@ -46,11 +46,11 @@ openclaw gateway run
- Secara default, Gateway menolak untuk dimulai kecuali `gateway.mode=local` diatur di `~/.openclaw/openclaw.json`. Gunakan `--allow-unconfigured` untuk eksekusi ad-hoc/dev.
- - `openclaw onboard --mode local` dan `openclaw setup` diharapkan menulis `gateway.mode=local`. Jika file ada tetapi `gateway.mode` tidak ada, perlakukan itu sebagai konfigurasi yang rusak atau tertimpa dan perbaiki, alih-alih mengasumsikan mode lokal secara implisit.
- - Jika file ada dan `gateway.mode` tidak ada, Gateway memperlakukan itu sebagai kerusakan konfigurasi yang mencurigakan dan menolak untuk "menebak lokal" untuk Anda.
- - Binding di luar loopback tanpa autentikasi diblokir (pagar pengaman).
- - `SIGUSR1` memicu restart dalam proses saat diotorisasi (`commands.restart` diaktifkan secara default; atur `commands.restart: false` untuk memblokir restart manual, sementara penerapan/pembaruan alat/konfigurasi gateway tetap diizinkan).
- - Handler `SIGINT`/`SIGTERM` menghentikan proses gateway, tetapi tidak memulihkan status terminal kustom apa pun. Jika Anda membungkus CLI dengan TUI atau input raw-mode, pulihkan terminal sebelum keluar.
+ - `openclaw onboard --mode local` dan `openclaw setup` diharapkan menulis `gateway.mode=local`. Jika file ada tetapi `gateway.mode` hilang, anggap itu sebagai konfigurasi yang rusak atau tertimpa dan perbaiki, bukan mengasumsikan mode lokal secara implisit.
+ - Jika file ada dan `gateway.mode` hilang, Gateway menganggapnya sebagai kerusakan konfigurasi yang mencurigakan dan menolak untuk "menebak lokal" untuk Anda.
+ - Pengikatan di luar loopback tanpa autentikasi diblokir (pagar pengaman).
+ - `SIGUSR1` memicu restart dalam proses saat diotorisasi (`commands.restart` diaktifkan secara default; atur `commands.restart: false` untuk memblokir restart manual, sementara penerapan/pembaruan tool/config gateway tetap diizinkan).
+ - Handler `SIGINT`/`SIGTERM` menghentikan proses gateway, tetapi tidak memulihkan status terminal kustom apa pun. Jika Anda membungkus CLI dengan TUI atau input mode raw, pulihkan terminal sebelum keluar.
@@ -58,7 +58,7 @@ openclaw gateway run
### Opsi
- Port WebSocket (default berasal dari konfigurasi/env; biasanya `18789`).
+ Port WebSocket (default berasal dari config/env; biasanya `18789`).
Mode bind listener.
@@ -79,19 +79,19 @@ openclaw gateway run
Ekspos Gateway melalui Tailscale.
- Reset konfigurasi serve/funnel Tailscale saat shutdown.
+ Reset config serve/funnel Tailscale saat shutdown.
- Izinkan gateway dimulai tanpa `gateway.mode=local` dalam konfigurasi. Hanya melewati guard startup untuk bootstrap ad-hoc/dev; tidak menulis atau memperbaiki file konfigurasi.
+ Izinkan gateway dimulai tanpa `gateway.mode=local` dalam config. Hanya melewati pelindung startup untuk bootstrap ad-hoc/dev; tidak menulis atau memperbaiki file config.
- Buat konfigurasi dev + ruang kerja jika tidak ada (melewati BOOTSTRAP.md).
+ Buat config dev + workspace jika belum ada (melewati BOOTSTRAP.md).
- Reset konfigurasi dev + kredensial + sesi + ruang kerja (memerlukan `--dev`).
+ Reset config dev + kredensial + sesi + workspace (memerlukan `--dev`).
- Matikan listener yang ada pada port yang dipilih sebelum memulai.
+ Matikan listener yang sudah ada pada port yang dipilih sebelum memulai.
Log verbose.
@@ -100,16 +100,16 @@ openclaw gateway run
Hanya tampilkan log backend CLI di konsol (dan aktifkan stdout/stderr).
- Gaya log Websocket.
+ Gaya log WebSocket.
Alias untuk `--ws-log compact`.
- Catat peristiwa stream model mentah ke jsonl.
+ Catat event stream model raw ke jsonl.
- Path jsonl stream mentah.
+ Path jsonl stream raw.
## Restart Gateway
@@ -120,17 +120,17 @@ openclaw gateway restart --safe
openclaw gateway restart --force
```
-`openclaw gateway restart --safe` meminta Gateway yang sedang berjalan untuk melakukan preflight pekerjaan OpenClaw yang aktif sebelum restart. Jika operasi antrean, pengiriman balasan, eksekusi tertanam, atau eksekusi tugas aktif, Gateway melaporkan pemblokirnya, menggabungkan permintaan restart aman yang duplikat, dan restart setelah pekerjaan aktif selesai. `restart` biasa mempertahankan perilaku manajer layanan yang ada untuk kompatibilitas. Gunakan `--force` hanya saat Anda secara eksplisit menginginkan jalur override segera.
+`openclaw gateway restart --safe` meminta Gateway yang sedang berjalan untuk melakukan preflight pada pekerjaan OpenClaw aktif sebelum restart. Jika operasi antrean, pengiriman balasan, eksekusi tertanam, atau eksekusi tugas aktif, Gateway melaporkan pemblokir, menggabungkan permintaan restart aman duplikat, dan restart setelah pekerjaan aktif selesai. `restart` biasa mempertahankan perilaku service-manager yang sudah ada untuk kompatibilitas. Gunakan `--force` hanya saat Anda secara eksplisit menginginkan jalur override langsung.
-`--password` inline dapat terlihat dalam daftar proses lokal. Lebih baik gunakan `--password-file`, env, atau `gateway.auth.password` yang didukung SecretRef.
+`--password` inline dapat terekspos dalam daftar proses lokal. Utamakan `--password-file`, env, atau `gateway.auth.password` berbasis SecretRef.
### Profiling startup
-- Atur `OPENCLAW_GATEWAY_STARTUP_TRACE=1` untuk mencatat timing fase selama startup Gateway, termasuk penundaan `eventLoopMax` per fase dan timing tabel lookup plugin untuk installed-index, registri manifest, perencanaan startup, dan pekerjaan owner-map.
-- Atur `OPENCLAW_DIAGNOSTICS=timeline` dengan `OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=` untuk menulis timeline diagnostik startup JSONL best-effort untuk harness QA eksternal. Anda juga dapat mengaktifkan flag dengan `diagnostics.flags: ["timeline"]` dalam konfigurasi; path tetap disediakan melalui env. Tambahkan `OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1` untuk menyertakan sampel event-loop.
-- Jalankan `pnpm test:startup:gateway -- --runs 5 --warmup 1` untuk melakukan benchmark startup Gateway. Benchmark merekam output proses pertama, `/healthz`, `/readyz`, timing trace startup, penundaan event-loop, dan detail timing tabel lookup plugin.
+- Atur `OPENCLAW_GATEWAY_STARTUP_TRACE=1` untuk mencatat timing fase selama startup Gateway, termasuk delay `eventLoopMax` per fase dan timing tabel lookup Plugin untuk installed-index, registry manifest, perencanaan startup, dan pekerjaan owner-map.
+- Atur `OPENCLAW_DIAGNOSTICS=timeline` dengan `OPENCLAW_DIAGNOSTICS_TIMELINE_PATH=` untuk menulis timeline diagnostik startup JSONL best-effort bagi harness QA eksternal. Anda juga dapat mengaktifkan flag dengan `diagnostics.flags: ["timeline"]` di config; path tetap disediakan lewat env. Tambahkan `OPENCLAW_DIAGNOSTICS_EVENT_LOOP=1` untuk menyertakan sampel event-loop.
+- Jalankan `pnpm test:startup:gateway -- --runs 5 --warmup 1` untuk membenchmark startup Gateway. Benchmark merekam output proses pertama, `/healthz`, `/readyz`, timing trace startup, delay event-loop, dan detail timing tabel lookup Plugin.
## Kueri Gateway yang sedang berjalan
@@ -139,7 +139,7 @@ Semua perintah kueri menggunakan RPC WebSocket.
- Default: mudah dibaca manusia (berwarna di TTY).
- - `--json`: JSON yang dapat dibaca mesin (tanpa gaya/spinner).
+ - `--json`: JSON yang dapat dibaca mesin (tanpa styling/spinner).
- `--no-color` (atau `NO_COLOR=1`): nonaktifkan ANSI sambil mempertahankan tata letak manusia.
@@ -147,14 +147,14 @@ Semua perintah kueri menggunakan RPC WebSocket.
- `--url `: URL WebSocket Gateway.
- `--token `: token Gateway.
- `--password `: kata sandi Gateway.
- - `--timeout `: timeout/anggaran (berbeda per perintah).
+ - `--timeout `: timeout/anggaran (bervariasi per perintah).
- `--expect-final`: tunggu respons "final" (panggilan agen).
-Saat Anda mengatur `--url`, CLI tidak fallback ke kredensial konfigurasi atau lingkungan. Berikan `--token` atau `--password` secara eksplisit. Kredensial eksplisit yang tidak ada adalah error.
+Saat Anda mengatur `--url`, CLI tidak fallback ke kredensial config atau environment. Berikan `--token` atau `--password` secara eksplisit. Kredensial eksplisit yang hilang adalah error.
### `gateway health`
@@ -163,7 +163,7 @@ Saat Anda mengatur `--url`, CLI tidak fallback ke kredensial konfigurasi atau li
openclaw gateway health --url ws://127.0.0.1:18789
```
-Endpoint HTTP `/healthz` adalah probe liveness: endpoint ini kembali setelah server dapat menjawab HTTP. Endpoint HTTP `/readyz` lebih ketat dan tetap merah saat sidecar plugin startup, saluran, atau hook yang dikonfigurasi masih stabil. Respons readiness detail lokal atau terautentikasi menyertakan blok diagnostik `eventLoop` dengan penundaan event-loop, utilisasi event-loop, rasio core CPU, dan flag `degraded`.
+Endpoint HTTP `/healthz` adalah probe liveness: endpoint ini mengembalikan respons begitu server dapat menjawab HTTP. Endpoint HTTP `/readyz` lebih ketat dan tetap merah saat sidecar Plugin startup, saluran, atau hook yang dikonfigurasi masih dalam proses stabil. Respons kesiapan detail lokal atau terautentikasi menyertakan blok diagnostik `eventLoop` dengan delay event-loop, utilisasi event-loop, rasio core CPU, dan flag `degraded`.
### `gateway usage-cost`
@@ -176,7 +176,7 @@ openclaw gateway usage-cost --json
```
- Jumlah hari yang akan disertakan.
+ Jumlah hari yang disertakan.
### `gateway stability`
@@ -192,16 +192,16 @@ openclaw gateway stability --json
```
- Jumlah maksimum peristiwa terbaru yang disertakan (maks `1000`).
+ Jumlah maksimum event terbaru yang disertakan (maks `1000`).
- Filter berdasarkan jenis peristiwa diagnostik, seperti `payload.large` atau `diagnostic.memory.pressure`.
+ Filter berdasarkan tipe event diagnostik, seperti `payload.large` atau `diagnostic.memory.pressure`.
- Sertakan hanya peristiwa setelah nomor urut diagnostik.
+ Hanya sertakan event setelah nomor urut diagnostik.
- Baca bundle stabilitas yang dipersistenkan alih-alih memanggil Gateway yang sedang berjalan. Gunakan `--bundle latest` (atau cukup `--bundle`) untuk bundle terbaru di bawah direktori status, atau berikan path JSON bundle secara langsung.
+ Baca bundle stabilitas persisten alih-alih memanggil Gateway yang sedang berjalan. Gunakan `--bundle latest` (atau cukup `--bundle`) untuk bundle terbaru di bawah direktori state, atau berikan path JSON bundle secara langsung.
Tulis zip diagnostik dukungan yang dapat dibagikan alih-alih mencetak detail stabilitas.
@@ -212,8 +212,8 @@ openclaw gateway stability --json
- - Catatan menyimpan metadata operasional: nama peristiwa, hitungan, ukuran byte, pembacaan memori, status antrean/sesi, nama saluran/plugin, dan ringkasan sesi yang disunting. Catatan tidak menyimpan teks chat, body webhook, output alat, body permintaan atau respons mentah, token, cookie, nilai rahasia, hostname, atau id sesi mentah. Atur `diagnostics.enabled: false` untuk menonaktifkan perekam sepenuhnya.
- - Pada exit Gateway yang fatal, timeout shutdown, dan kegagalan startup restart, OpenClaw menulis snapshot diagnostik yang sama ke `~/.openclaw/logs/stability/openclaw-stability-*.json` saat perekam memiliki peristiwa. Periksa bundle terbaru dengan `openclaw gateway stability --bundle latest`; `--limit`, `--type`, dan `--since-seq` juga berlaku untuk output bundle.
+ - Rekaman menyimpan metadata operasional: nama event, hitungan, ukuran byte, pembacaan memori, status antrean/sesi, nama saluran/Plugin, dan ringkasan sesi yang disunting. Rekaman tidak menyimpan teks chat, body webhook, output tool, body request atau response raw, token, cookie, nilai rahasia, hostname, atau id sesi raw. Atur `diagnostics.enabled: false` untuk menonaktifkan perekam sepenuhnya.
+ - Pada exit fatal Gateway, timeout shutdown, dan kegagalan startup restart, OpenClaw menulis snapshot diagnostik yang sama ke `~/.openclaw/logs/stability/openclaw-stability-*.json` saat perekam memiliki event. Periksa bundle terbaru dengan `openclaw gateway stability --bundle latest`; `--limit`, `--type`, dan `--since-seq` juga berlaku untuk output bundle.
@@ -229,7 +229,7 @@ openclaw gateway diagnostics export --json
```
- Path zip output. Default ke ekspor dukungan di bawah direktori status.
+ Path zip output. Default ke ekspor dukungan di bawah direktori state.
Jumlah maksimum baris log tersanitasi yang disertakan.
@@ -238,31 +238,31 @@ openclaw gateway diagnostics export --json
Jumlah maksimum byte log yang diperiksa.
- URL WebSocket Gateway untuk snapshot kesehatan.
+ URL WebSocket Gateway untuk snapshot health.
- Token Gateway untuk snapshot kesehatan.
+ Token Gateway untuk snapshot health.
- Kata sandi Gateway untuk snapshot kesehatan.
+ Kata sandi Gateway untuk snapshot health.
- Timeout snapshot status/kesehatan.
+ Timeout snapshot status/health.
- Lewati lookup bundle stabilitas yang dipersistenkan.
+ Lewati lookup bundle stabilitas persisten.
Cetak path tertulis, ukuran, dan manifest sebagai JSON.
-Ekspor berisi manifest, ringkasan Markdown, bentuk konfigurasi, detail konfigurasi tersanitasi, ringkasan log tersanitasi, snapshot status/kesehatan Gateway tersanitasi, dan bundle stabilitas terbaru jika ada.
+Ekspor berisi manifest, ringkasan Markdown, bentuk config, detail config tersanitasi, ringkasan log tersanitasi, snapshot status/health Gateway tersanitasi, dan bundle stabilitas terbaru saat tersedia.
-Ekspor ini dimaksudkan untuk dibagikan. Ekspor menyimpan detail operasional yang membantu debugging, seperti field log OpenClaw yang aman, nama subsistem, kode status, durasi, mode yang dikonfigurasi, port, id plugin, id penyedia, pengaturan fitur non-rahasia, dan pesan log operasional yang disunting. Ekspor menghilangkan atau menyunting teks chat, body webhook, output alat, kredensial, cookie, pengidentifikasi akun/pesan, teks prompt/instruksi, hostname, dan nilai rahasia. Saat pesan bergaya LogTape terlihat seperti teks payload pengguna/chat/alat, ekspor hanya menyimpan bahwa pesan tersebut dihilangkan beserta jumlah byte-nya.
+Ini dimaksudkan untuk dibagikan. Ekspor mempertahankan detail operasional yang membantu debugging, seperti field log OpenClaw yang aman, nama subsistem, kode status, durasi, mode yang dikonfigurasi, port, id Plugin, id provider, pengaturan fitur non-rahasia, dan pesan log operasional yang disunting. Ekspor menghilangkan atau menyunting teks chat, body webhook, output tool, kredensial, cookie, identifier akun/pesan, teks prompt/instruksi, hostname, dan nilai rahasia. Saat pesan bergaya LogTape terlihat seperti teks payload pengguna/chat/tool, ekspor hanya mempertahankan bahwa suatu pesan dihilangkan beserta jumlah byte-nya.
### `gateway status`
-`gateway status` menampilkan layanan Gateway (launchd/systemd/schtasks) plus probe opsional untuk kemampuan konektivitas/autentikasi.
+`gateway status` menampilkan layanan Gateway (launchd/systemd/schtasks) plus probe opsional untuk kapabilitas konektivitas/autentikasi.
```bash
openclaw gateway status
@@ -271,63 +271,63 @@ openclaw gateway status --require-rpc
```
- Tambahkan target pemeriksaan eksplisit. Remote yang dikonfigurasi + localhost tetap diperiksa.
+ Tambahkan target probe eksplisit. Remote yang dikonfigurasi + localhost tetap di-probe.
- Autentikasi token untuk pemeriksaan.
+ Autentikasi token untuk probe.
- Autentikasi kata sandi untuk pemeriksaan.
+ Autentikasi kata sandi untuk probe.
- Batas waktu pemeriksaan.
+ Timeout probe.
- Lewati pemeriksaan konektivitas (tampilan khusus layanan).
+ Lewati probe konektivitas (tampilan layanan saja).
Pindai juga layanan tingkat sistem.
- Tingkatkan pemeriksaan konektivitas default menjadi pemeriksaan baca dan keluar dengan nilai bukan nol saat pemeriksaan baca tersebut gagal. Tidak dapat digabungkan dengan `--no-probe`.
+ Tingkatkan probe konektivitas default menjadi probe baca dan keluar dengan nilai non-zero ketika probe baca itu gagal. Tidak dapat digabungkan dengan `--no-probe`.
- `gateway status` tetap tersedia untuk diagnostik meskipun konfigurasi CLI lokal hilang atau tidak valid.
- - `gateway status` default membuktikan status layanan, koneksi WebSocket, dan kapabilitas autentikasi yang terlihat saat handshake. Ini tidak membuktikan operasi baca/tulis/admin.
- - Pemeriksaan diagnostik tidak mengubah apa pun untuk autentikasi perangkat pertama kali: pemeriksaan menggunakan ulang token perangkat yang sudah ada di cache saat tersedia, tetapi tidak membuat identitas perangkat CLI baru atau catatan pairing perangkat baca-saja hanya untuk memeriksa status.
- - `gateway status` menyelesaikan SecretRefs autentikasi yang dikonfigurasi untuk autentikasi pemeriksaan jika memungkinkan.
- - Jika SecretRef autentikasi yang diperlukan tidak terselesaikan di jalur perintah ini, `gateway status --json` melaporkan `rpc.authWarning` saat konektivitas/autentikasi pemeriksaan gagal; teruskan `--token`/`--password` secara eksplisit atau selesaikan sumber rahasia terlebih dahulu.
- - Jika pemeriksaan berhasil, peringatan auth-ref yang belum terselesaikan disembunyikan untuk menghindari positif palsu.
- - Gunakan `--require-rpc` dalam skrip dan otomatisasi saat layanan yang mendengarkan saja tidak cukup dan Anda juga memerlukan panggilan RPC cakupan baca yang sehat.
- - `--deep` menambahkan pemindaian upaya terbaik untuk instalasi launchd/systemd/schtasks tambahan. Saat beberapa layanan mirip gateway terdeteksi, output manusia mencetak petunjuk pembersihan dan memperingatkan bahwa sebagian besar penyiapan sebaiknya menjalankan satu gateway per mesin.
- - Output manusia menyertakan jalur log file yang terselesaikan ditambah snapshot jalur/validitas konfigurasi CLI-vs-layanan untuk membantu mendiagnosis penyimpangan profil atau state-dir.
+ - `gateway status` default membuktikan status layanan, koneksi WebSocket, dan kapabilitas autentikasi yang terlihat pada waktu handshake. Ini tidak membuktikan operasi baca/tulis/admin.
+ - Probe diagnostik tidak melakukan mutasi untuk autentikasi perangkat pertama kali: probe menggunakan kembali token perangkat yang sudah di-cache jika ada, tetapi tidak membuat identitas perangkat CLI baru atau catatan pairing perangkat read-only hanya untuk memeriksa status.
+ - `gateway status` menyelesaikan SecretRefs autentikasi yang dikonfigurasi untuk autentikasi probe bila memungkinkan.
+ - Jika SecretRef autentikasi yang diperlukan tidak terselesaikan di jalur perintah ini, `gateway status --json` melaporkan `rpc.authWarning` ketika konektivitas/autentikasi probe gagal; berikan `--token`/`--password` secara eksplisit atau selesaikan sumber secret terlebih dahulu.
+ - Jika probe berhasil, peringatan auth-ref yang tidak terselesaikan disembunyikan untuk menghindari false positive.
+ - Gunakan `--require-rpc` di skrip dan otomatisasi ketika layanan yang listening saja tidak cukup dan Anda juga perlu panggilan RPC cakupan baca dalam kondisi sehat.
+ - `--deep` menambahkan pemindaian best-effort untuk instalasi launchd/systemd/schtasks tambahan. Ketika beberapa layanan mirip Gateway terdeteksi, output manusia mencetak petunjuk pembersihan dan memperingatkan bahwa sebagian besar setup sebaiknya menjalankan satu Gateway per mesin.
+ - Output manusia menyertakan path log file yang terselesaikan plus snapshot path/validitas konfigurasi CLI-vs-layanan untuk membantu mendiagnosis drift profil atau state-dir.
-
- - Pada instalasi systemd Linux, pemeriksaan penyimpangan autentikasi layanan membaca nilai `Environment=` dan `EnvironmentFile=` dari unit (termasuk `%h`, jalur bertanda kutip, beberapa file, dan file opsional `-`).
- - Pemeriksaan penyimpangan menyelesaikan SecretRefs `gateway.auth.token` menggunakan env runtime gabungan (env perintah layanan terlebih dahulu, lalu fallback env proses).
- - Jika autentikasi token tidak aktif secara efektif (`gateway.auth.mode` eksplisit berupa `password`/`none`/`trusted-proxy`, atau mode tidak diatur ketika kata sandi dapat menang dan tidak ada kandidat token yang dapat menang), pemeriksaan token-drift melewati penyelesaian token konfigurasi.
+
+ - Pada instalasi Linux systemd, pemeriksaan drift autentikasi layanan membaca nilai `Environment=` dan `EnvironmentFile=` dari unit (termasuk `%h`, path yang dikutip, beberapa file, dan file opsional `-`).
+ - Pemeriksaan drift menyelesaikan SecretRefs `gateway.auth.token` menggunakan env runtime gabungan (env perintah layanan terlebih dahulu, lalu fallback env proses).
+ - Jika autentikasi token tidak aktif secara efektif (`gateway.auth.mode` eksplisit berupa `password`/`none`/`trusted-proxy`, atau mode tidak disetel ketika kata sandi dapat menang dan tidak ada kandidat token yang dapat menang), pemeriksaan token-drift melewati resolusi token konfigurasi.
### `gateway probe`
-`gateway probe` adalah perintah "debug semuanya". Perintah ini selalu memeriksa:
+`gateway probe` adalah perintah "debug semuanya". Perintah ini selalu mem-probe:
-- gateway remote yang Anda konfigurasi (jika diatur), dan
+- Gateway remote Anda yang dikonfigurasi (jika disetel), dan
- localhost (loopback) **meskipun remote dikonfigurasi**.
-Jika Anda meneruskan `--url`, target eksplisit tersebut ditambahkan di depan keduanya. Output manusia melabeli target sebagai:
+Jika Anda memberikan `--url`, target eksplisit itu ditambahkan di depan keduanya. Output manusia memberi label target sebagai:
-- `URL (explicit)`
-- `Remote (configured)` atau `Remote (configured, inactive)`
+- `URL (eksplisit)`
+- `Remote (dikonfigurasi)` atau `Remote (dikonfigurasi, tidak aktif)`
- `Local loopback`
-Jika beberapa gateway dapat dijangkau, perintah ini mencetak semuanya. Beberapa gateway didukung saat Anda menggunakan profil/port terisolasi (misalnya, bot penyelamat), tetapi sebagian besar instalasi tetap menjalankan satu gateway.
+Jika beberapa Gateway dapat dijangkau, perintah ini mencetak semuanya. Beberapa Gateway didukung ketika Anda menggunakan profil/port terisolasi (misalnya, bot penyelamat), tetapi sebagian besar instalasi tetap menjalankan satu Gateway.
```bash
@@ -338,50 +338,50 @@ openclaw gateway probe --json
- `Reachable: yes` berarti setidaknya satu target menerima koneksi WebSocket.
- - `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` melaporkan apa yang dapat dibuktikan pemeriksaan tentang autentikasi. Ini terpisah dari keterjangkauan.
+ - `Capability: read-only|write-capable|admin-capable|pairing-pending|connect-only` melaporkan apa yang dapat dibuktikan probe tentang autentikasi. Ini terpisah dari keterjangkauan.
- `Read probe: ok` berarti panggilan RPC detail cakupan baca (`health`/`status`/`system-presence`/`config.get`) juga berhasil.
- `Read probe: limited - missing scope: operator.read` berarti koneksi berhasil tetapi RPC cakupan baca terbatas. Ini dilaporkan sebagai keterjangkauan **terdegradasi**, bukan kegagalan penuh.
- - `Read probe: failed` setelah `Connect: ok` berarti Gateway menerima koneksi WebSocket, tetapi diagnostik baca lanjutan mengalami waktu habis atau gagal. Ini juga merupakan keterjangkauan **terdegradasi**, bukan Gateway yang tidak dapat dijangkau.
- - Seperti `gateway status`, pemeriksaan menggunakan ulang autentikasi perangkat yang sudah ada di cache tetapi tidak membuat identitas perangkat pertama kali atau status pairing.
- - Kode keluar bukan nol hanya saat tidak ada target yang diperiksa dapat dijangkau.
+ - `Read probe: failed` setelah `Connect: ok` berarti Gateway menerima koneksi WebSocket, tetapi diagnostik baca lanjutan timeout atau gagal. Ini juga merupakan keterjangkauan **terdegradasi**, bukan Gateway yang tidak dapat dijangkau.
+ - Seperti `gateway status`, probe menggunakan kembali autentikasi perangkat yang sudah di-cache tetapi tidak membuat identitas perangkat pertama kali atau status pairing.
+ - Kode keluar bernilai non-zero hanya ketika tidak ada target yang di-probe yang dapat dijangkau.
- Tingkat teratas:
+ Tingkat atas:
- `ok`: setidaknya satu target dapat dijangkau.
- `degraded`: setidaknya satu target menerima koneksi tetapi tidak menyelesaikan diagnostik RPC detail penuh.
- `capability`: kapabilitas terbaik yang terlihat di seluruh target yang dapat dijangkau (`read_only`, `write_capable`, `admin_capable`, `pairing_pending`, `connected_no_operator_scope`, atau `unknown`).
- - `primaryTargetId`: target terbaik untuk dianggap sebagai pemenang aktif dalam urutan ini: URL eksplisit, tunnel SSH, remote yang dikonfigurasi, lalu local loopback.
- - `warnings[]`: catatan peringatan upaya terbaik dengan `code`, `message`, dan `targetIds` opsional.
+ - `primaryTargetId`: target terbaik untuk diperlakukan sebagai pemenang aktif dalam urutan ini: URL eksplisit, tunnel SSH, remote yang dikonfigurasi, lalu local loopback.
+ - `warnings[]`: catatan peringatan best-effort dengan `code`, `message`, dan `targetIds` opsional.
- `network`: petunjuk URL local loopback/tailnet yang diturunkan dari konfigurasi saat ini dan jaringan host.
- - `discovery.timeoutMs` dan `discovery.count`: anggaran/jumlah hasil discovery aktual yang digunakan untuk lintasan pemeriksaan ini.
+ - `discovery.timeoutMs` dan `discovery.count`: anggaran discovery/jumlah hasil aktual yang digunakan untuk pass probe ini.
Per target (`targets[].connect`):
- - `ok`: keterjangkauan setelah klasifikasi connect + degraded.
+ - `ok`: keterjangkauan setelah connect + klasifikasi terdegradasi.
- `rpcOk`: keberhasilan RPC detail penuh.
- - `scopeLimited`: RPC detail gagal karena cakupan operator hilang.
+ - `scopeLimited`: RPC detail gagal karena cakupan operator tidak ada.
Per target (`targets[].auth`):
- - `role`: peran autentikasi yang dilaporkan di `hello-ok` saat tersedia.
- - `scopes`: cakupan yang diberikan dan dilaporkan di `hello-ok` saat tersedia.
+ - `role`: peran autentikasi yang dilaporkan dalam `hello-ok` bila tersedia.
+ - `scopes`: cakupan yang diberikan yang dilaporkan dalam `hello-ok` bila tersedia.
- `capability`: klasifikasi kapabilitas autentikasi yang ditampilkan untuk target tersebut.
- - `ssh_tunnel_failed`: penyiapan tunnel SSH gagal; perintah beralih kembali ke pemeriksaan langsung.
+ - `ssh_tunnel_failed`: setup tunnel SSH gagal; perintah fallback ke probe langsung.
- `multiple_gateways`: lebih dari satu target dapat dijangkau; ini tidak biasa kecuali Anda sengaja menjalankan profil terisolasi, seperti bot penyelamat.
- `auth_secretref_unresolved`: SecretRef autentikasi yang dikonfigurasi tidak dapat diselesaikan untuk target yang gagal.
- - `probe_scope_limited`: koneksi WebSocket berhasil, tetapi pemeriksaan baca dibatasi oleh `operator.read` yang hilang.
+ - `probe_scope_limited`: koneksi WebSocket berhasil, tetapi probe baca dibatasi oleh `operator.read` yang tidak ada.
#### Remote melalui SSH (paritas aplikasi Mac)
-Mode "Remote melalui SSH" aplikasi macOS menggunakan port-forward lokal sehingga gateway remote (yang mungkin hanya terikat ke loopback) dapat dijangkau di `ws://127.0.0.1:`.
+Mode "Remote over SSH" aplikasi macOS menggunakan port-forward lokal sehingga Gateway remote (yang mungkin hanya terikat ke loopback) dapat dijangkau di `ws://127.0.0.1:`.
Padanan CLI:
@@ -396,7 +396,7 @@ openclaw gateway probe --ssh user@gateway-host
File identitas.
- Pilih host gateway pertama yang ditemukan sebagai target SSH dari endpoint discovery yang terselesaikan (`local.` ditambah domain area luas yang dikonfigurasi, jika ada). Petunjuk khusus TXT diabaikan.
+ Pilih host Gateway pertama yang ditemukan sebagai target SSH dari endpoint discovery yang terselesaikan (`local.` plus domain wide-area yang dikonfigurasi, jika ada). Petunjuk khusus TXT diabaikan.
Konfigurasi (opsional, digunakan sebagai default):
@@ -426,10 +426,10 @@ openclaw gateway call logs.tail --params '{"sinceMs": 60000}'
Kata sandi Gateway.
- Anggaran waktu habis.
+ Anggaran timeout.
- Terutama untuk RPC bergaya agen yang mengalirkan peristiwa perantara sebelum payload final.
+ Terutama untuk RPC bergaya agent yang melakukan stream event antara sebelum payload final.
Output JSON yang dapat dibaca mesin.
@@ -451,7 +451,7 @@ openclaw gateway uninstall
### Instal dengan wrapper
-Gunakan `--wrapper` saat layanan terkelola harus dimulai melalui executable lain, misalnya shim manajer rahasia atau helper run-as. Wrapper menerima argumen Gateway normal dan bertanggung jawab untuk akhirnya mengeksekusi `openclaw` atau Node dengan argumen tersebut.
+Gunakan `--wrapper` ketika layanan terkelola harus dimulai melalui executable lain, misalnya shim pengelola secret atau helper run-as. Wrapper menerima argumen Gateway normal dan bertanggung jawab untuk pada akhirnya menjalankan exec `openclaw` atau Node dengan argumen tersebut.
```bash
cat > ~/.local/bin/openclaw-doppler <<'EOF'
@@ -465,7 +465,7 @@ openclaw gateway install --wrapper ~/.local/bin/openclaw-doppler --force
openclaw gateway restart
```
-Anda juga dapat mengatur wrapper melalui environment. `gateway install` memvalidasi bahwa jalur tersebut adalah file executable, menulis wrapper ke `ProgramArguments` layanan, dan mempertahankan `OPENCLAW_WRAPPER` di environment layanan untuk instalasi ulang paksa, pembaruan, dan perbaikan doctor berikutnya.
+Anda juga dapat menyetel wrapper melalui environment. `gateway install` memvalidasi bahwa path adalah file executable, menulis wrapper ke `ProgramArguments` layanan, dan mempertahankan `OPENCLAW_WRAPPER` di environment layanan untuk reinstall paksa, pembaruan, dan perbaikan doctor berikutnya.
```bash
OPENCLAW_WRAPPER="$HOME/.local/bin/openclaw-doppler" openclaw gateway install --force
@@ -483,23 +483,24 @@ openclaw gateway restart
- `gateway status`: `--url`, `--token`, `--password`, `--timeout`, `--no-probe`, `--require-rpc`, `--deep`, `--json`
- `gateway install`: `--port`, `--runtime `, `--token`, `--wrapper `, `--force`, `--json`
- - `gateway restart`: `--force`, `--wait `, `--json`
+ - `gateway restart`: `--safe`, `--force`, `--wait `, `--json`
- `gateway uninstall|start|stop`: `--json`
- Gunakan `gateway restart` untuk memulai ulang layanan terkelola. Jangan merangkai `gateway stop` dan `gateway start` sebagai pengganti restart; di macOS, `gateway stop` sengaja menonaktifkan LaunchAgent sebelum menghentikannya.
- - `gateway restart --wait 30s` mengganti anggaran drain restart yang dikonfigurasi untuk restart tersebut. Angka tanpa unit adalah milidetik; unit seperti `s`, `m`, dan `h` diterima. `--wait 0` menunggu tanpa batas.
- - `gateway restart --force` melewati drain pekerjaan aktif dan langsung memulai ulang. Gunakan ini saat operator sudah memeriksa pemblokir tugas yang tercantum dan menginginkan gateway kembali sekarang.
+ - `gateway restart --safe` meminta Gateway yang sedang berjalan untuk melakukan preflight pekerjaan OpenClaw aktif dan menunda restart sampai pengiriman balasan, run tertanam, dan run tugas selesai. `--safe` tidak dapat digabungkan dengan `--force` atau `--wait`.
+ - `gateway restart --wait 30s` mengesampingkan anggaran drain restart yang dikonfigurasi untuk restart tersebut. Angka tanpa satuan berarti milidetik; satuan seperti `s`, `m`, dan `h` diterima. `--wait 0` menunggu tanpa batas waktu.
+ - `gateway restart --force` melewati drain pekerjaan aktif dan langsung memulai ulang. Gunakan ini ketika operator sudah memeriksa blocker tugas yang terdaftar dan menginginkan Gateway kembali sekarang.
- Perintah siklus hidup menerima `--json` untuk scripting.
- - Saat autentikasi token memerlukan token dan `gateway.auth.token` dikelola SecretRef, `gateway install` memvalidasi bahwa SecretRef dapat diselesaikan tetapi tidak mempertahankan token yang terselesaikan ke metadata environment layanan.
- - Jika autentikasi token memerlukan token dan SecretRef token yang dikonfigurasi tidak terselesaikan, instalasi gagal tertutup alih-alih mempertahankan fallback plaintext.
- - Untuk autentikasi kata sandi pada `gateway run`, pilih `OPENCLAW_GATEWAY_PASSWORD`, `--password-file`, atau `gateway.auth.password` berbasis SecretRef daripada `--password` inline.
- - Dalam mode autentikasi tersimpul, `OPENCLAW_GATEWAY_PASSWORD` yang hanya ada di shell tidak melonggarkan persyaratan token instalasi; gunakan konfigurasi tahan lama (`gateway.auth.password` atau `env` konfigurasi) saat menginstal layanan terkelola.
- - Jika `gateway.auth.token` dan `gateway.auth.password` sama-sama dikonfigurasi dan `gateway.auth.mode` tidak diatur, instalasi diblokir sampai mode diatur secara eksplisit.
+ - Ketika autentikasi token memerlukan token dan `gateway.auth.token` dikelola SecretRef, `gateway install` memvalidasi bahwa SecretRef dapat di-resolve tetapi tidak menyimpan token yang sudah di-resolve ke metadata lingkungan layanan.
+ - Jika autentikasi token memerlukan token dan SecretRef token yang dikonfigurasi belum ter-resolve, instalasi gagal secara tertutup alih-alih menyimpan fallback teks biasa.
+ - Untuk autentikasi kata sandi pada `gateway run`, utamakan `OPENCLAW_GATEWAY_PASSWORD`, `--password-file`, atau `gateway.auth.password` berbasis SecretRef daripada `--password` inline.
+ - Dalam mode autentikasi yang disimpulkan, `OPENCLAW_GATEWAY_PASSWORD` khusus shell tidak melonggarkan persyaratan token instalasi; gunakan konfigurasi tahan lama (`gateway.auth.password` atau `env` konfigurasi) saat menginstal layanan terkelola.
+ - Jika `gateway.auth.token` dan `gateway.auth.password` sama-sama dikonfigurasi dan `gateway.auth.mode` belum ditetapkan, instalasi diblokir hingga mode ditetapkan secara eksplisit.
@@ -509,19 +510,19 @@ openclaw gateway restart
`gateway discover` memindai beacon Gateway (`_openclaw-gw._tcp`).
- DNS-SD multicast: `local.`
-- DNS-SD unicast (Bonjour area luas): pilih domain (contoh: `openclaw.internal.`) dan siapkan DNS split + server DNS; lihat [Bonjour](/id/gateway/bonjour).
+- DNS-SD unicast (Wide-Area Bonjour): pilih domain (contoh: `openclaw.internal.`) dan siapkan DNS terbagi + server DNS; lihat [Bonjour](/id/gateway/bonjour).
-Hanya Gateway dengan penemuan Bonjour yang diaktifkan (default) yang mengiklankan beacon.
+Hanya gateway dengan penemuan Bonjour yang diaktifkan (default) yang mengiklankan beacon.
-Rekaman penemuan area luas mencakup (TXT):
+Catatan penemuan Wide-Area mencakup (TXT):
-- `role` (petunjuk peran Gateway)
+- `role` (petunjuk peran gateway)
- `transport` (petunjuk transport, mis. `gateway`)
- `gatewayPort` (port WebSocket, biasanya `18789`)
-- `sshPort` (opsional; klien menetapkan target SSH default ke `22` saat tidak ada)
-- `tailnetDns` (nama host MagicDNS, bila tersedia)
+- `sshPort` (opsional; klien menggunakan target SSH default `22` saat ini tidak ada)
+- `tailnetDns` (nama host MagicDNS, jika tersedia)
- `gatewayTls` / `gatewayTlsSha256` (TLS diaktifkan + sidik jari sertifikat)
-- `cliPath` (petunjuk pemasangan jarak jauh yang ditulis ke zona area luas)
+- `cliPath` (petunjuk instalasi jarak jauh yang ditulis ke zona wide-area)
### `gateway discover`
@@ -530,10 +531,10 @@ openclaw gateway discover
```
- Batas waktu perintah (browse/resolve).
+ Timeout per perintah (browse/resolve).
- Keluaran yang dapat dibaca mesin (juga menonaktifkan styling/spinner).
+ Output yang dapat dibaca mesin (juga menonaktifkan styling/spinner).
Contoh:
@@ -544,9 +545,9 @@ openclaw gateway discover --json | jq '.beacons[].wsUrl'
```
-- CLI memindai `local.` ditambah domain area luas yang dikonfigurasi saat salah satunya diaktifkan.
-- `wsUrl` dalam keluaran JSON diturunkan dari endpoint layanan yang berhasil di-resolve, bukan dari petunjuk khusus TXT seperti `lanHost` atau `tailnetDns`.
-- Pada mDNS `local.`, `sshPort` dan `cliPath` hanya disiarkan saat `discovery.mdns.mode` adalah `full`. DNS-SD area luas tetap menulis `cliPath`; `sshPort` juga tetap opsional di sana.
+- CLI memindai `local.` ditambah domain wide-area yang dikonfigurasi saat ada yang diaktifkan.
+- `wsUrl` dalam output JSON diturunkan dari endpoint layanan yang di-resolve, bukan dari petunjuk khusus TXT seperti `lanHost` atau `tailnetDns`.
+- Pada mDNS `local.`, `sshPort` dan `cliPath` hanya disiarkan saat `discovery.mdns.mode` adalah `full`. DNS-SD Wide-area tetap menulis `cliPath`; `sshPort` juga tetap opsional di sana.
diff --git a/docs/id/cli/plugins.md b/docs/id/cli/plugins.md
index 2eabe510c..763f850d0 100644
--- a/docs/id/cli/plugins.md
+++ b/docs/id/cli/plugins.md
@@ -1,36 +1,36 @@
---
read_when:
- - Anda ingin memasang atau mengelola Plugin Gateway atau bundel yang kompatibel
+ - Anda ingin menginstal atau mengelola Plugin Gateway atau bundel yang kompatibel
- Anda ingin men-debug kegagalan pemuatan Plugin
sidebarTitle: Plugins
-summary: Referensi CLI untuk `openclaw plugins` (daftar, instal, marketplace, hapus instalasi, aktifkan/nonaktifkan, doctor)
+summary: Referensi CLI untuk `openclaw plugins` (list, install, marketplace, uninstall, enable/disable, doctor)
title: Plugin
x-i18n:
- generated_at: "2026-05-04T09:33:28Z"
+ generated_at: "2026-05-05T01:44:23Z"
model: gpt-5.5
provider: openai
- source_hash: f561ce098181b07f25db3520b1726162863469ac05fb4a3e786915257d97c9a4
+ source_hash: 24d274f33213231eaed48ac848a9266802a2179ba0311ab18462ad783219095a
source_path: cli/plugins.md
workflow: 16
---
-Kelola Plugin Gateway, paket hook, dan bundle yang kompatibel.
+Kelola Plugin Gateway, paket hook, dan bundel yang kompatibel.
- Panduan pengguna akhir untuk menginstal, mengaktifkan, dan memecahkan masalah Plugin.
+ Panduan pengguna akhir untuk memasang, mengaktifkan, dan memecahkan masalah plugin.
-
- Contoh cepat untuk install, list, update, uninstall, dan penerbitan.
+
+ Contoh cepat untuk memasang, mencantumkan, memperbarui, menghapus pemasangan, dan menerbitkan.
-
- Model kompatibilitas bundle.
+
+ Model kompatibilitas bundel.
- Bidang manifest dan skema konfigurasi.
+ Bidang manifest dan skema config.
- Penguatan keamanan untuk instalasi Plugin.
+ Pengerasan keamanan untuk pemasangan plugin.
@@ -62,19 +62,19 @@ openclaw plugins marketplace list
openclaw plugins marketplace list --json
```
-Untuk investigasi instalasi, inspeksi, uninstall, atau penyegaran registri yang lambat, jalankan
-perintah dengan `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1`. Trace menulis waktu fase
-ke stderr dan menjaga keluaran JSON tetap dapat diurai. Lihat [Debugging](/id/help/debugging#plugin-lifecycle-trace).
+Untuk investigasi pemasangan, inspeksi, penghapusan pemasangan, atau penyegaran registry yang lambat, jalankan
+perintah dengan `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1`. Trace menulis timing fase
+ke stderr dan menjaga output JSON tetap dapat di-parse. Lihat [Debugging](/id/help/debugging#plugin-lifecycle-trace).
-Plugin bawaan dikirim bersama OpenClaw. Beberapa diaktifkan secara default (misalnya penyedia model bawaan, penyedia ucapan bawaan, dan Plugin browser bawaan); yang lain memerlukan `plugins enable`.
+Plugin bawaan dikirim bersama OpenClaw. Sebagian diaktifkan secara default (misalnya penyedia model bawaan, penyedia speech bawaan, dan plugin browser bawaan); yang lain memerlukan `plugins enable`.
-Plugin OpenClaw native harus mengirim `openclaw.plugin.json` dengan JSON Schema inline (`configSchema`, meskipun kosong). Bundle kompatibel menggunakan manifest bundle mereka sendiri sebagai gantinya.
+Plugin OpenClaw native harus menyertakan `openclaw.plugin.json` dengan JSON Schema inline (`configSchema`, meskipun kosong). Bundel yang kompatibel menggunakan manifest bundelnya sendiri.
-`plugins list` menampilkan `Format: openclaw` atau `Format: bundle`. Keluaran list/info verbose juga menampilkan subtipe bundle (`codex`, `claude`, atau `cursor`) beserta kemampuan bundle yang terdeteksi.
+`plugins list` menampilkan `Format: openclaw` atau `Format: bundle`. Output list/info verbose juga menampilkan subtipe bundel (`codex`, `claude`, atau `cursor`) plus kapabilitas bundel yang terdeteksi.
-### Install
+### Pasang
```bash
openclaw plugins search "calendar" # search ClawHub plugins
@@ -93,83 +93,83 @@ openclaw plugins install --marketplace https://github.com//
-Nama paket polos diinstal dari npm secara default selama peralihan peluncuran. Gunakan `clawhub:` untuk ClawHub. Perlakukan instalasi Plugin seperti menjalankan kode. Utamakan versi yang dipin.
+Nama paket bare dipasang dari npm secara default selama cutover peluncuran. Gunakan `clawhub:` untuk ClawHub. Perlakukan pemasangan plugin seperti menjalankan kode. Utamakan versi yang di-pin.
-`plugins search` mengueri ClawHub untuk paket Plugin yang dapat diinstal dan mencetak
-nama paket yang siap diinstal. Ini mencari paket code-plugin dan bundle-plugin,
+`plugins search` mengkueri ClawHub untuk paket plugin yang dapat dipasang dan mencetak
+nama paket yang siap dipasang. Perintah ini mencari paket code-plugin dan bundle-plugin,
bukan Skills. Gunakan `openclaw skills search` untuk Skills ClawHub.
-ClawHub adalah permukaan distribusi dan penemuan utama untuk sebagian besar Plugin. Npm
-tetap menjadi fallback dan jalur instalasi langsung yang didukung. Paket Plugin milik OpenClaw
-`@openclaw/*` diterbitkan kembali di npm; lihat daftar saat ini
+ClawHub adalah permukaan distribusi dan discovery utama untuk sebagian besar plugin. Npm
+tetap menjadi fallback dan jalur pemasangan langsung yang didukung. Paket plugin
+`@openclaw/*` milik OpenClaw diterbitkan di npm lagi; lihat daftar saat ini
di [npmjs.com/org/openclaw](https://www.npmjs.com/org/openclaw) atau
-[inventaris Plugin](/id/plugins/plugin-inventory). Instalasi stabil menggunakan `latest`.
-Instalasi dan pembaruan kanal beta mengutamakan dist-tag npm `beta` ketika tag tersebut
+[inventaris plugin](/id/plugins/plugin-inventory). Pemasangan stabil menggunakan `latest`.
+Pemasangan dan pembaruan kanal beta mengutamakan dist-tag npm `beta` saat tag tersebut
tersedia, lalu fallback ke `latest`.
-
- Jika bagian `plugins` Anda didukung oleh `$include` satu file, `plugins install/update/enable/disable/uninstall` menulis melalui file yang disertakan tersebut dan membiarkan `openclaw.json` tidak berubah. Include root, array include, dan include dengan override saudara gagal secara tertutup alih-alih diratakan. Lihat [Include konfigurasi](/id/gateway/configuration) untuk bentuk yang didukung.
+
+ Jika bagian `plugins` Anda didukung oleh `$include` satu file, `plugins install/update/enable/disable/uninstall` menulis melalui file yang disertakan itu dan membiarkan `openclaw.json` tidak tersentuh. Include root, array include, dan include dengan override sibling gagal tertutup alih-alih diratakan. Lihat [Config includes](/id/gateway/configuration) untuk bentuk yang didukung.
- Jika konfigurasi tidak valid saat instalasi, `plugins install` biasanya gagal secara tertutup dan meminta Anda menjalankan `openclaw doctor --fix` terlebih dahulu. Selama startup Gateway dan hot reload, konfigurasi Plugin yang tidak valid gagal secara tertutup seperti konfigurasi tidak valid lainnya; `openclaw doctor --fix` dapat mengarantina entri Plugin yang tidak valid. Satu-satunya pengecualian waktu instalasi yang terdokumentasi adalah jalur pemulihan sempit untuk Plugin bawaan bagi Plugin yang secara eksplisit memilih ikut ke `openclaw.install.allowInvalidConfigRecovery`.
+ Jika config tidak valid selama pemasangan, `plugins install` biasanya gagal tertutup dan meminta Anda menjalankan `openclaw doctor --fix` terlebih dahulu. Selama startup Gateway dan hot reload, config plugin yang tidak valid gagal tertutup seperti config tidak valid lainnya; `openclaw doctor --fix` dapat mengkarantina entri plugin yang tidak valid. Satu-satunya pengecualian waktu pemasangan yang terdokumentasi adalah jalur pemulihan plugin bawaan yang sempit untuk plugin yang secara eksplisit ikut serta dalam `openclaw.install.allowInvalidConfigRecovery`.
-
- `--force` menggunakan kembali target instalasi yang ada dan menimpa Plugin atau paket hook yang sudah terinstal di tempat. Gunakan ketika Anda sengaja menginstal ulang id yang sama dari jalur lokal, arsip, paket ClawHub, atau artefak npm baru. Untuk peningkatan rutin Plugin npm yang sudah dilacak, utamakan `openclaw plugins update `.
+
+ `--force` menggunakan kembali target pemasangan yang ada dan menimpa plugin atau paket hook yang sudah terpasang di tempatnya. Gunakan ini saat Anda sengaja memasang ulang id yang sama dari jalur lokal, arsip, paket ClawHub, atau artefak npm baru. Untuk upgrade rutin plugin npm yang sudah dilacak, utamakan `openclaw plugins update `.
- Jika Anda menjalankan `plugins install` untuk id Plugin yang sudah terinstal, OpenClaw berhenti dan mengarahkan Anda ke `plugins update ` untuk peningkatan normal, atau ke `plugins install --force` ketika Anda benar-benar ingin menimpa instalasi saat ini dari sumber lain.
+ Jika Anda menjalankan `plugins install` untuk id plugin yang sudah terpasang, OpenClaw berhenti dan mengarahkan Anda ke `plugins update ` untuk upgrade normal, atau ke `plugins install --force` saat Anda benar-benar ingin menimpa pemasangan saat ini dari sumber lain.
-
- `--pin` hanya berlaku untuk instalasi npm. Ini tidak didukung dengan instalasi `git:`; gunakan ref git eksplisit seperti `git:github.com/acme/plugin@v1.2.3` ketika Anda menginginkan sumber yang dipin. Ini tidak didukung dengan `--marketplace`, karena instalasi marketplace mempertahankan metadata sumber marketplace alih-alih spesifikasi npm.
+
+ `--pin` hanya berlaku untuk pemasangan npm. Ini tidak didukung dengan pemasangan `git:`; gunakan ref git eksplisit seperti `git:github.com/acme/plugin@v1.2.3` saat Anda menginginkan sumber yang di-pin. Ini tidak didukung dengan `--marketplace`, karena pemasangan marketplace mempertahankan metadata sumber marketplace alih-alih spec npm.
- `--dangerously-force-unsafe-install` adalah opsi darurat untuk false positive dalam pemindai kode berbahaya bawaan. Ini memungkinkan instalasi berlanjut bahkan ketika pemindai bawaan melaporkan temuan `critical`, tetapi **tidak** melewati blok kebijakan hook `before_install` Plugin dan **tidak** melewati kegagalan pemindaian.
+ `--dangerously-force-unsafe-install` adalah opsi darurat untuk false positive di pemindai kode berbahaya bawaan. Opsi ini mengizinkan pemasangan berlanjut bahkan saat pemindai bawaan melaporkan temuan `critical`, tetapi **tidak** melewati blok kebijakan hook `before_install` plugin dan **tidak** melewati kegagalan pemindaian.
- Flag CLI ini berlaku untuk alur install/update Plugin. Instalasi dependensi skill yang didukung Gateway menggunakan override permintaan `dangerouslyForceUnsafeInstall` yang sesuai, sementara `openclaw skills install` tetap merupakan alur unduh/install skill ClawHub yang terpisah.
+ Flag CLI ini berlaku untuk alur pemasangan/pembaruan plugin. Pemasangan dependensi skill yang didukung Gateway menggunakan override request `dangerouslyForceUnsafeInstall` yang sepadan, sedangkan `openclaw skills install` tetap menjadi alur unduh/pasang skill ClawHub yang terpisah.
- Jika Plugin yang Anda terbitkan di ClawHub diblokir oleh pemindaian registri, gunakan langkah penerbit di [ClawHub](/id/tools/clawhub).
+ Jika plugin yang Anda terbitkan di ClawHub diblokir oleh pemindaian registry, gunakan langkah penerbit di [ClawHub](/id/tools/clawhub).
-
- `plugins install` juga merupakan permukaan instalasi untuk paket hook yang mengekspos `openclaw.hooks` di `package.json`. Gunakan `openclaw hooks` untuk visibilitas hook terfilter dan pengaktifan per hook, bukan instalasi paket.
+
+ `plugins install` juga merupakan permukaan pemasangan untuk paket hook yang mengekspos `openclaw.hooks` di `package.json`. Gunakan `openclaw hooks` untuk visibilitas hook terfilter dan pengaktifan per hook, bukan pemasangan paket.
- Spesifikasi npm **hanya registri** (nama paket + **versi persis** opsional atau **dist-tag**). Spesifikasi Git/URL/file dan rentang semver ditolak. Instalasi dependensi berjalan secara lokal proyek dengan `--ignore-scripts` demi keamanan, meskipun shell Anda memiliki pengaturan install npm global.
+ Spec npm bersifat **hanya registry** (nama paket + **versi persis** opsional atau **dist-tag**). Spec Git/URL/file dan rentang semver ditolak. Pemasangan dependensi berjalan project-local dengan `--ignore-scripts` demi keamanan, bahkan saat shell Anda memiliki pengaturan pemasangan npm global.
- Gunakan `npm:` ketika Anda ingin membuat resolusi npm eksplisit. Spesifikasi paket polos juga diinstal langsung dari npm selama peralihan peluncuran.
+ Gunakan `npm:` saat Anda ingin membuat resolusi npm eksplisit. Spec paket bare juga dipasang langsung dari npm selama cutover peluncuran.
- Spesifikasi polos dan `@latest` tetap berada di jalur stabil. Versi koreksi bertanggal OpenClaw seperti `2026.5.3-1` adalah rilis stabil untuk pemeriksaan ini. Jika npm menyelesaikan salah satunya ke prerelease, OpenClaw berhenti dan meminta Anda memilih ikut secara eksplisit dengan tag prerelease seperti `@beta`/`@rc` atau versi prerelease persis seperti `@1.2.3-beta.4`.
+ Spec bare dan `@latest` tetap berada di track stabil. Versi koreksi bertanggal OpenClaw seperti `2026.5.3-1` adalah rilis stabil untuk pemeriksaan ini. Jika npm me-resolve salah satunya ke prerelease, OpenClaw berhenti dan meminta Anda ikut serta secara eksplisit dengan tag prerelease seperti `@beta`/`@rc` atau versi prerelease persis seperti `@1.2.3-beta.4`.
- Jika spesifikasi install polos cocok dengan id Plugin resmi (misalnya `diffs`), OpenClaw menginstal entri katalog secara langsung. Untuk menginstal paket npm dengan nama yang sama, gunakan spesifikasi scoped eksplisit (misalnya `@scope/diffs`).
+ Jika spec pemasangan bare cocok dengan id plugin resmi (misalnya `diffs`), OpenClaw memasang entri katalog secara langsung. Untuk memasang paket npm dengan nama yang sama, gunakan spec scoped eksplisit (misalnya `@scope/diffs`).
-
- Gunakan `git:` untuk menginstal langsung dari repositori git. Bentuk yang didukung mencakup `git:github.com/owner/repo`, `git:owner/repo`, URL clone penuh `https://`, `ssh://`, `git://`, `file://`, dan `git@host:owner/repo.git`. Tambahkan `@` atau `#` untuk check out branch, tag, atau commit sebelum instalasi.
+
+ Gunakan `git:` untuk memasang langsung dari repositori git. Bentuk yang didukung mencakup `git:github.com/owner/repo`, `git:owner/repo`, URL clone lengkap `https://`, `ssh://`, `git://`, `file://`, dan `git@host:owner/repo.git`. Tambahkan `@` atau `#` untuk melakukan checkout branch, tag, atau commit sebelum pemasangan.
- Instalasi Git meng-clone ke direktori sementara, check out ref yang diminta jika ada, lalu menggunakan installer direktori Plugin normal. Itu berarti validasi manifest, pemindaian kode berbahaya, pekerjaan install package-manager, dan catatan instalasi berperilaku seperti instalasi npm. Instalasi git yang tercatat mencakup URL/ref sumber plus commit yang di-resolve sehingga `openclaw plugins update` dapat me-resolve ulang sumber nanti.
+ Pemasangan git melakukan clone ke direktori sementara, melakukan checkout ref yang diminta jika ada, lalu menggunakan installer direktori plugin normal. Itu berarti validasi manifest, pemindaian kode berbahaya, pekerjaan pemasangan package-manager, dan record pemasangan berperilaku seperti pemasangan npm. Pemasangan git yang direkam mencakup URL/ref sumber plus commit yang di-resolve agar `openclaw plugins update` dapat me-resolve ulang sumber nanti.
- Setelah menginstal dari git, gunakan `openclaw plugins inspect --runtime --json` untuk memverifikasi registrasi runtime seperti metode Gateway dan perintah CLI. Jika Plugin mendaftarkan root CLI dengan `api.registerCli`, jalankan perintah itu langsung melalui CLI root OpenClaw, misalnya `openclaw demo-plugin ping`.
+ Setelah memasang dari git, gunakan `openclaw plugins inspect --runtime --json` untuk memverifikasi registrasi runtime seperti metode gateway dan perintah CLI. Jika plugin mendaftarkan root CLI dengan `api.registerCli`, jalankan perintah itu langsung melalui root CLI OpenClaw, misalnya `openclaw demo-plugin ping`.
-
- Arsip yang didukung: `.zip`, `.tgz`, `.tar.gz`, `.tar`. Arsip Plugin OpenClaw native harus berisi `openclaw.plugin.json` yang valid di root Plugin yang diekstrak; arsip yang hanya berisi `package.json` ditolak sebelum OpenClaw menulis catatan instalasi.
+
+ Arsip yang didukung: `.zip`, `.tgz`, `.tar.gz`, `.tar`. Arsip plugin OpenClaw native harus berisi `openclaw.plugin.json` yang valid di root plugin yang diekstrak; arsip yang hanya berisi `package.json` ditolak sebelum OpenClaw menulis record pemasangan.
- Instalasi marketplace Claude juga didukung.
+ Pemasangan marketplace Claude juga didukung.
-Instalasi ClawHub menggunakan locator eksplisit `clawhub:`:
+Pemasangan ClawHub menggunakan locator `clawhub:` eksplisit:
```bash
openclaw plugins install clawhub:openclaw-codex-app-server
openclaw plugins install clawhub:openclaw-codex-app-server@1.2.3
```
-Spesifikasi Plugin aman npm polos diinstal dari npm secara default selama peralihan peluncuran:
+Spec plugin yang aman untuk npm secara bare dipasang dari npm secara default selama cutover peluncuran:
```bash
openclaw plugins install openclaw-codex-app-server
@@ -182,19 +182,19 @@ openclaw plugins install npm:openclaw-codex-app-server
openclaw plugins install npm:@scope/plugin-name@1.0.1
```
-OpenClaw memeriksa API Plugin yang diiklankan / kompatibilitas Gateway minimum sebelum instalasi. Ketika versi ClawHub yang dipilih menerbitkan artefak ClawPack, OpenClaw mengunduh `.tgz` npm-pack berversi, memverifikasi header digest ClawHub dan digest artefak, lalu menginstalnya melalui jalur arsip normal. Versi ClawHub lama tanpa metadata ClawPack tetap diinstal melalui jalur verifikasi arsip paket legacy. Instalasi yang tercatat mempertahankan metadata sumber ClawHub, jenis artefak, integritas npm, shasum npm, nama tarball, dan fakta digest ClawPack untuk pembaruan berikutnya.
-Instalasi ClawHub tanpa versi mempertahankan spesifikasi tercatat tanpa versi sehingga `openclaw plugins update` dapat mengikuti rilis ClawHub yang lebih baru; pemilih versi atau tag eksplisit seperti `clawhub:pkg@1.2.3` dan `clawhub:pkg@beta` tetap dipin ke pemilih tersebut.
+OpenClaw memeriksa kompatibilitas plugin API / minimum gateway yang diiklankan sebelum pemasangan. Saat versi ClawHub yang dipilih menerbitkan artefak ClawPack, OpenClaw mengunduh `.tgz` npm-pack berversi, memverifikasi header digest ClawHub dan digest artefak, lalu memasangnya melalui jalur arsip normal. Versi ClawHub lama tanpa metadata ClawPack tetap dipasang melalui jalur verifikasi arsip paket legacy. Pemasangan yang direkam menyimpan metadata sumber ClawHub, jenis artefak, integritas npm, shasum npm, nama tarball, dan fakta digest ClawPack untuk pembaruan nanti.
+Pemasangan ClawHub tanpa versi menyimpan spec terekam tanpa versi agar `openclaw plugins update` dapat mengikuti rilis ClawHub yang lebih baru; selector versi atau tag eksplisit seperti `clawhub:pkg@1.2.3` dan `clawhub:pkg@beta` tetap di-pin ke selector tersebut.
-#### Singkatan marketplace
+#### Shorthand marketplace
-Gunakan singkatan `plugin@marketplace` ketika nama marketplace ada di cache registri lokal Claude di `~/.claude/plugins/known_marketplaces.json`:
+Gunakan shorthand `plugin@marketplace` saat nama marketplace ada di cache registry lokal Claude di `~/.claude/plugins/known_marketplaces.json`:
```bash
openclaw plugins marketplace list
openclaw plugins install @
```
-Gunakan `--marketplace` ketika Anda ingin meneruskan sumber marketplace secara eksplisit:
+Gunakan `--marketplace` saat Anda ingin meneruskan sumber marketplace secara eksplisit:
```bash
openclaw plugins install --marketplace
@@ -205,27 +205,27 @@ openclaw plugins install --marketplace ./my-marketplace
- - nama marketplace Claude yang diketahui dari `~/.claude/plugins/known_marketplaces.json`
- - root marketplace lokal atau jalur `marketplace.json`
+ - nama marketplace Claude yang dikenal dari `~/.claude/plugins/known_marketplaces.json`
+ - root marketplace lokal atau path `marketplace.json`
- singkatan repo GitHub seperti `owner/repo`
- URL repo GitHub seperti `https://github.com/owner/repo`
- URL git
- Untuk marketplace jarak jauh yang dimuat dari GitHub atau git, entri plugin harus tetap berada di dalam repo marketplace hasil kloning. OpenClaw menerima sumber jalur relatif dari repo tersebut dan menolak sumber plugin HTTP(S), jalur absolut, git, GitHub, dan sumber plugin non-jalur lainnya dari manifes jarak jauh.
+ Untuk marketplace jarak jauh yang dimuat dari GitHub atau git, entri plugin harus tetap berada di dalam repo marketplace yang dikloning. OpenClaw menerima sumber path relatif dari repo tersebut dan menolak sumber plugin HTTP(S), path absolut, git, GitHub, dan sumber plugin non-path lain dari manifes jarak jauh.
-Untuk jalur lokal dan arsip, OpenClaw mendeteksi otomatis:
+Untuk path dan arsip lokal, OpenClaw mendeteksi otomatis:
-- Plugin OpenClaw native (`openclaw.plugin.json`)
-- bundel yang kompatibel dengan Codex (`.codex-plugin/plugin.json`)
-- bundel yang kompatibel dengan Claude (`.claude-plugin/plugin.json` atau tata letak komponen Claude default)
-- bundel yang kompatibel dengan Cursor (`.cursor-plugin/plugin.json`)
+- plugin OpenClaw native (`openclaw.plugin.json`)
+- bundle yang kompatibel dengan Codex (`.codex-plugin/plugin.json`)
+- bundle yang kompatibel dengan Claude (`.claude-plugin/plugin.json` atau tata letak komponen Claude default)
+- bundle yang kompatibel dengan Cursor (`.cursor-plugin/plugin.json`)
-Bundel yang kompatibel dipasang ke root plugin normal dan ikut serta dalam alur daftar/info/aktifkan/nonaktifkan yang sama. Saat ini, Skills bundel, command-skills Claude, default `settings.json` Claude, default `.lsp.json` Claude / `lspServers` yang dideklarasikan manifes, command-skills Cursor, dan direktori hook Codex yang kompatibel didukung; kapabilitas bundel terdeteksi lainnya ditampilkan dalam diagnostik/info tetapi belum dihubungkan ke eksekusi runtime.
+Bundle yang kompatibel diinstal ke root plugin normal dan ikut dalam alur list/info/enable/disable yang sama. Saat ini, bundle skills, command-skills Claude, default `settings.json` Claude, default `.lsp.json` Claude / `lspServers` yang dideklarasikan manifes, command-skills Cursor, dan direktori hook Codex yang kompatibel didukung; kapabilitas bundle lain yang terdeteksi ditampilkan dalam diagnostik/info tetapi belum tersambung ke eksekusi runtime.
### Daftar
@@ -247,27 +247,34 @@ openclaw plugins search --json
Beralih dari tampilan tabel ke baris detail per plugin dengan metadata sumber/asal/versi/aktivasi.
- Inventaris yang dapat dibaca mesin plus diagnostik registri dan status pemasangan dependensi paket.
+ Inventaris yang dapat dibaca mesin plus diagnostik registry dan status instalasi dependensi paket.
-`plugins list` membaca registri plugin lokal yang tersimpan terlebih dahulu, dengan fallback turunan berbasis manifes saja saat registri hilang atau tidak valid. Ini berguna untuk memeriksa apakah plugin terpasang, diaktifkan, dan terlihat oleh perencanaan startup dingin, tetapi ini bukan probe runtime langsung terhadap proses Gateway yang sudah berjalan. Setelah mengubah kode plugin, status aktif, kebijakan hook, atau `plugins.load.paths`, mulai ulang Gateway yang melayani channel sebelum mengharapkan kode `register(api)` atau hook baru berjalan. Untuk deployment jarak jauh/container, pastikan Anda memulai ulang child `openclaw gateway run` yang sebenarnya, bukan hanya proses wrapper.
+`plugins list` membaca registry plugin lokal yang dipersist terlebih dahulu, dengan fallback turunan khusus manifes ketika registry hilang atau tidak valid. Ini berguna untuk memeriksa apakah plugin terinstal, diaktifkan, dan terlihat oleh perencanaan startup dingin, tetapi ini bukan probe runtime langsung dari proses Gateway yang sudah berjalan. Setelah mengubah kode plugin, enablement, kebijakan hook, atau `plugins.load.paths`, mulai ulang Gateway yang melayani channel sebelum mengharapkan kode `register(api)` atau hook baru berjalan. Untuk deployment jarak jauh/container, pastikan Anda memulai ulang child `openclaw gateway run` yang sebenarnya, bukan hanya proses wrapper.
`plugins list --json` menyertakan `dependencyStatus` setiap plugin dari `package.json`
`dependencies` dan `optionalDependencies`. OpenClaw memeriksa apakah nama paket tersebut
-ada di sepanjang jalur pencarian Node `node_modules` normal milik plugin; ini
+ada di sepanjang path lookup `node_modules` Node normal milik plugin; ia
tidak mengimpor kode runtime plugin, menjalankan package manager, atau memperbaiki
dependensi yang hilang.
-`plugins search` adalah pencarian katalog ClawHub jarak jauh. Ini tidak memeriksa state lokal, mengubah config, memasang paket, atau memuat kode runtime plugin. Hasil pencarian menyertakan nama paket ClawHub, family, channel, versi, ringkasan, dan petunjuk pemasangan seperti `openclaw plugins install clawhub:`.
+`plugins search` adalah lookup katalog ClawHub jarak jauh. Ini tidak memeriksa status
+lokal, mengubah konfigurasi, menginstal paket, atau memuat kode runtime plugin. Hasil
+pencarian menyertakan nama paket ClawHub, family, channel, versi, ringkasan, dan
+petunjuk instalasi seperti `openclaw plugins install clawhub:`.
-Untuk pekerjaan plugin bawaan di dalam image Docker terpaket, bind-mount direktori sumber plugin di atas jalur sumber terpaket yang cocok, seperti `/app/extensions/synology-chat`. OpenClaw akan menemukan overlay sumber ter-mount tersebut sebelum `/app/dist/extensions/synology-chat`; direktori sumber yang sekadar disalin tetap inert sehingga pemasangan terpaket normal masih menggunakan dist terkompilasi.
+Untuk pekerjaan plugin bawaan di dalam image Docker terpaket, bind-mount direktori
+sumber plugin di atas path sumber terpaket yang cocok, seperti
+`/app/extensions/synology-chat`. OpenClaw akan menemukan overlay sumber yang di-mount
+tersebut sebelum `/app/dist/extensions/synology-chat`; direktori sumber yang hanya disalin
+tetap inert sehingga instalasi terpaket normal tetap memakai dist yang sudah dikompilasi.
Untuk debugging hook runtime:
-- `openclaw plugins inspect --runtime --json` menampilkan hook terdaftar dan diagnostik dari pass inspeksi yang memuat modul. Inspeksi runtime tidak pernah memasang dependensi; gunakan `openclaw doctor --fix` untuk membersihkan state dependensi legacy atau memasang plugin unduhan terkonfigurasi yang hilang.
-- `openclaw gateway status --deep --require-rpc` mengonfirmasi Gateway yang dapat dijangkau, petunjuk service/proses, jalur config, dan kesehatan RPC.
+- `openclaw plugins inspect --runtime --json` menampilkan hook terdaftar dan diagnostik dari pass inspeksi yang memuat modul. Inspeksi runtime tidak pernah menginstal dependensi; gunakan `openclaw doctor --fix` untuk membersihkan status dependensi lama atau memulihkan plugin unduhan yang hilang dan dirujuk oleh konfigurasi.
+- `openclaw gateway status --deep --require-rpc` mengonfirmasi Gateway yang dapat dijangkau, petunjuk layanan/proses, path konfigurasi, dan kesehatan RPC.
- Hook percakapan non-bawaan (`llm_input`, `llm_output`, `before_agent_finalize`, `agent_end`) memerlukan `plugins.entries..hooks.allowConversationAccess=true`.
Gunakan `--link` untuk menghindari penyalinan direktori lokal (menambahkan ke `plugins.load.paths`):
@@ -277,16 +284,16 @@ openclaw plugins install -l ./my-plugin
```
-`--force` tidak didukung dengan `--link` karena pemasangan tertaut menggunakan ulang jalur sumber alih-alih menyalin ke atas target pemasangan terkelola.
+`--force` tidak didukung dengan `--link` karena instalasi tertaut menggunakan ulang path sumber alih-alih menyalin ke target instalasi terkelola.
-Gunakan `--pin` pada pemasangan npm untuk menyimpan spec persis yang diselesaikan (`name@version`) di indeks plugin terkelola sambil mempertahankan perilaku default tidak dipin.
+Gunakan `--pin` pada instalasi npm untuk menyimpan spec tepat yang diselesaikan (`name@version`) di indeks plugin terkelola sambil mempertahankan perilaku default tanpa pin.
-### Indeks Plugin
+### Indeks plugin
-Metadata pemasangan plugin adalah state yang dikelola mesin, bukan config pengguna. Pemasangan dan pembaruan menuliskannya ke `plugins/installs.json` di bawah direktori state OpenClaw aktif. Map `installRecords` tingkat atasnya adalah sumber tahan lama untuk metadata pemasangan, termasuk record untuk manifes plugin yang rusak atau hilang. Array `plugins` adalah cache registri dingin yang diturunkan dari manifes. File ini menyertakan peringatan jangan diedit dan digunakan oleh `openclaw plugins update`, uninstall, diagnostik, dan registri plugin dingin.
+Metadata instalasi plugin adalah status yang dikelola mesin, bukan konfigurasi pengguna. Instalasi dan pembaruan menulisnya ke `plugins/installs.json` di bawah direktori status OpenClaw aktif. Map `installRecords` tingkat atasnya adalah sumber metadata instalasi yang tahan lama, termasuk record untuk manifes plugin yang rusak atau hilang. Array `plugins` adalah cache registry dingin turunan manifes. File ini menyertakan peringatan jangan diedit dan digunakan oleh `openclaw plugins update`, uninstall, diagnostik, dan registry plugin dingin.
-Saat OpenClaw melihat record `plugins.installs` legacy terkirim dalam config, OpenClaw memindahkannya ke indeks plugin dan menghapus key config; jika salah satu penulisan gagal, record config dipertahankan agar metadata pemasangan tidak hilang.
+Ketika OpenClaw melihat record `plugins.installs` lama yang dikirim dalam konfigurasi, ia memindahkannya ke indeks plugin dan menghapus key konfigurasi; jika salah satu penulisan gagal, record konfigurasi dipertahankan agar metadata instalasi tidak hilang.
### Uninstall
@@ -296,7 +303,7 @@ openclaw plugins uninstall --dry-run
openclaw plugins uninstall --keep-files
```
-`uninstall` menghapus record plugin dari `plugins.entries`, indeks plugin tersimpan, entri daftar allow/deny plugin, dan entri `plugins.load.paths` tertaut saat berlaku. Kecuali `--keep-files` ditetapkan, uninstall juga menghapus direktori pemasangan terkelola terlacak saat berada di dalam root ekstensi plugin OpenClaw. Untuk plugin memori aktif, slot memori direset ke `memory-core`.
+`uninstall` menghapus record plugin dari `plugins.entries`, indeks plugin yang dipersist, entri daftar allow/deny plugin, dan entri `plugins.load.paths` tertaut jika berlaku. Kecuali `--keep-files` diatur, uninstall juga menghapus direktori instalasi terkelola yang dilacak ketika berada di dalam root ekstensi plugin OpenClaw. Untuk plugin active memory, slot memori direset ke `memory-core`.
`--keep-config` didukung sebagai alias usang untuk `--keep-files`.
@@ -312,29 +319,29 @@ openclaw plugins update @openclaw/voice-call
openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install
```
-Pembaruan berlaku untuk pemasangan plugin terlacak di indeks plugin terkelola dan pemasangan hook-pack terlacak di `hooks.internal.installs`.
+Pembaruan diterapkan pada instalasi plugin yang dilacak di indeks plugin terkelola dan instalasi hook-pack yang dilacak di `hooks.internal.installs`.
- Saat Anda meneruskan id plugin, OpenClaw menggunakan ulang spec pemasangan yang tercatat untuk plugin tersebut. Itu berarti dist-tag yang sebelumnya tersimpan seperti `@beta` dan versi persis yang dipin terus digunakan pada proses `update ` berikutnya.
+ Ketika Anda meneruskan id plugin, OpenClaw menggunakan ulang spec instalasi yang direkam untuk plugin tersebut. Artinya dist-tag yang disimpan sebelumnya seperti `@beta` dan versi tepat yang dipin tetap digunakan pada eksekusi `update ` berikutnya.
- Untuk pemasangan npm, Anda juga dapat meneruskan spec paket npm eksplisit dengan dist-tag atau versi persis. OpenClaw menyelesaikan nama paket tersebut kembali ke record plugin terlacak, memperbarui plugin terpasang tersebut, dan mencatat spec npm baru untuk pembaruan berbasis id di masa mendatang.
+ Untuk instalasi npm, Anda juga dapat meneruskan spec paket npm eksplisit dengan dist-tag atau versi tepat. OpenClaw menyelesaikan nama paket tersebut kembali ke record plugin yang dilacak, memperbarui plugin terinstal tersebut, dan merekam spec npm baru untuk pembaruan berbasis id di masa mendatang.
- Meneruskan nama paket npm tanpa versi atau tag juga diselesaikan kembali ke record plugin terlacak. Gunakan ini saat plugin dipin ke versi persis dan Anda ingin memindahkannya kembali ke jalur rilis default registri.
+ Meneruskan nama paket npm tanpa versi atau tag juga diselesaikan kembali ke record plugin yang dilacak. Gunakan ini ketika plugin dipin ke versi tepat dan Anda ingin memindahkannya kembali ke jalur rilis default registry.
- `openclaw plugins update` menggunakan ulang spec plugin terlacak kecuali Anda meneruskan spec baru. `openclaw update` juga mengetahui channel pembaruan OpenClaw aktif: pada channel beta, record plugin npm dan ClawHub jalur default mencoba `@beta` terlebih dahulu, lalu fallback ke spec default/latest yang tercatat jika tidak ada rilis beta plugin. Versi persis dan tag eksplisit tetap dipin ke selector tersebut.
+ `openclaw plugins update` menggunakan ulang spec plugin yang dilacak kecuali Anda meneruskan spec baru. `openclaw update` juga mengetahui channel pembaruan OpenClaw aktif: pada channel beta, record plugin npm dan ClawHub jalur default mencoba `@beta` terlebih dahulu, lalu fallback ke spec default/latest yang direkam jika tidak ada rilis beta plugin. Versi tepat dan tag eksplisit tetap dipin ke selector tersebut.
- Sebelum pembaruan npm live, OpenClaw memeriksa versi paket terpasang terhadap metadata registry npm. Jika versi terpasang dan identitas artefak tercatat sudah cocok dengan target yang diselesaikan, pembaruan dilewati tanpa mengunduh, memasang ulang, atau menulis ulang `openclaw.json`.
+ Sebelum pembaruan npm langsung, OpenClaw memeriksa versi paket yang terinstal terhadap metadata registry npm. Jika versi terinstal dan identitas artefak yang direkam sudah cocok dengan target yang diselesaikan, pembaruan dilewati tanpa mengunduh, menginstal ulang, atau menulis ulang `openclaw.json`.
- Saat hash integritas tersimpan ada dan hash artefak yang diambil berubah, OpenClaw memperlakukannya sebagai drift artefak npm. Perintah interaktif `openclaw plugins update` mencetak hash yang diharapkan dan aktual serta meminta konfirmasi sebelum melanjutkan. Helper pembaruan non-interaktif gagal tertutup kecuali pemanggil menyediakan kebijakan kelanjutan eksplisit.
+ Ketika hash integritas tersimpan ada dan hash artefak yang diambil berubah, OpenClaw memperlakukan itu sebagai drift artefak npm. Perintah interaktif `openclaw plugins update` mencetak hash yang diharapkan dan aktual lalu meminta konfirmasi sebelum melanjutkan. Helper pembaruan non-interaktif gagal tertutup kecuali pemanggil menyediakan kebijakan kelanjutan eksplisit.
- `--dangerously-force-unsafe-install` juga tersedia pada `plugins update` sebagai override darurat untuk false positive pemindaian kode berbahaya bawaan selama pembaruan plugin. Ini tetap tidak melewati blok kebijakan `before_install` plugin atau pemblokiran kegagalan pemindaian, dan hanya berlaku untuk pembaruan plugin, bukan pembaruan hook-pack.
+ `--dangerously-force-unsafe-install` juga tersedia pada `plugins update` sebagai override darurat untuk positif palsu pemindaian kode berbahaya bawaan selama pembaruan plugin. Ini tetap tidak melewati blok kebijakan `before_install` plugin atau pemblokiran kegagalan pemindaian, dan hanya berlaku untuk pembaruan plugin, bukan pembaruan hook-pack.
@@ -346,21 +353,21 @@ openclaw plugins inspect --runtime
openclaw plugins inspect --json
```
-Inspect menampilkan identitas, status muat, sumber, kapabilitas manifes, flag kebijakan, diagnostik, metadata pemasangan, kapabilitas bundel, dan dukungan server MCP atau LSP apa pun yang terdeteksi tanpa mengimpor runtime plugin secara default. Tambahkan `--runtime` untuk memuat modul plugin dan menyertakan hook, tools, commands, services, metode gateway, dan rute HTTP terdaftar. Inspeksi runtime melaporkan dependensi plugin yang hilang secara langsung; pemasangan dan perbaikan tetap berada di `openclaw plugins install`, `openclaw plugins update`, dan `openclaw doctor --fix`.
+Inspect menampilkan identitas, status pemuatan, sumber, kapabilitas manifes, flag kebijakan, diagnostik, metadata instalasi, kapabilitas bundle, dan dukungan server MCP atau LSP yang terdeteksi tanpa mengimpor runtime plugin secara default. Tambahkan `--runtime` untuk memuat modul plugin dan menyertakan hook, tool, command, service, metode gateway, dan route HTTP yang terdaftar. Inspeksi runtime melaporkan dependensi plugin yang hilang secara langsung; instalasi dan perbaikan tetap berada di `openclaw plugins install`, `openclaw plugins update`, dan `openclaw doctor --fix`.
-Perintah CLI milik plugin dipasang sebagai grup perintah root `openclaw`. Setelah `inspect --runtime` menampilkan perintah di bawah `cliCommands`, jalankan sebagai `openclaw ...`; misalnya plugin yang mendaftarkan `demo-git` dapat diverifikasi dengan `openclaw demo-git ping`.
+Command CLI milik plugin diinstal sebagai grup command root `openclaw`. Setelah `inspect --runtime` menampilkan command di bawah `cliCommands`, jalankan sebagai `openclaw ...`; misalnya plugin yang mendaftarkan `demo-git` dapat diverifikasi dengan `openclaw demo-git ping`.
Setiap plugin diklasifikasikan berdasarkan apa yang benar-benar didaftarkannya saat runtime:
-- **plain-capability** — satu jenis kapabilitas (misalnya plugin khusus provider)
-- **hybrid-capability** — beberapa jenis kapabilitas (misalnya teks + ucapan + gambar)
+- **plain-capability** — satu jenis kapabilitas (mis. plugin khusus provider)
+- **hybrid-capability** — beberapa jenis kapabilitas (mis. teks + ucapan + gambar)
- **hook-only** — hanya hook, tanpa kapabilitas atau surface
-- **non-capability** — tools/commands/services tetapi tanpa kapabilitas
+- **non-capability** — tool/command/service tetapi tanpa kapabilitas
-Lihat [Bentuk Plugin](/id/plugins/architecture#plugin-shapes) untuk informasi lebih lanjut tentang model kapabilitas.
+Lihat [Bentuk plugin](/id/plugins/architecture#plugin-shapes) untuk informasi lebih lanjut tentang model kapabilitas.
-Flag `--json` mengeluarkan laporan yang dapat dibaca mesin dan cocok untuk scripting serta audit. `inspect --all` merender tabel seluruh armada dengan kolom bentuk, jenis kapabilitas, pemberitahuan kompatibilitas, kapabilitas bundel, dan ringkasan hook. `info` adalah alias untuk `inspect`.
+Flag `--json` menghasilkan laporan yang dapat dibaca mesin dan cocok untuk scripting serta audit. `inspect --all` merender tabel seluruh fleet dengan kolom bentuk, jenis kapabilitas, pemberitahuan kompatibilitas, kapabilitas bundle, dan ringkasan hook. `info` adalah alias untuk `inspect`.
### Doctor
@@ -369,13 +376,13 @@ Flag `--json` mengeluarkan laporan yang dapat dibaca mesin dan cocok untuk scrip
openclaw plugins doctor
```
-`doctor` melaporkan error pemuatan plugin, diagnostik manifes/discovery, dan pemberitahuan kompatibilitas. Saat semuanya bersih, ia mencetak `No plugin issues detected.`
+`doctor` melaporkan error pemuatan plugin, diagnostik manifes/discovery, dan pemberitahuan kompatibilitas. Ketika semuanya bersih, ia mencetak `No plugin issues detected.`
-Jika plugin terkonfigurasi ada di disk tetapi diblokir oleh pemeriksaan keamanan jalur loader, validasi config mempertahankan entri plugin dan melaporkannya sebagai `present but blocked`. Perbaiki diagnostik plugin terblokir sebelumnya, seperti kepemilikan jalur atau izin world-writable, alih-alih menghapus config `plugins.entries.` atau `plugins.allow`.
+Jika plugin yang dikonfigurasi ada di disk tetapi diblokir oleh pemeriksaan keamanan path milik loader, validasi konfigurasi mempertahankan entri plugin dan melaporkannya sebagai `present but blocked`. Perbaiki diagnostik plugin terblokir sebelumnya, seperti kepemilikan path atau izin world-writable, alih-alih menghapus konfigurasi `plugins.entries.` atau `plugins.allow`.
-Untuk kegagalan bentuk modul seperti ekspor `register`/`activate` yang hilang, jalankan ulang dengan `OPENCLAW_PLUGIN_LOAD_DEBUG=1` untuk menyertakan ringkasan bentuk ekspor ringkas dalam output diagnostik.
+Untuk kegagalan bentuk modul seperti ekspor `register`/`activate` yang hilang, jalankan ulang dengan `OPENCLAW_PLUGIN_LOAD_DEBUG=1` untuk menyertakan ringkasan bentuk ekspor yang ringkas dalam output diagnostik.
-### Registri
+### Registry
```bash
openclaw plugins registry
@@ -383,14 +390,14 @@ openclaw plugins registry --refresh
openclaw plugins registry --json
```
-Registri plugin lokal adalah model baca dingin tersimpan OpenClaw untuk identitas plugin terpasang, status aktif, metadata sumber, dan kepemilikan kontribusi. Startup normal, pencarian pemilik provider, klasifikasi penyiapan channel, dan inventaris plugin dapat membacanya tanpa mengimpor modul runtime plugin.
+Registry plugin lokal adalah model baca dingin terpersist milik OpenClaw untuk identitas plugin terinstal, enablement, metadata sumber, dan kepemilikan kontribusi. Startup normal, lookup owner provider, klasifikasi setup channel, dan inventaris plugin dapat membacanya tanpa mengimpor modul runtime plugin.
-Gunakan `plugins registry` untuk memeriksa apakah registri yang dipersisten ada, mutakhir, atau kedaluwarsa. Gunakan `--refresh` untuk membangunnya ulang dari indeks Plugin yang dipersisten, kebijakan konfigurasi, dan metadata manifest/paket. Ini adalah jalur perbaikan, bukan jalur aktivasi runtime.
+Gunakan `plugins registry` untuk memeriksa apakah registry yang dipertahankan ada, terkini, atau usang. Gunakan `--refresh` untuk membangunnya ulang dari indeks Plugin yang dipertahankan, kebijakan konfigurasi, serta metadata manifest/paket. Ini adalah jalur perbaikan, bukan jalur aktivasi runtime.
-`openclaw doctor --fix` juga memperbaiki penyimpangan npm terkelola yang berdekatan dengan registri: jika paket `@openclaw/*` yang yatim atau dipulihkan di bawah root npm Plugin terkelola membayangi Plugin bawaan, doctor menghapus paket kedaluwarsa tersebut dan membangun ulang registri sehingga startup memvalidasi terhadap manifest bawaan.
+`openclaw doctor --fix` juga memperbaiki drift npm terkelola yang berdekatan dengan registry: jika paket `@openclaw/*` yang yatim atau dipulihkan di bawah root npm Plugin terkelola menutupi Plugin bawaan, doctor menghapus paket usang tersebut dan membangun ulang registry agar startup memvalidasi terhadap manifest bawaan.
-`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` adalah sakelar kompatibilitas darurat yang tidak digunakan lagi untuk kegagalan baca registri. Utamakan `plugins registry --refresh` atau `openclaw doctor --fix`; fallback env hanya untuk pemulihan startup darurat selama migrasi diluncurkan.
+`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` adalah sakelar kompatibilitas darurat yang sudah tidak digunakan lagi untuk kegagalan baca registry. Utamakan `plugins registry --refresh` atau `openclaw doctor --fix`; fallback env hanya untuk pemulihan startup darurat saat migrasi diluncurkan.
### Marketplace
@@ -400,10 +407,10 @@ openclaw plugins marketplace list
openclaw plugins marketplace list --json
```
-Daftar marketplace menerima jalur marketplace lokal, jalur `marketplace.json`, singkatan GitHub seperti `owner/repo`, URL repo GitHub, atau URL git. `--json` mencetak label sumber yang diselesaikan beserta manifest marketplace dan entri Plugin yang diurai.
+Daftar marketplace menerima jalur marketplace lokal, jalur `marketplace.json`, singkatan GitHub seperti `owner/repo`, URL repo GitHub, atau URL git. `--json` mencetak label sumber yang diselesaikan beserta manifest marketplace yang diurai dan entri Plugin.
## Terkait
- [Membangun Plugin](/id/plugins/building-plugins)
- [Referensi CLI](/id/cli)
-- [Plugin komunitas](/id/plugins/community)
+- [Plugin Komunitas](/id/plugins/community)
diff --git a/docs/id/cli/sessions.md b/docs/id/cli/sessions.md
index 0dd1df927..972557f51 100644
--- a/docs/id/cli/sessions.md
+++ b/docs/id/cli/sessions.md
@@ -1,67 +1,54 @@
---
read_when:
- Anda ingin menampilkan daftar sesi yang tersimpan dan melihat aktivitas terbaru
-summary: Referensi CLI untuk `openclaw sessions` (mencantumkan sesi tersimpan + penggunaan)
+summary: Referensi CLI untuk `openclaw sessions` (daftar sesi tersimpan + penggunaan)
title: Sesi
x-i18n:
- generated_at: "2026-05-04T07:02:43Z"
+ generated_at: "2026-05-05T01:44:13Z"
model: gpt-5.5
provider: openai
- source_hash: 8dc90344f40c53513bd6db3696bc709279155f26e7c3b6ea27e81a07a2f9f15e
+ source_hash: 6eb484ab1fa7686cf42dd00e640c4ae8616c4ea1c29873ea72694d72b9c680e7
source_path: cli/sessions.md
workflow: 16
---
# `openclaw sessions`
-Cantumkan sesi percakapan yang disimpan.
+Cantumkan sesi percakapan yang tersimpan.
-Daftar sesi bukan pemeriksaan keaktifan channel/provider. Daftar ini menampilkan baris
-percakapan yang dipertahankan dari penyimpanan sesi. Discord, Slack, Telegram, atau
-channel lain yang senyap dapat tersambung kembali dengan sukses tanpa membuat baris sesi
-baru sampai sebuah pesan diproses. Gunakan `openclaw channels status --probe`,
-`openclaw status --deep`, atau `openclaw health --verbose` saat Anda memerlukan
-konektivitas channel langsung.
+Daftar sesi bukan pemeriksaan keaktifan channel/provider. Daftar ini menampilkan baris percakapan yang dipersisten dari penyimpanan sesi. Discord, Slack, Telegram, atau channel lain yang sepi dapat tersambung ulang dengan sukses tanpa membuat baris sesi baru sampai pesan diproses. Gunakan `openclaw channels status --probe`, `openclaw status --deep`, atau `openclaw health --verbose` saat Anda membutuhkan konektivitas channel langsung.
-Respons Gateway `sessions.list` dibatasi secara bawaan agar store besar yang berumur panjang
-tidak dapat memonopoli loop peristiwa Gateway. Berikan `limit` positif eksplisit
-dari klien RPC saat jendela hasil yang berbeda diperlukan; respons menyertakan
-`totalCount`, `limitApplied`, dan `hasMore` saat pemanggil perlu menunjukkan
-bahwa ada lebih banyak baris.
+Respons `openclaw sessions` dan Gateway `sessions.list` dibatasi secara default agar penyimpanan besar yang berumur panjang tidak memonopoli proses CLI atau event loop Gateway. CLI mengembalikan 100 sesi terbaru secara default; berikan `--limit ` untuk jendela yang lebih kecil/besar atau `--limit all` saat Anda sengaja membutuhkan seluruh penyimpanan. Respons JSON menyertakan `totalCount`, `limitApplied`, dan `hasMore` saat pemanggil perlu menunjukkan bahwa ada lebih banyak baris.
```bash
openclaw sessions
openclaw sessions --agent work
openclaw sessions --all-agents
openclaw sessions --active 120
+openclaw sessions --limit 25
openclaw sessions --verbose
openclaw sessions --json
```
Pemilihan cakupan:
-- bawaan: store agen bawaan yang dikonfigurasi
-- `--verbose`: pencatatan log verbose
-- `--agent `: satu store agen yang dikonfigurasi
-- `--all-agents`: agregasikan semua store agen yang dikonfigurasi
-- `--store `: jalur store eksplisit (tidak dapat digabungkan dengan `--agent` atau `--all-agents`)
+- default: penyimpanan agen default yang dikonfigurasi
+- `--verbose`: pencatatan verbose
+- `--agent `: satu penyimpanan agen yang dikonfigurasi
+- `--all-agents`: gabungkan semua penyimpanan agen yang dikonfigurasi
+- `--store `: jalur penyimpanan eksplisit (tidak dapat digabungkan dengan `--agent` atau `--all-agents`)
+- `--limit `: jumlah baris maksimum untuk dikeluarkan (default `100`; `all` memulihkan keluaran penuh)
-Ekspor bundel trajectory untuk sesi yang disimpan:
+Ekspor bundel trajektori untuk sesi tersimpan:
```bash
openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --workspace .
openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:123" --output bug-123 --json
```
-Ini adalah jalur perintah yang digunakan oleh perintah slash `/export-trajectory` setelah
-pemilik menyetujui permintaan eksekusi. Direktori output selalu di-resolve
-di dalam `.openclaw/trajectory-exports/` di bawah workspace yang dipilih.
+Ini adalah jalur perintah yang digunakan oleh perintah slash `/export-trajectory` setelah pemilik menyetujui permintaan eksekusi. Direktori keluaran selalu diselesaikan di dalam `.openclaw/trajectory-exports/` di bawah workspace yang dipilih.
-`openclaw sessions --all-agents` membaca store agen yang dikonfigurasi. Penemuan sesi
-Gateway dan ACP lebih luas: keduanya juga menyertakan store yang hanya ada di disk yang ditemukan di bawah
-root `agents/` bawaan atau root `session.store` bertemplat. Store yang ditemukan tersebut
-harus di-resolve menjadi file `sessions.json` reguler di dalam root
-agen; symlink dan jalur di luar root dilewati.
+`openclaw sessions --all-agents` membaca penyimpanan agen yang dikonfigurasi. Penemuan sesi Gateway dan ACP lebih luas: keduanya juga menyertakan penyimpanan yang hanya ada di disk yang ditemukan di bawah root `agents/` default atau root `session.store` bertemplat. Penyimpanan yang ditemukan tersebut harus diselesaikan menjadi file `sessions.json` reguler di dalam root agen; symlink dan jalur di luar root dilewati.
Contoh JSON:
@@ -76,6 +63,9 @@ Contoh JSON:
],
"allAgents": true,
"count": 2,
+ "totalCount": 2,
+ "limitApplied": 100,
+ "hasMore": false,
"activeMinutes": null,
"sessions": [
{ "agentId": "main", "key": "agent:main:main", "model": "gpt-5" },
@@ -86,7 +76,7 @@ Contoh JSON:
## Pemeliharaan pembersihan
-Jalankan pemeliharaan sekarang (alih-alih menunggu siklus tulis berikutnya):
+Jalankan pemeliharaan sekarang (alih-alih menunggu siklus penulisan berikutnya):
```bash
openclaw sessions cleanup --dry-run
@@ -99,21 +89,19 @@ openclaw sessions cleanup --json
`openclaw sessions cleanup` menggunakan pengaturan `session.maintenance` dari konfigurasi:
-- Catatan cakupan: `openclaw sessions cleanup` memelihara store sesi, transkrip, dan sidecar trajectory. Perintah ini tidak memangkas log eksekusi cron (`cron/runs/.jsonl`), yang dikelola oleh `cron.runLog.maxBytes` dan `cron.runLog.keepLines` dalam [konfigurasi Cron](/id/automation/cron-jobs#configuration) dan dijelaskan dalam [pemeliharaan Cron](/id/automation/cron-jobs#maintenance).
+- Catatan cakupan: `openclaw sessions cleanup` memelihara penyimpanan sesi, transkrip, dan sidecar trajektori. Perintah ini tidak memangkas log run cron (`cron/runs/.jsonl`), yang dikelola oleh `cron.runLog.maxBytes` dan `cron.runLog.keepLines` dalam [Konfigurasi Cron](/id/automation/cron-jobs#configuration) dan dijelaskan dalam [Pemeliharaan Cron](/id/automation/cron-jobs#maintenance).
- `--dry-run`: pratinjau berapa banyak entri yang akan dipangkas/dibatasi tanpa menulis.
- Dalam mode teks, dry-run mencetak tabel tindakan per sesi (`Action`, `Key`, `Age`, `Model`, `Flags`) sehingga Anda dapat melihat apa yang akan dipertahankan vs dihapus.
-- `--enforce`: terapkan pemeliharaan meskipun `session.maintenance.mode` adalah `warn`.
-- `--fix-missing`: hapus entri yang file transkripnya hilang, meskipun biasanya entri tersebut belum keluar karena usia/jumlah.
-- `--active-key `: lindungi kunci aktif tertentu dari pengusiran karena anggaran disk. Pointer percakapan eksternal yang tahan lama, seperti sesi grup dan sesi chat bercakupan thread, juga dipertahankan oleh pemeliharaan usia/jumlah/anggaran disk.
-- `--agent `: jalankan pembersihan untuk satu store agen yang dikonfigurasi.
-- `--all-agents`: jalankan pembersihan untuk semua store agen yang dikonfigurasi.
+- `--enforce`: terapkan pemeliharaan bahkan saat `session.maintenance.mode` bernilai `warn`.
+- `--fix-missing`: hapus entri yang file transkripnya hilang, meskipun biasanya entri tersebut belum akan dikeluarkan berdasarkan usia/jumlah.
+- `--active-key `: lindungi kunci aktif tertentu dari penggusuran karena anggaran disk. Penunjuk percakapan eksternal yang tahan lama, seperti sesi grup dan sesi chat bercakupan thread, juga dipertahankan oleh pemeliharaan usia/jumlah/anggaran disk.
+- `--agent `: jalankan pembersihan untuk satu penyimpanan agen yang dikonfigurasi.
+- `--all-agents`: jalankan pembersihan untuk semua penyimpanan agen yang dikonfigurasi.
- `--store `: jalankan terhadap file `sessions.json` tertentu.
-- `--json`: cetak ringkasan JSON. Dengan `--all-agents`, output menyertakan satu ringkasan per store.
+- `--json`: cetak ringkasan JSON. Dengan `--all-agents`, keluaran menyertakan satu ringkasan per penyimpanan.
-Saat Gateway dapat dijangkau, pembersihan non-dry-run untuk store agen yang dikonfigurasi
-dikirim melalui Gateway sehingga berbagi penulis store sesi yang sama dengan lalu lintas
-runtime. Gunakan `--store ` untuk perbaikan offline eksplisit pada file store.
+Saat Gateway dapat dijangkau, pembersihan non-dry-run untuk penyimpanan agen yang dikonfigurasi dikirim melalui Gateway agar menggunakan penulis penyimpanan sesi yang sama dengan lalu lintas runtime. Gunakan `--store ` untuk perbaikan offline eksplisit atas file penyimpanan.
`openclaw sessions cleanup --all-agents --dry-run --json`:
diff --git a/docs/id/cli/update.md b/docs/id/cli/update.md
index 12decb0df..5a62a0f8d 100644
--- a/docs/id/cli/update.md
+++ b/docs/id/cli/update.md
@@ -1,15 +1,15 @@
---
read_when:
- Anda ingin memperbarui checkout kode sumber dengan aman
- - Anda sedang menelusuri galat pada keluaran atau opsi `openclaw update`
+ - Anda sedang menelusuri kesalahan pada keluaran atau opsi `openclaw update`
- Anda perlu memahami perilaku singkatan `--update`
summary: Referensi CLI untuk `openclaw update` (pembaruan sumber yang relatif aman + mulai ulang otomatis Gateway)
title: Perbarui
x-i18n:
- generated_at: "2026-05-03T21:29:37Z"
+ generated_at: "2026-05-05T01:45:03Z"
model: gpt-5.5
provider: openai
- source_hash: 53ec06b8db5e2aba4000922f92a36834e8782986a77f6b5889bb19031a59f1b8
+ source_hash: b12b1837ae80a3688fb7805d78d5a354f07dccdaba175cfa429e18145e543a1f
source_path: cli/update.md
workflow: 16
---
@@ -18,8 +18,8 @@ x-i18n:
Perbarui OpenClaw dengan aman dan beralih antara kanal stable/beta/dev.
-Jika Anda memasang melalui **npm/pnpm/bun** (instalasi global, tanpa metadata git),
-pembaruan dilakukan melalui alur manajer paket di [Memperbarui](/id/install/updating).
+Jika Anda menginstal melalui **npm/pnpm/bun** (instalasi global, tanpa metadata git),
+pembaruan dilakukan melalui alur pengelola paket di [Memperbarui](/id/install/updating).
## Penggunaan
@@ -40,31 +40,31 @@ openclaw --update
## Opsi
-- `--no-restart`: lewati memulai ulang layanan Gateway setelah pembaruan berhasil. Pembaruan manajer paket yang memulai ulang Gateway memverifikasi bahwa layanan yang dimulai ulang melaporkan versi terbaru yang diharapkan sebelum perintah berhasil.
+- `--no-restart`: lewati pemulaian ulang layanan Gateway setelah pembaruan berhasil. Pembaruan pengelola paket yang memang memulai ulang Gateway memverifikasi bahwa layanan yang dimulai ulang melaporkan versi terbaru yang diharapkan sebelum perintah berhasil.
- `--channel `: atur kanal pembaruan (git + npm; disimpan dalam konfigurasi).
- `--tag `: timpa target paket hanya untuk pembaruan ini. Untuk instalasi paket, `main` dipetakan ke `github:openclaw/openclaw#main`.
-- `--dry-run`: pratinjau tindakan pembaruan yang direncanakan (alur kanal/tag/target/mulai ulang) tanpa menulis konfigurasi, memasang, menyinkronkan plugin, atau memulai ulang.
+- `--dry-run`: pratinjau tindakan pembaruan yang direncanakan (alur kanal/tag/target/mulai ulang) tanpa menulis konfigurasi, menginstal, menyinkronkan Plugin, atau memulai ulang.
- `--json`: cetak JSON `UpdateRunResult` yang dapat dibaca mesin, termasuk
- `postUpdate.plugins.integrityDrifts` saat drift artefak plugin npm
- terdeteksi selama sinkronisasi plugin pascapembaruan.
+ `postUpdate.plugins.integrityDrifts` saat drift artefak Plugin npm
+ terdeteksi selama sinkronisasi Plugin pascapembaruan.
- `--timeout `: batas waktu per langkah (default 1800 dtk).
- `--yes`: lewati prompt konfirmasi (misalnya konfirmasi downgrade).
`openclaw update` tidak memiliki flag `--verbose`. Gunakan `--dry-run` untuk mempratinjau
-tindakan kanal/tag/instal/mulai ulang yang direncanakan, `--json` untuk hasil
-yang dapat dibaca mesin, dan `openclaw update status --json` saat Anda hanya memerlukan detail
-kanal dan ketersediaan. Jika Anda men-debug log Gateway di sekitar pembaruan,
-verbositas konsol dan level log file terpisah: Gateway `--verbose` memengaruhi
-keluaran terminal/WebSocket, sementara log file memerlukan `logging.level: "debug"` atau
+tindakan kanal/tag/instal/mulai ulang yang direncanakan, `--json` untuk hasil yang
+dapat dibaca mesin, dan `openclaw update status --json` saat Anda hanya membutuhkan
+detail kanal dan ketersediaan. Jika Anda men-debug log Gateway di sekitar pembaruan,
+verbositas konsol dan level log file terpisah: `--verbose` Gateway memengaruhi
+keluaran terminal/WebSocket, sedangkan log file memerlukan `logging.level: "debug"` atau
`"trace"` dalam konfigurasi. Lihat [logging Gateway](/id/gateway/logging).
-Downgrade memerlukan konfirmasi karena versi lama dapat merusak konfigurasi.
+Downgrade memerlukan konfirmasi karena versi yang lebih lama dapat merusak konfigurasi.
## `update status`
-Tampilkan kanal pembaruan aktif + tag/branch/SHA git (untuk checkout sumber), serta ketersediaan pembaruan.
+Tampilkan kanal pembaruan aktif + tag/cabang/SHA git (untuk checkout sumber), ditambah ketersediaan pembaruan.
```bash
openclaw update status
@@ -80,7 +80,7 @@ Opsi:
## `update wizard`
Alur interaktif untuk memilih kanal pembaruan dan mengonfirmasi apakah akan memulai ulang Gateway
-setelah pembaruan (default-nya memulai ulang). Jika Anda memilih `dev` tanpa checkout git, alur ini
+setelah memperbarui (default-nya adalah memulai ulang). Jika Anda memilih `dev` tanpa checkout git, alur ini
menawarkan untuk membuatnya.
Opsi:
@@ -93,62 +93,62 @@ Saat Anda beralih kanal secara eksplisit (`--channel ...`), OpenClaw juga menjag
metode instalasi tetap selaras:
- `dev` → memastikan checkout git (default: `~/openclaw`, timpa dengan `OPENCLAW_GIT_DIR`),
- memperbaruinya, dan memasang CLI global dari checkout tersebut.
-- `stable` → memasang dari npm menggunakan `latest`.
-- `beta` → memprioritaskan dist-tag npm `beta`, tetapi fallback ke `latest` saat beta
- tidak ada atau lebih lama daripada rilis stable saat ini.
+ memperbaruinya, dan menginstal CLI global dari checkout tersebut.
+- `stable` → menginstal dari npm menggunakan `latest`.
+- `beta` → mengutamakan dist-tag npm `beta`, tetapi mundur ke `latest` saat beta
+ tidak ada atau lebih lama dari rilis stable saat ini.
Pembaruan otomatis inti Gateway (saat diaktifkan melalui konfigurasi) meluncurkan jalur pembaruan CLI
-di luar handler permintaan Gateway yang sedang aktif. Pembaruan manajer paket control-plane `update.run`
-memaksa mulai ulang pembaruan yang tidak ditunda dan tanpa cooldown setelah penggantian paket,
+di luar handler permintaan Gateway yang sedang berjalan. Pembaruan pengelola paket
+`update.run` pada control plane memaksa pemulaian ulang pembaruan tanpa penundaan dan tanpa cooldown setelah penukaran paket,
karena proses Gateway lama mungkin masih memiliki chunk dalam memori yang menunjuk ke
file yang dihapus oleh paket baru.
-Untuk instalasi manajer paket, `openclaw update` menyelesaikan versi paket target
-sebelum memanggil manajer paket. Instalasi global npm menggunakan instalasi bertahap:
-OpenClaw memasang paket baru ke prefix npm sementara, memverifikasi inventaris
-`dist` yang dipaketkan di sana, lalu menukar pohon paket bersih itu ke prefix
-global asli. Jika verifikasi gagal, doctor pascapembaruan, sinkronisasi plugin, dan
-pekerjaan mulai ulang tidak dijalankan dari pohon yang dicurigai. Bahkan saat versi terpasang
-sudah cocok dengan target, perintah ini menyegarkan instalasi paket global,
-lalu menjalankan sinkronisasi plugin, penyegaran penyelesaian perintah inti, dan pekerjaan mulai ulang. Ini
-menjaga sidecar terpaketkan dan catatan plugin milik kanal tetap selaras dengan
-build OpenClaw yang terpasang sambil menyerahkan pembangunan ulang penyelesaian perintah plugin penuh ke
-eksekusi `openclaw completion --write-state` eksplisit.
+Untuk instalasi pengelola paket, `openclaw update` menyelesaikan versi paket target
+sebelum menjalankan pengelola paket. Instalasi global npm menggunakan instalasi bertahap:
+OpenClaw menginstal paket baru ke prefiks npm sementara, memverifikasi inventaris
+`dist` yang dipaketkan di sana, lalu menukar pohon paket bersih itu ke
+prefiks global sebenarnya. Jika verifikasi gagal, doctor pascapembaruan, sinkronisasi Plugin, dan
+pekerjaan mulai ulang tidak dijalankan dari pohon yang dicurigai. Bahkan saat versi terinstal
+sudah cocok dengan target, perintah menyegarkan instalasi paket global,
+lalu menjalankan sinkronisasi Plugin, penyegaran penyelesaian perintah inti, dan pekerjaan mulai ulang. Ini
+menjaga sidecar yang dipaketkan dan catatan Plugin milik kanal tetap selaras dengan
+build OpenClaw yang terinstal sambil menyerahkan pembuatan ulang penyelesaian perintah Plugin penuh ke
+pemanggilan eksplisit `openclaw completion --write-state`.
-Saat layanan Gateway terkelola lokal terpasang dan mulai ulang diaktifkan,
-pembaruan manajer paket menghentikan layanan yang berjalan sebelum mengganti pohon paket,
+Saat layanan Gateway terkelola lokal terinstal dan mulai ulang diaktifkan,
+pembaruan pengelola paket menghentikan layanan yang berjalan sebelum mengganti pohon paket,
lalu menyegarkan metadata layanan dari instalasi yang diperbarui, memulai ulang
layanan, dan memverifikasi Gateway yang dimulai ulang melaporkan versi yang diharapkan sebelum
-melaporkan keberhasilan. Di macOS, pemeriksaan pascapembaruan juga memverifikasi LaunchAgent
+melaporkan keberhasilan. Di macOS, pemeriksaan pascapembaruan juga memverifikasi bahwa LaunchAgent
dimuat/berjalan untuk profil aktif dan port loopback yang dikonfigurasi
-sehat. Jika plist terpasang tetapi launchd tidak mengawasinya, OpenClaw
-mem-bootstrap ulang LaunchAgent secara otomatis, lalu menjalankan ulang
+sehat. Jika plist terinstal tetapi launchd tidak mengawasinya, OpenClaw
+melakukan bootstrap ulang LaunchAgent secara otomatis, lalu menjalankan ulang
pemeriksaan kesiapan kesehatan/versi/kanal. Bootstrap baru memuat job RunAtLoad
-secara langsung, sehingga pemulihan pembaruan tidak langsung `kickstart -k` Gateway
+secara langsung, sehingga pemulihan pembaruan tidak segera menjalankan `kickstart -k` pada Gateway
yang baru dibuat. Jika Gateway tetap tidak menjadi sehat, perintah keluar
-non-zero dan mencetak path log mulai ulang plus instruksi mulai ulang, instal ulang, dan
-rollback paket yang eksplisit. Dengan `--no-restart`,
+dengan non-zero dan mencetak jalur log mulai ulang serta instruksi mulai ulang, instal ulang, dan
+rollback paket secara eksplisit. Dengan `--no-restart`,
penggantian paket tetap berjalan tetapi layanan terkelola tidak dihentikan atau
-dimulai ulang, sehingga Gateway yang sedang berjalan mungkin tetap memakai kode lama sampai Anda memulai ulang
+dimulai ulang, sehingga Gateway yang berjalan mungkin tetap menggunakan kode lama sampai Anda memulai ulang
secara manual.
-## Alur checkout git
+## Alur checkout Git
### Pemilihan kanal
- `stable`: checkout tag non-beta terbaru, lalu build dan doctor.
-- `beta`: prioritaskan tag `-beta` terbaru, tetapi fallback ke tag stable terbaru saat beta tidak ada atau lebih lama.
+- `beta`: utamakan tag `-beta` terbaru, tetapi mundur ke tag stable terbaru saat beta tidak ada atau lebih lama.
- `dev`: checkout `main`, lalu fetch dan rebase.
### Langkah pembaruan
- Mengharuskan tidak ada perubahan yang belum di-commit.
+ Memerlukan tidak ada perubahan yang belum di-commit.
- Beralih ke kanal yang dipilih (tag atau branch).
+ Beralih ke kanal yang dipilih (tag atau cabang).
Hanya dev.
@@ -159,44 +159,45 @@ secara manual.
Melakukan rebase ke commit yang dipilih (hanya dev).
-
- Menggunakan manajer paket repo. Untuk checkout pnpm, updater mem-bootstrap `pnpm` sesuai kebutuhan (melalui `corepack` terlebih dahulu, lalu fallback `npm install pnpm@10` sementara) alih-alih menjalankan `npm run build` di dalam workspace pnpm.
+
+ Menggunakan pengelola paket repo. Untuk checkout pnpm, updater melakukan bootstrap `pnpm` sesuai kebutuhan (melalui `corepack` terlebih dahulu, lalu fallback `npm install pnpm@10` sementara) alih-alih menjalankan `npm run build` di dalam workspace pnpm.
- Mem-build gateway dan Control UI.
+ Membangun gateway dan Control UI.
`openclaw doctor` berjalan sebagai pemeriksaan pembaruan aman terakhir.
-
- Menyinkronkan plugin ke kanal aktif. Dev menggunakan plugin bawaan; stable dan beta menggunakan npm. Memperbarui instalasi plugin yang dilacak.
+
+ Menyinkronkan Plugin ke kanal aktif. Dev menggunakan Plugin bawaan; stable dan beta menggunakan npm. Memperbarui instalasi Plugin yang dilacak.
-Pada kanal pembaruan beta, instalasi plugin npm dan ClawHub yang dilacak yang mengikuti
-baris default/latest mencoba rilis plugin `@beta` terlebih dahulu. Jika plugin tidak memiliki
-rilis beta, OpenClaw fallback ke spesifikasi default/latest yang tercatat. Versi eksak
-dan tag eksplisit tidak ditulis ulang.
+Pada kanal pembaruan beta, instalasi Plugin npm dan ClawHub yang dilacak dan mengikuti
+jalur default/latest mencoba rilis Plugin `@beta` terlebih dahulu. Jika Plugin tidak memiliki
+rilis beta, OpenClaw mundur ke spesifikasi default/latest yang direkam. Untuk Plugin npm,
+OpenClaw juga mundur saat paket beta ada tetapi gagal validasi instalasi.
+Versi persis dan tag eksplisit tidak ditulis ulang.
-Jika pembaruan plugin npm yang dipin secara eksak diselesaikan ke artefak yang integritasnya berbeda dari catatan instalasi tersimpan, `openclaw update` membatalkan pembaruan artefak plugin tersebut alih-alih memasangnya. Instal ulang atau perbarui plugin secara eksplisit hanya setelah memverifikasi bahwa Anda memercayai artefak baru tersebut.
+Jika pembaruan Plugin npm yang dipin secara persis diselesaikan ke artefak yang integritasnya berbeda dari catatan instalasi tersimpan, `openclaw update` membatalkan pembaruan artefak Plugin tersebut alih-alih menginstalnya. Instal ulang atau perbarui Plugin secara eksplisit hanya setelah memverifikasi bahwa Anda memercayai artefak baru tersebut.
-Kegagalan sinkronisasi plugin pascapembaruan menggagalkan hasil pembaruan dan menghentikan pekerjaan lanjutan mulai ulang. Perbaiki kesalahan instalasi atau pembaruan plugin, lalu jalankan ulang `openclaw update`.
+Kegagalan sinkronisasi Plugin pascapembaruan menggagalkan hasil pembaruan dan menghentikan pekerjaan lanjutan mulai ulang. Perbaiki kesalahan instalasi atau pembaruan Plugin, lalu jalankan ulang `openclaw update`.
-Saat Gateway yang diperbarui dimulai, pemuatan plugin bersifat hanya verifikasi: startup tidak menjalankan manajer paket atau mengubah pohon dependensi. Mulai ulang `update.run` manajer paket melewati penundaan idle normal dan cooldown mulai ulang setelah pohon paket ditukar, sehingga proses lama tidak dapat terus lazy-load chunk yang telah dihapus.
+Saat Gateway yang diperbarui dimulai, pemuatan Plugin bersifat hanya verifikasi: startup tidak menjalankan pengelola paket atau mengubah pohon dependensi. Pemulaian ulang `update.run` pengelola paket melewati penundaan idle normal dan cooldown mulai ulang setelah pohon paket ditukar, sehingga proses lama tidak dapat terus memuat lambat chunk yang sudah dihapus.
-Jika bootstrap pnpm tetap gagal, updater berhenti lebih awal dengan kesalahan khusus manajer paket alih-alih mencoba `npm run build` di dalam checkout.
+Jika bootstrap pnpm tetap gagal, updater berhenti lebih awal dengan kesalahan khusus pengelola paket alih-alih mencoba `npm run build` di dalam checkout.
-## Singkatan `--update`
+## Pintasan `--update`
`openclaw --update` ditulis ulang menjadi `openclaw update` (berguna untuk shell dan skrip launcher).
## Terkait
-- `openclaw doctor` (menawarkan untuk menjalankan update terlebih dahulu pada checkout git)
+- `openclaw doctor` (menawarkan menjalankan pembaruan terlebih dahulu pada checkout git)
- [Kanal pengembangan](/id/install/development-channels)
- [Memperbarui](/id/install/updating)
- [Referensi CLI](/id/cli)
diff --git a/docs/id/concepts/models.md b/docs/id/concepts/models.md
index 183a25d16..9ba503379 100644
--- a/docs/id/concepts/models.md
+++ b/docs/id/concepts/models.md
@@ -1,26 +1,26 @@
---
read_when:
- - Menambahkan atau memodifikasi CLI models (models list/set/scan/aliases/fallbacks)
- - Mengubah perilaku penggunaan model cadangan atau pengalaman pengguna saat memilih
+ - Menambahkan atau memodifikasi CLI model (models list/set/scan/aliases/fallbacks)
+ - Mengubah perilaku fallback model atau UX pemilihan
- Memperbarui probe pemindaian model (alat/gambar)
sidebarTitle: Models CLI
-summary: 'CLI Model: daftar, atur, alias, alternatif cadangan, pindai, status'
+summary: 'CLI Model: daftar, tetapkan, alias, fallback, pindai, status'
title: CLI Model
x-i18n:
- generated_at: "2026-05-02T09:18:44Z"
+ generated_at: "2026-05-05T01:45:11Z"
model: gpt-5.5
provider: openai
- source_hash: d362c8cc41801b5e480560c8d34be53e1ada53a23c49af99adb7874e265ddb1f
+ source_hash: 8a1dcdb046b914d35513974d4b69fec03a415118d11860dd1c5107efc754ed4f
source_path: concepts/models.md
workflow: 16
---
- Rotasi profil autentikasi, cooldown, dan bagaimana hal itu berinteraksi dengan fallback.
+ Rotasi profil autentikasi, masa cooldown, dan bagaimana hal itu berinteraksi dengan fallback.
- Ikhtisar singkat penyedia dan contoh.
+ Ikhtisar dan contoh singkat penyedia.
PI, Codex, dan runtime loop agen lainnya.
@@ -30,7 +30,7 @@ x-i18n:
-Ref model memilih penyedia dan model. Ref tersebut biasanya tidak memilih runtime agen tingkat rendah. Misalnya, `openai/gpt-5.5` dapat berjalan melalui jalur penyedia OpenAI normal atau melalui runtime server aplikasi Codex, bergantung pada `agents.defaults.agentRuntime.id`. Dalam mode runtime Codex, ref `openai/gpt-*` tidak menyiratkan penagihan kunci API; autentikasi dapat berasal dari akun Codex atau profil autentikasi `openai-codex`. Lihat [Runtime agen](/id/concepts/agent-runtimes).
+Ref model memilih penyedia dan model. Ref biasanya tidak memilih runtime agen tingkat rendah. Misalnya, `openai/gpt-5.5` dapat berjalan melalui jalur penyedia OpenAI normal atau melalui runtime server aplikasi Codex, bergantung pada `agents.defaults.agentRuntime.id`. Dalam mode runtime Codex, ref `openai/gpt-*` tidak menyiratkan penagihan kunci API; autentikasi dapat berasal dari akun Codex atau profil autentikasi `openai-codex`. Lihat [Runtime agen](/id/concepts/agent-runtimes).
## Cara kerja pemilihan model
@@ -41,7 +41,7 @@ OpenClaw memilih model dalam urutan ini:
`agents.defaults.model.primary` (atau `agents.defaults.model`).
- `agents.defaults.model.fallbacks` (berurutan).
+ `agents.defaults.model.fallbacks` (sesuai urutan).
Failover autentikasi terjadi di dalam penyedia sebelum berpindah ke model berikutnya.
@@ -52,31 +52,31 @@ OpenClaw memilih model dalam urutan ini:
- `agents.defaults.models` adalah allowlist/katalog model yang dapat digunakan OpenClaw (ditambah alias).
- `agents.defaults.imageModel` digunakan **hanya ketika** model utama tidak dapat menerima gambar.
- - `agents.defaults.pdfModel` digunakan oleh alat `pdf`. Jika dihilangkan, alat akan fallback ke `agents.defaults.imageModel`, lalu model sesi/default yang sudah diselesaikan.
- - `agents.defaults.imageGenerationModel` digunakan oleh kapabilitas pembuatan gambar bersama. Jika dihilangkan, `image_generate` masih dapat menyimpulkan default penyedia yang didukung autentikasi. Ini mencoba penyedia default saat ini terlebih dahulu, lalu penyedia pembuatan gambar terdaftar yang tersisa dalam urutan ID penyedia. Jika Anda menetapkan penyedia/model tertentu, konfigurasikan juga autentikasi/kunci API penyedia tersebut.
- - `agents.defaults.musicGenerationModel` digunakan oleh kapabilitas pembuatan musik bersama. Jika dihilangkan, `music_generate` masih dapat menyimpulkan default penyedia yang didukung autentikasi. Ini mencoba penyedia default saat ini terlebih dahulu, lalu penyedia pembuatan musik terdaftar yang tersisa dalam urutan ID penyedia. Jika Anda menetapkan penyedia/model tertentu, konfigurasikan juga autentikasi/kunci API penyedia tersebut.
- - `agents.defaults.videoGenerationModel` digunakan oleh kapabilitas pembuatan video bersama. Jika dihilangkan, `video_generate` masih dapat menyimpulkan default penyedia yang didukung autentikasi. Ini mencoba penyedia default saat ini terlebih dahulu, lalu penyedia pembuatan video terdaftar yang tersisa dalam urutan ID penyedia. Jika Anda menetapkan penyedia/model tertentu, konfigurasikan juga autentikasi/kunci API penyedia tersebut.
- - Default per agen dapat mengganti `agents.defaults.model` melalui `agents.list[].model` plus binding (lihat [Perutean multi-agen](/id/concepts/multi-agent)).
+ - `agents.defaults.pdfModel` digunakan oleh alat `pdf`. Jika dihilangkan, alat tersebut kembali ke `agents.defaults.imageModel`, lalu model sesi/default yang diselesaikan.
+ - `agents.defaults.imageGenerationModel` digunakan oleh kapabilitas pembuatan gambar bersama. Jika dihilangkan, `image_generate` masih dapat menyimpulkan default penyedia yang didukung autentikasi. Ini mencoba penyedia default saat ini terlebih dahulu, lalu penyedia pembuatan gambar terdaftar lainnya dalam urutan ID penyedia. Jika Anda menetapkan penyedia/model tertentu, konfigurasikan juga autentikasi/kunci API penyedia tersebut.
+ - `agents.defaults.musicGenerationModel` digunakan oleh kapabilitas pembuatan musik bersama. Jika dihilangkan, `music_generate` masih dapat menyimpulkan default penyedia yang didukung autentikasi. Ini mencoba penyedia default saat ini terlebih dahulu, lalu penyedia pembuatan musik terdaftar lainnya dalam urutan ID penyedia. Jika Anda menetapkan penyedia/model tertentu, konfigurasikan juga autentikasi/kunci API penyedia tersebut.
+ - `agents.defaults.videoGenerationModel` digunakan oleh kapabilitas pembuatan video bersama. Jika dihilangkan, `video_generate` masih dapat menyimpulkan default penyedia yang didukung autentikasi. Ini mencoba penyedia default saat ini terlebih dahulu, lalu penyedia pembuatan video terdaftar lainnya dalam urutan ID penyedia. Jika Anda menetapkan penyedia/model tertentu, konfigurasikan juga autentikasi/kunci API penyedia tersebut.
+ - Default per agen dapat menimpa `agents.defaults.model` melalui `agents.list[].model` ditambah binding (lihat [Perutean multi-agen](/id/concepts/multi-agent)).
## Sumber pemilihan dan perilaku fallback
-`provider/model` yang sama dapat berarti hal berbeda bergantung pada asalnya:
+`provider/model` yang sama dapat berarti hal berbeda tergantung asalnya:
-- Default yang dikonfigurasi (`agents.defaults.model.primary` dan utama khusus agen) adalah titik awal normal dan menggunakan `agents.defaults.model.fallbacks`.
-- Pemilihan fallback otomatis adalah status pemulihan sementara. Pemilihan ini disimpan dengan `modelOverrideSource: "auto"` sehingga giliran berikutnya dapat terus menggunakan rantai fallback tanpa memeriksa model utama yang diketahui bermasalah terlebih dahulu.
-- Pemilihan sesi pengguna bersifat persis. `/model`, pemilih model, `session_status(model=...)`, dan `sessions.patch` menyimpan `modelOverrideSource: "user"`; jika penyedia/model yang dipilih tersebut tidak dapat dijangkau, OpenClaw gagal secara terlihat alih-alih jatuh ke model lain yang dikonfigurasi.
-- Cron `--model` / payload `model` adalah model utama per pekerjaan. Ini tetap menggunakan fallback yang dikonfigurasi kecuali pekerjaan menyediakan payload `fallbacks` eksplisit (gunakan `fallbacks: []` untuk run cron ketat).
-- Pemilih model default CLI dan allowlist menghormati `models.mode: "replace"` dengan mencantumkan `models.providers.*.models` eksplisit alih-alih memuat katalog bawaan lengkap.
-- Pemilih model Control UI meminta tampilan model yang dikonfigurasi dari Gateway: `agents.defaults.models` jika ada, jika tidak `models.providers.*.models` eksplisit plus penyedia dengan autentikasi yang dapat digunakan. Katalog bawaan lengkap dicadangkan untuk tampilan jelajah eksplisit seperti `models.list` dengan `view: "all"` atau `openclaw models list --all`.
+- Default yang dikonfigurasi (`agents.defaults.model.primary` dan model utama khusus agen) adalah titik awal normal dan menggunakan `agents.defaults.model.fallbacks`.
+- Pilihan fallback otomatis adalah status pemulihan sementara. Pilihan tersebut disimpan dengan `modelOverrideSource: "auto"` sehingga giliran berikutnya dapat terus menggunakan rantai fallback tanpa menguji model utama yang diketahui bermasalah terlebih dahulu.
+- Pilihan sesi pengguna bersifat eksak. `/model`, pemilih model, `session_status(model=...)`, dan `sessions.patch` menyimpan `modelOverrideSource: "user"`; jika penyedia/model yang dipilih tidak dapat dijangkau, OpenClaw gagal secara terlihat alih-alih jatuh ke model lain yang dikonfigurasi.
+- Cron `--model` / payload `model` adalah model utama per pekerjaan. Ini tetap menggunakan fallback yang dikonfigurasi kecuali pekerjaan menyediakan payload `fallbacks` eksplisit (gunakan `fallbacks: []` untuk proses cron yang ketat).
+- CLI default-model dan pemilih allowlist menghormati `models.mode: "replace"` dengan mencantumkan `models.providers.*.models` eksplisit alih-alih memuat katalog bawaan lengkap.
+- Pemilih model Control UI meminta Gateway untuk tampilan model yang dikonfigurasi: `agents.defaults.models` jika ada, jika tidak `models.providers.*.models` eksplisit ditambah penyedia dengan autentikasi yang dapat digunakan. Katalog bawaan lengkap dicadangkan untuk tampilan jelajah eksplisit seperti `models.list` dengan `view: "all"` atau `openclaw models list --all`.
-## Kebijakan model cepat
+## Kebijakan model singkat
- Atur model utama Anda ke model generasi terbaru terkuat yang tersedia untuk Anda.
-- Gunakan fallback untuk tugas yang sensitif biaya/latensi dan obrolan dengan risiko lebih rendah.
-- Untuk agen yang mengaktifkan alat atau input tidak tepercaya, hindari tingkat model yang lebih lama/lebih lemah.
+- Gunakan fallback untuk tugas yang sensitif biaya/latensi dan obrolan berisiko lebih rendah.
+- Untuk agen yang mengaktifkan alat atau input yang tidak tepercaya, hindari tingkat model yang lebih lama/lebih lemah.
## Onboarding (direkomendasikan)
@@ -99,7 +99,7 @@ Ini dapat menyiapkan model + autentikasi untuk penyedia umum, termasuk **langgan
- `models.providers` (penyedia kustom yang ditulis ke `models.json`)
-Ref model dinormalisasi ke huruf kecil. Alias penyedia seperti `z.ai/*` dinormalisasi menjadi `zai/*`.
+Ref model dinormalisasi menjadi huruf kecil. Alias penyedia seperti `z.ai/*` dinormalisasi menjadi `zai/*`.
Contoh konfigurasi penyedia (termasuk OpenCode) tersedia di [OpenCode](/id/providers/opencode).
@@ -114,23 +114,24 @@ openclaw config set agents.defaults.models '{"openai/gpt-5.4":{}}' --strict-json
- `openclaw config set` melindungi peta model/penyedia dari penimpaan yang tidak disengaja. Penetapan objek biasa ke `agents.defaults.models`, `models.providers`, atau `models.providers..models` ditolak jika akan menghapus entri yang sudah ada. Gunakan `--merge` untuk perubahan aditif; gunakan `--replace` hanya ketika nilai yang diberikan harus menjadi nilai target lengkap.
+ `openclaw config set` melindungi peta model/penyedia dari penimpaan tidak disengaja. Penetapan objek biasa ke `agents.defaults.models`, `models.providers`, atau `models.providers..models` ditolak jika akan menghapus entri yang sudah ada. Gunakan `--merge` untuk perubahan aditif; gunakan `--replace` hanya ketika nilai yang diberikan harus menjadi nilai target lengkap.
- Penyiapan penyedia interaktif dan `openclaw configure --section model` juga menggabungkan pemilihan berskala penyedia ke allowlist yang sudah ada, sehingga menambahkan Codex, Ollama, atau penyedia lain tidak menghapus entri model yang tidak terkait. Configure mempertahankan `agents.defaults.model.primary` yang sudah ada ketika autentikasi penyedia diterapkan ulang. Perintah pengaturan default eksplisit seperti `openclaw models auth login --provider --set-default` dan `openclaw models set ` tetap mengganti `agents.defaults.model.primary`.
+ Penyiapan penyedia interaktif dan `openclaw configure --section model` juga menggabungkan pilihan yang dicakup penyedia ke allowlist yang sudah ada, sehingga menambahkan Codex, Ollama, atau penyedia lain tidak menghapus entri model yang tidak terkait. Configure mempertahankan `agents.defaults.model.primary` yang sudah ada ketika autentikasi penyedia diterapkan ulang. Perintah penetapan default eksplisit seperti `openclaw models auth login --provider --set-default` dan `openclaw models set ` tetap mengganti `agents.defaults.model.primary`.
## "Model tidak diizinkan" (dan mengapa balasan berhenti)
-Jika `agents.defaults.models` diatur, itu menjadi **allowlist** untuk `/model` dan untuk override sesi. Ketika pengguna memilih model yang tidak ada dalam allowlist tersebut, OpenClaw mengembalikan:
+Jika `agents.defaults.models` ditetapkan, itu menjadi **allowlist** untuk `/model` dan untuk penimpaan sesi. Ketika pengguna memilih model yang tidak ada dalam allowlist tersebut, OpenClaw mengembalikan:
```
-Model "provider/model" is not allowed. Use /model to list available models.
+Model "provider/model" is not allowed. Use /models to list providers, or /models to list models.
+Add it with: openclaw config set agents.defaults.models '{"provider/model":{}}' --strict-json --merge
```
-Ini terjadi **sebelum** balasan normal dibuat, sehingga pesan dapat terasa seperti "tidak merespons." Perbaikannya adalah salah satu dari:
+Ini terjadi **sebelum** balasan normal dibuat, sehingga pesan dapat terasa seperti "tidak merespons." Perbaikannya adalah salah satu dari berikut:
- Tambahkan model ke `agents.defaults.models`, atau
- Kosongkan allowlist (hapus `agents.defaults.models`), atau
@@ -138,9 +139,11 @@ Ini terjadi **sebelum** balasan normal dibuat, sehingga pesan dapat terasa seper
-Untuk model lokal/GGUF, simpan ref lengkap berprefiks penyedia di allowlist,
+Ketika perintah yang ditolak menyertakan penimpaan runtime seperti `/model openai/gpt-5.5 --runtime codex`, perbaiki allowlist terlebih dahulu, lalu coba lagi perintah `/model ... --runtime ...` yang sama. Untuk eksekusi Codex native, model yang dipilih tetap `openai/gpt-5.5`; runtime `codex` memilih harness dan menggunakan autentikasi Codex secara terpisah.
+
+Untuk model lokal/GGUF, simpan ref lengkap berprefiks penyedia dalam allowlist,
misalnya `ollama/gemma4:26b`, `lmstudio/Gemma4-26b-a4-it-gguf`, atau
-provider/model persis yang ditampilkan oleh `openclaw models list --provider `.
+penyedia/model persis yang ditampilkan oleh `openclaw models list --provider `.
Nama file lokal polos atau nama tampilan tidak cukup ketika allowlist
aktif.
@@ -158,7 +161,7 @@ Contoh konfigurasi allowlist:
}
```
-## Beralih model di chat (`/model`)
+## Beralih model di obrolan (`/model`)
Anda dapat beralih model untuk sesi saat ini tanpa memulai ulang:
@@ -173,28 +176,28 @@ Anda dapat beralih model untuk sesi saat ini tanpa memulai ulang:
- `/model` (dan `/model list`) adalah pemilih ringkas bernomor (keluarga model + penyedia yang tersedia).
- - Di Discord, `/model` dan `/models` membuka pemilih interaktif dengan dropdown penyedia dan model plus langkah Submit.
- - Di Telegram, pemilihan pemilih `/models` berskala sesi; pemilihan tersebut tidak mengubah default persisten agen di `openclaw.json`.
- - `/models add` sudah tidak digunakan dan sekarang mengembalikan pesan penghentian penggunaan alih-alih mendaftarkan model dari chat.
+ - Di Discord, `/model` dan `/models` membuka pemilih interaktif dengan dropdown penyedia dan model ditambah langkah Kirim.
+ - Di Telegram, pilihan pemilih `/models` dicakup ke sesi; pilihan tersebut tidak mengubah default persisten agen di `openclaw.json`.
+ - `/models add` sudah tidak digunakan lagi dan sekarang mengembalikan pesan penghentian penggunaan alih-alih mendaftarkan model dari obrolan.
- `/model <#>` memilih dari pemilih tersebut.
- - `/model` langsung mempertahankan pemilihan sesi baru.
- - Jika agen idle, run berikutnya langsung menggunakan model baru.
- - Jika run sudah aktif, OpenClaw menandai peralihan langsung sebagai tertunda dan hanya memulai ulang ke model baru pada titik retry yang bersih.
- - Jika aktivitas alat atau output balasan sudah dimulai, peralihan tertunda dapat tetap mengantre hingga kesempatan retry berikutnya atau giliran pengguna berikutnya.
+ - `/model` mempertahankan pilihan sesi baru segera.
+ - Jika agen sedang idle, proses berikutnya langsung menggunakan model baru.
+ - Jika proses sudah aktif, OpenClaw menandai peralihan langsung sebagai tertunda dan hanya memulai ulang ke model baru pada titik percobaan ulang yang bersih.
+ - Jika aktivitas alat atau output balasan sudah dimulai, peralihan tertunda dapat tetap mengantre hingga peluang percobaan ulang berikutnya atau giliran pengguna berikutnya.
- Ref `/model` yang dipilih pengguna bersifat ketat untuk sesi tersebut: jika penyedia/model yang dipilih tidak dapat dijangkau, balasan gagal secara terlihat alih-alih diam-diam menjawab dari `agents.defaults.model.fallbacks`. Ini berbeda dari default yang dikonfigurasi dan model utama pekerjaan cron, yang masih dapat menggunakan rantai fallback.
- `/model status` adalah tampilan terperinci (kandidat autentikasi dan, jika dikonfigurasi, endpoint penyedia `baseUrl` + mode `api`).
-
- - Ref model di-parse dengan memisahkan pada `/` **pertama**. Gunakan `provider/model` saat mengetik `/model `.
+
+ - Ref model diurai dengan memisahkan pada `/` **pertama**. Gunakan `provider/model` saat mengetik `/model `.
- Jika ID model itu sendiri berisi `/` (gaya OpenRouter), Anda harus menyertakan prefiks penyedia (contoh: `/model openrouter/moonshotai/kimi-k2`).
- Jika Anda menghilangkan penyedia, OpenClaw menyelesaikan input dalam urutan ini:
1. kecocokan alias
2. kecocokan penyedia-terkonfigurasi unik untuk ID model tanpa prefiks yang persis itu
- 3. fallback usang ke penyedia default yang dikonfigurasi — jika penyedia tersebut tidak lagi mengekspos model default yang dikonfigurasi, OpenClaw sebagai gantinya fallback ke penyedia/model terkonfigurasi pertama untuk menghindari menampilkan default penyedia terhapus yang sudah basi.
+ 3. fallback lama ke penyedia default yang dikonfigurasi — jika penyedia tersebut tidak lagi mengekspos model default yang dikonfigurasi, OpenClaw sebagai gantinya kembali ke penyedia/model terkonfigurasi pertama untuk menghindari menampilkan default penyedia lama yang sudah dihapus.
@@ -227,10 +230,10 @@ openclaw models image-fallbacks clear
### `models list`
-Menampilkan model yang dikonfigurasi/tersedia autentikasi secara default. Flag yang berguna:
+Menampilkan model yang dikonfigurasi/tersedia-auth secara default. Flag yang berguna:
- Katalog lengkap. Menyertakan baris katalog statis milik penyedia bawaan sebelum autentikasi dikonfigurasi, sehingga tampilan khusus penemuan dapat menampilkan model yang tidak tersedia sampai Anda menambahkan kredensial penyedia yang sesuai.
+ Katalog lengkap. Menyertakan baris katalog statis bawaan milik penyedia sebelum auth dikonfigurasi, sehingga tampilan khusus penemuan dapat menampilkan model yang tidak tersedia sampai Anda menambahkan kredensial penyedia yang sesuai.
Hanya penyedia lokal.
@@ -242,26 +245,26 @@ Menampilkan model yang dikonfigurasi/tersedia autentikasi secara default. Flag y
Satu model per baris.
- Keluaran yang dapat dibaca mesin.
+ Output yang dapat dibaca mesin.
### `models status`
-Menampilkan model utama yang diselesaikan, fallback, model gambar, dan ringkasan autentikasi penyedia yang dikonfigurasi. Perintah ini juga menampilkan status kedaluwarsa OAuth untuk profil yang ditemukan di penyimpanan autentikasi (memperingatkan dalam 24 jam secara bawaan). `--plain` hanya mencetak model utama yang diselesaikan.
+Menampilkan model primer yang diselesaikan, fallback, model gambar, dan ikhtisar auth dari penyedia yang dikonfigurasi. Ini juga menampilkan status kedaluwarsa OAuth untuk profil yang ditemukan di penyimpanan auth (memperingatkan dalam 24 jam secara default). `--plain` hanya mencetak model primer yang diselesaikan.
-
- - Status OAuth selalu ditampilkan (dan disertakan dalam keluaran `--json`). Jika penyedia yang dikonfigurasi tidak memiliki kredensial, `models status` mencetak bagian **Autentikasi hilang**.
- - JSON menyertakan `auth.oauth` (jendela peringatan + profil) dan `auth.providers` (autentikasi efektif per penyedia, termasuk kredensial berbasis env). `auth.oauth` hanya untuk kesehatan profil penyimpanan autentikasi; penyedia khusus env tidak muncul di sana.
- - Gunakan `--check` untuk otomatisasi (keluar dengan `1` saat hilang/kedaluwarsa, `2` saat akan kedaluwarsa).
- - Gunakan `--probe` untuk pemeriksaan autentikasi langsung; baris pemeriksaan dapat berasal dari profil autentikasi, kredensial env, atau `models.json`.
- - Jika `auth.order.` eksplisit menghilangkan profil yang tersimpan, pemeriksaan melaporkan `excluded_by_auth_order` alih-alih mencobanya. Jika autentikasi ada tetapi tidak ada model yang dapat diperiksa untuk penyedia tersebut, pemeriksaan melaporkan `status: no_model`.
+
+ - Status OAuth selalu ditampilkan (dan disertakan dalam output `--json`). Jika penyedia yang dikonfigurasi tidak memiliki kredensial, `models status` mencetak bagian **Auth hilang**.
+ - JSON menyertakan `auth.oauth` (jendela peringatan + profil) dan `auth.providers` (auth efektif per penyedia, termasuk kredensial berbasis env). `auth.oauth` hanya kesehatan profil penyimpanan-auth; penyedia khusus env tidak muncul di sana.
+ - Gunakan `--check` untuk otomatisasi (exit `1` saat hilang/kedaluwarsa, `2` saat akan kedaluwarsa).
+ - Gunakan `--probe` untuk pemeriksaan auth langsung; baris probe dapat berasal dari profil auth, kredensial env, atau `models.json`.
+ - Jika `auth.order.` eksplisit menghilangkan profil tersimpan, probe melaporkan `excluded_by_auth_order` alih-alih mencobanya. Jika auth ada tetapi tidak ada model yang dapat diprobe yang bisa diselesaikan untuk penyedia tersebut, probe melaporkan `status: no_model`.
-Pilihan autentikasi bergantung pada penyedia/akun. Untuk host gateway yang selalu aktif, kunci API biasanya paling dapat diprediksi; penggunaan ulang Claude CLI dan profil OAuth/token Anthropic yang ada juga didukung.
+Pilihan auth bergantung pada penyedia/akun. Untuk host gateway yang selalu aktif, kunci API biasanya paling dapat diprediksi; penggunaan ulang Claude CLI serta profil OAuth/token Anthropic yang sudah ada juga didukung.
Contoh (Claude CLI):
@@ -273,10 +276,10 @@ openclaw models status
## Pemindaian (model gratis OpenRouter)
-`openclaw models scan` memeriksa **katalog model gratis** OpenRouter dan dapat secara opsional memeriksa dukungan alat dan gambar pada model.
+`openclaw models scan` memeriksa **katalog model gratis** OpenRouter dan dapat secara opsional memprobe model untuk dukungan alat dan gambar.
- Lewati pemeriksaan langsung (hanya metadata).
+ Lewati probe langsung (hanya metadata).
Ukuran parameter minimum (miliar).
@@ -298,10 +301,10 @@ openclaw models status
-Katalog `/models` OpenRouter bersifat publik, sehingga pemindaian khusus metadata dapat mencantumkan kandidat gratis tanpa kunci. Pemeriksaan dan inferensi tetap memerlukan kunci API OpenRouter (dari profil autentikasi atau `OPENROUTER_API_KEY`). Jika tidak ada kunci yang tersedia, `openclaw models scan` kembali ke keluaran khusus metadata dan membiarkan konfigurasi tidak berubah. Gunakan `--no-probe` untuk meminta mode khusus metadata secara eksplisit.
+Katalog `/models` OpenRouter bersifat publik, sehingga pemindaian hanya metadata dapat mencantumkan kandidat gratis tanpa kunci. Probe dan inferensi tetap memerlukan kunci API OpenRouter (dari profil auth atau `OPENROUTER_API_KEY`). Jika tidak ada kunci yang tersedia, `openclaw models scan` kembali ke output hanya metadata dan membiarkan konfigurasi tidak berubah. Gunakan `--no-probe` untuk meminta mode hanya metadata secara eksplisit.
-Hasil pemindaian diberi peringkat berdasarkan:
+Hasil pemindaian diperingkat berdasarkan:
1. Dukungan gambar
2. Latensi alat
@@ -311,32 +314,32 @@ Hasil pemindaian diberi peringkat berdasarkan:
Input:
- Daftar `/models` OpenRouter (filter `:free`)
-- Pemeriksaan langsung memerlukan kunci API OpenRouter dari profil autentikasi atau `OPENROUTER_API_KEY` (lihat [Variabel lingkungan](/id/help/environment))
+- Probe langsung memerlukan kunci API OpenRouter dari profil auth atau `OPENROUTER_API_KEY` (lihat [Variabel lingkungan](/id/help/environment))
- Filter opsional: `--max-age-days`, `--min-params`, `--provider`, `--max-candidates`
-- Kontrol permintaan/pemeriksaan: `--timeout`, `--concurrency`
+- Kontrol permintaan/probe: `--timeout`, `--concurrency`
-Saat pemeriksaan langsung berjalan di TTY, Anda dapat memilih fallback secara interaktif. Dalam mode non-interaktif, berikan `--yes` untuk menerima bawaan. Hasil khusus metadata bersifat informatif; `--set-default` dan `--set-image` memerlukan pemeriksaan langsung agar OpenClaw tidak mengonfigurasi model OpenRouter tanpa kunci yang tidak dapat digunakan.
+Saat probe langsung berjalan di TUI, Anda dapat memilih fallback secara interaktif. Dalam mode non-interaktif, berikan `--yes` untuk menerima default. Hasil hanya metadata bersifat informatif; `--set-default` dan `--set-image` memerlukan probe langsung agar OpenClaw tidak mengonfigurasi model OpenRouter tanpa kunci yang tidak dapat digunakan.
-## Registri model (`models.json`)
+## Registry model (`models.json`)
-Penyedia khusus di `models.providers` ditulis ke dalam `models.json` di bawah direktori agen (bawaan `~/.openclaw/agents//agent/models.json`). File ini digabungkan secara bawaan kecuali `models.mode` diatur ke `replace`.
+Penyedia kustom di `models.providers` ditulis ke `models.json` di bawah direktori agen (default `~/.openclaw/agents//agent/models.json`). File ini digabungkan secara default kecuali `models.mode` diatur ke `replace`.
Prioritas mode penggabungan untuk ID penyedia yang cocok:
- `baseUrl` tidak kosong yang sudah ada di `models.json` agen menang.
- - `apiKey` tidak kosong di `models.json` agen hanya menang ketika penyedia tersebut tidak dikelola SecretRef dalam konteks konfigurasi/profil autentikasi saat ini.
- - Nilai `apiKey` penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`ENV_VAR_NAME` untuk referensi env, `secretref-managed` untuk referensi file/exec) alih-alih mempertahankan rahasia yang telah diselesaikan.
+ - `apiKey` tidak kosong di `models.json` agen hanya menang saat penyedia tersebut tidak dikelola SecretRef dalam konteks konfigurasi/profil-auth saat ini.
+ - Nilai `apiKey` penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`ENV_VAR_NAME` untuk referensi env, `secretref-managed` untuk referensi file/exec), bukan mempertahankan rahasia yang sudah diselesaikan.
- Nilai header penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`secretref-env:ENV_VAR_NAME` untuk referensi env, `secretref-managed` untuk referensi file/exec).
- - `apiKey`/`baseUrl` agen yang kosong atau hilang fallback ke konfigurasi `models.providers`.
- - Kolom penyedia lainnya disegarkan dari konfigurasi dan data katalog yang dinormalisasi.
+ - `apiKey`/`baseUrl` agen yang kosong atau hilang kembali ke konfigurasi `models.providers`.
+ - Field penyedia lainnya disegarkan dari konfigurasi dan data katalog yang dinormalisasi.
-Persistensi penanda bersumber otoritatif: OpenClaw menulis penanda dari snapshot konfigurasi sumber aktif (pra-resolusi), bukan dari nilai rahasia runtime yang telah diselesaikan. Ini berlaku setiap kali OpenClaw membuat ulang `models.json`, termasuk jalur yang didorong perintah seperti `openclaw agent`.
+Persistensi penanda bersifat otoritatif-sumber: OpenClaw menulis penanda dari snapshot konfigurasi sumber aktif (pra-resolusi), bukan dari nilai rahasia runtime yang sudah diselesaikan. Ini berlaku setiap kali OpenClaw meregenerasi `models.json`, termasuk jalur berbasis perintah seperti `openclaw agent`.
## Terkait
@@ -345,6 +348,6 @@ Persistensi penanda bersumber otoritatif: OpenClaw menulis penanda dari snapshot
- [Referensi konfigurasi](/id/gateway/config-agents#agent-defaults) — kunci konfigurasi model
- [Pembuatan gambar](/id/tools/image-generation) — konfigurasi model gambar
- [Failover model](/id/concepts/model-failover) — rantai fallback
-- [Penyedia model](/id/concepts/model-providers) — perutean dan autentikasi penyedia
+- [Penyedia model](/id/concepts/model-providers) — perutean penyedia dan auth
- [Pembuatan musik](/id/tools/music-generation) — konfigurasi model musik
- [Pembuatan video](/id/tools/video-generation) — konfigurasi model video
diff --git a/docs/id/concepts/qa-e2e-automation.md b/docs/id/concepts/qa-e2e-automation.md
index fdd299bf1..5657045ae 100644
--- a/docs/id/concepts/qa-e2e-automation.md
+++ b/docs/id/concepts/qa-e2e-automation.md
@@ -1,60 +1,66 @@
---
read_when:
- - Memahami bagaimana susunan QA saling terintegrasi
+ - Memahami bagaimana stack QA saling terkait
- Memperluas qa-lab, qa-channel, atau adapter transport
- - Menambahkan skenario QA yang didukung repo
- - Membangun otomatisasi QA dengan realisme lebih tinggi untuk dasbor Gateway
-summary: 'Ikhtisar stack QA: qa-lab, qa-channel, skenario berbasis repo, lane transport live, adaptor transport, dan pelaporan.'
-title: Ikhtisar QA
+ - Menambahkan skenario QA berbasis repo
+ - Membangun otomatisasi QA dengan tingkat realisme lebih tinggi di seputar dasbor Gateway
+summary: 'Ikhtisar tumpukan QA: qa-lab, qa-channel, skenario berbasis repo, jalur transport langsung, adapter transport, dan pelaporan.'
+title: Gambaran umum QA
x-i18n:
- generated_at: "2026-05-04T07:04:32Z"
+ generated_at: "2026-05-05T01:45:14Z"
model: gpt-5.5
provider: openai
- source_hash: 067f5aa0831724659ae36d548ef2e7bd28b40aad9cef45f325a01a2748003b29
+ source_hash: 83adbe934d73265a1b47ee463c98fdd3eddfb1cd063d3a46a83dfc7568df0a96
source_path: concepts/qa-e2e-automation.md
workflow: 16
---
-Stack QA privat dimaksudkan untuk menguji OpenClaw dengan cara yang lebih realistis dan berbentuk channel daripada yang bisa dilakukan oleh satu pengujian unit.
+Stack QA privat dimaksudkan untuk menguji OpenClaw dengan cara yang lebih realistis dan
+berbentuk kanal dibandingkan yang dapat dilakukan satu pengujian unit.
Bagian saat ini:
-- `extensions/qa-channel`: channel pesan sintetis dengan permukaan DM, channel, thread, reaksi, edit, dan hapus.
-- `extensions/qa-lab`: UI debugger dan bus QA untuk mengamati transkrip, menyuntikkan pesan masuk, dan mengekspor laporan Markdown.
-- `extensions/qa-matrix`, Plugin runner mendatang: adaptor transport langsung yang menggerakkan channel nyata di dalam Gateway QA anak.
-- `qa/`: aset seed berbasis repo untuk tugas kickoff dan skenario QA baseline.
-- [Mantis](/id/concepts/mantis): verifikasi langsung sebelum dan sesudah untuk bug yang membutuhkan transport nyata, tangkapan layar browser, status VM, dan bukti PR.
+- `extensions/qa-channel`: kanal pesan sintetis dengan permukaan DM, kanal, thread,
+ reaksi, edit, dan hapus.
+- `extensions/qa-lab`: UI debugger dan bus QA untuk mengamati transkrip,
+ menyuntikkan pesan masuk, dan mengekspor laporan Markdown.
+- `extensions/qa-matrix`, plugin runner mendatang: adapter transport langsung yang
+ menggerakkan kanal nyata di dalam Gateway QA anak.
+- `qa/`: aset seed berbasis repo untuk tugas kickoff dan skenario QA
+ baseline.
+- [Mantis](/id/concepts/mantis): verifikasi langsung sebelum dan sesudah untuk bug yang
+ memerlukan transport nyata, tangkapan layar browser, status VM, dan bukti PR.
## Permukaan perintah
Setiap alur QA berjalan di bawah `pnpm openclaw qa `. Banyak yang memiliki alias skrip `pnpm qa:*`; kedua bentuk didukung.
-| Perintah | Tujuan |
-| --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `qa run` | Pemeriksaan mandiri QA bawaan; menulis laporan Markdown. |
-| `qa suite` | Jalankan skenario berbasis repo terhadap lane Gateway QA. Alias: `pnpm openclaw qa suite --runner multipass` untuk VM Linux sekali pakai. |
-| `qa coverage` | Cetak inventaris cakupan skenario markdown (`--json` untuk output mesin). |
-| `qa parity-report` | Bandingkan dua berkas `qa-suite-summary.json` dan tulis laporan paritas agentik. |
-| `qa character-eval` | Jalankan skenario QA karakter di beberapa model langsung dengan laporan yang dinilai. Lihat [Pelaporan](#reporting). |
-| `qa manual` | Jalankan prompt sekali pakai terhadap lane penyedia/model yang dipilih. |
-| `qa ui` | Mulai UI debugger QA dan bus QA lokal (alias: `pnpm qa:lab:ui`). |
-| `qa docker-build-image` | Bangun image Docker QA prapaket. |
-| `qa docker-scaffold` | Tulis scaffold docker-compose untuk dasbor QA + lane Gateway. |
-| `qa up` | Bangun situs QA, mulai stack yang didukung Docker, cetak URL (alias: `pnpm qa:lab:up`; varian `:fast` menambahkan `--use-prebuilt-image --bind-ui-dist --skip-ui-build`). |
-| `qa aimock` | Mulai hanya server penyedia AIMock. |
-| `qa mock-openai` | Mulai hanya server penyedia `mock-openai` yang sadar skenario. |
-| `qa credentials doctor` / `add` / `list` / `remove` | Kelola pool kredensial Convex bersama. |
-| `qa matrix` | Lane transport langsung terhadap homeserver Tuwunel sekali pakai. Lihat [QA Matrix](/id/concepts/qa-matrix). |
-| `qa telegram` | Lane transport langsung terhadap grup Telegram privat nyata. |
-| `qa discord` | Lane transport langsung terhadap channel guild Discord privat nyata. |
-| `qa slack` | Lane transport langsung terhadap channel Slack privat nyata. |
-| `qa mantis` | Runner verifikasi sebelum dan sesudah untuk bug transport langsung, dengan bukti reaksi status Discord, smoke desktop/browser Crabbox, dan smoke Slack-di-VNC. Lihat [Mantis](/id/concepts/mantis). |
+| Perintah | Tujuan |
+| --------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `qa run` | Pemeriksaan mandiri QA bawaan; menulis laporan Markdown. |
+| `qa suite` | Menjalankan skenario berbasis repo terhadap jalur Gateway QA. Alias: `pnpm openclaw qa suite --runner multipass` untuk VM Linux sekali pakai. |
+| `qa coverage` | Mencetak inventaris cakupan skenario markdown (`--json` untuk keluaran mesin). |
+| `qa parity-report` | Membandingkan dua file `qa-suite-summary.json` dan menulis laporan paritas agentik. |
+| `qa character-eval` | Menjalankan skenario QA karakter di beberapa model langsung dengan laporan yang dinilai. Lihat [Pelaporan](#reporting). |
+| `qa manual` | Menjalankan prompt sekali jalan terhadap jalur provider/model yang dipilih. |
+| `qa ui` | Memulai UI debugger QA dan bus QA lokal (alias: `pnpm qa:lab:ui`). |
+| `qa docker-build-image` | Membangun image Docker QA yang sudah dipanggang sebelumnya. |
+| `qa docker-scaffold` | Menulis scaffold docker-compose untuk dasbor QA + jalur Gateway. |
+| `qa up` | Membangun situs QA, memulai stack berbasis Docker, mencetak URL (alias: `pnpm qa:lab:up`; varian `:fast` menambahkan `--use-prebuilt-image --bind-ui-dist --skip-ui-build`). |
+| `qa aimock` | Memulai hanya server provider AIMock. |
+| `qa mock-openai` | Memulai hanya server provider `mock-openai` yang sadar skenario. |
+| `qa credentials doctor` / `add` / `list` / `remove` | Mengelola pool kredensial Convex bersama. |
+| `qa matrix` | Jalur transport langsung terhadap homeserver Tuwunel sekali pakai. Lihat [QA Matrix](/id/concepts/qa-matrix). |
+| `qa telegram` | Jalur transport langsung terhadap grup Telegram privat nyata. |
+| `qa discord` | Jalur transport langsung terhadap kanal guild Discord privat nyata. |
+| `qa slack` | Jalur transport langsung terhadap kanal Slack privat nyata. |
+| `qa mantis` | Runner verifikasi sebelum dan sesudah untuk bug transport langsung, dengan bukti reaksi status Discord, smoke desktop/browser Crabbox, dan smoke Slack-di-VNC. Lihat [Mantis](/id/concepts/mantis). |
## Alur operator
Alur operator QA saat ini adalah situs QA dua panel:
-- Kiri: dasbor Gateway (Control UI) dengan agent.
+- Kiri: dasbor Gateway (UI Kontrol) dengan agen.
- Kanan: QA Lab, menampilkan transkrip bergaya Slack dan rencana skenario.
Jalankan dengan:
@@ -63,9 +69,13 @@ Jalankan dengan:
pnpm qa:lab:up
```
-Itu membangun situs QA, memulai lane Gateway yang didukung Docker, dan mengekspos halaman QA Lab tempat operator atau loop otomasi dapat memberi agent misi QA, mengamati perilaku channel nyata, serta mencatat apa yang berhasil, gagal, atau tetap terblokir.
+Itu membangun situs QA, memulai jalur Gateway berbasis Docker, dan mengekspos
+halaman QA Lab tempat operator atau loop otomasi dapat memberi agen sebuah misi
+QA, mengamati perilaku kanal nyata, dan mencatat apa yang berhasil, gagal, atau
+tetap terblokir.
-Untuk iterasi UI QA Lab yang lebih cepat tanpa membangun ulang image Docker setiap kali, mulai stack dengan bundle QA Lab yang di-bind-mount:
+Untuk iterasi UI QA Lab lokal yang lebih cepat tanpa membangun ulang image Docker setiap kali,
+mulai stack dengan bundel QA Lab yang di-mount melalui bind:
```bash
pnpm openclaw qa docker-build-image
@@ -74,7 +84,9 @@ pnpm qa:lab:up:fast
pnpm qa:lab:watch
```
-`qa:lab:up:fast` mempertahankan layanan Docker pada image prabangun dan melakukan bind-mount `extensions/qa-lab/web/dist` ke dalam container `qa-lab`. `qa:lab:watch` membangun ulang bundle tersebut saat berubah, dan browser memuat ulang otomatis ketika hash aset QA Lab berubah.
+`qa:lab:up:fast` mempertahankan layanan Docker pada image yang sudah dibangun sebelumnya dan melakukan bind-mount
+`extensions/qa-lab/web/dist` ke dalam container `qa-lab`. `qa:lab:watch`
+membangun ulang bundel tersebut saat ada perubahan, dan browser otomatis memuat ulang ketika hash aset QA Lab berubah.
Untuk smoke trace OpenTelemetry lokal, jalankan:
@@ -82,19 +94,29 @@ Untuk smoke trace OpenTelemetry lokal, jalankan:
pnpm qa:otel:smoke
```
-Skrip tersebut memulai receiver trace OTLP/HTTP lokal, menjalankan skenario QA `otel-trace-smoke` dengan Plugin `diagnostics-otel` diaktifkan, lalu mendekode span protobuf yang diekspor dan menegaskan bentuk yang kritis untuk rilis: `openclaw.run`, `openclaw.harness.run`, `openclaw.model.call`, `openclaw.context.assembled`, dan `openclaw.message.delivery` harus ada; panggilan model tidak boleh mengekspor `StreamAbandoned` pada turn yang berhasil; ID diagnostik mentah dan atribut `openclaw.content.*` harus tetap berada di luar trace. Ini menulis `otel-smoke-summary.json` di sebelah artefak suite QA.
+Skrip itu memulai receiver trace OTLP/HTTP lokal, menjalankan
+skenario QA `otel-trace-smoke` dengan plugin `diagnostics-otel` diaktifkan, lalu
+mendekode span protobuf yang diekspor dan menegaskan bentuk penting-rilis:
+`openclaw.run`, `openclaw.harness.run`, `openclaw.model.call`,
+`openclaw.context.assembled`, dan `openclaw.message.delivery` harus ada;
+pemanggilan model tidak boleh mengekspor `StreamAbandoned` pada giliran yang berhasil; ID diagnostik mentah dan
+atribut `openclaw.content.*` harus tetap berada di luar trace. Skrip ini menulis
+`otel-smoke-summary.json` di sebelah artefak suite QA.
-QA observabilitas tetap hanya untuk checkout sumber. Tarball npm sengaja menghilangkan QA Lab, sehingga lane rilis Docker paket tidak menjalankan perintah `qa`. Gunakan `pnpm qa:otel:smoke` dari checkout sumber yang sudah dibangun saat mengubah instrumentasi diagnostik.
+QA observabilitas tetap hanya untuk checkout sumber. Tarball npm sengaja menghilangkan
+QA Lab, sehingga jalur rilis Docker paket tidak menjalankan perintah `qa`. Gunakan
+`pnpm qa:otel:smoke` dari checkout sumber yang sudah dibangun saat mengubah instrumentasi
+diagnostik.
-Untuk lane smoke Matrix dengan transport nyata, jalankan:
+Untuk jalur smoke Matrix yang benar-benar memakai transport nyata, jalankan:
```bash
pnpm openclaw qa matrix --profile fast --fail-fast
```
-Referensi CLI lengkap, katalog profil/skenario, variabel env, dan tata letak artefak untuk lane ini ada di [QA Matrix](/id/concepts/qa-matrix). Sekilas: ini menyediakan homeserver Tuwunel sekali pakai di Docker, mendaftarkan pengguna driver/SUT/observer sementara, menjalankan Plugin Matrix nyata di dalam Gateway QA anak yang dicakup untuk transport tersebut (tanpa `qa-channel`), lalu menulis laporan Markdown, ringkasan JSON, artefak observed-events, dan log output gabungan di bawah `.artifacts/qa-e2e/matrix-/`.
+Referensi CLI lengkap, katalog profil/skenario, env vars, dan tata letak artefak untuk jalur ini ada di [QA Matrix](/id/concepts/qa-matrix). Sekilas: jalur ini menyediakan homeserver Tuwunel sekali pakai di Docker, mendaftarkan pengguna driver/SUT/observer sementara, menjalankan plugin Matrix nyata di dalam Gateway QA anak yang dibatasi ke transport tersebut (tanpa `qa-channel`), lalu menulis laporan Markdown, ringkasan JSON, artefak observed-events, dan log keluaran gabungan di bawah `.artifacts/qa-e2e/matrix-/`.
-Untuk lane smoke Telegram, Discord, dan Slack dengan transport nyata:
+Untuk jalur smoke Telegram, Discord, dan Slack yang benar-benar memakai transport nyata:
```bash
pnpm openclaw qa telegram
@@ -102,9 +124,9 @@ pnpm openclaw qa discord
pnpm openclaw qa slack
```
-Mereka menargetkan channel nyata yang sudah ada dengan dua bot (driver + SUT). Variabel env yang diperlukan, daftar skenario, artefak output, dan pool kredensial Convex didokumentasikan dalam [Referensi QA Telegram, Discord, dan Slack](#telegram-discord-and-slack-qa-reference) di bawah.
+Jalur tersebut menargetkan kanal nyata yang sudah ada dengan dua bot (driver + SUT). Env vars yang diperlukan, daftar skenario, artefak keluaran, dan pool kredensial Convex didokumentasikan dalam [Referensi QA Telegram, Discord, dan Slack](#telegram-discord-and-slack-qa-reference) di bawah.
-Untuk run VM desktop Slack penuh dengan penyelamatan VNC, jalankan:
+Untuk menjalankan VM desktop Slack penuh dengan penyelamatan VNC, jalankan:
```bash
pnpm openclaw qa mantis slack-desktop-smoke \
@@ -113,48 +135,56 @@ pnpm openclaw qa mantis slack-desktop-smoke \
--keep-lease
```
-Perintah itu menyewa mesin desktop/browser Crabbox, menjalankan lane langsung Slack di dalam VM, membuka Slack Web di browser VNC, menangkap desktop, dan menyalin `slack-qa/` plus `slack-desktop-smoke.png` kembali ke direktori artefak Mantis. Gunakan ulang `--lease-id ` setelah masuk ke Slack Web secara manual melalui VNC. Dengan `--gateway-setup`, Mantis meninggalkan Gateway Slack OpenClaw persisten yang berjalan di dalam VM pada port `38973`; tanpa itu, perintah menjalankan lane QA Slack bot-ke-bot normal dan keluar setelah penangkapan artefak.
+Perintah itu menyewa mesin desktop/browser Crabbox, menjalankan jalur langsung Slack
+di dalam VM, membuka Slack Web di browser VNC, menangkap desktop, dan
+menyalin `slack-qa/` serta `slack-desktop-smoke.png` kembali ke direktori artefak
+Mantis. Gunakan ulang `--lease-id ` setelah masuk ke Slack Web secara manual
+melalui VNC. Dengan `--gateway-setup`, Mantis meninggalkan Gateway Slack OpenClaw
+persisten yang berjalan di dalam VM pada port `38973`; tanpa itu, perintah menjalankan
+jalur QA Slack bot-ke-bot normal dan keluar setelah pengambilan artefak.
-Sebelum menggunakan kredensial langsung yang dipool, jalankan:
+Sebelum menggunakan kredensial langsung dari pool, jalankan:
```bash
pnpm openclaw qa credentials doctor
```
-Doctor memeriksa env broker Convex, memvalidasi pengaturan endpoint, dan memverifikasi keterjangkauan admin/list saat rahasia maintainer tersedia. Ini hanya melaporkan status ditetapkan/hilang untuk rahasia.
+Doctor memeriksa env broker Convex, memvalidasi pengaturan endpoint, dan memverifikasi keterjangkauan admin/list ketika rahasia maintainer ada. Ini hanya melaporkan status tersetel/hilang untuk rahasia.
## Cakupan transport langsung
-Lane transport langsung berbagi satu kontrak alih-alih masing-masing menciptakan bentuk daftar skenario sendiri. `qa-channel` adalah suite perilaku produk sintetis yang luas dan bukan bagian dari matriks cakupan transport langsung.
+Jalur transport langsung berbagi satu kontrak alih-alih masing-masing membuat bentuk daftar skenarionya sendiri. `qa-channel` adalah suite perilaku produk sintetis yang luas dan bukan bagian dari matriks cakupan transport langsung.
-| Lane | Canary | Gating mention | Bot-ke-bot | Blokir allowlist | Balasan tingkat atas | Lanjutkan setelah restart | Tindak lanjut thread | Isolasi thread | Pengamatan reaksi | Perintah bantuan | Registrasi perintah native |
-| -------- | ------ | -------------- | ---------- | ---------------- | -------------------- | ------------------------- | --------------------- | -------------- | ----------------- | ---------------- | -------------------------- |
-| Matrix | x | x | x | x | x | x | x | x | x | | |
-| Telegram | x | x | x | | | | | | | x | |
-| Discord | x | x | x | | | | | | | | x |
-| Slack | x | x | x | | | | | | | | |
+| Jalur | Canary | Gating mention | Bot-ke-bot | Blokir allowlist | Balasan level atas | Lanjut setelah restart | Tindak lanjut thread | Isolasi thread | Pengamatan reaksi | Perintah bantuan | Registrasi perintah native |
+| -------- | ------ | -------------- | ---------- | ---------------- | ------------------ | ---------------------- | -------------------- | -------------- | ----------------- | ---------------- | -------------------------- |
+| Matrix | x | x | x | x | x | x | x | x | x | | |
+| Telegram | x | x | x | | | | | | | x | |
+| Discord | x | x | x | | | | | | | | x |
+| Slack | x | x | x | | | | | | | | |
-Ini mempertahankan `qa-channel` sebagai suite perilaku produk yang luas, sementara Matrix, Telegram, dan transport langsung mendatang berbagi satu checklist kontrak transport yang eksplisit.
+Ini mempertahankan `qa-channel` sebagai suite perilaku produk yang luas sementara Matrix,
+Telegram, dan transport langsung mendatang berbagi satu checklist kontrak transport yang
+eksplisit.
-Untuk lane VM Linux sekali pakai tanpa membawa Docker ke jalur QA, jalankan:
+Untuk jalur VM Linux sekali pakai tanpa membawa Docker ke jalur QA, jalankan:
```bash
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
```
-Ini mem-boot guest Multipass baru, menginstal dependensi, membangun OpenClaw
+Ini mem-boot guest Multipass baru, memasang dependensi, membangun OpenClaw
di dalam guest, menjalankan `qa suite`, lalu menyalin laporan QA normal dan
-ringkasan kembali ke `.artifacts/qa-e2e/...` pada host.
-Ini menggunakan kembali perilaku pemilihan skenario yang sama seperti `qa suite` pada host.
+ringkasan kembali ke `.artifacts/qa-e2e/...` di host.
+Ini menggunakan ulang perilaku pemilihan skenario yang sama seperti `qa suite` di host.
Eksekusi suite host dan Multipass menjalankan beberapa skenario terpilih secara paralel
-dengan worker Gateway yang terisolasi secara default. `qa-channel` secara default menggunakan konkurensi
+dengan worker gateway terisolasi secara bawaan. `qa-channel` secara bawaan memakai konkurensi
4, dibatasi oleh jumlah skenario yang dipilih. Gunakan `--concurrency ` untuk menyesuaikan
jumlah worker, atau `--concurrency 1` untuk eksekusi serial.
-Perintah keluar dengan kode non-nol ketika ada skenario yang gagal. Gunakan `--allow-failures` ketika
+Perintah keluar dengan non-zero ketika skenario mana pun gagal. Gunakan `--allow-failures` ketika
Anda menginginkan artefak tanpa kode keluar gagal.
Eksekusi live meneruskan input auth QA yang didukung dan praktis untuk
-guest: kunci provider berbasis env, path konfigurasi provider live QA, dan
-`CODEX_HOME` ketika ada. Simpan `--output-dir` di bawah root repo agar guest
+guest: kunci penyedia berbasis env, jalur config penyedia live QA, dan
+`CODEX_HOME` jika ada. Simpan `--output-dir` di bawah root repo agar guest
dapat menulis kembali melalui workspace yang di-mount.
## Referensi QA Telegram, Discord, dan Slack
@@ -165,19 +195,19 @@ Matrix memiliki [halaman khusus](/id/concepts/qa-matrix) karena jumlah skenarion
Lane ini didaftarkan melalui `extensions/qa-lab/src/live-transports/shared/live-transport-cli.ts` dan menerima flag yang sama:
-| Flag | Default | Deskripsi |
+| Flag | Bawaan | Deskripsi |
| ------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
-| `--scenario ` | — | Jalankan hanya skenario ini. Dapat diulang. |
-| `--output-dir ` | `/.artifacts/qa-e2e/{telegram,discord,slack}-` | Tempat laporan/ringkasan/pesan teramati dan log output ditulis. Path relatif di-resolve terhadap `--repo-root`. |
-| `--repo-root ` | `process.cwd()` | Root repositori ketika dipanggil dari cwd netral. |
-| `--sut-account ` | `sut` | Id akun sementara di dalam konfigurasi Gateway QA. |
-| `--provider-mode ` | `live-frontier` | `mock-openai` atau `live-frontier` (`live-openai` lama masih berfungsi). |
-| `--model ` / `--alt-model ` | default provider | Ref model utama/alternatif. |
-| `--fast` | mati | Mode cepat provider jika didukung. |
-| `--credential-source ` | `env` | Lihat [pool kredensial Convex](#convex-credential-pool). |
-| `--credential-role ` | `ci` di CI, selain itu `maintainer` | Peran yang digunakan ketika `--credential-source convex`. |
+| `--scenario ` | — | Jalankan hanya skenario ini. Dapat diulang. |
+| `--output-dir ` | `/.artifacts/qa-e2e/{telegram,discord,slack}-` | Tempat laporan/ringkasan/pesan teramati dan log output ditulis. Jalur relatif diselesaikan terhadap `--repo-root`. |
+| `--repo-root ` | `process.cwd()` | Root repositori saat memanggil dari cwd netral. |
+| `--sut-account ` | `sut` | Id akun sementara di dalam config gateway QA. |
+| `--provider-mode ` | `live-frontier` | `mock-openai` atau `live-frontier` (`live-openai` legacy masih berfungsi). |
+| `--model ` / `--alt-model ` | bawaan penyedia | Ref model utama/alternatif. |
+| `--fast` | nonaktif | Mode cepat penyedia jika didukung. |
+| `--credential-source ` | `env` | Lihat [pool kredensial Convex](#convex-credential-pool). |
+| `--credential-role ` | `ci` di CI, selain itu `maintainer` | Role yang digunakan ketika `--credential-source convex`. |
-Setiap lane keluar dengan kode non-nol pada skenario yang gagal. `--allow-failures` menulis artefak tanpa menetapkan kode keluar gagal.
+Setiap lane keluar dengan non-zero pada skenario yang gagal. `--allow-failures` menulis artefak tanpa menetapkan kode keluar gagal.
### QA Telegram
@@ -185,9 +215,9 @@ Setiap lane keluar dengan kode non-nol pada skenario yang gagal. `--allow-failur
pnpm openclaw qa telegram
```
-Menargetkan satu grup Telegram privat nyata dengan dua bot berbeda (driver + SUT). Bot SUT harus memiliki nama pengguna Telegram; observasi bot-ke-bot bekerja paling baik ketika kedua bot mengaktifkan **Bot-to-Bot Communication Mode** di `@BotFather`.
+Menargetkan satu grup Telegram privat nyata dengan dua bot berbeda (driver + SUT). Bot SUT harus memiliki username Telegram; observasi bot-ke-bot bekerja paling baik ketika kedua bot mengaktifkan **Bot-to-Bot Communication Mode** di `@BotFather`.
-Env wajib ketika `--credential-source env`:
+Env yang diperlukan ketika `--credential-source env`:
- `OPENCLAW_QA_TELEGRAM_GROUP_ID` — id chat numerik (string).
- `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`
@@ -195,7 +225,7 @@ Env wajib ketika `--credential-source env`:
Opsional:
-- `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1` mempertahankan isi pesan dalam artefak pesan teramati (default menyunting).
+- `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1` mempertahankan body pesan dalam artefak pesan teramati (bawaan menyamarkan).
Skenario (`extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts:44`):
@@ -211,8 +241,8 @@ Skenario (`extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.
Artefak output:
- `telegram-qa-report.md`
-- `telegram-qa-summary.json` — menyertakan RTT per-balasan (driver mengirim → balasan SUT teramati) dimulai dari canary.
-- `telegram-qa-observed-messages.json` — isi disunting kecuali `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1`.
+- `telegram-qa-summary.json` — mencakup RTT per-balasan (driver mengirim → balasan SUT teramati) dimulai dengan canary.
+- `telegram-qa-observed-messages.json` — body disamarkan kecuali `OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1`.
### QA Discord
@@ -220,28 +250,28 @@ Artefak output:
pnpm openclaw qa discord
```
-Menargetkan satu channel guild Discord privat nyata dengan dua bot: bot driver yang dikendalikan oleh harness dan bot SUT yang dimulai oleh Gateway OpenClaw anak melalui Plugin Discord bawaan. Memverifikasi penanganan mention channel, bahwa bot SUT telah mendaftarkan perintah native `/help` dengan Discord, dan skenario bukti Mantis opt-in.
+Menargetkan satu channel guild Discord privat nyata dengan dua bot: bot driver yang dikontrol oleh harness dan bot SUT yang dimulai oleh Gateway OpenClaw anak melalui Plugin Discord yang dibundel. Memverifikasi penanganan mention channel, bahwa bot SUT telah mendaftarkan perintah native `/help` dengan Discord, dan skenario bukti Mantis opt-in.
-Env wajib ketika `--credential-source env`:
+Env yang diperlukan ketika `--credential-source env`:
- `OPENCLAW_QA_DISCORD_GUILD_ID`
- `OPENCLAW_QA_DISCORD_CHANNEL_ID`
- `OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN`
- `OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN`
-- `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` — harus cocok dengan id pengguna bot SUT yang dikembalikan oleh Discord (lane gagal cepat jika tidak).
+- `OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID` — harus cocok dengan id pengguna bot SUT yang dikembalikan oleh Discord (jika tidak, lane gagal cepat).
Opsional:
-- `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1` mempertahankan isi pesan dalam artefak pesan teramati.
+- `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1` mempertahankan body pesan dalam artefak pesan teramati.
Skenario (`extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts:36`):
- `discord-canary`
- `discord-mention-gating`
- `discord-native-help-command-registration`
-- `discord-status-reactions-tool-only` — skenario Mantis opt-in. Berjalan sendiri karena mengalihkan SUT ke balasan guild selalu aktif, hanya tool, dengan `messages.statusReactions.enabled=true`, lalu menangkap timeline reaksi REST plus artefak visual HTML/PNG.
+- `discord-status-reactions-tool-only` — skenario Mantis opt-in. Berjalan sendiri karena mengalihkan SUT ke balasan guild selalu aktif, hanya tool dengan `messages.statusReactions.enabled=true`, lalu menangkap timeline reaksi REST plus artefak visual HTML/PNG.
-Jalankan skenario reaksi status Mantis secara eksplisit:
+Jalankan skenario reaksi-status Mantis secara eksplisit:
```bash
pnpm openclaw qa discord \
@@ -256,8 +286,8 @@ Artefak output:
- `discord-qa-report.md`
- `discord-qa-summary.json`
-- `discord-qa-observed-messages.json` — isi disunting kecuali `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1`.
-- `discord-qa-reaction-timelines.json` dan `discord-status-reactions-tool-only-timeline.png` ketika skenario reaksi status berjalan.
+- `discord-qa-observed-messages.json` — body disamarkan kecuali `OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1`.
+- `discord-qa-reaction-timelines.json` dan `discord-status-reactions-tool-only-timeline.png` ketika skenario reaksi-status berjalan.
### QA Slack
@@ -265,9 +295,9 @@ Artefak output:
pnpm openclaw qa slack
```
-Menargetkan satu channel Slack privat nyata dengan dua bot berbeda: bot driver yang dikendalikan oleh harness dan bot SUT yang dimulai oleh Gateway OpenClaw anak melalui Plugin Slack bawaan.
+Menargetkan satu channel Slack privat nyata dengan dua bot berbeda: bot driver yang dikontrol oleh harness dan bot SUT yang dimulai oleh Gateway OpenClaw anak melalui Plugin Slack yang dibundel.
-Env wajib ketika `--credential-source env`:
+Env yang diperlukan ketika `--credential-source env`:
- `OPENCLAW_QA_SLACK_CHANNEL_ID`
- `OPENCLAW_QA_SLACK_DRIVER_BOT_TOKEN`
@@ -276,7 +306,7 @@ Env wajib ketika `--credential-source env`:
Opsional:
-- `OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1` mempertahankan isi pesan dalam artefak pesan teramati.
+- `OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1` mempertahankan body pesan dalam artefak pesan teramati.
Skenario (`extensions/qa-lab/src/live-transports/slack/slack-live.runtime.ts:39`):
@@ -287,18 +317,193 @@ Artefak output:
- `slack-qa-report.md`
- `slack-qa-summary.json`
-- `slack-qa-observed-messages.json` — isi disunting kecuali `OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1`.
+- `slack-qa-observed-messages.json` — body disamarkan kecuali `OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1`.
+
+#### Menyiapkan workspace Slack
+
+Lane memerlukan dua aplikasi Slack berbeda dalam satu workspace, plus channel yang diikuti kedua bot:
+
+- `channelId` — id `Cxxxxxxxxxx` dari channel tempat kedua bot telah diundang. Gunakan channel khusus; lane memposting pada setiap eksekusi.
+- `driverBotToken` — token bot (`xoxb-...`) dari aplikasi **Driver**.
+- `sutBotToken` — token bot (`xoxb-...`) dari aplikasi **SUT**, yang harus berupa aplikasi Slack terpisah dari driver agar id pengguna botnya berbeda.
+- `sutAppToken` — token tingkat aplikasi (`xapp-...`) dari aplikasi SUT dengan `connections:write`, digunakan oleh Socket Mode agar aplikasi SUT dapat menerima event.
+
+Lebih baik gunakan workspace Slack khusus untuk QA daripada menggunakan ulang workspace produksi.
+
+Manifest SUT di bawah mencerminkan instalasi produksi Plugin Slack yang dibundel (`extensions/slack/src/setup-shared.ts:10`). Untuk penyiapan channel produksi seperti yang dilihat pengguna, lihat [penyiapan cepat channel Slack](/id/channels/slack#quick-setup); pasangan Driver/SUT QA sengaja dipisahkan karena lane memerlukan dua id pengguna bot berbeda dalam satu workspace.
+
+**1. Buat aplikasi Driver**
+
+Buka [api.slack.com/apps](https://api.slack.com/apps) → _Create New App_ → _From a manifest_ → pilih workspace QA, tempel manifest berikut, lalu _Install to Workspace_:
+
+```json
+{
+ "display_information": {
+ "name": "OpenClaw QA Driver",
+ "description": "Test driver bot for OpenClaw QA Slack live lane"
+ },
+ "features": {
+ "bot_user": {
+ "display_name": "OpenClaw QA Driver",
+ "always_online": true
+ }
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": ["chat:write", "channels:history", "groups:history", "users:read"]
+ }
+ },
+ "settings": {
+ "socket_mode_enabled": false
+ }
+}
+```
+
+Salin _Bot User OAuth Token_ (`xoxb-...`) — itu menjadi `driverBotToken`. Driver hanya perlu memposting pesan dan mengidentifikasi dirinya; tidak ada event, tidak ada Socket Mode.
+
+**2. Buat aplikasi SUT**
+
+Ulangi _Create New App → From a manifest_ di workspace yang sama. Set scope mencerminkan instalasi produksi Plugin Slack yang dibundel (`extensions/slack/src/setup-shared.ts:10`):
+
+```json
+{
+ "display_information": {
+ "name": "OpenClaw QA SUT",
+ "description": "OpenClaw QA SUT connector for OpenClaw"
+ },
+ "features": {
+ "bot_user": {
+ "display_name": "OpenClaw QA SUT",
+ "always_online": true
+ },
+ "app_home": {
+ "home_tab_enabled": true,
+ "messages_tab_enabled": true,
+ "messages_tab_read_only_enabled": false
+ }
+ },
+ "oauth_config": {
+ "scopes": {
+ "bot": [
+ "app_mentions:read",
+ "assistant:write",
+ "channels:history",
+ "channels:read",
+ "chat:write",
+ "commands",
+ "emoji:read",
+ "files:read",
+ "files:write",
+ "groups:history",
+ "groups:read",
+ "im:history",
+ "im:read",
+ "im:write",
+ "mpim:history",
+ "mpim:read",
+ "mpim:write",
+ "pins:read",
+ "pins:write",
+ "reactions:read",
+ "reactions:write",
+ "usergroups:read",
+ "users:read"
+ ]
+ }
+ },
+ "settings": {
+ "socket_mode_enabled": true,
+ "event_subscriptions": {
+ "bot_events": [
+ "app_home_opened",
+ "app_mention",
+ "channel_rename",
+ "member_joined_channel",
+ "member_left_channel",
+ "message.channels",
+ "message.groups",
+ "message.im",
+ "message.mpim",
+ "pin_added",
+ "pin_removed",
+ "reaction_added",
+ "reaction_removed"
+ ]
+ }
+ }
+}
+```
+
+Setelah Slack membuat aplikasi, lakukan dua hal di halaman pengaturannya:
+
+- _Install to Workspace_ → salin _Bot User OAuth Token_ → itu menjadi `sutBotToken`.
+- _Basic Information → App-Level Tokens → Generate Token and Scopes_ → tambahkan scope `connections:write` → simpan → salin nilai `xapp-...` → itu menjadi `sutAppToken`.
+
+Verifikasi bahwa kedua bot memiliki id pengguna yang berbeda dengan memanggil `auth.test` pada setiap token. Runtime membedakan driver dan SUT berdasarkan id pengguna; menggunakan ulang satu aplikasi untuk keduanya akan langsung membuat gating sebutan gagal.
+
+**3. Buat channel**
+
+Di workspace QA, buat channel (mis. `#openclaw-qa`) dan undang kedua bot dari dalam channel:
+
+```
+/invite @OpenClaw QA Driver
+/invite @OpenClaw QA SUT
+```
+
+Salin id `Cxxxxxxxxxx` dari _channel info → About → Channel ID_ — itu menjadi `channelId`. Channel publik bisa digunakan; jika Anda memakai channel privat, kedua aplikasi sudah memiliki `groups:history` sehingga pembacaan riwayat harness tetap akan berhasil.
+
+**4. Daftarkan kredensial**
+
+Ada dua opsi. Gunakan variabel env untuk debugging satu mesin (atur empat variabel `OPENCLAW_QA_SLACK_*` dan teruskan `--credential-source env`), atau isi pool Convex bersama agar CI dan maintainer lain dapat menyewanya.
+
+Untuk pool Convex, tulis empat field ke file JSON:
+
+```json
+{
+ "channelId": "Cxxxxxxxxxx",
+ "driverBotToken": "xoxb-...",
+ "sutBotToken": "xoxb-...",
+ "sutAppToken": "xapp-..."
+}
+```
+
+Dengan `OPENCLAW_QA_CONVEX_SITE_URL` dan `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER` diekspor di shell Anda, daftarkan dan verifikasi:
+
+```bash
+pnpm openclaw qa credentials add \
+ --kind slack \
+ --payload-file slack-creds.json \
+ --note "QA Slack pool seed"
+
+pnpm openclaw qa credentials list --kind slack --status all --json
+```
+
+Harapkan `count: 1`, `status: "active"`, tanpa field `lease`.
+
+**5. Verifikasi ujung ke ujung**
+
+Jalankan lane secara lokal untuk mengonfirmasi kedua bot dapat saling berbicara melalui broker:
+
+```bash
+pnpm openclaw qa slack \
+ --credential-source convex \
+ --credential-role maintainer \
+ --output-dir .artifacts/qa-e2e/slack-local
+```
+
+Run hijau selesai jauh di bawah 30 detik dan `slack-qa-report.md` menampilkan `slack-canary` dan `slack-mention-gating` dengan status `pass`. Jika lane menggantung selama sekitar 90 detik dan keluar dengan `Convex credential pool exhausted for kind "slack"`, berarti pool kosong atau setiap baris sedang disewa — `qa credentials list --kind slack --status all --json` akan memberi tahu Anda yang mana.
### Pool kredensial Convex
-Lane Telegram, Discord, dan Slack dapat menyewa kredensial dari pool Convex bersama alih-alih membaca env var di atas. Berikan `--credential-source convex` (atau tetapkan `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`); QA Lab memperoleh lease eksklusif, mengirim Heartbeat selama durasi eksekusi, dan melepaskannya saat shutdown. Jenis pool adalah `"telegram"`, `"discord"`, dan `"slack"`.
+Lane Telegram, Discord, dan Slack dapat menyewa kredensial dari pool Convex bersama, bukan membaca variabel env di atas. Teruskan `--credential-source convex` (atau atur `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`); QA Lab memperoleh lease eksklusif, mengirim heartbeat selama durasi run, dan merilisnya saat shutdown. Jenis pool adalah `"telegram"`, `"discord"`, dan `"slack"`.
Bentuk payload yang divalidasi broker pada `admin/add`:
- Telegram (`kind: "telegram"`): `{ groupId: string, driverToken: string, sutToken: string }` — `groupId` harus berupa string chat-id numerik.
- Discord (`kind: "discord"`): `{ guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string }`.
+- Slack (`kind: "slack"`): `{ channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string }` — `channelId` harus cocok dengan `^[A-Z][A-Z0-9]+$` (id Slack seperti `Cxxxxxxxxxx`). Lihat [Menyiapkan workspace Slack](#setting-up-the-slack-workspace) untuk penyediaan aplikasi dan scope.
-Env var operasional dan kontrak endpoint broker Convex ada di [Pengujian → Kredensial Telegram bersama melalui Convex](/id/help/testing#shared-telegram-credentials-via-convex-v1) (nama bagian mendahului dukungan Discord; semantik broker identik untuk kedua jenis).
+Variabel env operasional dan kontrak endpoint broker Convex berada di [Pengujian → Kredensial Telegram bersama melalui Convex](/id/help/testing#shared-telegram-credentials-via-convex-v1) (nama bagian mendahului dukungan Discord; semantik broker identik untuk kedua jenis).
## Seed berbasis repo
@@ -307,76 +512,76 @@ Aset seed berada di `qa/`:
- `qa/scenarios/index.md`
- `qa/scenarios//*.md`
-Ini sengaja ada di git sehingga rencana QA terlihat oleh manusia maupun
-agent.
+Ini sengaja berada di git agar rencana QA terlihat oleh manusia maupun
+agen.
`qa-lab` harus tetap menjadi runner markdown generik. Setiap file markdown skenario adalah
-sumber kebenaran untuk satu eksekusi pengujian dan harus mendefinisikan:
+sumber kebenaran untuk satu run pengujian dan harus mendefinisikan:
- metadata skenario
-- metadata kategori, kapabilitas, lane, dan risiko opsional
-- ref docs dan kode
+- metadata kategori, kemampuan, lane, dan risiko opsional
+- referensi docs dan kode
- persyaratan Plugin opsional
- patch konfigurasi Gateway opsional
- `qa-flow` yang dapat dieksekusi
Permukaan runtime yang dapat digunakan ulang yang mendukung `qa-flow` boleh tetap generik
dan lintas area. Misalnya, skenario markdown dapat menggabungkan helper sisi transport
-dengan helper sisi browser yang mengendalikan Control UI tertanam melalui
-seam Gateway `browser.request` tanpa menambahkan runner kasus khusus.
+dengan helper sisi browser yang menggerakkan Control UI tertanam melalui seam
+Gateway `browser.request` tanpa menambahkan runner kasus khusus.
-File skenario harus dikelompokkan berdasarkan kapabilitas produk, bukan folder
-source tree. Pertahankan ID skenario tetap stabil ketika file dipindahkan; gunakan `docsRefs` dan `codeRefs`
-untuk ketertelusuran implementasi.
+File skenario harus dikelompokkan berdasarkan kemampuan produk, bukan folder
+source tree. Pertahankan ID skenario tetap stabil saat file dipindahkan; gunakan `docsRefs` dan `codeRefs`
+untuk keterlacakan implementasi.
Daftar baseline harus tetap cukup luas untuk mencakup:
-- DM dan chat channel
+- chat DM dan channel
- perilaku thread
-- siklus hidup tindakan pesan
-- callback Cron
-- recall memory
-- pengalihan model
-- handoff subagent
+- siklus hidup aksi pesan
+- callback cron
+- pemanggilan kembali memori
+- pergantian model
+- handoff subagen
- pembacaan repo dan pembacaan docs
- satu tugas build kecil seperti Lobster Invaders
-## Lane mock provider
+## Lane mock penyedia
-`qa suite` memiliki dua lane mock provider lokal:
+`qa suite` memiliki dua lane mock penyedia lokal:
- `mock-openai` adalah mock OpenClaw yang sadar skenario. Ini tetap menjadi lane mock
deterministik default untuk QA berbasis repo dan gate paritas.
-- `aimock` memulai server provider berbasis AIMock untuk cakupan protokol eksperimental,
- fixture, record/replay, dan chaos. Ini bersifat aditif dan tidak
+- `aimock` memulai server penyedia berbasis AIMock untuk cakupan protokol,
+ fixture, record/replay, dan chaos eksperimental. Ini bersifat aditif dan tidak
menggantikan dispatcher skenario `mock-openai`.
-Implementasi lane provider berada di bawah `extensions/qa-lab/src/providers/`.
-Setiap provider memiliki defaultnya sendiri, startup server lokal, konfigurasi model Gateway,
-kebutuhan staging auth-profile, dan flag kapabilitas live/mock. Kode suite bersama dan
-Gateway harus merutekan melalui registri provider alih-alih bercabang berdasarkan
-nama provider.
+Implementasi lane penyedia berada di bawah `extensions/qa-lab/src/providers/`.
+Setiap penyedia memiliki defaultnya sendiri, startup server lokal, konfigurasi model gateway,
+kebutuhan staging auth-profile, dan flag kemampuan live/mock. Kode suite dan
+Gateway bersama harus merutekan melalui registry penyedia, bukan membuat branch berdasarkan
+nama penyedia.
## Adapter transport
-`qa-lab` memiliki seam transport generik untuk skenario QA markdown. `qa-channel` adalah adapter pertama pada seam itu, tetapi target desainnya lebih luas: channel nyata atau sintetis di masa depan harus tersambung ke runner suite yang sama alih-alih menambahkan runner QA khusus transport.
+`qa-lab` memiliki seam transport generik untuk skenario QA markdown. `qa-channel` adalah adapter pertama pada seam itu, tetapi target desainnya lebih luas: channel nyata atau sintetis di masa depan harus terhubung ke runner suite yang sama, bukan menambahkan runner QA khusus transport.
-Pada level arsitektur, pembagiannya adalah:
+Pada tingkat arsitektur, pemisahannya adalah:
- `qa-lab` memiliki eksekusi skenario generik, konkurensi worker, penulisan artefak, dan pelaporan.
-- Adapter transport memiliki konfigurasi Gateway, kesiapan, observasi masuk dan keluar, tindakan transport, dan status transport yang dinormalisasi.
-- File skenario markdown di bawah `qa/scenarios/` mendefinisikan eksekusi pengujian; `qa-lab` menyediakan permukaan runtime yang dapat digunakan ulang untuk mengeksekusinya.
+- Adapter transport memiliki konfigurasi Gateway, kesiapan, observasi inbound dan outbound, aksi transport, dan state transport ternormalisasi.
+- File skenario markdown di bawah `qa/scenarios/` mendefinisikan run pengujian; `qa-lab` menyediakan permukaan runtime yang dapat digunakan ulang untuk mengeksekusinya.
### Menambahkan channel
-Menambahkan channel ke sistem QA markdown memerlukan tepat dua hal:
+Menambahkan channel ke sistem QA markdown membutuhkan tepat dua hal:
1. Adapter transport untuk channel tersebut.
2. Paket skenario yang menguji kontrak channel.
-Jangan tambahkan root perintah QA top-level baru ketika host `qa-lab` bersama dapat memiliki flow.
+Jangan tambahkan root perintah QA tingkat atas baru ketika host bersama `qa-lab` dapat memiliki alur tersebut.
-`qa-lab` memiliki mekanisme host bersama:
+`qa-lab` memiliki mekanik host bersama:
- root perintah `openclaw qa`
- startup dan teardown suite
@@ -388,21 +593,21 @@ Jangan tambahkan root perintah QA top-level baru ketika host `qa-lab` bersama da
Plugin runner memiliki kontrak transport:
-- cara `openclaw qa ` dipasang di bawah root `qa` bersama
-- cara gateway dikonfigurasi untuk transport tersebut
-- cara kesiapan diperiksa
-- cara event masuk diinjeksi
-- cara pesan keluar diamati
-- cara transkrip dan status transport yang dinormalisasi diekspos
-- cara tindakan berbasis transport dieksekusi
-- cara reset atau pembersihan khusus transport ditangani
+- bagaimana `openclaw qa ` dipasang di bawah root `qa` bersama
+- bagaimana Gateway dikonfigurasi untuk transport tersebut
+- bagaimana kesiapan diperiksa
+- bagaimana event inbound diinjeksi
+- bagaimana pesan outbound diamati
+- bagaimana transkrip dan state transport ternormalisasi diekspos
+- bagaimana aksi berbasis transport dieksekusi
+- bagaimana reset atau pembersihan khusus transport ditangani
-Batas minimum adopsi untuk channel baru:
+Bar adopsi minimum untuk channel baru:
1. Pertahankan `qa-lab` sebagai pemilik root `qa` bersama.
2. Implementasikan runner transport pada seam host `qa-lab` bersama.
-3. Pertahankan mekanisme khusus transport di dalam Plugin runner atau harness channel.
-4. Pasang runner sebagai `openclaw qa `, bukan mendaftarkan perintah root tandingan. Plugin runner harus mendeklarasikan `qaRunners` di `openclaw.plugin.json` dan mengekspor array `qaRunnerCliRegistrations` yang cocok dari `runtime-api.ts`. Jaga agar `runtime-api.ts` tetap ringan; CLI lazy dan eksekusi runner harus tetap berada di balik entrypoint terpisah.
+3. Simpan mekanik khusus transport di dalam Plugin runner atau harness channel.
+4. Pasang runner sebagai `openclaw qa `, bukan mendaftarkan root perintah yang bersaing. Plugin runner harus mendeklarasikan `qaRunners` di `openclaw.plugin.json` dan mengekspor array `qaRunnerCliRegistrations` yang cocok dari `runtime-api.ts`. Jaga `runtime-api.ts` tetap ringan; eksekusi CLI dan runner yang lazy harus tetap berada di balik entrypoint terpisah.
5. Tulis atau adaptasi skenario markdown di bawah direktori bertema `qa/scenarios/`.
6. Gunakan helper skenario generik untuk skenario baru.
7. Pertahankan alias kompatibilitas yang ada tetap berfungsi kecuali repo sedang melakukan migrasi yang disengaja.
@@ -410,9 +615,9 @@ Batas minimum adopsi untuk channel baru:
Aturan keputusannya ketat:
- Jika perilaku dapat diekspresikan sekali di `qa-lab`, letakkan di `qa-lab`.
-- Jika perilaku bergantung pada satu transport channel, pertahankan di Plugin runner atau harness Plugin tersebut.
-- Jika sebuah skenario membutuhkan kemampuan baru yang dapat digunakan lebih dari satu channel, tambahkan helper generik alih-alih cabang khusus channel di `suite.ts`.
-- Jika suatu perilaku hanya bermakna untuk satu transport, pertahankan skenario tersebut khusus transport dan buat hal itu eksplisit dalam kontrak skenario.
+- Jika perilaku bergantung pada satu transport channel, simpan di Plugin runner atau harness Plugin tersebut.
+- Jika skenario membutuhkan kemampuan baru yang dapat digunakan oleh lebih dari satu channel, tambahkan helper generik, bukan branch khusus channel di `suite.ts`.
+- Jika suatu perilaku hanya bermakna untuk satu transport, pertahankan skenario khusus transport dan nyatakan itu secara eksplisit dalam kontrak skenario.
### Nama helper skenario
@@ -431,7 +636,7 @@ Helper generik yang disarankan untuk skenario baru:
- `formatTransportTranscript`
- `resetTransport`
-Alias kompatibilitas tetap tersedia untuk skenario yang ada — `waitForQaChannelReady`, `waitForOutboundMessage`, `waitForNoOutbound`, `formatConversationTranscript`, `resetBus` — tetapi penulisan skenario baru harus menggunakan nama generik. Alias ada untuk menghindari migrasi serentak, bukan sebagai model ke depannya.
+Alias kompatibilitas tetap tersedia untuk skenario yang ada — `waitForQaChannelReady`, `waitForOutboundMessage`, `waitForNoOutbound`, `formatConversationTranscript`, `resetBus` — tetapi penulisan skenario baru harus menggunakan nama generik. Alias ada untuk menghindari migrasi serentak, bukan sebagai model ke depan.
## Pelaporan
@@ -443,7 +648,7 @@ Laporan harus menjawab:
- Apa yang tetap terblokir
- Skenario tindak lanjut apa yang layak ditambahkan
-Untuk inventaris skenario yang tersedia — berguna saat memperkirakan pekerjaan tindak lanjut atau menyambungkan transport baru — jalankan `pnpm openclaw qa coverage` (tambahkan `--json` untuk output yang dapat dibaca mesin).
+Untuk inventaris skenario yang tersedia — berguna saat mengukur pekerjaan tindak lanjut atau menghubungkan transport baru — jalankan `pnpm openclaw qa coverage` (tambahkan `--json` untuk output yang dapat dibaca mesin).
Untuk pemeriksaan karakter dan gaya, jalankan skenario yang sama di beberapa ref model live
dan tulis laporan Markdown yang dinilai:
@@ -465,42 +670,21 @@ pnpm openclaw qa character-eval \
--judge-concurrency 16
```
-Perintah tersebut menjalankan proses anak Gateway QA lokal, bukan Docker. Skenario evaluasi karakter
-harus menetapkan persona melalui `SOUL.md`, lalu menjalankan giliran pengguna biasa
-seperti chat, bantuan workspace, dan tugas file kecil. Model kandidat tidak boleh
-diberi tahu bahwa ia sedang dievaluasi. Perintah ini mempertahankan setiap
-transkrip lengkap, mencatat statistik run dasar, lalu meminta model juri dalam mode cepat dengan
-penalaran `xhigh` jika didukung untuk memberi peringkat run berdasarkan kewajaran, nuansa, dan humor.
-Gunakan `--blind-judge-models` saat membandingkan provider: prompt juri tetap mendapatkan
-setiap transkrip dan status run, tetapi ref kandidat diganti dengan label netral
-seperti `candidate-01`; laporan memetakan peringkat kembali ke ref sebenarnya setelah
-parsing.
-Run kandidat secara default menggunakan thinking `high`, dengan `medium` untuk GPT-5.5 dan `xhigh`
-untuk ref evaluasi OpenAI lama yang mendukungnya. Timpa kandidat tertentu secara inline dengan
-`--model provider/model,thinking=`. `--thinking ` masih menetapkan
-fallback global, dan bentuk lama `--model-thinking ` tetap
-dipertahankan untuk kompatibilitas.
-Ref kandidat OpenAI secara default menggunakan mode cepat agar pemrosesan prioritas digunakan jika
-provider mendukungnya. Tambahkan `,fast`, `,no-fast`, atau `,fast=false` secara inline ketika
-satu kandidat atau juri membutuhkan override. Berikan `--fast` hanya ketika Anda ingin
-memaksa mode cepat aktif untuk setiap model kandidat. Durasi kandidat dan juri
-dicatat dalam laporan untuk analisis benchmark, tetapi prompt juri secara eksplisit mengatakan
-untuk tidak memberi peringkat berdasarkan kecepatan.
-Run model kandidat dan juri keduanya secara default menggunakan konkurensi 16. Turunkan
-`--concurrency` atau `--judge-concurrency` ketika batas provider atau tekanan Gateway lokal
-membuat run terlalu berisik.
-Jika tidak ada kandidat `--model` yang diberikan, evaluasi karakter secara default menggunakan
-`openai/gpt-5.5`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-6`,
-`anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
+Perintah ini menjalankan proses anak Gateway QA lokal, bukan Docker. Skenario evaluasi karakter harus menetapkan persona melalui `SOUL.md`, lalu menjalankan giliran pengguna biasa seperti chat, bantuan ruang kerja, dan tugas file kecil. Model kandidat tidak boleh diberi tahu bahwa model tersebut sedang dievaluasi. Perintah ini menyimpan setiap transkrip lengkap, mencatat statistik dasar proses, lalu meminta model penilai dalam mode cepat dengan penalaran `xhigh` jika didukung untuk memeringkat proses berdasarkan kewajaran, nuansa, dan humor.
+Gunakan `--blind-judge-models` saat membandingkan penyedia: prompt penilai tetap mendapatkan setiap transkrip dan status proses, tetapi referensi kandidat diganti dengan label netral seperti `candidate-01`; laporan memetakan peringkat kembali ke referensi asli setelah parsing.
+Proses kandidat secara default menggunakan tingkat berpikir `high`, dengan `medium` untuk GPT-5.5 dan `xhigh` untuk referensi evaluasi OpenAI lama yang mendukungnya. Timpa kandidat tertentu secara inline dengan `--model provider/model,thinking=`. `--thinking ` tetap menetapkan fallback global, dan bentuk lama `--model-thinking ` dipertahankan untuk kompatibilitas.
+Referensi kandidat OpenAI secara default menggunakan mode cepat sehingga pemrosesan prioritas digunakan jika penyedia mendukungnya. Tambahkan `,fast`, `,no-fast`, atau `,fast=false` secara inline saat satu kandidat atau penilai memerlukan penimpaan. Berikan `--fast` hanya saat Anda ingin memaksa mode cepat aktif untuk setiap model kandidat. Durasi kandidat dan penilai dicatat dalam laporan untuk analisis benchmark, tetapi prompt penilai secara eksplisit mengatakan untuk tidak memeringkat berdasarkan kecepatan.
+Proses model kandidat dan penilai sama-sama default ke konkurensi 16. Turunkan `--concurrency` atau `--judge-concurrency` saat batas penyedia atau tekanan Gateway lokal membuat proses terlalu bising.
+Saat tidak ada kandidat `--model` yang diberikan, evaluasi karakter secara default menggunakan `openai/gpt-5.5`, `openai/gpt-5.2`, `openai/gpt-5`, `anthropic/claude-opus-4-6`, `anthropic/claude-sonnet-4-6`, `zai/glm-5.1`,
`moonshot/kimi-k2.5`, dan
-`google/gemini-3.1-pro-preview` ketika tidak ada `--model` yang diberikan.
-Jika tidak ada `--judge-model` yang diberikan, juri secara default menggunakan
+`google/gemini-3.1-pro-preview` saat tidak ada `--model` yang diberikan.
+Saat tidak ada `--judge-model` yang diberikan, penilai secara default menggunakan
`openai/gpt-5.5,thinking=xhigh,fast` dan
`anthropic/claude-opus-4-6,thinking=high`.
## Dokumen terkait
-- [QA Matriks](/id/concepts/qa-matrix)
-- [Channel QA](/id/channels/qa-channel)
+- [Matriks QA](/id/concepts/qa-matrix)
+- [Kanal QA](/id/channels/qa-channel)
- [Pengujian](/id/help/testing)
- [Dasbor](/id/web/dashboard)
diff --git a/docs/id/gateway/config-tools.md b/docs/id/gateway/config-tools.md
index b2bc2b9b5..a3d8256b3 100644
--- a/docs/id/gateway/config-tools.md
+++ b/docs/id/gateway/config-tools.md
@@ -1,35 +1,35 @@
---
read_when:
- - Mengonfigurasi kebijakan `tools.*`, daftar izin, atau fitur eksperimental
+ - Mengonfigurasi kebijakan `tools.*`, daftar yang diizinkan, atau fitur eksperimental
- Mendaftarkan penyedia kustom atau mengganti URL dasar
- Menyiapkan endpoint yang dihosting sendiri dan kompatibel dengan OpenAI
sidebarTitle: Tools and custom providers
-summary: Konfigurasi alat (kebijakan, sakelar eksperimental, alat yang didukung penyedia) dan penyiapan penyedia/URL dasar kustom
+summary: Konfigurasi alat (kebijakan, toggle eksperimental, alat yang didukung provider) dan penyiapan provider/URL dasar kustom
title: Konfigurasi — alat dan penyedia kustom
x-i18n:
- generated_at: "2026-05-03T21:31:32Z"
+ generated_at: "2026-05-05T01:45:54Z"
model: gpt-5.5
provider: openai
- source_hash: 75a39342f40e9c329a7c61855e805ec43532cbdb89fbe801acc26830fd63b4da
+ source_hash: 9196bff46d8b0f9447fb46b47fc764f5bbc4f0b19eb252d4db611e94e57b4883
source_path: gateway/config-tools.md
workflow: 16
---
-`tools.*` kunci konfigurasi dan penyiapan penyedia kustom / URL dasar. Untuk agen, channel, dan kunci konfigurasi tingkat atas lainnya, lihat [Referensi konfigurasi](/id/gateway/configuration-reference).
+`tools.*` kunci konfigurasi dan penyiapan penyedia kustom / base-URL. Untuk agent, channel, dan kunci konfigurasi tingkat atas lainnya, lihat [Referensi konfigurasi](/id/gateway/configuration-reference).
## Alat
### Profil alat
-`tools.profile` menetapkan allowlist dasar sebelum `tools.allow`/`tools.deny`:
+`tools.profile` menetapkan daftar izin dasar sebelum `tools.allow`/`tools.deny`:
-Orientasi lokal menetapkan default konfigurasi lokal baru ke `tools.profile: "coding"` saat belum disetel (profil eksplisit yang sudah ada dipertahankan).
+Onboarding lokal menetapkan default konfigurasi lokal baru ke `tools.profile: "coding"` saat belum disetel (profil eksplisit yang sudah ada dipertahankan).
| Profil | Mencakup |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
-| `minimal` | `session_status` saja |
+| `minimal` | Hanya `session_status` |
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` |
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
| `full` | Tanpa pembatasan (sama seperti tidak disetel) |
@@ -38,7 +38,7 @@ Orientasi lokal menetapkan default konfigurasi lokal baru ke `tools.profile: "co
| Grup | Alat |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
-| `group:runtime` | `exec`, `process`, `code_execution` (`bash` diterima sebagai alias untuk `exec`) |
+| `group:runtime` | `exec`, `process`, `code_execution` (`bash` diterima sebagai alias untuk `exec`) |
| `group:fs` | `read`, `write`, `edit`, `apply_patch` |
| `group:sessions` | `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `sessions_yield`, `subagents`, `session_status` |
| `group:memory` | `memory_search`, `memory_get` |
@@ -49,11 +49,11 @@ Orientasi lokal menetapkan default konfigurasi lokal baru ke `tools.profile: "co
| `group:nodes` | `nodes` |
| `group:agents` | `agents_list` |
| `group:media` | `image`, `image_generate`, `video_generate`, `tts` |
-| `group:openclaw` | Semua alat bawaan (tidak termasuk Plugin penyedia) |
+| `group:openclaw` | Semua alat bawaan (mengecualikan Plugin penyedia) |
### `tools.allow` / `tools.deny`
-Kebijakan allow/deny alat global (deny menang). Tidak peka huruf besar/kecil, mendukung wildcard `*`. Diterapkan bahkan saat sandbox Docker nonaktif.
+Kebijakan izinkan/tolak alat global (tolak menang). Tidak peka huruf besar/kecil, mendukung wildcard `*`. Diterapkan bahkan saat sandbox Docker nonaktif.
```json5
{
@@ -71,7 +71,7 @@ Kebijakan allow/deny alat global (deny menang). Tidak peka huruf besar/kecil, me
### `tools.byProvider`
-Batasi alat lebih lanjut untuk penyedia atau model tertentu. Urutan: profil dasar → profil penyedia → allow/deny.
+Membatasi alat lebih lanjut untuk penyedia atau model tertentu. Urutan: profil dasar → profil penyedia → izinkan/tolak.
```json5
{
@@ -103,7 +103,7 @@ Mengontrol akses exec yang ditingkatkan di luar sandbox:
}
```
-- Override per agen (`agents.list[].tools.elevated`) hanya dapat memperketat pembatasan.
+- Penggantian per-agent (`agents.list[].tools.elevated`) hanya dapat membatasi lebih lanjut.
- `/elevated on|off|ask|full` menyimpan status per sesi; direktif inline berlaku untuk satu pesan.
- `exec` yang ditingkatkan melewati sandboxing dan menggunakan jalur escape yang dikonfigurasi (`gateway` secara default, atau `node` saat target exec adalah `node`).
@@ -129,7 +129,7 @@ Mengontrol akses exec yang ditingkatkan di luar sandbox:
### `tools.loopDetection`
-Pemeriksaan keamanan loop alat **dinonaktifkan secara default**. Setel `enabled: true` untuk mengaktifkan deteksi. Pengaturan dapat didefinisikan secara global di `tools.loopDetection` dan dioverride per agen di `agents.list[].tools.loopDetection`.
+Pemeriksaan keamanan loop alat **dinonaktifkan secara default**. Setel `enabled: true` untuk mengaktifkan deteksi. Pengaturan dapat didefinisikan secara global di `tools.loopDetection` dan diganti per-agent di `agents.list[].tools.loopDetection`.
```json5
{
@@ -151,25 +151,25 @@ Pemeriksaan keamanan loop alat **dinonaktifkan secara default**. Setel `enabled:
```
- Riwayat maksimum pemanggilan alat yang dipertahankan untuk analisis loop.
+ Riwayat panggilan alat maksimum yang dipertahankan untuk analisis loop.
Ambang pola berulang tanpa progres untuk peringatan.
- Ambang berulang yang lebih tinggi untuk memblokir loop kritis.
+ Ambang pengulangan yang lebih tinggi untuk memblokir loop kritis.
- Ambang penghentian paksa untuk run tanpa progres apa pun.
+ Ambang penghentian paksa untuk proses apa pun yang tanpa progres.
- Peringatkan pada pemanggilan alat yang sama/argumen yang sama secara berulang.
+ Peringatkan pada panggilan alat yang sama/argumen yang sama secara berulang.
Peringatkan/blokir pada alat polling yang dikenal (`process.poll`, `command_status`, dll.).
- Peringatkan/blokir pada pola pasangan tanpa progres yang bergantian.
+ Peringatkan/blokir pada pola pasangan bergantian tanpa progres.
@@ -216,7 +216,7 @@ Mengonfigurasi pemahaman media masuk (gambar/audio/video):
media: {
concurrency: 2,
asyncCompletion: {
- directSend: false, // opt-in: send finished async video directly to the channel
+ directSend: false, // deprecated: completions stay agent-mediated
},
audio: {
enabled: true,
@@ -246,30 +246,30 @@ Mengonfigurasi pemahaman media masuk (gambar/audio/video):
```
-
+
**Entri penyedia** (`type: "provider"` atau dihilangkan):
- `provider`: id penyedia API (`openai`, `anthropic`, `google`/`gemini`, `groq`, dll.)
- - `model`: penggantian id model
+ - `model`: pengganti id model
- `profile` / `preferredProfile`: pemilihan profil `auth-profiles.json`
**Entri CLI** (`type: "cli"`):
- `command`: executable yang akan dijalankan
- - `args`: argumen bertemplat (mendukung `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, dll.; `openclaw doctor --fix` memigrasikan placeholder `{input}` yang tidak digunakan lagi ke `{{MediaPath}}`)
+ - `args`: argumen berbasis templat (mendukung `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, dll.; `openclaw doctor --fix` memigrasikan placeholder `{input}` yang sudah usang ke `{{MediaPath}}`)
- **Kolom umum:**
+ **Bidang umum:**
- `capabilities`: daftar opsional (`image`, `audio`, `video`). Default: `openai`/`anthropic`/`minimax` → gambar, `google` → gambar+audio+video, `groq` → audio.
- - `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: penggantian per entri.
- - `tools.media.image.timeoutSeconds` dan entri `timeoutSeconds` model gambar yang cocok juga berlaku saat agen memanggil alat `image` eksplisit.
- - Kegagalan beralih ke entri berikutnya.
+ - `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language`: pengganti per entri.
+ - Entri `tools.media.image.timeoutSeconds` dan `timeoutSeconds` model gambar yang cocok juga berlaku saat agen memanggil alat `image` eksplisit.
+ - Kegagalan akan beralih ke entri berikutnya.
- Auth penyedia mengikuti urutan standar: `auth-profiles.json` → env vars → `models.providers.*.apiKey`.
+ Autentikasi penyedia mengikuti urutan standar: `auth-profiles.json` → variabel env → `models.providers.*.apiKey`.
- **Kolom penyelesaian async:**
+ **Bidang penyelesaian asinkron:**
- - `asyncCompletion.directSend`: saat `true`, tugas media async selesai yang mendukung pengiriman penyelesaian langsung akan mencoba pengiriman channel langsung terlebih dahulu. Default: `false` (jalur bangun sesi peminta/pengiriman model). Saat ini ini berlaku untuk `video_generate` async; penyelesaian `music_generate` async tetap dimediasi sesi peminta bahkan saat ini diaktifkan.
+ - `asyncCompletion.directSend`: flag kompatibilitas yang sudah usang. Tugas media asinkron yang selesai tetap dimediasi oleh sesi peminta sehingga agen menerima hasilnya, memutuskan cara memberi tahu pengguna, dan menggunakan alat pesan saat pengiriman sumber memerlukannya.
@@ -305,12 +305,12 @@ Default: `tree` (sesi saat ini + sesi yang dibuat olehnya, seperti subagen).
```
-
+
- `self`: hanya kunci sesi saat ini.
- `tree`: sesi saat ini + sesi yang dibuat oleh sesi saat ini (subagen).
- - `agent`: sesi apa pun yang termasuk dalam id agen saat ini (dapat mencakup pengguna lain jika Anda menjalankan sesi per pengirim di bawah id agen yang sama).
+ - `agent`: sesi apa pun milik id agen saat ini (dapat mencakup pengguna lain jika Anda menjalankan sesi per pengirim di bawah id agen yang sama).
- `all`: sesi apa pun. Penargetan lintas agen tetap memerlukan `tools.agentToAgent`.
- - Penjepitan sandbox: saat sesi saat ini berada dalam sandbox dan `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibilitas dipaksa menjadi `tree` meskipun `tools.sessions.visibility="all"`.
+ - Pembatasan sandbox: saat sesi saat ini berada dalam sandbox dan `agents.defaults.sandbox.sessionToolsVisibility="spawned"`, visibilitas dipaksa menjadi `tree` meskipun `tools.sessions.visibility="all"`.
@@ -338,9 +338,9 @@ Mengontrol dukungan lampiran inline untuk `sessions_spawn`.
- Lampiran hanya didukung untuk `runtime: "subagent"`. Runtime ACP menolaknya.
- - File dimaterialisasikan ke workspace anak di `.openclaw/attachments//` dengan `.manifest.json`.
+ - File dimaterialisasikan ke ruang kerja anak di `.openclaw/attachments//` dengan `.manifest.json`.
- Konten lampiran otomatis disunting dari persistensi transkrip.
- - Input Base64 divalidasi dengan pemeriksaan alfabet/padding yang ketat dan pelindung ukuran pra-dekode.
+ - Input Base64 divalidasi dengan pemeriksaan alfabet/padding yang ketat dan pengaman ukuran pra-dekode.
- Izin file adalah `0700` untuk direktori dan `0600` untuk file.
- Pembersihan mengikuti kebijakan `cleanup`: `delete` selalu menghapus lampiran; `keep` mempertahankannya hanya ketika `retainOnSessionKeep: true`.
@@ -351,7 +351,7 @@ Mengontrol dukungan lampiran inline untuk `sessions_spawn`.
### `tools.experimental`
-Flag alat bawaan eksperimental. Default nonaktif kecuali aturan aktif otomatis GPT-5 strict-agentic berlaku.
+Flag alat bawaan eksperimental. Nonaktif secara default kecuali aturan pengaktifan otomatis GPT-5 strict-agentic berlaku.
```json5
{
@@ -363,9 +363,9 @@ Flag alat bawaan eksperimental. Default nonaktif kecuali aturan aktif otomatis G
}
```
-- `planTool`: mengaktifkan alat `update_plan` terstruktur untuk pelacakan pekerjaan multi-langkah yang tidak sepele.
-- Default: `false` kecuali `agents.defaults.embeddedPi.executionContract` (atau override per agen) diatur ke `"strict-agentic"` untuk run OpenAI atau OpenAI Codex keluarga GPT-5. Atur `true` untuk memaksa alat aktif di luar cakupan tersebut, atau `false` agar tetap nonaktif bahkan untuk run GPT-5 strict-agentic.
-- Saat diaktifkan, prompt sistem juga menambahkan panduan penggunaan agar model hanya menggunakannya untuk pekerjaan substansial dan menjaga paling banyak satu langkah `in_progress`.
+- `planTool`: mengaktifkan alat `update_plan` terstruktur untuk pelacakan pekerjaan multi-langkah non-trivial.
+- Default: `false` kecuali `agents.defaults.embeddedPi.executionContract` (atau override per-agen) disetel ke `"strict-agentic"` untuk eksekusi keluarga GPT-5 OpenAI atau OpenAI Codex. Setel `true` untuk memaksa alat aktif di luar cakupan itu, atau `false` agar tetap nonaktif bahkan untuk eksekusi GPT-5 strict-agentic.
+- Ketika diaktifkan, prompt sistem juga menambahkan panduan penggunaan agar model hanya menggunakannya untuk pekerjaan substansial dan mempertahankan paling banyak satu langkah `in_progress`.
### `agents.defaults.subagents`
@@ -386,15 +386,15 @@ Flag alat bawaan eksperimental. Default nonaktif kecuali aturan aktif otomatis G
```
- `model`: model default untuk sub-agen yang dibuat. Jika dihilangkan, sub-agen mewarisi model pemanggil.
-- `allowAgents`: allowlist default ID agen target untuk `sessions_spawn` ketika agen pemohon tidak menetapkan `subagents.allowAgents` miliknya sendiri (`["*"]` = apa pun; default: hanya agen yang sama).
+- `allowAgents`: allowlist default ID agen target untuk `sessions_spawn` ketika agen peminta tidak menetapkan `subagents.allowAgents` miliknya sendiri (`["*"]` = apa pun; default: hanya agen yang sama).
- `runTimeoutSeconds`: timeout default (detik) untuk `sessions_spawn` ketika panggilan alat menghilangkan `runTimeoutSeconds`. `0` berarti tanpa timeout.
-- Kebijakan alat per subagen: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`.
+- Kebijakan alat per-subagen: `tools.subagents.tools.allow` / `tools.subagents.tools.deny`.
---
-## Penyedia kustom dan URL dasar
+## Penyedia khusus dan URL dasar
-OpenClaw menggunakan katalog model bawaan. Tambahkan penyedia kustom melalui `models.providers` dalam config atau `~/.openclaw/agents//agent/models.json`.
+OpenClaw menggunakan katalog model bawaan. Tambahkan penyedia khusus melalui `models.providers` di konfigurasi atau `~/.openclaw/agents//agent/models.json`.
```json5
{
@@ -424,19 +424,19 @@ OpenClaw menggunakan katalog model bawaan. Tambahkan penyedia kustom melalui `mo
```
-
- - Gunakan `authHeader: true` + `headers` untuk kebutuhan auth kustom.
- - Override root config agen dengan `OPENCLAW_AGENT_DIR` (atau `PI_CODING_AGENT_DIR`, alias variabel lingkungan legacy).
- - Prioritas merge untuk ID penyedia yang cocok:
- - Nilai `baseUrl` `models.json` agen yang tidak kosong menang.
- - Nilai `apiKey` agen yang tidak kosong menang hanya ketika penyedia tersebut tidak dikelola SecretRef dalam konteks config/profil-auth saat ini.
- - Nilai `apiKey` penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`ENV_VAR_NAME` untuk ref env, `secretref-managed` untuk ref file/exec), alih-alih mempertahankan secret yang sudah di-resolve.
- - Nilai header penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`secretref-env:ENV_VAR_NAME` untuk ref env, `secretref-managed` untuk ref file/exec).
- - `apiKey`/`baseUrl` agen yang kosong atau hilang fallback ke `models.providers` dalam config.
- - `contextWindow`/`maxTokens` model yang cocok menggunakan nilai yang lebih tinggi antara config eksplisit dan nilai katalog implisit.
- - `contextTokens` model yang cocok mempertahankan batas runtime eksplisit jika ada; gunakan ini untuk membatasi konteks efektif tanpa mengubah metadata model native.
- - Gunakan `models.mode: "replace"` ketika Anda ingin config sepenuhnya menulis ulang `models.json`.
- - Persistensi penanda bersifat otoritatif sumber: penanda ditulis dari snapshot config sumber aktif (pra-resolusi), bukan dari nilai secret runtime yang sudah di-resolve.
+
+ - Gunakan `authHeader: true` + `headers` untuk kebutuhan autentikasi khusus.
+ - Timpa root konfigurasi agen dengan `OPENCLAW_AGENT_DIR` (atau `PI_CODING_AGENT_DIR`, alias variabel lingkungan lama).
+ - Prioritas penggabungan untuk ID penyedia yang cocok:
+ - Nilai `baseUrl` `models.json` agen yang tidak kosong diutamakan.
+ - Nilai `apiKey` agen yang tidak kosong diutamakan hanya ketika penyedia tersebut tidak dikelola SecretRef dalam konteks konfigurasi/profil autentikasi saat ini.
+ - Nilai `apiKey` penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`ENV_VAR_NAME` untuk referensi env, `secretref-managed` untuk referensi file/exec), bukan menyimpan rahasia yang sudah diresolusi.
+ - Nilai header penyedia yang dikelola SecretRef disegarkan dari penanda sumber (`secretref-env:ENV_VAR_NAME` untuk referensi env, `secretref-managed` untuk referensi file/exec).
+ - `apiKey`/`baseUrl` agen yang kosong atau tidak ada beralih ke `models.providers` dalam konfigurasi.
+ - `contextWindow`/`maxTokens` model yang cocok menggunakan nilai yang lebih tinggi antara konfigurasi eksplisit dan nilai katalog implisit.
+ - `contextTokens` model yang cocok mempertahankan batas runtime eksplisit ketika ada; gunakan ini untuk membatasi konteks efektif tanpa mengubah metadata model native.
+ - Gunakan `models.mode: "replace"` ketika Anda ingin konfigurasi menulis ulang `models.json` sepenuhnya.
+ - Persistensi penanda bersifat otoritatif terhadap sumber: penanda ditulis dari snapshot konfigurasi sumber aktif (pra-resolusi), bukan dari nilai rahasia runtime yang sudah diresolusi.
@@ -446,20 +446,20 @@ OpenClaw menggunakan katalog model bawaan. Tambahkan penyedia kustom melalui `mo
- `models.mode`: perilaku katalog penyedia (`merge` atau `replace`).
- - `models.providers`: peta penyedia kustom yang dikunci berdasarkan ID penyedia.
- - Edit aman: gunakan `openclaw config set models.providers. '' --strict-json --merge` atau `openclaw config set models.providers..models '' --strict-json --merge` untuk pembaruan aditif. `config set` menolak penggantian destruktif kecuali Anda meneruskan `--replace`.
+ - `models.providers`: peta penyedia khusus yang dikunci oleh ID penyedia.
+ - Pengeditan aman: gunakan `openclaw config set models.providers. '' --strict-json --merge` atau `openclaw config set models.providers..models '' --strict-json --merge` untuk pembaruan aditif. `config set` menolak penggantian destruktif kecuali Anda meneruskan `--replace`.
-
- - `models.providers.*.api`: adaptor permintaan (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, dll). Untuk backend `/v1/chat/completions` yang di-host sendiri seperti MLX, vLLM, SGLang, dan sebagian besar server lokal yang kompatibel dengan OpenAI, gunakan `openai-completions`. Penyedia kustom dengan `baseUrl` tetapi tanpa `api` default ke `openai-completions`; atur `openai-responses` hanya ketika backend mendukung `/v1/responses`.
- - `models.providers.*.apiKey`: kredensial penyedia (utamakan SecretRef/substitusi env).
- - `models.providers.*.auth`: strategi auth (`api-key`, `token`, `oauth`, `aws-sdk`).
+
+ - `models.providers.*.api`: adapter permintaan (`openai-completions`, `openai-responses`, `anthropic-messages`, `google-generative-ai`, dll). Untuk backend `/v1/chat/completions` self-hosted seperti MLX, vLLM, SGLang, dan sebagian besar server lokal kompatibel OpenAI, gunakan `openai-completions`. Penyedia khusus dengan `baseUrl` tetapi tanpa `api` bernilai default ke `openai-completions`; setel `openai-responses` hanya ketika backend mendukung `/v1/responses`.
+ - `models.providers.*.apiKey`: kredensial penyedia (utamakan substitusi SecretRef/env).
+ - `models.providers.*.auth`: strategi autentikasi (`api-key`, `token`, `oauth`, `aws-sdk`).
- `models.providers.*.contextWindow`: jendela konteks native default untuk model di bawah penyedia ini ketika entri model tidak menetapkan `contextWindow`.
- `models.providers.*.contextTokens`: batas konteks runtime efektif default untuk model di bawah penyedia ini ketika entri model tidak menetapkan `contextTokens`.
- - `models.providers.*.maxTokens`: batas token output default untuk model di bawah penyedia ini ketika entri model tidak menetapkan `maxTokens`.
- - `models.providers.*.timeoutSeconds`: timeout opsional per penyedia untuk permintaan HTTP model dalam detik, mencakup connect, header, body, dan penanganan pembatalan total permintaan.
+ - `models.providers.*.maxTokens`: batas token keluaran default untuk model di bawah penyedia ini ketika entri model tidak menetapkan `maxTokens`.
+ - `models.providers.*.timeoutSeconds`: timeout permintaan HTTP model per-penyedia opsional dalam detik, mencakup koneksi, header, body, dan penanganan pembatalan permintaan total.
- `models.providers.*.injectNumCtxForOpenAICompat`: untuk Ollama + `openai-completions`, injeksikan `options.num_ctx` ke permintaan (default: `true`).
- - `models.providers.*.authHeader`: paksa transport kredensial di header `Authorization` ketika diperlukan.
+ - `models.providers.*.authHeader`: paksa transport kredensial dalam header `Authorization` ketika diperlukan.
- `models.providers.*.baseUrl`: URL dasar API upstream.
- `models.providers.*.headers`: header statis tambahan untuk routing proxy/tenant.
@@ -468,40 +468,40 @@ OpenClaw menggunakan katalog model bawaan. Tambahkan penyedia kustom melalui `mo
`models.providers.*.request`: override transport untuk permintaan HTTP penyedia-model.
- `request.headers`: header tambahan (digabungkan dengan default penyedia). Nilai menerima SecretRef.
- - `request.auth`: override strategi auth. Mode: `"provider-default"` (gunakan auth bawaan penyedia), `"authorization-bearer"` (dengan `token`), `"header"` (dengan `headerName`, `value`, `prefix` opsional).
+ - `request.auth`: override strategi autentikasi. Mode: `"provider-default"` (gunakan autentikasi bawaan penyedia), `"authorization-bearer"` (dengan `token`), `"header"` (dengan `headerName`, `value`, `prefix` opsional).
- `request.proxy`: override proxy HTTP. Mode: `"env-proxy"` (gunakan variabel env `HTTP_PROXY`/`HTTPS_PROXY`), `"explicit-proxy"` (dengan `url`). Kedua mode menerima sub-objek `tls` opsional.
- - `request.tls`: override TLS untuk koneksi langsung. Bidang: `ca`, `cert`, `key`, `passphrase` (semua menerima SecretRef), `serverName`, `insecureSkipVerify`.
- - `request.allowPrivateNetwork`: ketika `true`, izinkan HTTPS ke `baseUrl` ketika DNS di-resolve ke rentang privat, CGNAT, atau rentang serupa, melalui guard fetch HTTP penyedia (opt-in operator untuk endpoint yang di-host sendiri dan tepercaya yang kompatibel dengan OpenAI). URL stream penyedia-model loopback seperti `localhost`, `127.0.0.1`, dan `[::1]` diizinkan secara otomatis kecuali ini secara eksplisit diatur ke `false`; host LAN, tailnet, dan DNS privat tetap memerlukan opt-in. WebSocket menggunakan `request` yang sama untuk header/TLS tetapi bukan gate SSRF fetch tersebut. Default `false`.
+ - `request.tls`: override TLS untuk koneksi langsung. Bidang: `ca`, `cert`, `key`, `passphrase` (semuanya menerima SecretRef), `serverName`, `insecureSkipVerify`.
+ - `request.allowPrivateNetwork`: ketika `true`, izinkan HTTPS ke `baseUrl` ketika DNS diresolusi ke rentang privat, CGNAT, atau serupa, melalui pengaman fetch HTTP penyedia (opt-in operator untuk endpoint self-hosted tepercaya yang kompatibel OpenAI). URL stream penyedia model loopback seperti `localhost`, `127.0.0.1`, dan `[::1]` diizinkan otomatis kecuali ini secara eksplisit disetel ke `false`; host LAN, tailnet, dan DNS privat tetap memerlukan opt-in. WebSocket menggunakan `request` yang sama untuk header/TLS tetapi bukan gerbang SSRF fetch tersebut. Default `false`.
- `models.providers.*.models`: entri katalog model penyedia eksplisit.
- - `models.providers.*.models.*.input`: modalitas input model. Gunakan `["text"]` untuk model khusus teks dan `["text", "image"]` untuk model gambar/vision native. Lampiran gambar hanya diinjeksi ke giliran agen ketika model yang dipilih ditandai mampu gambar.
- - `models.providers.*.models.*.contextWindow`: metadata jendela konteks model native. Ini meng-override `contextWindow` tingkat penyedia untuk model tersebut.
- - `models.providers.*.models.*.contextTokens`: batas konteks runtime opsional. Ini meng-override `contextTokens` tingkat penyedia; gunakan ketika Anda menginginkan anggaran konteks efektif yang lebih kecil daripada `contextWindow` native model; `openclaw models list` menampilkan kedua nilai ketika berbeda.
- - `models.providers.*.models.*.compat.supportsDeveloperRole`: petunjuk kompatibilitas opsional. Untuk `api: "openai-completions"` dengan `baseUrl` non-native yang tidak kosong (host bukan `api.openai.com`), OpenClaw memaksanya menjadi `false` saat runtime. `baseUrl` kosong/dihilangkan mempertahankan perilaku OpenAI default.
- - `models.providers.*.models.*.compat.requiresStringContent`: petunjuk kompatibilitas opsional untuk endpoint chat khusus string yang kompatibel dengan OpenAI. Ketika `true`, OpenClaw meratakan array `messages[].content` teks murni menjadi string biasa sebelum mengirim permintaan.
+ - `models.providers.*.models.*.input`: modalitas input model. Gunakan `["text"]` untuk model hanya teks dan `["text", "image"]` untuk model gambar/vision native. Lampiran gambar hanya diinjeksikan ke giliran agen ketika model yang dipilih ditandai mampu gambar.
+ - `models.providers.*.models.*.contextWindow`: metadata jendela konteks model native. Ini menimpa `contextWindow` tingkat penyedia untuk model tersebut.
+ - `models.providers.*.models.*.contextTokens`: batas konteks runtime opsional. Ini menimpa `contextTokens` tingkat penyedia; gunakan ketika Anda menginginkan anggaran konteks efektif yang lebih kecil daripada `contextWindow` native model; `openclaw models list` menampilkan kedua nilai ketika berbeda.
+ - `models.providers.*.models.*.compat.supportsDeveloperRole`: petunjuk kompatibilitas opsional. Untuk `api: "openai-completions"` dengan `baseUrl` non-native yang tidak kosong (host bukan `api.openai.com`), OpenClaw memaksa ini menjadi `false` saat runtime. `baseUrl` kosong/dihilangkan mempertahankan perilaku default OpenAI.
+ - `models.providers.*.models.*.compat.requiresStringContent`: petunjuk kompatibilitas opsional untuk endpoint chat kompatibel OpenAI yang hanya-string. Ketika `true`, OpenClaw meratakan array `messages[].content` teks murni menjadi string polos sebelum mengirim permintaan.
- `plugins.entries.amazon-bedrock.config.discovery`: root pengaturan penemuan otomatis Bedrock.
- - `plugins.entries.amazon-bedrock.config.discovery.enabled`: aktifkan/nonaktifkan penemuan implisit.
+ - `plugins.entries.amazon-bedrock.config.discovery.enabled`: nyalakan/matikan penemuan implisit.
- `plugins.entries.amazon-bedrock.config.discovery.region`: region AWS untuk penemuan.
- `plugins.entries.amazon-bedrock.config.discovery.providerFilter`: filter ID penyedia opsional untuk penemuan tertarget.
- `plugins.entries.amazon-bedrock.config.discovery.refreshInterval`: interval polling untuk penyegaran penemuan.
- `plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow`: jendela konteks fallback untuk model yang ditemukan.
- - `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: token output maksimum fallback untuk model yang ditemukan.
+ - `plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens`: token keluaran maksimum fallback untuk model yang ditemukan.
-Onboarding penyedia kustom interaktif menyimpulkan input gambar untuk ID model vision umum seperti GPT-4o, Claude, Gemini, Qwen-VL, LLaVA, Pixtral, InternVL, Mllama, MiniCPM-V, dan GLM-4V, serta melewati pertanyaan tambahan untuk keluarga khusus teks yang dikenal. ID model yang tidak dikenal tetap meminta dukungan gambar. Onboarding noninteraktif menggunakan inferensi yang sama; teruskan `--custom-image-input` untuk memaksa metadata mampu gambar atau `--custom-text-input` untuk memaksa metadata khusus teks.
+Onboarding penyedia khusus interaktif menyimpulkan input gambar untuk ID model vision umum seperti GPT-4o, Claude, Gemini, Qwen-VL, LLaVA, Pixtral, InternVL, Mllama, MiniCPM-V, dan GLM-4V, serta melewati pertanyaan tambahan untuk keluarga yang diketahui hanya teks. ID model yang tidak dikenal tetap meminta dukungan gambar. Onboarding non-interaktif menggunakan inferensi yang sama; teruskan `--custom-image-input` untuk memaksa metadata mampu gambar atau `--custom-text-input` untuk memaksa metadata hanya teks.
### Contoh penyedia
- Plugin penyedia `cerebras` bawaan dapat mengonfigurasi ini melalui `openclaw onboard --auth-choice cerebras-api-key`. Gunakan config penyedia eksplisit hanya ketika meng-override default.
+ Plugin penyedia `cerebras` bawaan dapat mengonfigurasi ini melalui `openclaw onboard --auth-choice cerebras-api-key`. Gunakan konfigurasi penyedia eksplisit hanya ketika menimpa default.
```json5
{
@@ -554,10 +554,10 @@ Onboarding penyedia kustom interaktif menyimpulkan input gambar untuk ID model v
Kompatibel dengan Anthropic, penyedia bawaan. Pintasan: `openclaw onboard --auth-choice kimi-code-api-key`.
-
- Lihat [Model Lokal](/id/gateway/local-models). Ringkasnya: jalankan model lokal besar melalui LM Studio Responses API pada perangkat keras yang serius; biarkan model terhosting tetap digabungkan sebagai fallback.
+
+ Lihat [Model Lokal](/id/gateway/local-models). Ringkasnya: jalankan model lokal besar melalui LM Studio Responses API pada perangkat keras yang serius; biarkan model hosted tetap digabungkan sebagai fallback.
-
+
```json5
{
agents: {
@@ -592,7 +592,7 @@ Onboarding penyedia kustom interaktif menyimpulkan input gambar untuk ID model v
}
```
- Tetapkan `MINIMAX_API_KEY`. Pintasan: `openclaw onboard --auth-choice minimax-global-api` atau `openclaw onboard --auth-choice minimax-cn-api`. Katalog model secara default hanya menggunakan M2.7. Pada jalur streaming yang kompatibel dengan Anthropic, OpenClaw menonaktifkan pemikiran MiniMax secara default kecuali Anda menetapkan `thinking` sendiri secara eksplisit. `/fast on` atau `params.fastMode: true` menulis ulang `MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`.
+ Tetapkan `MINIMAX_API_KEY`. Pintasan: `openclaw onboard --auth-choice minimax-global-api` atau `openclaw onboard --auth-choice minimax-cn-api`. Katalog model secara default hanya menggunakan M2.7. Pada jalur streaming yang kompatibel dengan Anthropic, OpenClaw menonaktifkan penalaran MiniMax secara default kecuali Anda menetapkan `thinking` sendiri secara eksplisit. `/fast on` atau `params.fastMode: true` menulis ulang `MiniMax-M2.7` menjadi `MiniMax-M2.7-highspeed`.
@@ -631,7 +631,7 @@ Onboarding penyedia kustom interaktif menyimpulkan input gambar untuk ID model v
Untuk endpoint Tiongkok: `baseUrl: "https://api.moonshot.cn/v1"` atau `openclaw onboard --auth-choice moonshot-api-key-cn`.
- Endpoint Moonshot native mengiklankan kompatibilitas penggunaan streaming pada transport bersama `openai-completions`, dan OpenClaw menentukannya berdasarkan kemampuan endpoint, bukan hanya id penyedia bawaan.
+ Endpoint Moonshot native mengiklankan kompatibilitas penggunaan streaming pada transport bersama `openai-completions`, dan OpenClaw menentukannya dari kapabilitas endpoint, bukan hanya dari id penyedia bawaan.
@@ -646,10 +646,10 @@ Onboarding penyedia kustom interaktif menyimpulkan input gambar untuk ID model v
}
```
- Tetapkan `OPENCODE_API_KEY` (atau `OPENCODE_ZEN_API_KEY`). Gunakan referensi `opencode/...` untuk katalog Zen atau referensi `opencode-go/...` untuk katalog Go. Pintasan: `openclaw onboard --auth-choice opencode-zen` atau `openclaw onboard --auth-choice opencode-go`.
+ Tetapkan `OPENCODE_API_KEY` (atau `OPENCODE_ZEN_API_KEY`). Gunakan ref `opencode/...` untuk katalog Zen atau ref `opencode-go/...` untuk katalog Go. Pintasan: `openclaw onboard --auth-choice opencode-zen` atau `openclaw onboard --auth-choice opencode-go`.
-
+
```json5
{
env: { SYNTHETIC_API_KEY: "sk-..." },
@@ -712,6 +712,6 @@ Onboarding penyedia kustom interaktif menyimpulkan input gambar untuk ID model v
## Terkait
- [Konfigurasi — agen](/id/gateway/config-agents)
-- [Konfigurasi — saluran](/id/gateway/config-channels)
+- [Konfigurasi — channel](/id/gateway/config-channels)
- [Referensi konfigurasi](/id/gateway/configuration-reference) — kunci tingkat atas lainnya
- [Alat dan plugin](/id/tools)
diff --git a/docs/id/gateway/configuration-reference.md b/docs/id/gateway/configuration-reference.md
index 6313b1dc0..39ea06ff2 100644
--- a/docs/id/gateway/configuration-reference.md
+++ b/docs/id/gateway/configuration-reference.md
@@ -1,73 +1,73 @@
---
read_when:
- Anda memerlukan semantik konfigurasi tingkat bidang atau nilai default yang tepat
- - Anda sedang memvalidasi blok konfigurasi kanal, model, Gateway, atau alat
-summary: Referensi konfigurasi Gateway untuk kunci inti OpenClaw, nilai bawaan, dan tautan ke referensi subsistem khusus
+ - Anda sedang memvalidasi blok konfigurasi saluran, model, Gateway, atau alat
+summary: Referensi konfigurasi Gateway untuk kunci inti OpenClaw, nilai default, dan tautan ke referensi subsistem khusus
title: Referensi konfigurasi
x-i18n:
- generated_at: "2026-05-03T21:31:45Z"
+ generated_at: "2026-05-05T01:45:54Z"
model: gpt-5.5
provider: openai
- source_hash: 52fa15e85a41ed5ed39102fb641bd33f0aec2e8f244c9d7b3d12b3a1b6dc62a9
+ source_hash: 82164a3ea7592f667573b643ee9e0ec840b9b622c9d86c382a3feaf192e75684
source_path: gateway/configuration-reference.md
workflow: 16
---
Referensi konfigurasi inti untuk `~/.openclaw/openclaw.json`. Untuk ikhtisar berorientasi tugas, lihat [Konfigurasi](/id/gateway/configuration).
-Mencakup permukaan konfigurasi utama OpenClaw dan menautkan ke luar saat suatu subsistem memiliki referensi yang lebih mendalam. Katalog perintah milik channel dan plugin serta pengaturan mendalam memory/QMD berada di halaman masing-masing, bukan di halaman ini.
+Mencakup permukaan konfigurasi utama OpenClaw dan menautkan keluar ketika sebuah subsistem memiliki referensi yang lebih mendalam sendiri. Katalog perintah milik saluran dan Plugin serta kenop memori mendalam/QMD berada di halaman masing-masing, bukan di halaman ini.
-Kebenaran kode:
+Sumber kebenaran kode:
-- `openclaw config schema` mencetak JSON Schema langsung yang digunakan untuk validasi dan Control UI, dengan metadata bawaan/plugin/channel digabungkan saat tersedia
-- `config.schema.lookup` mengembalikan satu node skema berbasis path untuk tooling drill-down
+- `openclaw config schema` mencetak JSON Schema langsung yang digunakan untuk validasi dan Control UI, dengan metadata bawaan/Plugin/saluran digabungkan saat tersedia
+- `config.schema.lookup` mengembalikan satu node skema berlingkup jalur untuk alat penelusuran mendalam
- `pnpm config:docs:check` / `pnpm config:docs:gen` memvalidasi hash baseline dokumen konfigurasi terhadap permukaan skema saat ini
-Jalur pencarian agen: gunakan aksi tool `gateway` `config.schema.lookup` untuk
-dokumentasi dan batasan tingkat bidang yang tepat sebelum pengeditan. Gunakan
+Jalur pencarian agen: gunakan aksi alat `gateway` `config.schema.lookup` untuk
+dokumentasi dan batasan tingkat bidang yang tepat sebelum mengedit. Gunakan
[Konfigurasi](/id/gateway/configuration) untuk panduan berorientasi tugas dan halaman ini
untuk peta bidang yang lebih luas, nilai default, dan tautan ke referensi subsistem.
Referensi mendalam khusus:
-- [Referensi konfigurasi memory](/id/reference/memory-config) untuk `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations`, dan konfigurasi Dreaming di bawah `plugins.entries.memory-core.config.dreaming`
-- [Perintah slash](/id/tools/slash-commands) untuk katalog perintah bawaan + terbundel saat ini
-- halaman channel/plugin pemilik untuk permukaan perintah khusus channel
+- [Referensi konfigurasi memori](/id/reference/memory-config) untuk `agents.defaults.memorySearch.*`, `memory.qmd.*`, `memory.citations`, dan konfigurasi dreaming di bawah `plugins.entries.memory-core.config.dreaming`
+- [Perintah slash](/id/tools/slash-commands) untuk katalog perintah bawaan + paket saat ini
+- halaman saluran/Plugin pemilik untuk permukaan perintah khusus saluran
-Format konfigurasi adalah **JSON5** (komentar + koma akhir diizinkan). Semua bidang bersifat opsional — OpenClaw menggunakan default aman saat dihilangkan.
+Format konfigurasi adalah **JSON5** (komentar + koma akhir diizinkan). Semua bidang bersifat opsional — OpenClaw menggunakan nilai default yang aman saat dihilangkan.
---
-## Channel
+## Saluran
-Kunci konfigurasi per channel dipindahkan ke halaman khusus — lihat
-[Konfigurasi — channel](/id/gateway/config-channels) untuk `channels.*`,
-termasuk Slack, Discord, Telegram, WhatsApp, Matrix, iMessage, dan channel
-terbundel lainnya (auth, kontrol akses, multi-akun, gating mention).
+Kunci konfigurasi per saluran dipindahkan ke halaman khusus — lihat
+[Konfigurasi — saluran](/id/gateway/config-channels) untuk `channels.*`,
+termasuk Slack, Discord, Telegram, WhatsApp, Matrix, iMessage, dan saluran
+paket lainnya (autentikasi, kontrol akses, multi-akun, gating sebutan).
## Default agen, multi-agen, sesi, dan pesan
Dipindahkan ke halaman khusus — lihat
[Konfigurasi — agen](/id/gateway/config-agents) untuk:
-- `agents.defaults.*` (workspace, model, thinking, Heartbeat, memory, media, Skills, sandbox)
-- `multiAgent.*` (routing dan binding multi-agen)
-- `session.*` (siklus hidup sesi, Compaction, pruning)
+- `agents.defaults.*` (workspace, model, pemikiran, Heartbeat, memori, media, Skills, sandbox)
+- `multiAgent.*` (perutean dan binding multi-agen)
+- `session.*` (siklus hidup sesi, Compaction, pemangkasan)
- `messages.*` (pengiriman pesan, TTS, rendering markdown)
- `talk.*` (mode Talk)
- `talk.speechLocale`: id lokal BCP 47 opsional untuk pengenalan ucapan Talk di iOS/macOS
- - `talk.silenceTimeoutMs`: saat tidak diatur, Talk mempertahankan jendela jeda default platform sebelum mengirim transkrip (`700 ms on macOS and Android, 900 ms on iOS`)
+ - `talk.silenceTimeoutMs`: saat tidak disetel, Talk mempertahankan jendela jeda default platform sebelum mengirim transkrip (`700 ms on macOS and Android, 900 ms on iOS`)
-## Tool dan penyedia kustom
+## Alat dan penyedia khusus
-Kebijakan tool, toggle eksperimental, konfigurasi tool yang didukung penyedia, dan penyiapan
-penyedia kustom / URL dasar dipindahkan ke halaman khusus — lihat
-[Konfigurasi — tool dan penyedia kustom](/id/gateway/config-tools).
+Kebijakan alat, toggle eksperimental, konfigurasi alat yang didukung penyedia, dan penyiapan
+penyedia khusus / URL dasar dipindahkan ke halaman khusus — lihat
+[Konfigurasi — alat dan penyedia khusus](/id/gateway/config-tools).
## Model
-Definisi penyedia, allowlist model, dan penyiapan penyedia kustom berada di
-[Konfigurasi — tool dan penyedia kustom](/id/gateway/config-tools#custom-providers-and-base-urls).
+Definisi penyedia, allowlist model, dan penyiapan penyedia khusus berada di
+[Konfigurasi — alat dan penyedia khusus](/id/gateway/config-tools#custom-providers-and-base-urls).
Root `models` juga memiliki perilaku katalog model global.
```json5
@@ -80,16 +80,16 @@ Root `models` juga memiliki perilaku katalog model global.
```
- `models.mode`: perilaku katalog penyedia (`merge` atau `replace`).
-- `models.providers`: peta penyedia kustom yang dikunci berdasarkan id penyedia.
+- `models.providers`: peta penyedia khusus yang dikunci berdasarkan id penyedia.
- `models.pricing.enabled`: mengontrol bootstrap harga latar belakang yang
- dimulai setelah sidecar dan channel mencapai jalur siap Gateway. Saat `false`,
+ dimulai setelah sidecar dan saluran mencapai jalur siap Gateway. Saat `false`,
Gateway melewati pengambilan katalog harga OpenRouter dan LiteLLM; nilai
`models.providers.*.models[].cost` yang dikonfigurasi tetap berfungsi untuk estimasi biaya lokal.
## MCP
Definisi server MCP yang dikelola OpenClaw berada di bawah `mcp.servers` dan
-digunakan oleh Pi tertanam serta adapter runtime lainnya. Perintah `openclaw mcp list`,
+digunakan oleh Pi tertanam serta adaptor runtime lainnya. Perintah `openclaw mcp list`,
`show`, `set`, dan `unset` mengelola blok ini tanpa terhubung ke
server target selama pengeditan konfigurasi.
@@ -116,16 +116,16 @@ server target selama pengeditan konfigurasi.
```
- `mcp.servers`: definisi server MCP stdio atau jarak jauh bernama untuk runtime yang
- mengekspos tool MCP yang dikonfigurasi.
+ mengekspos alat MCP yang dikonfigurasi.
Entri jarak jauh menggunakan `transport: "streamable-http"` atau `transport: "sse"`;
`type: "http"` adalah alias native CLI yang dinormalisasi oleh `openclaw mcp set` dan
`openclaw doctor --fix` ke dalam bidang kanonis `transport`.
-- `mcp.sessionIdleTtlMs`: TTL idle untuk runtime MCP terbundel berbasis sesi.
- Eksekusi tertanam sekali jalan meminta pembersihan akhir eksekusi; TTL ini adalah cadangan untuk
+- `mcp.sessionIdleTtlMs`: TTL idle untuk runtime MCP paket yang berlingkup sesi.
+ Eksekusi tertanam satu kali meminta pembersihan akhir eksekusi; TTL ini adalah pengaman untuk
sesi berumur panjang dan pemanggil masa depan.
- Perubahan di bawah `mcp.*` diterapkan panas dengan membuang runtime MCP sesi yang di-cache.
- Penemuan/penggunaan tool berikutnya membuat ulangnya dari konfigurasi baru, sehingga entri
- `mcp.servers` yang dihapus dipanen segera alih-alih menunggu TTL idle.
+ Penemuan/penggunaan alat berikutnya membuatnya ulang dari konfigurasi baru, sehingga entri
+ `mcp.servers` yang dihapus dibereskan segera alih-alih menunggu TTL idle.
Lihat [MCP](/id/cli/mcp#openclaw-as-an-mcp-client-registry) dan
[Backend CLI](/id/gateway/cli-backends#bundle-mcp-overlays) untuk perilaku runtime.
@@ -155,24 +155,25 @@ Lihat [MCP](/id/cli/mcp#openclaw-as-an-mcp-client-registry) dan
}
```
-- `allowBundled`: allowlist opsional hanya untuk Skills terbundel (Skills terkelola/workspace tidak terpengaruh).
+- `allowBundled`: allowlist opsional hanya untuk Skills paket (Skills terkelola/workspace tidak terpengaruh).
- `load.extraDirs`: root skill bersama tambahan (presedensi terendah).
-- `install.preferBrew`: saat true, utamakan installer Homebrew ketika `brew` tersedia
+- `install.preferBrew`: saat true, prioritaskan installer Homebrew saat `brew` tersedia
sebelum fallback ke jenis installer lain.
-- `install.nodeManager`: preferensi installer node untuk spesifikasi `metadata.openclaw.install`
+- `install.nodeManager`: preferensi installer Node untuk spesifikasi `metadata.openclaw.install`
(`npm` | `pnpm` | `yarn` | `bun`).
-- `entries..enabled: false` menonaktifkan skill meski terbundel/terinstal.
-- `entries..apiKey`: kemudahan untuk Skills yang mendeklarasikan env var utama (string plaintext atau objek SecretRef).
+- `entries..enabled: false` menonaktifkan skill meskipun dibundel/diinstal.
+- `entries..apiKey`: kemudahan untuk Skills yang mendeklarasikan variabel env utama (string plaintext atau objek SecretRef).
---
-## Plugin
+## Plugins
```json5
{
plugins: {
enabled: true,
allow: ["voice-call"],
+ bundledDiscovery: "allowlist",
deny: [],
load: {
paths: ["~/Projects/oss/voice-call-plugin"],
@@ -190,54 +191,58 @@ Lihat [MCP](/id/cli/mcp#openclaw-as-an-mcp-client-registry) dan
}
```
-- Dimuat dari `~/.openclaw/extensions`, `/.openclaw/extensions`, plus `plugins.load.paths`.
-- Discovery menerima Plugin native OpenClaw serta bundle Codex yang kompatibel dan bundle Claude, termasuk bundle tata letak default Claude tanpa manifest.
-- **Perubahan konfigurasi memerlukan restart gateway.**
-- `allow`: allowlist opsional (hanya Plugin yang terdaftar yang dimuat). `deny` menang.
+- Dimuat dari `~/.openclaw/extensions`, `/.openclaw/extensions`, ditambah `plugins.load.paths`.
+- Penemuan menerima Plugin OpenClaw native serta bundle Codex dan bundle Claude yang kompatibel, termasuk bundle tata letak default Claude tanpa manifest.
+- **Perubahan konfigurasi memerlukan restart Gateway.**
+- `allow`: allowlist opsional (hanya Plugin yang terdaftar dimuat). `deny` menang.
+- `bundledDiscovery`: default ke `"allowlist"` untuk konfigurasi baru, sehingga `plugins.allow`
+ yang tidak kosong juga membatasi Plugin penyedia paket, termasuk penyedia runtime
+ web-search. Doctor menulis `"compat"` untuk konfigurasi allowlist lama yang dimigrasikan
+ untuk mempertahankan perilaku penyedia paket yang ada sampai Anda memilih ikut serta.
- `plugins.entries..apiKey`: bidang kemudahan kunci API tingkat Plugin (saat didukung oleh Plugin).
-- `plugins.entries..env`: peta env var berskopa Plugin.
-- `plugins.entries..hooks.allowPromptInjection`: saat `false`, core memblokir `before_prompt_build` dan mengabaikan bidang yang memutasi prompt dari `before_agent_start` legacy, sambil mempertahankan `modelOverride` dan `providerOverride` legacy. Berlaku untuk hook Plugin native dan direktori hook yang disediakan bundle yang didukung.
-- `plugins.entries..hooks.allowConversationAccess`: saat `true`, Plugin non-terbundel tepercaya dapat membaca konten percakapan mentah dari hook bertipe seperti `llm_input`, `llm_output`, `before_agent_finalize`, dan `agent_end`.
+- `plugins.entries..env`: peta variabel env berlingkup Plugin.
+- `plugins.entries..hooks.allowPromptInjection`: saat `false`, core memblokir `before_prompt_build` dan mengabaikan bidang pengubah prompt dari `before_agent_start` lama, sambil mempertahankan `modelOverride` dan `providerOverride` lama. Berlaku untuk hook Plugin native dan direktori hook yang disediakan bundle dan didukung.
+- `plugins.entries..hooks.allowConversationAccess`: saat `true`, Plugin non-paket tepercaya dapat membaca konten percakapan mentah dari hook bertipe seperti `llm_input`, `llm_output`, `before_agent_finalize`, dan `agent_end`.
- `plugins.entries..subagent.allowModelOverride`: percayai Plugin ini secara eksplisit untuk meminta override `provider` dan `model` per eksekusi untuk eksekusi subagen latar belakang.
-- `plugins.entries..subagent.allowedModels`: allowlist opsional target `provider/model` kanonis untuk override subagen tepercaya. Gunakan `"*"` hanya saat Anda memang ingin mengizinkan model apa pun.
-- `plugins.entries..config`: objek konfigurasi yang ditentukan Plugin (divalidasi oleh skema Plugin native OpenClaw saat tersedia).
-- Pengaturan akun/runtime Plugin channel berada di bawah `channels.` dan harus dijelaskan oleh metadata `channelConfigs` manifest Plugin pemilik, bukan oleh registry opsi OpenClaw pusat.
+- `plugins.entries..subagent.allowedModels`: allowlist opsional target `provider/model` kanonis untuk override subagen tepercaya. Gunakan `"*"` hanya ketika Anda sengaja ingin mengizinkan model apa pun.
+- `plugins.entries..config`: objek konfigurasi yang didefinisikan Plugin (divalidasi oleh skema Plugin OpenClaw native saat tersedia).
+- Pengaturan akun/runtime Plugin saluran berada di bawah `channels.` dan harus dideskripsikan oleh metadata `channelConfigs` manifest Plugin pemilik, bukan oleh registry opsi OpenClaw pusat.
- `plugins.entries.firecrawl.config.webFetch`: pengaturan penyedia web-fetch Firecrawl.
- - `apiKey`: kunci API Firecrawl (menerima SecretRef). Fallback ke `plugins.entries.firecrawl.config.webSearch.apiKey`, `tools.web.fetch.firecrawl.apiKey` legacy, atau env var `FIRECRAWL_API_KEY`.
+ - `apiKey`: kunci API Firecrawl (menerima SecretRef). Fallback ke `plugins.entries.firecrawl.config.webSearch.apiKey`, `tools.web.fetch.firecrawl.apiKey` lama, atau variabel env `FIRECRAWL_API_KEY`.
- `baseUrl`: URL dasar API Firecrawl (default: `https://api.firecrawl.dev`; override self-hosted harus menargetkan endpoint privat/internal).
- `onlyMainContent`: ekstrak hanya konten utama dari halaman (default: `true`).
- - `maxAgeMs`: usia cache maksimum dalam milidetik (default: `172800000` / 2 hari).
- - `timeoutSeconds`: timeout permintaan scrape dalam detik (default: `60`).
+ - `maxAgeMs`: umur cache maksimum dalam milidetik (default: `172800000` / 2 hari).
+ - `timeoutSeconds`: batas waktu permintaan scrape dalam detik (default: `60`).
- `plugins.entries.xai.config.xSearch`: pengaturan xAI X Search (pencarian web Grok).
- `enabled`: aktifkan penyedia X Search.
- `model`: model Grok yang digunakan untuk pencarian (mis. `"grok-4-1-fast"`).
-- `plugins.entries.memory-core.config.dreaming`: pengaturan Dreaming memory. Lihat [Dreaming](/id/concepts/dreaming) untuk fase dan threshold.
- - `enabled`: sakelar utama Dreaming (default `false`).
- - `frequency`: irama Cron untuk setiap sweep Dreaming penuh (`"0 3 * * *"` secara default).
- - `model`: override model subagen Dream Diary opsional. Memerlukan `plugins.entries.memory-core.subagent.allowModelOverride: true`; pasangkan dengan `allowedModels` untuk membatasi target. Error model tidak tersedia dicoba ulang sekali dengan model default sesi; kegagalan trust atau allowlist tidak fallback secara diam-diam.
- - kebijakan fase dan threshold adalah detail implementasi (bukan kunci konfigurasi yang menghadap pengguna).
-- Konfigurasi memory penuh berada di [Referensi konfigurasi memory](/id/reference/memory-config):
+- `plugins.entries.memory-core.config.dreaming`: pengaturan memory dreaming. Lihat [Dreaming](/id/concepts/dreaming) untuk fase dan ambang.
+ - `enabled`: sakelar utama dreaming (default `false`).
+ - `frequency`: irama Cron untuk setiap sweep dreaming penuh (`"0 3 * * *"` secara default).
+ - `model`: override model subagen Dream Diary opsional. Memerlukan `plugins.entries.memory-core.subagent.allowModelOverride: true`; pasangkan dengan `allowedModels` untuk membatasi target. Error model-tidak-tersedia mencoba ulang satu kali dengan model default sesi; kegagalan kepercayaan atau allowlist tidak fallback secara diam-diam.
+ - kebijakan fase dan ambang adalah detail implementasi (bukan kunci konfigurasi yang ditampilkan ke pengguna).
+- Konfigurasi memori lengkap berada di [Referensi konfigurasi memori](/id/reference/memory-config):
- `agents.defaults.memorySearch.*`
- `memory.backend`
- `memory.citations`
- `memory.qmd.*`
- `plugins.entries.memory-core.config.dreaming`
- Plugin bundle Claude yang diaktifkan juga dapat menyumbangkan default Pi tertanam dari `settings.json`; OpenClaw menerapkannya sebagai pengaturan agen yang disanitasi, bukan sebagai patch konfigurasi OpenClaw mentah.
-- `plugins.slots.memory`: pilih id Plugin memory aktif, atau `"none"` untuk menonaktifkan Plugin memory.
-- `plugins.slots.contextEngine`: pilih id Plugin context engine aktif; default ke `"legacy"` kecuali Anda menginstal dan memilih engine lain.
+- `plugins.slots.memory`: pilih id Plugin memori aktif, atau `"none"` untuk menonaktifkan Plugin memori.
+- `plugins.slots.contextEngine`: pilih id Plugin mesin konteks aktif; default ke `"legacy"` kecuali Anda menginstal dan memilih mesin lain.
-Lihat [Plugin](/id/tools/plugin).
+Lihat [Plugins](/id/tools/plugin).
---
## Komitmen
-`commitments` mengontrol memory tindak lanjut yang diinferensikan: OpenClaw dapat mendeteksi check-in dari giliran percakapan dan mengirimkannya melalui eksekusi Heartbeat.
+`commitments` mengontrol memori tindak lanjut yang disimpulkan: OpenClaw dapat mendeteksi check-in dari giliran percakapan dan mengirimkannya melalui eksekusi Heartbeat.
-- `commitments.enabled`: aktifkan ekstraksi LLM tersembunyi, penyimpanan, dan pengiriman Heartbeat untuk komitmen tindak lanjut yang diinferensikan. Default: `false`.
-- `commitments.maxPerDay`: jumlah maksimum komitmen tindak lanjut yang diinferensikan yang dikirim per sesi agen dalam hari bergulir. Default: `3`.
+- `commitments.enabled`: aktifkan ekstraksi LLM tersembunyi, penyimpanan, dan pengiriman Heartbeat untuk komitmen tindak lanjut yang disimpulkan. Default: `false`.
+- `commitments.maxPerDay`: jumlah maksimum komitmen tindak lanjut yang disimpulkan yang dikirim per sesi agen dalam satu hari bergulir. Default: `3`.
-Lihat [Komitmen yang diinferensikan](/id/concepts/commitments).
+Lihat [Komitmen yang disimpulkan](/id/concepts/commitments).
---
@@ -288,42 +293,44 @@ Lihat [Komitmen yang diinferensikan](/id/concepts/commitments).
```
- `evaluateEnabled: false` menonaktifkan `act:evaluate` dan `wait --fn`.
-- `tabCleanup` mengklaim kembali tab agen utama yang dilacak setelah waktu tidak aktif atau ketika sebuah sesi melebihi batasnya. Tetapkan `idleMinutes: 0` atau `maxTabsPerSession: 0` untuk menonaktifkan mode pembersihan individual tersebut.
-- `ssrfPolicy.dangerouslyAllowPrivateNetwork` dinonaktifkan saat tidak ditetapkan, sehingga navigasi browser tetap ketat secara default.
-- Tetapkan `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` hanya saat Anda secara sengaja memercayai navigasi browser jaringan privat.
+- `tabCleanup` mengambil kembali tab agen utama yang dilacak setelah waktu menganggur atau saat suatu
+ sesi melampaui batasnya. Atur `idleMinutes: 0` atau `maxTabsPerSession: 0` untuk
+ menonaktifkan mode pembersihan individual tersebut.
+- `ssrfPolicy.dangerouslyAllowPrivateNetwork` dinonaktifkan saat tidak disetel, sehingga navigasi browser tetap ketat secara default.
+- Setel `ssrfPolicy.dangerouslyAllowPrivateNetwork: true` hanya saat Anda sengaja memercayai navigasi browser jaringan privat.
- Dalam mode ketat, endpoint profil CDP jarak jauh (`profiles.*.cdpUrl`) tunduk pada pemblokiran jaringan privat yang sama selama pemeriksaan keterjangkauan/penemuan.
- `ssrfPolicy.allowPrivateNetwork` tetap didukung sebagai alias lama.
- Dalam mode ketat, gunakan `ssrfPolicy.hostnameAllowlist` dan `ssrfPolicy.allowedHostnames` untuk pengecualian eksplisit.
-- Profil jarak jauh bersifat attach-only (mulai/berhenti/reset dinonaktifkan).
+- Profil jarak jauh hanya-attach (mulai/hentikan/reset dinonaktifkan).
- `profiles.*.cdpUrl` menerima `http://`, `https://`, `ws://`, dan `wss://`.
Gunakan HTTP(S) saat Anda ingin OpenClaw menemukan `/json/version`; gunakan WS(S)
- saat penyedia Anda memberi URL WebSocket DevTools langsung.
+ saat penyedia Anda memberi Anda URL WebSocket DevTools langsung.
- `remoteCdpTimeoutMs` dan `remoteCdpHandshakeTimeoutMs` berlaku untuk keterjangkauan CDP jarak jauh dan
- `attachOnly` serta permintaan pembukaan tab. Profil loopback terkelola
- mempertahankan default CDP lokal.
-- Jika layanan CDP yang dikelola secara eksternal dapat dijangkau melalui loopback, tetapkan
+ `attachOnly` beserta permintaan pembukaan tab. Profil local loopback
+ terkelola mempertahankan default CDP lokal.
+- Jika layanan CDP yang dikelola secara eksternal dapat dijangkau melalui loopback, setel
`attachOnly: true` profil tersebut; jika tidak, OpenClaw memperlakukan port loopback sebagai
profil browser lokal terkelola dan dapat melaporkan kesalahan kepemilikan port lokal.
-- Profil `existing-session` menggunakan Chrome MCP alih-alih CDP dan dapat terhubung pada
+- Profil `existing-session` menggunakan Chrome MCP alih-alih CDP dan dapat attach pada
host yang dipilih atau melalui node browser yang terhubung.
-- Profil `existing-session` dapat menetapkan `userDataDir` untuk menargetkan profil
- browser berbasis Chromium tertentu seperti Brave atau Edge.
+- Profil `existing-session` dapat menyetel `userDataDir` untuk menargetkan
+ profil browser berbasis Chromium tertentu seperti Brave atau Edge.
- Profil `existing-session` mempertahankan batas rute Chrome MCP saat ini:
tindakan berbasis snapshot/ref alih-alih penargetan selector CSS, hook unggah satu file,
- tanpa override timeout dialog, tanpa `wait --load networkidle`, dan tanpa
+ tanpa override batas waktu dialog, tanpa `wait --load networkidle`, dan tanpa
`responsebody`, ekspor PDF, intersepsi unduhan, atau tindakan batch.
-- Profil `openclaw` lokal terkelola menetapkan `cdpPort` dan `cdpUrl` secara otomatis; hanya
- tetapkan `cdpUrl` secara eksplisit untuk CDP jarak jauh.
-- Profil lokal terkelola dapat menetapkan `executablePath` untuk mengganti
- `browser.executablePath` global untuk profil tersebut. Gunakan ini untuk menjalankan satu profil di
+- Profil `openclaw` lokal terkelola menetapkan otomatis `cdpPort` dan `cdpUrl`; hanya
+ setel `cdpUrl` secara eksplisit untuk CDP jarak jauh.
+- Profil lokal terkelola dapat menyetel `executablePath` untuk menimpa
+ `browser.executablePath` global bagi profil tersebut. Gunakan ini untuk menjalankan satu profil di
Chrome dan profil lain di Brave.
- Profil lokal terkelola menggunakan `browser.localLaunchTimeoutMs` untuk penemuan HTTP CDP Chrome
setelah proses dimulai dan `browser.localCdpReadyTimeoutMs` untuk
- kesiapan websocket CDP setelah peluncuran. Naikkan nilainya pada host yang lebih lambat ketika Chrome
+ kesiapan websocket CDP pascapeluncuran. Naikkan nilainya pada host yang lebih lambat tempat Chrome
berhasil dimulai tetapi pemeriksaan kesiapan berpacu dengan startup. Kedua nilai harus berupa
- bilangan bulat positif hingga `120000` ms; nilai config yang tidak valid ditolak.
+ bilangan bulat positif hingga `120000` md; nilai konfigurasi yang tidak valid akan ditolak.
- Urutan deteksi otomatis: browser default jika berbasis Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
-- `browser.executablePath` dan `browser.profiles..executablePath` sama-sama
+- `browser.executablePath` dan `browser.profiles..executablePath` keduanya
menerima `~` dan `~/...` untuk direktori home OS Anda sebelum peluncuran Chromium.
`userDataDir` per profil pada profil `existing-session` juga diperluas dari tilde.
- Layanan kontrol: hanya loopback (port diturunkan dari `gateway.port`, default `18791`).
@@ -346,8 +353,8 @@ Lihat [Komitmen yang diinferensikan](/id/concepts/commitments).
}
```
-- `seamColor`: warna aksen untuk chrome UI aplikasi native (warna gelembung Talk Mode, dll.).
-- `assistant`: override identitas Control UI. Kembali ke identitas agen aktif.
+- `seamColor`: warna aksen untuk chrome UI aplikasi native (rona gelembung Mode Bicara, dll.).
+- `assistant`: override identitas UI Kontrol. Kembali ke identitas agen aktif.
---
@@ -423,59 +430,60 @@ Lihat [Komitmen yang diinferensikan](/id/concepts/commitments).
}
```
-
+
-- `mode`: `local` (menjalankan gateway) atau `remote` (terhubung ke gateway jarak jauh). Gateway menolak untuk berjalan kecuali `local`.
-- `port`: port tunggal termultipleks untuk WS + HTTP. Prioritas: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`.
+- `mode`: `local` (jalankan Gateway) atau `remote` (terhubung ke Gateway jarak jauh). Gateway menolak untuk dimulai kecuali `local`.
+- `port`: port termultipleks tunggal untuk WS + HTTP. Prioritas: `--port` > `OPENCLAW_GATEWAY_PORT` > `gateway.port` > `18789`.
- `bind`: `auto`, `loopback` (default), `lan` (`0.0.0.0`), `tailnet` (hanya IP Tailscale), atau `custom`.
-- **Alias bind legacy**: gunakan nilai mode bind di `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), bukan alias host (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
-- **Catatan Docker**: bind `loopback` default mendengarkan pada `127.0.0.1` di dalam kontainer. Dengan jaringan bridge Docker (`-p 18789:18789`), lalu lintas masuk melalui `eth0`, sehingga gateway tidak dapat dijangkau. Gunakan `--network host`, atau tetapkan `bind: "lan"` (atau `bind: "custom"` dengan `customBindHost: "0.0.0.0"`) untuk mendengarkan pada semua antarmuka.
-- **Auth**: wajib secara default. Bind non-loopback memerlukan auth gateway. Dalam praktiknya, ini berarti token/kata sandi bersama atau reverse proxy sadar-identitas dengan `gateway.auth.mode: "trusted-proxy"`. Wizard onboarding menghasilkan token secara default.
-- Jika `gateway.auth.token` dan `gateway.auth.password` sama-sama dikonfigurasi (termasuk SecretRefs), tetapkan `gateway.auth.mode` secara eksplisit ke `token` atau `password`. Alur startup dan instalasi/perbaikan layanan gagal ketika keduanya dikonfigurasi dan mode belum ditetapkan.
-- `gateway.auth.mode: "none"`: mode tanpa-auth eksplisit. Gunakan hanya untuk penyiapan local loopback tepercaya; ini sengaja tidak ditawarkan oleh prompt onboarding.
-- `gateway.auth.mode: "trusted-proxy"`: delegasikan auth browser/pengguna ke reverse proxy sadar-identitas dan percayai header identitas dari `gateway.trustedProxies` (lihat [Auth Proxy Tepercaya](/id/gateway/trusted-proxy-auth)). Mode ini mengharapkan sumber proxy **non-loopback** secara default; reverse proxy loopback pada host yang sama memerlukan `gateway.auth.trustedProxy.allowLoopback = true` secara eksplisit. Pemanggil internal pada host yang sama dapat menggunakan `gateway.auth.password` sebagai fallback langsung lokal; `gateway.auth.token` tetap saling eksklusif dengan mode trusted-proxy.
-- `gateway.auth.allowTailscale`: ketika `true`, header identitas Tailscale Serve dapat memenuhi auth Control UI/WebSocket (diverifikasi melalui `tailscale whois`). Endpoint HTTP API **tidak** menggunakan auth header Tailscale tersebut; endpoint mengikuti mode auth HTTP normal gateway. Alur tanpa token ini mengasumsikan host gateway tepercaya. Default ke `true` ketika `tailscale.mode = "serve"`.
-- `gateway.auth.rateLimit`: pembatas auth-gagal opsional. Berlaku per IP klien dan per cakupan auth (shared-secret dan device-token dilacak secara terpisah). Percobaan yang diblokir mengembalikan `429` + `Retry-After`.
- - Pada jalur async Tailscale Serve Control UI, percobaan gagal untuk `{scope, clientIp}` yang sama diserialkan sebelum penulisan kegagalan. Karena itu, percobaan buruk serentak dari klien yang sama dapat memicu pembatas pada permintaan kedua alih-alih keduanya berpacu sebagai ketidakcocokan biasa.
- - `gateway.auth.rateLimit.exemptLoopback` default ke `true`; tetapkan `false` ketika Anda sengaja ingin lalu lintas localhost juga dibatasi lajunya (untuk penyiapan pengujian atau deployment proxy ketat).
-- Percobaan auth WS dari origin browser selalu dibatasi dengan pengecualian loopback dinonaktifkan (pertahanan berlapis terhadap brute force localhost berbasis browser).
-- Pada loopback, lockout dari origin browser tersebut diisolasi per nilai `Origin`
+- **Alias bind lama**: gunakan nilai mode bind di `gateway.bind` (`auto`, `loopback`, `lan`, `tailnet`, `custom`), bukan alias host (`0.0.0.0`, `127.0.0.1`, `localhost`, `::`, `::1`).
+- **Catatan Docker**: bind `loopback` default mendengarkan pada `127.0.0.1` di dalam kontainer. Dengan jaringan bridge Docker (`-p 18789:18789`), lalu lintas masuk melalui `eth0`, sehingga Gateway tidak dapat dijangkau. Gunakan `--network host`, atau atur `bind: "lan"` (atau `bind: "custom"` dengan `customBindHost: "0.0.0.0"`) untuk mendengarkan pada semua antarmuka.
+- **Auth**: diwajibkan secara default. Bind non-loopback memerlukan auth Gateway. Dalam praktiknya, ini berarti token/kata sandi bersama atau reverse proxy sadar identitas dengan `gateway.auth.mode: "trusted-proxy"`. Wizard onboarding menghasilkan token secara default.
+- Jika `gateway.auth.token` dan `gateway.auth.password` sama-sama dikonfigurasi (termasuk SecretRef), atur `gateway.auth.mode` secara eksplisit ke `token` atau `password`. Alur startup serta pemasangan/perbaikan layanan gagal ketika keduanya dikonfigurasi dan mode belum diatur.
+- `gateway.auth.mode: "none"`: mode tanpa auth eksplisit. Gunakan hanya untuk penyiapan local loopback tepercaya; ini sengaja tidak ditawarkan oleh prompt onboarding.
+- `gateway.auth.mode: "trusted-proxy"`: delegasikan auth browser/pengguna ke reverse proxy sadar identitas dan percayai header identitas dari `gateway.trustedProxies` (lihat [Auth Proxy Tepercaya](/id/gateway/trusted-proxy-auth)). Mode ini mengharapkan sumber proxy **non-loopback** secara default; reverse proxy loopback pada host yang sama memerlukan `gateway.auth.trustedProxy.allowLoopback = true` secara eksplisit. Pemanggil internal pada host yang sama dapat menggunakan `gateway.auth.password` sebagai fallback langsung lokal; `gateway.auth.token` tetap saling eksklusif dengan mode trusted-proxy.
+- `gateway.auth.allowTailscale`: ketika `true`, header identitas Tailscale Serve dapat memenuhi auth Control UI/WebSocket (diverifikasi melalui `tailscale whois`). Endpoint HTTP API **tidak** menggunakan auth header Tailscale tersebut; endpoint mengikuti mode auth HTTP normal Gateway. Alur tanpa token ini mengasumsikan host Gateway tepercaya. Default ke `true` ketika `tailscale.mode = "serve"`.
+- `gateway.auth.rateLimit`: pembatas gagal-auth opsional. Berlaku per IP klien dan per cakupan auth (shared-secret dan device-token dilacak secara independen). Upaya yang diblokir mengembalikan `429` + `Retry-After`.
+ - Pada jalur Control UI Tailscale Serve asinkron, upaya gagal untuk `{scope, clientIp}` yang sama diserialkan sebelum penulisan kegagalan. Karena itu, upaya buruk serentak dari klien yang sama dapat memicu pembatas pada permintaan kedua alih-alih keduanya berlomba lolos sebagai ketidakcocokan biasa.
+ - `gateway.auth.rateLimit.exemptLoopback` default ke `true`; atur `false` ketika Anda sengaja ingin lalu lintas localhost juga dibatasi lajunya (untuk penyiapan pengujian atau deployment proxy ketat).
+- Upaya auth WS asal browser selalu dibatasi lajunya dengan pengecualian loopback dinonaktifkan (pertahanan berlapis terhadap brute force localhost berbasis browser).
+- Pada loopback, lockout asal browser tersebut diisolasi per nilai `Origin`
yang dinormalisasi, sehingga kegagalan berulang dari satu origin localhost tidak otomatis
- mengunci origin berbeda.
+ mengunci origin lain.
- `tailscale.mode`: `serve` (hanya tailnet, bind loopback) atau `funnel` (publik, memerlukan auth).
-- `controlUi.allowedOrigins`: allowlist origin browser eksplisit untuk koneksi WebSocket Gateway. Wajib ketika klien browser diharapkan berasal dari origin non-loopback.
-- `controlUi.chatMessageMaxWidth`: max-width opsional untuk pesan chat Control UI yang dikelompokkan. Menerima nilai lebar CSS terbatas seperti `960px`, `82%`, `min(1280px, 82%)`, dan `calc(100% - 2rem)`.
+- `controlUi.allowedOrigins`: allowlist asal browser eksplisit untuk koneksi WebSocket Gateway. Diperlukan ketika klien browser diharapkan berasal dari origin non-loopback.
+- `controlUi.chatMessageMaxWidth`: lebar maksimum opsional untuk pesan chat Control UI yang dikelompokkan. Menerima nilai lebar CSS terbatas seperti `960px`, `82%`, `min(1280px, 82%)`, dan `calc(100% - 2rem)`.
- `controlUi.dangerouslyAllowHostHeaderOriginFallback`: mode berbahaya yang mengaktifkan fallback origin header Host untuk deployment yang sengaja mengandalkan kebijakan origin header Host.
- `remote.transport`: `ssh` (default) atau `direct` (ws/wss). Untuk `direct`, `remote.url` harus berupa `ws://` atau `wss://`.
-- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: override darurat lingkungan-proses sisi klien
- yang mengizinkan plaintext `ws://` ke IP jaringan privat tepercaya; default tetap hanya
- loopback untuk plaintext. Tidak ada padanan `openclaw.json`, dan konfigurasi jaringan privat
- browser seperti `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` tidak memengaruhi klien
- WebSocket Gateway.
-- `gateway.remote.token` / `.password` adalah field kredensial klien jarak jauh. Field ini tidak mengonfigurasi auth gateway dengan sendirinya.
-- `gateway.push.apns.relay.baseUrl`: URL HTTPS dasar untuk relay APNs eksternal yang digunakan build iOS resmi/TestFlight setelah build tersebut menerbitkan registrasi berbasis relay ke gateway. URL ini harus cocok dengan URL relay yang dikompilasi ke dalam build iOS.
-- `gateway.push.apns.relay.timeoutMs`: timeout pengiriman gateway-ke-relay dalam milidetik. Default ke `10000`.
-- Registrasi berbasis relay didelegasikan ke identitas gateway tertentu. Aplikasi iOS yang dipasangkan mengambil `gateway.identity.get`, menyertakan identitas tersebut dalam registrasi relay, dan meneruskan izin kirim bercakupan registrasi ke gateway. Gateway lain tidak dapat menggunakan ulang registrasi tersimpan tersebut.
+- `OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`: override darurat lingkungan proses sisi klien
+ yang mengizinkan plaintext `ws://` ke IP jaringan privat tepercaya; default tetap hanya loopback
+ untuk plaintext. Tidak ada padanan `openclaw.json`,
+ dan konfigurasi jaringan privat browser seperti
+ `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork` tidak memengaruhi klien WebSocket
+ Gateway.
+- `gateway.remote.token` / `.password` adalah field kredensial klien jarak jauh. Field ini tidak mengonfigurasi auth Gateway dengan sendirinya.
+- `gateway.push.apns.relay.baseUrl`: URL HTTPS dasar untuk relay APNs eksternal yang digunakan oleh build iOS resmi/TestFlight setelah build tersebut menerbitkan registrasi berbasis relay ke Gateway. URL ini harus cocok dengan URL relay yang dikompilasi ke dalam build iOS.
+- `gateway.push.apns.relay.timeoutMs`: timeout pengiriman Gateway-ke-relay dalam milidetik. Default ke `10000`.
+- Registrasi berbasis relay didelegasikan ke identitas Gateway tertentu. Aplikasi iOS yang dipasangkan mengambil `gateway.identity.get`, menyertakan identitas tersebut dalam registrasi relay, dan meneruskan grant pengiriman bercakupan registrasi ke Gateway. Gateway lain tidak dapat menggunakan ulang registrasi tersimpan tersebut.
- `OPENCLAW_APNS_RELAY_BASE_URL` / `OPENCLAW_APNS_RELAY_TIMEOUT_MS`: override env sementara untuk konfigurasi relay di atas.
-- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: escape hatch khusus pengembangan untuk URL relay HTTP loopback. URL relay produksi sebaiknya tetap menggunakan HTTPS.
-- `gateway.handshakeTimeoutMs`: timeout handshake WebSocket Gateway pra-auth dalam milidetik. Default: `15000`. `OPENCLAW_HANDSHAKE_TIMEOUT_MS` diprioritaskan ketika ditetapkan. Naikkan nilai ini pada host berbeban atau berdaya rendah ketika klien lokal dapat terhubung sementara pemanasan startup masih belum stabil.
-- `gateway.channelHealthCheckMinutes`: interval monitor kesehatan channel dalam menit. Tetapkan `0` untuk menonaktifkan restart monitor kesehatan secara global. Default: `5`.
-- `gateway.channelStaleEventThresholdMinutes`: ambang socket usang dalam menit. Pertahankan ini lebih besar dari atau sama dengan `gateway.channelHealthCheckMinutes`. Default: `30`.
-- `gateway.channelMaxRestartsPerHour`: restart monitor kesehatan maksimum per channel/akun dalam jam berjalan. Default: `10`.
+- `OPENCLAW_APNS_RELAY_ALLOW_HTTP=true`: celah khusus pengembangan untuk URL relay HTTP loopback. URL relay produksi sebaiknya tetap menggunakan HTTPS.
+- `gateway.handshakeTimeoutMs`: timeout handshake WebSocket Gateway pra-auth dalam milidetik. Default: `15000`. `OPENCLAW_HANDSHAKE_TIMEOUT_MS` diprioritaskan ketika diatur. Tingkatkan ini pada host berbeban atau berdaya rendah ketika klien lokal dapat terhubung sementara pemanasan startup masih stabil.
+- `gateway.channelHealthCheckMinutes`: interval monitor kesehatan channel dalam menit. Atur `0` untuk menonaktifkan restart monitor kesehatan secara global. Default: `5`.
+- `gateway.channelStaleEventThresholdMinutes`: ambang soket stale dalam menit. Pastikan ini lebih besar dari atau sama dengan `gateway.channelHealthCheckMinutes`. Default: `30`.
+- `gateway.channelMaxRestartsPerHour`: jumlah maksimum restart monitor kesehatan per channel/akun dalam satu jam berjalan. Default: `10`.
- `channels..healthMonitor.enabled`: opt-out per channel untuk restart monitor kesehatan sambil tetap mengaktifkan monitor global.
-- `channels..accounts..healthMonitor.enabled`: override per akun untuk channel multi-akun. Ketika ditetapkan, ini diprioritaskan atas override level channel.
-- Jalur panggilan gateway lokal dapat menggunakan `gateway.remote.*` sebagai fallback hanya ketika `gateway.auth.*` belum ditetapkan.
-- Jika `gateway.auth.token` / `gateway.auth.password` secara eksplisit dikonfigurasi melalui SecretRef dan tidak terselesaikan, resolusi gagal tertutup (tanpa masking fallback jarak jauh).
-- `trustedProxies`: IP reverse proxy yang mengakhiri TLS atau menyuntikkan header klien-terusan. Hanya cantumkan proxy yang Anda kendalikan. Entri loopback tetap valid untuk penyiapan proxy/deteksi-lokal pada host yang sama (misalnya Tailscale Serve atau reverse proxy lokal), tetapi entri tersebut **tidak** membuat permintaan loopback memenuhi syarat untuk `gateway.auth.mode: "trusted-proxy"`.
-- `allowRealIpFallback`: ketika `true`, gateway menerima `X-Real-IP` jika `X-Forwarded-For` tidak ada. Default `false` untuk perilaku gagal-tertutup.
-- `gateway.nodes.pairing.autoApproveCidrs`: allowlist CIDR/IP opsional untuk menyetujui otomatis pairing perangkat node pertama kali tanpa cakupan yang diminta. Dinonaktifkan ketika belum ditetapkan. Ini tidak menyetujui otomatis pairing operator/browser/Control UI/WebChat, dan tidak menyetujui otomatis peningkatan role, cakupan, metadata, atau kunci publik.
-- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: pembentukan allow/deny global untuk perintah node yang dideklarasikan setelah pairing dan evaluasi allowlist platform. Gunakan `allowCommands` untuk memilih masuk ke perintah node berbahaya seperti `camera.snap`, `camera.clip`, dan `screen.record`; `denyCommands` menghapus perintah bahkan jika default platform atau allow eksplisit seharusnya menyertakannya. Setelah node mengubah daftar perintah yang dideklarasikan, tolak dan setujui ulang pairing perangkat tersebut agar gateway menyimpan snapshot perintah yang diperbarui.
+- `channels..accounts..healthMonitor.enabled`: override per akun untuk channel multi-akun. Ketika diatur, ini diprioritaskan daripada override tingkat channel.
+- Jalur panggilan Gateway lokal dapat menggunakan `gateway.remote.*` sebagai fallback hanya ketika `gateway.auth.*` belum diatur.
+- Jika `gateway.auth.token` / `gateway.auth.password` secara eksplisit dikonfigurasi melalui SecretRef dan tidak terselesaikan, resolusi gagal tertutup (tanpa fallback jarak jauh yang menyamarkan).
+- `trustedProxies`: IP reverse proxy yang mengakhiri TLS atau menyuntikkan header klien yang diteruskan. Hanya cantumkan proxy yang Anda kontrol. Entri loopback tetap valid untuk penyiapan proxy/deteksi lokal pada host yang sama (misalnya Tailscale Serve atau reverse proxy lokal), tetapi entri tersebut **tidak** membuat permintaan loopback memenuhi syarat untuk `gateway.auth.mode: "trusted-proxy"`.
+- `allowRealIpFallback`: ketika `true`, Gateway menerima `X-Real-IP` jika `X-Forwarded-For` tidak ada. Default `false` untuk perilaku gagal tertutup.
+- `gateway.nodes.pairing.autoApproveCidrs`: allowlist CIDR/IP opsional untuk menyetujui otomatis pairing perangkat node pertama kali tanpa cakupan yang diminta. Ini dinonaktifkan ketika belum diatur. Ini tidak menyetujui otomatis pairing operator/browser/Control UI/WebChat, dan tidak menyetujui otomatis peningkatan peran, cakupan, metadata, atau kunci publik.
+- `gateway.nodes.allowCommands` / `gateway.nodes.denyCommands`: pembentukan allow/deny global untuk perintah node yang dideklarasikan setelah pairing dan evaluasi allowlist platform. Gunakan `allowCommands` untuk ikut mengaktifkan perintah node berbahaya seperti `camera.snap`, `camera.clip`, dan `screen.record`; `denyCommands` menghapus perintah meskipun default platform atau allow eksplisit sebaliknya akan menyertakannya. Setelah sebuah node mengubah daftar perintah yang dideklarasikan, tolak dan setujui ulang pairing perangkat tersebut agar Gateway menyimpan snapshot perintah yang diperbarui.
- `gateway.tools.deny`: nama tool tambahan yang diblokir untuk HTTP `POST /tools/invoke` (memperluas daftar deny default).
- `gateway.tools.allow`: hapus nama tool dari daftar deny HTTP default.
-### Endpoint kompatibel OpenAI
+### Endpoint yang kompatibel dengan OpenAI
- Chat Completions: dinonaktifkan secara default. Aktifkan dengan `gateway.http.endpoints.chatCompletions.enabled: true`.
- Responses API: `gateway.http.endpoints.responses.enabled`.
@@ -483,14 +491,14 @@ Lihat [Komitmen yang diinferensikan](/id/concepts/commitments).
- `gateway.http.endpoints.responses.maxUrlParts`
- `gateway.http.endpoints.responses.files.urlAllowlist`
- `gateway.http.endpoints.responses.images.urlAllowlist`
- Allowlist kosong diperlakukan sebagai belum ditetapkan; gunakan `gateway.http.endpoints.responses.files.allowUrl=false`
+ Allowlist kosong diperlakukan sebagai belum diatur; gunakan `gateway.http.endpoints.responses.files.allowUrl=false`
dan/atau `gateway.http.endpoints.responses.images.allowUrl=false` untuk menonaktifkan pengambilan URL.
- Header penguatan respons opsional:
- - `gateway.http.securityHeaders.strictTransportSecurity` (tetapkan hanya untuk origin HTTPS yang Anda kendalikan; lihat [Auth Proxy Tepercaya](/id/gateway/trusted-proxy-auth#tls-termination-and-hsts))
+ - `gateway.http.securityHeaders.strictTransportSecurity` (atur hanya untuk origin HTTPS yang Anda kontrol; lihat [Auth Proxy Tepercaya](/id/gateway/trusted-proxy-auth#tls-termination-and-hsts))
### Isolasi multi-instans
-Jalankan beberapa gateway pada satu host dengan port dan direktori state unik:
+Jalankan beberapa Gateway pada satu host dengan port dan direktori state yang unik:
```bash
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
@@ -498,7 +506,7 @@ OPENCLAW_STATE_DIR=~/.openclaw-a \
openclaw gateway --port 19001
```
-Flag praktis: `--dev` (menggunakan `~/.openclaw-dev` + port `19001`), `--profile ` (menggunakan `~/.openclaw-`).
+Flag kemudahan: `--dev` (menggunakan `~/.openclaw-dev` + port `19001`), `--profile ` (menggunakan `~/.openclaw-`).
Lihat [Beberapa Gateway](/id/gateway/multiple-gateways).
@@ -518,11 +526,11 @@ Lihat [Beberapa Gateway](/id/gateway/multiple-gateways).
}
```
-- `enabled`: mengaktifkan terminasi TLS pada listener gateway (HTTPS/WSS) (default: `false`).
-- `autoGenerate`: menghasilkan otomatis pasangan sertifikat/kunci self-signed lokal ketika file eksplisit tidak dikonfigurasi; hanya untuk penggunaan lokal/dev.
-- `certPath`: path sistem file ke file sertifikat TLS.
-- `keyPath`: path sistem file ke file kunci privat TLS; pertahankan izin tetap terbatas.
-- `caPath`: path bundle CA opsional untuk verifikasi klien atau rantai kepercayaan kustom.
+- `enabled`: mengaktifkan terminasi TLS pada listener Gateway (HTTPS/WSS) (default: `false`).
+- `autoGenerate`: menghasilkan otomatis pasangan cert/key self-signed lokal ketika file eksplisit tidak dikonfigurasi; hanya untuk penggunaan lokal/dev.
+- `certPath`: path filesystem ke file sertifikat TLS.
+- `keyPath`: path filesystem ke file kunci privat TLS; batasi izinnya.
+- `caPath`: path bundel CA opsional untuk verifikasi klien atau rantai trust khusus.
### `gateway.reload`
@@ -538,17 +546,17 @@ Lihat [Beberapa Gateway](/id/gateway/multiple-gateways).
}
```
-- `mode`: mengontrol bagaimana edit konfigurasi diterapkan saat runtime.
- - `"off"`: abaikan edit langsung; perubahan memerlukan restart eksplisit.
- - `"restart"`: selalu restart proses gateway saat konfigurasi berubah.
- - `"hot"`: terapkan perubahan dalam-proses tanpa restart.
+- `mode`: mengontrol cara edit konfigurasi diterapkan saat runtime.
+ - `"off"`: abaikan edit live; perubahan memerlukan restart eksplisit.
+ - `"restart"`: selalu restart proses Gateway saat konfigurasi berubah.
+ - `"hot"`: terapkan perubahan di dalam proses tanpa restart.
- `"hybrid"` (default): coba hot reload terlebih dahulu; fallback ke restart jika diperlukan.
- `debounceMs`: jendela debounce dalam ms sebelum perubahan konfigurasi diterapkan (bilangan bulat non-negatif).
-- `deferralTimeoutMs`: waktu maksimum opsional dalam ms untuk menunggu operasi yang sedang berjalan sebelum memaksa restart. Hilangkan untuk menggunakan tunggu terbatas default (`300000`); tetapkan `0` untuk menunggu tanpa batas dan mencatat peringatan masih-tertunda secara berkala.
+- `deferralTimeoutMs`: waktu maksimum opsional dalam ms untuk menunggu operasi yang sedang berjalan sebelum memaksa restart. Hilangkan untuk menggunakan waktu tunggu terbatas default (`300000`); atur `0` untuk menunggu tanpa batas dan mencatat peringatan masih-tertunda secara berkala.
---
-## Kait
+## Hook
```json5
{
@@ -582,47 +590,47 @@ Lihat [Beberapa Gateway](/id/gateway/multiple-gateways).
```
Autentikasi: `Authorization: Bearer ` atau `x-openclaw-token: `.
-Token hook string kueri ditolak.
+Token hook dalam query string ditolak.
Catatan validasi dan keamanan:
- `hooks.enabled=true` memerlukan `hooks.token` yang tidak kosong.
- `hooks.token` harus **berbeda** dari `gateway.auth.token`; penggunaan ulang token Gateway ditolak.
-- `hooks.path` tidak boleh `/`; gunakan subjalur khusus seperti `/hooks`.
+- `hooks.path` tidak boleh `/`; gunakan subpath khusus seperti `/hooks`.
- Jika `hooks.allowRequestSessionKey=true`, batasi `hooks.allowedSessionKeyPrefixes` (misalnya `["hook:"]`).
-- Jika pemetaan atau preset menggunakan `sessionKey` bertemplat, tetapkan `hooks.allowedSessionKeyPrefixes` dan `hooks.allowRequestSessionKey=true`. Kunci pemetaan statis tidak memerlukan opt-in tersebut.
+- Jika pemetaan atau preset menggunakan `sessionKey` bertemplat, atur `hooks.allowedSessionKeyPrefixes` dan `hooks.allowRequestSessionKey=true`. Kunci pemetaan statis tidak memerlukan opt-in tersebut.
-**Endpoint:**
+**Titik akhir:**
- `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }`
- `POST /hooks/agent` → `{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
- - `sessionKey` dari payload permintaan hanya diterima saat `hooks.allowRequestSessionKey=true` (default: `false`).
+ - `sessionKey` dari payload permintaan hanya diterima ketika `hooks.allowRequestSessionKey=true` (bawaan: `false`).
- `POST /hooks/` → diselesaikan melalui `hooks.mappings`
- Nilai `sessionKey` pemetaan yang dirender dari templat diperlakukan sebagai nilai yang dipasok secara eksternal dan juga memerlukan `hooks.allowRequestSessionKey=true`.
-
+
-- `match.path` mencocokkan subjalur setelah `/hooks` (mis. `/hooks/gmail` → `gmail`).
-- `match.source` mencocokkan kolom payload untuk jalur generik.
+- `match.path` mencocokkan subpath setelah `/hooks` (misalnya `/hooks/gmail` → `gmail`).
+- `match.source` mencocokkan kolom payload untuk path generik.
- Templat seperti `{{messages[0].subject}}` membaca dari payload.
-- `transform` dapat mengarah ke modul JS/TS yang mengembalikan aksi hook.
- - `transform.module` harus berupa jalur relatif dan tetap berada dalam `hooks.transformsDir` (jalur absolut dan traversal ditolak).
- - Simpan `hooks.transformsDir` di bawah `~/.openclaw/hooks/transforms`; direktori skill workspace ditolak. Jika `openclaw doctor` melaporkan jalur ini tidak valid, pindahkan modul transform ke direktori transform hook atau hapus `hooks.transformsDir`.
-- `agentId` merutekan ke agen tertentu; ID yang tidak dikenal kembali ke default.
+- `transform` dapat menunjuk ke modul JS/TS yang mengembalikan tindakan hook.
+ - `transform.module` harus berupa path relatif dan tetap berada di dalam `hooks.transformsDir` (path absolut dan traversal ditolak).
+ - Simpan `hooks.transformsDir` di bawah `~/.openclaw/hooks/transforms`; direktori skill workspace ditolak. Jika `openclaw doctor` melaporkan path ini tidak valid, pindahkan modul transform ke direktori transform hook atau hapus `hooks.transformsDir`.
+- `agentId` merutekan ke agen tertentu; ID yang tidak dikenal kembali ke bawaan.
- `allowedAgentIds`: membatasi perutean eksplisit (`*` atau dihilangkan = izinkan semua, `[]` = tolak semua).
-- `defaultSessionKey`: kunci sesi tetap opsional untuk eksekusi agen hook tanpa `sessionKey` eksplisit.
-- `allowRequestSessionKey`: mengizinkan pemanggil `/hooks/agent` dan kunci sesi pemetaan berbasis templat untuk menetapkan `sessionKey` (default: `false`).
-- `allowedSessionKeyPrefixes`: allowlist prefiks opsional untuk nilai `sessionKey` eksplisit (permintaan + pemetaan), mis. `["hook:"]`. Ini menjadi wajib saat pemetaan atau preset apa pun menggunakan `sessionKey` bertemplat.
-- `deliver: true` mengirim balasan akhir ke channel; `channel` default ke `last`.
-- `model` mengganti LLM untuk eksekusi hook ini (harus diizinkan jika katalog model ditetapkan).
+- `defaultSessionKey`: kunci sesi tetap opsional untuk proses agen hook tanpa `sessionKey` eksplisit.
+- `allowRequestSessionKey`: izinkan pemanggil `/hooks/agent` dan kunci sesi pemetaan berbasis templat untuk mengatur `sessionKey` (bawaan: `false`).
+- `allowedSessionKeyPrefixes`: allowlist prefiks opsional untuk nilai `sessionKey` eksplisit (permintaan + pemetaan), misalnya `["hook:"]`. Ini menjadi wajib ketika pemetaan atau preset apa pun menggunakan `sessionKey` bertemplat.
+- `deliver: true` mengirim balasan final ke channel; `channel` bawaan ke `last`.
+- `model` menimpa LLM untuk proses hook ini (harus diizinkan jika katalog model diatur).
### Integrasi Gmail
- Preset Gmail bawaan menggunakan `sessionKey: "hook:gmail:{{messages[0].id}}"`.
-- Jika Anda mempertahankan perutean per pesan tersebut, tetapkan `hooks.allowRequestSessionKey: true` dan batasi `hooks.allowedSessionKeyPrefixes` agar cocok dengan namespace Gmail, misalnya `["hook:", "hook:gmail:"]`.
-- Jika Anda membutuhkan `hooks.allowRequestSessionKey: false`, timpa preset dengan `sessionKey` statis alih-alih default bertemplat.
+- Jika Anda mempertahankan perutean per pesan tersebut, atur `hooks.allowRequestSessionKey: true` dan batasi `hooks.allowedSessionKeyPrefixes` agar cocok dengan namespace Gmail, misalnya `["hook:", "hook:gmail:"]`.
+- Jika Anda memerlukan `hooks.allowRequestSessionKey: false`, timpa preset dengan `sessionKey` statis alih-alih bawaan bertemplat.
```json5
{
@@ -645,12 +653,12 @@ Catatan validasi dan keamanan:
}
```
-- Gateway otomatis memulai `gog gmail watch serve` saat boot ketika dikonfigurasi. Tetapkan `OPENCLAW_SKIP_GMAIL_WATCHER=1` untuk menonaktifkan.
-- Jangan menjalankan `gog gmail watch serve` terpisah bersamaan dengan Gateway.
+- Gateway otomatis menjalankan `gog gmail watch serve` saat boot ketika dikonfigurasi. Atur `OPENCLAW_SKIP_GMAIL_WATCHER=1` untuk menonaktifkan.
+- Jangan jalankan `gog gmail watch serve` terpisah bersamaan dengan Gateway.
---
-## Host canvas
+## Host kanvas
```json5
{
@@ -665,15 +673,15 @@ Catatan validasi dan keamanan:
- Menyajikan HTML/CSS/JS yang dapat diedit agen dan A2UI melalui HTTP di bawah port Gateway:
- `http://:/__openclaw__/canvas/`
- `http://:/__openclaw__/a2ui/`
-- Hanya lokal: pertahankan `gateway.bind: "loopback"` (default).
-- Bind non-loopback: rute canvas memerlukan autentikasi Gateway (token/password/trusted-proxy), sama seperti surface HTTP Gateway lainnya.
-- Node WebViews biasanya tidak mengirim header autentikasi; setelah sebuah node dipasangkan dan terhubung, Gateway mengiklankan URL kapabilitas berscope node untuk akses canvas/A2UI.
+- Hanya lokal: pertahankan `gateway.bind: "loopback"` (bawaan).
+- Bind non-loopback: rute kanvas memerlukan autentikasi Gateway (token/kata sandi/proksi tepercaya), sama seperti permukaan HTTP Gateway lainnya.
+- WebView Node biasanya tidak mengirim header autentikasi; setelah node dipasangkan dan terhubung, Gateway mengiklankan URL kapabilitas bercakupan node untuk akses kanvas/A2UI.
- URL kapabilitas terikat ke sesi WS node aktif dan cepat kedaluwarsa. Fallback berbasis IP tidak digunakan.
- Menyuntikkan klien live-reload ke HTML yang disajikan.
-- Otomatis membuat `index.html` awal saat kosong.
+- Otomatis membuat `index.html` awal ketika kosong.
- Juga menyajikan A2UI di `/__openclaw__/a2ui/`.
- Perubahan memerlukan restart gateway.
-- Nonaktifkan live reload untuk direktori besar atau kesalahan `EMFILE`.
+- Nonaktifkan pemuatan ulang langsung untuk direktori besar atau kesalahan `EMFILE`.
---
@@ -691,11 +699,11 @@ Catatan validasi dan keamanan:
}
```
-- `minimal` (default saat Plugin `bonjour` bawaan diaktifkan): hilangkan `cliPath` + `sshPort` dari catatan TXT.
-- `full`: sertakan `cliPath` + `sshPort`; iklan multicast LAN tetap memerlukan Plugin `bonjour` bawaan diaktifkan.
-- `off`: menekan iklan multicast LAN tanpa mengubah pengaktifan Plugin.
-- Plugin `bonjour` bawaan otomatis dimulai pada host macOS dan bersifat opt-in pada Linux, Windows, dan deployment Gateway dalam container.
-- Hostname default ke hostname sistem saat merupakan label DNS yang valid, dengan fallback ke `openclaw`. Timpa dengan `OPENCLAW_MDNS_HOSTNAME`.
+- `minimal` (bawaan ketika plugin `bonjour` yang dibundel diaktifkan): hilangkan `cliPath` + `sshPort` dari catatan TXT.
+- `full`: sertakan `cliPath` + `sshPort`; iklan multicast LAN tetap memerlukan plugin `bonjour` yang dibundel untuk diaktifkan.
+- `off`: menekan iklan multicast LAN tanpa mengubah pengaktifan plugin.
+- Plugin `bonjour` yang dibundel otomatis berjalan di host macOS dan bersifat opt-in di Linux, Windows, serta deployment Gateway dalam kontainer.
+- Nama host bawaan ke nama host sistem ketika merupakan label DNS yang valid, dengan fallback ke `openclaw`. Timpa dengan `OPENCLAW_MDNS_HOSTNAME`.
### Area luas (DNS-SD)
@@ -707,7 +715,7 @@ Catatan validasi dan keamanan:
}
```
-Menulis zona DNS-SD unicast di bawah `~/.openclaw/dns/`. Untuk penemuan lintas jaringan, pasangkan dengan server DNS (CoreDNS direkomendasikan) + DNS split Tailscale.
+Menulis zona DNS-SD unicast di bawah `~/.openclaw/dns/`. Untuk penemuan lintas jaringan, pasangkan dengan server DNS (CoreDNS direkomendasikan) + DNS terpisah Tailscale.
Penyiapan: `openclaw dns setup --apply`.
@@ -739,7 +747,7 @@ Penyiapan: `openclaw dns setup --apply`.
### Substitusi variabel env
-Rujuk variabel env dalam string konfigurasi apa pun dengan `${VAR_NAME}`:
+Referensikan variabel env dalam string konfigurasi apa pun dengan `${VAR_NAME}`:
```json5
{
@@ -758,7 +766,7 @@ Rujuk variabel env dalam string konfigurasi apa pun dengan `${VAR_NAME}`:
## Rahasia
-Referensi rahasia bersifat aditif: nilai plaintext tetap berfungsi.
+Referensi rahasia bersifat aditif: nilai teks biasa tetap berfungsi.
### `SecretRef`
@@ -772,9 +780,9 @@ Validasi:
- Pola `provider`: `^[a-z][a-z0-9_-]{0,63}$`
- Pola id `source: "env"`: `^[A-Z][A-Z0-9_]{0,127}$`
-- id `source: "file"`: pointer JSON absolut (misalnya `"/providers/openai/apiKey"`)
+- Id `source: "file"`: pointer JSON absolut (misalnya `"/providers/openai/apiKey"`)
- Pola id `source: "exec"`: `^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$`
-- id `source: "exec"` tidak boleh berisi segmen path berbatas slash `.` atau `..` (misalnya `a/../b` ditolak)
+- Id `source: "exec"` tidak boleh berisi segmen path berbatas slash `.` atau `..` (misalnya `a/../b` ditolak)
### Permukaan kredensial yang didukung
@@ -812,14 +820,14 @@ Validasi:
Catatan:
-- Penyedia `file` mendukung `mode: "json"` dan `mode: "singleValue"` (`id` harus `"value"` dalam mode singleValue).
-- Path penyedia file dan exec gagal tertutup saat verifikasi ACL Windows tidak tersedia. Tetapkan `allowInsecurePath: true` hanya untuk path tepercaya yang tidak dapat diverifikasi.
+- Penyedia `file` mendukung `mode: "json"` dan `mode: "singleValue"` (`id` harus berupa `"value"` dalam mode singleValue).
+- Path penyedia file dan exec gagal tertutup saat verifikasi ACL Windows tidak tersedia. Atur `allowInsecurePath: true` hanya untuk path tepercaya yang tidak dapat diverifikasi.
- Penyedia `exec` memerlukan path `command` absolut dan menggunakan payload protokol pada stdin/stdout.
-- Secara default, path perintah symlink ditolak. Tetapkan `allowSymlinkCommand: true` untuk mengizinkan path symlink sambil memvalidasi path target yang di-resolve.
-- Jika `trustedDirs` dikonfigurasi, pemeriksaan direktori tepercaya berlaku pada path target yang di-resolve.
-- Environment child `exec` minimal secara default; teruskan variabel yang diperlukan secara eksplisit dengan `passEnv`.
+- Secara default, path perintah symlink ditolak. Atur `allowSymlinkCommand: true` untuk mengizinkan path symlink sambil memvalidasi path target yang telah di-resolve.
+- Jika `trustedDirs` dikonfigurasi, pemeriksaan direktori tepercaya berlaku pada path target yang telah di-resolve.
+- Lingkungan child `exec` minimal secara default; teruskan variabel yang diperlukan secara eksplisit dengan `passEnv`.
- Referensi rahasia di-resolve pada waktu aktivasi menjadi snapshot dalam memori, lalu path permintaan hanya membaca snapshot tersebut.
-- Pemfilteran permukaan aktif berlaku selama aktivasi: referensi yang belum di-resolve pada permukaan yang diaktifkan menggagalkan startup/reload, sementara permukaan tidak aktif dilewati dengan diagnostik.
+- Pemfilteran permukaan aktif berlaku selama aktivasi: referensi yang belum di-resolve pada permukaan yang diaktifkan menggagalkan startup/reload, sedangkan permukaan yang tidak aktif dilewati dengan diagnostik.
---
@@ -843,12 +851,12 @@ Catatan:
- Profil per agen disimpan di `/auth-profiles.json`.
- `auth-profiles.json` mendukung referensi tingkat nilai (`keyRef` untuk `api_key`, `tokenRef` untuk `token`) untuk mode kredensial statis.
-- Peta datar lama `auth-profiles.json` seperti `{ "provider": { "apiKey": "..." } }` bukan format runtime; `openclaw doctor --fix` menulis ulangnya menjadi profil API-key `provider:default` kanonis dengan cadangan `.legacy-flat.*.bak`.
-- Profil mode OAuth (`auth.profiles..mode = "oauth"`) tidak mendukung kredensial profil auth yang didukung SecretRef.
+- Peta datar `auth-profiles.json` lama seperti `{ "provider": { "apiKey": "..." } }` bukan format runtime; `openclaw doctor --fix` menulis ulangnya menjadi profil API-key `provider:default` kanonis dengan cadangan `.legacy-flat.*.bak`.
+- Profil mode OAuth (`auth.profiles..mode = "oauth"`) tidak mendukung kredensial auth-profile yang didukung SecretRef.
- Kredensial runtime statis berasal dari snapshot yang telah di-resolve dalam memori; entri `auth.json` statis lama dibersihkan saat ditemukan.
-- Impor OAuth lama berasal dari `~/.openclaw/credentials/oauth.json`.
+- Impor OAuth lama dari `~/.openclaw/credentials/oauth.json`.
- Lihat [OAuth](/id/concepts/oauth).
-- Perilaku runtime rahasia dan tooling `audit/configure/apply`: [Manajemen Rahasia](/id/gateway/secrets).
+- Perilaku runtime rahasia dan alat `audit/configure/apply`: [Manajemen Rahasia](/id/gateway/secrets).
### `auth.cooldowns`
@@ -870,15 +878,15 @@ Catatan:
}
```
-- `billingBackoffHours`: backoff dasar dalam jam saat profil gagal karena kesalahan penagihan/kredit-tidak-mencukupi yang benar-benar terjadi (default: `5`). Teks penagihan eksplisit masih bisa masuk ke sini bahkan pada respons `401`/`403`, tetapi pencocok teks spesifik penyedia tetap dibatasi pada penyedia yang memilikinya (misalnya OpenRouter `Key limit exceeded`). Pesan HTTP `402` yang dapat dicoba ulang untuk usage-window atau batas belanja organisasi/workspace tetap berada di jalur `rate_limit`.
+- `billingBackoffHours`: backoff dasar dalam jam saat profil gagal karena error penagihan/kredit-tidak-mencukupi yang sebenarnya (default: `5`). Teks penagihan eksplisit masih dapat masuk ke sini bahkan pada respons `401`/`403`, tetapi pencocok teks khusus penyedia tetap dibatasi pada penyedia yang memilikinya (misalnya OpenRouter `Key limit exceeded`). Pesan HTTP `402` usage-window atau batas pembelanjaan organisasi/workspace yang dapat dicoba ulang tetap berada di jalur `rate_limit`.
- `billingBackoffHoursByProvider`: override opsional per penyedia untuk jam backoff penagihan.
- `billingMaxHours`: batas dalam jam untuk pertumbuhan eksponensial backoff penagihan (default: `24`).
- `authPermanentBackoffMinutes`: backoff dasar dalam menit untuk kegagalan `auth_permanent` dengan keyakinan tinggi (default: `10`).
- `authPermanentMaxMinutes`: batas dalam menit untuk pertumbuhan backoff `auth_permanent` (default: `60`).
- `failureWindowHours`: jendela bergulir dalam jam yang digunakan untuk penghitung backoff (default: `24`).
-- `overloadedProfileRotations`: rotasi auth-profile penyedia-sama maksimum untuk kesalahan kelebihan beban sebelum beralih ke fallback model (default: `1`). Bentuk penyedia-sibuk seperti `ModelNotReadyException` masuk ke sini.
-- `overloadedBackoffMs`: jeda tetap sebelum mencoba ulang rotasi penyedia/profil yang kelebihan beban (default: `0`).
-- `rateLimitedProfileRotations`: rotasi auth-profile penyedia-sama maksimum untuk kesalahan batas laju sebelum beralih ke fallback model (default: `1`). Bucket batas laju itu mencakup teks berbentuk penyedia seperti `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded`, dan `resource exhausted`.
+- `overloadedProfileRotations`: maksimum rotasi profil autentikasi penyedia yang sama untuk error kelebihan beban sebelum beralih ke fallback model (default: `1`). Bentuk penyedia-sibuk seperti `ModelNotReadyException` masuk ke sini.
+- `overloadedBackoffMs`: penundaan tetap sebelum mencoba ulang rotasi penyedia/profil yang kelebihan beban (default: `0`).
+- `rateLimitedProfileRotations`: maksimum rotasi profil autentikasi penyedia yang sama untuk error batas laju sebelum beralih ke fallback model (default: `1`). Bucket batas laju tersebut mencakup teks berbentuk penyedia seperti `Too many concurrent requests`, `ThrottlingException`, `concurrency limit reached`, `workers_ai ... quota limit exceeded`, dan `resource exhausted`.
---
@@ -900,8 +908,8 @@ Catatan:
- File log default: `/tmp/openclaw/openclaw-YYYY-MM-DD.log`.
- Atur `logging.file` untuk jalur yang stabil.
- `consoleLevel` naik ke `debug` saat `--verbose`.
-- `maxFileBytes`: ukuran maksimum file log aktif dalam byte sebelum rotasi (bilangan bulat positif; default: `104857600` = 100 MB). OpenClaw mempertahankan hingga lima arsip bernomor di samping file aktif.
-- `redactSensitive` / `redactPatterns`: penyamaran upaya-terbaik untuk output konsol, log file, rekaman log OTLP, dan teks transkrip sesi yang disimpan. `redactSensitive: "off"` hanya menonaktifkan kebijakan log/transkrip umum ini; permukaan keamanan UI/alat/diagnostik tetap meredaksi rahasia sebelum emisi.
+- `maxFileBytes`: ukuran maksimum file log aktif dalam byte sebelum rotasi (bilangan bulat positif; default: `104857600` = 100 MB). OpenClaw menyimpan hingga lima arsip bernomor di samping file aktif.
+- `redactSensitive` / `redactPatterns`: penyamaran upaya terbaik untuk output konsol, log file, rekaman log OTLP, dan teks transkrip sesi yang dipersistenkan. `redactSensitive: "off"` hanya menonaktifkan kebijakan log/transkrip umum ini; permukaan keamanan UI/tool/diagnostik tetap menyamarkan rahasia sebelum emisi.
---
@@ -949,23 +957,23 @@ Catatan:
}
```
-- `enabled`: pengalih utama untuk output instrumentasi (default: `true`).
-- `flags`: array string flag yang mengaktifkan output log bertarget (mendukung wildcard seperti `"telegram.*"` atau `"*"`).
-- `stuckSessionWarnMs`: ambang usia tanpa progres dalam ms untuk mengklasifikasikan sesi pemrosesan berjalan lama sebagai `session.long_running`, `session.stalled`, atau `session.stuck`. Balasan, alat, status, blok, dan progres ACP mereset timer; diagnostik `session.stuck` berulang melakukan backoff selama tidak berubah.
+- `enabled`: toggle utama untuk output instrumentasi (default: `true`).
+- `flags`: array string flag yang mengaktifkan output log tertarget (mendukung wildcard seperti `"telegram.*"` atau `"*"`).
+- `stuckSessionWarnMs`: ambang usia tanpa progres dalam ms untuk mengklasifikasikan sesi pemrosesan yang berjalan lama sebagai `session.long_running`, `session.stalled`, atau `session.stuck`. Balasan, tool, status, blok, dan progres ACP mengatur ulang timer; diagnostik `session.stuck` berulang melakukan backoff selama tidak berubah.
- `otel.enabled`: mengaktifkan pipeline ekspor OpenTelemetry (default: `false`). Untuk konfigurasi lengkap, katalog sinyal, dan model privasi, lihat [ekspor OpenTelemetry](/id/gateway/opentelemetry).
- `otel.endpoint`: URL kolektor untuk ekspor OTel.
-- `otel.tracesEndpoint` / `otel.metricsEndpoint` / `otel.logsEndpoint`: endpoint OTLP opsional spesifik sinyal. Saat diatur, nilai tersebut menimpa `otel.endpoint` hanya untuk sinyal itu.
+- `otel.tracesEndpoint` / `otel.metricsEndpoint` / `otel.logsEndpoint`: endpoint OTLP khusus sinyal opsional. Jika diatur, ini menggantikan `otel.endpoint` hanya untuk sinyal tersebut.
- `otel.protocol`: `"http/protobuf"` (default) atau `"grpc"`.
- `otel.headers`: header metadata HTTP/gRPC tambahan yang dikirim bersama permintaan ekspor OTel.
- `otel.serviceName`: nama layanan untuk atribut resource.
- `otel.traces` / `otel.metrics` / `otel.logs`: aktifkan ekspor trace, metrik, atau log.
-- `otel.sampleRate`: laju sampling trace `0`-`1`.
+- `otel.sampleRate`: laju sampling trace `0`–`1`.
- `otel.flushIntervalMs`: interval flush telemetri berkala dalam ms.
-- `otel.captureContent`: pengambilan konten mentah yang harus diikutsertakan secara eksplisit untuk atribut span OTEL. Defaultnya nonaktif. Boolean `true` menangkap konten pesan/alat non-sistem; bentuk objek memungkinkan Anda mengaktifkan `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs`, dan `systemPrompt` secara eksplisit.
-- `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`: pengalih lingkungan untuk atribut penyedia span GenAI eksperimental terbaru. Secara default span mempertahankan atribut `gen_ai.system` lama untuk kompatibilitas; metrik GenAI menggunakan atribut semantik terbatas.
-- `OPENCLAW_OTEL_PRELOADED=1`: pengalih lingkungan untuk host yang sudah mendaftarkan SDK OpenTelemetry global. OpenClaw kemudian melewati startup/shutdown SDK milik plugin sambil tetap menjaga listener diagnostik aktif.
-- `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`, `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`, dan `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`: variabel lingkungan endpoint spesifik sinyal yang digunakan saat kunci konfigurasi yang cocok tidak diatur.
-- `cacheTrace.enabled`: catat snapshot trace cache untuk eksekusi tertanam (default: `false`).
+- `otel.captureContent`: keikutsertaan eksplisit untuk menangkap konten mentah bagi atribut span OTEL. Defaultnya nonaktif. Boolean `true` menangkap konten pesan/tool non-sistem; bentuk objek memungkinkan Anda mengaktifkan `inputMessages`, `outputMessages`, `toolInputs`, `toolOutputs`, dan `systemPrompt` secara eksplisit.
+- `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`: toggle environment untuk atribut penyedia span GenAI eksperimental terbaru. Secara default, span mempertahankan atribut legacy `gen_ai.system` demi kompatibilitas; metrik GenAI menggunakan atribut semantik berbatas.
+- `OPENCLAW_OTEL_PRELOADED=1`: toggle environment untuk host yang sudah mendaftarkan SDK OpenTelemetry global. OpenClaw lalu melewati startup/shutdown SDK milik Plugin sambil menjaga listener diagnostik tetap aktif.
+- `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`, `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`, dan `OTEL_EXPORTER_OTLP_LOGS_ENDPOINT`: env var endpoint khusus sinyal yang digunakan saat kunci konfigurasi yang sesuai tidak diatur.
+- `cacheTrace.enabled`: catat snapshot trace cache untuk run tertanam (default: `false`).
- `cacheTrace.filePath`: jalur output untuk JSONL trace cache (default: `$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl`).
- `cacheTrace.includeMessages` / `includePrompt` / `includeSystem`: mengontrol apa yang disertakan dalam output trace cache (semua default: `true`).
@@ -990,9 +998,9 @@ Catatan:
```
- `channel`: kanal rilis untuk instalasi npm/git — `"stable"`, `"beta"`, atau `"dev"`.
-- `checkOnStart`: periksa pembaruan npm saat gateway dimulai (default: `true`).
+- `checkOnStart`: periksa pembaruan npm saat Gateway dimulai (default: `true`).
- `auto.enabled`: aktifkan pembaruan otomatis latar belakang untuk instalasi paket (default: `false`).
-- `auto.stableDelayHours`: jeda minimum dalam jam sebelum penerapan otomatis kanal stable (default: `6`; maks: `168`).
+- `auto.stableDelayHours`: penundaan minimum dalam jam sebelum penerapan otomatis kanal stable (default: `6`; maks: `168`).
- `auto.stableJitterHours`: jendela sebaran rollout tambahan kanal stable dalam jam (default: `12`; maks: `168`).
- `auto.betaCheckIntervalHours`: seberapa sering pemeriksaan kanal beta berjalan dalam jam (default: `1`; maks: `24`).
@@ -1027,23 +1035,23 @@ Catatan:
}
```
-- `enabled`: gerbang fitur ACP global (default: `true`; atur `false` untuk menyembunyikan affordance dispatch dan spawn ACP).
-- `dispatch.enabled`: gerbang independen untuk dispatch giliran sesi ACP (default: `true`). Atur `false` untuk mempertahankan perintah ACP tersedia sambil memblokir eksekusi.
-- `backend`: id backend runtime ACP default (harus cocok dengan plugin runtime ACP terdaftar).
- Instal plugin backend terlebih dahulu, dan jika `plugins.allow` diatur, sertakan id plugin backend (misalnya `acpx`) atau backend ACP tidak akan dimuat.
+- `enabled`: gate fitur ACP global (default: `true`; atur `false` untuk menyembunyikan dispatch ACP dan affordance spawn).
+- `dispatch.enabled`: gate independen untuk dispatch giliran sesi ACP (default: `true`). Atur `false` untuk menjaga perintah ACP tetap tersedia sambil memblokir eksekusi.
+- `backend`: id backend runtime ACP default (harus cocok dengan Plugin runtime ACP yang terdaftar).
+ Instal Plugin backend terlebih dahulu, dan jika `plugins.allow` diatur, sertakan id Plugin backend (misalnya `acpx`) atau backend ACP tidak akan dimuat.
- `defaultAgent`: id agen target ACP fallback saat spawn tidak menentukan target eksplisit.
- `allowedAgents`: allowlist id agen yang diizinkan untuk sesi runtime ACP; kosong berarti tidak ada pembatasan tambahan.
-- `maxConcurrentSessions`: jumlah maksimum sesi ACP yang aktif bersamaan.
+- `maxConcurrentSessions`: jumlah maksimum sesi ACP aktif secara bersamaan.
- `stream.coalesceIdleMs`: jendela flush idle dalam ms untuk teks yang di-stream.
-- `stream.maxChunkChars`: ukuran chunk maksimum sebelum membagi proyeksi blok streaming.
-- `stream.repeatSuppression`: tekan baris status/alat berulang per giliran (default: `true`).
-- `stream.deliveryMode`: `"live"` melakukan stream secara bertahap; `"final_only"` menahan buffer sampai peristiwa terminal giliran.
-- `stream.hiddenBoundarySeparator`: pemisah sebelum teks terlihat setelah peristiwa alat tersembunyi (default: `"paragraph"`).
+- `stream.maxChunkChars`: ukuran chunk maksimum sebelum membagi proyeksi blok yang di-stream.
+- `stream.repeatSuppression`: tekan baris status/tool berulang per giliran (default: `true`).
+- `stream.deliveryMode`: `"live"` melakukan stream secara inkremental; `"final_only"` menahan buffer hingga event terminal giliran.
+- `stream.hiddenBoundarySeparator`: pemisah sebelum teks terlihat setelah event tool tersembunyi (default: `"paragraph"`).
- `stream.maxOutputChars`: karakter output asisten maksimum yang diproyeksikan per giliran ACP.
- `stream.maxSessionUpdateChars`: karakter maksimum untuk baris status/pembaruan ACP yang diproyeksikan.
-- `stream.tagVisibility`: rekaman nama tag ke override visibilitas boolean untuk peristiwa yang di-stream.
-- `runtime.ttlMinutes`: TTL idle dalam menit untuk worker sesi ACP sebelum layak dibersihkan.
-- `runtime.installCommand`: perintah instal opsional untuk dijalankan saat melakukan bootstrap lingkungan runtime ACP.
+- `stream.tagVisibility`: rekaman nama tag ke override visibilitas boolean untuk event yang di-stream.
+- `runtime.ttlMinutes`: TTL idle dalam menit untuk worker sesi ACP sebelum memenuhi syarat untuk pembersihan.
+- `runtime.installCommand`: perintah instal opsional untuk dijalankan saat melakukan bootstrap environment runtime ACP.
---
@@ -1060,14 +1068,14 @@ Catatan:
```
- `cli.banner.taglineMode` mengontrol gaya tagline banner:
- - `"random"` (default): tagline lucu/musiman yang berputar.
+ - `"random"` (default): tagline lucu/musiman yang berotasi.
- `"default"`: tagline netral tetap (`All your chats, one OpenClaw.`).
- `"off"`: tanpa teks tagline (judul/versi banner tetap ditampilkan).
- Untuk menyembunyikan seluruh banner (bukan hanya tagline), atur env `OPENCLAW_HIDE_BANNER=1`.
---
-## Pemandu
+## Wizard
Metadata yang ditulis oleh alur penyiapan terpandu CLI (`onboard`, `configure`, `doctor`):
@@ -1087,15 +1095,15 @@ Metadata yang ditulis oleh alur penyiapan terpandu CLI (`onboard`, `configure`,
## Identitas
-Lihat bidang identitas `agents.list` di bawah [Default agen](/id/gateway/config-agents#agent-defaults).
+Lihat bidang identitas `agents.list` di bawah [default Agen](/id/gateway/config-agents#agent-defaults).
---
-## Bridge (warisan, dihapus)
+## Bridge (legacy, dihapus)
-Build saat ini tidak lagi menyertakan bridge TCP. Node terhubung melalui WebSocket Gateway. Kunci `bridge.*` tidak lagi menjadi bagian dari skema konfigurasi (validasi gagal sampai dihapus; `openclaw doctor --fix` dapat menghapus kunci yang tidak dikenal).
+Build saat ini tidak lagi menyertakan bridge TCP. Node terhubung melalui WebSocket Gateway. Kunci `bridge.*` tidak lagi menjadi bagian dari skema konfigurasi (validasi gagal hingga dihapus; `openclaw doctor --fix` dapat menghapus kunci yang tidak dikenal).
-
+
```json
{
@@ -1133,11 +1141,11 @@ Build saat ini tidak lagi menyertakan bridge TCP. Node terhubung melalui WebSock
}
```
-- `sessionRetention`: berapa lama mempertahankan sesi eksekusi cron terisolasi yang selesai sebelum dipangkas dari `sessions.json`. Juga mengontrol pembersihan transkrip cron terhapus yang diarsipkan. Default: `24h`; atur `false` untuk menonaktifkan.
-- `runLog.maxBytes`: ukuran maksimum per file log eksekusi (`cron/runs/.jsonl`) sebelum pemangkasan. Default: `2_000_000` byte.
-- `runLog.keepLines`: baris terbaru yang dipertahankan saat pemangkasan log eksekusi dipicu. Default: `2000`.
-- `webhookToken`: token bearer yang digunakan untuk pengiriman POST webhook cron (`delivery.mode = "webhook"`), jika dihilangkan tidak ada header auth yang dikirim.
-- `webhook`: URL webhook fallback warisan yang tidak digunakan lagi (http/https), hanya digunakan untuk pekerjaan tersimpan yang masih memiliki `notify: true`.
+- `sessionRetention`: berapa lama menyimpan sesi run cron terisolasi yang selesai sebelum dipangkas dari `sessions.json`. Juga mengontrol pembersihan transkrip cron terhapus yang diarsipkan. Default: `24h`; atur `false` untuk menonaktifkan.
+- `runLog.maxBytes`: ukuran maksimum per file log run (`cron/runs/.jsonl`) sebelum pemangkasan. Default: `2_000_000` byte.
+- `runLog.keepLines`: baris terbaru yang dipertahankan saat pemangkasan run-log dipicu. Default: `2000`.
+- `webhookToken`: token bearer yang digunakan untuk pengiriman POST Webhook cron (`delivery.mode = "webhook"`), jika dihilangkan tidak ada header autentikasi yang dikirim.
+- `webhook`: URL Webhook fallback legacy yang deprecated (http/https) yang hanya digunakan untuk job tersimpan yang masih memiliki `notify: true`.
### `cron.retry`
@@ -1153,11 +1161,11 @@ Build saat ini tidak lagi menyertakan bridge TCP. Node terhubung melalui WebSock
}
```
-- `maxAttempts`: percobaan ulang maksimum untuk pekerjaan sekali jalan pada kesalahan sementara (bawaan: `3`; rentang: `0`–`10`).
-- `backoffMs`: array jeda backoff dalam ms untuk setiap percobaan ulang (bawaan: `[30000, 60000, 300000]`; 1–10 entri).
-- `retryOn`: jenis kesalahan yang memicu percobaan ulang — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Hilangkan untuk mencoba ulang semua jenis sementara.
+- `maxAttempts`: jumlah percobaan ulang maksimum untuk job sekali jalan pada error sementara (default: `3`; rentang: `0`–`10`).
+- `backoffMs`: array jeda backoff dalam ms untuk setiap percobaan ulang (default: `[30000, 60000, 300000]`; 1–10 entri).
+- `retryOn`: jenis error yang memicu percobaan ulang — `"rate_limit"`, `"overloaded"`, `"network"`, `"timeout"`, `"server_error"`. Abaikan untuk mencoba ulang semua jenis sementara.
-Berlaku hanya untuk pekerjaan cron sekali jalan. Pekerjaan berulang menggunakan penanganan kegagalan terpisah.
+Hanya berlaku untuk job Cron sekali jalan. Job berulang menggunakan penanganan kegagalan terpisah.
### `cron.failureAlert`
@@ -1176,12 +1184,12 @@ Berlaku hanya untuk pekerjaan cron sekali jalan. Pekerjaan berulang menggunakan
}
```
-- `enabled`: aktifkan peringatan kegagalan untuk pekerjaan cron (bawaan: `false`).
-- `after`: kegagalan berturut-turut sebelum peringatan dipicu (bilangan bulat positif, min: `1`).
-- `cooldownMs`: milidetik minimum di antara peringatan berulang untuk pekerjaan yang sama (bilangan bulat non-negatif).
-- `includeSkipped`: hitung eksekusi yang dilewati secara berturut-turut terhadap ambang peringatan (bawaan: `false`). Eksekusi yang dilewati dilacak secara terpisah dan tidak memengaruhi backoff kesalahan eksekusi.
-- `mode`: mode pengiriman — `"announce"` mengirim melalui pesan channel; `"webhook"` memposting ke Webhook yang dikonfigurasi.
-- `accountId`: akun atau id channel opsional untuk membatasi cakupan pengiriman peringatan.
+- `enabled`: aktifkan peringatan kegagalan untuk job Cron (default: `false`).
+- `after`: kegagalan beruntun sebelum peringatan dipicu (bilangan bulat positif, min: `1`).
+- `cooldownMs`: milidetik minimum antara peringatan berulang untuk job yang sama (bilangan bulat non-negatif).
+- `includeSkipped`: hitung run yang dilewati secara beruntun ke ambang peringatan (default: `false`). Run yang dilewati dilacak terpisah dan tidak memengaruhi backoff error eksekusi.
+- `mode`: mode pengiriman — `"announce"` mengirim melalui pesan kanal; `"webhook"` memposting ke Webhook yang dikonfigurasi.
+- `accountId`: id akun atau kanal opsional untuk membatasi cakupan pengiriman peringatan.
### `cron.failureDestination`
@@ -1198,51 +1206,51 @@ Berlaku hanya untuk pekerjaan cron sekali jalan. Pekerjaan berulang menggunakan
}
```
-- Tujuan bawaan untuk notifikasi kegagalan cron di semua pekerjaan.
-- `mode`: `"announce"` atau `"webhook"`; bawaan ke `"announce"` ketika data target yang cukup tersedia.
-- `channel`: penggantian channel untuk pengiriman announce. `"last"` menggunakan kembali channel pengiriman terakhir yang diketahui.
+- Tujuan default untuk notifikasi kegagalan Cron di semua job.
+- `mode`: `"announce"` atau `"webhook"`; default ke `"announce"` saat data target cukup tersedia.
+- `channel`: override kanal untuk pengiriman announce. `"last"` menggunakan kembali kanal pengiriman terakhir yang diketahui.
- `to`: target announce eksplisit atau URL Webhook. Wajib untuk mode Webhook.
-- `accountId`: penggantian akun opsional untuk pengiriman.
-- `delivery.failureDestination` per pekerjaan menggantikan bawaan global ini.
-- Ketika tujuan kegagalan global maupun per pekerjaan tidak ditetapkan, pekerjaan yang sudah mengirim melalui `announce` kembali menggunakan target announce utama tersebut saat gagal.
-- `delivery.failureDestination` hanya didukung untuk pekerjaan `sessionTarget="isolated"` kecuali `delivery.mode` utama pekerjaan adalah `"webhook"`.
+- `accountId`: override akun opsional untuk pengiriman.
+- `delivery.failureDestination` per job menggantikan default global ini.
+- Saat tujuan kegagalan global maupun per job tidak diatur, job yang sudah mengirim melalui `announce` akan fallback ke target announce utama tersebut saat gagal.
+- `delivery.failureDestination` hanya didukung untuk job `sessionTarget="isolated"` kecuali `delivery.mode` utama job adalah `"webhook"`.
-Lihat [Pekerjaan Cron](/id/automation/cron-jobs). Eksekusi cron terisolasi dilacak sebagai [tugas latar belakang](/id/automation/tasks).
+Lihat [Job Cron](/id/automation/cron-jobs). Eksekusi Cron terisolasi dilacak sebagai [tugas latar belakang](/id/automation/tasks).
---
## Variabel templat model media
-Placeholder templat diperluas di `tools.media.models[].args`:
+Placeholder templat yang diperluas di `tools.media.models[].args`:
| Variabel | Deskripsi |
| ------------------ | ------------------------------------------------- |
-| `{{Body}}` | Isi lengkap pesan masuk |
+| `{{Body}}` | Isi pesan masuk lengkap |
| `{{RawBody}}` | Isi mentah (tanpa pembungkus riwayat/pengirim) |
| `{{BodyStripped}}` | Isi dengan mention grup dihapus |
| `{{From}}` | Pengidentifikasi pengirim |
| `{{To}}` | Pengidentifikasi tujuan |
-| `{{MessageSid}}` | id pesan channel |
+| `{{MessageSid}}` | id pesan kanal |
| `{{SessionId}}` | UUID sesi saat ini |
-| `{{IsNewSession}}` | `"true"` ketika sesi baru dibuat |
-| `{{MediaUrl}}` | URL semu media masuk |
+| `{{IsNewSession}}` | `"true"` saat sesi baru dibuat |
+| `{{MediaUrl}}` | Pseudo-URL media masuk |
| `{{MediaPath}}` | Path media lokal |
| `{{MediaType}}` | Jenis media (gambar/audio/dokumen/…) |
| `{{Transcript}}` | Transkrip audio |
| `{{Prompt}}` | Prompt media yang diselesaikan untuk entri CLI |
-| `{{MaxChars}}` | Karakter output maks yang diselesaikan untuk entri CLI |
+| `{{MaxChars}}` | Karakter output maksimum yang diselesaikan untuk entri CLI |
| `{{ChatType}}` | `"direct"` atau `"group"` |
| `{{GroupSubject}}` | Subjek grup (upaya terbaik) |
| `{{GroupMembers}}` | Pratinjau anggota grup (upaya terbaik) |
| `{{SenderName}}` | Nama tampilan pengirim (upaya terbaik) |
| `{{SenderE164}}` | Nomor telepon pengirim (upaya terbaik) |
-| `{{Provider}}` | Petunjuk provider (whatsapp, telegram, discord, dll.) |
+| `{{Provider}}` | Petunjuk penyedia (whatsapp, telegram, discord, dll.) |
---
## Penyertaan konfigurasi (`$include`)
-Pisahkan konfigurasi ke beberapa file:
+Pecah konfigurasi menjadi beberapa file:
```json5
// ~/.openclaw/openclaw.json
@@ -1255,16 +1263,16 @@ Pisahkan konfigurasi ke beberapa file:
}
```
-**Perilaku penggabungan:**
+**Perilaku merge:**
-- Satu file: menggantikan objek yang memuatnya.
-- Array file: digabung mendalam sesuai urutan (yang belakangan menggantikan yang sebelumnya).
-- Kunci saudara: digabung setelah penyertaan (mengganti nilai yang disertakan).
-- Penyertaan bersarang: hingga 10 tingkat.
-- Path: diselesaikan relatif terhadap file yang menyertakan, tetapi harus tetap berada di dalam direktori konfigurasi tingkat atas (`dirname` dari `openclaw.json`). Bentuk absolut/`../` diizinkan hanya ketika tetap terselesaikan di dalam batas tersebut.
-- Penulisan milik OpenClaw yang hanya mengubah satu bagian tingkat atas yang didukung oleh penyertaan satu file ditulis langsung ke file yang disertakan tersebut. Misalnya, `plugins install` memperbarui `plugins: { $include: "./plugins.json5" }` di `plugins.json5` dan membiarkan `openclaw.json` tetap utuh.
-- Penyertaan root, array penyertaan, dan penyertaan dengan penggantian kunci saudara bersifat hanya-baca untuk penulisan milik OpenClaw; penulisan tersebut gagal tertutup alih-alih meratakan konfigurasi.
-- Kesalahan: pesan jelas untuk file yang hilang, kesalahan parsing, dan penyertaan melingkar.
+- Satu file: mengganti objek yang memuatnya.
+- Array file: di-deep-merge sesuai urutan (yang lebih akhir menggantikan yang lebih awal).
+- Kunci sibling: digabung setelah include (menggantikan nilai yang disertakan).
+- Include bertingkat: hingga kedalaman 10 level.
+- Path: diselesaikan relatif terhadap file yang menyertakan, tetapi harus tetap berada di dalam direktori konfigurasi tingkat atas (`dirname` dari `openclaw.json`). Bentuk absolut/`../` hanya diizinkan saat masih terselesaikan di dalam batas tersebut.
+- Penulisan milik OpenClaw yang hanya mengubah satu bagian tingkat atas yang didukung oleh include satu file menulis langsung ke file yang disertakan itu. Misalnya, `plugins install` memperbarui `plugins: { $include: "./plugins.json5" }` di `plugins.json5` dan membiarkan `openclaw.json` tetap utuh.
+- Include root, array include, dan include dengan override sibling bersifat hanya-baca untuk penulisan milik OpenClaw; penulisan tersebut gagal tertutup alih-alih meratakan konfigurasi.
+- Error: pesan yang jelas untuk file yang hilang, error parsing, dan include melingkar.
---
diff --git a/docs/id/gateway/diagnostics.md b/docs/id/gateway/diagnostics.md
index 1e5b5e448..72c934ce4 100644
--- a/docs/id/gateway/diagnostics.md
+++ b/docs/id/gateway/diagnostics.md
@@ -1,22 +1,22 @@
---
read_when:
- Menyiapkan laporan bug atau permintaan dukungan
- - Men-debug kegagalan, mulai ulang, tekanan memori, atau muatan yang terlalu besar pada Gateway
- - Meninjau data diagnostik apa yang dicatat atau disamarkan
+ - Men-debug kegagalan Gateway, mulai ulang, tekanan memori, atau muatan berukuran terlalu besar
+ - Meninjau data diagnostik mana yang direkam atau diredaksi
summary: Buat bundel diagnostik Gateway yang dapat dibagikan untuk laporan bug
title: Ekspor diagnostik
x-i18n:
- generated_at: "2026-05-03T21:32:02Z"
+ generated_at: "2026-05-05T01:46:04Z"
model: gpt-5.5
provider: openai
- source_hash: f6cf8e00fe8033e339b5c947ce3dd10fdee736048a358ad3a0c2ccb77e939f4b
+ source_hash: 56539280bc7a7868063328626e63b2576feb5578e2651d3a2976ee9c34243382
source_path: gateway/diagnostics.md
workflow: 16
---
OpenClaw dapat membuat zip diagnostik lokal untuk laporan bug. Zip ini menggabungkan
-status Gateway yang sudah disanitasi, kesehatan, log, bentuk konfigurasi, dan
-peristiwa stabilitas terbaru tanpa payload.
+status Gateway, kesehatan, log, bentuk konfigurasi, dan peristiwa stabilitas
+terbaru tanpa payload yang sudah disanitasi.
Perlakukan bundel diagnostik seperti rahasia sampai Anda meninjaunya. Bundel ini
dirancang untuk menghilangkan atau menyamarkan payload dan kredensial, tetapi
@@ -34,7 +34,7 @@ Perintah ini mencetak path zip yang ditulis. Untuk memilih path:
openclaw gateway diagnostics export --output openclaw-diagnostics.zip
```
-Untuk otomatisasi:
+Untuk automasi:
```bash
openclaw gateway diagnostics export --json
@@ -46,20 +46,20 @@ Pemilik dapat menggunakan `/diagnostics [note]` di chat untuk meminta ekspor Gat
Gunakan ini saat bug terjadi dalam percakapan nyata dan Anda menginginkan satu
laporan yang dapat disalin-tempel untuk dukungan:
-1. Kirim `/diagnostics` dalam percakapan tempat Anda melihat masalah. Tambahkan
+1. Kirim `/diagnostics` dalam percakapan tempat Anda melihat masalahnya. Tambahkan
catatan singkat jika membantu, misalnya `/diagnostics bad tool choice`.
-2. OpenClaw mengirim pembuka diagnostik dan meminta satu persetujuan exec
- eksplisit. Persetujuan menjalankan `openclaw gateway diagnostics export --json`.
- Jangan setujui diagnostik melalui aturan izinkan-semua.
-3. Setelah disetujui, OpenClaw membalas dengan laporan yang dapat ditempel berisi
- path bundel lokal, ringkasan manifes, catatan privasi, dan id sesi yang relevan.
+2. OpenClaw mengirim pembuka diagnostik dan meminta satu persetujuan exec eksplisit.
+ Persetujuan tersebut menjalankan `openclaw gateway diagnostics export --json`.
+ Jangan menyetujui diagnostik melalui aturan izinkan-semua.
+3. Setelah disetujui, OpenClaw membalas dengan laporan yang dapat ditempel berisi path
+ bundel lokal, ringkasan manifes, catatan privasi, dan id sesi yang relevan.
-Dalam chat grup, pemilik masih dapat menjalankan `/diagnostics`, tetapi OpenClaw tidak
-memposting detail diagnostik kembali ke chat bersama. OpenClaw mengirim pembuka,
-prompt persetujuan, hasil ekspor Gateway, dan rincian sesi/thread Codex kepada
-pemilik melalui rute persetujuan privat. Grup hanya mendapat pemberitahuan singkat
+Dalam chat grup, pemilik tetap dapat menjalankan `/diagnostics`, tetapi OpenClaw tidak
+mengirim detail diagnostik kembali ke chat bersama. OpenClaw mengirim pembuka,
+prompt persetujuan, hasil ekspor Gateway, dan perincian sesi/thread Codex kepada
+pemilik melalui rute persetujuan privat. Grup hanya menerima pemberitahuan singkat
bahwa alur diagnostik dikirim secara privat. Jika OpenClaw tidak dapat menemukan rute
-pemilik privat, perintah gagal tertutup dan meminta pemilik menjalankannya dari DM.
+pemilik privat, perintah gagal secara tertutup dan meminta pemilik menjalankannya dari DM.
Saat sesi OpenClaw aktif menggunakan harness OpenAI Codex native,
persetujuan exec yang sama juga mencakup unggahan umpan balik OpenAI untuk thread
@@ -72,29 +72,29 @@ yang dikirim ke server OpenAI. Jika Anda menolak atau mengabaikan persetujuan,
OpenClaw tidak menjalankan ekspor, tidak mengirim umpan balik Codex, dan tidak
mencetak id Codex.
-Itu membuat loop debugging Codex yang umum menjadi singkat: lihat perilaku buruk di
+Itu membuat loop debugging Codex umum menjadi singkat: lihat perilaku buruk di
Telegram, Discord, atau channel lain, jalankan `/diagnostics`, setujui sekali, bagikan
-laporan kepada dukungan, lalu jalankan perintah `codex resume ` yang dicetak
+laporan dengan dukungan, lalu jalankan perintah `codex resume ` yang dicetak
secara lokal jika Anda ingin memeriksa sendiri thread Codex native. Lihat
-[Harness Codex](/id/plugins/codex-harness#inspect-a-codex-thread-from-the-cli) untuk
+[harness Codex](/id/plugins/codex-harness#inspect-a-codex-thread-from-the-cli) untuk
alur kerja pemeriksaan tersebut.
## Isi ekspor
Zip mencakup:
-- `summary.md`: ikhtisar yang mudah dibaca manusia untuk dukungan.
+- `summary.md`: ikhtisar yang dapat dibaca manusia untuk dukungan.
- `diagnostics.json`: ringkasan yang dapat dibaca mesin tentang konfigurasi, log, status, kesehatan,
dan data stabilitas.
- `manifest.json`: metadata ekspor dan daftar file.
-- Bentuk konfigurasi yang disanitasi dan detail konfigurasi non-rahasia.
-- Ringkasan log yang disanitasi dan baris log terbaru yang disunting.
+- Bentuk konfigurasi yang disanitasi dan detail konfigurasi nonrahasia.
+- Ringkasan log yang disanitasi dan baris log terbaru yang disamarkan.
- Snapshot status dan kesehatan Gateway upaya-terbaik.
-- `stability/latest.json`: bundel stabilitas tersimpan terbaru, bila tersedia.
+- `stability/latest.json`: bundel stabilitas tersimpan terbaru, jika tersedia.
-Ekspor tetap berguna bahkan saat Gateway tidak sehat. Jika Gateway tidak dapat
-menjawab permintaan status atau kesehatan, log lokal, bentuk konfigurasi, dan bundel
-stabilitas terbaru tetap dikumpulkan bila tersedia.
+Ekspor tetap berguna meski Gateway tidak sehat. Jika Gateway tidak dapat
+menjawab permintaan status atau kesehatan, log lokal, bentuk konfigurasi, dan
+bundel stabilitas terbaru tetap dikumpulkan jika tersedia.
## Model privasi
@@ -103,18 +103,18 @@ yang membantu debugging, seperti:
- nama subsistem, id plugin, id penyedia, id channel, dan mode yang dikonfigurasi
- kode status, durasi, jumlah byte, status antrean, dan pembacaan memori
-- metadata log yang disanitasi dan pesan operasional yang disunting
-- bentuk konfigurasi dan pengaturan fitur non-rahasia
+- metadata log yang disanitasi dan pesan operasional yang disamarkan
+- bentuk konfigurasi dan pengaturan fitur nonrahasia
Ekspor menghilangkan atau menyamarkan:
-- teks chat, prompt, instruksi, body webhook, dan output tool
+- teks chat, prompt, instruksi, isi webhook, dan keluaran tool
- kredensial, kunci API, token, cookie, dan nilai rahasia
-- body permintaan atau respons mentah
+- isi permintaan atau respons mentah
- id akun, id pesan, id sesi mentah, hostname, dan nama pengguna lokal
Saat pesan log tampak seperti teks pengguna, chat, prompt, atau payload tool,
-ekspor hanya mempertahankan bahwa sebuah pesan dihilangkan dan jumlah byte.
+ekspor hanya mempertahankan bahwa sebuah pesan dihilangkan beserta jumlah byte-nya.
## Perekam stabilitas
@@ -122,14 +122,21 @@ Gateway merekam stream stabilitas terbatas tanpa payload secara default saat
diagnostik diaktifkan. Ini untuk fakta operasional, bukan konten.
Heartbeat diagnostik yang sama merekam sampel liveness saat Gateway tetap
-berjalan tetapi event loop Node.js atau CPU tampak jenuh. Peristiwa
-`diagnostic.liveness.warning` ini mencakup keterlambatan event-loop, utilisasi
-event-loop, rasio core CPU, dan jumlah sesi aktif/menunggu/antre. Sampel idle
-tetap berada di telemetri pada level `info`. Sampel liveness menjadi peringatan
-Gateway hanya saat pekerjaan menunggu atau mengantre, atau saat pekerjaan aktif
-tumpang tindih dengan keterlambatan event-loop yang berkelanjutan. Lonjakan
-max-delay sementara selama pekerjaan latar belakang yang sehat tetap berada di
-log debug. Peristiwa itu tidak memulai ulang Gateway dengan sendirinya.
+berjalan tetapi event loop Node.js atau CPU terlihat jenuh. Peristiwa
+`diagnostic.liveness.warning` ini mencakup jeda event-loop, utilisasi event-loop,
+rasio inti CPU, jumlah sesi aktif/menunggu/diantrekan, fase startup/runtime saat ini
+jika diketahui, rentang fase terbaru, dan label kerja aktif/diantrekan yang dibatasi.
+Sampel idle tetap berada di telemetri pada level `info`. Sampel liveness menjadi
+peringatan Gateway hanya saat ada pekerjaan yang menunggu atau diantrekan, atau
+saat pekerjaan aktif bertumpang tindih dengan jeda event-loop berkelanjutan. Lonjakan
+max-delay sementara selama pekerjaan latar belakang yang sehat tetap berada di log
+debug. Lonjakan itu tidak me-restart Gateway dengan sendirinya.
+
+Fase startup juga memancarkan peristiwa `diagnostic.phase.completed` dengan timing
+wall-clock dan CPU. Diagnostik embedded-run yang macet menandai
+`terminalProgressStale=true` saat progres bridge terakhir tampak terminal, seperti
+item respons mentah atau peristiwa penyelesaian respons, tetapi Gateway masih
+menganggap embedded run aktif.
Periksa perekam live:
@@ -139,7 +146,7 @@ openclaw gateway stability --type payload.large
openclaw gateway stability --json
```
-Periksa bundel stabilitas tersimpan terbaru setelah exit fatal, timeout shutdown,
+Periksa bundel stabilitas tersimpan terbaru setelah keluar fatal, timeout shutdown,
atau kegagalan startup restart:
```bash
@@ -152,7 +159,7 @@ Buat zip diagnostik dari bundel tersimpan terbaru:
openclaw gateway stability --bundle latest --export
```
-Bundel tersimpan berada di bawah `~/.openclaw/logs/stability/` saat peristiwa ada.
+Bundel tersimpan berada di bawah `~/.openclaw/logs/stability/` saat ada peristiwa.
## Opsi berguna
@@ -164,11 +171,11 @@ openclaw gateway diagnostics export \
```
- `--output `: tulis ke path zip tertentu.
-- `--log-lines `: jumlah maksimum baris log yang disanitasi untuk disertakan.
+- `--log-lines `: jumlah maksimum baris log tersanitasi yang disertakan.
- `--log-bytes `: byte log maksimum untuk diperiksa.
- `--url `: URL WebSocket Gateway untuk snapshot status dan kesehatan.
- `--token `: token Gateway untuk snapshot status dan kesehatan.
-- `--password `: kata sandi Gateway untuk snapshot status dan kesehatan.
+- `--password `: sandi Gateway untuk snapshot status dan kesehatan.
- `--timeout `: timeout snapshot status dan kesehatan.
- `--no-stability-bundle`: lewati pencarian bundel stabilitas tersimpan.
- `--json`: cetak metadata ekspor yang dapat dibaca mesin.
diff --git a/docs/id/gateway/doctor.md b/docs/id/gateway/doctor.md
index bea3a3bf9..6eae4c9ed 100644
--- a/docs/id/gateway/doctor.md
+++ b/docs/id/gateway/doctor.md
@@ -1,15 +1,15 @@
---
read_when:
- - Menambahkan atau memodifikasi migrasi doctor
- - Memperkenalkan perubahan konfigurasi yang merusak kompatibilitas
+ - Menambahkan atau mengubah migrasi doctor
+ - Memperkenalkan perubahan konfigurasi yang tidak kompatibel
sidebarTitle: Doctor
summary: 'Perintah doctor: pemeriksaan kesehatan, migrasi konfigurasi, dan langkah perbaikan'
title: Dokter
x-i18n:
- generated_at: "2026-05-04T09:33:29Z"
+ generated_at: "2026-05-05T01:45:59Z"
model: gpt-5.5
provider: openai
- source_hash: 1bc8615f5e49e8c20785a9dc9779c447fd0d5794c80663d2396b0a20b4187798
+ source_hash: 3e374f91d00d4b43a3852de6f746b044471e80af936d464a789061a31cadd09d
source_path: gateway/doctor.md
workflow: 16
---
@@ -30,7 +30,7 @@ openclaw doctor
openclaw doctor --yes
```
- Terima default tanpa prompt (termasuk langkah perbaikan restart/layanan/sandbox saat berlaku).
+ Terima default tanpa meminta konfirmasi (termasuk langkah perbaikan restart/service/sandbox bila berlaku).
@@ -38,7 +38,7 @@ openclaw doctor
openclaw doctor --repair
```
- Terapkan perbaikan yang direkomendasikan tanpa prompt (perbaikan + restart jika aman).
+ Terapkan perbaikan yang direkomendasikan tanpa meminta konfirmasi (perbaikan + restart jika aman).
@@ -46,7 +46,7 @@ openclaw doctor
openclaw doctor --repair --force
```
- Terapkan juga perbaikan agresif (menimpa konfigurasi supervisor kustom).
+ Terapkan juga perbaikan agresif (menimpa konfigurasi supervisor khusus).
@@ -54,7 +54,7 @@ openclaw doctor
openclaw doctor --non-interactive
```
- Jalankan tanpa prompt dan hanya terapkan migrasi yang aman (normalisasi konfigurasi + pemindahan status di disk). Melewati tindakan restart/layanan/sandbox yang memerlukan konfirmasi manusia. Migrasi status lama berjalan otomatis saat terdeteksi.
+ Jalankan tanpa prompt dan hanya terapkan migrasi aman (normalisasi konfigurasi + pemindahan status di disk). Melewati tindakan restart/service/sandbox yang memerlukan konfirmasi manusia. Migrasi status lama berjalan otomatis saat terdeteksi.
@@ -62,7 +62,7 @@ openclaw doctor
openclaw doctor --deep
```
- Pindai layanan sistem untuk instalasi gateway tambahan (launchd/systemd/schtasks).
+ Pindai service sistem untuk instalasi gateway tambahan (launchd/systemd/schtasks).
@@ -78,61 +78,61 @@ cat ~/.openclaw/openclaw.json
- Pembaruan pra-jalan opsional untuk instalasi git (hanya interaktif).
- - Pemeriksaan kebaruan protokol UI (membangun ulang UI Kontrol saat skema protokol lebih baru).
+ - Pemeriksaan kesegaran protokol UI (membangun ulang UI Kontrol saat skema protokol lebih baru).
- Pemeriksaan kesehatan + prompt restart.
- - Ringkasan status Skills (memenuhi syarat/hilang/diblokir) dan status Plugin.
+ - Ringkasan status Skills (memenuhi syarat/hilang/diblokir) dan status plugin.
- Normalisasi konfigurasi untuk nilai lama.
- - Migrasi konfigurasi Talk dari bidang datar lama `talk.*` ke `talk.provider` + `talk.providers.`.
- - Pemeriksaan migrasi browser untuk konfigurasi ekstensi Chrome lama dan kesiapan Chrome MCP.
+ - Migrasi konfigurasi Talk dari field datar `talk.*` lama ke `talk.provider` + `talk.providers.`.
+ - Pemeriksaan migrasi browser untuk konfigurasi Chrome extension lama dan kesiapan Chrome MCP.
- Peringatan override penyedia OpenCode (`models.providers.opencode` / `models.providers.opencode-go`).
- - Peringatan shadowing OAuth Codex (`models.providers.openai-codex`).
- - Pemeriksaan prasyarat TLS OAuth untuk profil OAuth OpenAI Codex.
- - Peringatan allowlist Plugin/alat saat `plugins.allow` bersifat membatasi tetapi kebijakan alat masih meminta wildcard atau alat milik Plugin.
- - Migrasi status lama di disk (sessions/agent dir/autentikasi WhatsApp).
- - Migrasi kunci kontrak manifes Plugin lama (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
- - Migrasi penyimpanan Cron lama (`jobId`, `schedule.cron`, bidang delivery/payload tingkat atas, payload `provider`, pekerjaan fallback Webhook sederhana `notify: true`).
- - Migrasi kebijakan runtime agen lama ke `agents.defaults.agentRuntime` dan `agents.list[].agentRuntime`.
- - Pembersihan konfigurasi Plugin usang saat Plugin diaktifkan; saat `plugins.enabled=false`, referensi Plugin usang diperlakukan sebagai konfigurasi containment inert dan dipertahankan.
+ - Peringatan bayangan OAuth Codex (`models.providers.openai-codex`).
+ - Pemeriksaan prasyarat OAuth TLS untuk profil OAuth OpenAI Codex.
+ - Peringatan allowlist plugin/alat saat `plugins.allow` bersifat membatasi tetapi kebijakan alat masih meminta wildcard atau alat milik plugin.
+ - Migrasi status lama di disk (sessions/agent dir/auth WhatsApp).
+ - Migrasi kunci kontrak manifest plugin lama (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
+ - Migrasi penyimpanan Cron lama (`jobId`, `schedule.cron`, field delivery/payload tingkat atas, payload `provider`, job fallback webhook sederhana `notify: true`).
+ - Migrasi runtime-policy agent lama ke `agents.defaults.agentRuntime` dan `agents.list[].agentRuntime`.
+ - Pembersihan konfigurasi plugin usang saat plugin diaktifkan; saat `plugins.enabled=false`, referensi plugin usang diperlakukan sebagai konfigurasi kontainmen inert dan dipertahankan.
- - Inspeksi file kunci sesi dan pembersihan kunci usang.
+ - Inspeksi file lock sesi dan pembersihan lock usang.
- Perbaikan transkrip sesi untuk cabang prompt-rewrite duplikat yang dibuat oleh build 2026.4.24 yang terdampak.
- - Deteksi tombstone pemulihan-restart subagen yang macet, dengan dukungan `--fix` untuk menghapus flag pemulihan abort usang agar startup tidak terus memperlakukan child sebagai restart-aborted.
- - Pemeriksaan integritas status dan izin (sesi, transkrip, direktori status).
+ - Deteksi tombstone restart-recovery subagent yang macet, dengan dukungan `--fix` untuk membersihkan flag pemulihan dibatalkan yang usang agar startup tidak terus memperlakukan child sebagai restart-aborted.
+ - Pemeriksaan integritas status dan izin (sessions, transcripts, state dir).
- Pemeriksaan izin file konfigurasi (chmod 600) saat berjalan secara lokal.
- - Kesehatan autentikasi model: memeriksa kedaluwarsa OAuth, dapat menyegarkan token yang hampir kedaluwarsa, dan melaporkan status cooldown/dinonaktifkan auth-profile.
- - Deteksi direktori workspace tambahan (`~/openclaw`).
+ - Kesehatan auth model: memeriksa kedaluwarsa OAuth, dapat menyegarkan token yang hampir kedaluwarsa, dan melaporkan status cooldown/dinonaktifkan auth-profile.
+ - Deteksi dir workspace tambahan (`~/openclaw`).
-
+
- Perbaikan image sandbox saat sandboxing diaktifkan.
- - Migrasi layanan lama dan deteksi gateway tambahan.
+ - Migrasi service lama dan deteksi gateway tambahan.
- Migrasi status lama channel Matrix (dalam mode `--fix` / `--repair`).
- - Pemeriksaan runtime Gateway (layanan terpasang tetapi tidak berjalan; label launchd yang di-cache).
- - Peringatan status channel (di-probe dari gateway yang sedang berjalan).
+ - Pemeriksaan runtime Gateway (service terinstal tetapi tidak berjalan; label launchd yang di-cache).
+ - Peringatan status channel (diprobe dari gateway yang sedang berjalan).
- Audit konfigurasi supervisor (launchd/systemd/schtasks) dengan perbaikan opsional.
- - Pembersihan lingkungan proxy tertanam untuk layanan gateway yang menangkap nilai shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` selama instalasi atau pembaruan.
- - Pemeriksaan praktik terbaik runtime Gateway (Node vs Bun, path version-manager).
- - Diagnostik tabrakan port Gateway (default `18789`).
+ - Pembersihan lingkungan proxy tertanam untuk service gateway yang menangkap nilai shell `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` selama instalasi atau pembaruan.
+ - Pemeriksaan praktik terbaik runtime Gateway (Node vs Bun, jalur version-manager).
+ - Diagnostik konflik port Gateway (default `18789`).
-
+
- Peringatan keamanan untuk kebijakan DM terbuka.
- - Pemeriksaan autentikasi Gateway untuk mode token lokal (menawarkan pembuatan token saat tidak ada sumber token; tidak menimpa konfigurasi SecretRef token).
- - Deteksi masalah pemasangan perangkat (permintaan pemasangan pertama kali yang tertunda, peningkatan peran/cakupan yang tertunda, drift cache token perangkat lokal yang usang, dan drift autentikasi catatan terpasang).
+ - Pemeriksaan auth Gateway untuk mode token lokal (menawarkan pembuatan token saat tidak ada sumber token; tidak menimpa konfigurasi token SecretRef).
+ - Deteksi masalah pairing perangkat (permintaan pair pertama kali yang tertunda, peningkatan peran/cakupan yang tertunda, drift cache device-token lokal yang usang, dan drift auth paired-record).
- Pemeriksaan systemd linger di Linux.
- Pemeriksaan ukuran file bootstrap workspace (peringatan pemotongan/hampir batas untuk file konteks).
- - Pemeriksaan kesiapan Skills untuk agen default; melaporkan skill yang diizinkan dengan bin, env, konfigurasi, atau persyaratan OS yang hilang, dan `--fix` dapat menonaktifkan skill yang tidak tersedia di `skills.entries`.
- - Pemeriksaan status shell completion dan pemasangan/peningkatan otomatis.
- - Pemeriksaan kesiapan penyedia embedding pencarian memori (model lokal, kunci API jarak jauh, atau biner QMD).
- - Pemeriksaan instalasi source (ketidakcocokan workspace pnpm, aset UI hilang, biner tsx hilang).
+ - Pemeriksaan kesiapan Skills untuk agent default; melaporkan skills yang diizinkan dengan bin, env, konfigurasi, atau persyaratan OS yang hilang, dan `--fix` dapat menonaktifkan skills yang tidak tersedia di `skills.entries`.
+ - Pemeriksaan status penyelesaian shell dan pemasangan/peningkatan otomatis.
+ - Pemeriksaan kesiapan penyedia embedding pencarian memori (model lokal, kunci API jarak jauh, atau binary QMD).
+ - Pemeriksaan instalasi sumber (ketidakcocokan workspace pnpm, aset UI hilang, binary tsx hilang).
- Menulis konfigurasi yang diperbarui + metadata wizard.
@@ -140,54 +140,57 @@ cat ~/.openclaw/openclaw.json
## Backfill dan reset UI Dreams
-Adegan Dreams UI Kontrol mencakup tindakan **Backfill**, **Reset**, dan **Clear Grounded** untuk alur kerja dreaming grounded. Tindakan ini menggunakan metode RPC bergaya doctor gateway, tetapi **bukan** bagian dari perbaikan/migrasi CLI `openclaw doctor`.
+Scene Dreams UI Kontrol menyertakan tindakan **Backfill**, **Reset**, dan **Clear Grounded** untuk alur kerja grounded Dreaming. Tindakan ini menggunakan metode RPC bergaya doctor gateway, tetapi tindakan tersebut **bukan** bagian dari perbaikan/migrasi CLI `openclaw doctor`.
Yang dilakukan:
-- **Backfill** memindai file historis `memory/YYYY-MM-DD.md` di workspace aktif, menjalankan pass grounded REM diary, dan menulis entri backfill yang dapat dibalik ke `DREAMS.md`.
-- **Reset** hanya menghapus entri diary backfill bertanda tersebut dari `DREAMS.md`.
-- **Clear Grounded** hanya menghapus entri jangka pendek staged khusus grounded yang berasal dari pemutaran ulang historis dan belum mengakumulasi recall live atau dukungan harian.
+- **Backfill** memindai file historis `memory/YYYY-MM-DD.md` di workspace aktif, menjalankan pass diary REM grounded, dan menulis entri backfill yang dapat dibalik ke `DREAMS.md`.
+- **Reset** hanya menghapus entri diary backfill yang ditandai tersebut dari `DREAMS.md`.
+- **Clear Grounded** hanya menghapus entri jangka pendek khusus grounded yang sudah di-stage, yang berasal dari replay historis dan belum mengakumulasi recall langsung atau dukungan harian.
Yang **tidak** dilakukan sendiri:
-- tidak mengedit `MEMORY.md`
-- tidak menjalankan migrasi doctor penuh
-- tidak secara otomatis men-stage kandidat grounded ke penyimpanan promosi jangka pendek live kecuali Anda secara eksplisit menjalankan path CLI staged terlebih dahulu
+- tindakan tersebut tidak mengedit `MEMORY.md`
+- tindakan tersebut tidak menjalankan migrasi doctor penuh
+- tindakan tersebut tidak otomatis men-stage kandidat grounded ke penyimpanan promosi jangka pendek live kecuali Anda secara eksplisit menjalankan jalur CLI staged terlebih dahulu
-Jika Anda ingin pemutaran ulang historis grounded memengaruhi jalur promosi mendalam normal, gunakan alur CLI sebagai gantinya:
+Jika Anda ingin replay historis grounded memengaruhi lane promosi mendalam normal, gunakan alur CLI sebagai gantinya:
```bash
openclaw memory rem-backfill --path ./memory --stage-short-term
```
-Itu men-stage kandidat durable grounded ke penyimpanan dreaming jangka pendek sambil mempertahankan `DREAMS.md` sebagai permukaan peninjauan.
+Perintah tersebut men-stage kandidat tahan lama grounded ke penyimpanan Dreaming jangka pendek sambil menjaga `DREAMS.md` sebagai permukaan tinjauan.
-## Perilaku terperinci dan alasan
+## Perilaku dan alasan terperinci
- Jika ini adalah checkout git dan doctor berjalan secara interaktif, ia menawarkan pembaruan (fetch/rebase/build) sebelum menjalankan doctor.
+ Jika ini adalah checkout git dan doctor berjalan secara interaktif, doctor menawarkan pembaruan (fetch/rebase/build) sebelum menjalankan doctor.
- Jika konfigurasi berisi bentuk nilai lama (misalnya `messages.ackReaction` tanpa override khusus channel), doctor menormalkannya ke skema saat ini.
+ Jika konfigurasi berisi bentuk nilai lama (misalnya `messages.ackReaction` tanpa override khusus channel), doctor menormalisasinya ke skema saat ini.
- Itu mencakup bidang datar Talk lama. Konfigurasi Talk publik saat ini adalah `talk.provider` + `talk.providers.`. Doctor menulis ulang bentuk lama `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` ke dalam peta penyedia.
+ Itu mencakup field datar Talk lama. Konfigurasi Talk publik saat ini adalah `talk.provider` + `talk.providers.`. Doctor menulis ulang bentuk `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` lama ke peta penyedia.
Doctor juga memperingatkan saat `plugins.allow` tidak kosong dan kebijakan alat menggunakan
- entri wildcard atau alat milik Plugin. `tools.allow: ["*"]` hanya mencocokkan alat
- dari Plugin yang benar-benar dimuat; itu tidak melewati allowlist Plugin eksklusif.
+ entri alat wildcard atau milik plugin. `tools.allow: ["*"]` hanya mencocokkan alat
+ dari plugin yang benar-benar dimuat; itu tidak melewati allowlist plugin eksklusif.
+ Doctor menulis `plugins.bundledDiscovery: "compat"` untuk konfigurasi allowlist
+ lama yang dimigrasikan demi mempertahankan perilaku penyedia bundled yang ada, lalu
+ mengarahkan ke pengaturan `"allowlist"` yang lebih ketat.
- Saat konfigurasi berisi kunci yang tidak digunakan lagi, perintah lain menolak berjalan dan meminta Anda menjalankan `openclaw doctor`.
+ Saat konfigurasi berisi kunci yang tidak berlaku lagi, perintah lain menolak berjalan dan meminta Anda menjalankan `openclaw doctor`.
Doctor akan:
- Menjelaskan kunci lama mana yang ditemukan.
- - Menampilkan migrasi yang diterapkannya.
+ - Menampilkan migrasi yang diterapkan.
- Menulis ulang `~/.openclaw/openclaw.json` dengan skema yang diperbarui.
- Gateway juga menjalankan otomatis migrasi doctor saat startup ketika mendeteksi format konfigurasi lama, sehingga konfigurasi usang diperbaiki tanpa intervensi manual. Migrasi penyimpanan pekerjaan Cron ditangani oleh `openclaw doctor --fix`.
+ Gateway juga menjalankan otomatis migrasi doctor saat startup ketika mendeteksi format konfigurasi lama, sehingga konfigurasi usang diperbaiki tanpa intervensi manual. Migrasi penyimpanan job Cron ditangani oleh `openclaw doctor --fix`.
Migrasi saat ini:
@@ -195,7 +198,8 @@ Itu men-stage kandidat durable grounded ke penyimpanan dreaming jangka pendek sa
- `routing.groupChat.requireMention` → `channels.whatsapp/telegram/imessage.groups."*".requireMention`
- `routing.groupChat.historyLimit` → `messages.groupChat.historyLimit`
- `routing.groupChat.mentionPatterns` → `messages.groupChat.mentionPatterns`
- - konfigurasi configured-channel yang tidak memiliki kebijakan balasan terlihat → `messages.groupChat.visibleReplies: "message_tool"`
+ - `channels.telegram.requireMention` → `channels.telegram.groups."*".requireMention`
+ - konfigurasi kanal yang dikonfigurasi tidak memiliki kebijakan balasan terlihat → `messages.groupChat.visibleReplies: "message_tool"`
- `routing.queue` → `messages.queue`
- `routing.bindings` → `bindings` tingkat atas
- `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default`
@@ -213,129 +217,135 @@ Itu men-stage kandidat durable grounded ke penyimpanan dreaming jangka pendek sa
- `plugins.entries.voice-call.config.streaming.sttProvider` → `plugins.entries.voice-call.config.streaming.provider`
- `plugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold` → `plugins.entries.voice-call.config.streaming.providers.openai.*`
- `bindings[].match.accountID` → `bindings[].match.accountId`
- - Untuk channel dengan `accounts` bernama tetapi masih memiliki nilai channel tingkat atas akun tunggal, pindahkan nilai yang cakupannya akun itu ke akun yang dipromosikan yang dipilih untuk channel tersebut (`accounts.default` untuk sebagian besar channel; Matrix dapat mempertahankan target bernama/default yang cocok jika sudah ada)
+ - Untuk kanal dengan `accounts` bernama tetapi masih memiliki nilai kanal tingkat atas akun tunggal lama, pindahkan nilai bercakupan akun tersebut ke akun yang dipromosikan yang dipilih untuk kanal itu (`accounts.default` untuk sebagian besar kanal; Matrix dapat mempertahankan target bernama/default yang sudah ada dan cocok)
- `identity` → `agents.list[].identity`
- `agent.*` → `agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents)
- `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks` → `agents.defaults.models` + `agents.defaults.model.primary/fallbacks` + `agents.defaults.imageModel.primary/fallbacks`
- hapus `agents.defaults.llm`; gunakan `models.providers..timeoutSeconds` untuk batas waktu provider/model yang lambat
- `browser.ssrfPolicy.allowPrivateNetwork` → `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
- `browser.profiles.*.driver: "extension"` → `"existing-session"`
- - hapus `browser.relayBindHost` (pengaturan relay extension lama)
- - `models.providers.*.api: "openai"` lama → `"openai-completions"` (startup gateway juga melewati provider yang `api`-nya disetel ke nilai enum masa depan atau tidak dikenal, alih-alih gagal tertutup)
+ - hapus `browser.relayBindHost` (pengaturan relay ekstensi lama)
+ - `models.providers.*.api: "openai"` lama → `"openai-completions"` (startup Gateway juga melewati provider yang `api`-nya disetel ke nilai enum masa depan atau tidak dikenal, alih-alih gagal tertutup)
- Peringatan doctor juga menyertakan panduan default akun untuk channel multi-akun:
+ Peringatan doctor juga mencakup panduan default akun untuk kanal multi-akun:
- - Jika dua atau lebih entri `channels..accounts` dikonfigurasi tanpa `channels..defaultAccount` atau `accounts.default`, doctor memperingatkan bahwa routing cadangan dapat memilih akun yang tidak terduga.
+ - Jika dua atau lebih entri `channels..accounts` dikonfigurasi tanpa `channels..defaultAccount` atau `accounts.default`, doctor memperingatkan bahwa perutean fallback dapat memilih akun yang tidak terduga.
- Jika `channels..defaultAccount` disetel ke ID akun yang tidak dikenal, doctor memperingatkan dan mencantumkan ID akun yang dikonfigurasi.
-
- Jika Anda menambahkan `models.providers.opencode`, `opencode-zen`, atau `opencode-go` secara manual, itu menimpa katalog OpenCode bawaan dari `@mariozechner/pi-ai`. Hal itu dapat memaksa model memakai API yang salah atau mengosongkan biaya. Doctor memperingatkan agar Anda dapat menghapus override dan memulihkan routing API + biaya per model.
+
+ Jika Anda menambahkan `models.providers.opencode`, `opencode-zen`, atau `opencode-go` secara manual, itu akan menggantikan katalog OpenCode bawaan dari `@mariozechner/pi-ai`. Hal itu dapat memaksa model menggunakan API yang salah atau mengosongkan biaya. Doctor memperingatkan agar Anda dapat menghapus override dan memulihkan perutean API + biaya per model.
-
- Jika konfigurasi browser Anda masih menunjuk ke jalur extension Chrome yang telah dihapus, doctor menormalkannya ke model attach Chrome MCP lokal host saat ini:
+
+ Jika konfigurasi browser Anda masih mengarah ke jalur ekstensi Chrome yang sudah dihapus, doctor menormalkannya ke model attach Chrome MCP host-lokal saat ini:
- `browser.profiles.*.driver: "extension"` menjadi `"existing-session"`
- `browser.relayBindHost` dihapus
- Doctor juga mengaudit jalur Chrome MCP lokal host saat Anda menggunakan `defaultProfile: "user"` atau profil `existing-session` yang dikonfigurasi:
+ Doctor juga mengaudit jalur Chrome MCP host-lokal saat Anda menggunakan `defaultProfile: "user"` atau profil `existing-session` yang dikonfigurasi:
- - memeriksa apakah Google Chrome terpasang di host yang sama untuk profil auto-connect default
- - memeriksa versi Chrome yang terdeteksi dan memperingatkan jika versinya di bawah Chrome 144
- - mengingatkan Anda untuk mengaktifkan remote debugging di halaman inspect browser (misalnya `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging`, atau `edge://inspect/#remote-debugging`)
+ - memeriksa apakah Google Chrome terinstal pada host yang sama untuk profil koneksi otomatis default
+ - memeriksa versi Chrome yang terdeteksi dan memperingatkan ketika versinya di bawah Chrome 144
+ - mengingatkan Anda untuk mengaktifkan debugging jarak jauh di halaman inspeksi browser (misalnya `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging`, atau `edge://inspect/#remote-debugging`)
- Doctor tidak dapat mengaktifkan pengaturan sisi Chrome untuk Anda. Chrome MCP lokal host tetap memerlukan:
+ Doctor tidak dapat mengaktifkan pengaturan sisi Chrome untuk Anda. Chrome MCP host-lokal tetap memerlukan:
- browser berbasis Chromium 144+ pada host gateway/node
- browser berjalan secara lokal
- - remote debugging diaktifkan di browser tersebut
+ - debugging jarak jauh diaktifkan di browser tersebut
- menyetujui prompt persetujuan attach pertama di browser
- Kesiapan di sini hanya tentang prasyarat attach lokal. Existing-session mempertahankan batas rute Chrome MCP saat ini; rute lanjutan seperti `responsebody`, ekspor PDF, intersepsi unduhan, dan tindakan batch tetap memerlukan browser terkelola atau profil CDP mentah.
+ Kesiapan di sini hanya tentang prasyarat attach lokal. Existing-session mempertahankan batas rute Chrome MCP saat ini; rute lanjutan seperti `responsebody`, ekspor PDF, intersepsi unduhan, dan tindakan batch masih memerlukan browser terkelola atau profil CDP mentah.
Pemeriksaan ini **tidak** berlaku untuk Docker, sandbox, remote-browser, atau alur headless lainnya. Alur tersebut tetap menggunakan CDP mentah.
-
+
Saat profil OAuth OpenAI Codex dikonfigurasi, doctor memeriksa endpoint otorisasi OpenAI untuk memverifikasi bahwa stack TLS Node/OpenSSL lokal dapat memvalidasi rantai sertifikat. Jika pemeriksaan gagal dengan kesalahan sertifikat (misalnya `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`, sertifikat kedaluwarsa, atau sertifikat self-signed), doctor mencetak panduan perbaikan khusus platform. Di macOS dengan Node Homebrew, perbaikannya biasanya `brew postinstall ca-certificates`. Dengan `--deep`, pemeriksaan berjalan meskipun gateway sehat.
-
- Jika sebelumnya Anda menambahkan pengaturan transport OpenAI lama di bawah `models.providers.openai-codex`, pengaturan itu dapat membayangi jalur provider OAuth Codex bawaan yang digunakan rilis yang lebih baru secara otomatis. Doctor memperingatkan saat melihat pengaturan transport lama tersebut berdampingan dengan OAuth Codex agar Anda dapat menghapus atau menulis ulang override transport usang dan mendapatkan kembali perilaku routing/cadangan bawaan. Proxy kustom dan override hanya-header tetap didukung dan tidak memicu peringatan ini.
+
+ Jika sebelumnya Anda menambahkan pengaturan transport OpenAI lama di bawah `models.providers.openai-codex`, pengaturan tersebut dapat membayangi jalur provider OAuth Codex bawaan yang digunakan otomatis oleh rilis yang lebih baru. Doctor memperingatkan saat melihat pengaturan transport lama tersebut bersama OAuth Codex agar Anda dapat menghapus atau menulis ulang override transport yang usang dan mendapatkan kembali perilaku perutean/fallback bawaan. Proksi kustom dan override khusus header tetap didukung dan tidak memicu peringatan ini.
-
- Saat Plugin Codex bawaan diaktifkan, doctor juga memeriksa apakah referensi model utama `openai-codex/*` masih diselesaikan melalui runner PI default. Kombinasi itu valid saat Anda menginginkan autentikasi OAuth/langganan Codex melalui PI, tetapi mudah tertukar dengan harness app-server Codex native. Doctor memperingatkan dan menunjuk ke bentuk app-server eksplisit: `openai/*` plus `agentRuntime.id: "codex"` atau `OPENCLAW_AGENT_RUNTIME=codex`.
+
+ Saat Plugin Codex bawaan diaktifkan, doctor juga memeriksa apakah ref model utama `openai-codex/*` masih di-resolve melalui runner PI default. Kombinasi itu valid ketika Anda menginginkan auth OAuth/langganan Codex melalui PI, tetapi mudah tertukar dengan harness app-server Codex native. Doctor memperingatkan dan menunjuk ke bentuk app-server eksplisit: `openai/*` plus `agentRuntime.id: "codex"` atau `OPENCLAW_AGENT_RUNTIME=codex`.
- Doctor tidak memperbaikinya secara otomatis karena kedua rute valid:
+ Doctor tidak memperbaiki ini secara otomatis karena kedua rute valid:
- `openai-codex/*` + PI berarti "gunakan autentikasi OAuth/langganan Codex melalui runner OpenClaw normal."
- - `openai/*` + `agentRuntime.id: "codex"` berarti "jalankan turn tertanam melalui app-server Codex native."
- - `/codex ...` berarti "kontrol atau bind percakapan Codex native dari chat."
+ - `openai/*` + `agentRuntime.id: "codex"` berarti "jalankan turn tersemat melalui app-server Codex native."
+ - `/codex ...` berarti "kontrol atau kaitkan percakapan Codex native dari chat."
- `/acp ...` atau `runtime: "acp"` berarti "gunakan adapter ACP/acpx eksternal."
- Jika peringatan muncul, pilih rute yang Anda maksud dan edit konfigurasi secara manual. Pertahankan peringatan apa adanya saat OAuth PI Codex memang disengaja.
+ Jika peringatan muncul, pilih rute yang Anda maksud dan edit konfigurasi secara manual. Pertahankan peringatan apa adanya ketika OAuth PI Codex memang disengaja.
-
+
+ Doctor juga memindai penyimpanan sesi aktif untuk status rute lama yang dibuat otomatis setelah Anda memindahkan model atau runtime default/fallback yang dikonfigurasi dari rute milik Plugin seperti Codex.
+
+ `openclaw doctor --fix` dapat menghapus status lama yang dibuat otomatis seperti pin model `modelOverrideSource: "auto"`, metadata model runtime, id harness yang dipin, binding sesi CLI, dan override profil autentikasi otomatis ketika rute pemiliknya tidak lagi dikonfigurasi. Pilihan model sesi eksplisit dari pengguna atau legacy dilaporkan untuk ditinjau manual dan dibiarkan apa adanya; ganti dengan `/model ...`, `/new`, atau reset sesi ketika rute tersebut tidak lagi dimaksudkan.
+
+
+
Doctor dapat memigrasikan tata letak lama di disk ke struktur saat ini:
- Penyimpanan sesi + transkrip:
- dari `~/.openclaw/sessions/` ke `~/.openclaw/agents//sessions/`
- - Direktori agent:
+ - Direktori agen:
- dari `~/.openclaw/agent/` ke `~/.openclaw/agents//agent/`
- - Status auth WhatsApp (Baileys):
- - dari `~/.openclaw/credentials/*.json` lama (kecuali `oauth.json`)
- - ke `~/.openclaw/credentials/whatsapp//...` (ID akun default: `default`)
+ - Status autentikasi WhatsApp (Baileys):
+ - dari legacy `~/.openclaw/credentials/*.json` (kecuali `oauth.json`)
+ - ke `~/.openclaw/credentials/whatsapp//...` (id akun default: `default`)
- Migrasi ini bersifat best-effort dan idempoten; doctor akan memunculkan peringatan saat meninggalkan folder lama sebagai cadangan. Gateway/CLI juga otomatis memigrasikan sesi lama + direktori agent saat startup sehingga riwayat/auth/model masuk ke jalur per-agent tanpa perlu menjalankan doctor secara manual. Normalisasi provider/peta-provider Talk kini membandingkan berdasarkan kesetaraan struktural, sehingga perbedaan urutan-key saja tidak lagi memicu perubahan `doctor --fix` tanpa efek yang berulang.
+ Migrasi ini bersifat upaya terbaik dan idempoten; doctor akan mengeluarkan peringatan ketika meninggalkan folder legacy apa pun sebagai cadangan. Gateway/CLI juga memigrasikan otomatis sesi legacy + direktori agen saat startup sehingga riwayat/autentikasi/model masuk ke jalur per-agen tanpa perlu menjalankan doctor secara manual. Autentikasi WhatsApp sengaja hanya dimigrasikan melalui `openclaw doctor`. Normalisasi penyedia/peta-penyedia percakapan kini membandingkan berdasarkan kesetaraan struktural, sehingga perbedaan yang hanya berupa urutan kunci tidak lagi memicu perubahan `doctor --fix` no-op berulang.
-
- Doctor memindai semua manifest Plugin yang terpasang untuk key kapabilitas tingkat atas yang sudah usang (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Saat ditemukan, doctor menawarkan untuk memindahkannya ke objek `contracts` dan menulis ulang file manifest di tempat. Migrasi ini idempoten; jika key `contracts` sudah memiliki nilai yang sama, key lama dihapus tanpa menduplikasi data.
+
+ Doctor memindai semua manifes Plugin yang terinstal untuk kunci kapabilitas tingkat atas yang sudah tidak digunakan (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Jika ditemukan, doctor menawarkan untuk memindahkannya ke objek `contracts` dan menulis ulang file manifes di tempat. Migrasi ini idempoten; jika kunci `contracts` sudah memiliki nilai yang sama, kunci legacy dihapus tanpa menduplikasi data.
-
- Doctor juga memeriksa penyimpanan job cron (`~/.openclaw/cron/jobs.json` secara default, atau `cron.store` saat ditimpa) untuk bentuk job lama yang masih diterima scheduler demi kompatibilitas.
+
+ Doctor juga memeriksa penyimpanan pekerjaan Cron (`~/.openclaw/cron/jobs.json` secara default, atau `cron.store` saat ditimpa) untuk bentuk pekerjaan lama yang masih diterima scheduler demi kompatibilitas.
- Pembersihan cron saat ini meliputi:
+ Pembersihan Cron saat ini mencakup:
- `jobId` → `id`
- `schedule.cron` → `schedule.expr`
- field payload tingkat atas (`message`, `model`, `thinking`, ...) → `payload`
- field pengiriman tingkat atas (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
- alias pengiriman `provider` payload → `delivery.channel` eksplisit
- - job fallback webhook `notify: true` lama yang sederhana → `delivery.mode="webhook"` eksplisit dengan `delivery.to=cron.webhook`
+ - pekerjaan fallback Webhook `notify: true` legacy sederhana → `delivery.mode="webhook"` eksplisit dengan `delivery.to=cron.webhook`
- Doctor hanya memigrasikan otomatis job `notify: true` saat dapat melakukannya tanpa mengubah perilaku. Jika job menggabungkan fallback notify lama dengan mode pengiriman non-webhook yang sudah ada, doctor memperingatkan dan membiarkan job tersebut untuk ditinjau manual.
+ Doctor hanya memigrasikan otomatis pekerjaan `notify: true` ketika dapat melakukannya tanpa mengubah perilaku. Jika sebuah pekerjaan menggabungkan fallback notify legacy dengan mode pengiriman non-Webhook yang sudah ada, doctor memperingatkan dan membiarkan pekerjaan tersebut untuk ditinjau manual.
- Di Linux, doctor juga memperingatkan saat crontab pengguna masih memanggil `~/.openclaw/bin/ensure-whatsapp.sh` lama. Skrip lokal host itu tidak dipelihara oleh OpenClaw saat ini dan dapat menulis pesan `Gateway inactive` palsu ke `~/.openclaw/logs/whatsapp-health.log` saat cron tidak dapat menjangkau bus pengguna systemd. Hapus entri crontab usang dengan `crontab -e`; gunakan `openclaw channels status --probe`, `openclaw doctor`, dan `openclaw gateway status` untuk pemeriksaan kesehatan saat ini.
+ Di Linux, doctor juga memperingatkan ketika crontab pengguna masih memanggil `~/.openclaw/bin/ensure-whatsapp.sh` lama. Skrip lokal-host itu tidak dipelihara oleh OpenClaw saat ini dan dapat menulis pesan `Gateway inactive` palsu ke `~/.openclaw/logs/whatsapp-health.log` ketika cron tidak dapat menjangkau bus pengguna systemd. Hapus entri crontab usang dengan `crontab -e`; gunakan `openclaw channels status --probe`, `openclaw doctor`, dan `openclaw gateway status` untuk pemeriksaan kesehatan saat ini.
- Doctor memindai setiap direktori sesi agen untuk menemukan file kunci tulis yang usang — file yang tertinggal saat sesi keluar secara tidak normal. Untuk setiap file kunci yang ditemukan, Doctor melaporkan: jalur, PID, apakah PID masih hidup, usia kunci, dan apakah file tersebut dianggap usang (PID mati atau lebih lama dari 30 menit). Dalam mode `--fix` / `--repair`, Doctor menghapus file kunci usang secara otomatis; jika tidak, Doctor mencetak catatan dan menginstruksikan Anda untuk menjalankan ulang dengan `--fix`.
+ Doctor memindai setiap direktori sesi agen untuk file kunci tulis yang usang — file yang tertinggal ketika sesi keluar secara tidak normal. Untuk setiap file kunci yang ditemukan, ia melaporkan: jalur, PID, apakah PID masih hidup, usia kunci, dan apakah file tersebut dianggap usang (PID mati atau lebih lama dari 30 menit). Dalam mode `--fix` / `--repair`, ia menghapus file kunci usang secara otomatis; jika tidak, ia mencetak catatan dan menginstruksikan Anda untuk menjalankan ulang dengan `--fix`.
- Doctor memindai file JSONL sesi agen untuk bentuk cabang terduplikasi yang dibuat oleh bug penulisan ulang transkrip prompt 2026.4.24: giliran pengguna yang ditinggalkan dengan konteks runtime internal OpenClaw ditambah saudara aktif yang berisi prompt pengguna terlihat yang sama. Dalam mode `--fix` / `--repair`, Doctor mencadangkan setiap file terdampak di samping file asli dan menulis ulang transkrip ke cabang aktif sehingga riwayat gateway dan pembaca memori tidak lagi melihat giliran duplikat.
+ Doctor memindai file JSONL sesi agen untuk bentuk cabang duplikat yang dibuat oleh bug penulisan ulang transkrip prompt 2026.4.24: giliran pengguna yang ditinggalkan dengan konteks runtime internal OpenClaw ditambah saudara aktif yang berisi prompt pengguna terlihat yang sama. Dalam mode `--fix` / `--repair`, doctor mencadangkan setiap file terdampak di sebelah file asli dan menulis ulang transkrip ke cabang aktif sehingga riwayat gateway dan pembaca memori tidak lagi melihat giliran duplikat.
-
- Direktori status adalah batang otak operasional. Jika menghilang, Anda kehilangan sesi, kredensial, log, dan konfigurasi (kecuali Anda memiliki cadangan di tempat lain).
+
+ Direktori status adalah batang otak operasional. Jika hilang, Anda kehilangan sesi, kredensial, log, dan konfigurasi (kecuali Anda memiliki cadangan di tempat lain).
Doctor memeriksa:
- - **Direktori status hilang**: memperingatkan tentang kehilangan status yang katastrofik, meminta untuk membuat ulang direktori, dan mengingatkan Anda bahwa data yang hilang tidak dapat dipulihkan.
- - **Izin direktori status**: memverifikasi kemampuan tulis; menawarkan perbaikan izin (dan mengeluarkan petunjuk `chown` saat ketidakcocokan pemilik/grup terdeteksi).
- - **Direktori status tersinkron cloud macOS**: memperingatkan saat status berada di bawah iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) atau `~/Library/CloudStorage/...` karena jalur yang didukung sinkronisasi dapat menyebabkan I/O lebih lambat dan perlombaan kunci/sinkronisasi.
- - **Direktori status SD atau eMMC Linux**: memperingatkan saat status berada pada sumber mount `mmcblk*`, karena I/O acak berbasis SD atau eMMC dapat lebih lambat dan lebih cepat aus di bawah penulisan sesi dan kredensial.
+ - **Direktori status hilang**: memperingatkan tentang kehilangan status yang katastrofik, meminta untuk membuat ulang direktori, dan mengingatkan bahwa ia tidak dapat memulihkan data yang hilang.
+ - **Izin direktori status**: memverifikasi kemampuan tulis; menawarkan untuk memperbaiki izin (dan mengeluarkan petunjuk `chown` ketika ketidakcocokan pemilik/grup terdeteksi).
+ - **Direktori status yang disinkronkan cloud macOS**: memperingatkan ketika status terselesaikan di bawah iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) atau `~/Library/CloudStorage/...` karena jalur berbasis sinkronisasi dapat menyebabkan I/O lebih lambat dan race kunci/sinkronisasi.
+ - **Direktori status SD atau eMMC Linux**: memperingatkan ketika status terselesaikan ke sumber mount `mmcblk*`, karena I/O acak berbasis SD atau eMMC dapat lebih lambat dan lebih cepat aus saat penulisan sesi dan kredensial.
- **Direktori sesi hilang**: `sessions/` dan direktori penyimpanan sesi diperlukan untuk mempertahankan riwayat dan menghindari crash `ENOENT`.
- - **Ketidakcocokan transkrip**: memperingatkan saat entri sesi terbaru memiliki file transkrip yang hilang.
- - **Sesi utama "JSONL 1 baris"**: menandai saat transkrip utama hanya memiliki satu baris (riwayat tidak bertambah).
- - **Beberapa direktori status**: memperingatkan saat beberapa folder `~/.openclaw` ada di berbagai direktori home atau saat `OPENCLAW_STATE_DIR` menunjuk ke tempat lain (riwayat dapat terpecah antar instalasi).
- - **Pengingat mode jarak jauh**: jika `gateway.mode=remote`, Doctor mengingatkan Anda untuk menjalankannya di host jarak jauh (status berada di sana).
- - **Izin file konfigurasi**: memperingatkan jika `~/.openclaw/openclaw.json` dapat dibaca oleh grup/dunia dan menawarkan untuk memperketatnya ke `600`.
+ - **Ketidakcocokan transkrip**: memperingatkan ketika entri sesi terbaru memiliki file transkrip yang hilang.
+ - **Sesi utama "JSONL 1 baris"**: menandai ketika transkrip utama hanya memiliki satu baris (riwayat tidak terakumulasi).
+ - **Beberapa direktori status**: memperingatkan ketika beberapa folder `~/.openclaw` ada di berbagai direktori home atau ketika `OPENCLAW_STATE_DIR` menunjuk ke tempat lain (riwayat dapat terpecah antarinstalasi).
+ - **Pengingat mode jarak jauh**: jika `gateway.mode=remote`, doctor mengingatkan Anda untuk menjalankannya di host jarak jauh (status berada di sana).
+ - **Izin file konfigurasi**: memperingatkan jika `~/.openclaw/openclaw.json` dapat dibaca grup/dunia dan menawarkan untuk memperketat ke `600`.
- Doctor memeriksa profil OAuth di penyimpanan autentikasi, memperingatkan saat token akan kedaluwarsa/sudah kedaluwarsa, dan dapat menyegarkannya saat aman. Jika profil OAuth/token Anthropic sudah usang, Doctor menyarankan kunci API Anthropic atau jalur setup-token Anthropic. Prompt penyegaran hanya muncul saat berjalan secara interaktif (TTY); `--non-interactive` melewati upaya penyegaran.
+ Doctor memeriksa profil OAuth di penyimpanan autentikasi, memperingatkan ketika token akan kedaluwarsa/sudah kedaluwarsa, dan dapat menyegarkannya ketika aman. Jika profil OAuth/token Anthropic usang, ia menyarankan kunci API Anthropic atau jalur setup-token Anthropic. Prompt penyegaran hanya muncul saat berjalan secara interaktif (TTY); `--non-interactive` melewati upaya penyegaran.
- Saat penyegaran OAuth gagal permanen (misalnya `refresh_token_reused`, `invalid_grant`, atau penyedia meminta Anda masuk lagi), Doctor melaporkan bahwa autentikasi ulang diperlukan dan mencetak perintah `openclaw models auth login --provider ...` persis yang harus dijalankan.
+ Ketika penyegaran OAuth gagal permanen (misalnya `refresh_token_reused`, `invalid_grant`, atau penyedia meminta Anda masuk lagi), doctor melaporkan bahwa autentikasi ulang diperlukan dan mencetak perintah `openclaw models auth login --provider ...` yang tepat untuk dijalankan.
Doctor juga melaporkan profil autentikasi yang sementara tidak dapat digunakan karena:
@@ -343,119 +353,119 @@ Itu men-stage kandidat durable grounded ke penyimpanan dreaming jangka pendek sa
- penonaktifan lebih lama (kegagalan penagihan/kredit)
-
- Jika `hooks.gmail.model` diatur, Doctor memvalidasi referensi model terhadap katalog dan daftar izin serta memperingatkan saat model tidak dapat di-resolve atau tidak diizinkan.
+
+ Jika `hooks.gmail.model` diatur, doctor memvalidasi referensi model terhadap katalog dan daftar izin serta memperingatkan ketika referensi itu tidak akan terselesaikan atau tidak diizinkan.
- Saat sandboxing diaktifkan, Doctor memeriksa image Docker dan menawarkan untuk membangun atau beralih ke nama lama jika image saat ini hilang.
+ Ketika sandboxing diaktifkan, doctor memeriksa image Docker dan menawarkan untuk membangun atau beralih ke nama lama jika image saat ini hilang.
- Doctor menghapus status staging dependensi Plugin lama yang dihasilkan OpenClaw dalam mode `openclaw doctor --fix` / `openclaw doctor --repair`. Ini mencakup root dependensi usang yang dihasilkan, direktori tahap instalasi lama, sisa lokal paket dari kode perbaikan dependensi Plugin bawaan sebelumnya, dan salinan npm terkelola yatim atau dipulihkan dari Plugin `@openclaw/*` bawaan yang dapat membayangi manifes bawaan saat ini.
+ Doctor menghapus status staging dependensi Plugin lama yang dihasilkan OpenClaw dalam mode `openclaw doctor --fix` / `openclaw doctor --repair`. Ini mencakup akar dependensi lama yang dihasilkan, direktori tahap-instal lama, sisa paket-lokal dari kode perbaikan dependensi bundled-plugin sebelumnya, dan salinan npm terkelola dari Plugin `@openclaw/*` bundel yang yatim atau dipulihkan yang dapat membayangi manifes bundel saat ini.
- Doctor juga dapat menginstal ulang Plugin unduhan yang dikonfigurasi saat konfigurasi merujuknya tetapi registri Plugin lokal tidak dapat menemukannya. Untuk eksternalisasi Plugin bawaan 2026.5.2, Doctor secara otomatis menginstal Plugin unduhan yang sudah digunakan konfigurasi yang ada lalu mengandalkan `meta.lastTouchedVersion` untuk menjalankan pass rilis itu hanya sekali. Startup Gateway dan pemuatan ulang konfigurasi tidak menjalankan manajer paket; instalasi Plugin tetap merupakan pekerjaan doctor/install/update yang eksplisit.
+ Doctor juga dapat menginstal ulang Plugin yang dapat diunduh yang hilang ketika konfigurasi mereferensikannya tetapi registry Plugin lokal tidak dapat menemukannya. Contohnya mencakup `plugins.entries` material, pengaturan kanal/penyedia/pencarian yang dikonfigurasi, dan runtime agen yang dikonfigurasi. Selama pembaruan paket, doctor menghindari menjalankan perbaikan Plugin manajer paket saat paket inti sedang diganti; jalankan `openclaw doctor --fix` lagi setelah pembaruan jika Plugin yang dikonfigurasi masih perlu pemulihan. Startup Gateway dan pemuatan ulang konfigurasi tidak menjalankan manajer paket; instalasi Plugin tetap merupakan pekerjaan doctor/install/update eksplisit.
- Doctor mendeteksi layanan Gateway lama (launchd/systemd/schtasks) dan menawarkan untuk menghapusnya serta menginstal layanan OpenClaw menggunakan port Gateway saat ini. Doctor juga dapat memindai layanan tambahan yang mirip Gateway dan mencetak petunjuk pembersihan. Layanan Gateway OpenClaw bernama profil dianggap kelas utama dan tidak ditandai sebagai "tambahan."
+ Doctor mendeteksi layanan gateway lama (launchd/systemd/schtasks) dan menawarkan untuk menghapusnya serta menginstal layanan OpenClaw menggunakan port gateway saat ini. Ia juga dapat memindai layanan tambahan yang mirip gateway dan mencetak petunjuk pembersihan. Layanan gateway OpenClaw bernama profil dianggap kelas utama dan tidak ditandai sebagai "tambahan."
- Di Linux, jika layanan Gateway tingkat pengguna hilang tetapi layanan Gateway OpenClaw tingkat sistem ada, Doctor tidak menginstal layanan tingkat pengguna kedua secara otomatis. Periksa dengan `openclaw gateway status --deep` atau `openclaw doctor --deep`, lalu hapus duplikatnya atau atur `OPENCLAW_SERVICE_REPAIR_POLICY=external` saat supervisor sistem memiliki siklus hidup Gateway.
+ Di Linux, jika layanan gateway tingkat pengguna hilang tetapi layanan gateway OpenClaw tingkat sistem ada, doctor tidak menginstal layanan tingkat pengguna kedua secara otomatis. Periksa dengan `openclaw gateway status --deep` atau `openclaw doctor --deep`, lalu hapus duplikat atau atur `OPENCLAW_SERVICE_REPAIR_POLICY=external` ketika supervisor sistem memiliki lifecycle gateway.
-
- Saat akun kanal Matrix memiliki migrasi status lama yang tertunda atau dapat ditindaklanjuti, Doctor (dalam mode `--fix` / `--repair`) membuat snapshot pra-migrasi lalu menjalankan langkah migrasi upaya terbaik: migrasi status Matrix lama dan persiapan status terenkripsi lama. Kedua langkah tidak fatal; kesalahan dicatat dan startup berlanjut. Dalam mode baca-saja (`openclaw doctor` tanpa `--fix`) pemeriksaan ini dilewati sepenuhnya.
+
+ Ketika akun kanal Matrix memiliki migrasi status lama yang tertunda atau dapat ditindaklanjuti, doctor (dalam mode `--fix` / `--repair`) membuat snapshot pra-migrasi lalu menjalankan langkah migrasi upaya-terbaik: migrasi status Matrix lama dan persiapan status terenkripsi lama. Kedua langkah tidak fatal; kesalahan dicatat dan startup berlanjut. Dalam mode hanya-baca (`openclaw doctor` tanpa `--fix`) pemeriksaan ini dilewati sepenuhnya.
-
- Doctor sekarang memeriksa status penyandingan perangkat sebagai bagian dari pass kesehatan normal.
+
+ Doctor sekarang memeriksa status pairing perangkat sebagai bagian dari pemeriksaan kesehatan normal.
- Yang dilaporkan:
+ Yang dilaporkannya:
- - permintaan penyandingan pertama kali yang tertunda
- - peningkatan peran yang tertunda untuk perangkat yang sudah disandingkan
- - peningkatan cakupan yang tertunda untuk perangkat yang sudah disandingkan
+ - permintaan pairing pertama kali yang tertunda
+ - peningkatan peran yang tertunda untuk perangkat yang sudah dipairing
+ - peningkatan cakupan yang tertunda untuk perangkat yang sudah dipairing
- perbaikan ketidakcocokan kunci publik ketika id perangkat masih cocok tetapi identitas perangkat tidak lagi cocok dengan catatan yang disetujui
- - catatan yang sudah disandingkan yang tidak memiliki token aktif untuk peran yang disetujui
- - token yang sudah disandingkan yang cakupannya bergeser di luar baseline penyandingan yang disetujui
- - entri token-perangkat yang di-cache secara lokal untuk mesin saat ini yang lebih lama daripada rotasi token sisi Gateway atau membawa metadata cakupan yang usang
+ - catatan yang dipairing kehilangan token aktif untuk peran yang disetujui
+ - token yang dipairing yang cakupannya drift di luar baseline pairing yang disetujui
+ - entri token perangkat cache lokal untuk mesin saat ini yang lebih lama daripada rotasi token sisi gateway atau membawa metadata cakupan usang
- Doctor tidak menyetujui permintaan penyandingan secara otomatis atau merotasi token perangkat secara otomatis. Sebaliknya, ia mencetak langkah berikutnya yang tepat:
+ Doctor tidak menyetujui otomatis permintaan pairing atau merotasi otomatis token perangkat. Ia mencetak langkah berikutnya yang tepat sebagai gantinya:
- periksa permintaan tertunda dengan `openclaw devices list`
- setujui permintaan yang tepat dengan `openclaw devices approve `
- rotasi token baru dengan `openclaw devices rotate --device --role `
- hapus dan setujui ulang catatan usang dengan `openclaw devices remove `
- Ini menutup celah umum "sudah disandingkan tetapi masih mendapat pairing required": doctor kini membedakan penyandingan pertama kali dari peningkatan peran/cakupan yang tertunda serta dari pergeseran token/identitas perangkat yang usang.
+ Ini menutup celah umum "sudah dipairing tetapi masih mendapat pairing required": doctor sekarang membedakan pairing pertama kali dari peningkatan peran/cakupan yang tertunda dan dari drift token/identitas-perangkat yang usang.
- Doctor memunculkan peringatan ketika penyedia terbuka untuk DM tanpa daftar izin, atau ketika kebijakan dikonfigurasi dengan cara yang berbahaya.
+ Doctor mengeluarkan peringatan ketika penyedia terbuka untuk DM tanpa daftar izin, atau ketika kebijakan dikonfigurasi dengan cara yang berbahaya.
- Jika berjalan sebagai layanan pengguna systemd, doctor memastikan lingering diaktifkan agar Gateway tetap aktif setelah logout.
+ Jika berjalan sebagai layanan pengguna systemd, doctor memastikan lingering diaktifkan sehingga gateway tetap hidup setelah logout.
-
+
Doctor mencetak ringkasan status workspace untuk agen default:
- - **Status Skills**: menghitung skill yang memenuhi syarat, persyaratan-hilang, dan diblokir-daftar-izin.
+ - **Status Skills**: menghitung skill yang memenuhi syarat, persyaratan hilang, dan diblokir daftar izin.
- **Direktori workspace lama**: memperingatkan ketika `~/openclaw` atau direktori workspace lama lainnya ada berdampingan dengan workspace saat ini.
- - **Status Plugin**: menghitung Plugin yang diaktifkan/dinonaktifkan/error; mencantumkan ID Plugin untuk setiap error; melaporkan kemampuan Plugin bundel.
+ - **Status Plugin**: menghitung Plugin yang diaktifkan/dinonaktifkan/error; mencantumkan ID Plugin untuk error apa pun; melaporkan kapabilitas Plugin bundel.
- **Peringatan kompatibilitas Plugin**: menandai Plugin yang memiliki masalah kompatibilitas dengan runtime saat ini.
- - **Diagnostik Plugin**: menampilkan peringatan atau error waktu-muat apa pun yang dikeluarkan oleh registri Plugin.
+ - **Diagnostik Plugin**: menampilkan peringatan atau error saat pemuatan yang dikeluarkan oleh registry Plugin.
- Doctor memeriksa apakah file bootstrap workspace (misalnya `AGENTS.md`, `CLAUDE.md`, atau file konteks lain yang disuntikkan) mendekati atau melampaui anggaran karakter yang dikonfigurasi. Ia melaporkan hitungan karakter mentah vs. tersuntik per file, persentase pemotongan, penyebab pemotongan (`max/file` atau `max/total`), dan total karakter tersuntik sebagai pecahan dari total anggaran. Ketika file dipotong atau mendekati batas, doctor mencetak kiat untuk menyesuaikan `agents.defaults.bootstrapMaxChars` dan `agents.defaults.bootstrapTotalMaxChars`.
+ Doctor memeriksa apakah file bootstrap workspace (misalnya `AGENTS.md`, `CLAUDE.md`, atau file konteks injeksi lainnya) mendekati atau melebihi anggaran karakter yang dikonfigurasi. Ia melaporkan jumlah karakter mentah vs. injeksi per file, persentase pemotongan, penyebab pemotongan (`max/file` atau `max/total`), dan total karakter injeksi sebagai fraksi dari total anggaran. Ketika file dipotong atau mendekati batas, doctor mencetak tips untuk menyesuaikan `agents.defaults.bootstrapMaxChars` dan `agents.defaults.bootstrapTotalMaxChars`.
-
- Ketika `openclaw doctor --fix` menghapus Plugin saluran yang hilang, ia juga menghapus config bercakupan saluran yang menggantung yang merujuk ke Plugin tersebut: entri `channels.`, target Heartbeat yang menamai saluran, dan override `agents.*.models["/*"]`. Ini mencegah loop boot Gateway ketika runtime saluran sudah hilang tetapi config masih meminta gateway untuk mengikat ke sana.
+
+ Ketika `openclaw doctor --fix` menghapus Plugin kanal yang hilang, ia juga menghapus konfigurasi berskup kanal yang menggantung yang mereferensikan Plugin tersebut: entri `channels.`, target Heartbeat yang menamai kanal, dan override `agents.*.models["/*"]`. Ini mencegah boot loop Gateway ketika runtime kanal sudah hilang tetapi konfigurasi masih meminta gateway untuk mengikatnya.
- Doctor memeriksa apakah pelengkapan tab terpasang untuk shell saat ini (zsh, bash, fish, atau PowerShell):
+ Doctor memeriksa apakah pelengkapan tab terinstal untuk shell saat ini (zsh, bash, fish, atau PowerShell):
- - Jika profil shell menggunakan pola pelengkapan dinamis yang lambat (`source <(openclaw completion ...)`), doctor meningkatkannya ke varian file cache yang lebih cepat.
- - Jika pelengkapan dikonfigurasi di profil tetapi file cache hilang, doctor membuat ulang cache secara otomatis.
- - Jika tidak ada pelengkapan yang dikonfigurasi sama sekali, doctor meminta untuk memasangnya (hanya mode interaktif; dilewati dengan `--non-interactive`).
+ - Jika profil shell menggunakan pola pelengkapan dinamis lambat (`source <(openclaw completion ...)`), doctor meningkatkannya ke varian file cache yang lebih cepat.
+ - Jika pelengkapan dikonfigurasi di profil tetapi file cache hilang, doctor meregenerasi cache secara otomatis.
+ - Jika tidak ada pelengkapan yang dikonfigurasi sama sekali, doctor meminta untuk menginstalnya (hanya mode interaktif; dilewati dengan `--non-interactive`).
- Jalankan `openclaw completion --write-state` untuk membuat ulang cache secara manual.
+ Jalankan `openclaw completion --write-state` untuk meregenerasi cache secara manual.
-
- Doctor memeriksa kesiapan auth token gateway lokal.
+
+ Doctor memeriksa kesiapan autentikasi token gateway lokal.
- - Jika mode token membutuhkan token dan tidak ada sumber token, doctor menawarkan untuk membuatnya.
+ - Jika mode token memerlukan token dan tidak ada sumber token, doctor menawarkan untuk membuatnya.
- Jika `gateway.auth.token` dikelola SecretRef tetapi tidak tersedia, doctor memperingatkan dan tidak menimpanya dengan plaintext.
- `openclaw doctor --generate-gateway-token` memaksa pembuatan hanya ketika tidak ada SecretRef token yang dikonfigurasi.
-
- Beberapa alur perbaikan perlu memeriksa kredensial yang dikonfigurasi tanpa melemahkan perilaku runtime fail-fast.
+
+ Beberapa alur perbaikan perlu memeriksa kredensial yang dikonfigurasi tanpa melemahkan perilaku fail-fast runtime.
- - `openclaw doctor --fix` kini menggunakan model ringkasan SecretRef read-only yang sama seperti perintah keluarga status untuk perbaikan config tertarget.
- - Contoh: perbaikan `allowFrom` / `groupAllowFrom` `@username` Telegram mencoba menggunakan kredensial bot yang dikonfigurasi ketika tersedia.
- - Jika token bot Telegram dikonfigurasi melalui SecretRef tetapi tidak tersedia di jalur perintah saat ini, doctor melaporkan bahwa kredensial dikonfigurasi-tetapi-tidak-tersedia dan melewati resolusi otomatis alih-alih crash atau salah melaporkan token sebagai hilang.
+ - `openclaw doctor --fix` kini menggunakan model ringkasan SecretRef baca-saja yang sama seperti perintah keluarga status untuk perbaikan konfigurasi tertarget.
+ - Contoh: perbaikan Telegram `allowFrom` / `groupAllowFrom` `@username` mencoba menggunakan kredensial bot yang dikonfigurasi saat tersedia.
+ - Jika token bot Telegram dikonfigurasi melalui SecretRef tetapi tidak tersedia di jalur perintah saat ini, doctor melaporkan bahwa kredensial sudah dikonfigurasi tetapi tidak tersedia, lalu melewati resolusi otomatis alih-alih crash atau salah melaporkan token sebagai hilang.
- Doctor menjalankan pemeriksaan kesehatan dan menawarkan untuk memulai ulang gateway ketika tampak tidak sehat.
+ Doctor menjalankan pemeriksaan kesehatan dan menawarkan untuk memulai ulang gateway ketika terlihat tidak sehat.
Doctor memeriksa apakah penyedia embedding pencarian memori yang dikonfigurasi siap untuk agen default. Perilakunya bergantung pada backend dan penyedia yang dikonfigurasi:
- **Backend QMD**: memeriksa apakah biner `qmd` tersedia dan dapat dijalankan. Jika tidak, mencetak panduan perbaikan termasuk paket npm dan opsi jalur biner manual.
- - **Penyedia lokal eksplisit**: memeriksa file model lokal atau URL model jarak jauh/dapat diunduh yang dikenali. Jika tidak ada, menyarankan untuk beralih ke penyedia jarak jauh.
- - **Penyedia jarak jauh eksplisit** (`openai`, `voyage`, dll.): memverifikasi bahwa kunci API tersedia di lingkungan atau penyimpanan autentikasi. Mencetak petunjuk perbaikan yang dapat ditindaklanjuti jika tidak ada.
- - **Penyedia otomatis**: memeriksa ketersediaan model lokal terlebih dahulu, lalu mencoba setiap penyedia jarak jauh sesuai urutan pemilihan otomatis.
+ - **Penyedia lokal eksplisit**: memeriksa file model lokal atau URL model jarak jauh/yang dapat diunduh yang dikenali. Jika hilang, menyarankan beralih ke penyedia jarak jauh.
+ - **Penyedia jarak jauh eksplisit** (`openai`, `voyage`, dll.): memverifikasi bahwa kunci API ada di lingkungan atau penyimpanan auth. Mencetak petunjuk perbaikan yang dapat ditindaklanjuti jika hilang.
+ - **Penyedia otomatis**: memeriksa ketersediaan model lokal terlebih dahulu, lalu mencoba setiap penyedia jarak jauh dalam urutan pemilihan otomatis.
- Ketika hasil probe gateway yang di-cache tersedia (gateway sehat pada saat pemeriksaan), doctor mencocokkan hasilnya dengan konfigurasi yang terlihat oleh CLI dan mencatat setiap perbedaan. Doctor tidak memulai ping embedding baru pada jalur default; gunakan perintah status memori mendalam saat Anda menginginkan pemeriksaan penyedia langsung.
+ Saat hasil probe gateway yang di-cache tersedia (gateway sehat pada saat pemeriksaan), doctor mencocokkan hasilnya dengan konfigurasi yang terlihat oleh CLI dan mencatat setiap ketidaksesuaian. Doctor tidak memulai ping embedding baru pada jalur default; gunakan perintah status memori mendalam saat Anda menginginkan pemeriksaan penyedia langsung.
Gunakan `openclaw memory status --deep` untuk memverifikasi kesiapan embedding saat runtime.
-
- Jika gateway sehat, doctor menjalankan probe status channel dan melaporkan peringatan dengan perbaikan yang disarankan.
+
+ Jika gateway sehat, doctor menjalankan probe status saluran dan melaporkan peringatan dengan perbaikan yang disarankan.
-
- Doctor memeriksa konfigurasi supervisor yang terpasang (launchd/systemd/schtasks) untuk default yang hilang atau usang (misalnya, dependensi systemd network-online dan jeda mulai ulang). Saat menemukan ketidakcocokan, doctor merekomendasikan pembaruan dan dapat menulis ulang file layanan/tugas ke default saat ini.
+
+ Doctor memeriksa konfigurasi supervisor yang terpasang (launchd/systemd/schtasks) untuk default yang hilang atau usang (misalnya, dependensi systemd network-online dan penundaan mulai ulang). Saat menemukan ketidakcocokan, doctor merekomendasikan pembaruan dan dapat menulis ulang file layanan/tugas ke default saat ini.
Catatan:
@@ -463,34 +473,34 @@ Itu men-stage kandidat durable grounded ke penyimpanan dreaming jangka pendek sa
- `openclaw doctor --yes` menerima prompt perbaikan default.
- `openclaw doctor --repair` menerapkan perbaikan yang direkomendasikan tanpa prompt.
- `openclaw doctor --repair --force` menimpa konfigurasi supervisor kustom.
- - `OPENCLAW_SERVICE_REPAIR_POLICY=external` menjaga doctor tetap hanya-baca untuk siklus hidup layanan gateway. Doctor tetap melaporkan kesehatan layanan dan menjalankan perbaikan non-layanan, tetapi melewati pemasangan/mulai/mulai ulang/bootstrap layanan, penulisan ulang konfigurasi supervisor, dan pembersihan layanan lama karena supervisor eksternal memiliki siklus hidup tersebut.
- - Di Linux, doctor tidak menulis ulang metadata perintah/entrypoint saat unit gateway systemd yang cocok aktif. Doctor juga mengabaikan unit tambahan mirip gateway non-legacy yang tidak aktif selama pemindaian layanan duplikat, sehingga file layanan pendamping tidak membuat noise pembersihan.
- - Jika autentikasi token memerlukan token dan `gateway.auth.token` dikelola SecretRef, pemasangan/perbaikan layanan doctor memvalidasi SecretRef tetapi tidak menyimpan nilai token plaintext yang sudah di-resolve ke dalam metadata lingkungan layanan supervisor.
- - Doctor mendeteksi nilai lingkungan layanan terkelola berbasis `.env`/SecretRef yang dipasang inline oleh instalasi LaunchAgent, systemd, atau Windows Scheduled Task lama dan menulis ulang metadata layanan agar nilai tersebut dimuat dari sumber runtime, bukan dari definisi supervisor.
- - Doctor mendeteksi saat perintah layanan masih mengunci `--port` lama setelah `gateway.port` berubah dan menulis ulang metadata layanan ke port saat ini.
- - Jika autentikasi token memerlukan token dan SecretRef token yang dikonfigurasi belum ter-resolve, doctor memblokir jalur pemasangan/perbaikan dengan panduan yang dapat ditindaklanjuti.
- - Jika `gateway.auth.token` dan `gateway.auth.password` sama-sama dikonfigurasi dan `gateway.auth.mode` belum disetel, doctor memblokir pemasangan/perbaikan hingga mode disetel secara eksplisit.
- - Untuk unit user-systemd Linux, pemeriksaan drift token doctor kini menyertakan sumber `Environment=` dan `EnvironmentFile=` saat membandingkan metadata autentikasi layanan.
- - Perbaikan layanan Doctor menolak menulis ulang, menghentikan, atau memulai ulang layanan gateway dari biner OpenClaw yang lebih lama ketika konfigurasi terakhir ditulis oleh versi yang lebih baru. Lihat [Pemecahan masalah Gateway](/id/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
+ - `OPENCLAW_SERVICE_REPAIR_POLICY=external` menjaga doctor tetap baca-saja untuk siklus hidup layanan gateway. Doctor tetap melaporkan kesehatan layanan dan menjalankan perbaikan non-layanan, tetapi melewati pemasangan/mulai/mulai ulang/bootstrap layanan, penulisan ulang konfigurasi supervisor, dan pembersihan layanan legacy karena supervisor eksternal memiliki siklus hidup tersebut.
+ - Di Linux, doctor tidak menulis ulang metadata perintah/entrypoint saat unit gateway systemd yang cocok aktif. Doctor juga mengabaikan unit tambahan mirip gateway non-legacy yang tidak aktif selama pemindaian layanan duplikat agar file layanan pendamping tidak membuat noise pembersihan.
+ - Jika auth token memerlukan token dan `gateway.auth.token` dikelola SecretRef, pemasangan/perbaikan layanan doctor memvalidasi SecretRef tetapi tidak menyimpan nilai token plaintext yang diselesaikan ke dalam metadata lingkungan layanan supervisor.
+ - Doctor mendeteksi nilai lingkungan layanan yang dikelola `.env`/didukung SecretRef yang disematkan inline oleh pemasangan LaunchAgent, systemd, atau Windows Scheduled Task lama, lalu menulis ulang metadata layanan agar nilai tersebut dimuat dari sumber runtime, bukan dari definisi supervisor.
+ - Doctor mendeteksi ketika perintah layanan masih mematok `--port` lama setelah `gateway.port` berubah dan menulis ulang metadata layanan ke port saat ini.
+ - Jika auth token memerlukan token dan SecretRef token yang dikonfigurasi belum terselesaikan, doctor memblokir jalur pemasangan/perbaikan dengan panduan yang dapat ditindaklanjuti.
+ - Jika `gateway.auth.token` dan `gateway.auth.password` sama-sama dikonfigurasi dan `gateway.auth.mode` belum disetel, doctor memblokir pemasangan/perbaikan sampai mode disetel secara eksplisit.
+ - Untuk unit user-systemd Linux, pemeriksaan drift token doctor kini menyertakan sumber `Environment=` dan `EnvironmentFile=` saat membandingkan metadata auth layanan.
+ - Perbaikan layanan Doctor menolak menulis ulang, menghentikan, atau memulai ulang layanan gateway dari biner OpenClaw lama ketika konfigurasi terakhir ditulis oleh versi yang lebih baru. Lihat [Pemecahan masalah Gateway](/id/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- Anda selalu dapat memaksa penulisan ulang penuh melalui `openclaw gateway install --force`.
-
- Doctor memeriksa runtime layanan (PID, status keluar terakhir) dan memperingatkan saat layanan terpasang tetapi sebenarnya tidak berjalan. Doctor juga memeriksa bentrokan port pada port gateway (default `18789`) dan melaporkan kemungkinan penyebabnya (gateway sudah berjalan, tunnel SSH).
+
+ Doctor memeriksa runtime layanan (PID, status keluar terakhir) dan memperingatkan saat layanan terpasang tetapi tidak benar-benar berjalan. Doctor juga memeriksa tabrakan port pada port gateway (default `18789`) dan melaporkan kemungkinan penyebab (gateway sudah berjalan, tunnel SSH).
- Doctor memperingatkan saat layanan gateway berjalan di Bun atau jalur Node yang dikelola versi (`nvm`, `fnm`, `volta`, `asdf`, dll.). Channel WhatsApp + Telegram memerlukan Node, dan jalur pengelola versi dapat rusak setelah peningkatan karena layanan tidak memuat init shell Anda. Doctor menawarkan migrasi ke instalasi Node sistem jika tersedia (Homebrew/apt/choco).
+ Doctor memperingatkan saat layanan gateway berjalan di Bun atau jalur Node yang dikelola versi (`nvm`, `fnm`, `volta`, `asdf`, dll.). Saluran WhatsApp + Telegram memerlukan Node, dan jalur manajer versi dapat rusak setelah upgrade karena layanan tidak memuat init shell Anda. Doctor menawarkan migrasi ke instalasi Node sistem saat tersedia (Homebrew/apt/choco).
- LaunchAgent macOS yang baru dipasang atau diperbaiki menggunakan PATH sistem kanonis (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) alih-alih menyalin PATH shell interaktif, sehingga direktori Volta, asdf, fnm, pnpm, dan pengelola versi lain tidak mengubah Node mana yang di-resolve oleh proses anak. Layanan Linux tetap mempertahankan root lingkungan eksplisit (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) dan direktori user-bin yang stabil, tetapi direktori fallback pengelola versi yang ditebak hanya ditulis ke PATH layanan saat direktori tersebut ada di disk.
+ LaunchAgent macOS yang baru dipasang atau diperbaiki menggunakan PATH sistem kanonis (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`) alih-alih menyalin PATH shell interaktif, sehingga Volta, asdf, fnm, pnpm, dan direktori manajer versi lain tidak mengubah Node mana yang diselesaikan oleh proses anak. Layanan Linux tetap mempertahankan root lingkungan eksplisit (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) dan direktori user-bin yang stabil, tetapi direktori fallback manajer versi yang ditebak hanya ditulis ke PATH layanan saat direktori tersebut ada di disk.
- Doctor menyimpan perubahan konfigurasi apa pun dan memberi cap metadata wizard untuk mencatat proses doctor.
+ Doctor mempertahankan setiap perubahan konfigurasi dan memberi cap metadata wizard untuk merekam jalannya doctor.
- Doctor menyarankan sistem memori workspace saat belum ada dan mencetak tips cadangan jika workspace belum berada di bawah git.
+ Doctor menyarankan sistem memori workspace saat hilang dan mencetak tips cadangan jika workspace belum berada di bawah git.
- Lihat [/concepts/agent-workspace](/id/concepts/agent-workspace) untuk panduan lengkap tentang struktur workspace dan cadangan git (GitHub atau GitLab privat direkomendasikan).
+ Lihat [/concepts/agent-workspace](/id/concepts/agent-workspace) untuk panduan lengkap tentang struktur workspace dan cadangan git (GitHub atau GitLab pribadi direkomendasikan).
diff --git a/docs/id/gateway/logging.md b/docs/id/gateway/logging.md
index 1eca9f011..6e5058765 100644
--- a/docs/id/gateway/logging.md
+++ b/docs/id/gateway/logging.md
@@ -1,40 +1,51 @@
---
read_when:
- - Mengubah keluaran atau format pencatatan log
+ - Mengubah keluaran atau format log
- Pemecahan masalah keluaran CLI atau Gateway
-summary: Permukaan pencatatan log, log berbasis berkas, gaya log WS, dan pemformatan konsol
+summary: Permukaan pencatatan log, log file, gaya log WS, dan pemformatan konsol
title: Pencatatan log Gateway
x-i18n:
- generated_at: "2026-05-02T09:21:11Z"
+ generated_at: "2026-05-05T01:46:26Z"
model: gpt-5.5
provider: openai
- source_hash: eb5f5ccd77909e82bd2938a33514ce8361c69910eb945c731d9b2c8266174c13
+ source_hash: d49ca112d3cc4ec76ecfc8b14d16dae64f74ca1f761fdb2b7bb470f73b66a246
source_path: gateway/logging.md
workflow: 16
---
-# Logging
+# Pencatatan Log
-Untuk ringkasan yang ditujukan bagi pengguna (CLI + Control UI + config), lihat [/logging](/id/logging).
+Untuk ikhtisar yang ditujukan bagi pengguna (CLI + Control UI + konfigurasi), lihat [/logging](/id/logging).
OpenClaw memiliki dua “permukaan” log:
- **Output konsol** (yang Anda lihat di terminal / Debug UI).
-- **Log file** (baris JSON) yang ditulis oleh logger Gateway.
+- **Log file** (baris JSON) yang ditulis oleh logger gateway.
+
+Saat startup, Gateway mencatat model agen default yang telah diselesaikan bersama dengan
+default mode yang memengaruhi sesi baru, misalnya:
+
+```text
+agent model: openai-codex/gpt-5.5 (thinking=medium, fast=on)
+```
+
+`thinking` berasal dari agen default, parameter model, atau default agen global;
+ketika tidak diatur, ringkasan startup menampilkan `medium`. `fast` berasal dari
+parameter `fastMode` agen default atau model.
## Logger berbasis file
-- File log bergulir bawaan berada di bawah `/tmp/openclaw/` (satu file per hari): `openclaw-YYYY-MM-DD.log`
- - Tanggal menggunakan zona waktu lokal host Gateway.
-- File log aktif berotasi pada `logging.maxFileBytes` (bawaan: 100 MB), menyimpan
- hingga lima arsip bernomor dan terus menulis ke file aktif baru.
+- File log bergulir default berada di bawah `/tmp/openclaw/` (satu file per hari): `openclaw-YYYY-MM-DD.log`
+ - Tanggal menggunakan zona waktu lokal host gateway.
+- File log aktif berotasi pada `logging.maxFileBytes` (default: 100 MB), mempertahankan
+ hingga lima arsip bernomor dan terus menulis file aktif baru.
- Jalur dan level file log dapat dikonfigurasi melalui `~/.openclaw/openclaw.json`:
- `logging.file`
- `logging.level`
Format file adalah satu objek JSON per baris.
-Tab Log Control UI mengikuti file ini melalui Gateway (`logs.tail`).
+Tab Log Control UI mengikuti file ini melalui gateway (`logs.tail`).
CLI dapat melakukan hal yang sama:
```bash
@@ -43,13 +54,13 @@ openclaw logs --follow
**Verbose vs. level log**
-- **Log file** dikendalikan secara eksklusif oleh `logging.level`.
-- `--verbose` hanya memengaruhi **kerincian konsol** (dan gaya log WS); ini **tidak**
+- **Log file** dikontrol secara eksklusif oleh `logging.level`.
+- `--verbose` hanya memengaruhi **verbositas konsol** (dan gaya log WS); ini **tidak**
menaikkan level log file.
-- Untuk menangkap detail khusus verbose dalam log file, atur `logging.level` ke `debug` atau
+- Untuk menangkap detail yang hanya muncul dalam mode verbose di log file, atur `logging.level` ke `debug` atau
`trace`.
-- Logging trace juga mencakup ringkasan waktu diagnostik untuk jalur panas tertentu,
- seperti persiapan factory tool Plugin. Lihat
+- Pencatatan log trace juga mencakup ringkasan waktu diagnostik untuk hot path tertentu,
+ seperti persiapan factory tool plugin. Lihat
[/tools/plugin#slow-plugin-tool-setup](/id/tools/plugin#slow-plugin-tool-setup).
## Penangkapan konsol
@@ -57,30 +68,30 @@ openclaw logs --follow
CLI menangkap `console.log/info/warn/error/debug/trace` dan menuliskannya ke log file,
sambil tetap mencetak ke stdout/stderr.
-Anda dapat menyetel kerincian konsol secara terpisah melalui:
+Anda dapat menyesuaikan verbositas konsol secara independen melalui:
-- `logging.consoleLevel` (bawaan `info`)
+- `logging.consoleLevel` (default `info`)
- `logging.consoleStyle` (`pretty` | `compact` | `json`)
## Redaksi
OpenClaw dapat menyamarkan token sensitif sebelum output log atau transkrip keluar dari
-proses. Kebijakan redaksi logging ini diterapkan pada konsol, log file, catatan log OTLP,
-dan sink teks transkrip sesi, sehingga nilai rahasia yang cocok disamarkan
+proses. Kebijakan redaksi pencatatan log ini diterapkan pada sink teks konsol, file-log, rekaman-log OTLP,
+dan transkrip sesi, sehingga nilai rahasia yang cocok disamarkan
sebelum baris JSONL atau pesan ditulis ke disk.
-- `logging.redactSensitive`: `off` | `tools` (bawaan: `tools`)
-- `logging.redactPatterns`: array string regex (menimpa bawaan)
+- `logging.redactSensitive`: `off` | `tools` (default: `tools`)
+- `logging.redactPatterns`: array string regex (menimpa default)
- Gunakan string regex mentah (otomatis `gi`), atau `/pattern/flags` jika Anda memerlukan flag khusus.
- Kecocokan disamarkan dengan mempertahankan 6 karakter pertama + 4 karakter terakhir (panjang >= 18), jika tidak `***`.
- - Bawaan mencakup assignment key umum, flag CLI, field JSON, header bearer, blok PEM, prefix token populer, dan nama field kredensial pembayaran seperti nomor kartu, CVC/CVV, token pembayaran bersama, dan kredensial pembayaran.
+ - Default mencakup penugasan kunci umum, flag CLI, field JSON, header bearer, blok PEM, prefiks token populer, dan nama field kredensial pembayaran seperti nomor kartu, CVC/CVV, token pembayaran bersama, dan kredensial pembayaran.
-Beberapa batas keamanan selalu melakukan redaksi terlepas dari `logging.redactSensitive`.
+Beberapa batas keamanan selalu meredaksi terlepas dari `logging.redactSensitive`.
Ini mencakup event tool-call Control UI, output tool `sessions_history`,
ekspor dukungan diagnostik, observasi error penyedia, tampilan perintah persetujuan exec,
dan log protokol WebSocket Gateway. Permukaan ini masih dapat menggunakan
`logging.redactPatterns` sebagai pola tambahan, tetapi `redactSensitive: "off"`
-tidak membuatnya mengeluarkan rahasia mentah.
+tidak membuatnya memancarkan rahasia mentah.
## Log WebSocket Gateway
@@ -88,17 +99,17 @@ Gateway mencetak log protokol WebSocket dalam dua mode:
- **Mode normal (tanpa `--verbose`)**: hanya hasil RPC yang “menarik” yang dicetak:
- error (`ok=false`)
- - panggilan lambat (ambang bawaan: `>= 50ms`)
- - error parse
-- **Mode verbose (`--verbose`)**: mencetak semua lalu lintas request/response WS.
+ - panggilan lambat (ambang default: `>= 50ms`)
+ - error penguraian
+- **Mode verbose (`--verbose`)**: mencetak semua traffic permintaan/respons WS.
### Gaya log WS
-`openclaw gateway` mendukung switch gaya per Gateway:
+`openclaw gateway` mendukung sakelar gaya per-gateway:
-- `--ws-log auto` (bawaan): mode normal dioptimalkan; mode verbose menggunakan output ringkas
-- `--ws-log compact`: output ringkas (request/response berpasangan) saat verbose
-- `--ws-log full`: output penuh per frame saat verbose
+- `--ws-log auto` (default): mode normal dioptimalkan; mode verbose menggunakan output ringkas
+- `--ws-log compact`: output ringkas (pasangan permintaan/respons) saat verbose
+- `--ws-log full`: output penuh per-frame saat verbose
- `--compact`: alias untuk `--ws-log compact`
Contoh:
@@ -114,27 +125,27 @@ openclaw gateway --verbose --ws-log compact
openclaw gateway --verbose --ws-log full
```
-## Pemformatan konsol (logging subsistem)
+## Pemformatan konsol (pencatatan log subsistem)
-Formatter konsol **sadar TTY** dan mencetak baris berprefiks yang konsisten.
+Pemformat konsol **TTY-aware** dan mencetak baris yang konsisten dengan prefiks.
Logger subsistem menjaga output tetap terkelompok dan mudah dipindai.
Perilaku:
- **Prefiks subsistem** pada setiap baris (mis. `[gateway]`, `[canvas]`, `[tailscale]`)
-- **Warna subsistem** (stabil per subsistem) ditambah pewarnaan level
-- **Warna saat output adalah TTY atau lingkungan terlihat seperti terminal kaya** (`TERM`/`COLORTERM`/`TERM_PROGRAM`), menghormati `NO_COLOR`
-- **Prefiks subsistem yang dipersingkat**: menghapus awalan `gateway/` + `channels/`, mempertahankan 2 segmen terakhir (mis. `whatsapp/outbound`)
+- **Warna subsistem** (stabil per subsistem) plus pewarnaan level
+- **Warna ketika output adalah TTY atau lingkungan tampak seperti terminal kaya** (`TERM`/`COLORTERM`/`TERM_PROGRAM`), menghormati `NO_COLOR`
+- **Prefiks subsistem yang dipersingkat**: menghapus `gateway/` + `channels/` di depan, mempertahankan 2 segmen terakhir (mis. `whatsapp/outbound`)
- **Sub-logger berdasarkan subsistem** (prefiks otomatis + field terstruktur `{ subsystem }`)
- **`logRaw()`** untuk output QR/UX (tanpa prefiks, tanpa pemformatan)
- **Gaya konsol** (mis. `pretty | compact | json`)
-- **Level log konsol** terpisah dari level log file (file mempertahankan detail penuh saat `logging.level` diatur ke `debug`/`trace`)
+- **Level log konsol** terpisah dari level log file (file mempertahankan detail penuh ketika `logging.level` diatur ke `debug`/`trace`)
- **Isi pesan WhatsApp** dicatat pada `debug` (gunakan `--verbose` untuk melihatnya)
Ini menjaga log file yang ada tetap stabil sekaligus membuat output interaktif mudah dipindai.
## Terkait
-- [Logging](/id/logging)
+- [Pencatatan Log](/id/logging)
- [Ekspor OpenTelemetry](/id/gateway/opentelemetry)
- [Ekspor diagnostik](/id/gateway/diagnostics)
diff --git a/docs/id/help/debugging.md b/docs/id/help/debugging.md
index 95ae8cb1b..275d961db 100644
--- a/docs/id/help/debugging.md
+++ b/docs/id/help/debugging.md
@@ -1,26 +1,26 @@
---
read_when:
- - Anda perlu memeriksa keluaran mentah model untuk kebocoran penalaran
- - Anda ingin menjalankan Gateway dalam mode watch saat melakukan iterasi
- - Anda memerlukan alur kerja penelusuran kesalahan yang dapat diulang
-summary: 'Alat pemecahan masalah: mode pantau, aliran model mentah, dan penelusuran kebocoran penalaran'
-title: Penelusuran Kesalahan
+ - Anda perlu memeriksa keluaran mentah model untuk mendeteksi kebocoran penalaran
+ - Anda ingin menjalankan Gateway dalam mode pemantauan saat melakukan iterasi
+ - Anda memerlukan alur kerja debugging yang dapat diulang
+summary: 'Alat penelusuran kesalahan: mode pemantauan, aliran model mentah, dan pelacakan kebocoran penalaran'
+title: Penelusuran Galat
x-i18n:
- generated_at: "2026-05-03T21:33:56Z"
+ generated_at: "2026-05-05T01:47:03Z"
model: gpt-5.5
provider: openai
- source_hash: 7230112013a8db8d6a3853b765f4302a61609051ac4ffaf35a6f09de328deafc
+ source_hash: 9d86bd9b5dd08615d3c283f3fcb2a885f5134fa7e1cdece86b6a796d08a659ec
source_path: help/debugging.md
workflow: 16
---
-Pembantu debugging untuk output streaming, terutama saat provider mencampurkan reasoning ke dalam teks normal.
+Pembantu debugging untuk keluaran streaming, terutama ketika provider mencampur reasoning ke dalam teks normal.
## Override debug runtime
-Gunakan `/debug` di chat untuk mengatur override konfigurasi **khusus runtime** (memori, bukan disk).
+Gunakan `/debug` di chat untuk menetapkan override konfigurasi **khusus runtime** (memori, bukan disk).
`/debug` dinonaktifkan secara default; aktifkan dengan `commands.debug: true`.
-Ini berguna saat Anda perlu mengaktifkan atau menonaktifkan pengaturan yang jarang digunakan tanpa mengedit `openclaw.json`.
+Ini berguna saat Anda perlu mengaktifkan atau menonaktifkan pengaturan yang jarang dipakai tanpa mengedit `openclaw.json`.
Contoh:
@@ -33,7 +33,7 @@ Contoh:
`/debug reset` menghapus semua override dan kembali ke konfigurasi di disk.
-## Output jejak sesi
+## Keluaran jejak sesi
Gunakan `/trace` saat Anda ingin melihat baris trace/debug milik Plugin dalam satu sesi
tanpa mengaktifkan mode verbose penuh.
@@ -47,15 +47,15 @@ Contoh:
```
Gunakan `/trace` untuk diagnostik Plugin seperti ringkasan debug Active Memory.
-Tetap gunakan `/verbose` untuk output status/tool verbose normal, dan tetap gunakan
+Tetap gunakan `/verbose` untuk keluaran status/tool verbose normal, dan tetap gunakan
`/debug` untuk override konfigurasi khusus runtime.
## Jejak siklus hidup Plugin
Gunakan `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1` saat perintah siklus hidup Plugin terasa lambat
-dan Anda memerlukan rincian fase bawaan untuk metadata Plugin, discovery, registry,
-runtime mirror, mutasi konfigurasi, dan pekerjaan refresh. Trace ini bersifat opt-in dan menulis
-ke stderr, sehingga output perintah JSON tetap dapat di-parse.
+dan Anda membutuhkan pemecahan fase bawaan untuk metadata Plugin, discovery, registry,
+runtime mirror, mutasi konfigurasi, dan pekerjaan refresh. Jejak ini bersifat opt-in dan menulis
+ke stderr, sehingga keluaran perintah JSON tetap dapat di-parse.
Contoh:
@@ -63,7 +63,7 @@ Contoh:
OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1 openclaw plugins install tokenjuice --force
```
-Contoh output:
+Contoh keluaran:
```text
[plugins:lifecycle] phase="config read" ms=6.83 status=ok command="install"
@@ -71,14 +71,14 @@ Contoh output:
[plugins:lifecycle] phase="registry refresh" ms=51.56 status=ok command="install" reason="source-changed"
```
-Gunakan ini untuk investigasi siklus hidup Plugin sebelum memakai CPU profiler.
-Jika perintah berjalan dari source checkout, sebaiknya ukur runtime hasil build
+Gunakan ini untuk investigasi siklus hidup Plugin sebelum memakai profiler CPU.
+Jika perintah dijalankan dari checkout sumber, lebih baik ukur runtime hasil build
dengan `node dist/entry.js ...` setelah `pnpm build`; `pnpm openclaw ...`
juga mengukur overhead source-runner.
## Startup CLI dan profiling perintah
-Gunakan benchmark startup yang sudah disertakan saat sebuah perintah terasa lambat:
+Gunakan benchmark startup yang sudah disertakan saat perintah terasa lambat:
```bash
pnpm test:startup:bench:smoke
@@ -86,7 +86,7 @@ pnpm tsx scripts/bench-cli-startup.ts --preset real --case status --runs 3
pnpm tsx scripts/bench-cli-startup.ts --preset real --cpu-prof-dir .artifacts/cli-cpu
```
-Untuk profiling sekali pakai melalui source runner normal, atur
+Untuk profiling sekali pakai melalui source runner normal, tetapkan
`OPENCLAW_RUN_NODE_CPU_PROF_DIR`:
```bash
@@ -96,6 +96,16 @@ OPENCLAW_RUN_NODE_CPU_PROF_DIR=.artifacts/cli-cpu pnpm openclaw status
Source runner menambahkan flag profil CPU Node dan menulis `.cpuprofile` untuk
perintah tersebut. Gunakan ini sebelum menambahkan instrumentasi sementara ke kode perintah.
+Untuk stall startup yang terlihat seperti pekerjaan filesystem sinkron atau module-loader,
+tambahkan flag trace I/O sinkron Node melalui source runner:
+
+```bash
+OPENCLAW_TRACE_SYNC_IO=1 pnpm openclaw gateway --force
+```
+
+`pnpm gateway:watch` mengaktifkan flag ini secara default untuk child Gateway yang dipantau.
+Tetapkan `OPENCLAW_TRACE_SYNC_IO=0` untuk menekan keluaran trace I/O sinkron Node dalam mode watch.
+
## Mode watch Gateway
Untuk iterasi cepat, jalankan gateway di bawah file watcher:
@@ -104,17 +114,17 @@ Untuk iterasi cepat, jalankan gateway di bawah file watcher:
pnpm gateway:watch
```
-Secara default, ini memulai atau memulai ulang sesi tmux bernama
+Secara default, ini memulai atau me-restart sesi tmux bernama
`openclaw-gateway-watch-main` (atau varian khusus profil/port seperti
-`openclaw-gateway-watch-dev-19001`) dan otomatis attach dari terminal interaktif.
-Shell noninteraktif, CI, dan panggilan exec agen tetap detached dan mencetak
-instruksi attach sebagai gantinya. Attach secara manual saat diperlukan:
+`openclaw-gateway-watch-dev-19001`) dan auto-attach dari terminal interaktif.
+Shell non-interaktif, CI, dan panggilan exec agent tetap detached dan mencetak
+instruksi attach sebagai gantinya. Attach secara manual bila perlu:
```bash
tmux attach -t openclaw-gateway-watch-main
```
-Panel tmux menjalankan watcher mentah:
+Pane tmux menjalankan watcher mentah:
```bash
node scripts/watch-node.mjs gateway --force
@@ -134,57 +144,61 @@ Nonaktifkan auto-attach sambil tetap mempertahankan manajemen tmux:
OPENCLAW_GATEWAY_WATCH_ATTACH=0 pnpm gateway:watch
```
-Profilkan waktu CPU Gateway yang diawasi saat men-debug hotspot startup/runtime:
+Profilkan waktu CPU Gateway yang dipantau saat men-debug hotspot startup/runtime:
```bash
pnpm gateway:watch --benchmark
```
-Wrapper watch mengonsumsi `--benchmark` sebelum memanggil Gateway dan menulis
-satu `.cpuprofile` V8 per exit child Gateway di bawah
-`.artifacts/gateway-watch-profiles/`. Hentikan atau mulai ulang gateway yang diawasi untuk
-flush profil saat ini, lalu buka dengan Chrome DevTools atau Speedscope:
+Wrapper watch memakai `--benchmark` sebelum memanggil Gateway dan menulis
+satu `.cpuprofile` V8 per keluarnya child Gateway di bawah
+`.artifacts/gateway-watch-profiles/`. Hentikan atau restart gateway yang dipantau untuk
+mengosongkan profil saat ini, lalu buka dengan Chrome DevTools atau Speedscope:
```bash
npx speedscope .artifacts/gateway-watch-profiles/*.cpuprofile
```
-Gunakan `--benchmark-dir ` saat Anda ingin profil berada di tempat lain.
-Gunakan `--benchmark-no-force` saat Anda ingin child yang di-benchmark melewati
-pembersihan port default `--force` dan gagal cepat jika port Gateway sudah
-digunakan.
+Gunakan `--benchmark-dir ` saat Anda ingin menyimpan profil di tempat lain.
+Gunakan `--benchmark-no-force` saat Anda ingin child yang dibenchmark melewati
+cleanup port `--force` default dan gagal cepat jika port Gateway sudah digunakan.
+Mode benchmark menekan spam trace sync-I/O secara default. Tetapkan
+`OPENCLAW_TRACE_SYNC_IO=1` dengan `--benchmark` saat Anda secara eksplisit menginginkan profil CPU
+dan stack trace sync-I/O Node sekaligus. Dalam mode benchmark, blok trace tersebut
+ditulis ke `gateway-watch-output.log` di bawah direktori benchmark dan
+difilter dari pane terminal; log Gateway normal tetap terlihat.
-Wrapper tmux membawa selector runtime nonrahasia umum seperti
+Wrapper tmux membawa selector runtime non-rahasia yang umum seperti
`OPENCLAW_PROFILE`, `OPENCLAW_CONFIG_PATH`, `OPENCLAW_STATE_DIR`,
-`OPENCLAW_GATEWAY_PORT`, dan `OPENCLAW_SKIP_CHANNELS` ke dalam panel. Letakkan
+`OPENCLAW_GATEWAY_PORT`, dan `OPENCLAW_SKIP_CHANNELS` ke dalam pane. Letakkan
kredensial provider di profil/konfigurasi normal Anda, atau gunakan mode foreground mentah
-untuk secret sementara sekali pakai.
-Jika Gateway yang diawasi keluar saat startup, watcher menjalankan
-`openclaw doctor --fix --non-interactive` sekali dan memulai ulang child Gateway.
-Gunakan `OPENCLAW_GATEWAY_WATCH_AUTO_DOCTOR=0` saat Anda menginginkan kegagalan startup
-asli tanpa pass perbaikan khusus dev.
-Panel tmux terkelola juga default-nya menggunakan log Gateway berwarna agar mudah dibaca;
-atur `FORCE_COLOR=0` saat memulai `pnpm gateway:watch` untuk menonaktifkan output ANSI.
+untuk rahasia ephemeral sekali pakai.
+Jika Gateway yang dipantau keluar saat startup, watcher menjalankan
+`openclaw doctor --fix --non-interactive` sekali dan me-restart child Gateway.
+Gunakan `OPENCLAW_GATEWAY_WATCH_AUTO_DOCTOR=0` saat Anda menginginkan kegagalan startup asli
+tanpa pass perbaikan khusus dev.
+Pane tmux terkelola juga default ke log Gateway berwarna agar mudah dibaca;
+tetapkan `FORCE_COLOR=0` saat memulai `pnpm gateway:watch` untuk menonaktifkan keluaran ANSI.
-Watcher memulai ulang saat ada file relevan-build di bawah `src/`, file sumber extension,
+Watcher me-restart pada file yang relevan dengan build di bawah `src/`, file sumber extension,
metadata `package.json` dan `openclaw.plugin.json` extension, `tsconfig.json`,
-`package.json`, dan `tsdown.config.ts`. Perubahan metadata extension memulai ulang
+`package.json`, dan `tsdown.config.ts`. Perubahan metadata extension me-restart
gateway tanpa memaksa rebuild `tsdown`; perubahan sumber dan konfigurasi tetap
membangun ulang `dist` terlebih dahulu.
Tambahkan flag CLI gateway apa pun setelah `gateway:watch` dan flag tersebut akan diteruskan pada
-setiap restart. Menjalankan ulang perintah watch yang sama akan respawn panel tmux bernama, dan
-watcher mentah tetap mempertahankan kunci single-watcher sehingga parent watcher duplikat
-diganti, bukan menumpuk.
+setiap restart. Menjalankan ulang perintah watch yang sama akan respawn pane tmux bernama tersebut, dan
+watcher mentah tetap menjaga single-watcher lock sehingga parent watcher duplikat
+diganti alih-alih menumpuk.
-## Profil dev + Gateway dev (--dev)
+## Profil dev + gateway dev (--dev)
-Gunakan profil dev untuk mengisolasi state dan menjalankan setup yang aman dan dapat dibuang untuk
+Gunakan profil dev untuk mengisolasi state dan menjalankan setup aman yang dapat dibuang untuk
debugging. Ada **dua** flag `--dev`:
-- **`--dev` global (profil):** mengisolasi state di bawah `~/.openclaw-dev` dan
- default port gateway ke `19001` (port turunan bergeser bersamanya).
-- **`gateway --dev`: memberi tahu Gateway untuk otomatis membuat konfigurasi +
+- **Global `--dev` (profil):** mengisolasi state di bawah `~/.openclaw-dev` dan
+ menetapkan port gateway default ke `19001` (port turunan ikut bergeser).
+- **`gateway --dev`: memberi tahu Gateway untuk membuat otomatis konfigurasi +
workspace default** saat belum ada (dan melewati BOOTSTRAP.md).
Alur yang direkomendasikan (profil dev + bootstrap dev):
@@ -198,29 +212,29 @@ Jika Anda belum memiliki instalasi global, jalankan CLI melalui `pnpm openclaw .
Yang dilakukan ini:
-1. **Isolasi profil** (`--dev` global)
+1. **Isolasi profil** (global `--dev`)
- `OPENCLAW_PROFILE=dev`
- `OPENCLAW_STATE_DIR=~/.openclaw-dev`
- `OPENCLAW_CONFIG_PATH=~/.openclaw-dev/openclaw.json`
- - `OPENCLAW_GATEWAY_PORT=19001` (browser/canvas bergeser sesuai itu)
+ - `OPENCLAW_GATEWAY_PORT=19001` (browser/canvas ikut bergeser)
2. **Bootstrap dev** (`gateway --dev`)
- Menulis konfigurasi minimal jika belum ada (`gateway.mode=local`, bind loopback).
- - Mengatur `agent.workspace` ke workspace dev.
- - Mengatur `agent.skipBootstrap=true` (tanpa BOOTSTRAP.md).
- - Menanam file workspace jika belum ada:
+ - Menetapkan `agent.workspace` ke workspace dev.
+ - Menetapkan `agent.skipBootstrap=true` (tanpa BOOTSTRAP.md).
+ - Menyemai file workspace jika belum ada:
`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`.
- Identitas default: **C3‑PO** (droid protokol).
- Melewati provider channel dalam mode dev (`OPENCLAW_SKIP_CHANNELS=1`).
-Alur reset (mulai baru):
+Alur reset (awal baru):
```bash
pnpm gateway:dev:reset
```
-`--dev` adalah flag profil **global** dan dimakan oleh beberapa runner. Jika Anda perlu menuliskannya secara eksplisit, gunakan bentuk env var:
+`--dev` adalah flag profil **global** dan dimakan oleh beberapa runner. Jika Anda perlu menuliskannya eksplisit, gunakan bentuk env var:
```bash
OPENCLAW_PROFILE=dev openclaw gateway --dev --reset
@@ -240,9 +254,9 @@ openclaw gateway stop
-## Pencatatan stream mentah (OpenClaw)
+## Logging stream mentah (OpenClaw)
-OpenClaw dapat mencatat **stream assistant mentah** sebelum pemfilteran/pemformatan apa pun.
+OpenClaw dapat mencatat **stream assistant mentah** sebelum filtering/formatting apa pun.
Ini adalah cara terbaik untuk melihat apakah reasoning datang sebagai delta teks biasa
(atau sebagai blok thinking terpisah).
@@ -269,7 +283,7 @@ File default:
`~/.openclaw/logs/raw-stream.jsonl`
-## Pencatatan chunk mentah (pi-mono)
+## Logging chunk mentah (pi-mono)
Untuk menangkap **chunk kompatibel OpenAI mentah** sebelum di-parse menjadi blok,
pi-mono mengekspos logger terpisah:
@@ -288,14 +302,14 @@ File default:
`~/.pi-mono/logs/raw-openai-completions.jsonl`
-> Catatan: ini hanya dipancarkan oleh proses yang menggunakan provider
+> Catatan: ini hanya dikeluarkan oleh proses yang menggunakan provider
> `openai-completions` milik pi-mono.
-## Catatan keamanan
+## Catatan keselamatan
-- Log stream mentah dapat menyertakan prompt lengkap, output tool, dan data pengguna.
+- Log stream mentah dapat mencakup prompt lengkap, keluaran tool, dan data pengguna.
- Simpan log secara lokal dan hapus setelah debugging.
-- Jika Anda membagikan log, bersihkan secret dan PII terlebih dahulu.
+- Jika Anda membagikan log, bersihkan rahasia dan PII terlebih dahulu.
## Terkait
diff --git a/docs/id/help/faq-models.md b/docs/id/help/faq-models.md
index 912536880..cd8d4cb70 100644
--- a/docs/id/help/faq-models.md
+++ b/docs/id/help/faq-models.md
@@ -1,24 +1,24 @@
---
read_when:
- Memilih atau beralih model, mengonfigurasi alias
- - Debugging failover model / "Semua model gagal"
+ - Pemecahan masalah pengalihan kegagalan model / "Semua model gagal"
- Memahami profil autentikasi dan cara mengelolanya
sidebarTitle: Models FAQ
-summary: 'FAQ: pengaturan bawaan model, pemilihan, alias, penggantian, peralihan saat gagal, dan profil autentikasi'
+summary: 'FAQ: default model, pemilihan, alias, pergantian, failover, dan profil auth'
title: 'Tanya Jawab: model dan autentikasi'
x-i18n:
- generated_at: "2026-05-02T09:23:19Z"
+ generated_at: "2026-05-05T01:47:04Z"
model: gpt-5.5
provider: openai
- source_hash: 1bf7a6bb4a0e2bf791c73dbb4005ba4628afc2c20e06417f8147f4c65583e884
+ source_hash: 1e60abcd6aa99121200de0e45cc3efa6334e668cbe6a4b590610c53d17e03a54
source_path: help/faq-models.md
workflow: 16
---
- Tanya jawab model dan profil autentikasi. Untuk penyiapan, sesi, Gateway, channel, dan
+ Tanya jawab model dan profil autentikasi. Untuk penyiapan, sesi, gateway, saluran, dan
pemecahan masalah, lihat [FAQ](/id/help/faq) utama.
- ## Model: default, pemilihan, alias, pergantian
+ ## Model: default, pemilihan, alias, peralihan
@@ -28,51 +28,51 @@ x-i18n:
agents.defaults.model.primary
```
- Model dirujuk sebagai `provider/model` (contoh: `openai/gpt-5.5` atau `openai-codex/gpt-5.5`). Jika Anda menghilangkan provider, OpenClaw pertama-tama mencoba alias, lalu kecocokan provider terkonfigurasi yang unik untuk id model persis tersebut, dan baru setelah itu kembali ke provider default terkonfigurasi sebagai jalur kompatibilitas yang sudah tidak disarankan. Jika provider tersebut tidak lagi mengekspos model default terkonfigurasi, OpenClaw kembali ke provider/model terkonfigurasi pertama alih-alih menampilkan default provider yang sudah dihapus dan usang. Anda tetap sebaiknya menetapkan `provider/model` secara **eksplisit**.
+ Model direferensikan sebagai `provider/model` (contoh: `openai/gpt-5.5` atau `openai-codex/gpt-5.5`). Jika Anda menghilangkan penyedia, OpenClaw pertama-tama mencoba alias, lalu kecocokan penyedia terkonfigurasi unik untuk id model persis tersebut, dan baru setelah itu beralih ke penyedia default terkonfigurasi sebagai jalur kompatibilitas yang tidak lagi direkomendasikan. Jika penyedia tersebut tidak lagi mengekspos model default terkonfigurasi, OpenClaw beralih ke penyedia/model terkonfigurasi pertama alih-alih menampilkan default penyedia lama yang sudah dihapus. Anda tetap sebaiknya menetapkan `provider/model` secara **eksplisit**.
- **Default yang direkomendasikan:** gunakan model generasi terbaru terkuat yang tersedia di tumpukan provider Anda.
- **Untuk agent yang mengaktifkan alat atau input yang tidak tepercaya:** prioritaskan kekuatan model di atas biaya.
- **Untuk chat rutin/berisiko rendah:** gunakan model fallback yang lebih murah dan rutekan berdasarkan peran agent.
+ **Default yang direkomendasikan:** gunakan model generasi terbaru terkuat yang tersedia di tumpukan penyedia Anda.
+ **Untuk agen dengan alat aktif atau input tidak tepercaya:** prioritaskan kekuatan model dibanding biaya.
+ **Untuk obrolan rutin/risiko rendah:** gunakan model fallback yang lebih murah dan rutekan berdasarkan peran agen.
MiniMax memiliki dokumentasinya sendiri: [MiniMax](/id/providers/minimax) dan
[Model lokal](/id/gateway/local-models).
Aturan praktis: gunakan **model terbaik yang mampu Anda biayai** untuk pekerjaan berisiko tinggi, dan model yang lebih murah
- untuk chat atau ringkasan rutin. Anda dapat merutekan model per agent dan menggunakan sub-agent untuk
- memparalelkan tugas panjang (setiap sub-agent mengonsumsi token). Lihat [Model](/id/concepts/models) dan
- [Sub-agent](/id/tools/subagents).
+ untuk obrolan rutin atau ringkasan. Anda dapat merutekan model per agen dan menggunakan sub-agen untuk
+ memparalelkan tugas panjang (setiap sub-agen menggunakan token). Lihat [Model](/id/concepts/models) dan
+ [Sub-agen](/id/tools/subagents).
- Peringatan kuat: model yang lebih lemah/terkuantisasi berlebihan lebih rentan terhadap prompt
- injection dan perilaku tidak aman. Lihat [Keamanan](/id/gateway/security).
+ Peringatan kuat: model yang lebih lemah/terlalu terkuantisasi lebih rentan terhadap injeksi prompt
+ dan perilaku tidak aman. Lihat [Keamanan](/id/gateway/security).
- Konteks lebih lanjut: [Model](/id/concepts/models).
+ Konteks tambahan: [Model](/id/concepts/models).
-
- Gunakan **perintah model** atau edit hanya bidang **model**. Hindari penggantian config penuh.
+
+ Gunakan **perintah model** atau edit hanya kolom **model**. Hindari penggantian konfigurasi penuh.
Opsi aman:
- - `/model` di chat (cepat, per sesi)
- - `openclaw models set ...` (hanya memperbarui config model)
+ - `/model` di obrolan (cepat, per sesi)
+ - `openclaw models set ...` (hanya memperbarui konfigurasi model)
- `openclaw configure --section model` (interaktif)
- edit `agents.defaults.model` di `~/.openclaw/openclaw.json`
- Hindari `config.apply` dengan objek parsial kecuali Anda memang ingin mengganti seluruh config.
- Untuk edit RPC, periksa dengan `config.schema.lookup` terlebih dahulu dan lebih pilih `config.patch`. Payload lookup memberi Anda jalur ternormalisasi, dokumen/kendala skema dangkal, dan ringkasan child langsung.
+ Hindari `config.apply` dengan objek parsial kecuali Anda memang bermaksud mengganti seluruh konfigurasi.
+ Untuk edit RPC, inspeksi terlebih dahulu dengan `config.schema.lookup` dan utamakan `config.patch`. Payload lookup memberi Anda jalur yang dinormalisasi, dokumentasi/kendala skema dangkal, dan ringkasan turunan langsung.
untuk pembaruan parsial.
- Jika Anda menimpa config, pulihkan dari cadangan atau jalankan ulang `openclaw doctor` untuk memperbaiki.
+ Jika Anda menimpa konfigurasi, pulihkan dari cadangan atau jalankan ulang `openclaw doctor` untuk memperbaikinya.
Dokumentasi: [Model](/id/concepts/models), [Configure](/id/cli/configure), [Config](/id/cli/config), [Doctor](/id/gateway/doctor).
- Ya. Ollama adalah jalur termudah untuk model lokal.
+ Bisa. Ollama adalah jalur termudah untuk model lokal.
Penyiapan tercepat:
@@ -85,23 +85,23 @@ x-i18n:
Catatan:
- `Cloud + Local` memberi Anda model cloud plus model Ollama lokal Anda
- - model cloud seperti `kimi-k2.5:cloud` tidak memerlukan pull lokal
- - untuk pergantian manual, gunakan `openclaw models list` dan `openclaw models set ollama/`
+ - model cloud seperti `kimi-k2.5:cloud` tidak memerlukan penarikan lokal
+ - untuk peralihan manual, gunakan `openclaw models list` dan `openclaw models set ollama/`
- Catatan keamanan: model yang lebih kecil atau sangat terkuantisasi lebih rentan terhadap prompt
- injection. Kami sangat merekomendasikan **model besar** untuk bot apa pun yang dapat menggunakan alat.
+ Catatan keamanan: model yang lebih kecil atau sangat terkuantisasi lebih rentan terhadap injeksi prompt.
+ Kami sangat merekomendasikan **model besar** untuk bot apa pun yang dapat menggunakan alat.
Jika Anda tetap ingin model kecil, aktifkan sandboxing dan allowlist alat yang ketat.
Dokumentasi: [Ollama](/id/providers/ollama), [Model lokal](/id/gateway/local-models),
- [Provider model](/id/concepts/model-providers), [Keamanan](/id/gateway/security),
+ [Penyedia model](/id/concepts/model-providers), [Keamanan](/id/gateway/security),
[Sandboxing](/id/gateway/sandboxing).
-
- - Deployment ini dapat berbeda dan dapat berubah seiring waktu; tidak ada rekomendasi provider tetap.
- - Periksa pengaturan runtime saat ini di setiap Gateway dengan `openclaw models status`.
- - Untuk agent yang sensitif keamanan/mengaktifkan alat, gunakan model generasi terbaru terkuat yang tersedia.
+
+ - Deployment ini dapat berbeda dan dapat berubah seiring waktu; tidak ada rekomendasi penyedia tetap.
+ - Periksa pengaturan runtime saat ini pada setiap gateway dengan `openclaw models status`.
+ - Untuk agen yang sensitif terhadap keamanan/menggunakan alat, gunakan model generasi terbaru terkuat yang tersedia.
@@ -118,29 +118,29 @@ x-i18n:
/model gemini-flash-lite
```
- Ini adalah alias bawaan. Alias kustom dapat ditambahkan melalui `agents.defaults.models`.
+ Ini adalah alias bawaan. Alias khusus dapat ditambahkan melalui `agents.defaults.models`.
Anda dapat mencantumkan model yang tersedia dengan `/model`, `/model list`, atau `/model status`.
- `/model` (dan `/model list`) menampilkan pemilih ringkas bernomor. Pilih berdasarkan nomor:
+ `/model` (dan `/model list`) menampilkan pemilih bernomor yang ringkas. Pilih berdasarkan nomor:
```
/model 3
```
- Anda juga dapat memaksa profil autentikasi tertentu untuk provider (per sesi):
+ Anda juga dapat memaksa profil autentikasi tertentu untuk penyedia (per sesi):
```
/model opus@anthropic:default
/model opus@anthropic:work
```
- Tip: `/model status` menampilkan agent mana yang aktif, file `auth-profiles.json` mana yang digunakan, dan profil autentikasi mana yang akan dicoba berikutnya.
- Ini juga menampilkan endpoint provider terkonfigurasi (`baseUrl`) dan mode API (`api`) jika tersedia.
+ Tip: `/model status` menampilkan agen mana yang aktif, file `auth-profiles.json` mana yang digunakan, dan profil autentikasi mana yang akan dicoba berikutnya.
+ Perintah ini juga menampilkan endpoint penyedia terkonfigurasi (`baseUrl`) dan mode API (`api`) jika tersedia.
- **Bagaimana cara melepas pin profil yang saya tetapkan dengan @profile?**
+ **Bagaimana cara melepas sematan profil yang saya tetapkan dengan @profile?**
- Jalankan ulang `/model` **tanpa** sufiks `@profile`:
+ Jalankan ulang `/model` **tanpa** akhiran `@profile`:
```
/model anthropic/claude-opus-4-6
@@ -152,19 +152,19 @@ x-i18n:
- Ya. Perlakukan pilihan model dan pilihan runtime secara terpisah:
+ Bisa. Perlakukan pilihan model dan pilihan runtime secara terpisah:
- - **Agent coding Codex native:** tetapkan `agents.defaults.model.primary` ke `openai/gpt-5.5` dan `agents.defaults.agentRuntime.id` ke `"codex"`. Masuk dengan `openclaw models auth login --provider openai-codex` ketika Anda ingin autentikasi langganan ChatGPT/Codex.
+ - **Agen coding Codex native:** tetapkan `agents.defaults.model.primary` ke `openai/gpt-5.5` dan `agents.defaults.agentRuntime.id` ke `"codex"`. Masuk dengan `openclaw models auth login --provider openai-codex` saat Anda ingin autentikasi langganan ChatGPT/Codex.
- **Tugas OpenAI API langsung melalui PI:** gunakan `/model openai/gpt-5.5` tanpa override runtime Codex dan konfigurasikan `OPENAI_API_KEY`.
- - **Codex OAuth melalui PI:** gunakan `/model openai-codex/gpt-5.5` hanya ketika Anda sengaja menginginkan runner PI normal dengan Codex OAuth.
- - **Sub-agent:** rutekan tugas coding ke agent khusus Codex dengan model dan default `agentRuntime` miliknya sendiri.
+ - **Codex OAuth melalui PI:** gunakan `/model openai-codex/gpt-5.5` hanya saat Anda sengaja menginginkan runner PI normal dengan Codex OAuth.
+ - **Sub-agen:** rutekan tugas coding ke agen khusus Codex dengan model dan default `agentRuntime` miliknya sendiri.
Lihat [Model](/id/concepts/models) dan [Perintah slash](/id/tools/slash-commands).
- Gunakan toggle sesi atau default config:
+ Gunakan toggle sesi atau default konfigurasi:
- **Per sesi:** kirim `/fast on` saat sesi menggunakan `openai/gpt-5.5` atau `openai-codex/gpt-5.5`.
- **Default per model:** tetapkan `agents.defaults.models["openai/gpt-5.5"].params.fastMode` atau `agents.defaults.models["openai-codex/gpt-5.5"].params.fastMode` ke `true`.
@@ -187,39 +187,42 @@ x-i18n:
}
```
- Untuk OpenAI, mode cepat dipetakan ke `service_tier = "priority"` pada permintaan Responses native yang didukung. Override sesi `/fast` mengalahkan default config.
+ Untuk OpenAI, mode cepat dipetakan ke `service_tier = "priority"` pada permintaan Responses native yang didukung. Override `/fast` sesi mengungguli default konfigurasi.
- Lihat [Thinking dan mode cepat](/id/tools/thinking) dan [mode cepat OpenAI](/id/providers/openai#fast-mode).
+ Lihat [Berpikir dan mode cepat](/id/tools/thinking) dan [Mode cepat OpenAI](/id/providers/openai#fast-mode).
Jika `agents.defaults.models` ditetapkan, itu menjadi **allowlist** untuk `/model` dan override
- sesi apa pun. Memilih model yang tidak ada dalam daftar tersebut menghasilkan:
+ sesi apa pun. Memilih model yang tidak ada dalam daftar tersebut mengembalikan:
```
- Model "provider/model" is not allowed. Use /model to list available models.
+ Model "provider/model" is not allowed. Use /models to list providers, or /models to list models.
+ Add it with: openclaw config set agents.defaults.models '{"provider/model":{}}' --strict-json --merge
```
- Error tersebut dikembalikan **alih-alih** balasan normal. Perbaikan: tambahkan model ke
+ Error tersebut dikembalikan **sebagai pengganti** balasan normal. Perbaikan: tambahkan model ke
`agents.defaults.models`, hapus allowlist, atau pilih model dari `/model list`.
+ Jika perintah juga menyertakan `--runtime codex`, tambahkan model terlebih dahulu lalu coba ulang
+ perintah `/model provider/model --runtime codex` yang sama.
- Ini berarti **provider belum dikonfigurasi** (tidak ditemukan config provider MiniMax atau profil
- autentikasi), sehingga model tidak dapat di-resolve.
+ Ini berarti **penyedia belum dikonfigurasi** (tidak ada konfigurasi penyedia MiniMax atau profil autentikasi
+ yang ditemukan), sehingga model tidak dapat di-resolve.
- Daftar periksa perbaikan:
+ Checklist perbaikan:
- 1. Tingkatkan ke rilis OpenClaw saat ini (atau jalankan dari source `main`), lalu mulai ulang Gateway.
+ 1. Tingkatkan ke rilis OpenClaw saat ini (atau jalankan dari source `main`), lalu mulai ulang gateway.
2. Pastikan MiniMax dikonfigurasi (wizard atau JSON), atau autentikasi MiniMax
- ada di env/profil autentikasi sehingga provider yang cocok dapat diinjeksi
+ ada di profil env/autentikasi sehingga penyedia yang cocok dapat diinjeksi
(`MINIMAX_API_KEY` untuk `minimax`, `MINIMAX_OAUTH_TOKEN` atau OAuth MiniMax
tersimpan untuk `minimax-portal`).
- 3. Gunakan id model persis (peka huruf besar-kecil) untuk jalur autentikasi Anda:
+ 3. Gunakan id model persis (peka huruf besar/kecil) untuk jalur autentikasi Anda:
`minimax/MiniMax-M2.7` atau `minimax/MiniMax-M2.7-highspeed` untuk penyiapan
- API key, atau `minimax-portal/MiniMax-M2.7` /
+ kunci API, atau `minimax-portal/MiniMax-M2.7` /
`minimax-portal/MiniMax-M2.7-highspeed` untuk penyiapan OAuth.
4. Jalankan:
@@ -227,15 +230,15 @@ x-i18n:
openclaw models list
```
- dan pilih dari daftar (atau `/model list` di chat).
+ dan pilih dari daftar (atau `/model list` di obrolan).
Lihat [MiniMax](/id/providers/minimax) dan [Model](/id/concepts/models).
- Ya. Gunakan **MiniMax sebagai default** dan ganti model **per sesi** saat diperlukan.
- Fallback adalah untuk **error**, bukan "tugas sulit", jadi gunakan `/model` atau agent terpisah.
+ Bisa. Gunakan **MiniMax sebagai default** dan ganti model **per sesi** saat diperlukan.
+ Fallback adalah untuk **error**, bukan "tugas sulit", jadi gunakan `/model` atau agen terpisah.
**Opsi A: ganti per sesi**
@@ -260,22 +263,22 @@ x-i18n:
/model gpt
```
- **Opsi B: agent terpisah**
+ **Opsi B: agen terpisah**
- - Default Agent A: MiniMax
- - Default Agent B: OpenAI
- - Rutekan berdasarkan agent atau gunakan `/agent` untuk beralih
+ - Default Agen A: MiniMax
+ - Default Agen B: OpenAI
+ - Rutekan berdasarkan agen atau gunakan `/agent` untuk beralih
- Dokumentasi: [Model](/id/concepts/models), [Routing Multi-Agent](/id/concepts/multi-agent), [MiniMax](/id/providers/minimax), [OpenAI](/id/providers/openai).
+ Dokumentasi: [Model](/id/concepts/models), [Perutean Multi-Agen](/id/concepts/multi-agent), [MiniMax](/id/providers/minimax), [OpenAI](/id/providers/openai).
- Ya. OpenClaw menyertakan beberapa singkatan default (hanya diterapkan ketika model ada di `agents.defaults.models`):
+ Ya. OpenClaw menyertakan beberapa singkatan default (hanya diterapkan saat model ada di `agents.defaults.models`):
- `opus` → `anthropic/claude-opus-4-6`
- `sonnet` → `anthropic/claude-sonnet-4-6`
- - `gpt` → `openai/gpt-5.5` untuk penyiapan API key, atau `openai-codex/gpt-5.5` ketika dikonfigurasi untuk Codex OAuth
+ - `gpt` → `openai/gpt-5.5` untuk penyiapan kunci API, atau `openai-codex/gpt-5.5` saat dikonfigurasi untuk Codex OAuth
- `gpt-mini` → `openai/gpt-5.4-mini`
- `gpt-nano` → `openai/gpt-5.4-nano`
- `gemini` → `google/gemini-3.1-pro-preview`
@@ -304,11 +307,11 @@ x-i18n:
}
```
- Lalu `/model sonnet` (atau `/` jika didukung) di-resolve ke ID model tersebut.
+ Lalu `/model sonnet` (atau `/` saat didukung) di-resolve ke ID model tersebut.
-
+
OpenRouter (bayar per token; banyak model):
```json5
@@ -337,11 +340,11 @@ x-i18n:
}
```
- Jika Anda merujuk penyedia/model tetapi kunci penyedia yang diperlukan tidak ada, Anda akan mendapatkan error autentikasi runtime (mis. `No API key found for provider "zai"`).
+ Jika Anda mereferensikan penyedia/model tetapi kunci penyedia yang diperlukan tidak ada, Anda akan mendapatkan kesalahan autentikasi runtime (misalnya `No API key found for provider "zai"`).
- **Tidak ada kunci API yang ditemukan untuk penyedia setelah menambahkan agen baru**
+ **Tidak ditemukan kunci API untuk penyedia setelah menambahkan agen baru**
- Ini biasanya berarti **agen baru** memiliki penyimpanan autentikasi kosong. Autentikasi bersifat per agen dan
+ Ini biasanya berarti **agen baru** memiliki penyimpanan autentikasi kosong. Autentikasi berlaku per agen dan
disimpan di:
```
@@ -351,10 +354,10 @@ x-i18n:
Opsi perbaikan:
- Jalankan `openclaw agents add ` dan konfigurasikan autentikasi selama wizard.
- - Atau salin hanya profil `api_key` / `token` statis portabel dari penyimpanan autentikasi agen utama ke penyimpanan autentikasi agen baru.
- - Untuk profil OAuth, masuk dari agen baru ketika agen tersebut memerlukan akunnya sendiri; jika tidak, OpenClaw dapat membaca melalui agen default/utama tanpa mengkloning token refresh.
+ - Atau salin hanya profil `api_key` / `token` statis yang portabel dari penyimpanan autentikasi agen utama ke penyimpanan autentikasi agen baru.
+ - Untuk profil OAuth, masuk dari agen baru ketika agen tersebut membutuhkan akunnya sendiri; jika tidak, OpenClaw dapat membaca melalui agen default/utama tanpa mengkloning token refresh.
- Jangan **gunakan ulang** `agentDir` di beberapa agen; itu menyebabkan benturan autentikasi/sesi.
+ Jangan **gunakan ulang** `agentDir` lintas agen; hal itu menyebabkan tabrakan autentikasi/sesi.
@@ -368,39 +371,39 @@ x-i18n:
1. **Rotasi profil autentikasi** dalam penyedia yang sama.
2. **Fallback model** ke model berikutnya di `agents.defaults.model.fallbacks`.
- Cooldown berlaku untuk profil yang gagal (backoff eksponensial), sehingga OpenClaw dapat tetap merespons bahkan saat penyedia terkena pembatasan laju atau gagal sementara.
+ Cooldown berlaku untuk profil yang gagal (backoff eksponensial), sehingga OpenClaw dapat tetap merespons meskipun penyedia terkena rate limit atau gagal sementara.
- Bucket pembatasan laju mencakup lebih dari respons `429` biasa. OpenClaw
+ Bucket rate-limit mencakup lebih dari sekadar respons `429`. OpenClaw
juga memperlakukan pesan seperti `Too many concurrent requests`,
`ThrottlingException`, `concurrency limit reached`,
`workers_ai ... quota limit exceeded`, `resource exhausted`, dan batas
jendela penggunaan berkala (`weekly/monthly limit reached`) sebagai
- pembatasan laju yang layak memicu failover.
+ rate limit yang layak memicu failover.
- Beberapa respons yang terlihat seperti penagihan bukan `402`, dan beberapa respons HTTP `402`
+ Sebagian respons yang tampak seperti penagihan bukan `402`, dan sebagian respons HTTP `402`
juga tetap berada dalam bucket sementara tersebut. Jika penyedia mengembalikan
- teks penagihan eksplisit pada `401` atau `403`, OpenClaw masih dapat menempatkannya
- di jalur penagihan, tetapi pencocok teks khusus penyedia tetap dibatasi pada
- penyedia pemiliknya (misalnya OpenRouter `Key limit exceeded`). Jika pesan `402`
- justru terlihat seperti jendela penggunaan yang dapat dicoba ulang atau
- batas pengeluaran organisasi/ruang kerja (`daily limit reached, resets tomorrow`,
+ teks penagihan eksplisit pada `401` atau `403`, OpenClaw masih dapat tetap menempatkannya di
+ jalur penagihan, tetapi pencocok teks khusus penyedia tetap dibatasi pada
+ penyedia yang memilikinya (misalnya OpenRouter `Key limit exceeded`). Jika pesan `402`
+ malah terlihat seperti jendela penggunaan yang dapat dicoba ulang atau
+ batas pembelanjaan organisasi/workspace (`daily limit reached, resets tomorrow`,
`organization spending limit exceeded`), OpenClaw memperlakukannya sebagai
`rate_limit`, bukan penonaktifan penagihan jangka panjang.
- Error kelebihan konteks berbeda: tanda seperti
+ Kesalahan luapan konteks berbeda: tanda seperti
`request_too_large`, `input exceeds the maximum number of tokens`,
`input token count exceeds the maximum number of input tokens`,
`input is too long for the model`, atau `ollama error: context length
- exceeded` tetap berada di jalur Compaction/coba ulang alih-alih melanjutkan ke
+ exceeded` tetap berada pada jalur Compaction/coba ulang alih-alih melanjutkan
fallback model.
- Teks error server generik sengaja dibuat lebih sempit daripada "apa pun yang
- berisi unknown/error". OpenClaw memang memperlakukan bentuk sementara yang
- dibatasi penyedia seperti Anthropic mentah `An unknown error occurred`, OpenRouter mentah
- `Provider returned error`, error alasan berhenti seperti `Unhandled stop reason:
+ Teks kesalahan server generik sengaja lebih sempit daripada "apa pun yang berisi
+ unknown/error". OpenClaw memang memperlakukan bentuk sementara yang dibatasi penyedia
+ seperti Anthropic polos `An unknown error occurred`, OpenRouter polos
+ `Provider returned error`, kesalahan alasan berhenti seperti `Unhandled stop reason:
error`, payload JSON `api_error` dengan teks server sementara
(`internal server error`, `unknown error, 520`, `upstream error`, `backend
- error`), dan error penyedia sibuk seperti `ModelNotReadyException` sebagai
+ error`), dan kesalahan penyedia sibuk seperti `ModelNotReadyException` sebagai
sinyal timeout/kelebihan beban yang layak memicu failover ketika konteks penyedia
cocok.
Teks fallback internal generik seperti `LLM request failed with an unknown
@@ -408,89 +411,91 @@ x-i18n:
-
- Ini berarti sistem mencoba menggunakan ID profil autentikasi `anthropic:default`, tetapi tidak dapat menemukan kredensial untuknya di penyimpanan autentikasi yang diharapkan.
+
+ Ini berarti sistem mencoba menggunakan ID profil autentikasi `anthropic:default`, tetapi tidak dapat menemukan kredensialnya di penyimpanan autentikasi yang diharapkan.
**Daftar periksa perbaikan:**
- - **Konfirmasi lokasi profil autentikasi berada** (jalur baru vs legacy)
+ - **Konfirmasi lokasi profil autentikasi berada** (jalur baru vs lama)
- Saat ini: `~/.openclaw/agents//agent/auth-profiles.json`
- - Legacy: `~/.openclaw/agent/*` (dimigrasikan oleh `openclaw doctor`)
+ - Lama: `~/.openclaw/agent/*` (dimigrasikan oleh `openclaw doctor`)
- **Konfirmasi env var Anda dimuat oleh Gateway**
- - Jika Anda menetapkan `ANTHROPIC_API_KEY` di shell tetapi menjalankan Gateway melalui systemd/launchd, Gateway mungkin tidak mewarisinya. Letakkan di `~/.openclaw/.env` atau aktifkan `env.shellEnv`.
+ - Jika Anda menetapkan `ANTHROPIC_API_KEY` di shell tetapi menjalankan Gateway melalui systemd/launchd, variabel itu mungkin tidak diwarisi. Letakkan di `~/.openclaw/.env` atau aktifkan `env.shellEnv`.
- **Pastikan Anda mengedit agen yang benar**
- Penyiapan multi-agen berarti bisa ada beberapa file `auth-profiles.json`.
- **Periksa kewajaran status model/autentikasi**
- Gunakan `openclaw models status` untuk melihat model yang dikonfigurasi dan apakah penyedia sudah diautentikasi.
- **Daftar periksa perbaikan untuk "No credentials found for profile anthropic"**
+ **Daftar periksa perbaikan untuk "Tidak ditemukan kredensial untuk profil anthropic"**
- Ini berarti proses run dipatok ke profil autentikasi Anthropic, tetapi Gateway
+ Ini berarti proses dijepit ke profil autentikasi Anthropic, tetapi Gateway
tidak dapat menemukannya di penyimpanan autentikasinya.
- **Gunakan Claude CLI**
- Jalankan `openclaw models auth login --provider anthropic --method cli --set-default` pada host gateway.
- **Jika Anda ingin menggunakan kunci API sebagai gantinya**
- Letakkan `ANTHROPIC_API_KEY` di `~/.openclaw/.env` pada **host gateway**.
- - Hapus urutan terpancang yang memaksa profil yang tidak ada:
+ - Bersihkan urutan terpancang yang memaksa profil yang hilang:
```bash
openclaw models auth order clear --provider anthropic
```
- - **Konfirmasi Anda menjalankan perintah pada host gateway**
+ - **Konfirmasi bahwa Anda menjalankan perintah pada host gateway**
- Dalam mode jarak jauh, profil autentikasi berada di mesin gateway, bukan laptop Anda.
-
- Jika konfigurasi model Anda menyertakan Google Gemini sebagai fallback (atau Anda beralih ke shorthand Gemini), OpenClaw akan mencobanya selama fallback model. Jika Anda belum mengonfigurasi kredensial Google, Anda akan melihat `No API key found for provider "google"`.
+
+ Jika konfigurasi model Anda mencakup Google Gemini sebagai fallback (atau Anda beralih ke singkatan Gemini), OpenClaw akan mencobanya selama fallback model. Jika Anda belum mengonfigurasi kredensial Google, Anda akan melihat `No API key found for provider "google"`.
- Perbaikan: sediakan autentikasi Google, atau hapus/hindari model Google di `agents.defaults.model.fallbacks` / alias agar fallback tidak diarahkan ke sana.
+ Perbaikan: sediakan autentikasi Google, atau hapus/hindari model Google di `agents.defaults.model.fallbacks` / alias agar fallback tidak merutekan ke sana.
**Permintaan LLM ditolak: tanda tangan thinking diperlukan (Google Antigravity)**
Penyebab: riwayat sesi berisi **blok thinking tanpa tanda tangan** (sering kali dari
stream yang dibatalkan/sebagian). Google Antigravity memerlukan tanda tangan untuk blok thinking.
- Perbaikan: OpenClaw sekarang menghapus blok thinking tanpa tanda tangan untuk Google Antigravity Claude. Jika masih muncul, mulai **sesi baru** atau atur `/thinking off` untuk agen tersebut.
+ Perbaikan: OpenClaw kini menghapus blok thinking yang tidak bertanda tangan untuk Google Antigravity Claude. Jika masih muncul, mulai **sesi baru** atau tetapkan `/thinking off` untuk agen tersebut.
## Profil autentikasi: apa itu dan cara mengelolanya
-Terkait: [/konsep/oauth](/id/concepts/oauth) (alur OAuth, penyimpanan token, pola multi-akun)
+Terkait: [/concepts/oauth](/id/concepts/oauth) (alur OAuth, penyimpanan token, pola multi-akun)
- Profil autentikasi adalah catatan kredensial bernama (OAuth atau kunci API) yang terkait dengan penyedia. Profil berada di:
+ Profil autentikasi adalah catatan kredensial bernama (OAuth atau kunci API) yang terikat ke penyedia. Profil berada di:
```
~/.openclaw/agents//agent/auth-profiles.json
```
+ Untuk memeriksa profil tersimpan tanpa menampilkan rahasia, jalankan `openclaw models auth list` (opsional `--provider ` atau `--json`). Lihat [CLI Model](/id/cli/models#openclaw-models-auth-list) untuk detail.
+
- OpenClaw menggunakan ID berawalan penyedia seperti:
+ OpenClaw menggunakan ID berprefiks penyedia seperti:
- `anthropic:default` (umum ketika tidak ada identitas email)
- `anthropic:` untuk identitas OAuth
- - ID kustom yang Anda pilih (mis. `anthropic:work`)
+ - ID khusus yang Anda pilih (misalnya `anthropic:work`)
-
+
Ya. Konfigurasi mendukung metadata opsional untuk profil dan pengurutan per penyedia (`auth.order.`). Ini **tidak** menyimpan rahasia; ini memetakan ID ke penyedia/mode dan menetapkan urutan rotasi.
- OpenClaw dapat melewati profil sementara jika profil tersebut berada dalam **cooldown** singkat (pembatasan laju/timeout/kegagalan autentikasi) atau status **dinonaktifkan** yang lebih lama (penagihan/kredit tidak mencukupi). Untuk memeriksanya, jalankan `openclaw models status --json` dan periksa `auth.unusableProfiles`. Penyetelan: `auth.cooldowns.billingBackoffHours*`.
+ OpenClaw dapat melewati profil untuk sementara jika profil berada dalam **cooldown** singkat (rate limit/timeout/kegagalan autentikasi) atau status **disabled** yang lebih lama (penagihan/kredit tidak cukup). Untuk memeriksanya, jalankan `openclaw models status --json` dan periksa `auth.unusableProfiles`. Penyetelan: `auth.cooldowns.billingBackoffHours*`.
- Cooldown pembatasan laju dapat dibatasi per model. Profil yang sedang cooling down
+ Cooldown rate-limit dapat dibatasi per model. Profil yang sedang cooldown
untuk satu model masih dapat digunakan untuk model saudara pada penyedia yang sama,
- sementara jendela penagihan/dinonaktifkan tetap memblokir seluruh profil.
+ sementara jendela penagihan/disabled tetap memblokir seluruh profil.
- Anda juga dapat menetapkan override urutan **per agen** (disimpan di `auth-state.json` milik agen tersebut) melalui CLI:
+ Anda juga dapat menetapkan override urutan **per agen** (disimpan di `auth-state.json` agen tersebut) melalui CLI:
```bash
# Defaults to the configured default agent (omit --agent)
@@ -519,7 +524,7 @@ Terkait: [/konsep/oauth](/id/concepts/oauth) (alur OAuth, penyimpanan token, pol
```
Jika profil tersimpan dihilangkan dari urutan eksplisit, probe melaporkan
- `excluded_by_auth_order` untuk profil tersebut alih-alih mencobanya secara diam-diam.
+ `excluded_by_auth_order` untuk profil tersebut alih-alih mencobanya diam-diam.
@@ -537,6 +542,6 @@ Terkait: [/konsep/oauth](/id/concepts/oauth) (alur OAuth, penyimpanan token, pol
## Terkait
- [FAQ](/id/help/faq) — FAQ utama
-- [FAQ — mulai cepat dan penyiapan run pertama](/id/help/faq-first-run)
+- [FAQ — mulai cepat dan penyiapan pertama kali](/id/help/faq-first-run)
- [Pemilihan model](/id/concepts/model-providers)
- [Failover model](/id/concepts/model-failover)
diff --git a/docs/id/help/testing-updates-plugins.md b/docs/id/help/testing-updates-plugins.md
index 9c4543da6..a8dddb4d7 100644
--- a/docs/id/help/testing-updates-plugins.md
+++ b/docs/id/help/testing-updates-plugins.md
@@ -1,52 +1,53 @@
---
read_when:
- - Mengubah perilaku pembaruan OpenClaw, doctor, penerimaan paket, atau pemasangan plugin
+ - Mengubah perilaku pembaruan, doctor, penerimaan paket, atau penginstalan Plugin OpenClaw
- Menyiapkan atau menyetujui kandidat rilis
- - Men-debug regresi pembaruan paket, pembersihan dependensi Plugin, atau instalasi Plugin
+ - Men-debug pembaruan paket, pembersihan dependensi Plugin, atau regresi instalasi Plugin
sidebarTitle: Update and plugin tests
-summary: Cara OpenClaw memvalidasi jalur pembaruan, migrasi paket, dan perilaku instalasi/pembaruan Plugin
+summary: Cara OpenClaw memvalidasi jalur pembaruan, migrasi paket, dan perilaku pemasangan/pembaruan Plugin
title: 'Pengujian: pembaruan dan Plugin'
x-i18n:
- generated_at: "2026-05-03T09:17:26Z"
+ generated_at: "2026-05-05T01:47:24Z"
model: gpt-5.5
provider: openai
- source_hash: 309ac7785a8d49db241989d28580887d3f6739982108af7148b624082c5f23dd
+ source_hash: e83a847c76f424199b5fccbd9a2b30d0bf01e4f466c4f9822bf7693d1c2ad286
source_path: help/testing-updates-plugins.md
workflow: 16
---
Ini adalah daftar periksa khusus untuk validasi pembaruan dan Plugin. Tujuannya
sederhana: membuktikan bahwa paket yang dapat diinstal dapat memperbarui status
-pengguna nyata, memperbaiki status warisan yang usang melalui `doctor`, dan tetap
-dapat menginstal, memuat, memperbarui, serta menghapus Plugin dari sumber yang
-didukung.
+pengguna nyata, memperbaiki status legacy yang basi melalui `doctor`, dan tetap
+dapat menginstal, memuat, memperbarui, serta menghapus instalasi
+Plugin dari sumber yang didukung.
-Untuk peta runner pengujian yang lebih luas, lihat [Pengujian](/id/help/testing). Untuk kunci penyedia langsung
-dan suite yang menyentuh jaringan, lihat [Pengujian langsung](/id/help/testing-live).
+Untuk peta test runner yang lebih luas, lihat [Pengujian](/id/help/testing). Untuk
+kunci penyedia live dan rangkaian yang menyentuh jaringan, lihat [Pengujian live](/id/help/testing-live).
## Yang kami lindungi
Pengujian pembaruan dan Plugin melindungi kontrak berikut:
- Tarball paket lengkap, memiliki `dist/postinstall-inventory.json` yang valid,
- dan tidak bergantung pada file repo yang belum dikemas.
+ dan tidak bergantung pada file repo yang belum dipaketkan.
- Pengguna dapat berpindah dari paket terbitan lama ke paket kandidat
- tanpa kehilangan konfigurasi, agen, sesi, workspace, daftar izin Plugin, atau
- konfigurasi channel.
-- `openclaw doctor --fix --non-interactive` memiliki jalur pembersihan dan perbaikan
- warisan. Startup tidak boleh menambahkan migrasi kompatibilitas tersembunyi untuk status
- Plugin yang usang.
-- Instalasi Plugin berfungsi dari direktori lokal, repo git, paket npm, dan jalur
- registri ClawHub.
+ tanpa kehilangan config, agent, sesi, workspace, allowlist Plugin, atau
+ config channel.
+- `openclaw doctor --fix --non-interactive` memiliki jalur pembersihan dan
+ perbaikan legacy. Startup tidak boleh menambah migrasi kompatibilitas
+ tersembunyi untuk status Plugin yang basi.
+- Instalasi Plugin berfungsi dari direktori lokal, repo git, paket npm, dan
+ jalur registri ClawHub.
- Dependensi npm Plugin diinstal di root npm terkelola, dipindai sebelum
- dipercaya, dan dihapus melalui npm saat uninstall agar dependensi hoisted tidak
- tertinggal.
-- Pembaruan Plugin stabil ketika tidak ada yang berubah: catatan instalasi, sumber
- yang di-resolve, tata letak dependensi terinstal, dan status aktif tetap utuh.
+ dipercaya, dan dihapus melalui npm saat uninstall sehingga dependensi yang
+ dihoist tidak tertinggal.
+- Pembaruan Plugin stabil ketika tidak ada yang berubah: catatan instalasi,
+ sumber yang di-resolve, tata letak dependensi terinstal, dan status aktif
+ tetap utuh.
-## Pembuktian lokal selama pengembangan
+## Bukti lokal selama pengembangan
-Mulai secara sempit:
+Mulai dari yang sempit:
```bash
pnpm changed:lanes --json
@@ -54,8 +55,8 @@ pnpm check:changed
pnpm test:changed
```
-Untuk perubahan instalasi, uninstall, dependensi, atau inventaris paket Plugin, jalankan juga
-pengujian terfokus yang mencakup seam yang diedit:
+Untuk perubahan instalasi Plugin, uninstall, dependensi, atau inventaris paket,
+jalankan juga pengujian terfokus yang mencakup seam yang diedit:
```bash
pnpm test src/plugins/uninstall.test.ts src/infra/package-dist-inventory.test.ts test/scripts/package-acceptance-workflow.test.ts
@@ -67,16 +68,16 @@ Sebelum lane Docker paket mana pun menggunakan tarball, buktikan artefak paket:
pnpm release:check
```
-`release:check` menjalankan pemeriksaan drift konfigurasi/dokumen/API, menulis inventaris dist
-paket, menjalankan `npm pack --dry-run`, menolak file terlarang yang terkema, menginstal
-tarball ke prefix sementara, menjalankan postinstall, dan melakukan smoke pada entrypoint channel
-bawaan.
+`release:check` menjalankan pemeriksaan drift config/docs/API, menulis inventaris
+dist paket, menjalankan `npm pack --dry-run`, menolak file terlarang yang ikut
+dipaketkan, menginstal tarball ke prefix sementara, menjalankan postinstall, dan
+melakukan smoke pada entrypoint channel bawaan.
## Lane Docker
-Lane Docker adalah pembuktian tingkat produk. Lane ini menginstal atau memperbarui paket nyata
-di dalam container Linux dan menegaskan perilaku melalui perintah CLI,
-startup Gateway, probe HTTP, status RPC, dan status filesystem.
+Lane Docker adalah bukti tingkat produk. Lane ini menginstal atau memperbarui
+paket nyata di dalam container Linux dan menegaskan perilaku melalui perintah
+CLI, startup Gateway, probe HTTP, status RPC, dan status filesystem.
Gunakan lane terfokus saat iterasi:
@@ -92,33 +93,36 @@ pnpm test:docker:update-migration
Lane penting:
- `test:docker:plugins` memvalidasi smoke instalasi Plugin, instalasi folder lokal,
- perilaku lewati pembaruan folder lokal, folder lokal dengan dependensi yang sudah
- terinstal, instalasi paket `file:`, instalasi git dengan eksekusi CLI, pembaruan
- moving-ref git, instalasi registri npm dengan dependensi transitif hoisted,
- no-op pembaruan npm, instalasi fixture ClawHub lokal dan no-op pembaruan,
- perilaku pembaruan marketplace, serta enable/inspect bundle Claude. Setel
- `OPENCLAW_PLUGINS_E2E_CLAWHUB=0` agar blok ClawHub tetap hermetik/offline.
+ perilaku lewati pembaruan folder lokal, folder lokal dengan dependensi yang
+ sudah terinstal, instalasi paket `file:`, instalasi git dengan eksekusi CLI,
+ pembaruan moving-ref git, instalasi registri npm dengan dependensi transitif
+ yang dihoist, no-op pembaruan npm, instalasi fixture ClawHub lokal dan no-op
+ pembaruan, perilaku pembaruan marketplace, serta enable/inspect bundle Claude. Setel
+ `OPENCLAW_PLUGINS_E2E_CLAWHUB=0` agar blok ClawHub tetap hermetic/offline.
- `test:docker:plugin-lifecycle-matrix` menginstal paket kandidat di container
- kosong, menjalankan Plugin npm melalui instalasi, inspect, disable, enable,
+ kosong, menjalankan Plugin npm melalui install, inspect, disable, enable,
upgrade eksplisit, downgrade eksplisit, dan uninstall setelah menghapus kode
Plugin. Lane ini mencatat metrik RSS dan CPU untuk setiap fase.
-- `test:docker:plugin-update` memvalidasi bahwa Plugin terinstal yang tidak berubah
- tidak diinstal ulang atau kehilangan metadata instalasi selama `openclaw plugins update`.
+- `test:docker:plugin-update` memvalidasi bahwa Plugin terinstal yang tidak
+ berubah tidak diinstal ulang atau kehilangan metadata instalasi selama
+ `openclaw plugins update`.
- `test:docker:upgrade-survivor` menginstal tarball kandidat di atas fixture
- pengguna lama yang kotor, menjalankan pembaruan paket plus doctor non-interaktif, lalu memulai
- Gateway loopback dan memeriksa pelestarian status.
-- `test:docker:published-upgrade-survivor` terlebih dahulu menginstal baseline terbitan,
- mengonfigurasinya melalui resep `openclaw config set` yang sudah dipanggang, memperbaruinya ke
- tarball kandidat, menjalankan doctor, memeriksa pembersihan warisan, memulai Gateway, dan
- melakukan probe `/healthz`, `/readyz`, serta status RPC.
-- `test:docker:update-migration` adalah lane pembaruan terbitan yang berat pembersihan. Lane ini
- dimulai dari status pengguna bergaya Discord/Telegram yang sudah dikonfigurasi, menjalankan
- doctor baseline agar dependensi Plugin terkonfigurasi punya kesempatan untuk terwujud, menanam
- sisa dependensi Plugin warisan untuk Plugin paket yang dikonfigurasi, memperbarui ke
- tarball kandidat, dan mewajibkan doctor pascapembaruan untuk menghapus root dependensi
- warisan.
+ pengguna lama yang kotor, menjalankan pembaruan paket plus doctor noninteraktif,
+ lalu memulai Gateway loopback dan memeriksa preservasi status.
+- `test:docker:published-upgrade-survivor` pertama-tama menginstal baseline yang
+ sudah diterbitkan, mengonfigurasinya melalui resep `openclaw config set`
+ bawaan, memperbaruinya ke tarball kandidat, menjalankan doctor, memeriksa
+ pembersihan legacy, memulai Gateway, dan mem-probe `/healthz`, `/readyz`, serta
+ status RPC.
+- `test:docker:update-migration` adalah lane pembaruan terbitan yang berat pada
+ pembersihan. Lane ini dimulai dari status pengguna bergaya Discord/Telegram yang
+ sudah dikonfigurasi, menjalankan doctor baseline agar dependensi Plugin yang
+ dikonfigurasi punya kesempatan untuk terwujud, menanam debris dependensi
+ Plugin legacy untuk Plugin paket yang dikonfigurasi, memperbarui ke tarball
+ kandidat, dan mewajibkan doctor pascapembaruan untuk menghapus root dependensi
+ legacy.
-Varian published-upgrade survivor yang berguna:
+Varian survivor pembaruan terbitan yang berguna:
```bash
OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC=openclaw@2026.4.23 \
@@ -131,15 +135,16 @@ pnpm test:docker:published-upgrade-survivor
```
Skenario yang tersedia adalah `base`, `feishu-channel`, `bootstrap-persona`,
-`plugin-deps-cleanup`, `configured-plugin-installs`, `tilde-log-path`, dan
-`versioned-runtime-deps`. Dalam run agregat,
-`OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues` diperluas menjadi semua skenario
-berbentuk issue yang dilaporkan, termasuk migrasi instalasi Plugin terkonfigurasi.
+`plugin-deps-cleanup`, `configured-plugin-installs`,
+`stale-source-plugin-shadow`, `tilde-log-path`, dan `versioned-runtime-deps`. Dalam run agregat,
+`OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues` diperluas menjadi semua
+skenario berbentuk isu yang dilaporkan, termasuk migrasi instalasi Plugin yang
+dikonfigurasi.
-Migrasi pembaruan penuh sengaja dipisahkan dari Full Release CI. Gunakan
-workflow manual `Update Migration` ketika pertanyaan rilisnya adalah "bisakah setiap
-rilis stabil terbitan dari 2026.4.23 dan seterusnya memperbarui ke kandidat ini dan
-membersihkan sisa dependensi Plugin?":
+Migrasi pembaruan penuh sengaja dipisahkan dari CI Full Release. Gunakan workflow
+manual `Update Migration` ketika pertanyaan rilisnya adalah "apakah setiap rilis
+stabil terbitan dari 2026.4.23 dan seterusnya dapat diperbarui ke kandidat ini dan
+membersihkan debris dependensi Plugin?":
```bash
gh workflow run update-migration.yml \
@@ -152,23 +157,23 @@ gh workflow run update-migration.yml \
## Package Acceptance
-Package Acceptance adalah gate paket native GitHub. Gate ini me-resolve satu paket kandidat
-menjadi tarball `package-under-test`, mencatat versi dan SHA-256, lalu
-menjalankan lane Docker E2E reusable terhadap tarball persis tersebut. Ref harness workflow
-terpisah dari ref sumber paket, sehingga logika pengujian saat ini dapat memvalidasi
-rilis tepercaya yang lebih lama.
+Package Acceptance adalah gate paket native GitHub. Ia me-resolve satu paket
+kandidat menjadi tarball `package-under-test`, mencatat versi dan SHA-256, lalu
+menjalankan lane Docker E2E yang dapat digunakan ulang terhadap tarball persis
+itu. Ref harness workflow terpisah dari ref sumber paket, sehingga logika
+pengujian saat ini dapat memvalidasi rilis tepercaya yang lebih lama.
Sumber kandidat:
- `source=npm`: validasi `openclaw@beta`, `openclaw@latest`, atau versi
- terbitan persis.
-- `source=ref`: kemas branch, tag, atau commit tepercaya dengan harness saat ini
+ terbitan yang persis.
+- `source=ref`: pack branch, tag, atau commit tepercaya dengan harness saat ini
yang dipilih.
- `source=url`: validasi tarball HTTPS dengan `package_sha256` wajib.
-- `source=artifact`: gunakan kembali tarball yang diunggah oleh run Actions lain.
+- `source=artifact`: gunakan ulang tarball yang diunggah oleh run Actions lain.
-Full Release Validation menggunakan `source=artifact` secara default, dibuat dari
-SHA rilis yang di-resolve. Untuk pembuktian pascapublikasi, teruskan
+Full Release Validation menggunakan `source=artifact` secara default, dibangun
+dari SHA rilis yang di-resolve. Untuk bukti pascapublikasi, teruskan
`package_acceptance_package_spec=openclaw@YYYY.M.D` agar matriks upgrade yang sama
menargetkan paket npm yang sudah dikirim.
@@ -186,15 +191,16 @@ published_upgrade_survivor_scenarios=reported-issues
telegram_mode=mock-openai
```
-Ini menjaga migrasi paket, perpindahan channel pembaruan, pembersihan dependensi
-Plugin usang, cakupan Plugin offline, perilaku pembaruan Plugin, dan QA paket Telegram
-pada artefak yang sama yang sudah di-resolve.
+Ini menjaga migrasi paket, pengalihan channel pembaruan, pembersihan dependensi
+Plugin basi, cakupan Plugin offline, perilaku pembaruan Plugin, dan QA paket
+Telegram pada artefak yang di-resolve sama.
-`all-since-2026.4.23` adalah sampel upgrade Full Release CI: setiap rilis stabil yang dipublikasikan ke npm dari `2026.4.23` hingga `latest`. Untuk cakupan migrasi pembaruan terbitan
-yang menyeluruh, gunakan `all-since-2026.4.23` di workflow Update
-Migration terpisah, bukan Full Release CI. `release-history` tetap
-tersedia untuk sampling manual yang lebih luas ketika Anda juga menginginkan anchor warisan
-pra-tanggal.
+`all-since-2026.4.23` adalah sampel upgrade CI Full Release: setiap rilis stabil
+yang diterbitkan di npm dari `2026.4.23` hingga `latest`. Untuk cakupan migrasi
+pembaruan terbitan yang menyeluruh, gunakan `all-since-2026.4.23` dalam workflow
+Update Migration terpisah, bukan CI Full Release. `release-history` tetap
+tersedia untuk sampling manual yang lebih luas ketika Anda juga menginginkan
+anchor legacy sebelum tanggal tersebut.
Jalankan profil paket secara manual saat memvalidasi kandidat sebelum rilis:
@@ -211,70 +217,72 @@ gh workflow run package-acceptance.yml \
```
Gunakan `suite_profile=product` ketika pertanyaan rilis mencakup channel MCP,
-pembersihan cron/subagent, pencarian web OpenAI, atau OpenWebUI. Gunakan `suite_profile=full`
-hanya ketika Anda memerlukan cakupan jalur rilis Docker penuh.
+pembersihan cron/subagent, pencarian web OpenAI, atau OpenWebUI. Gunakan
+`suite_profile=full` hanya ketika Anda memerlukan cakupan penuh jalur rilis
+Docker.
## Default rilis
-Untuk kandidat rilis, stack pembuktian default adalah:
+Untuk kandidat rilis, stack bukti default adalah:
1. `pnpm check:changed` dan `pnpm test:changed` untuk regresi tingkat sumber.
2. `pnpm release:check` untuk integritas artefak paket.
-3. Profil Package Acceptance `package` atau lane paket kustom release-check
- untuk kontrak instalasi/pembaruan/Plugin.
-4. Pemeriksaan rilis lintas-OS untuk installer, onboarding, dan perilaku platform
+3. Profil `package` Package Acceptance atau lane paket kustom release-check
+ untuk kontrak install/update/Plugin.
+4. Pemeriksaan rilis lintas OS untuk perilaku installer, onboarding, dan platform
yang spesifik OS.
-5. Suite langsung hanya ketika permukaan yang berubah menyentuh perilaku penyedia atau layanan
- terhosting.
+5. Rangkaian live hanya ketika permukaan yang berubah menyentuh perilaku
+ penyedia atau hosted-service.
-Pada mesin maintainer, gate luas dan pembuktian produk Docker/paket harus berjalan
-di Testbox kecuali secara eksplisit melakukan pembuktian lokal.
+Pada mesin maintainer, gate luas dan bukti produk Docker/paket harus berjalan di
+Testbox kecuali secara eksplisit melakukan bukti lokal.
-## Kompatibilitas warisan
+## Kompatibilitas legacy
-Kelonggaran kompatibilitas bersifat sempit dan dibatasi waktu:
+Kelonggaran kompatibilitas sempit dan dibatasi waktu:
-- Paket hingga `2026.4.25`, termasuk `2026.4.25-beta.*`, dapat menoleransi
- celah metadata paket yang sudah dikirim dalam Package Acceptance.
-- Paket `2026.4.26` yang diterbitkan dapat memperingatkan untuk file stempel metadata build lokal
- yang sudah dikirim.
-- Paket berikutnya harus memenuhi kontrak modern. Celah yang sama akan gagal, bukan
+- Paket hingga `2026.4.25`, termasuk `2026.4.25-beta.*`, boleh menoleransi
+ celah metadata paket yang sudah dikirim di Package Acceptance.
+- Paket `2026.4.26` yang diterbitkan boleh memperingatkan untuk file stamp
+ metadata build lokal yang sudah dikirim.
+- Paket berikutnya harus memenuhi kontrak modern. Celah yang sama gagal, bukan
memperingatkan atau dilewati.
-Jangan menambahkan migrasi startup baru untuk bentuk lama ini. Tambahkan atau perluas perbaikan
-doctor, lalu buktikan dengan `upgrade-survivor` atau `published-upgrade-survivor`.
+Jangan tambahkan migrasi startup baru untuk bentuk lama ini. Tambahkan atau
+perluas perbaikan doctor, lalu buktikan dengan `upgrade-survivor` atau
+`published-upgrade-survivor`.
## Menambahkan cakupan
-Saat mengubah perilaku pembaruan atau Plugin, tambahkan cakupan pada lapisan terendah yang
-dapat gagal karena alasan yang tepat:
+Saat mengubah perilaku pembaruan atau Plugin, tambahkan cakupan pada lapisan
+terendah yang dapat gagal karena alasan yang tepat:
-- Logika path atau metadata murni: pengujian unit di samping sumber.
-- Perilaku inventaris paket atau file yang dikemas: pengujian `package-dist-inventory` atau pemeriksa
- tarball.
-- Perilaku instalasi/pembaruan CLI: assertion atau fixture lane Docker.
+- Logika path atau metadata murni: unit test di samping sumber.
+- Perilaku inventaris paket atau file yang dipaketkan: `package-dist-inventory` atau pengujian
+ checker tarball.
+- Perilaku install/update CLI: assertion atau fixture lane Docker.
- Perilaku migrasi rilis terbitan: skenario `published-upgrade-survivor`.
-- Perilaku sumber registri/paket: fixture `test:docker:plugins` atau server fixture
- ClawHub.
-- Perilaku tata letak atau pembersihan dependensi: tegaskan eksekusi runtime dan batas
- filesystem. Dependensi npm dapat di-hoist di bawah root npm terkelola, jadi pengujian
- harus membuktikan bahwa root dipindai/dibersihkan, bukan mengasumsikan pohon `node_modules`
- lokal paket.
+- Perilaku sumber registri/paket: fixture `test:docker:plugins` atau server
+ fixture ClawHub.
+- Perilaku tata letak atau pembersihan dependensi: assert eksekusi runtime dan
+ batas filesystem. Dependensi npm dapat dihoist di bawah root npm terkelola,
+ sehingga pengujian harus membuktikan root dipindai/dibersihkan alih-alih
+ mengasumsikan pohon `node_modules` lokal paket.
-Jaga fixture Docker baru tetap hermetik secara default. Gunakan registri fixture lokal dan
-paket palsu kecuali tujuan pengujian adalah perilaku registri langsung.
+Jaga fixture Docker baru tetap hermetic secara default. Gunakan registri fixture
+lokal dan paket palsu kecuali tujuan pengujian adalah perilaku registri live.
## Triage kegagalan
Mulai dengan identitas artefak:
-- Ringkasan Package Acceptance `resolve_package`: sumber, versi, SHA-256, dan
+- Ringkasan `resolve_package` Package Acceptance: sumber, versi, SHA-256, dan
nama artefak.
- Artefak Docker: `.artifacts/docker-tests/**/summary.json`,
`failures.json`, log lane, dan perintah rerun.
- Ringkasan upgrade survivor: `.artifacts/upgrade-survivor/summary.json`,
- termasuk versi baseline, versi kandidat, skenario, timing fase, dan
- langkah resep.
+ termasuk versi baseline, versi kandidat, skenario, timing fase, dan langkah
+ resep.
-Lebih baik menjalankan ulang lane persis yang gagal dengan artefak paket yang sama daripada
-menjalankan ulang seluruh payung rilis.
+Utamakan menjalankan ulang lane persis yang gagal dengan artefak paket yang sama
+daripada menjalankan ulang seluruh umbrella rilis.
diff --git a/docs/id/help/testing.md b/docs/id/help/testing.md
index 1ab7751e5..7f78e04e7 100644
--- a/docs/id/help/testing.md
+++ b/docs/id/help/testing.md
@@ -1,78 +1,78 @@
---
read_when:
- Menjalankan pengujian secara lokal atau di CI
- - Menambahkan uji regresi untuk bug model/penyedia
+ - Menambahkan pengujian regresi untuk bug model/penyedia
- Men-debug perilaku Gateway + agen
-summary: 'Kit pengujian: rangkaian unit/e2e/live, runner Docker, dan apa yang dicakup setiap pengujian'
+summary: 'Perangkat pengujian: rangkaian pengujian unit/e2e/live, pelaksana Docker, dan cakupan setiap pengujian'
title: Pengujian
x-i18n:
- generated_at: "2026-05-04T07:06:13Z"
+ generated_at: "2026-05-05T01:47:24Z"
model: gpt-5.5
provider: openai
- source_hash: ad724e3879d1d4dec21c4ea97e2fd5724c47269c1084c558a09f51bd72afc6a4
+ source_hash: 8d051bf6a01f6caf7755ad1d7107f21ae2d440b55a65bb7f18ee4a81f5f0e3b2
source_path: help/testing.md
workflow: 16
---
-OpenClaw memiliki tiga suite Vitest (unit/integrasi, e2e, live) dan sekumpulan kecil
+OpenClaw memiliki tiga rangkaian Vitest (unit/integrasi, e2e, live) dan sekumpulan kecil
runner Docker. Dokumen ini adalah panduan "cara kami menguji":
-- Apa yang dicakup setiap suite (dan apa yang sengaja _tidak_ dicakup).
-- Perintah mana yang dijalankan untuk alur kerja umum (lokal, pra-push, debugging).
-- Cara pengujian live menemukan kredensial dan memilih model/penyedia.
-- Cara menambahkan regresi untuk masalah model/penyedia dunia nyata.
+- Apa yang dicakup setiap rangkaian (dan apa yang sengaja _tidak_ dicakup).
+- Perintah mana yang dijalankan untuk alur kerja umum (lokal, sebelum push, debugging).
+- Bagaimana pengujian live menemukan kredensial dan memilih model/provider.
+- Bagaimana menambahkan regresi untuk masalah model/provider dunia nyata.
-**Tumpukan QA (qa-lab, qa-channel, lane transport live)** didokumentasikan secara terpisah:
+**Stack QA (qa-lab, qa-channel, lane transport live)** didokumentasikan secara terpisah:
-- [Ikhtisar QA](/id/concepts/qa-e2e-automation) — arsitektur, permukaan perintah, penulisan skenario.
-- [QA matriks](/id/concepts/qa-matrix) — referensi untuk `pnpm openclaw qa matrix`.
-- [Channel QA](/id/channels/qa-channel) — Plugin transport sintetis yang digunakan oleh skenario berbasis repo.
+- [Ringkasan QA](/id/concepts/qa-e2e-automation) — arsitektur, permukaan perintah, penulisan skenario.
+- [QA Matriks](/id/concepts/qa-matrix) — referensi untuk `pnpm openclaw qa matrix`.
+- [QA channel](/id/channels/qa-channel) — Plugin transport sintetis yang digunakan oleh skenario berbasis repo.
-Halaman ini mencakup menjalankan suite pengujian reguler dan runner Docker/Parallels. Bagian runner khusus QA di bawah ([runner khusus QA](#qa-specific-runners)) mencantumkan pemanggilan `qa` konkret dan mengarahkan kembali ke referensi di atas.
+Halaman ini membahas menjalankan rangkaian pengujian reguler dan runner Docker/Parallels. Bagian runner khusus QA di bawah ([runner khusus QA](#qa-specific-runners)) mencantumkan invocation `qa` konkret dan mengarahkan kembali ke referensi di atas.
## Mulai cepat
-Pada sebagian besar hari:
+Pada kebanyakan hari:
- Gate penuh (diharapkan sebelum push): `pnpm build && pnpm check && pnpm check:test-types && pnpm test`
-- Jalankan suite penuh lokal yang lebih cepat pada mesin yang lapang: `pnpm test:max`
+- Menjalankan rangkaian penuh lokal lebih cepat di mesin yang lapang: `pnpm test:max`
- Loop watch Vitest langsung: `pnpm test:watch`
-- Penargetan file langsung sekarang juga merutekan path extension/channel: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts`
-- Utamakan run tertarget lebih dulu saat Anda sedang mengiterasi satu kegagalan.
+- Penargetan file langsung sekarang juga merutekan path ekstensi/channel: `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts`
+- Utamakan menjalankan target tertentu terlebih dahulu saat Anda melakukan iterasi pada satu kegagalan.
- Situs QA berbasis Docker: `pnpm qa:lab:up`
- Lane QA berbasis VM Linux: `pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline`
Saat Anda menyentuh pengujian atau menginginkan keyakinan tambahan:
- Gate cakupan: `pnpm test:coverage`
-- Suite E2E: `pnpm test:e2e`
+- Rangkaian E2E: `pnpm test:e2e`
-Saat men-debug penyedia/model nyata (memerlukan kredensial nyata):
+Saat men-debug provider/model nyata (memerlukan kredensial nyata):
-- Suite live (model + probe tool/gambar Gateway): `pnpm test:live`
+- Rangkaian live (model + probe alat/gambar Gateway): `pnpm test:live`
- Targetkan satu file live secara senyap: `pnpm test:live -- src/agents/models.profiles.live.test.ts`
- Laporan performa runtime: dispatch `OpenClaw Performance` dengan
- `live_gpt54=true` untuk giliran agen `openai/gpt-5.4` nyata atau
- `deep_profile=true` untuk artefak CPU/heap/trace Kova. Run terjadwal harian
+ `live_gpt54=true` untuk satu giliran agen `openai/gpt-5.4` nyata atau
+ `deep_profile=true` untuk artefak CPU/heap/trace Kova. Jalankan terjadwal harian
menerbitkan artefak lane mock-provider, deep-profile, dan GPT 5.4 ke
`openclaw/clawgrit-reports` saat `CLAWGRIT_REPORTS_TOKEN` dikonfigurasi. Laporan
- mock-provider juga menyertakan angka boot Gateway tingkat sumber, memori,
+ mock-provider juga mencakup angka boot Gateway tingkat sumber, memori,
tekanan Plugin, hello-loop fake-model berulang, dan startup CLI.
- Sweep model live Docker: `pnpm test:docker:live-models`
- - Setiap model terpilih sekarang menjalankan giliran teks plus probe kecil bergaya baca-file.
- Model yang metadatanya mengiklankan input `image` juga menjalankan giliran gambar kecil.
+ - Setiap model yang dipilih sekarang menjalankan satu giliran teks ditambah probe kecil bergaya pembacaan file.
+ Model yang metadatanya mengiklankan input `image` juga menjalankan satu giliran gambar kecil.
Nonaktifkan probe tambahan dengan `OPENCLAW_LIVE_MODEL_FILE_PROBE=0` atau
- `OPENCLAW_LIVE_MODEL_IMAGE_PROBE=0` saat mengisolasi kegagalan penyedia.
- - Cakupan CI: `OpenClaw Scheduled Live And E2E Checks` harian dan
- `OpenClaw Release Checks` manual sama-sama memanggil workflow live/E2E yang dapat digunakan ulang dengan
- `include_live_suites: true`, yang menyertakan job matriks model live Docker terpisah
- yang di-shard berdasarkan penyedia.
- - Untuk rerun CI yang terfokus, dispatch `OpenClaw Live And E2E Checks (Reusable)`
+ `OPENCLAW_LIVE_MODEL_IMAGE_PROBE=0` saat mengisolasi kegagalan provider.
+ - Cakupan CI: `OpenClaw Scheduled Live And E2E Checks` harian dan manual
+ `OpenClaw Release Checks` sama-sama memanggil workflow live/E2E pakai ulang dengan
+ `include_live_suites: true`, yang mencakup job matriks model live Docker terpisah
+ yang di-shard berdasarkan provider.
+ - Untuk rerun CI terfokus, dispatch `OpenClaw Live And E2E Checks (Reusable)`
dengan `include_live_suites: true` dan `live_models_only: true`.
- - Tambahkan secret penyedia baru bernilai sinyal tinggi ke `scripts/ci-hydrate-live-auth.sh`
- plus `.github/workflows/openclaw-live-and-e2e-checks-reusable.yml` dan pemanggil
+ - Tambahkan secret provider bersinyal tinggi baru ke `scripts/ci-hydrate-live-auth.sh`
+ plus `.github/workflows/openclaw-live-and-e2e-checks-reusable.yml` dan caller
terjadwal/rilisnya.
- Smoke chat terikat Codex native: `pnpm test:docker:live-codex-bind`
- Menjalankan lane live Docker terhadap path app-server Codex, mengikat DM Slack sintetis
@@ -82,138 +82,150 @@ Saat men-debug penyedia/model nyata (memerlukan kredensial nyata):
- Smoke harness app-server Codex: `pnpm test:docker:live-codex-harness`
- Menjalankan giliran agen Gateway melalui harness app-server Codex milik Plugin,
memverifikasi `/codex status` dan `/codex models`, dan secara default menjalankan probe gambar,
- MCP Cron, sub-agen, dan Guardian. Nonaktifkan probe sub-agen dengan
+ MCP cron, sub-agent, dan Guardian. Nonaktifkan probe sub-agent dengan
`OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=0` saat mengisolasi kegagalan app-server Codex
- lainnya. Untuk pemeriksaan sub-agen yang terfokus, nonaktifkan probe lain:
+ lainnya. Untuk pemeriksaan sub-agent terfokus, nonaktifkan probe lain:
`OPENCLAW_LIVE_CODEX_HARNESS_IMAGE_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_MCP_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_GUARDIAN_PROBE=0 OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_PROBE=1 pnpm test:docker:live-codex-harness`.
- Ini keluar setelah probe sub-agen kecuali
+ Ini keluar setelah probe sub-agent kecuali
`OPENCLAW_LIVE_CODEX_HARNESS_SUBAGENT_ONLY=0` disetel.
- Smoke perintah penyelamatan Crestodian: `pnpm test:live:crestodian-rescue-channel`
- - Pemeriksaan opt-in berlapis untuk permukaan perintah penyelamatan channel pesan.
+ - Pemeriksaan opt-in berlapis untuk permukaan perintah penyelamatan message-channel.
Ini menjalankan `/crestodian status`, mengantrekan perubahan model persisten,
membalas `/crestodian yes`, dan memverifikasi path tulis audit/config.
-- Smoke Docker planner Crestodian: `pnpm test:docker:crestodian-planner`
+- Smoke Docker perencana Crestodian: `pnpm test:docker:crestodian-planner`
- Menjalankan Crestodian dalam container tanpa config dengan CLI Claude palsu di `PATH`
- dan memverifikasi fallback planner fuzzy diterjemahkan menjadi tulis config bertipe yang diaudit.
+ dan memverifikasi fallback perencana fuzzy diterjemahkan menjadi penulisan config bertipe yang diaudit.
- Smoke Docker first-run Crestodian: `pnpm test:docker:crestodian-first-run`
- - Dimulai dari dir status OpenClaw kosong, merutekan `openclaw` polos ke
- Crestodian, menerapkan penulisan setup/model/agen/Plugin Discord + SecretRef,
+ - Memulai dari direktori status OpenClaw kosong, merutekan `openclaw` polos ke
+ Crestodian, menerapkan penulisan setup/model/agent/Plugin Discord + SecretRef,
memvalidasi config, dan memverifikasi entri audit. Path setup Ring 0 yang sama
juga dicakup di QA Lab oleh
`pnpm openclaw qa suite --scenario crestodian-ring-zero-setup`.
- Smoke biaya Moonshot/Kimi: dengan `MOONSHOT_API_KEY` disetel, jalankan
`openclaw models list --provider moonshot --json`, lalu jalankan
`openclaw agent --local --session-id live-kimi-cost --message 'Reply exactly: KIMI_LIVE_OK' --thinking off --json`
- terisolasi terhadap `moonshot/kimi-k2.6`. Verifikasi JSON melaporkan Moonshot/K2.6 dan
+ yang terisolasi terhadap `moonshot/kimi-k2.6`. Verifikasi JSON melaporkan Moonshot/K2.6 dan
transkrip asisten menyimpan `usage.cost` yang dinormalisasi.
-Saat Anda hanya membutuhkan satu kasus gagal, utamakan mempersempit pengujian live melalui env var allowlist yang dijelaskan di bawah.
+Saat Anda hanya memerlukan satu kasus gagal, utamakan mempersempit pengujian live melalui variabel env allowlist yang dijelaskan di bawah.
## Runner khusus QA
-Perintah ini berada di samping suite pengujian utama saat Anda membutuhkan realisme QA-lab:
+Perintah-perintah ini berada di samping rangkaian pengujian utama saat Anda memerlukan realisme QA-lab:
-CI menjalankan QA Lab dalam workflow khusus. Paritas agen bersarang di bawah
+CI menjalankan QA Lab dalam workflow khusus. Paritas agentic berada di dalam
`QA-Lab - All Lanes` dan validasi rilis, bukan workflow PR mandiri.
Validasi luas sebaiknya menggunakan `Full Release Validation` dengan
-`rerun_group=qa-parity` atau grup QA release-checks. `QA-Lab - All Lanes`
-berjalan setiap malam di `main` dan dari dispatch manual dengan lane paritas mock, lane
-Matrix live, lane Telegram live yang dikelola Convex, dan lane Discord live
-yang dikelola Convex sebagai job paralel. QA terjadwal dan pemeriksaan rilis meneruskan
-Matrix `--profile fast` secara eksplisit, sementara default input CLI Matrix dan workflow manual
-tetap `all`; dispatch manual dapat melakukan shard `all` menjadi job `transport`,
-`media`, `e2ee-smoke`, `e2ee-deep`, dan `e2ee-cli`. `OpenClaw Release
+`rerun_group=qa-parity` atau grup QA release-checks. Pemeriksaan rilis stable/default
+menyimpan soak live/Docker menyeluruh di balik `run_release_soak=true`; profil
+`full` memaksa soak aktif. `QA-Lab - All Lanes`
+berjalan tiap malam di `main` dan dari dispatch manual dengan lane paritas mock, lane
+Matrix live, lane Telegram live yang dikelola Convex, dan lane Discord live yang dikelola Convex
+sebagai job paralel. QA terjadwal dan pemeriksaan rilis meneruskan Matrix
+`--profile fast` secara eksplisit, sedangkan input workflow manual dan CLI Matrix
+tetap default ke `all`; dispatch manual dapat melakukan shard `all` menjadi job
+`transport`, `media`, `e2ee-smoke`, `e2ee-deep`, dan `e2ee-cli`. `OpenClaw Release
Checks` menjalankan paritas plus lane Matrix cepat dan Telegram sebelum persetujuan rilis,
-menggunakan `mock-openai/gpt-5.5` untuk pemeriksaan transport rilis agar tetap deterministik
-dan menghindari startup Plugin penyedia normal. Gateway transport live ini
-menonaktifkan pencarian memori; perilaku memori tetap dicakup oleh suite paritas QA.
+menggunakan `mock-openai/gpt-5.5` untuk pemeriksaan transport rilis agar tetap
+deterministik dan menghindari startup provider-plugin normal. Gateway transport live ini
+menonaktifkan pencarian memori; perilaku memori tetap dicakup oleh rangkaian paritas
+QA.
Shard media live rilis penuh menggunakan
`ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04`, yang sudah memiliki
`ffmpeg` dan `ffprobe`. Shard model/backend live Docker menggunakan image bersama
-`ghcr.io/openclaw/openclaw-live-test:` yang dibangun sekali per commit terpilih,
-lalu menariknya dengan `OPENCLAW_SKIP_DOCKER_BUILD=1`, alih-alih membangun ulang
+`ghcr.io/openclaw/openclaw-live-test:` yang dibangun sekali per commit yang dipilih,
+lalu menariknya dengan `OPENCLAW_SKIP_DOCKER_BUILD=1` alih-alih membangun ulang
di dalam setiap shard.
- `pnpm openclaw qa suite`
- - Menjalankan skenario QA berbasis repo langsung di host.
- - Menjalankan beberapa skenario terpilih secara paralel secara default dengan worker
- Gateway yang terisolasi. `qa-channel` default ke konkurensi 4 (dibatasi oleh
+ - Menjalankan skenario QA berbasis repo langsung di mesin host.
+ - Secara default menjalankan beberapa skenario terpilih secara paralel dengan
+ pekerja Gateway terisolasi. `qa-channel` default ke konkurensi 4 (dibatasi oleh
jumlah skenario yang dipilih). Gunakan `--concurrency ` untuk menyesuaikan jumlah
- worker, atau `--concurrency 1` untuk lane serial lama.
- - Keluar dengan non-zero ketika ada skenario yang gagal. Gunakan `--allow-failures` ketika Anda
+ pekerja, atau `--concurrency 1` untuk jalur serial lama.
+ - Menghasilkan kode keluar bukan nol saat skenario apa pun gagal. Gunakan `--allow-failures` saat Anda
menginginkan artefak tanpa kode keluar gagal.
- - Mendukung mode provider `live-frontier`, `mock-openai`, dan `aimock`.
- `aimock` memulai server provider lokal berbasis AIMock untuk cakupan fixture
- eksperimental dan protocol-mock tanpa mengganti lane `mock-openai` yang sadar skenario.
+ - Mendukung mode penyedia `live-frontier`, `mock-openai`, dan `aimock`.
+ `aimock` memulai server penyedia lokal berbasis AIMock untuk cakupan
+ fixture dan mock protokol eksperimental tanpa menggantikan jalur
+ `mock-openai` yang sadar skenario.
+- `pnpm test:plugins:kitchen-sink-live`
+ - Menjalankan rangkaian uji Plugin OpenAI Kitchen Sink langsung melalui QA Lab. Ini
+ menginstal paket Kitchen Sink eksternal, memverifikasi inventaris permukaan SDK Plugin,
+ memeriksa `/healthz` dan `/readyz`, merekam bukti CPU/RSS
+ Gateway, menjalankan satu giliran OpenAI langsung, dan memeriksa diagnostik adversarial.
+ Memerlukan autentikasi OpenAI langsung seperti `OPENAI_API_KEY`. Dalam sesi Testbox
+ terhidrasi, ini otomatis memuat profil autentikasi langsung Testbox saat
+ utilitas `openclaw-testbox-env` tersedia.
- `pnpm test:gateway:cpu-scenarios`
- - Menjalankan bench startup Gateway plus paket skenario QA Lab mock kecil
+ - Menjalankan benchmark startup Gateway plus paket skenario QA Lab tiruan kecil
(`channel-chat-baseline`, `memory-failure-fallback`,
`gateway-restart-inflight-run`) dan menulis ringkasan observasi CPU gabungan
di bawah `.artifacts/gateway-cpu-scenarios/`.
- Secara default hanya menandai observasi CPU panas yang berkelanjutan (`--cpu-core-warn`
- plus `--hot-wall-warn-ms`), sehingga lonjakan startup singkat dicatat sebagai metrik
- tanpa tampak seperti regresi Gateway peg yang berlangsung beberapa menit.
- - Menggunakan artefak `dist` yang sudah dibangun; jalankan build terlebih dahulu ketika checkout belum
- memiliki output runtime yang baru.
+ plus `--hot-wall-warn-ms`), sehingga lonjakan startup singkat direkam sebagai metrik
+ tanpa terlihat seperti regresi Gateway yang terpaku pada beban tinggi selama beberapa menit.
+ - Menggunakan artefak `dist` yang sudah dibangun; jalankan build terlebih dahulu saat checkout belum
+ memiliki output runtime segar.
- `pnpm openclaw qa suite --runner multipass`
- - Menjalankan suite QA yang sama di dalam VM Linux Multipass sekali pakai.
- - Mempertahankan perilaku pemilihan skenario yang sama seperti `qa suite` di host.
- - Menggunakan ulang flag pemilihan provider/model yang sama seperti `qa suite`.
- - Run live meneruskan input auth QA yang didukung dan praktis untuk guest:
- kunci provider berbasis env, path config provider live QA, dan `CODEX_HOME`
- ketika ada.
- - Direktori output harus tetap berada di bawah root repo agar guest dapat menulis kembali melalui
- workspace yang di-mount.
+ - Menjalankan rangkaian QA yang sama di dalam VM Linux Multipass sekali pakai.
+ - Mempertahankan perilaku pemilihan skenario yang sama seperti `qa suite` pada host.
+ - Menggunakan kembali flag pemilihan penyedia/model yang sama seperti `qa suite`.
+ - Jalur langsung meneruskan input autentikasi QA yang didukung dan praktis untuk tamu:
+ kunci penyedia berbasis variabel lingkungan, jalur konfigurasi penyedia langsung QA, dan `CODEX_HOME`
+ saat ada.
+ - Direktori output harus tetap berada di bawah root repo agar tamu dapat menulis balik melalui
+ ruang kerja yang dipasang.
- Menulis laporan + ringkasan QA normal plus log Multipass di bawah
`.artifacts/qa-e2e/...`.
- `pnpm qa:lab:up`
- Memulai situs QA berbasis Docker untuk pekerjaan QA bergaya operator.
- `pnpm test:docker:npm-onboard-channel-agent`
- - Membangun tarball npm dari checkout saat ini, memasangnya secara global di
- Docker, menjalankan onboarding kunci API OpenAI non-interaktif, mengonfigurasi Telegram
- secara default, memverifikasi runtime Plugin terpaket dimuat tanpa perbaikan dependensi
- startup, menjalankan doctor, dan menjalankan satu giliran agent lokal terhadap endpoint
- OpenAI yang di-mock.
- - Gunakan `OPENCLAW_NPM_ONBOARD_CHANNEL=discord` untuk menjalankan lane packaged-install
+ - Membangun tarball npm dari checkout saat ini, menginstalnya secara global di
+ Docker, menjalankan penyiapan awal kunci API OpenAI noninteraktif, mengonfigurasi Telegram
+ secara default, memverifikasi runtime Plugin terpaket dimuat tanpa perbaikan
+ dependensi startup, menjalankan doctor, dan menjalankan satu giliran agen lokal terhadap
+ endpoint OpenAI tiruan.
+ - Gunakan `OPENCLAW_NPM_ONBOARD_CHANNEL=discord` untuk menjalankan jalur instalasi-terpaket
yang sama dengan Discord.
- `pnpm test:docker:session-runtime-context`
- - Menjalankan smoke Docker built-app deterministik untuk transkrip konteks runtime
- tertanam. Ini memverifikasi konteks runtime OpenClaw tersembunyi disimpan sebagai
- pesan custom non-display alih-alih bocor ke giliran pengguna yang terlihat,
- lalu menanamkan JSONL sesi rusak yang terdampak dan memverifikasi
- `openclaw doctor --fix` menulis ulangnya ke branch aktif dengan backup.
+ - Menjalankan uji smoke Docker aplikasi terbangun yang deterministik untuk transkrip konteks
+ runtime tertanam. Ini memverifikasi konteks runtime OpenClaw tersembunyi dipertahankan sebagai
+ pesan kustom non-tampilan alih-alih bocor ke giliran pengguna yang terlihat,
+ lalu menanam JSONL sesi rusak yang terdampak dan memverifikasi
+ `openclaw doctor --fix` menulis ulangnya ke cabang aktif dengan cadangan.
- `pnpm test:docker:npm-telegram-live`
- - Memasang kandidat paket OpenClaw di Docker, menjalankan onboarding installed-package,
- mengonfigurasi Telegram melalui CLI terpasang, lalu menggunakan ulang lane QA Telegram
- live dengan paket terpasang tersebut sebagai SUT Gateway.
+ - Menginstal kandidat paket OpenClaw di Docker, menjalankan penyiapan awal paket terinstal,
+ mengonfigurasi Telegram melalui CLI terinstal, lalu menggunakan kembali
+ jalur QA Telegram langsung dengan paket terinstal tersebut sebagai Gateway SUT.
- Default ke `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@beta`; atur
`OPENCLAW_NPM_TELEGRAM_PACKAGE_TGZ=/path/to/openclaw-current.tgz` atau
- `OPENCLAW_CURRENT_PACKAGE_TGZ` untuk menguji tarball lokal yang sudah di-resolve alih-alih
- memasang dari registry.
- - Menggunakan kredensial env Telegram atau sumber kredensial Convex yang sama seperti
+ `OPENCLAW_CURRENT_PACKAGE_TGZ` untuk menguji tarball lokal yang sudah ditentukan alih-alih
+ menginstal dari registri.
+ - Menggunakan kredensial variabel lingkungan Telegram atau sumber kredensial Convex yang sama seperti
`pnpm openclaw qa telegram`. Untuk otomatisasi CI/rilis, atur
`OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex` plus
- `OPENCLAW_QA_CONVEX_SITE_URL` dan secret peran. Jika
- `OPENCLAW_QA_CONVEX_SITE_URL` dan secret peran Convex ada di CI,
- wrapper Docker memilih Convex secara otomatis.
- - Wrapper memvalidasi env kredensial Telegram atau Convex di host sebelum
+ `OPENCLAW_QA_CONVEX_SITE_URL` dan rahasia peran. Jika
+ `OPENCLAW_QA_CONVEX_SITE_URL` dan rahasia peran Convex ada di CI,
+ pembungkus Docker memilih Convex secara otomatis.
+ - Pembungkus memvalidasi variabel lingkungan kredensial Telegram atau Convex pada host sebelum
pekerjaan build/install Docker. Atur `OPENCLAW_NPM_TELEGRAM_SKIP_CREDENTIAL_PREFLIGHT=1`
- hanya saat sengaja men-debug setup pra-kredensial.
- - `OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainer` menimpa
- `OPENCLAW_QA_CREDENTIAL_ROLE` bersama hanya untuk lane ini.
- - GitHub Actions mengekspos lane ini sebagai workflow maintainer manual
- `NPM Telegram Beta E2E`. Ini tidak berjalan saat merge. Workflow menggunakan
- environment `qa-live-shared` dan lease kredensial CI Convex.
-- GitHub Actions juga mengekspos `Package Acceptance` untuk bukti produk side-run
- terhadap satu paket kandidat. Ini menerima ref tepercaya, spec npm terpublikasi,
- URL tarball HTTPS plus SHA-256, atau artefak tarball dari run lain, mengunggah
+ hanya saat sengaja mendiagnosis penyiapan pra-kredensial.
+ - `OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci|maintainer` mengganti
+ `OPENCLAW_QA_CREDENTIAL_ROLE` bersama hanya untuk jalur ini.
+ - GitHub Actions mengekspos jalur ini sebagai alur kerja maintainer manual
+ `NPM Telegram Beta E2E`. Ini tidak berjalan saat penggabungan. Alur kerja menggunakan
+ lingkungan `qa-live-shared` dan lease kredensial CI Convex.
+- GitHub Actions juga mengekspos `Package Acceptance` untuk bukti produk yang dijalankan terpisah
+ terhadap satu paket kandidat. Ini menerima ref tepercaya, spesifikasi npm terpublikasi,
+ URL tarball HTTPS plus SHA-256, atau artefak tarball dari eksekusi lain, mengunggah
`openclaw-current.tgz` yang dinormalisasi sebagai `package-under-test`, lalu menjalankan
- scheduler Docker E2E yang ada dengan profil lane smoke, package, product, full, atau custom.
- Atur `telegram_mode=mock-openai` atau `live-frontier` untuk menjalankan workflow QA
- Telegram terhadap artefak `package-under-test` yang sama.
+ penjadwal E2E Docker yang ada dengan profil jalur smoke, paket, produk, penuh, atau kustom.
+ Atur `telegram_mode=mock-openai` atau `live-frontier` untuk menjalankan
+ alur kerja QA Telegram terhadap artefak `package-under-test` yang sama.
- Bukti produk beta terbaru:
```bash
@@ -234,7 +246,7 @@ gh workflow run package-acceptance.yml --ref main \
-f suite_profile=package
```
-- Bukti artefak mengunduh artefak tarball dari run Actions lain:
+- Bukti artefak mengunduh artefak tarball dari eksekusi Actions lain:
```bash
gh workflow run package-acceptance.yml --ref main \
@@ -245,31 +257,31 @@ gh workflow run package-acceptance.yml --ref main \
```
- `pnpm test:docker:plugins`
- - Mengepak dan memasang build OpenClaw saat ini di Docker, memulai Gateway
- dengan OpenAI dikonfigurasi, lalu mengaktifkan channel/Plugin bawaan melalui edit
- config.
- - Memverifikasi discovery setup membiarkan Plugin yang dapat diunduh dan belum dikonfigurasi tetap tidak ada,
- perbaikan doctor terkonfigurasi pertama memasang setiap Plugin yang dapat diunduh dan hilang
+ - Mengemas dan menginstal build OpenClaw saat ini di Docker, memulai Gateway
+ dengan OpenAI dikonfigurasi, lalu mengaktifkan saluran/Plugin bawaan melalui edit
+ konfigurasi.
+ - Memverifikasi penemuan penyiapan membiarkan Plugin unduhan yang belum dikonfigurasi tetap absen,
+ perbaikan doctor terkonfigurasi pertama menginstal setiap Plugin unduhan yang hilang
secara eksplisit, dan restart kedua tidak menjalankan perbaikan dependensi
tersembunyi.
- - Juga memasang baseline npm lama yang diketahui, mengaktifkan Telegram sebelum menjalankan
- `openclaw update --tag `, dan memverifikasi doctor pasca-update kandidat
- membersihkan sisa dependensi Plugin lama tanpa perbaikan postinstall dari sisi
- harness.
+ - Juga menginstal baseline npm lama yang diketahui, mengaktifkan Telegram sebelum menjalankan
+ `openclaw update --tag `, dan memverifikasi doctor pascapembaruan kandidat
+ membersihkan sisa dependensi Plugin lawas tanpa perbaikan pascainstal
+ di sisi kerangka uji.
- `pnpm test:parallels:npm-update`
- - Menjalankan smoke update packaged-install native di seluruh guest Parallels. Setiap
- platform terpilih terlebih dahulu memasang paket baseline yang diminta, lalu menjalankan
- perintah `openclaw update` terpasang di guest yang sama dan memverifikasi
- versi terpasang, status update, kesiapan Gateway, dan satu giliran agent
+ - Menjalankan uji smoke pembaruan instalasi-terpaket asli di seluruh tamu Parallels. Setiap
+ platform terpilih terlebih dahulu menginstal paket baseline yang diminta, lalu menjalankan
+ perintah `openclaw update` terinstal di tamu yang sama dan memverifikasi
+ versi terinstal, status pembaruan, kesiapan Gateway, dan satu giliran agen
lokal.
- Gunakan `--platform macos`, `--platform windows`, atau `--platform linux` saat
- beriterasi pada satu guest. Gunakan `--json` untuk path artefak ringkasan dan
- status per-lane.
- - Lane OpenAI menggunakan `openai/gpt-5.5` untuk bukti giliran agent live secara
+ mengulang pengujian pada satu tamu. Gunakan `--json` untuk jalur artefak ringkasan dan
+ status per jalur.
+ - Jalur OpenAI menggunakan `openai/gpt-5.5` untuk bukti giliran agen langsung secara
default. Berikan `--model ` atau atur
- `OPENCLAW_PARALLELS_OPENAI_MODEL` ketika sengaja memvalidasi model OpenAI
- lain.
- - Bungkus run lokal panjang dalam timeout host agar stall transport Parallels tidak dapat
+ `OPENCLAW_PARALLELS_OPENAI_MODEL` saat sengaja memvalidasi model
+ OpenAI lain.
+ - Bungkus eksekusi lokal yang lama dengan timeout pada host agar kemacetan transport Parallels tidak
menghabiskan sisa jendela pengujian:
```bash
@@ -277,67 +289,67 @@ gh workflow run package-acceptance.yml --ref main \
timeout --foreground 90m pnpm test:parallels:npm-update -- --platform windows --json
```
- - Skrip menulis log lane bersarang di bawah `/tmp/openclaw-parallels-npm-update.*`.
+ - Skrip menulis log jalur bersarang di bawah `/tmp/openclaw-parallels-npm-update.*`.
Periksa `windows-update.log`, `macos-update.log`, atau `linux-update.log`
- sebelum menganggap wrapper luar hang.
- - Update Windows dapat menghabiskan 10 hingga 15 menit dalam pekerjaan doctor pasca-update dan
- update paket pada guest dingin; itu masih sehat ketika log debug npm
- bersarang terus bergerak.
- - Jangan jalankan wrapper agregat ini secara paralel dengan lane smoke Parallels
- macOS, Windows, atau Linux individual. Mereka berbagi state VM dan dapat bertabrakan pada
- restore snapshot, penyajian paket, atau state Gateway guest.
- - Bukti pasca-update menjalankan permukaan Plugin bawaan normal karena
- facade capability seperti ucapan, pembuatan gambar, dan pemahaman media
- dimuat melalui API runtime bawaan meskipun giliran agent itu sendiri
- hanya memeriksa respons teks sederhana.
+ sebelum menganggap pembungkus luar macet.
+ - Pembaruan Windows dapat menghabiskan 10 hingga 15 menit dalam pekerjaan doctor
+ pascapembaruan dan pembaruan paket pada tamu yang baru dinyalakan; itu masih sehat saat log
+ debug npm bersarang terus bergerak.
+ - Jangan jalankan pembungkus agregat ini secara paralel dengan jalur smoke Parallels
+ macOS, Windows, atau Linux individual. Mereka berbagi status VM dan dapat bertabrakan pada
+ pemulihan snapshot, penyajian paket, atau status Gateway tamu.
+ - Bukti pascapembaruan menjalankan permukaan Plugin bawaan normal karena
+ fasad kemampuan seperti ucapan, pembuatan gambar, dan pemahaman media
+ dimuat melalui API runtime bawaan bahkan saat giliran agen itu sendiri hanya
+ memeriksa respons teks sederhana.
- `pnpm openclaw qa aimock`
- - Memulai hanya server provider AIMock lokal untuk pengujian smoke protokol
+ - Hanya memulai server penyedia AIMock lokal untuk pengujian smoke protokol
langsung.
- `pnpm openclaw qa matrix`
- - Menjalankan lane QA live Matrix terhadap homeserver Tuwunel sekali pakai berbasis Docker. Hanya source-checkout — install terpaket tidak mengirimkan `qa-lab`.
- - CLI lengkap, katalog profil/skenario, env var, dan tata letak artefak: [QA Matrix](/id/concepts/qa-matrix).
+ - Menjalankan jalur QA Matrix langsung terhadap homeserver Tuwunel sekali pakai berbasis Docker. Hanya checkout sumber — instalasi terpaket tidak mengirimkan `qa-lab`.
+ - CLI lengkap, katalog profil/skenario, variabel lingkungan, dan tata letak artefak: [QA Matrix](/id/concepts/qa-matrix).
- `pnpm openclaw qa telegram`
- - Menjalankan lane QA live Telegram terhadap grup privat sungguhan menggunakan token bot driver dan SUT dari env.
- - Memerlukan `OPENCLAW_QA_TELEGRAM_GROUP_ID`, `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`, dan `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. ID grup harus berupa ID chat Telegram numerik.
- - Mendukung `--credential-source convex` untuk kredensial pooled bersama. Gunakan mode env secara default, atau atur `OPENCLAW_QA_CREDENTIAL_SOURCE=convex` untuk ikut memakai lease pooled.
- - Keluar dengan non-zero ketika ada skenario yang gagal. Gunakan `--allow-failures` ketika Anda
+ - Menjalankan jalur QA Telegram langsung terhadap grup privat nyata menggunakan token bot driver dan SUT dari variabel lingkungan.
+ - Memerlukan `OPENCLAW_QA_TELEGRAM_GROUP_ID`, `OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN`, dan `OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN`. ID grup harus berupa ID obrolan Telegram numerik.
+ - Mendukung `--credential-source convex` untuk kredensial bersama dari kumpulan. Gunakan mode variabel lingkungan secara default, atau atur `OPENCLAW_QA_CREDENTIAL_SOURCE=convex` untuk ikut memakai lease terkumpul.
+ - Menghasilkan kode keluar bukan nol saat skenario apa pun gagal. Gunakan `--allow-failures` saat Anda
menginginkan artefak tanpa kode keluar gagal.
- - Memerlukan dua bot berbeda dalam grup privat yang sama, dengan bot SUT mengekspos username Telegram.
- - Untuk observasi bot-ke-bot yang stabil, aktifkan Bot-to-Bot Communication Mode di `@BotFather` untuk kedua bot dan pastikan bot driver dapat mengamati traffic bot grup.
- - Menulis laporan QA Telegram, ringkasan, dan artefak observed-messages di bawah `.artifacts/qa-e2e/...`. Skenario balasan menyertakan RTT dari permintaan kirim driver hingga balasan SUT yang teramati.
+ - Memerlukan dua bot berbeda di grup privat yang sama, dengan bot SUT mengekspos nama pengguna Telegram.
+ - Untuk observasi bot-ke-bot yang stabil, aktifkan Mode Komunikasi Bot-ke-Bot di `@BotFather` untuk kedua bot dan pastikan bot driver dapat mengamati lalu lintas bot grup.
+ - Menulis laporan QA Telegram, ringkasan, dan artefak pesan-teramati di bawah `.artifacts/qa-e2e/...`. Skenario membalas mencakup RTT dari permintaan kirim driver hingga balasan SUT teramati.
-Lane transport live berbagi satu kontrak standar sehingga transport baru tidak menyimpang; matriks cakupan per-lane berada di [ringkasan QA → cakupan transport live](/id/concepts/qa-e2e-automation#live-transport-coverage). `qa-channel` adalah suite sintetis luas dan bukan bagian dari matriks tersebut.
+Jalur transportasi langsung berbagi satu kontrak standar agar transportasi baru tidak menyimpang; matriks cakupan per jalur ada di [ikhtisar QA → cakupan transportasi langsung](/id/concepts/qa-e2e-automation#live-transport-coverage). `qa-channel` adalah rangkaian sintetis luas dan bukan bagian dari matriks itu.
### Kredensial Telegram bersama melalui Convex (v1)
-Ketika `--credential-source convex` (atau `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`) diaktifkan untuk
-`openclaw qa telegram`, QA lab memperoleh lease eksklusif dari pool berbasis Convex, melakukan Heartbeat
-pada lease tersebut saat lane berjalan, dan melepaskan lease saat shutdown.
+Saat `--credential-source convex` (atau `OPENCLAW_QA_CREDENTIAL_SOURCE=convex`) diaktifkan untuk
+`openclaw qa telegram`, QA Lab memperoleh lease eksklusif dari kumpulan berbasis Convex, mengirim Heartbeat
+untuk lease itu selama jalur berjalan, dan melepas lease saat dimatikan.
-Scaffold proyek Convex referensi:
+Kerangka proyek Convex referensi:
- `qa/convex-credential-broker/`
-Env var wajib:
+Variabel lingkungan wajib:
-- `OPENCLAW_QA_CONVEX_SITE_URL` (contohnya `https://your-deployment.convex.site`)
-- Satu secret untuk peran yang dipilih:
+- `OPENCLAW_QA_CONVEX_SITE_URL` (misalnya `https://your-deployment.convex.site`)
+- Satu rahasia untuk peran yang dipilih:
- `OPENCLAW_QA_CONVEX_SECRET_MAINTAINER` untuk `maintainer`
- `OPENCLAW_QA_CONVEX_SECRET_CI` untuk `ci`
- Pemilihan peran kredensial:
- CLI: `--credential-role maintainer|ci`
- - Default env: `OPENCLAW_QA_CREDENTIAL_ROLE` (default ke `ci` di CI, `maintainer` jika tidak)
+ - Default variabel lingkungan: `OPENCLAW_QA_CREDENTIAL_ROLE` (default ke `ci` di CI, selain itu `maintainer`)
-Env var opsional:
+Variabel lingkungan opsional:
- `OPENCLAW_QA_CREDENTIAL_LEASE_TTL_MS` (default `1200000`)
- `OPENCLAW_QA_CREDENTIAL_HEARTBEAT_INTERVAL_MS` (default `30000`)
- `OPENCLAW_QA_CREDENTIAL_ACQUIRE_TIMEOUT_MS` (default `90000`)
- `OPENCLAW_QA_CREDENTIAL_HTTP_TIMEOUT_MS` (default `15000`)
- `OPENCLAW_QA_CONVEX_ENDPOINT_PREFIX` (default `/qa-credentials/v1`)
-- `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (ID trace opsional)
-- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` mengizinkan URL Convex `http://` loopback untuk pengembangan khusus lokal.
+- `OPENCLAW_QA_CREDENTIAL_OWNER_ID` (ID jejak opsional)
+- `OPENCLAW_QA_ALLOW_INSECURE_HTTP=1` mengizinkan URL Convex loopback `http://` untuk pengembangan lokal saja.
`OPENCLAW_QA_CONVEX_SITE_URL` sebaiknya menggunakan `https://` dalam operasi normal.
@@ -353,9 +365,10 @@ pnpm openclaw qa credentials list --kind telegram
pnpm openclaw qa credentials remove --credential-id
```
-Gunakan `doctor` sebelum menjalankan live run untuk memeriksa URL situs Convex, rahasia broker,
-prefiks endpoint, timeout HTTP, dan keterjangkauan admin/list tanpa mencetak
-nilai rahasia. Gunakan `--json` untuk keluaran yang dapat dibaca mesin dalam skrip dan utilitas CI.
+Gunakan `doctor` sebelum live run untuk memeriksa URL situs Convex, secret broker,
+prefiks endpoint, waktu habis HTTP, serta keterjangkauan admin/list tanpa mencetak
+nilai secret. Gunakan `--json` untuk keluaran yang dapat dibaca mesin di skrip dan
+utilitas CI.
Kontrak endpoint default (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`):
@@ -369,143 +382,143 @@ Kontrak endpoint default (`OPENCLAW_QA_CONVEX_SITE_URL` + `/qa-credentials/v1`):
- `POST /release`
- Permintaan: `{ kind, ownerId, actorRole, credentialId, leaseToken }`
- Berhasil: `{ status: "ok" }` (atau `2xx` kosong)
-- `POST /admin/add` (hanya rahasia maintainer)
+- `POST /admin/add` (hanya secret maintainer)
- Permintaan: `{ kind, actorId, payload, note?, status? }`
- Berhasil: `{ status: "ok", credential }`
-- `POST /admin/remove` (hanya rahasia maintainer)
+- `POST /admin/remove` (hanya secret maintainer)
- Permintaan: `{ credentialId, actorId }`
- Berhasil: `{ status: "ok", changed, credential }`
- - Pelindung lease aktif: `{ status: "error", code: "LEASE_ACTIVE", ... }`
-- `POST /admin/list` (hanya rahasia maintainer)
+ - Penjaga lease aktif: `{ status: "error", code: "LEASE_ACTIVE", ... }`
+- `POST /admin/list` (hanya secret maintainer)
- Permintaan: `{ kind?, status?, includePayload?, limit? }`
- Berhasil: `{ status: "ok", credentials, count }`
-Bentuk payload untuk jenis Telegram:
+Bentuk payload untuk kind Telegram:
- `{ groupId: string, driverToken: string, sutToken: string }`
- `groupId` harus berupa string id chat Telegram numerik.
-- `admin/add` memvalidasi bentuk ini untuk `kind: "telegram"` dan menolak payload yang cacat.
+- `admin/add` memvalidasi bentuk ini untuk `kind: "telegram"` dan menolak payload yang salah bentuk.
-### Menambahkan kanal ke QA
+### Menambahkan channel ke QA
-Arsitektur dan nama pembantu skenario untuk adaptor kanal baru berada di [Gambaran umum QA → Menambahkan kanal](/id/concepts/qa-e2e-automation#adding-a-channel). Batas minimum: implementasikan pelaksana transport pada seam host `qa-lab` bersama, deklarasikan `qaRunners` dalam manifes Plugin, pasang sebagai `openclaw qa `, dan tulis skenario di bawah `qa/scenarios/`.
+Nama arsitektur dan helper skenario untuk adapter channel baru berada di [ikhtisar QA → Menambahkan channel](/id/concepts/qa-e2e-automation#adding-a-channel). Batas minimum: implementasikan runner transport pada seam host `qa-lab` bersama, deklarasikan `qaRunners` di manifes Plugin, pasang sebagai `openclaw qa `, dan tulis skenario di bawah `qa/scenarios/`.
## Rangkaian pengujian (apa yang berjalan di mana)
-Anggap rangkaian ini sebagai “realisme yang meningkat” (dan peningkatan kerapuhan/biaya):
+Anggap rangkaian ini sebagai “realisme yang meningkat” (dan flakiness/biaya yang meningkat):
### Unit / integrasi (default)
- Perintah: `pnpm test`
-- Konfigurasi: eksekusi tanpa target menggunakan set shard `vitest.full-*.config.ts` dan dapat memperluas shard multi-proyek menjadi konfigurasi per proyek untuk penjadwalan paralel
+- Konfigurasi: run tanpa target menggunakan set shard `vitest.full-*.config.ts` dan dapat memperluas shard multi-proyek menjadi konfigurasi per proyek untuk penjadwalan paralel
- File: inventaris core/unit di bawah `src/**/*.test.ts`, `packages/**/*.test.ts`, dan `test/**/*.test.ts`; pengujian unit UI berjalan di shard khusus `unit-ui`
- Cakupan:
- Pengujian unit murni
- - Pengujian integrasi dalam proses (autentikasi Gateway, perutean, tooling, parsing, konfigurasi)
+ - Pengujian integrasi dalam proses (autentikasi Gateway, routing, tooling, parsing, config)
- Regresi deterministik untuk bug yang diketahui
- Ekspektasi:
- Berjalan di CI
- - Tidak memerlukan kunci nyata
+ - Tidak memerlukan key nyata
- Harus cepat dan stabil
- - Pengujian resolver dan pemuat permukaan publik harus membuktikan perilaku fallback luas `api.js` dan
- `runtime-api.js` dengan fixture Plugin kecil yang dihasilkan, bukan
- API sumber Plugin bundel nyata. Pemuatan API Plugin nyata termasuk dalam
+ - Pengujian resolver dan loader permukaan publik harus membuktikan perilaku fallback `api.js` dan
+ `runtime-api.js` yang luas dengan fixture Plugin kecil yang dihasilkan, bukan
+ API sumber Plugin bundled nyata. Pemuatan API Plugin nyata berada di
rangkaian kontrak/integrasi milik Plugin.
-
+
- - `pnpm test` tanpa target menjalankan dua belas konfigurasi shard yang lebih kecil (`core-unit-fast`, `core-unit-src`, `core-unit-security`, `core-unit-ui`, `core-unit-support`, `core-support-boundary`, `core-contracts`, `core-bundled`, `core-runtime`, `agentic`, `auto-reply`, `extensions`) alih-alih satu proses proyek root native yang sangat besar. Ini mengurangi puncak RSS pada mesin yang sibuk dan mencegah pekerjaan auto-reply/ekstensi membuat rangkaian yang tidak terkait kekurangan sumber daya.
- - `pnpm test --watch` tetap menggunakan graf proyek root native `vitest.config.ts`, karena loop pemantauan multi-shard tidak praktis.
+ - `pnpm test` tanpa target menjalankan dua belas konfigurasi shard yang lebih kecil (`core-unit-fast`, `core-unit-src`, `core-unit-security`, `core-unit-ui`, `core-unit-support`, `core-support-boundary`, `core-contracts`, `core-bundled`, `core-runtime`, `agentic`, `auto-reply`, `extensions`) alih-alih satu proses native root-project raksasa. Ini memangkas puncak RSS pada mesin yang terbebani dan mencegah pekerjaan auto-reply/extension membuat rangkaian yang tidak terkait kekurangan sumber daya.
+ - `pnpm test --watch` tetap menggunakan grafik proyek root native `vitest.config.ts`, karena loop watch multi-shard tidak praktis.
- `pnpm test`, `pnpm test:watch`, dan `pnpm test:perf:imports` merutekan target file/direktori eksplisit melalui lane tercakup terlebih dahulu, sehingga `pnpm test extensions/discord/src/monitor/message-handler.preflight.test.ts` menghindari biaya startup proyek root penuh.
- - `pnpm test:changed` memperluas path git yang berubah menjadi lane tercakup murah secara default: edit pengujian langsung, file saudara `*.test.ts`, pemetaan sumber eksplisit, dan dependen graf impor lokal. Edit konfigurasi/setup/paket tidak menjalankan pengujian luas kecuali Anda secara eksplisit menggunakan `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed`.
- - `pnpm check:changed` adalah gate pemeriksaan lokal cerdas normal untuk pekerjaan sempit. Ia mengklasifikasikan diff menjadi core, pengujian core, ekstensi, pengujian ekstensi, aplikasi, dokumen, metadata rilis, tooling Docker live, dan tooling, lalu menjalankan perintah typecheck, lint, dan guard yang sesuai. Ia tidak menjalankan pengujian Vitest; panggil `pnpm test:changed` atau `pnpm test ` eksplisit untuk bukti pengujian. Kenaikan versi khusus metadata rilis menjalankan pemeriksaan versi/konfigurasi/dependensi root tertarget, dengan guard yang menolak perubahan paket di luar field versi tingkat atas.
- - Edit harness ACP Docker live menjalankan pemeriksaan terfokus: sintaks shell untuk skrip autentikasi Docker live dan dry-run penjadwal Docker live. Perubahan `package.json` hanya disertakan saat diff terbatas pada `scripts["test:docker:live-*"]`; edit dependensi, ekspor, versi, dan permukaan paket lain tetap menggunakan guard yang lebih luas.
- - Pengujian unit impor-ringan dari agen, perintah, plugins, pembantu auto-reply, `plugin-sdk`, dan area utilitas murni serupa dirutekan melalui lane `unit-fast`, yang melewati `test/setup-openclaw-runtime.ts`; file yang berstatus dan berat-runtime tetap berada pada lane yang ada.
- - File sumber pembantu `plugin-sdk` dan `commands` tertentu juga memetakan eksekusi mode berubah ke pengujian saudara eksplisit di lane ringan tersebut, sehingga edit pembantu menghindari menjalankan ulang seluruh rangkaian berat untuk direktori itu.
- - `auto-reply` memiliki bucket khusus untuk pembantu core tingkat atas, pengujian integrasi `reply.*` tingkat atas, dan subtree `src/auto-reply/reply/**`. CI selanjutnya membagi subtree reply menjadi shard agent-runner, dispatch, dan commands/state-routing sehingga satu bucket berat-impor tidak menguasai seluruh ekor Node.
- - CI PR/main normal sengaja melewati sapuan batch ekstensi dan shard khusus rilis `agentic-plugins`. Validasi Rilis Penuh memicu alur kerja anak `Plugin Prerelease` terpisah untuk rangkaian berat Plugin/ekstensi tersebut pada kandidat rilis.
+ - `pnpm test:changed` secara default memperluas path git yang berubah menjadi lane tercakup murah: edit pengujian langsung, file saudara `*.test.ts`, pemetaan sumber eksplisit, dan dependen grafik impor lokal. Edit config/setup/package tidak menjalankan pengujian luas kecuali Anda secara eksplisit menggunakan `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed`.
+ - `pnpm check:changed` adalah gate pemeriksaan lokal cerdas normal untuk pekerjaan sempit. Ini mengklasifikasikan diff menjadi core, pengujian core, extensions, pengujian extension, apps, docs, metadata rilis, tooling Docker live, dan tooling, lalu menjalankan perintah typecheck, lint, dan guard yang sesuai. Ini tidak menjalankan pengujian Vitest; panggil `pnpm test:changed` atau `pnpm test ` eksplisit untuk bukti pengujian. Kenaikan versi yang hanya metadata rilis menjalankan pemeriksaan versi/config/root-dependency bertarget, dengan guard yang menolak perubahan package di luar field version tingkat atas.
+ - Edit harness ACP Docker live menjalankan pemeriksaan terfokus: sintaks shell untuk skrip auth Docker live dan dry-run scheduler Docker live. Perubahan `package.json` hanya disertakan ketika diff terbatas pada `scripts["test:docker:live-*"]`; edit dependency, export, version, dan permukaan package lainnya tetap menggunakan guard yang lebih luas.
+ - Pengujian unit ringan impor dari agents, commands, plugins, helper auto-reply, `plugin-sdk`, dan area utilitas murni serupa dirutekan melalui lane `unit-fast`, yang melewati `test/setup-openclaw-runtime.ts`; file yang stateful/berat runtime tetap berada di lane yang ada.
+ - File sumber helper `plugin-sdk` dan `commands` tertentu juga memetakan run mode berubah ke pengujian saudara eksplisit di lane ringan tersebut, sehingga edit helper menghindari menjalankan ulang seluruh rangkaian berat untuk direktori itu.
+ - `auto-reply` memiliki bucket khusus untuk helper core tingkat atas, pengujian integrasi `reply.*` tingkat atas, dan subtree `src/auto-reply/reply/**`. CI selanjutnya membagi subtree reply menjadi shard agent-runner, dispatch, dan commands/state-routing sehingga satu bucket yang berat impor tidak menguasai seluruh ekor Node.
+ - CI PR/main normal sengaja melewati sweep batch extension dan shard `agentic-plugins` khusus rilis. Validasi Rilis Penuh menjalankan workflow anak `Plugin Prerelease` terpisah untuk rangkaian yang berat Plugin/extension tersebut pada kandidat rilis.
-
+
- - Saat Anda mengubah input penemuan alat pesan atau konteks runtime Compaction,
- pertahankan kedua tingkat cakupan.
- - Tambahkan regresi pembantu terfokus untuk batas perutean dan normalisasi
+ - Saat Anda mengubah input penemuan message-tool atau konteks runtime compaction,
+ pertahankan kedua tingkat coverage.
+ - Tambahkan regresi helper terfokus untuk batas routing dan normalisasi
murni.
- - Jaga kesehatan rangkaian integrasi runner tertanam:
+ - Jaga rangkaian integrasi embedded runner tetap sehat:
`src/agents/pi-embedded-runner/compact.hooks.test.ts`,
`src/agents/pi-embedded-runner/run.overflow-compaction.test.ts`, dan
`src/agents/pi-embedded-runner/run.overflow-compaction.loop.test.ts`.
- - Rangkaian tersebut memverifikasi bahwa id tercakup dan perilaku Compaction tetap mengalir
- melalui jalur `run.ts` / `compact.ts` nyata; pengujian khusus pembantu
- bukan pengganti yang memadai untuk jalur integrasi tersebut.
+ - Rangkaian tersebut memverifikasi bahwa id tercakup dan perilaku compaction tetap mengalir
+ melalui path `run.ts` / `compact.ts` nyata; pengujian helper saja
+ bukan pengganti yang memadai untuk path integrasi tersebut.
-
+
- Konfigurasi dasar Vitest default ke `threads`.
- Konfigurasi Vitest bersama menetapkan `isolate: false` dan menggunakan
- runner non-terisolasi di seluruh proyek root, e2e, dan konfigurasi live.
- - Lane UI root mempertahankan setup dan optimizer `jsdom`-nya, tetapi juga berjalan pada
+ runner non-terisolasi di seluruh proyek root, e2e, dan config live.
+ - Lane UI root mempertahankan setup dan optimizer `jsdom`, tetapi juga berjalan pada
runner non-terisolasi bersama.
- Setiap shard `pnpm test` mewarisi default `threads` + `isolate: false`
yang sama dari konfigurasi Vitest bersama.
- - `scripts/run-vitest.mjs` menambahkan `--no-maglev` untuk proses anak Node
- Vitest secara default untuk mengurangi churn kompilasi V8 selama eksekusi lokal besar.
- Setel `OPENCLAW_VITEST_ENABLE_MAGLEV=1` untuk membandingkan dengan perilaku
- V8 standar.
+ - `scripts/run-vitest.mjs` menambahkan `--no-maglev` untuk proses Node anak
+ Vitest secara default guna mengurangi churn kompilasi V8 selama run lokal besar.
+ Tetapkan `OPENCLAW_VITEST_ENABLE_MAGLEV=1` untuk membandingkan dengan perilaku
+ V8 stok.
-
+
- - `pnpm changed:lanes` menunjukkan lane arsitektur mana yang dipicu oleh sebuah diff.
- - Hook pre-commit hanya untuk pemformatan. Ia men-stage ulang file yang diformat dan
+ - `pnpm changed:lanes` menampilkan lane arsitektural mana yang dipicu oleh diff.
+ - Hook pre-commit hanya untuk pemformatan. Hook ini men-stage ulang file yang diformat dan
tidak menjalankan lint, typecheck, atau pengujian.
- Jalankan `pnpm check:changed` secara eksplisit sebelum handoff atau push saat Anda
- memerlukan gate pemeriksaan lokal cerdas.
+ membutuhkan gate pemeriksaan lokal cerdas.
- `pnpm test:changed` dirutekan melalui lane tercakup murah secara default. Gunakan
- `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` hanya saat agen
- memutuskan bahwa edit harness, konfigurasi, paket, atau kontrak benar-benar memerlukan
- cakupan Vitest yang lebih luas.
- - `pnpm test:max` dan `pnpm test:changed:max` mempertahankan perilaku perutean
+ `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed` hanya ketika agent
+ memutuskan bahwa edit harness, config, package, atau kontrak benar-benar memerlukan coverage
+ Vitest yang lebih luas.
+ - `pnpm test:max` dan `pnpm test:changed:max` mempertahankan perilaku routing
yang sama, hanya dengan batas worker yang lebih tinggi.
- Auto-scaling worker lokal sengaja konservatif dan mundur
- saat rata-rata beban host sudah tinggi, sehingga beberapa eksekusi Vitest
- bersamaan menimbulkan dampak lebih kecil secara default.
- - Konfigurasi dasar Vitest menandai proyek/file konfigurasi sebagai
- `forceRerunTriggers` sehingga eksekusi ulang mode berubah tetap benar saat
- wiring pengujian berubah.
- - Konfigurasi mempertahankan `OPENCLAW_VITEST_FS_MODULE_CACHE` aktif pada host yang didukung;
- setel `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path` jika Anda menginginkan
+ ketika rata-rata beban host sudah tinggi, sehingga beberapa run Vitest
+ serentak secara default menimbulkan dampak lebih kecil.
+ - Konfigurasi dasar Vitest menandai file proyek/config sebagai
+ `forceRerunTriggers` sehingga rerun mode berubah tetap benar saat wiring pengujian
+ berubah.
+ - Konfigurasi menjaga `OPENCLAW_VITEST_FS_MODULE_CACHE` tetap aktif pada host yang didukung;
+ tetapkan `OPENCLAW_VITEST_FS_MODULE_CACHE_PATH=/abs/path` jika Anda menginginkan
satu lokasi cache eksplisit untuk profiling langsung.
-
+
- - `pnpm test:perf:imports` mengaktifkan pelaporan durasi impor Vitest ditambah
+ - `pnpm test:perf:imports` mengaktifkan pelaporan durasi impor Vitest plus
keluaran rincian impor.
- `pnpm test:perf:imports:changed` membatasi tampilan profiling yang sama ke
file yang berubah sejak `origin/main`.
- Data waktu shard ditulis ke `.artifacts/vitest-shard-timings.json`.
- Eksekusi seluruh konfigurasi menggunakan path konfigurasi sebagai kunci; shard CI
- pola-include menambahkan nama shard sehingga shard terfilter dapat dilacak
+ Run seluruh config menggunakan path config sebagai key; shard CI
+ include-pattern menambahkan nama shard sehingga shard terfilter dapat dilacak
secara terpisah.
- - Saat satu pengujian panas masih menghabiskan sebagian besar waktunya pada impor startup,
- simpan dependensi berat di balik seam lokal sempit `*.runtime.ts` dan
- mock seam itu secara langsung alih-alih melakukan deep-import pembantu runtime hanya
+ - Ketika satu pengujian panas masih menghabiskan sebagian besar waktunya di impor startup,
+ letakkan dependency berat di belakang seam lokal `*.runtime.ts` yang sempit dan
+ mock seam itu langsung alih-alih melakukan deep-import helper runtime hanya
untuk meneruskannya melalui `vi.mock(...)`.
- `pnpm test:perf:changed:bench -- --ref ` membandingkan
- `test:changed` yang dirutekan dengan jalur proyek root native untuk diff yang sudah di-commit itu
- dan mencetak waktu wall plus RSS maksimum macOS.
- - `pnpm test:perf:changed:bench -- --worktree` mengukur tree kotor saat ini
- dengan merutekan daftar file berubah melalui
- `scripts/test-projects.mjs` dan konfigurasi Vitest root.
- - `pnpm test:perf:profile:main` menulis profil CPU thread utama untuk
+ `test:changed` yang dirutekan terhadap path root-project native untuk diff yang sudah
+ di-commit itu dan mencetak wall time plus RSS maksimum macOS.
+ - `pnpm test:perf:changed:bench -- --worktree` melakukan benchmark pada tree kotor saat ini
+ dengan merutekan daftar file yang berubah melalui
+ `scripts/test-projects.mjs` dan konfigurasi root Vitest.
+ - `pnpm test:perf:profile:main` menulis profil CPU main-thread untuk
overhead startup dan transform Vitest/Vite.
- `pnpm test:perf:profile:runner` menulis profil CPU+heap runner untuk
rangkaian unit dengan paralelisme file dinonaktifkan.
@@ -518,186 +531,186 @@ Anggap rangkaian ini sebagai “realisme yang meningkat” (dan peningkatan kera
- Perintah: `pnpm test:stability:gateway`
- Konfigurasi: `vitest.gateway.config.ts`, dipaksa ke satu worker
- Cakupan:
- - Memulai Gateway local loopback nyata dengan diagnostik aktif secara default
- - Menggerakkan churn pesan gateway sintetis, memori, dan payload besar melalui jalur peristiwa diagnostik
- - Mengkueri `diagnostics.stability` melalui RPC WS Gateway
- - Mencakup pembantu persistensi bundel stabilitas diagnostik
- - Menegaskan bahwa perekam tetap berbatas, sampel RSS sintetis tetap di bawah anggaran tekanan, dan kedalaman antrean per sesi kembali turun ke nol
+ - Memulai Gateway loopback nyata dengan diagnostik aktif secara default
+ - Mendorong churn pesan gateway sintetis, memori, dan payload besar melalui path peristiwa diagnostik
+ - Mengkueri `diagnostics.stability` melalui WS RPC Gateway
+ - Mencakup helper persistensi bundle stabilitas diagnostik
+ - Memastikan recorder tetap terbatas, sampel RSS sintetis tetap di bawah budget tekanan, dan kedalaman antrean per sesi terkuras kembali ke nol
- Ekspektasi:
- - Aman untuk CI dan tanpa kunci
+ - Aman untuk CI dan tanpa key
- Lane sempit untuk tindak lanjut regresi stabilitas, bukan pengganti rangkaian Gateway penuh
### E2E (smoke gateway)
- Perintah: `pnpm test:e2e`
- Konfigurasi: `vitest.e2e.config.ts`
-- File: `src/**/*.e2e.test.ts`, `test/**/*.e2e.test.ts`, dan pengujian E2E bundled-plugin di bawah `extensions/`
+- Berkas: `src/**/*.e2e.test.ts`, `test/**/*.e2e.test.ts`, dan pengujian E2E Plugin bawaan di bawah `extensions/`
- Default runtime:
- Menggunakan `threads` Vitest dengan `isolate: false`, sesuai dengan bagian repo lainnya.
- Menggunakan worker adaptif (CI: hingga 2, lokal: default 1).
- Berjalan dalam mode senyap secara default untuk mengurangi overhead I/O konsol.
- Override yang berguna:
- - `OPENCLAW_E2E_WORKERS=` untuk memaksa jumlah worker (dibatasi hingga 16).
- - `OPENCLAW_E2E_VERBOSE=1` untuk mengaktifkan kembali output konsol verbose.
+ - `OPENCLAW_E2E_WORKERS=` untuk memaksa jumlah worker (dibatasi maksimum 16).
+ - `OPENCLAW_E2E_VERBOSE=1` untuk mengaktifkan kembali keluaran konsol verbose.
- Cakupan:
- - Perilaku end-to-end gateway multi-instans
+ - Perilaku end-to-end Gateway multi-instans
- Permukaan WebSocket/HTTP, pemasangan node, dan jaringan yang lebih berat
- Ekspektasi:
- - Berjalan di CI (jika diaktifkan dalam pipeline)
+ - Berjalan di CI (ketika diaktifkan dalam pipeline)
- Tidak memerlukan kunci nyata
- - Lebih banyak komponen bergerak dibanding pengujian unit (bisa lebih lambat)
+ - Lebih banyak bagian bergerak dibandingkan pengujian unit (bisa lebih lambat)
-### E2E: smoke backend OpenShell
+### E2E: validasi dasar backend OpenShell
- Perintah: `pnpm test:e2e:openshell`
-- File: `extensions/openshell/src/backend.e2e.test.ts`
+- Berkas: `extensions/openshell/src/backend.e2e.test.ts`
- Cakupan:
- - Memulai gateway OpenShell terisolasi pada host melalui Docker
+ - Memulai Gateway OpenShell terisolasi pada host melalui Docker
- Membuat sandbox dari Dockerfile lokal sementara
- Menguji backend OpenShell OpenClaw melalui `sandbox ssh-config` nyata + eksekusi SSH
- - Memverifikasi perilaku sistem file remote-kanonis melalui bridge fs sandbox
+ - Memverifikasi perilaku sistem berkas kanonis jarak jauh melalui jembatan fs sandbox
- Ekspektasi:
- Hanya opt-in; bukan bagian dari eksekusi default `pnpm test:e2e`
- - Memerlukan CLI `openshell` lokal ditambah daemon Docker yang berfungsi
- - Menggunakan `HOME` / `XDG_CONFIG_HOME` terisolasi, lalu menghancurkan gateway dan sandbox pengujian
+ - Memerlukan CLI `openshell` lokal plus daemon Docker yang berfungsi
+ - Menggunakan `HOME` / `XDG_CONFIG_HOME` terisolasi, lalu menghancurkan Gateway pengujian dan sandbox
- Override yang berguna:
- `OPENCLAW_E2E_OPENSHELL=1` untuk mengaktifkan pengujian saat menjalankan suite e2e yang lebih luas secara manual
- `OPENCLAW_E2E_OPENSHELL_COMMAND=/path/to/openshell` untuk menunjuk ke biner CLI non-default atau skrip wrapper
-### Live (provider nyata + model nyata)
+### Live (penyedia nyata + model nyata)
- Perintah: `pnpm test:live`
- Konfigurasi: `vitest.live.config.ts`
-- File: `src/**/*.live.test.ts`, `test/**/*.live.test.ts`, dan pengujian live bundled-plugin di bawah `extensions/`
-- Default: **diaktifkan** oleh `pnpm test:live` (menyetel `OPENCLAW_LIVE_TEST=1`)
+- Berkas: `src/**/*.live.test.ts`, `test/**/*.live.test.ts`, dan pengujian live Plugin bawaan di bawah `extensions/`
+- Default: **diaktifkan** oleh `pnpm test:live` (menetapkan `OPENCLAW_LIVE_TEST=1`)
- Cakupan:
- - “Apakah provider/model ini benar-benar berfungsi _hari ini_ dengan kredensial nyata?”
- - Menangkap perubahan format provider, keunikan pemanggilan alat, masalah autentikasi, dan perilaku batas laju
+ - “Apakah penyedia/model ini benar-benar berfungsi _hari ini_ dengan kredensial nyata?”
+ - Menangkap perubahan format penyedia, kekhasan pemanggilan alat, masalah autentikasi, dan perilaku batas laju
- Ekspektasi:
- - Sengaja tidak stabil untuk CI (jaringan nyata, kebijakan provider nyata, kuota, gangguan)
- - Menghabiskan uang / menggunakan batas laju
- - Lebih disarankan menjalankan subset yang dipersempit daripada “semuanya”
-- Eksekusi live memuat `~/.profile` untuk mengambil kunci API yang hilang.
-- Secara default, eksekusi live tetap mengisolasi `HOME` dan menyalin material konfigurasi/autentikasi ke home pengujian sementara sehingga fixture unit tidak dapat mengubah `~/.openclaw` nyata Anda.
-- Setel `OPENCLAW_LIVE_USE_REAL_HOME=1` hanya saat Anda memang perlu pengujian live menggunakan direktori home nyata Anda.
-- `pnpm test:live` kini default ke mode yang lebih senyap: mode ini mempertahankan output progres `[live] ...`, tetapi menekan pemberitahuan ekstra `~/.profile` dan membisukan log bootstrap gateway/obrolan Bonjour. Setel `OPENCLAW_LIVE_TEST_QUIET=0` jika Anda menginginkan kembali log startup lengkap.
-- Rotasi kunci API (spesifik provider): setel `*_API_KEYS` dengan format koma/titik koma atau `*_API_KEY_1`, `*_API_KEY_2` (misalnya `OPENAI_API_KEYS`, `ANTHROPIC_API_KEYS`, `GEMINI_API_KEYS`) atau override per-live melalui `OPENCLAW_LIVE_*_KEY`; pengujian mencoba ulang pada respons batas laju.
-- Output progres/heartbeat:
- - Suite live kini memancarkan baris progres ke stderr sehingga pemanggilan provider yang lama tetap terlihat aktif meskipun penangkapan konsol Vitest senyap.
- - `vitest.live.config.ts` menonaktifkan intersepsi konsol Vitest sehingga baris progres provider/gateway mengalir langsung selama eksekusi live.
- - Sesuaikan heartbeat model langsung dengan `OPENCLAW_LIVE_HEARTBEAT_MS`.
- - Sesuaikan heartbeat gateway/probe dengan `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`.
+ - Sengaja tidak stabil untuk CI (jaringan nyata, kebijakan penyedia nyata, kuota, gangguan layanan)
+ - Menghabiskan biaya / menggunakan batas laju
+ - Utamakan menjalankan subset yang dipersempit daripada “semuanya”
+- Eksekusi live memuat sumber `~/.profile` untuk mengambil kunci API yang hilang.
+- Secara default, eksekusi live tetap mengisolasi `HOME` dan menyalin material konfigurasi/autentikasi ke home pengujian sementara agar fixture unit tidak dapat mengubah `~/.openclaw` nyata Anda.
+- Tetapkan `OPENCLAW_LIVE_USE_REAL_HOME=1` hanya ketika Anda sengaja memerlukan pengujian live untuk menggunakan direktori home nyata Anda.
+- `pnpm test:live` kini default ke mode yang lebih senyap: mode ini mempertahankan keluaran progres `[live] ...`, tetapi menyembunyikan pemberitahuan `~/.profile` tambahan dan membisukan log bootstrap Gateway/obrolan Bonjour. Tetapkan `OPENCLAW_LIVE_TEST_QUIET=0` jika Anda ingin mengembalikan log startup lengkap.
+- Rotasi kunci API (khusus penyedia): tetapkan `*_API_KEYS` dengan format koma/titik koma atau `*_API_KEY_1`, `*_API_KEY_2` (misalnya `OPENAI_API_KEYS`, `ANTHROPIC_API_KEYS`, `GEMINI_API_KEYS`) atau override per-live melalui `OPENCLAW_LIVE_*_KEY`; pengujian mencoba ulang pada respons batas laju.
+- Keluaran progres/Heartbeat:
+ - Suite live kini mengeluarkan baris progres ke stderr sehingga panggilan penyedia yang lama terlihat aktif bahkan ketika penangkapan konsol Vitest senyap.
+ - `vitest.live.config.ts` menonaktifkan intersepsi konsol Vitest sehingga baris progres penyedia/Gateway mengalir segera selama eksekusi live.
+ - Atur Heartbeat model langsung dengan `OPENCLAW_LIVE_HEARTBEAT_MS`.
+ - Atur Heartbeat Gateway/probe dengan `OPENCLAW_LIVE_GATEWAY_HEARTBEAT_MS`.
-## Suite mana yang sebaiknya saya jalankan?
+## Suite mana yang harus saya jalankan?
Gunakan tabel keputusan ini:
-- Mengedit logika/pengujian: jalankan `pnpm test` (dan `pnpm test:coverage` jika Anda banyak mengubah)
-- Menyentuh jaringan gateway / protokol WS / pemasangan: tambahkan `pnpm test:e2e`
-- Men-debug “bot saya sedang down” / kegagalan spesifik provider / pemanggilan alat: jalankan `pnpm test:live` yang dipersempit
+- Mengedit logika/pengujian: jalankan `pnpm test` (dan `pnpm test:coverage` jika Anda mengubah banyak hal)
+- Menyentuh jaringan Gateway / protokol WS / pemasangan: tambahkan `pnpm test:e2e`
+- Men-debug “bot saya mati” / kegagalan khusus penyedia / pemanggilan alat: jalankan `pnpm test:live` yang dipersempit
## Pengujian live (menyentuh jaringan)
-Untuk matriks model live, smoke backend CLI, smoke ACP, harness server aplikasi Codex, dan semua pengujian live provider media (Deepgram, BytePlus, ComfyUI, gambar, musik, video, harness media) — ditambah penanganan kredensial untuk eksekusi live — lihat [Menguji suite live](/id/help/testing-live). Untuk checklist khusus pembaruan dan validasi plugin, lihat [Menguji pembaruan dan plugin](/id/help/testing-updates-plugins).
+Untuk matriks model live, validasi dasar backend CLI, validasi dasar ACP, harness server aplikasi Codex, dan semua pengujian live penyedia media (Deepgram, BytePlus, ComfyUI, gambar, musik, video, harness media) — plus penanganan kredensial untuk eksekusi live — lihat [Menguji suite live](/id/help/testing-live). Untuk checklist khusus validasi pembaruan dan Plugin, lihat [Menguji pembaruan dan Plugin](/id/help/testing-updates-plugins).
## Runner Docker (pemeriksaan opsional "berfungsi di Linux")
-Runner Docker ini dibagi menjadi dua kelompok:
+Runner Docker ini terbagi menjadi dua kelompok:
-- Runner model live: `test:docker:live-models` dan `test:docker:live-gateway` hanya menjalankan file live profile-key yang sesuai di dalam image Docker repo (`src/agents/models.profiles.live.test.ts` dan `src/gateway/gateway-models.profiles.live.test.ts`), dengan memasang direktori konfigurasi lokal dan workspace Anda (serta memuat `~/.profile` jika dipasang). Entrypoint lokal yang sesuai adalah `test:live:models-profiles` dan `test:live:gateway-profiles`.
-- Runner live Docker default ke batas smoke yang lebih kecil agar sweep Docker penuh tetap praktis:
+- Runner model live: `test:docker:live-models` dan `test:docker:live-gateway` hanya menjalankan berkas live kunci profil yang cocok di dalam image Docker repo (`src/agents/models.profiles.live.test.ts` dan `src/gateway/gateway-models.profiles.live.test.ts`), dengan me-mount direktori konfigurasi lokal dan workspace Anda (serta memuat `~/.profile` jika di-mount). Entry point lokal yang cocok adalah `test:live:models-profiles` dan `test:live:gateway-profiles`.
+- Runner live Docker default ke batas validasi dasar yang lebih kecil agar sweep Docker penuh tetap praktis:
`test:docker:live-models` default ke `OPENCLAW_LIVE_MAX_MODELS=12`, dan
`test:docker:live-gateway` default ke `OPENCLAW_LIVE_GATEWAY_SMOKE=1`,
`OPENCLAW_LIVE_GATEWAY_MAX_MODELS=8`,
`OPENCLAW_LIVE_GATEWAY_STEP_TIMEOUT_MS=45000`, dan
- `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. Override variabel env tersebut saat Anda
+ `OPENCLAW_LIVE_GATEWAY_MODEL_TIMEOUT_MS=90000`. Override env var tersebut ketika Anda
secara eksplisit menginginkan pemindaian menyeluruh yang lebih besar.
-- `test:docker:all` membangun image Docker live sekali melalui `test:docker:live-build`, mengemas OpenClaw sekali sebagai tarball npm melalui `scripts/package-openclaw-for-docker.mjs`, lalu membangun/menggunakan kembali dua image `scripts/e2e/Dockerfile`. Image bare hanyalah runner Node/Git untuk lane instal/pembaruan/dependensi-plugin; lane tersebut memasang tarball yang sudah dibangun. Image fungsional menginstal tarball yang sama ke `/app` untuk lane fungsionalitas aplikasi yang dibangun. Definisi lane Docker berada di `scripts/lib/docker-e2e-scenarios.mjs`; logika planner berada di `scripts/lib/docker-e2e-plan.mjs`; `scripts/test-docker-all.mjs` mengeksekusi rencana yang dipilih. Agregat menggunakan scheduler lokal berbobot: `OPENCLAW_DOCKER_ALL_PARALLELISM` mengontrol slot proses, sementara batas sumber daya mencegah lane live berat, npm-install, dan multi-service dimulai sekaligus. Jika satu lane lebih berat daripada batas aktif, scheduler masih dapat memulainya saat pool kosong lalu mempertahankannya berjalan sendiri hingga kapasitas tersedia kembali. Defaultnya adalah 10 slot, `OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9`, `OPENCLAW_DOCKER_ALL_NPM_LIMIT=10`, dan `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7`; sesuaikan `OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT` atau `OPENCLAW_DOCKER_ALL_DOCKER_LIMIT` hanya saat host Docker memiliki ruang tambahan. Runner melakukan preflight Docker secara default, menghapus kontainer OpenClaw E2E usang, mencetak status setiap 30 detik, menyimpan timing lane yang berhasil di `.artifacts/docker-tests/lane-timings.json`, dan menggunakan timing tersebut untuk memulai lane yang lebih lama lebih dulu pada eksekusi berikutnya. Gunakan `OPENCLAW_DOCKER_ALL_DRY_RUN=1` untuk mencetak manifes lane berbobot tanpa membangun atau menjalankan Docker, atau `node scripts/test-docker-all.mjs --plan-json` untuk mencetak rencana CI bagi lane yang dipilih, kebutuhan paket/image, dan kredensial.
-- `Package Acceptance` adalah gate paket native GitHub untuk "apakah tarball yang dapat diinstal ini berfungsi sebagai produk?" Gate ini menyelesaikan satu paket kandidat dari `source=npm`, `source=ref`, `source=url`, atau `source=artifact`, mengunggahnya sebagai `package-under-test`, lalu menjalankan lane Docker E2E yang dapat digunakan ulang terhadap tarball persis itu, bukan mengemas ulang ref yang dipilih. Profil diurutkan berdasarkan keluasan: `smoke`, `package`, `product`, dan `full`. Lihat [Menguji pembaruan dan plugin](/id/help/testing-updates-plugins) untuk kontrak paket/pembaruan/plugin, matriks survivor published-upgrade, default rilis, dan triase kegagalan.
-- Pemeriksaan build dan rilis menjalankan `scripts/check-cli-bootstrap-imports.mjs` setelah tsdown. Guard menelusuri grafik built statis dari `dist/entry.js` dan `dist/cli/run-main.js` dan gagal jika startup pra-dispatch mengimpor dependensi paket seperti Commander, prompt UI, undici, atau logging sebelum dispatch perintah; guard ini juga menjaga chunk run gateway bundled tetap di bawah anggaran dan menolak impor statis jalur gateway dingin yang dikenal. Smoke CLI terpaket juga mencakup root help, onboard help, doctor help, status, skema konfigurasi, dan perintah daftar model.
-- Kompatibilitas legacy Package Acceptance dibatasi pada `2026.4.25` (termasuk `2026.4.25-beta.*`). Hingga batas tersebut, harness hanya menoleransi celah metadata shipped-package: entri inventaris QA privat yang dihilangkan, `gateway install --wrapper` yang hilang, file patch yang hilang di fixture git turunan tarball, `update.channel` tersimpan yang hilang, lokasi install-record plugin legacy, persistensi install-record marketplace yang hilang, dan migrasi metadata konfigurasi selama `plugins update`. Untuk paket setelah `2026.4.25`, jalur tersebut menjadi kegagalan ketat.
-- Runner smoke kontainer: `test:docker:openwebui`, `test:docker:onboard`, `test:docker:npm-onboard-channel-agent`, `test:docker:update-channel-switch`, `test:docker:upgrade-survivor`, `test:docker:published-upgrade-survivor`, `test:docker:session-runtime-context`, `test:docker:agents-delete-shared-workspace`, `test:docker:gateway-network`, `test:docker:browser-cdp-snapshot`, `test:docker:mcp-channels`, `test:docker:pi-bundle-mcp-tools`, `test:docker:cron-mcp-cleanup`, `test:docker:plugins`, `test:docker:plugin-update`, `test:docker:plugin-lifecycle-matrix`, dan `test:docker:config-reload` mem-boot satu atau lebih kontainer nyata dan memverifikasi jalur integrasi tingkat lebih tinggi.
+- `test:docker:all` membangun image Docker live sekali melalui `test:docker:live-build`, mengemas OpenClaw sekali sebagai tarball npm melalui `scripts/package-openclaw-for-docker.mjs`, lalu membangun/menggunakan ulang dua image `scripts/e2e/Dockerfile`. Image dasar hanya runner Node/Git untuk jalur instalasi/pembaruan/dependensi-Plugin; jalur tersebut me-mount tarball prabangun. Image fungsional menginstal tarball yang sama ke `/app` untuk jalur fungsionalitas aplikasi terbangun. Definisi jalur Docker berada di `scripts/lib/docker-e2e-scenarios.mjs`; logika planner berada di `scripts/lib/docker-e2e-plan.mjs`; `scripts/test-docker-all.mjs` mengeksekusi rencana yang dipilih. Agregat menggunakan scheduler lokal berbobot: `OPENCLAW_DOCKER_ALL_PARALLELISM` mengontrol slot proses, sedangkan batas sumber daya mencegah jalur live berat, instalasi npm, dan multi-layanan dimulai sekaligus. Jika satu jalur lebih berat daripada batas aktif, scheduler tetap dapat memulainya ketika pool kosong lalu mempertahankannya berjalan sendiri hingga kapasitas tersedia lagi. Default adalah 10 slot, `OPENCLAW_DOCKER_ALL_LIVE_LIMIT=9`, `OPENCLAW_DOCKER_ALL_NPM_LIMIT=10`, dan `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT=7`; atur `OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT` atau `OPENCLAW_DOCKER_ALL_DOCKER_LIMIT` hanya ketika host Docker memiliki ruang lebih besar. Runner menjalankan preflight Docker secara default, menghapus container E2E OpenClaw yang usang, mencetak status setiap 30 detik, menyimpan timing jalur yang berhasil di `.artifacts/docker-tests/lane-timings.json`, dan menggunakan timing tersebut untuk memulai jalur yang lebih lama terlebih dahulu pada eksekusi berikutnya. Gunakan `OPENCLAW_DOCKER_ALL_DRY_RUN=1` untuk mencetak manifes jalur berbobot tanpa membangun atau menjalankan Docker, atau `node scripts/test-docker-all.mjs --plan-json` untuk mencetak rencana CI bagi jalur yang dipilih, kebutuhan paket/image, dan kredensial.
+- `Package Acceptance` adalah gate paket native GitHub untuk "apakah tarball yang dapat diinstal ini berfungsi sebagai produk?" Gate ini menyelesaikan satu paket kandidat dari `source=npm`, `source=ref`, `source=url`, atau `source=artifact`, mengunggahnya sebagai `package-under-test`, lalu menjalankan jalur E2E Docker yang dapat digunakan ulang terhadap tarball tepat tersebut, bukan mengemas ulang ref yang dipilih. Profil diurutkan berdasarkan keluasan: `smoke`, `package`, `product`, dan `full`. Lihat [Menguji pembaruan dan Plugin](/id/help/testing-updates-plugins) untuk kontrak paket/pembaruan/Plugin, matriks survivor published-upgrade, default rilis, dan triase kegagalan.
+- Pemeriksaan build dan rilis menjalankan `scripts/check-cli-bootstrap-imports.mjs` setelah tsdown. Guard menelusuri grafik build statis dari `dist/entry.js` dan `dist/cli/run-main.js` dan gagal jika startup pra-dispatch mengimpor dependensi paket seperti Commander, UI prompt, undici, atau logging sebelum dispatch perintah; guard ini juga menjaga chunk eksekusi Gateway bawaan tetap dalam anggaran dan menolak impor statis dari jalur Gateway dingin yang diketahui. Validasi dasar CLI terpaket juga mencakup bantuan root, bantuan onboard, bantuan doctor, status, skema konfigurasi, dan perintah daftar model.
+- Kompatibilitas legacy Package Acceptance dibatasi pada `2026.4.25` (termasuk `2026.4.25-beta.*`). Hingga batas tersebut, harness hanya menoleransi celah metadata paket terkirim: entri inventaris QA private yang dihilangkan, `gateway install --wrapper` yang hilang, berkas patch yang hilang dalam fixture git turunan tarball, `update.channel` tersimpan yang hilang, lokasi catatan instalasi Plugin legacy, persistensi catatan instalasi marketplace yang hilang, dan migrasi metadata konfigurasi selama `plugins update`. Untuk paket setelah `2026.4.25`, jalur tersebut menjadi kegagalan ketat.
+- Runner validasi dasar container: `test:docker:openwebui`, `test:docker:onboard`, `test:docker:npm-onboard-channel-agent`, `test:docker:update-channel-switch`, `test:docker:upgrade-survivor`, `test:docker:published-upgrade-survivor`, `test:docker:session-runtime-context`, `test:docker:agents-delete-shared-workspace`, `test:docker:gateway-network`, `test:docker:browser-cdp-snapshot`, `test:docker:mcp-channels`, `test:docker:pi-bundle-mcp-tools`, `test:docker:cron-mcp-cleanup`, `test:docker:plugins`, `test:docker:plugin-update`, `test:docker:plugin-lifecycle-matrix`, dan `test:docker:config-reload` mem-boot satu atau lebih container nyata dan memverifikasi jalur integrasi tingkat lebih tinggi.
-Runner Docker model live juga hanya melakukan bind-mount home autentikasi CLI yang diperlukan (atau semua yang didukung saat eksekusi tidak dipersempit), lalu menyalinnya ke home kontainer sebelum eksekusi sehingga OAuth CLI eksternal dapat menyegarkan token tanpa mengubah penyimpanan autentikasi host:
+Runner Docker model live juga hanya melakukan bind-mount home autentikasi CLI yang diperlukan (atau semuanya yang didukung ketika eksekusi tidak dipersempit), lalu menyalinnya ke home container sebelum eksekusi sehingga OAuth CLI eksternal dapat memperbarui token tanpa mengubah penyimpanan autentikasi host:
- Model langsung: `pnpm test:docker:live-models` (skrip: `scripts/test-live-models-docker.sh`)
-- Smoke bind ACP: `pnpm test:docker:live-acp-bind` (skrip: `scripts/test-live-acp-bind-docker.sh`; mencakup Claude, Codex, dan Gemini secara default, dengan cakupan Droid/OpenCode yang ketat melalui `pnpm test:docker:live-acp-bind:droid` dan `pnpm test:docker:live-acp-bind:opencode`)
+- Smoke ACP bind: `pnpm test:docker:live-acp-bind` (skrip: `scripts/test-live-acp-bind-docker.sh`; mencakup Claude, Codex, dan Gemini secara default, dengan cakupan Droid/OpenCode yang ketat melalui `pnpm test:docker:live-acp-bind:droid` dan `pnpm test:docker:live-acp-bind:opencode`)
- Smoke backend CLI: `pnpm test:docker:live-cli-backend` (skrip: `scripts/test-live-cli-backend-docker.sh`)
- Smoke harness app-server Codex: `pnpm test:docker:live-codex-harness` (skrip: `scripts/test-live-codex-harness-docker.sh`)
- Gateway + agen dev: `pnpm test:docker:live-gateway` (skrip: `scripts/test-live-gateway-models-docker.sh`)
-- Smoke observabilitas: `pnpm qa:otel:smoke` adalah lane checkout sumber QA privat. Ini sengaja tidak menjadi bagian dari lane rilis Docker paket karena tarball npm tidak menyertakan QA Lab.
-- Smoke live Open WebUI: `pnpm test:docker:openwebui` (skrip: `scripts/e2e/openwebui-docker.sh`)
-- Wisaya onboarding (TTY, scaffolding penuh): `pnpm test:docker:onboard` (skrip: `scripts/e2e/onboard-docker.sh`)
-- Smoke onboarding/channel/agen tarball npm: `pnpm test:docker:npm-onboard-channel-agent` menginstal tarball OpenClaw yang sudah dikemas secara global di Docker, mengonfigurasi OpenAI melalui onboarding env-ref plus Telegram secara default, menjalankan doctor, dan menjalankan satu giliran agen OpenAI yang di-mock. Gunakan ulang tarball yang sudah dibuat sebelumnya dengan `OPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz`, lewati rebuild host dengan `OPENCLAW_NPM_ONBOARD_HOST_BUILD=0`, atau ganti channel dengan `OPENCLAW_NPM_ONBOARD_CHANNEL=discord`.
-- Smoke penggantian channel pembaruan: `pnpm test:docker:update-channel-switch` menginstal tarball OpenClaw yang sudah dikemas secara global di Docker, beralih dari paket `stable` ke git `dev`, memverifikasi channel yang dipertahankan dan kerja Plugin pascapembaruan, lalu beralih kembali ke paket `stable` dan memeriksa status pembaruan.
-- Smoke penyintas upgrade: `pnpm test:docker:upgrade-survivor` menginstal tarball OpenClaw yang sudah dikemas di atas fixture pengguna lama yang kotor dengan agen, konfigurasi channel, allowlist Plugin, status dependensi Plugin usang, dan file workspace/sesi yang ada. Ini menjalankan pembaruan paket plus doctor noninteraktif tanpa penyedia live atau kunci channel, lalu memulai Gateway loopback dan memeriksa pelestarian konfigurasi/status plus anggaran startup/status.
-- Smoke penyintas upgrade terpublikasi: `pnpm test:docker:published-upgrade-survivor` menginstal `openclaw@latest` secara default, menyemai file pengguna yang ada secara realistis, mengonfigurasi baseline tersebut dengan resep perintah bawaan, memvalidasi konfigurasi yang dihasilkan, memperbarui instalasi terpublikasi itu ke tarball kandidat, menjalankan doctor noninteraktif, menulis `.artifacts/upgrade-survivor/summary.json`, lalu memulai Gateway loopback dan memeriksa intent yang dikonfigurasi, pelestarian status, startup, `/healthz`, `/readyz`, dan anggaran status RPC. Timpa satu baseline dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC`, minta scheduler agregat memperluas baseline persis dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS` seperti `all-since-2026.4.23`, dan perluas fixture berbentuk isu dengan `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` seperti `reported-issues`; set reported-issues mencakup `configured-plugin-installs` untuk perbaikan instalasi Plugin OpenClaw eksternal otomatis. Package Acceptance mengeksposnya sebagai `published_upgrade_survivor_baseline`, `published_upgrade_survivor_baselines`, dan `published_upgrade_survivor_scenarios`.
-- Smoke konteks runtime sesi: `pnpm test:docker:session-runtime-context` memverifikasi persistensi transkrip konteks runtime tersembunyi plus perbaikan doctor untuk cabang prompt-rewrite terdampak yang terduplikasi.
-- Smoke instalasi global Bun: `bash scripts/e2e/bun-global-install-smoke.sh` mengemas tree saat ini, menginstalnya dengan `bun install -g` di home terisolasi, dan memverifikasi `openclaw infer image providers --json` mengembalikan penyedia gambar bawaan alih-alih menggantung. Gunakan ulang tarball yang sudah dibuat sebelumnya dengan `OPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz`, lewati build host dengan `OPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0`, atau salin `dist/` dari image Docker yang sudah dibangun dengan `OPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local`.
-- Smoke Docker installer: `bash scripts/test-install-sh-docker.sh` berbagi satu cache npm di seluruh kontainer root, update, dan direct-npm. Smoke update default ke npm `latest` sebagai baseline stable sebelum upgrade ke tarball kandidat. Timpa dengan `OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22` secara lokal, atau dengan input `update_baseline_version` milik workflow Install Smoke di GitHub. Pemeriksaan installer non-root menjaga cache npm terisolasi agar entri cache milik root tidak menutupi perilaku instalasi lokal pengguna. Tetapkan `OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache` untuk menggunakan ulang cache root/update/direct-npm pada rerun lokal.
-- Install Smoke CI melewati pembaruan global direct-npm duplikat dengan `OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1`; jalankan skrip secara lokal tanpa env tersebut ketika cakupan langsung `npm install -g` diperlukan.
-- Smoke CLI hapus workspace bersama agen: `pnpm test:docker:agents-delete-shared-workspace` (skrip: `scripts/e2e/agents-delete-shared-workspace-docker.sh`) membangun image Dockerfile root secara default, menyemai dua agen dengan satu workspace dalam home kontainer terisolasi, menjalankan `agents delete --json`, dan memverifikasi JSON valid plus perilaku workspace yang dipertahankan. Gunakan ulang image install-smoke dengan `OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1`.
-- Jaringan Gateway (dua kontainer, autentikasi WS + kesehatan): `pnpm test:docker:gateway-network` (skrip: `scripts/e2e/gateway-network-docker.sh`)
-- Smoke snapshot CDP browser: `pnpm test:docker:browser-cdp-snapshot` (skrip: `scripts/e2e/browser-cdp-snapshot-docker.sh`) membangun image sumber E2E plus lapisan Chromium, memulai Chromium dengan CDP mentah, menjalankan `browser doctor --deep`, dan memverifikasi snapshot peran CDP mencakup URL tautan, clickable yang dipromosikan kursor, ref iframe, dan metadata frame.
-- Regresi penalaran minimal OpenAI Responses web_search: `pnpm test:docker:openai-web-search-minimal` (skrip: `scripts/e2e/openai-web-search-minimal-docker.sh`) menjalankan server OpenAI yang di-mock melalui Gateway, memverifikasi `web_search` menaikkan `reasoning.effort` dari `minimal` ke `low`, lalu memaksa schema penyedia menolak dan memeriksa detail mentah muncul di log Gateway.
-- Bridge channel MCP (Gateway yang disemai + bridge stdio + smoke frame notifikasi Claude mentah): `pnpm test:docker:mcp-channels` (skrip: `scripts/e2e/mcp-channels-docker.sh`)
+- Smoke observabilitas: `pnpm qa:otel:smoke` adalah lane QA privat untuk checkout sumber. Ini sengaja bukan bagian dari lane rilis Docker paket karena tarball npm tidak menyertakan QA Lab.
+- Smoke langsung Open WebUI: `pnpm test:docker:openwebui` (skrip: `scripts/e2e/openwebui-docker.sh`)
+- Wizard onboarding (TTY, scaffolding penuh): `pnpm test:docker:onboard` (skrip: `scripts/e2e/onboard-docker.sh`)
+- Smoke onboarding/channel/agent tarball npm: `pnpm test:docker:npm-onboard-channel-agent` menginstal tarball OpenClaw yang sudah dikemas secara global di Docker, mengonfigurasi OpenAI melalui onboarding env-ref plus Telegram secara default, menjalankan doctor, dan menjalankan satu giliran agen OpenAI tiruan. Gunakan kembali tarball yang sudah dibuat dengan `OPENCLAW_CURRENT_PACKAGE_TGZ=/path/to/openclaw-*.tgz`, lewati rebuild host dengan `OPENCLAW_NPM_ONBOARD_HOST_BUILD=0`, atau ganti channel dengan `OPENCLAW_NPM_ONBOARD_CHANNEL=discord` atau `OPENCLAW_NPM_ONBOARD_CHANNEL=slack`.
+- Smoke peralihan channel pembaruan: `pnpm test:docker:update-channel-switch` menginstal tarball OpenClaw yang sudah dikemas secara global di Docker, beralih dari paket `stable` ke git `dev`, memverifikasi channel yang dipersistenkan dan pekerjaan pascapembaruan Plugin, lalu beralih kembali ke paket `stable` dan memeriksa status pembaruan.
+- Smoke penyintas upgrade: `pnpm test:docker:upgrade-survivor` menginstal tarball OpenClaw yang sudah dikemas di atas fixture pengguna lama yang kotor dengan agen, konfigurasi channel, allowlist Plugin, status dependensi Plugin kedaluwarsa, dan file workspace/sesi yang sudah ada. Ini menjalankan pembaruan paket plus doctor noninteraktif tanpa kunci penyedia langsung atau channel, lalu memulai Gateway loopback dan memeriksa pelestarian konfigurasi/status plus anggaran startup/status.
+- Smoke penyintas upgrade terpublikasi: `pnpm test:docker:published-upgrade-survivor` menginstal `openclaw@latest` secara default, menanam file pengguna yang sudah ada secara realistis, mengonfigurasi baseline tersebut dengan resep perintah bawaan, memvalidasi konfigurasi yang dihasilkan, memperbarui instalasi terpublikasi itu ke tarball kandidat, menjalankan doctor noninteraktif, menulis `.artifacts/upgrade-survivor/summary.json`, lalu memulai Gateway loopback dan memeriksa intent terkonfigurasi, pelestarian status, startup, `/healthz`, `/readyz`, dan anggaran status RPC. Timpa satu baseline dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC`, minta penjadwal agregat memperluas baseline persis dengan `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS` seperti `all-since-2026.4.23`, dan perluas fixture berbentuk isu dengan `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS` seperti `reported-issues`; set reported-issues menyertakan `configured-plugin-installs` untuk perbaikan otomatis instalasi Plugin OpenClaw eksternal. Package Acceptance mengeksposnya sebagai `published_upgrade_survivor_baseline`, `published_upgrade_survivor_baselines`, dan `published_upgrade_survivor_scenarios`; Full Release Validation menggunakan baseline latest default di jalur pemblokir dan memperluas ke all-since/reported-issues hanya untuk `run_release_soak=true` atau `release_profile=full`.
+- Smoke konteks runtime sesi: `pnpm test:docker:session-runtime-context` memverifikasi persistensi transkrip konteks runtime tersembunyi plus perbaikan doctor pada cabang prompt-rewrite duplikat yang terdampak.
+- Smoke instalasi global Bun: `bash scripts/e2e/bun-global-install-smoke.sh` mengemas tree saat ini, menginstalnya dengan `bun install -g` di home terisolasi, dan memverifikasi `openclaw infer image providers --json` mengembalikan penyedia gambar bawaan alih-alih macet. Gunakan kembali tarball yang sudah dibuat dengan `OPENCLAW_BUN_GLOBAL_SMOKE_PACKAGE_TGZ=/path/to/openclaw-*.tgz`, lewati build host dengan `OPENCLAW_BUN_GLOBAL_SMOKE_HOST_BUILD=0`, atau salin `dist/` dari image Docker yang sudah dibuat dengan `OPENCLAW_BUN_GLOBAL_SMOKE_DIST_IMAGE=openclaw-dockerfile-smoke:local`.
+- Smoke Docker penginstal: `bash scripts/test-install-sh-docker.sh` berbagi satu cache npm di seluruh kontainer root, update, dan direct-npm. Smoke update default menggunakan npm `latest` sebagai baseline stable sebelum upgrade ke tarball kandidat. Timpa dengan `OPENCLAW_INSTALL_SMOKE_UPDATE_BASELINE=2026.4.22` secara lokal, atau dengan input `update_baseline_version` milik workflow Install Smoke di GitHub. Pemeriksaan penginstal non-root mempertahankan cache npm terisolasi agar entri cache milik root tidak menutupi perilaku instalasi lokal pengguna. Setel `OPENCLAW_INSTALL_SMOKE_NPM_CACHE_DIR=/path/to/cache` untuk menggunakan kembali cache root/update/direct-npm di rerun lokal.
+- CI Install Smoke melewati pembaruan global direct-npm duplikat dengan `OPENCLAW_INSTALL_SMOKE_SKIP_NPM_GLOBAL=1`; jalankan skrip secara lokal tanpa env itu ketika cakupan direct `npm install -g` diperlukan.
+- Smoke CLI hapus workspace bersama agen: `pnpm test:docker:agents-delete-shared-workspace` (skrip: `scripts/e2e/agents-delete-shared-workspace-docker.sh`) membuat image Dockerfile root secara default, menanam dua agen dengan satu workspace di home kontainer terisolasi, menjalankan `agents delete --json`, dan memverifikasi JSON valid plus perilaku workspace yang dipertahankan. Gunakan kembali image install-smoke dengan `OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_IMAGE=openclaw-dockerfile-smoke:local OPENCLAW_AGENTS_DELETE_SHARED_WORKSPACE_E2E_SKIP_BUILD=1`.
+- Jaringan Gateway (dua kontainer, autentikasi WS + health): `pnpm test:docker:gateway-network` (skrip: `scripts/e2e/gateway-network-docker.sh`)
+- Smoke snapshot CDP browser: `pnpm test:docker:browser-cdp-snapshot` (skrip: `scripts/e2e/browser-cdp-snapshot-docker.sh`) membuat image E2E sumber plus layer Chromium, memulai Chromium dengan CDP mentah, menjalankan `browser doctor --deep`, dan memverifikasi snapshot peran CDP mencakup URL tautan, clickable yang dipromosikan kursor, referensi iframe, dan metadata frame.
+- Regresi reasoning minimal OpenAI Responses web_search: `pnpm test:docker:openai-web-search-minimal` (skrip: `scripts/e2e/openai-web-search-minimal-docker.sh`) menjalankan server OpenAI tiruan melalui Gateway, memverifikasi `web_search` menaikkan `reasoning.effort` dari `minimal` ke `low`, lalu memaksa penolakan skema penyedia dan memeriksa detail mentah muncul di log Gateway.
+- Bridge channel MCP (Gateway tertanam + bridge stdio + smoke notification-frame Claude mentah): `pnpm test:docker:mcp-channels` (skrip: `scripts/e2e/mcp-channels-docker.sh`)
- Tool MCP bundel Pi (server MCP stdio nyata + smoke allow/deny profil Pi tertanam): `pnpm test:docker:pi-bundle-mcp-tools` (skrip: `scripts/e2e/pi-bundle-mcp-tools-docker.sh`)
-- Pembersihan MCP Cron/subagen (Gateway nyata + teardown anak MCP stdio setelah Cron terisolasi dan run subagen one-shot): `pnpm test:docker:cron-mcp-cleanup` (skrip: `scripts/e2e/cron-mcp-cleanup-docker.sh`)
-- Plugin (smoke instalasi/pembaruan untuk path lokal, `file:`, registry npm dengan dependensi yang di-hoist, ref git bergerak, ClawHub kitchen-sink, pembaruan marketplace, dan enable/inspect bundle Claude): `pnpm test:docker:plugins` (skrip: `scripts/e2e/plugins-docker.sh`)
- Tetapkan `OPENCLAW_PLUGINS_E2E_CLAWHUB=0` untuk melewati blok ClawHub, atau timpa pasangan paket/runtime kitchen-sink default dengan `OPENCLAW_PLUGINS_E2E_CLAWHUB_SPEC` dan `OPENCLAW_PLUGINS_E2E_CLAWHUB_ID`. Tanpa `OPENCLAW_CLAWHUB_URL`/`CLAWHUB_URL`, pengujian menggunakan server fixture ClawHub lokal hermetik.
+- Pembersihan MCP Cron/subagen (Gateway nyata + teardown child MCP stdio setelah cron terisolasi dan run subagen sekali jalan): `pnpm test:docker:cron-mcp-cleanup` (skrip: `scripts/e2e/cron-mcp-cleanup-docker.sh`)
+- Plugin (smoke instal/update untuk path lokal, `file:`, registri npm dengan dependensi hoisted, ref git bergerak, kitchen-sink ClawHub, pembaruan marketplace, dan enable/inspect bundel Claude): `pnpm test:docker:plugins` (skrip: `scripts/e2e/plugins-docker.sh`)
+ Setel `OPENCLAW_PLUGINS_E2E_CLAWHUB=0` untuk melewati blok ClawHub, atau timpa pasangan paket/runtime kitchen-sink default dengan `OPENCLAW_PLUGINS_E2E_CLAWHUB_SPEC` dan `OPENCLAW_PLUGINS_E2E_CLAWHUB_ID`. Tanpa `OPENCLAW_CLAWHUB_URL`/`CLAWHUB_URL`, pengujian menggunakan server fixture ClawHub lokal hermetik.
- Smoke pembaruan Plugin tanpa perubahan: `pnpm test:docker:plugin-update` (skrip: `scripts/e2e/plugin-update-unchanged-docker.sh`)
-- Smoke matriks lifecycle Plugin: `pnpm test:docker:plugin-lifecycle-matrix` menginstal tarball OpenClaw yang sudah dikemas dalam kontainer kosong, menginstal Plugin npm, mengaktifkan/menonaktifkan, meng-upgrade dan men-downgrade-nya melalui registry npm lokal, menghapus kode yang terinstal, lalu memverifikasi uninstall tetap menghapus status usang sambil mencatat metrik RSS/CPU untuk setiap fase lifecycle.
+- Smoke matriks siklus hidup Plugin: `pnpm test:docker:plugin-lifecycle-matrix` menginstal tarball OpenClaw yang sudah dikemas di kontainer kosong, menginstal Plugin npm, mengalihkan enable/disable, meng-upgrade dan downgrade melalui registri npm lokal, menghapus kode yang terinstal, lalu memverifikasi uninstall tetap menghapus status kedaluwarsa sambil mencatat metrik RSS/CPU untuk setiap fase siklus hidup.
- Smoke metadata reload konfigurasi: `pnpm test:docker:config-reload` (skrip: `scripts/e2e/config-reload-source-docker.sh`)
-- Plugin: `pnpm test:docker:plugins` mencakup smoke instalasi/pembaruan untuk path lokal, `file:`, registry npm dengan dependensi yang di-hoist, ref git bergerak, fixture ClawHub, pembaruan marketplace, dan enable/inspect bundle Claude. `pnpm test:docker:plugin-update` mencakup perilaku pembaruan tanpa perubahan untuk Plugin yang terinstal. `pnpm test:docker:plugin-lifecycle-matrix` mencakup instalasi Plugin npm yang dilacak sumber dayanya, enable, disable, upgrade, downgrade, dan uninstall kode-hilang.
+- Plugin: `pnpm test:docker:plugins` mencakup smoke install/update untuk path lokal, `file:`, registri npm dengan dependensi hoisted, ref git bergerak, fixture ClawHub, pembaruan marketplace, dan enable/inspect bundel Claude. `pnpm test:docker:plugin-update` mencakup perilaku update tanpa perubahan untuk Plugin yang terinstal. `pnpm test:docker:plugin-lifecycle-matrix` mencakup instalasi, enable, disable, upgrade, downgrade, dan uninstall kode hilang untuk Plugin npm dengan pelacakan sumber daya.
-Untuk membangun sebelumnya dan menggunakan ulang image fungsional bersama secara manual:
+Untuk membuat sebelumnya dan menggunakan kembali image fungsional bersama secara manual:
```bash
OPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local pnpm test:docker:e2e-build
OPENCLAW_DOCKER_E2E_IMAGE=openclaw-docker-e2e-functional:local OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:mcp-channels
```
-Timpa image khusus suite seperti `OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE` tetap menang ketika ditetapkan. Ketika `OPENCLAW_SKIP_DOCKER_BUILD=1` menunjuk ke image bersama jarak jauh, skrip akan menariknya jika belum tersedia lokal. Pengujian Docker QR dan installer mempertahankan Dockerfile masing-masing karena mereka memvalidasi perilaku paket/instalasi, bukan runtime aplikasi yang dibangun bersama.
+Override image khusus suite seperti `OPENCLAW_GATEWAY_NETWORK_E2E_IMAGE` tetap menang saat disetel. Saat `OPENCLAW_SKIP_DOCKER_BUILD=1` menunjuk ke image bersama jarak jauh, skrip menariknya jika belum lokal. Pengujian QR dan Docker penginstal mempertahankan Dockerfile masing-masing karena memvalidasi perilaku paket/instal, bukan runtime aplikasi bawaan bersama.
-Runner Docker live-model juga mengikat-mount checkout saat ini sebagai hanya-baca dan
-men-stage-nya ke workdir sementara di dalam kontainer. Ini menjaga image runtime
-tetap ramping sambil tetap menjalankan Vitest terhadap source/config lokal persis Anda.
+Runner Docker live-model juga melakukan bind-mount checkout saat ini secara read-only dan
+menyiapkannya ke workdir sementara di dalam container. Ini menjaga image runtime
+tetap ramping sambil tetap menjalankan Vitest terhadap source/config lokal Anda yang persis.
Langkah staging melewati cache besar yang hanya lokal dan output build aplikasi seperti
-`.pnpm-store`, `.worktrees`, `__openclaw_vitest__`, serta direktori output `.build`
-lokal aplikasi atau Gradle sehingga run live Docker tidak menghabiskan menit-menit untuk menyalin
+`.pnpm-store`, `.worktrees`, `__openclaw_vitest__`, serta direktori output `.build` lokal aplikasi atau
+Gradle sehingga run live Docker tidak menghabiskan beberapa menit menyalin
artefak khusus mesin.
-Runner tersebut juga menyetel `OPENCLAW_SKIP_CHANNELS=1` agar probe live gateway tidak memulai
-worker kanal Telegram/Discord/dll. sungguhan di dalam kontainer.
+Runner itu juga menetapkan `OPENCLAW_SKIP_CHANNELS=1` sehingga probe live gateway tidak memulai
+worker channel Telegram/Discord/dll. yang nyata di dalam container.
`test:docker:live-models` tetap menjalankan `pnpm test:live`, jadi teruskan juga
`OPENCLAW_LIVE_GATEWAY_*` saat Anda perlu mempersempit atau mengecualikan cakupan live gateway
dari lane Docker tersebut.
-`test:docker:openwebui` adalah smoke kompatibilitas tingkat lebih tinggi: ini memulai
-kontainer Gateway OpenClaw dengan endpoint HTTP yang kompatibel dengan OpenAI diaktifkan,
-memulai kontainer Open WebUI yang dipin terhadap gateway tersebut, masuk melalui
+`test:docker:openwebui` adalah smoke kompatibilitas tingkat lebih tinggi: ia memulai
+container gateway OpenClaw dengan endpoint HTTP yang kompatibel dengan OpenAI diaktifkan,
+memulai container Open WebUI yang dipin terhadap gateway itu, masuk melalui
Open WebUI, memverifikasi `/api/models` mengekspos `openclaw/default`, lalu mengirim
-permintaan chat sungguhan melalui proxy `/api/chat/completions` Open WebUI.
-Run pertama bisa terasa jauh lebih lambat karena Docker mungkin perlu menarik image
+permintaan chat nyata melalui proxy `/api/chat/completions` Open WebUI.
+Run pertama dapat terasa lebih lambat karena Docker mungkin perlu menarik image
Open WebUI dan Open WebUI mungkin perlu menyelesaikan setup cold-start-nya sendiri.
Lane ini mengharapkan kunci model live yang dapat digunakan, dan `OPENCLAW_PROFILE_FILE`
-(`~/.profile` secara default) adalah cara utama untuk menyediakannya dalam run yang di-Docker-kan.
+(`~/.profile` secara default) adalah cara utama untuk menyediakannya dalam run yang dijalankan via Docker.
Run yang berhasil mencetak payload JSON kecil seperti `{ "ok": true, "model":
"openclaw/default", ... }`.
-`test:docker:mcp-channels` sengaja deterministik dan tidak memerlukan akun
-Telegram, Discord, atau iMessage sungguhan. Ini mem-boot kontainer Gateway
-yang sudah di-seed, memulai kontainer kedua yang men-spawn `openclaw mcp serve`, lalu
-memverifikasi penemuan percakapan terarah, pembacaan transkrip, metadata lampiran,
-perilaku antrean event live, perutean kirim keluar, serta notifikasi kanal +
-izin bergaya Claude melalui bridge MCP stdio sungguhan. Pemeriksaan notifikasi
-menginspeksi frame MCP stdio mentah secara langsung sehingga smoke memvalidasi apa yang
-benar-benar dipancarkan bridge, bukan hanya apa yang kebetulan diekspos SDK klien tertentu.
-`test:docker:pi-bundle-mcp-tools` bersifat deterministik dan tidak memerlukan kunci model live.
-Ini membangun image Docker repo, memulai server probe MCP stdio sungguhan
-di dalam kontainer, mematerialisasikan server tersebut melalui runtime MCP bundle Pi
-tersemat, mengeksekusi tool, lalu memverifikasi `coding` dan `messaging` tetap
-mempertahankan tool `bundle-mcp` sementara `minimal` dan `tools.deny: ["bundle-mcp"]` memfilternya.
-`test:docker:cron-mcp-cleanup` bersifat deterministik dan tidak memerlukan kunci model live.
-Ini memulai Gateway yang sudah di-seed dengan server probe MCP stdio sungguhan, menjalankan
-giliran cron terisolasi dan giliran child sekali jalan `/subagents spawn`, lalu memverifikasi
+`test:docker:mcp-channels` sengaja deterministik dan tidak membutuhkan akun
+Telegram, Discord, atau iMessage nyata. Ia mem-boot container Gateway yang sudah di-seed,
+memulai container kedua yang menjalankan `openclaw mcp serve`, lalu
+memverifikasi penemuan percakapan yang dirutekan, pembacaan transkrip, metadata lampiran,
+perilaku antrean event live, routing pengiriman outbound, serta notifikasi channel +
+izin bergaya Claude melalui bridge MCP stdio nyata. Pemeriksaan notifikasi
+memeriksa frame MCP stdio mentah secara langsung sehingga smoke memvalidasi apa yang
+benar-benar dipancarkan bridge, bukan hanya apa yang kebetulan ditampilkan SDK klien tertentu.
+`test:docker:pi-bundle-mcp-tools` bersifat deterministik dan tidak membutuhkan kunci model live.
+Ia membangun image Docker repo, memulai server probe MCP stdio nyata
+di dalam container, mewujudkan server itu melalui runtime MCP bundle Pi yang tertanam,
+mengeksekusi tool, lalu memverifikasi `coding` dan `messaging` mempertahankan
+tool `bundle-mcp` sementara `minimal` dan `tools.deny: ["bundle-mcp"]` memfilternya.
+`test:docker:cron-mcp-cleanup` bersifat deterministik dan tidak membutuhkan kunci model live.
+Ia memulai Gateway yang sudah di-seed dengan server probe MCP stdio nyata, menjalankan
+turn cron terisolasi dan turn child sekali jalan `/subagents spawn`, lalu memverifikasi
proses child MCP keluar setelah setiap run.
Smoke thread ACP bahasa biasa manual (bukan CI):
@@ -709,18 +722,18 @@ Env var yang berguna:
- `OPENCLAW_CONFIG_DIR=...` (default: `~/.openclaw`) di-mount ke `/home/node/.openclaw`
- `OPENCLAW_WORKSPACE_DIR=...` (default: `~/.openclaw/workspace`) di-mount ke `/home/node/.openclaw/workspace`
-- `OPENCLAW_PROFILE_FILE=...` (default: `~/.profile`) di-mount ke `/home/node/.profile` dan di-source sebelum menjalankan test
+- `OPENCLAW_PROFILE_FILE=...` (default: `~/.profile`) di-mount ke `/home/node/.profile` dan di-source sebelum menjalankan pengujian
- `OPENCLAW_DOCKER_PROFILE_ENV_ONLY=1` untuk memverifikasi hanya env var yang di-source dari `OPENCLAW_PROFILE_FILE`, menggunakan direktori config/workspace sementara dan tanpa mount auth CLI eksternal
-- `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` (default: `~/.cache/openclaw/docker-cli-tools`) di-mount ke `/home/node/.npm-global` untuk install CLI yang di-cache di dalam Docker
-- Direktori/file auth CLI eksternal di bawah `$HOME` di-mount hanya-baca di bawah `/host-auth...`, lalu disalin ke `/home/node/...` sebelum test dimulai
+- `OPENCLAW_DOCKER_CLI_TOOLS_DIR=...` (default: `~/.cache/openclaw/docker-cli-tools`) di-mount ke `/home/node/.npm-global` untuk instalasi CLI yang di-cache di dalam Docker
+- Direktori/file auth CLI eksternal di bawah `$HOME` di-mount read-only di bawah `/host-auth...`, lalu disalin ke `/home/node/...` sebelum pengujian dimulai
- Direktori default: `.minimax`
- File default: `~/.codex/auth.json`, `~/.codex/config.toml`, `.claude.json`, `~/.claude/.credentials.json`, `~/.claude/settings.json`, `~/.claude/settings.local.json`
- - Run penyedia yang dipersempit hanya me-mount direktori/file yang diperlukan dan diinferensikan dari `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS`
+ - Run provider yang dipersempit hanya me-mount direktori/file yang diperlukan yang disimpulkan dari `OPENCLAW_LIVE_PROVIDERS` / `OPENCLAW_LIVE_GATEWAY_PROVIDERS`
- Timpa secara manual dengan `OPENCLAW_DOCKER_AUTH_DIRS=all`, `OPENCLAW_DOCKER_AUTH_DIRS=none`, atau daftar koma seperti `OPENCLAW_DOCKER_AUTH_DIRS=.claude,.codex`
- `OPENCLAW_LIVE_GATEWAY_MODELS=...` / `OPENCLAW_LIVE_MODELS=...` untuk mempersempit run
-- `OPENCLAW_LIVE_GATEWAY_PROVIDERS=...` / `OPENCLAW_LIVE_PROVIDERS=...` untuk memfilter penyedia di dalam kontainer
-- `OPENCLAW_SKIP_DOCKER_BUILD=1` untuk menggunakan kembali image `openclaw:local-live` yang ada untuk rerun yang tidak memerlukan rebuild
-- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` untuk memastikan kredensial berasal dari penyimpanan profil (bukan env)
+- `OPENCLAW_LIVE_GATEWAY_PROVIDERS=...` / `OPENCLAW_LIVE_PROVIDERS=...` untuk memfilter provider di dalam container
+- `OPENCLAW_SKIP_DOCKER_BUILD=1` untuk menggunakan ulang image `openclaw:local-live` yang sudah ada untuk rerun yang tidak membutuhkan rebuild
+- `OPENCLAW_LIVE_REQUIRE_PROFILE_KEYS=1` untuk memastikan kredensial berasal dari store profil (bukan env)
- `OPENCLAW_OPENWEBUI_MODEL=...` untuk memilih model yang diekspos oleh gateway untuk smoke Open WebUI
- `OPENCLAW_OPENWEBUI_PROMPT=...` untuk menimpa prompt pemeriksaan nonce yang digunakan oleh smoke Open WebUI
- `OPENWEBUI_IMAGE=...` untuk menimpa tag image Open WebUI yang dipin
@@ -728,105 +741,105 @@ Env var yang berguna:
## Sanity docs
Jalankan pemeriksaan docs setelah edit docs: `pnpm check:docs`.
-Jalankan validasi anchor Mintlify penuh saat Anda juga memerlukan pemeriksaan heading dalam halaman: `pnpm docs:check-links:anchors`.
+Jalankan validasi anchor Mintlify penuh saat Anda juga membutuhkan pemeriksaan heading dalam halaman: `pnpm docs:check-links:anchors`.
## Regresi offline (aman untuk CI)
-Ini adalah regresi “pipeline sungguhan” tanpa penyedia sungguhan:
+Ini adalah regresi “pipeline nyata” tanpa provider nyata:
-- Pemanggilan tool Gateway (mock OpenAI, gateway + agent loop sungguhan): `src/gateway/gateway.test.ts` (kasus: "runs a mock OpenAI tool call end-to-end via gateway agent loop")
-- Wizard Gateway (WS `wizard.start`/`wizard.next`, menulis config + auth ditegakkan): `src/gateway/gateway.test.ts` (kasus: "runs wizard over ws and writes auth token config")
+- Pemanggilan tool Gateway (OpenAI mock, gateway nyata + loop agent): `src/gateway/gateway.test.ts` (case: "runs a mock OpenAI tool call end-to-end via gateway agent loop")
+- Wizard Gateway (WS `wizard.start`/`wizard.next`, menulis config + auth diberlakukan): `src/gateway/gateway.test.ts` (case: "runs wizard over ws and writes auth token config")
-## Eval keandalan agen (skills)
+## Eval keandalan agent (skills)
-Kita sudah memiliki beberapa test aman untuk CI yang berperilaku seperti “eval keandalan agen”:
+Kita sudah memiliki beberapa pengujian aman untuk CI yang berperilaku seperti “eval keandalan agent”:
-- Pemanggilan tool mock melalui gateway + agent loop sungguhan (`src/gateway/gateway.test.ts`).
+- Pemanggilan tool mock melalui gateway nyata + loop agent (`src/gateway/gateway.test.ts`).
- Flow wizard end-to-end yang memvalidasi wiring sesi dan efek config (`src/gateway/gateway.test.ts`).
-Yang masih hilang untuk skills (lihat [Skills](/id/tools/skills)):
+Yang masih kurang untuk skills (lihat [Skills](/id/tools/skills)):
-- **Pengambilan keputusan:** saat skills dicantumkan dalam prompt, apakah agen memilih skill yang tepat (atau menghindari yang tidak relevan)?
-- **Kepatuhan:** apakah agen membaca `SKILL.md` sebelum digunakan dan mengikuti langkah/argumen yang diwajibkan?
-- **Kontrak workflow:** skenario multi-giliran yang mengassert urutan tool, penerusan riwayat sesi, dan batas sandbox.
+- **Pengambilan keputusan:** saat skills tercantum dalam prompt, apakah agent memilih skill yang tepat (atau menghindari yang tidak relevan)?
+- **Kepatuhan:** apakah agent membaca `SKILL.md` sebelum digunakan dan mengikuti langkah/argumen yang diwajibkan?
+- **Kontrak workflow:** skenario multi-turn yang menegaskan urutan tool, carryover riwayat sesi, dan batas sandbox.
-Eval masa depan sebaiknya tetap deterministik terlebih dahulu:
+Eval mendatang harus tetap deterministik terlebih dahulu:
-- Runner skenario menggunakan penyedia mock untuk mengassert pemanggilan tool + urutan, pembacaan file skill, dan wiring sesi.
-- Suite kecil skenario yang berfokus pada skill (gunakan vs hindari, gating, prompt injection).
+- Runner skenario yang menggunakan provider mock untuk menegaskan panggilan tool + urutan, pembacaan file skill, dan wiring sesi.
+- Suite kecil skenario berfokus skill (gunakan vs hindari, gating, prompt injection).
- Eval live opsional (opt-in, dibatasi env) hanya setelah suite aman untuk CI tersedia.
-## Test kontrak (bentuk plugin dan kanal)
+## Pengujian kontrak (bentuk plugin dan channel)
-Test kontrak memverifikasi bahwa setiap plugin dan kanal terdaftar mematuhi
-kontrak interface-nya. Test ini mengiterasi semua plugin yang ditemukan dan menjalankan suite
+Pengujian kontrak memverifikasi bahwa setiap plugin dan channel terdaftar mematuhi
+kontrak interface-nya. Pengujian ini mengiterasi semua plugin yang ditemukan dan menjalankan suite
assertion bentuk dan perilaku. Lane unit `pnpm test` default sengaja
-melewati file seam bersama dan smoke ini; jalankan perintah kontrak secara eksplisit
-saat Anda menyentuh permukaan kanal atau penyedia bersama.
+melewati file smoke dan seam bersama ini; jalankan perintah kontrak secara eksplisit
+saat Anda menyentuh surface channel atau provider bersama.
### Perintah
- Semua kontrak: `pnpm test:contracts`
-- Hanya kontrak kanal: `pnpm test:contracts:channels`
-- Hanya kontrak penyedia: `pnpm test:contracts:plugins`
+- Hanya kontrak channel: `pnpm test:contracts:channels`
+- Hanya kontrak provider: `pnpm test:contracts:plugins`
-### Kontrak kanal
+### Kontrak channel
Terletak di `src/channels/plugins/contracts/*.contract.test.ts`:
-- **plugin** - Bentuk plugin dasar (id, nama, kapabilitas)
+- **plugin** - Bentuk plugin dasar (id, nama, capabilities)
- **setup** - Kontrak wizard setup
- **session-binding** - Perilaku binding sesi
- **outbound-payload** - Struktur payload pesan
-- **inbound** - Penanganan pesan masuk
-- **actions** - Handler aksi kanal
+- **inbound** - Penanganan pesan inbound
+- **actions** - Handler aksi channel
- **threading** - Penanganan ID thread
- **directory** - API direktori/roster
- **group-policy** - Penegakan kebijakan grup
-### Kontrak status penyedia
+### Kontrak status provider
Terletak di `src/plugins/contracts/*.contract.test.ts`.
-- **status** - Probe status kanal
-- **registry** - Bentuk registry Plugin
+- **status** - Probe status channel
+- **registry** - Bentuk registry plugin
-### Kontrak penyedia
+### Kontrak provider
Terletak di `src/plugins/contracts/*.contract.test.ts`:
- **auth** - Kontrak flow auth
- **auth-choice** - Pilihan/seleksi auth
- **catalog** - API katalog model
-- **discovery** - Penemuan Plugin
-- **loader** - Pemuatan Plugin
-- **runtime** - Runtime penyedia
-- **shape** - Bentuk/interface Plugin
+- **discovery** - Penemuan plugin
+- **loader** - Pemuatan plugin
+- **runtime** - Runtime provider
+- **shape** - Bentuk/interface plugin
- **wizard** - Wizard setup
### Kapan menjalankan
- Setelah mengubah export atau subpath plugin-sdk
-- Setelah menambahkan atau memodifikasi plugin kanal atau penyedia
-- Setelah refactor registrasi atau penemuan plugin
+- Setelah menambahkan atau memodifikasi channel atau provider plugin
+- Setelah merefaktor registrasi atau penemuan plugin
-Test kontrak berjalan di CI dan tidak memerlukan kunci API sungguhan.
+Pengujian kontrak berjalan di CI dan tidak memerlukan kunci API nyata.
## Menambahkan regresi (panduan)
-Saat Anda memperbaiki masalah penyedia/model yang ditemukan secara live:
+Saat Anda memperbaiki masalah provider/model yang ditemukan secara live:
-- Tambahkan regresi aman untuk CI jika memungkinkan (penyedia mock/stub, atau tangkap transformasi bentuk permintaan persisnya)
-- Jika secara inheren hanya live (batas rate, kebijakan auth), jaga test live tetap sempit dan opt-in melalui env var
-- Utamakan menargetkan lapisan terkecil yang menangkap bug:
- - bug konversi/replay permintaan penyedia → test model langsung
- - bug pipeline sesi/riwayat/tool gateway → smoke live gateway atau test mock gateway aman untuk CI
+- Tambahkan regresi aman untuk CI jika memungkinkan (provider mock/stub, atau tangkap transformasi bentuk permintaan yang persis)
+- Jika secara inheren hanya live (rate limit, kebijakan auth), pertahankan pengujian live tetap sempit dan opt-in via env var
+- Lebih pilih menargetkan layer terkecil yang menangkap bug:
+ - bug konversi/replay permintaan provider → pengujian model langsung
+ - bug pipeline sesi/riwayat/tool gateway → smoke live gateway atau pengujian mock gateway aman untuk CI
- Guardrail traversal SecretRef:
- - `src/secrets/exec-secret-ref-id-parity.test.ts` menurunkan satu target sampel per kelas SecretRef dari metadata registry (`listSecretTargetRegistryEntries()`), lalu mengassert id exec segmen traversal ditolak.
- - Jika Anda menambahkan keluarga target SecretRef `includeInPlan` baru di `src/secrets/target-registry-data.ts`, perbarui `classifyTargetClass` dalam test tersebut. Test sengaja gagal pada id target yang tidak terklasifikasi agar kelas baru tidak bisa dilewati diam-diam.
+ - `src/secrets/exec-secret-ref-id-parity.test.ts` menurunkan satu target sampel per kelas SecretRef dari metadata registry (`listSecretTargetRegistryEntries()`), lalu menegaskan exec id segmen traversal ditolak.
+ - Jika Anda menambahkan keluarga target SecretRef `includeInPlan` baru di `src/secrets/target-registry-data.ts`, perbarui `classifyTargetClass` dalam pengujian itu. Pengujian itu sengaja gagal pada id target yang tidak terklasifikasi sehingga kelas baru tidak dapat dilewati diam-diam.
## Terkait
-- [Menguji live](/id/help/testing-live)
-- [Menguji pembaruan dan plugin](/id/help/testing-updates-plugins)
+- [Pengujian live](/id/help/testing-live)
+- [Pengujian update dan plugin](/id/help/testing-updates-plugins)
- [CI](/id/ci)
diff --git a/docs/id/plugins/bundles.md b/docs/id/plugins/bundles.md
index 3c7145306..dc6c88d65 100644
--- a/docs/id/plugins/bundles.md
+++ b/docs/id/plugins/bundles.md
@@ -1,35 +1,35 @@
---
read_when:
- - Anda ingin menginstal bundel yang kompatibel dengan Codex, Claude, atau Cursor
+ - Anda ingin menginstal paket yang kompatibel dengan Codex, Claude, atau Cursor
- Anda perlu memahami bagaimana OpenClaw memetakan konten bundel ke fitur bawaan
- - Anda sedang menelusuri masalah deteksi bundel atau kemampuan yang hilang
-summary: Instal dan gunakan bundel Codex, Claude, dan Cursor sebagai Plugin OpenClaw
+ - Anda sedang men-debug deteksi bundel atau kapabilitas yang hilang
+summary: Instal dan gunakan bundle Codex, Claude, dan Cursor sebagai Plugin OpenClaw
title: Bundel Plugin
x-i18n:
- generated_at: "2026-05-02T09:26:29Z"
+ generated_at: "2026-05-05T01:47:50Z"
model: gpt-5.5
provider: openai
- source_hash: 4b949ad70881714a30ab136261441687b439e39b516638ffa052efeab6b75bd4
+ source_hash: 5bc06300e765e2faaf51800462003e242d29d4102ac9feaa47f86d4ad35bf157
source_path: plugins/bundles.md
workflow: 16
---
-OpenClaw dapat menginstal plugin dari tiga ekosistem eksternal: **Codex**, **Claude**,
-dan **Cursor**. Ini disebut **bundles** — paket konten dan metadata yang
-dipetakan OpenClaw ke fitur native seperti skills, hooks, dan alat MCP.
+OpenClaw dapat menginstal Plugin dari tiga ekosistem eksternal: **Codex**, **Claude**,
+dan **Cursor**. Ini disebut **bundle** — paket konten dan metadata yang
+dipetakan OpenClaw ke fitur native seperti skill, hook, dan tool MCP.
- Bundles **tidak** sama dengan plugin native OpenClaw. Plugin native berjalan
- dalam proses dan dapat mendaftarkan capability apa pun. Bundles adalah paket konten dengan
+ Bundle **tidak** sama dengan Plugin native OpenClaw. Plugin native berjalan
+ dalam proses dan dapat mendaftarkan kemampuan apa pun. Bundle adalah paket konten dengan
pemetaan fitur selektif dan batas kepercayaan yang lebih sempit.
-## Mengapa bundles ada
+## Mengapa bundle ada
-Banyak plugin berguna diterbitkan dalam format Codex, Claude, atau Cursor. Alih-alih
-mengharuskan pembuat menulis ulang plugin tersebut sebagai plugin native OpenClaw, OpenClaw
-mendeteksi format ini dan memetakan konten yang didukungnya ke rangkaian fitur
-native. Artinya, Anda dapat menginstal paket perintah Claude atau bundle skill Codex
+Banyak Plugin berguna diterbitkan dalam format Codex, Claude, atau Cursor. Alih-alih
+mengharuskan pembuatnya menulis ulang sebagai Plugin native OpenClaw, OpenClaw
+mendeteksi format ini dan memetakan konten yang didukung ke kumpulan fitur
+native. Ini berarti Anda dapat menginstal paket perintah Claude atau bundle skill Codex
dan langsung menggunakannya.
## Instal bundle
@@ -56,7 +56,7 @@ dan langsung menggunakannya.
openclaw plugins inspect
```
- Bundles ditampilkan sebagai `Format: bundle` dengan subtype `codex`, `claude`, atau `cursor`.
+ Bundle ditampilkan sebagai `Format: bundle` dengan subtipe `codex`, `claude`, atau `cursor`.
@@ -65,26 +65,26 @@ dan langsung menggunakannya.
openclaw gateway restart
```
- Fitur yang dipetakan (skills, hooks, alat MCP, default LSP) tersedia di sesi berikutnya.
+ Fitur yang dipetakan (skill, hook, tool MCP, default LSP) tersedia di sesi berikutnya.
-## Apa yang dipetakan OpenClaw dari bundles
+## Yang dipetakan OpenClaw dari bundle
-Tidak setiap fitur bundle berjalan di OpenClaw saat ini. Berikut yang berfungsi dan yang
+Tidak semua fitur bundle berjalan di OpenClaw saat ini. Berikut yang berfungsi dan yang
terdeteksi tetapi belum dihubungkan.
-### Didukung saat ini
+### Didukung sekarang
-| Fitur | Cara pemetaannya | Berlaku untuk |
-| ------------- | -------------------------------------------------------------------------------------------- | -------------- |
-| Konten skill | Root skill bundle dimuat sebagai skill OpenClaw normal | Semua format |
-| Perintah | `commands/` dan `.cursor/commands/` diperlakukan sebagai root skill | Claude, Cursor |
-| Paket hook | Layout `HOOK.md` + `handler.ts` bergaya OpenClaw | Codex |
-| Alat MCP | Konfigurasi MCP bundle digabungkan ke pengaturan Pi tertanam; server stdio dan HTTP yang didukung dimuat | Semua format |
-| Server LSP | `.lsp.json` Claude dan `lspServers` yang dideklarasikan manifest digabungkan ke default LSP Pi tertanam | Claude |
-| Pengaturan | `settings.json` Claude diimpor sebagai default Pi tertanam | Claude |
+| Fitur | Cara pemetaannya | Berlaku untuk |
+| ------------- | ------------------------------------------------------------------------------------------- | -------------- |
+| Konten skill | Root skill bundle dimuat sebagai skill OpenClaw normal | Semua format |
+| Perintah | `commands/` dan `.cursor/commands/` diperlakukan sebagai root skill | Claude, Cursor |
+| Paket hook | Tata letak `HOOK.md` + `handler.ts` bergaya OpenClaw | Codex |
+| Tool MCP | Konfigurasi MCP bundle digabungkan ke pengaturan Pi tertanam; server stdio dan HTTP yang didukung dimuat | Semua format |
+| Server LSP | `.lsp.json` Claude dan `lspServers` yang dideklarasikan manifes digabungkan ke default LSP Pi tertanam | Claude |
+| Pengaturan | `settings.json` Claude diimpor sebagai default Pi tertanam | Claude |
#### Konten skill
@@ -92,13 +92,13 @@ terdeteksi tetapi belum dihubungkan.
- root `commands` Claude diperlakukan sebagai root skill tambahan
- root `.cursor/commands` Cursor diperlakukan sebagai root skill tambahan
-Artinya file perintah markdown Claude bekerja melalui loader skill OpenClaw
+Ini berarti file perintah markdown Claude bekerja melalui pemuat skill OpenClaw
normal. Markdown perintah Cursor bekerja melalui jalur yang sama.
#### Paket hook
-- root hook bundle berfungsi **hanya** ketika menggunakan layout hook-pack OpenClaw
- normal. Saat ini ini terutama kasus yang kompatibel dengan Codex:
+- root hook bundle berfungsi **hanya** saat menggunakan tata letak hook-pack
+ OpenClaw normal. Saat ini ini terutama kasus yang kompatibel dengan Codex:
- `HOOK.md`
- `handler.ts` atau `handler.js`
@@ -107,14 +107,14 @@ normal. Markdown perintah Cursor bekerja melalui jalur yang sama.
- bundle yang diaktifkan dapat menyumbangkan konfigurasi server MCP
- OpenClaw menggabungkan konfigurasi MCP bundle ke pengaturan Pi tertanam efektif sebagai
`mcpServers`
-- OpenClaw mengekspos alat MCP bundle yang didukung selama giliran agen Pi tertanam dengan
- meluncurkan server stdio atau menyambung ke server HTTP
-- profil alat `coding` dan `messaging` menyertakan alat MCP bundle secara
- default; gunakan `tools.deny: ["bundle-mcp"]` untuk menolak ikut serta bagi agen atau gateway
+- OpenClaw mengekspos tool MCP bundle yang didukung selama giliran agen Pi tertanam dengan
+ meluncurkan server stdio atau tersambung ke server HTTP
+- profil tool `coding` dan `messaging` menyertakan tool MCP bundle secara
+ default; gunakan `tools.deny: ["bundle-mcp"]` untuk tidak ikut serta bagi agen atau Gateway
- pengaturan Pi lokal proyek tetap berlaku setelah default bundle, sehingga pengaturan
- workspace dapat mengganti entri MCP bundle saat diperlukan
-- katalog alat MCP bundle diurutkan secara deterministik sebelum pendaftaran, sehingga
- perubahan urutan `listTools()` upstream tidak mengacak blok alat prompt-cache
+ workspace dapat menimpa entri MCP bundle saat diperlukan
+- katalog tool MCP bundle diurutkan secara deterministik sebelum pendaftaran, sehingga
+ perubahan urutan `listTools()` upstream tidak mengacaukan blok tool cache prompt
##### Transport
@@ -136,7 +136,7 @@ Server MCP dapat menggunakan transport stdio atau HTTP:
}
```
-**HTTP** tersambung ke server MCP yang sedang berjalan melalui `sse` secara default, atau `streamable-http` jika diminta:
+**HTTP** tersambung ke server MCP yang sedang berjalan melalui `sse` secara default, atau `streamable-http` saat diminta:
```json
{
@@ -155,40 +155,40 @@ Server MCP dapat menggunakan transport stdio atau HTTP:
}
```
-- `transport` dapat diatur ke `"streamable-http"` atau `"sse"`; jika dihilangkan, OpenClaw menggunakan `sse`
-- `type: "http"` adalah bentuk hilir native CLI; gunakan `transport: "streamable-http"` dalam konfigurasi OpenClaw. `openclaw mcp set` dan `openclaw doctor --fix` menormalkan alias umum.
+- `transport` dapat diatur ke `"streamable-http"` atau `"sse"`; saat dihilangkan, OpenClaw menggunakan `sse`
+- `type: "http"` adalah bentuk downstream native CLI; gunakan `transport: "streamable-http"` dalam konfigurasi OpenClaw. `openclaw mcp set` dan `openclaw doctor --fix` menormalkan alias umum.
- hanya skema URL `http:` dan `https:` yang diizinkan
- nilai `headers` mendukung interpolasi `${ENV_VAR}`
- entri server dengan `command` dan `url` sekaligus ditolak
-- kredensial URL (userinfo dan parameter kueri) disamarkan dari deskripsi alat
+- kredensial URL (userinfo dan parameter kueri) disamarkan dari deskripsi tool
dan log
-- `connectionTimeoutMs` mengganti timeout koneksi default 30 detik untuk
+- `connectionTimeoutMs` menimpa timeout koneksi default 30 detik untuk
transport stdio dan HTTP
-##### Penamaan alat
+##### Penamaan tool
-OpenClaw mendaftarkan alat MCP bundle dengan nama yang aman untuk provider dalam bentuk
-`serverName__toolName`. Misalnya, server dengan key `"vigil-harbor"` yang mengekspos
-alat `memory_search` didaftarkan sebagai `vigil-harbor__memory_search`.
+OpenClaw mendaftarkan tool MCP bundle dengan nama yang aman untuk penyedia dalam bentuk
+`serverName__toolName`. Misalnya, server dengan kunci `"vigil-harbor"` yang mengekspos tool
+`memory_search` didaftarkan sebagai `vigil-harbor__memory_search`.
- karakter di luar `A-Za-z0-9_-` diganti dengan `-`
- prefiks server dibatasi hingga 30 karakter
-- nama alat lengkap dibatasi hingga 64 karakter
-- nama server kosong fallback ke `mcp`
+- nama tool lengkap dibatasi hingga 64 karakter
+- nama server kosong menggunakan fallback `mcp`
- nama tersanitasi yang bertabrakan dibedakan dengan sufiks numerik
-- urutan alat akhir yang diekspos deterministik berdasarkan nama aman agar giliran Pi
- berulang tetap stabil cache
-- pemfilteran profil memperlakukan semua alat dari satu server MCP bundle sebagai milik plugin
+- urutan tool akhir yang diekspos deterministik berdasarkan nama aman untuk menjaga giliran Pi
+ berulang tetap stabil terhadap cache
+- pemfilteran profil memperlakukan semua tool dari satu server MCP bundle sebagai milik Plugin
oleh `bundle-mcp`, sehingga allowlist dan daftar deny profil dapat menyertakan
- nama alat terekspos individual atau key plugin `bundle-mcp`
+ nama tool terekspos individual atau kunci Plugin `bundle-mcp`
#### Pengaturan Pi tertanam
- `settings.json` Claude diimpor sebagai pengaturan Pi tertanam default saat
bundle diaktifkan
-- OpenClaw membersihkan key override shell sebelum menerapkannya
+- OpenClaw membersihkan kunci override shell sebelum menerapkannya
-Key yang disanitasi:
+Kunci yang dibersihkan:
- `shellPath`
- `shellCommandPrefix`
@@ -196,28 +196,28 @@ Key yang disanitasi:
#### LSP Pi tertanam
- bundle Claude yang diaktifkan dapat menyumbangkan konfigurasi server LSP
-- OpenClaw memuat `.lsp.json` ditambah path `lspServers` yang dideklarasikan manifest
+- OpenClaw memuat `.lsp.json` plus jalur `lspServers` yang dideklarasikan manifes
- konfigurasi LSP bundle digabungkan ke default LSP Pi tertanam yang efektif
-- hanya server LSP berbasis stdio yang didukung yang dapat dijalankan saat ini; transport
- yang tidak didukung tetap muncul di `openclaw plugins inspect `
+- hanya server LSP berbasis stdio yang didukung yang dapat dijalankan saat ini; transport yang tidak didukung
+ tetap muncul di `openclaw plugins inspect `
### Terdeteksi tetapi tidak dieksekusi
Ini dikenali dan ditampilkan dalam diagnostik, tetapi OpenClaw tidak menjalankannya:
-- `agents`, automasi `hooks.json`, `outputStyles` Claude
+- `agents`, otomasi `hooks.json`, `outputStyles` Claude
- `.cursor/agents`, `.cursor/hooks.json`, `.cursor/rules` Cursor
-- metadata inline/app Codex di luar pelaporan capability
+- metadata inline/app Codex di luar pelaporan kemampuan
## Format bundle
- Marker: `.codex-plugin/plugin.json`
+ Penanda: `.codex-plugin/plugin.json`
Konten opsional: `skills/`, `hooks/`, `.mcp.json`, `.app.json`
- Bundle Codex paling cocok dengan OpenClaw ketika menggunakan root skill dan direktori
+ Bundle Codex paling cocok dengan OpenClaw saat menggunakan root skill dan direktori
hook-pack bergaya OpenClaw (`HOOK.md` + `handler.ts`).
@@ -225,22 +225,22 @@ Ini dikenali dan ditampilkan dalam diagnostik, tetapi OpenClaw tidak menjalankan
Dua mode deteksi:
- - **Berbasis manifest:** `.claude-plugin/plugin.json`
- - **Tanpa manifest:** layout Claude default (`skills/`, `commands/`, `agents/`, `hooks/`, `.mcp.json`, `.lsp.json`, `settings.json`)
+ - **Berbasis manifes:** `.claude-plugin/plugin.json`
+ - **Tanpa manifes:** tata letak Claude default (`skills/`, `commands/`, `agents/`, `hooks/`, `.mcp.json`, `.lsp.json`, `settings.json`)
Perilaku khusus Claude:
- `commands/` diperlakukan sebagai konten skill
- - `settings.json` diimpor ke pengaturan Pi tertanam (key override shell disanitasi)
- - `.mcp.json` mengekspos alat stdio yang didukung ke Pi tertanam
- - `.lsp.json` ditambah path `lspServers` yang dideklarasikan manifest dimuat ke default LSP Pi tertanam
+ - `settings.json` diimpor ke pengaturan Pi tertanam (kunci override shell dibersihkan)
+ - `.mcp.json` mengekspos tool stdio yang didukung ke Pi tertanam
+ - `.lsp.json` plus jalur `lspServers` yang dideklarasikan manifes dimuat ke default LSP Pi tertanam
- `hooks/hooks.json` terdeteksi tetapi tidak dieksekusi
- - Path komponen kustom dalam manifest bersifat aditif (memperluas default, bukan menggantikannya)
+ - Jalur komponen kustom dalam manifes bersifat aditif (memperluas default, bukan menggantikannya)
- Marker: `.cursor-plugin/plugin.json`
+ Penanda: `.cursor-plugin/plugin.json`
Konten opsional: `skills/`, `.cursor/commands/`, `.cursor/agents/`, `.cursor/rules/`, `.cursor/hooks.json`, `.mcp.json`
@@ -252,44 +252,44 @@ Ini dikenali dan ditampilkan dalam diagnostik, tetapi OpenClaw tidak menjalankan
## Prioritas deteksi
-OpenClaw memeriksa format plugin native terlebih dahulu:
+OpenClaw memeriksa format Plugin native terlebih dahulu:
-1. `openclaw.plugin.json` atau `package.json` valid dengan `openclaw.extensions` — diperlakukan sebagai **plugin native**
-2. Marker bundle (`.codex-plugin/`, `.claude-plugin/`, atau layout default Claude/Cursor) — diperlakukan sebagai **bundle**
+1. `openclaw.plugin.json` atau `package.json` yang valid dengan `openclaw.extensions` — diperlakukan sebagai **Plugin native**
+2. Penanda bundle (`.codex-plugin/`, `.claude-plugin/`, atau tata letak Claude/Cursor default) — diperlakukan sebagai **bundle**
-Jika direktori memuat keduanya, OpenClaw menggunakan jalur native. Ini mencegah
-paket berformat ganda diinstal sebagian sebagai bundles.
+Jika sebuah direktori berisi keduanya, OpenClaw menggunakan jalur native. Ini mencegah
+paket format ganda diinstal sebagian sebagai bundle.
## Dependensi runtime dan pembersihan
- Bundle kompatibel pihak ketiga tidak mendapatkan perbaikan `npm install` saat startup. Bundle tersebut
harus diinstal melalui `openclaw plugins install` dan menyertakan semua yang
- dibutuhkan di direktori plugin terinstal.
-- Plugin bundled milik OpenClaw dikirim ringan dalam core atau
- dapat diunduh melalui penginstal plugin. Startup Gateway tidak pernah menjalankan
- package manager untuk plugin tersebut.
+ dibutuhkan di direktori Plugin terinstal.
+- Plugin bundle milik OpenClaw dikirim ringan di core atau
+ dapat diunduh melalui penginstal Plugin. Startup Gateway tidak pernah menjalankan
+ manajer paket untuknya.
- `openclaw doctor --fix` menghapus direktori dependensi staged lama dan dapat
- menginstal plugin unduhan terkonfigurasi yang hilang dari indeks plugin
- lokal.
+ memulihkan Plugin yang dapat diunduh yang hilang dari indeks Plugin lokal saat
+ konfigurasi merujuknya.
## Keamanan
-Bundles memiliki batas kepercayaan yang lebih sempit daripada plugin native:
+Bundle memiliki batas kepercayaan yang lebih sempit daripada Plugin native:
- OpenClaw **tidak** memuat modul runtime bundle arbitrer dalam proses
-- Path Skills dan hook-pack harus tetap berada di dalam root plugin (diperiksa batasnya)
+- Skills dan jalur hook-pack harus tetap berada di dalam root Plugin (diperiksa batasnya)
- File pengaturan dibaca dengan pemeriksaan batas yang sama
- Server MCP stdio yang didukung dapat diluncurkan sebagai subprocess
-Ini membuat bundles lebih aman secara default, tetapi Anda tetap harus memperlakukan bundle
-pihak ketiga sebagai konten tepercaya untuk fitur yang memang dieksposnya.
+Ini membuat bundle lebih aman secara default, tetapi Anda tetap harus memperlakukan bundle
+pihak ketiga sebagai konten tepercaya untuk fitur yang dieksposnya.
## Pemecahan masalah
-
- Jalankan `openclaw plugins inspect `. Jika capability terdaftar tetapi ditandai sebagai
- belum dihubungkan, itu adalah batas produk — bukan instalasi rusak.
+
+ Jalankan `openclaw plugins inspect `. Jika sebuah kemampuan tercantum tetapi ditandai sebagai
+ belum dihubungkan, itu adalah batasan produk — bukan instalasi yang rusak.
@@ -297,19 +297,19 @@ pihak ketiga sebagai konten tepercaya untuk fitur yang memang dieksposnya.
`commands/` atau `skills/` yang terdeteksi.
-
+
Hanya pengaturan Pi tertanam dari `settings.json` yang didukung. OpenClaw tidak
memperlakukan pengaturan bundle sebagai patch konfigurasi mentah.
- `hooks/hooks.json` hanya dideteksi. Jika membutuhkan hook yang dapat berjalan, gunakan
- layout hook-pack OpenClaw atau kirim plugin native.
+ `hooks/hooks.json` hanya dideteksi. Jika Anda membutuhkan hook yang dapat dijalankan, gunakan
+ tata letak hook-pack OpenClaw atau kirim Plugin native.
## Terkait
-- [Instal dan Konfigurasikan Plugin](/id/tools/plugin)
-- [Membangun Plugin](/id/plugins/building-plugins) — buat plugin native
-- [Manifest Plugin](/id/plugins/manifest) — skema manifest native
+- [Instal dan Konfigurasi Plugin](/id/tools/plugin)
+- [Membangun Plugin](/id/plugins/building-plugins) — buat Plugin native
+- [Manifes Plugin](/id/plugins/manifest) — skema manifes native
diff --git a/docs/id/plugins/codex-harness.md b/docs/id/plugins/codex-harness.md
index c5181d216..7a05a7580 100644
--- a/docs/id/plugins/codex-harness.md
+++ b/docs/id/plugins/codex-harness.md
@@ -1,45 +1,45 @@
---
read_when:
- - Anda ingin menggunakan harness app-server Codex bawaan
- - Anda memerlukan contoh konfigurasi harness Codex
- - Anda ingin deployment khusus Codex gagal alih-alih beralih kembali ke PI
-summary: Jalankan putaran agen tersemat OpenClaw melalui kerangka uji app-server Codex yang disertakan
+ - Anda ingin menggunakan kerangka server aplikasi Codex bawaan
+ - Anda membutuhkan contoh konfigurasi harness Codex
+ - Anda ingin penerapan yang hanya menggunakan Codex gagal, bukan beralih kembali ke PI
+summary: Jalankan giliran agen tertanam OpenClaw melalui harness app-server Codex yang disertakan
title: Kerangka Codex
x-i18n:
- generated_at: "2026-05-03T21:35:18Z"
+ generated_at: "2026-05-05T01:48:15Z"
model: gpt-5.5
provider: openai
- source_hash: f5187e54e2dc94e511c0243227f741d3486669f595c2b15cf239b1c03ea466c8
+ source_hash: 76302351e7e162e858dd6e3cffca84b3fd54497dd060104da9f90fe4c1a33f9b
source_path: plugins/codex-harness.md
workflow: 16
---
Plugin `codex` bawaan memungkinkan OpenClaw menjalankan giliran agen tertanam melalui
-server aplikasi Codex alih-alih harness PI bawaan.
+server aplikasi Codex, bukan melalui harness PI bawaan.
Gunakan ini saat Anda ingin Codex memiliki sesi agen tingkat rendah: penemuan
-model, lanjutkan thread native, compaction native, dan eksekusi server aplikasi.
-OpenClaw tetap memiliki kanal chat, file sesi, pemilihan model, alat,
-persetujuan, pengiriman media, dan cermin transkrip yang terlihat.
+model, pelanjutan thread native, Compaction native, dan eksekusi server
+aplikasi. OpenClaw tetap memiliki kanal obrolan, berkas sesi, pemilihan model,
+alat, persetujuan, pengiriman media, dan cermin transkrip yang terlihat.
-Saat giliran chat sumber berjalan melalui harness Codex, balasan yang terlihat
-secara default menggunakan alat `message` OpenClaw jika deployment belum secara
-eksplisit mengonfigurasi `messages.visibleReplies`. Agen tetap dapat
-menyelesaikan giliran Codex-nya secara privat; agen hanya mengirim ke kanal saat
-memanggil `message(action="send")`. Tetapkan `messages.visibleReplies: "automatic"`
-untuk mempertahankan balasan final chat langsung pada jalur pengiriman otomatis
-legacy.
+Saat giliran obrolan sumber berjalan melalui harness Codex, balasan yang terlihat
+secara default menggunakan alat OpenClaw `message` jika deployment belum
+mengonfigurasi `messages.visibleReplies` secara eksplisit. Agen tetap dapat
+menyelesaikan giliran Codex-nya secara privat; agen hanya memposting ke kanal
+saat memanggil `message(action="send")`. Atur
+`messages.visibleReplies: "automatic"` untuk mempertahankan balasan akhir
+obrolan langsung pada jalur pengiriman otomatis lama.
-Giliran Heartbeat Codex juga mendapatkan alat `heartbeat_respond` secara default,
-sehingga agen dapat mencatat apakah wake harus tetap senyap atau memberi
-notifikasi tanpa menyandikan alur kontrol itu dalam teks final.
+Giliran Heartbeat Codex juga mendapatkan alat `heartbeat_respond` secara
+default, sehingga agen dapat mencatat apakah bangun tersebut harus tetap senyap
+atau memberi notifikasi tanpa mengodekan alur kontrol itu dalam teks akhir.
Panduan inisiatif khusus Heartbeat dikirim sebagai instruksi developer mode
-kolaborasi Codex pada giliran Heartbeat itu sendiri. Giliran chat biasa
-memulihkan mode Codex Default alih-alih membawa filosofi Heartbeat dalam prompt
+kolaborasi Codex pada giliran Heartbeat itu sendiri. Giliran obrolan biasa
+memulihkan mode Default Codex, bukan membawa filosofi Heartbeat dalam prompt
runtime normalnya.
-Jika Anda mencoba memahami konteksnya, mulailah dengan
+Jika Anda mencoba memahami konteksnya, mulai dari
[Runtime agen](/id/concepts/agent-runtimes). Versi singkatnya adalah:
`openai/gpt-5.5` adalah ref model, `codex` adalah runtime, dan Telegram,
Discord, Slack, atau kanal lain tetap menjadi permukaan komunikasi.
@@ -49,10 +49,10 @@ Discord, Slack, atau kanal lain tetap menjadi permukaan komunikasi.
Sebagian besar pengguna yang menginginkan "Codex di OpenClaw" menginginkan rute
ini: masuk dengan langganan ChatGPT/Codex, lalu jalankan giliran agen tertanam
melalui runtime server aplikasi Codex native. Ref model tetap kanonis sebagai
-`openai/gpt-*`; autentikasi langganan berasal dari akun/profil Codex, bukan
-dari prefiks model `openai-codex/*`.
+`openai/gpt-*`; auth langganan berasal dari akun/profil Codex, bukan dari
+prefiks model `openai-codex/*`.
-Pertama, masuk dengan OAuth Codex jika belum:
+Masuk terlebih dahulu dengan OAuth Codex jika belum:
```bash
openclaw models auth login --provider openai-codex
@@ -97,111 +97,114 @@ Jika konfigurasi Anda menggunakan `plugins.allow`, sertakan juga `codex` di sana
Jangan gunakan `openai-codex/gpt-*` saat yang Anda maksud adalah runtime Codex
native. Prefiks itu adalah rute eksplisit "OAuth Codex melalui PI". Perubahan
-konfigurasi berlaku untuk sesi baru atau yang direset; sesi yang ada
-mempertahankan runtime yang telah direkam.
+konfigurasi berlaku untuk sesi baru atau yang direset; sesi yang sudah ada tetap
+mempertahankan runtime yang direkam.
-## Apa yang diubah Plugin ini
+## Yang diubah Plugin ini
-Plugin `codex` bawaan menyumbangkan beberapa kemampuan terpisah:
+Plugin `codex` bawaan menyumbangkan beberapa kapabilitas terpisah:
-| Kemampuan | Cara menggunakannya | Fungsinya |
-| --------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------- |
-| Runtime tertanam native | `agentRuntime.id: "codex"` | Menjalankan giliran agen tertanam OpenClaw melalui server aplikasi Codex. |
-| Perintah kontrol-chat native | `/codex bind`, `/codex resume`, `/codex steer`, ... | Mengikat dan mengontrol thread server aplikasi Codex dari percakapan pesan. |
-| Penyedia/katalog server aplikasi Codex | internal `codex`, dimunculkan melalui harness | Memungkinkan runtime menemukan dan memvalidasi model server aplikasi. |
-| Jalur pemahaman media Codex | Jalur kompatibilitas model gambar `codex/*` | Menjalankan giliran server aplikasi Codex terbatas untuk model pemahaman gambar yang didukung. |
-| Relay hook native | Hook Plugin di sekitar peristiwa native Codex | Memungkinkan OpenClaw mengamati/memblokir peristiwa alat/finalisasi native Codex yang didukung. |
+| Kapabilitas | Cara Anda menggunakannya | Yang dilakukannya |
+| ----------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------------ |
+| Runtime tertanam native | `agentRuntime.id: "codex"` | Menjalankan giliran agen tertanam OpenClaw melalui server aplikasi Codex. |
+| Perintah kontrol obrolan native | `/codex bind`, `/codex resume`, `/codex steer`, ... | Mengikat dan mengontrol thread server aplikasi Codex dari percakapan pesan. |
+| Penyedia/katalog server aplikasi Codex | internal `codex`, diekspos melalui harness | Memungkinkan runtime menemukan dan memvalidasi model server aplikasi. |
+| Jalur pemahaman media Codex | jalur kompatibilitas model gambar `codex/*` | Menjalankan giliran server aplikasi Codex terbatas untuk model pemahaman gambar yang didukung. |
+| Relay hook native | Hook Plugin di sekitar peristiwa native Codex | Memungkinkan OpenClaw mengamati/memblokir peristiwa alat/finalisasi native Codex yang didukung. |
-Mengaktifkan Plugin membuat kemampuan tersebut tersedia. Itu **tidak**:
+Mengaktifkan Plugin membuat kapabilitas tersebut tersedia. Itu **tidak**:
- mulai menggunakan Codex untuk setiap model OpenAI
-- mengubah ref model `openai-codex/*` menjadi runtime native
-- menjadikan ACP/acpx jalur Codex default
-- melakukan hot-switch sesi yang ada yang sudah merekam runtime PI
-- mengganti pengiriman kanal OpenClaw, file sesi, penyimpanan profil autentikasi, atau
+- mengonversi ref model `openai-codex/*` menjadi runtime native
+- menjadikan ACP/acpx sebagai jalur Codex default
+- melakukan hot-switch pada sesi yang sudah merekam runtime PI
+- mengganti pengiriman kanal OpenClaw, berkas sesi, penyimpanan profil auth, atau
perutean pesan
-Plugin yang sama juga memiliki permukaan perintah kontrol-chat `/codex` native.
-Jika Plugin diaktifkan dan pengguna meminta untuk mengikat, melanjutkan,
-mengarahkan, menghentikan, atau memeriksa thread Codex dari chat, agen harus
-memilih `/codex ...` daripada ACP. ACP tetap menjadi fallback eksplisit saat
-pengguna meminta ACP/acpx atau sedang menguji adapter ACP Codex.
+Plugin yang sama juga memiliki permukaan perintah kontrol obrolan native
+`/codex`. Jika Plugin diaktifkan dan pengguna meminta untuk mengikat,
+melanjutkan, mengarahkan, menghentikan, atau memeriksa thread Codex dari
+obrolan, agen harus lebih memilih `/codex ...` daripada ACP. ACP tetap menjadi
+fallback eksplisit saat pengguna meminta ACP/acpx atau sedang menguji adapter
+Codex ACP.
Giliran Codex native mempertahankan hook Plugin OpenClaw sebagai lapisan
kompatibilitas publik. Ini adalah hook OpenClaw dalam proses, bukan hook perintah
-`hooks.json` Codex:
+Codex `hooks.json`:
- `before_prompt_build`
- `before_compaction`, `after_compaction`
- `llm_input`, `llm_output`
- `before_tool_call`, `after_tool_call`
-- `before_message_write` untuk rekaman transkrip yang dicerminkan
+- `before_message_write` untuk catatan transkrip yang dicerminkan
- `before_agent_finalize` melalui relay `Stop` Codex
- `agent_end`
-Plugin juga dapat mendaftarkan middleware hasil-alat netral-runtime untuk menulis
-ulang hasil alat dinamis OpenClaw setelah OpenClaw mengeksekusi alat dan sebelum
-hasil dikembalikan ke Codex. Ini terpisah dari hook Plugin publik
-`tool_result_persist`, yang mentransformasi penulisan hasil-alat transkrip milik
+Plugin juga dapat mendaftarkan middleware hasil alat yang netral-runtime untuk
+menulis ulang hasil alat dinamis OpenClaw setelah OpenClaw mengeksekusi alat dan
+sebelum hasil dikembalikan ke Codex. Ini terpisah dari hook Plugin publik
+`tool_result_persist`, yang mentransformasi penulisan hasil alat transkrip milik
OpenClaw.
Untuk semantik hook Plugin itu sendiri, lihat [Hook Plugin](/id/plugins/hooks)
-dan [Perilaku penjaga Plugin](/id/tools/plugin).
+dan [Perilaku guard Plugin](/id/tools/plugin).
-Harness nonaktif secara default. Konfigurasi baru harus menjaga ref model OpenAI
-tetap kanonis sebagai `openai/gpt-*` dan secara eksplisit memaksa
+Harness nonaktif secara default. Konfigurasi baru harus mempertahankan ref model
+OpenAI secara kanonis sebagai `openai/gpt-*` dan secara eksplisit memaksa
`agentRuntime.id: "codex"` atau `OPENCLAW_AGENT_RUNTIME=codex` saat menginginkan
-eksekusi server aplikasi native. Ref model legacy `codex/*` masih memilih
-harness secara otomatis untuk kompatibilitas, tetapi prefiks penyedia legacy yang
-didukung runtime tidak ditampilkan sebagai pilihan model/penyedia normal.
+eksekusi server aplikasi native. Ref model lama `codex/*` masih memilih harness
+secara otomatis untuk kompatibilitas, tetapi prefiks penyedia lama yang didukung
+runtime tidak ditampilkan sebagai pilihan model/penyedia normal.
Jika Plugin `codex` diaktifkan tetapi model utama masih
-`openai-codex/*`, `openclaw doctor` memperingatkan alih-alih mengubah rute. Itu
-disengaja: `openai-codex/*` tetap menjadi jalur OAuth/langganan PI Codex, dan
-eksekusi server aplikasi native tetap menjadi pilihan runtime eksplisit.
+`openai-codex/*`, `openclaw doctor` memberi peringatan alih-alih mengubah
+rute. Itu disengaja: `openai-codex/*` tetap menjadi jalur OAuth/langganan PI
+Codex, dan eksekusi server aplikasi native tetap menjadi pilihan runtime
+eksplisit.
## Peta rute
Gunakan tabel ini sebelum mengubah konfigurasi:
-| Perilaku yang diinginkan | Ref model | Konfigurasi runtime | Rute autentikasi/profil | Label status yang diharapkan |
-| -------------------------------------------------- | -------------------------- | -------------------------------------- | ---------------------------- | ------------------------------ |
+| Perilaku yang diinginkan | Ref model | Konfigurasi runtime | Rute auth/profil | Label status yang diharapkan |
+| --------------------------------------------------- | -------------------------- | -------------------------------------- | ---------------------------- | ------------------------------ |
| Langganan ChatGPT/Codex dengan runtime Codex native | `openai/gpt-*` | `agentRuntime.id: "codex"` | OAuth Codex atau akun Codex | `Runtime: OpenAI Codex` |
-| OpenAI API melalui runner OpenClaw normal | `openai/gpt-*` | dihilangkan atau `runtime: "pi"` | Kunci OpenAI API | `Runtime: OpenClaw Pi Default` |
+| API OpenAI melalui runner OpenClaw normal | `openai/gpt-*` | dihilangkan atau `runtime: "pi"` | Kunci API OpenAI | `Runtime: OpenClaw Pi Default` |
| Langganan ChatGPT/Codex melalui PI | `openai-codex/gpt-*` | dihilangkan atau `runtime: "pi"` | Penyedia OAuth OpenAI Codex | `Runtime: OpenClaw Pi Default` |
| Penyedia campuran dengan mode otomatis konservatif | ref khusus penyedia | `agentRuntime.id: "auto"` | Per penyedia yang dipilih | Bergantung pada runtime yang dipilih |
-| Sesi adapter ACP Codex eksplisit | Bergantung pada prompt/model ACP | `sessions_spawn` dengan `runtime: "acp"` | Autentikasi backend ACP | Status tugas/sesi ACP |
+| Sesi adapter ACP Codex eksplisit | bergantung prompt/model ACP | `sessions_spawn` dengan `runtime: "acp"` | Auth backend ACP | Status tugas/sesi ACP |
Pemisahan pentingnya adalah penyedia versus runtime:
-- `openai-codex/*` menjawab "rute penyedia/autentikasi mana yang harus digunakan PI?"
-- `agentRuntime.id: "codex"` menjawab "loop mana yang harus mengeksekusi
- giliran tertanam ini?"
+- `openai-codex/*` menjawab "rute penyedia/auth mana yang harus digunakan PI?"
+- `agentRuntime.id: "codex"` menjawab "loop mana yang harus mengeksekusi giliran
+ tertanam ini?"
- `/codex ...` menjawab "percakapan Codex native mana yang harus diikat atau
- dikontrol chat ini?"
+ dikontrol obrolan ini?"
- ACP menjawab "proses harness eksternal mana yang harus diluncurkan acpx?"
## Pilih prefiks model yang tepat
-Rute keluarga OpenAI bersifat khusus prefiks. Untuk penyiapan umum langganan
-plus runtime Codex native, gunakan `openai/*` dengan `agentRuntime.id: "codex"`.
-Gunakan `openai-codex/*` hanya saat Anda memang menginginkan OAuth Codex melalui PI:
+Rute keluarga OpenAI bersifat spesifik-prefiks. Untuk setup umum langganan plus
+runtime Codex native, gunakan `openai/*` dengan `agentRuntime.id: "codex"`.
+Gunakan `openai-codex/*` hanya saat Anda sengaja menginginkan OAuth Codex
+melalui PI:
-| Ref model | Jalur runtime | Gunakan saat |
-| --------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------------- |
-| `openai/gpt-5.4` | Penyedia OpenAI melalui plumbing OpenClaw/PI | Anda menginginkan akses OpenAI Platform API langsung saat ini dengan `OPENAI_API_KEY`. |
-| `openai-codex/gpt-5.5` | OAuth OpenAI Codex melalui OpenClaw/PI | Anda menginginkan autentikasi langganan ChatGPT/Codex dengan runner PI default. |
-| `openai/gpt-5.5` + `agentRuntime.id: "codex"` | Harness server aplikasi Codex | Anda menginginkan autentikasi langganan ChatGPT/Codex dengan eksekusi Codex native. |
+| Ref model | Jalur runtime | Gunakan saat |
+| --------------------------------------------- | ------------------------------------------- | -------------------------------------------------------------------------- |
+| `openai/gpt-5.4` | Penyedia OpenAI melalui plumbing OpenClaw/PI | Anda menginginkan akses API OpenAI Platform langsung saat ini dengan `OPENAI_API_KEY`. |
+| `openai-codex/gpt-5.5` | OAuth OpenAI Codex melalui OpenClaw/PI | Anda menginginkan auth langganan ChatGPT/Codex dengan runner PI default. |
+| `openai/gpt-5.5` + `agentRuntime.id: "codex"` | Harness server aplikasi Codex | Anda menginginkan auth langganan ChatGPT/Codex dengan eksekusi Codex native. |
-GPT-5.5 dapat muncul pada rute kunci API OpenAI langsung dan langganan Codex
+GPT-5.5 dapat muncul pada rute kunci API OpenAI langsung maupun langganan Codex
saat akun Anda mengeksposnya. Gunakan `openai/gpt-5.5` dengan harness server
aplikasi Codex untuk runtime Codex native, `openai-codex/gpt-5.5` untuk OAuth
-PI, atau `openai/gpt-5.5` tanpa override runtime Codex untuk traffic kunci API
-langsung.
+PI, atau `openai/gpt-5.5` tanpa override runtime Codex untuk lalu lintas kunci
+API langsung.
-Ref legacy `codex/gpt-*` tetap diterima sebagai alias kompatibilitas. Migrasi
-kompatibilitas Doctor menulis ulang ref runtime utama legacy menjadi ref model
-kanonis dan merekam kebijakan runtime secara terpisah, sedangkan ref legacy yang
+Ref lama `codex/gpt-*` tetap diterima sebagai alias kompatibilitas. Migrasi
+kompatibilitas doctor menulis ulang ref runtime utama lama menjadi ref model
+kanonis dan merekam kebijakan runtime secara terpisah, sementara ref lama yang
hanya fallback dibiarkan tidak berubah karena runtime dikonfigurasi untuk seluruh
kontainer agen. Konfigurasi OAuth PI Codex baru harus menggunakan
`openai-codex/gpt-*`; konfigurasi harness server aplikasi native baru harus
@@ -210,74 +213,105 @@ menggunakan `openai/gpt-*` plus `agentRuntime.id: "codex"`.
`agents.defaults.imageModel` mengikuti pemisahan prefiks yang sama. Gunakan
`openai-codex/gpt-*` saat pemahaman gambar harus berjalan melalui jalur penyedia
OAuth OpenAI Codex. Gunakan `codex/gpt-*` saat pemahaman gambar harus berjalan
-melalui giliran server aplikasi Codex terbatas. Model server aplikasi Codex harus
-mengiklankan dukungan input gambar; model Codex khusus teks gagal sebelum giliran
-media dimulai.
+melalui giliran server aplikasi Codex terbatas. Model server aplikasi Codex
+harus mengiklankan dukungan input gambar; model Codex hanya-teks gagal sebelum
+giliran media dimulai.
-Gunakan `/status` untuk mengonfirmasi harness efektif untuk sesi saat ini. Jika
-pilihannya mengejutkan, aktifkan logging debug untuk subsistem `agents/harness`
-dan periksa rekaman terstruktur `agent harness selected` milik Gateway. Rekaman
-itu mencakup id harness yang dipilih, alasan pemilihan, kebijakan
-runtime/fallback, dan, dalam mode `auto`, hasil dukungan setiap kandidat Plugin.
+Gunakan `/status` untuk mengonfirmasi harness efektif bagi sesi saat ini. Jika
+pilihannya mengejutkan, aktifkan pencatatan debug untuk subsistem
+`agents/harness` dan periksa catatan terstruktur `agent harness selected` milik
+Gateway. Catatan itu mencakup id harness yang dipilih, alasan pemilihan,
+kebijakan runtime/fallback, dan, dalam mode `auto`, hasil dukungan setiap
+kandidat Plugin.
### Arti peringatan doctor
-`openclaw doctor` memperingatkan saat semua ini benar:
+`openclaw doctor` memberi peringatan saat semua hal ini benar:
- Plugin `codex` bawaan diaktifkan atau diizinkan
- model utama agen adalah `openai-codex/*`
- runtime efektif agen tersebut bukan `codex`
Peringatan itu ada karena pengguna sering mengharapkan "Plugin Codex diaktifkan"
-berarti "runtime server aplikasi Codex native." OpenClaw tidak membuat lompatan
-itu. Peringatan berarti:
+berarti "runtime server aplikasi Codex native." OpenClaw tidak melakukan lompatan
+itu. Peringatan tersebut berarti:
-- **Tidak diperlukan perubahan** jika Anda bermaksud menggunakan OAuth ChatGPT/Codex melalui PI.
-- Ubah model menjadi `openai/` dan tetapkan
- `agentRuntime.id: "codex"` jika Anda bermaksud menggunakan eksekusi
- server aplikasi native.
-- Sesi yang ada tetap membutuhkan `/new` atau `/reset` setelah perubahan runtime,
- karena pin runtime sesi bersifat melekat.
+- **Tidak diperlukan perubahan** jika Anda memang menginginkan OAuth
+ ChatGPT/Codex melalui PI.
+- Ubah model menjadi `openai/` dan atur
+ `agentRuntime.id: "codex"` jika Anda menginginkan eksekusi server aplikasi
+ native.
+- Sesi yang sudah ada tetap memerlukan `/new` atau `/reset` setelah perubahan
+ runtime, karena pin runtime sesi bersifat lengket.
-Pemilihan harness bukan kontrol sesi langsung. Saat giliran tertanam berjalan,
-OpenClaw merekam id harness yang dipilih pada sesi itu dan terus menggunakannya
-untuk giliran berikutnya dalam id sesi yang sama. Ubah konfigurasi `agentRuntime`
-atau `OPENCLAW_AGENT_RUNTIME` saat Anda ingin sesi mendatang menggunakan harness
-lain; gunakan `/new` atau `/reset` untuk memulai sesi baru sebelum mengalihkan
-percakapan yang ada antara PI dan Codex. Ini menghindari pemutaran ulang satu
-transkrip melalui dua sistem sesi native yang tidak kompatibel.
+Pemilihan harness bukan kontrol sesi live. Saat giliran tertanam berjalan,
+OpenClaw merekam id harness yang dipilih pada sesi tersebut dan terus
+menggunakannya untuk giliran berikutnya dalam id sesi yang sama. Ubah konfigurasi
+`agentRuntime` atau `OPENCLAW_AGENT_RUNTIME` saat Anda ingin sesi mendatang
+menggunakan harness lain; gunakan `/new` atau `/reset` untuk memulai sesi baru
+sebelum mengganti percakapan yang sudah ada antara PI dan Codex. Ini menghindari
+pemutaran ulang satu transkrip melalui dua sistem sesi native yang tidak
+kompatibel.
-Sesi lama yang dibuat sebelum pin harness diperlakukan sebagai dipin ke PI setelah memiliki riwayat transkrip. Gunakan `/new` atau `/reset` untuk mengikutsertakan percakapan tersebut ke Codex setelah mengubah konfigurasi.
+Sesi lama yang dibuat sebelum pin harness diperlakukan sebagai dipin ke PI setelah
+memiliki riwayat transkrip. Gunakan `/new` atau `/reset` untuk mengikutsertakan
+percakapan itu ke Codex setelah mengubah konfigurasi.
-`/status` menampilkan runtime model yang berlaku. Harness PI bawaan muncul sebagai `Runtime: OpenClaw Pi Default`, dan harness server aplikasi Codex muncul sebagai `Runtime: OpenAI Codex`.
+`/status` menampilkan runtime model efektif. Harness PI bawaan muncul sebagai
+`Runtime: OpenClaw Pi Default`, dan harness app-server Codex muncul sebagai
+`Runtime: OpenAI Codex`.
## Persyaratan
- OpenClaw dengan plugin `codex` bawaan tersedia.
-- Server aplikasi Codex `0.125.0` atau yang lebih baru. Plugin bawaan mengelola biner server aplikasi Codex yang kompatibel secara default, sehingga perintah `codex` lokal di `PATH` tidak memengaruhi startup harness normal.
-- Autentikasi Codex tersedia untuk proses server aplikasi atau untuk jembatan autentikasi Codex OpenClaw. Peluncuran server aplikasi stdio lokal menggunakan rumah Codex yang dikelola OpenClaw untuk setiap agen dan `HOME` anak yang terisolasi, sehingga secara default tidak membaca akun, skills, plugins, konfigurasi, status thread, atau `$HOME/.agents/skills` native pribadi Anda dari `~/.codex`.
+- App-server Codex `0.125.0` atau yang lebih baru. Plugin bawaan mengelola biner
+ app-server Codex yang kompatibel secara default, sehingga perintah `codex`
+ lokal di `PATH` tidak memengaruhi startup harness normal.
+- Auth Codex tersedia untuk proses app-server atau untuk jembatan auth Codex
+ OpenClaw. Peluncuran app-server lokal menggunakan home Codex yang dikelola
+ OpenClaw untuk setiap agen dan `HOME` anak yang terisolasi, sehingga secara
+ default tidak membaca akun, skills, plugins, konfigurasi, status thread, atau
+ `$HOME/.agents/skills` native pribadi Anda di `~/.codex`.
-Plugin memblokir handshake server aplikasi lama atau tanpa versi. Ini menjaga OpenClaw tetap berada pada permukaan protokol yang telah diuji.
+Plugin memblokir handshake app-server lama atau tanpa versi. Ini menjaga
+OpenClaw tetap pada permukaan protokol yang telah diuji.
-Untuk pengujian smoke live dan Docker, autentikasi biasanya berasal dari akun CLI Codex atau profil autentikasi OpenClaw `openai-codex`. Peluncuran server aplikasi stdio lokal juga dapat fallback ke `CODEX_API_KEY` / `OPENAI_API_KEY` ketika tidak ada akun.
+Untuk uji smoke live dan Docker, auth biasanya berasal dari akun CLI Codex
+atau profil auth `openai-codex` OpenClaw. Peluncuran app-server stdio lokal juga
+dapat fallback ke `CODEX_API_KEY` / `OPENAI_API_KEY` ketika tidak ada akun.
-## File bootstrap ruang kerja
+## File bootstrap workspace
-Codex menangani `AGENTS.md` sendiri melalui penemuan dokumen proyek native. OpenClaw tidak menulis file dokumen proyek Codex sintetis atau bergantung pada nama file fallback Codex untuk file persona, karena fallback Codex hanya berlaku ketika `AGENTS.md` tidak ada.
+Codex menangani `AGENTS.md` sendiri melalui penemuan dokumen proyek native. OpenClaw
+tidak menulis file dokumen proyek Codex sintetis atau bergantung pada nama file
+fallback Codex untuk file persona, karena fallback Codex hanya berlaku saat
+`AGENTS.md` tidak ada.
-Untuk paritas ruang kerja OpenClaw, harness Codex me-resolve file bootstrap lain (`SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, `BOOTSTRAP.md`, dan `MEMORY.md` jika ada) dan meneruskannya melalui instruksi konfigurasi Codex pada `thread/start` dan `thread/resume`. Ini menjaga `SOUL.md` dan konteks persona/profil ruang kerja terkait tetap terlihat tanpa menduplikasi `AGENTS.md`.
+Untuk paritas workspace OpenClaw, harness Codex menyelesaikan file bootstrap lain
+(`SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`,
+`BOOTSTRAP.md`, dan `MEMORY.md` jika ada) dan meneruskannya melalui instruksi
+konfigurasi Codex pada `thread/start` dan `thread/resume`. Ini membuat konteks
+persona/profil workspace `SOUL.md` dan terkait tetap terlihat tanpa
+menduplikasi `AGENTS.md`.
## Tambahkan Codex bersama model lain
-Jangan tetapkan `agentRuntime.id: "codex"` secara global jika agen yang sama harus bebas beralih antara Codex dan model penyedia non-Codex. Runtime yang dipaksa berlaku untuk setiap giliran tertanam bagi agen atau sesi tersebut. Jika Anda memilih model Anthropic saat runtime itu dipaksa, OpenClaw tetap mencoba harness Codex dan gagal tertutup alih-alih secara diam-diam merutekan giliran itu melalui PI.
+Jangan tetapkan `agentRuntime.id: "codex"` secara global jika agen yang sama harus bebas beralih
+antara Codex dan model penyedia non-Codex. Runtime yang dipaksa berlaku untuk setiap
+giliran tertanam untuk agen atau sesi tersebut. Jika Anda memilih model Anthropic saat
+runtime itu dipaksa, OpenClaw tetap mencoba harness Codex dan gagal tertutup
+alih-alih secara diam-diam merutekan giliran itu melalui PI.
-Gunakan salah satu bentuk berikut sebagai gantinya:
+Gunakan salah satu bentuk ini sebagai gantinya:
-- Tempatkan Codex pada agen khusus dengan `agentRuntime.id: "codex"`.
-- Pertahankan agen default pada `agentRuntime.id: "auto"` dan fallback PI untuk penggunaan penyedia campuran normal.
-- Gunakan ref lama `codex/*` hanya untuk kompatibilitas. Konfigurasi baru sebaiknya memilih `openai/*` ditambah kebijakan runtime Codex eksplisit.
+- Letakkan Codex pada agen khusus dengan `agentRuntime.id: "codex"`.
+- Pertahankan agen default pada `agentRuntime.id: "auto"` dan fallback PI untuk penggunaan
+ penyedia campuran normal.
+- Gunakan ref lama `codex/*` hanya untuk kompatibilitas. Konfigurasi baru sebaiknya memilih
+ `openai/*` plus kebijakan runtime Codex eksplisit.
-Contohnya, ini mempertahankan agen default pada pemilihan otomatis normal dan menambahkan agen Codex terpisah:
+Misalnya, ini mempertahankan agen default pada pemilihan otomatis normal dan
+menambahkan agen Codex terpisah:
```json5
{
@@ -315,31 +349,36 @@ Contohnya, ini mempertahankan agen default pada pemilihan otomatis normal dan me
Dengan bentuk ini:
-- Agen `main` default menggunakan jalur penyedia normal dan fallback kompatibilitas PI.
-- Agen `codex` menggunakan harness server aplikasi Codex.
-- Jika Codex hilang atau tidak didukung untuk agen `codex`, giliran tersebut gagal alih-alih diam-diam menggunakan PI.
+- Agen default `main` menggunakan jalur penyedia normal dan fallback kompatibilitas PI.
+- Agen `codex` menggunakan harness app-server Codex.
+- Jika Codex hilang atau tidak didukung untuk agen `codex`, giliran gagal
+ alih-alih diam-diam menggunakan PI.
## Perutean perintah agen
-Agen harus merutekan permintaan pengguna berdasarkan maksud, bukan hanya berdasarkan kata "Codex":
+Agen harus merutekan permintaan pengguna berdasarkan maksud, bukan hanya kata "Codex":
-| Pengguna meminta... | Agen harus menggunakan... |
+| Pengguna meminta... | Agen harus menggunakan... |
| ------------------------------------------------------ | ------------------------------------------------ |
| "Ikat chat ini ke Codex" | `/codex bind` |
| "Lanjutkan thread Codex `` di sini" | `/codex resume ` |
| "Tampilkan thread Codex" | `/codex threads` |
-| "Buat laporan dukungan untuk eksekusi Codex yang buruk" | `/diagnostics [note]` |
-| "Kirim umpan balik Codex hanya untuk thread terlampir ini" | `/codex diagnostics [note]` |
+| "Ajukan laporan dukungan untuk proses Codex yang buruk" | `/diagnostics [note]` |
+| "Kirim hanya umpan balik Codex untuk thread terlampir ini" | `/codex diagnostics [note]` |
| "Gunakan langganan ChatGPT/Codex saya dengan runtime Codex" | `openai/*` plus `agentRuntime.id: "codex"` |
| "Gunakan langganan ChatGPT/Codex saya melalui PI" | ref model `openai-codex/*` |
| "Jalankan Codex melalui ACP/acpx" | ACP `sessions_spawn({ runtime: "acp", ... })` |
| "Mulai Claude Code/Gemini/OpenCode/Cursor dalam thread" | ACP/acpx, bukan `/codex` dan bukan sub-agen native |
-OpenClaw hanya mengiklankan panduan spawn ACP kepada agen ketika ACP diaktifkan, dapat dikirim, dan didukung oleh backend runtime yang dimuat. Jika ACP tidak tersedia, prompt sistem dan Skills plugin tidak boleh mengajari agen tentang perutean ACP.
+OpenClaw hanya mengiklankan panduan spawn ACP kepada agen saat ACP diaktifkan,
+dapat dikirim, dan didukung oleh backend runtime yang dimuat. Jika ACP tidak tersedia,
+prompt sistem dan skills plugin tidak boleh mengajari agen tentang perutean ACP.
## Deployment khusus Codex
-Paksa harness Codex ketika Anda perlu membuktikan bahwa setiap giliran agen tertanam menggunakan Codex. Runtime plugin eksplisit gagal tertutup dan tidak pernah dicoba ulang secara diam-diam melalui PI:
+Paksa harness Codex saat Anda perlu membuktikan bahwa setiap giliran agen tertanam
+menggunakan Codex. Runtime plugin eksplisit gagal tertutup dan tidak pernah dicoba ulang
+secara diam-diam melalui PI:
```json5
{
@@ -360,11 +399,12 @@ Override lingkungan:
OPENCLAW_AGENT_RUNTIME=codex openclaw gateway run
```
-Dengan Codex dipaksa, OpenClaw gagal lebih awal jika plugin Codex dinonaktifkan, server aplikasi terlalu lama, atau server aplikasi tidak dapat dimulai.
+Dengan Codex dipaksa, OpenClaw gagal lebih awal jika plugin Codex dinonaktifkan,
+app-server terlalu lama, atau app-server tidak dapat dimulai.
## Codex per agen
-Anda dapat membuat satu agen khusus Codex sementara agen default mempertahankan
+Anda dapat membuat satu agen khusus Codex sementara agen default tetap menggunakan
pemilihan otomatis normal:
```json5
@@ -395,16 +435,14 @@ pemilihan otomatis normal:
```
Gunakan perintah sesi normal untuk beralih agen dan model. `/new` membuat sesi
-OpenClaw baru dan harness Codex membuat atau melanjutkan utas app-server
-sidecar-nya sesuai kebutuhan. `/reset` menghapus pengikatan sesi OpenClaw untuk
-utas tersebut dan memungkinkan giliran berikutnya menyelesaikan harness dari
-konfigurasi saat ini lagi.
+OpenClaw baru dan harness Codex membuat atau melanjutkan thread app-server sidecar
+sesuai kebutuhan. `/reset` menghapus binding sesi OpenClaw untuk thread tersebut
+dan memungkinkan giliran berikutnya menyelesaikan harness dari konfigurasi saat ini lagi.
## Penemuan model
-Secara default, Plugin Codex meminta model yang tersedia kepada app-server. Jika
-penemuan gagal atau habis waktu, Plugin menggunakan katalog fallback bawaan
-untuk:
+Secara default, plugin Codex meminta model yang tersedia kepada app-server. Jika
+penemuan gagal atau timeout, plugin menggunakan katalog fallback bawaan untuk:
- GPT-5.5
- GPT-5.4 mini
@@ -430,8 +468,8 @@ Anda dapat menyesuaikan penemuan di bawah `plugins.entries.codex.config.discover
}
```
-Nonaktifkan penemuan saat Anda ingin startup menghindari probing Codex dan tetap
-menggunakan katalog fallback:
+Nonaktifkan penemuan saat Anda ingin startup menghindari probing Codex dan tetap pada
+katalog fallback:
```json5
{
@@ -452,27 +490,25 @@ menggunakan katalog fallback:
## Koneksi dan kebijakan app-server
-Secara default, Plugin memulai biner Codex terkelola OpenClaw secara lokal
-dengan:
+Secara default, plugin memulai biner Codex terkelola OpenClaw secara lokal dengan:
```bash
codex app-server --listen stdio://
```
-Biner terkelola dikirim bersama paket Plugin `codex`. Ini menjaga versi
-app-server tetap terikat pada Plugin bawaan, bukan pada Codex CLI terpisah mana
-pun yang kebetulan terpasang secara lokal. Atur `appServer.command` hanya saat
-Anda sengaja ingin menjalankan executable yang berbeda.
+Biner terkelola dikirim bersama paket plugin `codex`. Ini menjaga versi
+app-server tetap terikat ke plugin bawaan, bukan ke CLI Codex terpisah apa pun
+yang kebetulan terinstal secara lokal. Tetapkan `appServer.command` hanya saat
+Anda memang ingin menjalankan executable yang berbeda.
Secara default, OpenClaw memulai sesi harness Codex lokal dalam mode YOLO:
`approvalPolicy: "never"`, `approvalsReviewer: "user"`, dan
-`sandbox: "danger-full-access"`. Ini adalah postur operator lokal tepercaya yang
-digunakan untuk Heartbeat otonom: Codex dapat menggunakan shell dan alat jaringan
-tanpa berhenti pada prompt persetujuan native yang tidak ada orang di sekitar
-untuk menjawabnya.
+`sandbox: "danger-full-access"`. Ini adalah postur operator lokal tepercaya yang digunakan
+untuk Heartbeat otonom: Codex dapat menggunakan alat shell dan jaringan tanpa
+berhenti pada prompt persetujuan native yang tidak ada orang di sekitar untuk menjawab.
-Untuk ikut menggunakan persetujuan yang ditinjau guardian Codex, atur
-`appServer.mode: "guardian"`:
+Untuk ikut serta dalam persetujuan yang ditinjau guardian Codex, tetapkan `appServer.mode:
+"guardian"`:
```json5
{
@@ -492,20 +528,19 @@ Untuk ikut menggunakan persetujuan yang ditinjau guardian Codex, atur
}
```
-Mode Guardian menggunakan jalur persetujuan tinjauan otomatis native Codex. Saat
-Codex meminta untuk keluar dari sandbox, menulis di luar workspace, atau
-menambahkan izin seperti akses jaringan, Codex merutekan permintaan persetujuan
-tersebut ke peninjau native, bukan prompt manusia. Peninjau menerapkan kerangka
-risiko Codex dan menyetujui atau menolak permintaan spesifik tersebut. Gunakan
-Guardian saat Anda menginginkan guardrail yang lebih banyak daripada mode YOLO
+Mode guardian menggunakan jalur persetujuan tinjauan otomatis native Codex. Saat Codex meminta
+keluar dari sandbox, menulis di luar workspace, atau menambahkan izin seperti akses jaringan,
+Codex merutekan permintaan persetujuan itu ke peninjau native alih-alih prompt manusia.
+Peninjau menerapkan kerangka risiko Codex dan menyetujui atau menolak permintaan spesifik
+tersebut. Gunakan Guardian saat Anda menginginkan lebih banyak guardrail daripada mode YOLO
tetapi tetap membutuhkan agen tanpa pengawasan untuk terus berjalan.
Preset `guardian` diperluas menjadi `approvalPolicy: "on-request"`,
`approvalsReviewer: "auto_review"`, dan `sandbox: "workspace-write"`.
-Field kebijakan individual tetap menimpa `mode`, sehingga deployment lanjutan
-dapat mencampur preset dengan pilihan eksplisit. Nilai peninjau lama
-`guardian_subagent` masih diterima sebagai alias kompatibilitas, tetapi
-konfigurasi baru sebaiknya menggunakan `auto_review`.
+Field kebijakan individual tetap menimpa `mode`, sehingga deployment lanjutan dapat mencampur
+preset dengan pilihan eksplisit. Nilai peninjau lama `guardian_subagent` masih
+diterima sebagai alias kompatibilitas, tetapi konfigurasi baru sebaiknya menggunakan
+`auto_review`.
Untuk app-server yang sudah berjalan, gunakan transport WebSocket:
@@ -529,28 +564,28 @@ Untuk app-server yang sudah berjalan, gunakan transport WebSocket:
}
```
-Peluncuran app-server stdio mewarisi environment proses OpenClaw secara default,
-tetapi OpenClaw memiliki bridge akun app-server Codex dan menetapkan baik
-`CODEX_HOME` maupun `HOME` ke direktori per agen di bawah state OpenClaw milik
-agen tersebut. Loader skill milik Codex membaca `$CODEX_HOME/skills` dan
-`$HOME/.agents/skills`, sehingga kedua nilai diisolasi untuk peluncuran
-app-server lokal. Itu menjaga skill native Codex, Plugin, konfigurasi, akun, dan
-state utas tetap tercakup ke agen OpenClaw, bukan bocor dari home Codex CLI
-pribadi operator.
+Peluncuran app-server stdio mewarisi lingkungan proses OpenClaw secara default,
+tetapi OpenClaw memiliki jembatan akun app-server Codex dan menetapkan
+`CODEX_HOME` serta `HOME` ke direktori per agen di bawah status OpenClaw agen tersebut.
+Pemuat skill Codex sendiri membaca `$CODEX_HOME/skills` dan
+`$HOME/.agents/skills`, sehingga kedua nilai diisolasi untuk peluncuran app-server
+lokal. Ini menjaga skills, plugins, konfigurasi, akun, dan status thread native Codex
+tetap berada dalam cakupan agen OpenClaw alih-alih bocor dari home CLI Codex pribadi
+operator.
-Plugin OpenClaw dan snapshot skill OpenClaw tetap mengalir melalui registri
-Plugin dan loader skill milik OpenClaw sendiri. Aset Codex CLI pribadi tidak.
-Jika Anda memiliki skill atau Plugin Codex CLI berguna yang seharusnya menjadi
-bagian dari agen OpenClaw, inventarisasikan secara eksplisit:
+Plugin OpenClaw dan snapshot skill OpenClaw tetap mengalir melalui registry plugin dan pemuat
+skill milik OpenClaw sendiri. Aset CLI Codex pribadi tidak. Jika Anda memiliki
+skills atau plugins CLI Codex yang berguna dan harus menjadi bagian dari agen OpenClaw,
+inventarisasikan secara eksplisit:
```bash
openclaw migrate codex --dry-run
openclaw migrate apply codex --yes
```
-Penyedia migrasi Codex menyalin skill ke workspace agen OpenClaw saat ini.
-Plugin native Codex, hook, dan file konfigurasi dilaporkan atau diarsipkan untuk
-peninjauan manual alih-alih diaktifkan otomatis, karena item tersebut dapat
+Penyedia migrasi Codex menyalin skills ke workspace agen OpenClaw saat ini.
+Plugin, hook, dan file konfigurasi native Codex dilaporkan atau diarsipkan
+untuk peninjauan manual alih-alih diaktifkan otomatis, karena mereka dapat
mengeksekusi perintah, mengekspos server MCP, atau membawa kredensial.
Auth dipilih dalam urutan ini:
@@ -561,17 +596,17 @@ Auth dipilih dalam urutan ini:
`OPENAI_API_KEY`, saat tidak ada akun app-server dan auth OpenAI masih
diperlukan.
-Saat OpenClaw melihat profil auth Codex bergaya langganan ChatGPT, OpenClaw
-menghapus `CODEX_API_KEY` dan `OPENAI_API_KEY` dari proses anak Codex yang
-dijalankan. Itu menjaga kunci API level Gateway tetap tersedia untuk embedding
-atau model OpenAI langsung tanpa membuat giliran app-server native Codex ditagih
-melalui API secara tidak sengaja. Profil kunci API Codex eksplisit dan fallback
-kunci env stdio lokal menggunakan login app-server, bukan env proses anak yang
-diwarisi. Koneksi app-server WebSocket tidak menerima fallback kunci API env
-Gateway; gunakan profil auth eksplisit atau akun milik app-server jarak jauh.
+Saat OpenClaw melihat profil auth Codex bergaya langganan ChatGPT, OpenClaw menghapus
+`CODEX_API_KEY` dan `OPENAI_API_KEY` dari proses anak Codex yang di-spawn. Ini
+menjaga kunci API tingkat Gateway tetap tersedia untuk embeddings atau model OpenAI langsung
+tanpa membuat giliran app-server Codex native ditagihkan melalui API secara tidak sengaja.
+Profil kunci API Codex eksplisit dan fallback kunci lingkungan stdio lokal menggunakan login
+app-server alih-alih env proses anak yang diwarisi. Koneksi app-server WebSocket
+tidak menerima fallback kunci API env Gateway; gunakan profil auth eksplisit atau akun
+app-server jarak jauh sendiri.
-Jika deployment membutuhkan isolasi environment tambahan, tambahkan variabel
-tersebut ke `appServer.clearEnv`:
+Jika deployment membutuhkan isolasi lingkungan tambahan, tambahkan variabel tersebut ke
+`appServer.clearEnv`:
```json5
{
@@ -590,52 +625,53 @@ tersebut ke `appServer.clearEnv`:
}
```
-`appServer.clearEnv` hanya memengaruhi proses turunan app-server Codex yang dijalankan.
+`appServer.clearEnv` hanya memengaruhi proses anak app-server Codex yang dijalankan.
-Alat dinamis Codex secara default menggunakan profil `native-first`. Dalam mode itu,
-OpenClaw tidak mengekspos alat dinamis yang menduplikasi operasi ruang kerja bawaan Codex:
-`read`, `write`, `edit`, `apply_patch`, `exec`, `process`, dan
-`update_plan`. Alat integrasi OpenClaw seperti perpesanan, sesi, media,
+Tools dinamis Codex secara default menggunakan profil `native-first`. Dalam mode itu,
+OpenClaw tidak mengekspos tools dinamis yang menduplikasi operasi workspace
+native Codex: `read`, `write`, `edit`, `apply_patch`, `exec`, `process`, dan
+`update_plan`. Tools integrasi OpenClaw seperti perpesanan, sesi, media,
cron, browser, node, gateway, `heartbeat_respond`, dan `web_search` tetap
tersedia.
-Bidang plugin Codex tingkat atas yang didukung:
+Field Plugin Codex tingkat atas yang didukung:
-| Bidang | Default | Makna |
+| Field | Default | Arti |
| -------------------------- | ---------------- | ----------------------------------------------------------------------------------------- |
-| `codexDynamicToolsProfile` | `"native-first"` | Gunakan `"openclaw-compat"` untuk mengekspos set lengkap alat dinamis OpenClaw ke app-server Codex. |
-| `codexDynamicToolsExclude` | `[]` | Nama alat dinamis OpenClaw tambahan yang akan dihilangkan dari giliran app-server Codex. |
+| `codexDynamicToolsProfile` | `"native-first"` | Gunakan `"openclaw-compat"` untuk mengekspos set tool dinamis OpenClaw lengkap ke app-server Codex. |
+| `codexDynamicToolsExclude` | `[]` | Nama tool dinamis OpenClaw tambahan yang dihilangkan dari giliran app-server Codex. |
-Bidang `appServer` yang didukung:
+Field `appServer` yang didukung:
-| Bidang | Default | Makna |
-| ------------------- | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `transport` | `"stdio"` | `"stdio"` menjalankan Codex; `"websocket"` terhubung ke `url`. |
-| `command` | biner Codex terkelola | Executable untuk transport stdio. Biarkan tidak disetel untuk menggunakan biner terkelola; setel hanya untuk override eksplisit. |
-| `args` | `["app-server", "--listen", "stdio://"]` | Argumen untuk transport stdio. |
-| `url` | tidak disetel | URL app-server WebSocket. |
-| `authToken` | tidak disetel | Token Bearer untuk transport WebSocket. |
-| `headers` | `{}` | Header WebSocket tambahan. |
-| `clearEnv` | `[]` | Nama variabel lingkungan tambahan yang dihapus dari proses app-server stdio yang dijalankan setelah OpenClaw membangun lingkungan warisannya. `CODEX_HOME` dan `HOME` dicadangkan untuk isolasi Codex per agen milik OpenClaw pada peluncuran lokal. |
-| `requestTimeoutMs` | `60000` | Timeout untuk panggilan control-plane app-server. |
-| `mode` | `"yolo"` | Preset untuk eksekusi YOLO atau yang ditinjau guardian. |
-| `approvalPolicy` | `"never"` | Kebijakan persetujuan Codex native yang dikirim ke thread start/resume/turn. |
-| `sandbox` | `"danger-full-access"` | Mode sandbox Codex native yang dikirim ke thread start/resume. |
-| `approvalsReviewer` | `"user"` | Gunakan `"auto_review"` agar Codex meninjau prompt persetujuan native. `guardian_subagent` tetap menjadi alias legacy. |
-| `serviceTier` | tidak disetel | Tingkat layanan app-server Codex opsional: `"fast"`, `"flex"`, atau `null`. Nilai legacy yang tidak valid diabaikan. |
+| Field | Default | Arti |
+| ------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `transport` | `"stdio"` | `"stdio"` menjalankan Codex; `"websocket"` terhubung ke `url`. |
+| `command` | binary Codex terkelola | Executable untuk transport stdio. Biarkan tidak disetel untuk menggunakan binary terkelola; setel hanya untuk override eksplisit. |
+| `args` | `["app-server", "--listen", "stdio://"]` | Argumen untuk transport stdio. |
+| `url` | tidak disetel | URL app-server WebSocket. |
+| `authToken` | tidak disetel | Token bearer untuk transport WebSocket. |
+| `headers` | `{}` | Header WebSocket tambahan. |
+| `clearEnv` | `[]` | Nama variabel lingkungan tambahan yang dihapus dari proses app-server stdio yang dijalankan setelah OpenClaw membangun lingkungan turunannya. `CODEX_HOME` dan `HOME` dicadangkan untuk isolasi Codex per agen milik OpenClaw pada peluncuran lokal. |
+| `requestTimeoutMs` | `60000` | Timeout untuk panggilan control-plane app-server. |
+| `mode` | `"yolo"` | Preset untuk eksekusi YOLO atau yang ditinjau guardian. |
+| `approvalPolicy` | `"never"` | Kebijakan persetujuan native Codex yang dikirim ke thread start/resume/turn. |
+| `sandbox` | `"danger-full-access"` | Mode sandbox native Codex yang dikirim ke thread start/resume. |
+| `approvalsReviewer` | `"user"` | Gunakan `"auto_review"` agar Codex meninjau prompt persetujuan native. `guardian_subagent` tetap menjadi alias lama. |
+| `serviceTier` | tidak disetel | Tier layanan app-server Codex opsional: `"fast"`, `"flex"`, atau `null`. Nilai lama yang tidak valid diabaikan. |
-Panggilan alat dinamis milik OpenClaw dibatasi secara independen dari
-`appServer.requestTimeoutMs`: setiap permintaan Codex `item/tool/call` harus menerima
-respons OpenClaw dalam 30 detik. Saat timeout, OpenClaw membatalkan sinyal alat
-jika didukung dan mengembalikan respons alat-dinamis yang gagal ke Codex agar
-giliran dapat berlanjut alih-alih membiarkan sesi berada dalam `processing`.
+Panggilan tool dinamis milik OpenClaw dibatasi secara independen dari
+`appServer.requestTimeoutMs`: setiap permintaan `item/tool/call` Codex harus
+menerima respons OpenClaw dalam 30 detik. Saat timeout, OpenClaw membatalkan
+sinyal tool jika didukung dan mengembalikan respons dynamic-tool yang gagal ke
+Codex agar giliran dapat berlanjut, alih-alih membiarkan sesi berada dalam
+`processing`.
-Setelah OpenClaw merespons permintaan app-server berskala giliran Codex, harness
-juga mengharapkan Codex menyelesaikan giliran native dengan `turn/completed`. Jika
-app-server tidak merespons selama 60 detik setelah respons itu, OpenClaw berupaya
-sebaik mungkin menginterupsi giliran Codex, mencatat timeout diagnostik, dan melepas
-jalur sesi OpenClaw agar pesan chat lanjutan tidak mengantre di belakang giliran
-native yang sudah basi.
+Setelah OpenClaw merespons permintaan app-server Codex yang berlaku untuk satu
+giliran, harness juga mengharapkan Codex menyelesaikan giliran native dengan
+`turn/completed`. Jika app-server diam selama 60 detik setelah respons itu,
+OpenClaw berupaya sebaik mungkin menginterupsi giliran Codex, mencatat timeout
+diagnostik, dan melepaskan lane sesi OpenClaw agar pesan chat lanjutan tidak
+diantrekan di belakang giliran native yang sudah basi.
Override lingkungan tetap tersedia untuk pengujian lokal:
@@ -645,31 +681,31 @@ Override lingkungan tetap tersedia untuk pengujian lokal:
- `OPENCLAW_CODEX_APP_SERVER_APPROVAL_POLICY`
- `OPENCLAW_CODEX_APP_SERVER_SANDBOX`
-`OPENCLAW_CODEX_APP_SERVER_BIN` melewati biner terkelola saat
+`OPENCLAW_CODEX_APP_SERVER_BIN` melewati binary terkelola saat
`appServer.command` tidak disetel.
`OPENCLAW_CODEX_APP_SERVER_GUARDIAN=1` telah dihapus. Gunakan
`plugins.entries.codex.config.appServer.mode: "guardian"` sebagai gantinya, atau
-`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` untuk pengujian lokal sekali pakai. Konfigurasi
-lebih disarankan untuk deployment yang dapat diulang karena menjaga perilaku plugin
-di file yang sama yang telah ditinjau dengan sisa penyiapan harness Codex.
+`OPENCLAW_CODEX_APP_SERVER_MODE=guardian` untuk pengujian lokal sekali pakai. Config
+lebih disarankan untuk deployment yang dapat diulang karena menjaga perilaku Plugin
+dalam file yang ditinjau yang sama dengan penyiapan harness Codex lainnya.
## Penggunaan komputer
Penggunaan Komputer dibahas dalam panduan penyiapannya sendiri:
[Penggunaan Komputer Codex](/id/plugins/codex-computer-use).
-Versi singkatnya: OpenClaw tidak menyertakan app kontrol desktop sebagai vendor atau mengeksekusi
-aksi desktop sendiri. OpenClaw menyiapkan app-server Codex, memverifikasi bahwa server MCP
-`computer-use` tersedia, lalu membiarkan Codex menangani panggilan alat MCP native
-selama giliran mode Codex.
+Versi singkatnya: OpenClaw tidak mem-vendor app kontrol desktop atau mengeksekusi
+tindakan desktop sendiri. OpenClaw menyiapkan app-server Codex, memverifikasi bahwa
+server MCP `computer-use` tersedia, lalu membiarkan Codex menangani panggilan tool
+MCP native selama giliran mode Codex.
Untuk akses driver TryCua langsung di luar alur marketplace Codex, daftarkan
`cua-driver mcp` dengan `openclaw mcp set cua-driver '{"command":"cua-driver","args":["mcp"]}'`.
Lihat [Penggunaan Komputer Codex](/id/plugins/codex-computer-use) untuk perbedaan
antara Penggunaan Komputer milik Codex dan pendaftaran MCP langsung.
-Konfigurasi minimal:
+Config minimal:
```json5
{
@@ -696,7 +732,7 @@ Konfigurasi minimal:
}
```
-Penyiapan dapat diperiksa atau diinstal dari permukaan perintah:
+Penyiapan dapat diperiksa atau diinstal dari permukaan command:
- `/codex computer-use status`
- `/codex computer-use install`
@@ -704,18 +740,18 @@ Penyiapan dapat diperiksa atau diinstal dari permukaan perintah:
- `/codex computer-use install --marketplace-path `
Penggunaan Komputer khusus macOS dan mungkin memerlukan izin OS lokal sebelum
-server MCP Codex dapat mengontrol app. Jika `computerUse.enabled` bernilai true dan server MCP
-tidak tersedia, giliran mode Codex gagal sebelum thread dimulai alih-alih
-berjalan diam-diam tanpa alat Penggunaan Komputer native. Lihat
+server MCP Codex dapat mengontrol app. Jika `computerUse.enabled` bernilai true
+dan server MCP tidak tersedia, giliran mode Codex gagal sebelum thread dimulai,
+alih-alih berjalan diam-diam tanpa tools Penggunaan Komputer native. Lihat
[Penggunaan Komputer Codex](/id/plugins/codex-computer-use) untuk pilihan marketplace,
batas katalog jarak jauh, alasan status, dan pemecahan masalah.
-Saat `computerUse.autoInstall` bernilai true, OpenClaw dapat mendaftarkan marketplace
-Codex Desktop terbundel standar dari
+Saat `computerUse.autoInstall` bernilai true, OpenClaw dapat mendaftarkan
+marketplace Codex Desktop standar yang dibundel dari
`/Applications/Codex.app/Contents/Resources/plugins/openai-bundled` jika Codex
belum menemukan marketplace lokal. Gunakan `/new` atau `/reset` setelah
-mengubah konfigurasi runtime atau Penggunaan Komputer agar sesi yang ada tidak mempertahankan
-pengikatan thread PI atau Codex lama.
+mengubah config runtime atau Penggunaan Komputer agar sesi yang sudah ada tidak
+menyimpan binding thread PI atau Codex lama.
## Resep umum
@@ -800,32 +836,36 @@ App-server jarak jauh dengan header eksplisit:
}
```
-Pergantian model tetap dikendalikan OpenClaw. Saat sesi OpenClaw dilampirkan
-ke thread Codex yang ada, giliran berikutnya mengirim model OpenAI, provider,
-kebijakan persetujuan, sandbox, dan tingkat layanan yang saat ini dipilih ke
-app-server lagi. Beralih dari `openai/gpt-5.5` ke `openai/gpt-5.2` mempertahankan
-pengikatan thread tetapi meminta Codex melanjutkan dengan model yang baru dipilih.
+Peralihan model tetap dikendalikan OpenClaw. Saat sesi OpenClaw dilampirkan
+ke thread Codex yang sudah ada, giliran berikutnya mengirim model OpenAI,
+provider, kebijakan persetujuan, sandbox, dan tier layanan yang sedang dipilih
+ke app-server lagi. Beralih dari `openai/gpt-5.5` ke `openai/gpt-5.2` mempertahankan
+binding thread tetapi meminta Codex melanjutkan dengan model yang baru dipilih.
-## Perintah Codex
+## Command Codex
-Plugin terbundel mendaftarkan `/codex` sebagai perintah slash yang diotorisasi. Perintah ini
-generik dan berfungsi di channel apa pun yang mendukung perintah teks OpenClaw.
+Plugin yang dibundel mendaftarkan `/codex` sebagai slash command yang diotorisasi. Command ini
+generik dan berfungsi pada channel apa pun yang mendukung command teks OpenClaw.
Bentuk umum:
-- `/codex status` menampilkan konektivitas server aplikasi langsung, model, akun, batas laju, server MCP, dan Skills.
-- `/codex models` mencantumkan model server aplikasi Codex langsung.
+- `/codex status` menampilkan konektivitas server aplikasi aktif, model, akun, batas laju, server MCP, dan Skills.
+- `/codex models` mencantumkan model server aplikasi Codex aktif.
- `/codex threads [filter]` mencantumkan thread Codex terbaru.
- `/codex resume ` melampirkan sesi OpenClaw saat ini ke thread Codex yang sudah ada.
-- `/codex compact` meminta server aplikasi Codex untuk memadatkan thread yang dilampirkan.
-- `/codex review` memulai peninjauan native Codex untuk thread yang dilampirkan.
-- `/codex diagnostics [note]` meminta konfirmasi sebelum mengirim umpan balik diagnostik Codex untuk thread yang dilampirkan.
+- `/codex compact` meminta server aplikasi Codex untuk memadatkan thread yang terlampir.
+- `/codex review` memulai peninjauan native Codex untuk thread yang terlampir.
+- `/codex diagnostics [note]` meminta konfirmasi sebelum mengirim umpan balik diagnostik Codex untuk thread yang terlampir.
- `/codex computer-use status` memeriksa Plugin Computer Use dan server MCP yang dikonfigurasi.
- `/codex computer-use install` menginstal Plugin Computer Use yang dikonfigurasi dan memuat ulang server MCP.
- `/codex account` menampilkan status akun dan batas laju.
- `/codex mcp` mencantumkan status server MCP server aplikasi Codex.
- `/codex skills` mencantumkan Skills server aplikasi Codex.
+Saat Codex melaporkan kegagalan batas penggunaan, OpenClaw menyertakan waktu reset
+server aplikasi berikutnya jika Codex menyediakannya. Gunakan `/codex account` dalam
+percakapan yang sama untuk memeriksa jendela akun dan batas laju saat ini.
+
### Alur kerja debugging umum
Saat agen berbasis Codex melakukan sesuatu yang mengejutkan di Telegram, Discord, Slack,
@@ -834,54 +874,54 @@ atau saluran lain, mulai dari percakapan tempat masalah terjadi:
1. Jalankan `/diagnostics bad tool choice after image upload` atau catatan singkat lain
yang menjelaskan apa yang Anda lihat.
2. Setujui permintaan diagnostik satu kali. Persetujuan membuat zip diagnostik Gateway
- lokal dan, karena sesi menggunakan harness Codex, juga
- mengirim bundel umpan balik Codex yang relevan ke server OpenAI.
+ lokal dan, karena sesi menggunakan harness Codex, juga mengirim bundel umpan balik
+ Codex yang relevan ke server OpenAI.
3. Salin balasan diagnostik yang selesai ke laporan bug atau thread dukungan.
- Balasan itu menyertakan jalur bundel lokal, ringkasan privasi, id sesi OpenClaw,
+ Balasan tersebut menyertakan jalur bundel lokal, ringkasan privasi, id sesi OpenClaw,
id thread Codex, dan baris `Inspect locally` untuk setiap thread Codex.
-4. Jika Anda ingin men-debug run sendiri, jalankan perintah `Inspect locally`
+4. Jika Anda ingin men-debug run itu sendiri, jalankan perintah `Inspect locally`
yang dicetak di terminal. Bentuknya seperti `codex resume ` dan membuka
- thread native Codex sehingga Anda dapat memeriksa percakapan, melanjutkannya secara lokal,
- atau bertanya kepada Codex mengapa memilih alat atau rencana tertentu.
+ thread native Codex agar Anda dapat memeriksa percakapan, melanjutkannya secara lokal,
+ atau bertanya kepada Codex mengapa ia memilih alat atau rencana tertentu.
Gunakan `/codex diagnostics [note]` hanya saat Anda secara khusus menginginkan unggahan
-umpan balik Codex untuk thread yang saat ini dilampirkan tanpa bundel diagnostik
-Gateway OpenClaw lengkap. Untuk sebagian besar laporan dukungan, `/diagnostics [note]` adalah
-titik awal yang lebih baik karena mengikat status Gateway lokal dan id thread Codex
-bersama dalam satu balasan. Lihat [Ekspor diagnostik](/id/gateway/diagnostics)
+umpan balik Codex untuk thread yang saat ini terlampir tanpa bundel diagnostik OpenClaw
+Gateway penuh. Untuk sebagian besar laporan dukungan, `/diagnostics [note]` adalah
+titik awal yang lebih baik karena menghubungkan status Gateway lokal dan id thread Codex
+dalam satu balasan. Lihat [Ekspor diagnostik](/id/gateway/diagnostics)
untuk model privasi lengkap dan perilaku obrolan grup.
Inti OpenClaw juga mengekspos `/diagnostics [note]` khusus pemilik sebagai perintah
-diagnostik Gateway umum. Prompt persetujuannya menampilkan pengantar data sensitif,
+diagnostik Gateway umum. Prompt persetujuannya menampilkan pembukaan data sensitif,
menautkan ke [Ekspor Diagnostik](/id/gateway/diagnostics), dan meminta
`openclaw gateway diagnostics export --json` melalui persetujuan eksekusi eksplisit
setiap kali. Jangan menyetujui diagnostik dengan aturan izinkan-semua. Setelah disetujui,
OpenClaw mengirim laporan yang dapat ditempel dengan jalur bundel lokal dan ringkasan
-manifest. Saat sesi OpenClaw aktif menggunakan harness Codex, persetujuan
-yang sama juga mengotorisasi pengiriman bundel umpan balik Codex yang relevan ke
-server OpenAI. Prompt persetujuan menyatakan bahwa umpan balik Codex akan dikirim, tetapi
-tidak mencantumkan id sesi atau thread Codex sebelum persetujuan.
+manifes. Saat sesi OpenClaw aktif menggunakan harness Codex, persetujuan yang sama
+juga mengotorisasi pengiriman bundel umpan balik Codex yang relevan ke server OpenAI.
+Prompt persetujuan mengatakan bahwa umpan balik Codex akan dikirim, tetapi tidak
+mencantumkan id sesi atau thread Codex sebelum persetujuan.
-Jika `/diagnostics` dipanggil oleh pemilik di obrolan grup, OpenClaw menjaga
-saluran bersama tetap bersih: grup hanya menerima pemberitahuan singkat, sedangkan
-pengantar diagnostik, prompt persetujuan, dan id sesi/thread Codex dikirim ke
+Jika `/diagnostics` dipanggil oleh pemilik dalam obrolan grup, OpenClaw menjaga
+saluran bersama tetap bersih: grup hanya menerima pemberitahuan singkat, sementara
+pembukaan diagnostik, prompt persetujuan, dan id sesi/thread Codex dikirim kepada
pemilik melalui rute persetujuan privat. Jika tidak ada rute pemilik privat,
OpenClaw menolak permintaan grup dan meminta pemilik menjalankannya dari DM.
Unggahan Codex yang disetujui memanggil `feedback/upload` server aplikasi Codex dan meminta
-server aplikasi menyertakan log untuk setiap thread yang dicantumkan dan subthread Codex
-yang dibuat jika tersedia. Unggahan melewati jalur umpan balik normal Codex ke server
-OpenAI; jika umpan balik Codex dinonaktifkan di server aplikasi itu, perintah mengembalikan
-galat server aplikasi. Balasan diagnostik yang selesai mencantumkan saluran,
-id sesi OpenClaw, id thread Codex, dan perintah lokal `codex resume `
+server aplikasi untuk menyertakan log bagi setiap thread yang tercantum dan subthread Codex
+yang dibuat saat tersedia. Unggahan melewati jalur umpan balik normal Codex ke server
+OpenAI; jika umpan balik Codex dinonaktifkan di server aplikasi tersebut, perintah
+mengembalikan kesalahan server aplikasi. Balasan diagnostik yang selesai mencantumkan
+saluran, id sesi OpenClaw, id thread Codex, dan perintah lokal `codex resume `
untuk thread yang dikirim. Jika Anda menolak atau mengabaikan persetujuan,
OpenClaw tidak mencetak id Codex tersebut. Unggahan ini tidak menggantikan ekspor
diagnostik Gateway lokal.
`/codex resume` menulis file binding sidecar yang sama dengan yang digunakan harness untuk
giliran normal. Pada pesan berikutnya, OpenClaw melanjutkan thread Codex tersebut, meneruskan
-model OpenClaw yang saat ini dipilih ke server aplikasi, dan menjaga riwayat diperluas
-tetap aktif.
+model OpenClaw yang saat ini dipilih ke server aplikasi, dan mempertahankan riwayat
+diperluas tetap aktif.
### Memeriksa thread Codex dari CLI
@@ -892,49 +932,50 @@ secara langsung:
codex resume
```
-Gunakan ini saat Anda melihat bug dalam percakapan saluran dan ingin memeriksa sesi
-Codex yang bermasalah, melanjutkannya secara lokal, atau bertanya kepada Codex mengapa membuat
+Gunakan ini saat Anda melihat bug dalam percakapan saluran dan ingin memeriksa sesi Codex
+yang bermasalah, melanjutkannya secara lokal, atau bertanya kepada Codex mengapa ia membuat
pilihan alat atau penalaran tertentu. Jalur termudah biasanya menjalankan
-`/diagnostics [note]` terlebih dahulu: setelah Anda menyetujuinya, laporan yang selesai mencantumkan
-setiap thread Codex dan mencetak perintah `Inspect locally`, misalnya
+`/diagnostics [note]` terlebih dahulu: setelah Anda menyetujuinya, laporan yang selesai
+mencantumkan setiap thread Codex dan mencetak perintah `Inspect locally`, misalnya
`codex resume `. Anda dapat menyalin perintah itu langsung ke terminal.
-Anda juga bisa mendapatkan id thread dari `/codex binding` untuk obrolan saat ini atau
-`/codex threads [filter]` untuk thread server aplikasi Codex terbaru, lalu menjalankan perintah
-`codex resume` yang sama di shell Anda.
+Anda juga dapat memperoleh id thread dari `/codex binding` untuk obrolan saat ini atau
+`/codex threads [filter]` untuk thread server aplikasi Codex terbaru, lalu menjalankan
+perintah `codex resume` yang sama di shell Anda.
-Permukaan perintah memerlukan server aplikasi Codex `0.125.0` atau lebih baru. Metode
+Permukaan perintah memerlukan server aplikasi Codex `0.125.0` atau yang lebih baru. Metode
kontrol individual dilaporkan sebagai `unsupported by this Codex app-server` jika
-server aplikasi masa depan atau khusus tidak mengekspos metode JSON-RPC tersebut.
+server aplikasi masa depan atau kustom tidak mengekspos metode JSON-RPC tersebut.
## Batas hook
Harness Codex memiliki tiga lapisan hook:
-| Lapisan | Pemilik | Tujuan |
-| ------------------------------------- | ------------------------ | -------------------------------------------------------------------- |
-| Hook Plugin OpenClaw | OpenClaw | Kompatibilitas produk/Plugin di seluruh harness PI dan Codex. |
-| Middleware ekstensi server aplikasi Codex | Plugin bawaan OpenClaw | Perilaku adaptor per giliran di sekitar alat dinamis OpenClaw. |
-| Hook native Codex | Codex | Siklus hidup Codex tingkat rendah dan kebijakan alat native dari config Codex. |
+| Lapisan | Pemilik | Tujuan |
+| ------------------------------------- | ------------------------ | ------------------------------------------------------------------- |
+| Hook Plugin OpenClaw | OpenClaw | Kompatibilitas produk/Plugin di seluruh harness PI dan Codex. |
+| Middleware ekstensi server aplikasi Codex | Plugin bawaan OpenClaw | Perilaku adaptor per giliran di sekitar alat dinamis OpenClaw. |
+| Hook native Codex | Codex | Siklus hidup Codex level rendah dan kebijakan alat native dari konfigurasi Codex. |
-OpenClaw tidak menggunakan file `hooks.json` Codex proyek atau global untuk merutekan
+OpenClaw tidak menggunakan file `hooks.json` proyek atau global Codex untuk merutekan
perilaku Plugin OpenClaw. Untuk bridge alat native dan izin yang didukung,
-OpenClaw menyuntikkan config Codex per thread untuk `PreToolUse`, `PostToolUse`,
+OpenClaw menyuntikkan konfigurasi Codex per thread untuk `PreToolUse`, `PostToolUse`,
`PermissionRequest`, dan `Stop`. Hook Codex lain seperti `SessionStart` dan
-`UserPromptSubmit` tetap menjadi kontrol tingkat Codex; hook tersebut tidak diekspos sebagai
+`UserPromptSubmit` tetap menjadi kontrol level Codex; keduanya tidak diekspos sebagai
hook Plugin OpenClaw dalam kontrak v1.
-Untuk alat dinamis OpenClaw, OpenClaw mengeksekusi alat setelah Codex meminta
-panggilan, sehingga OpenClaw menjalankan perilaku Plugin dan middleware yang dimilikinya di
-adaptor harness. Untuk alat native Codex, Codex memiliki rekaman alat kanonis.
-OpenClaw dapat mencerminkan peristiwa tertentu, tetapi tidak dapat menulis ulang thread native Codex
-kecuali Codex mengekspos operasi itu melalui server aplikasi atau callback hook native.
+Untuk alat dinamis OpenClaw, OpenClaw menjalankan alat setelah Codex meminta panggilan,
+sehingga OpenClaw menjalankan perilaku Plugin dan middleware yang dimilikinya di adaptor
+harness. Untuk alat native Codex, Codex memiliki catatan alat kanonis. OpenClaw dapat
+mencerminkan peristiwa tertentu, tetapi tidak dapat menulis ulang thread native Codex
+kecuali Codex mengekspos operasi tersebut melalui server aplikasi atau callback hook
+native.
-Proyeksi Compaction dan siklus hidup LLM berasal dari notifikasi server aplikasi Codex
-dan status adaptor OpenClaw, bukan perintah hook native Codex.
-Peristiwa `before_compaction`, `after_compaction`, `llm_input`, dan
-`llm_output` OpenClaw adalah observasi tingkat adaptor, bukan tangkapan byte-per-byte
-dari permintaan internal atau payload Compaction Codex.
+Proyeksi siklus hidup Compaction dan LLM berasal dari notifikasi server aplikasi Codex
+dan status adaptor OpenClaw, bukan perintah hook native Codex. Peristiwa
+`before_compaction`, `after_compaction`, `llm_input`, dan `llm_output` OpenClaw adalah
+observasi level adaptor, bukan tangkapan byte-demi-byte dari permintaan internal atau
+payload Compaction Codex.
Notifikasi server aplikasi `hook/started` dan `hook/completed` native Codex
diproyeksikan sebagai peristiwa agen `codex_app_server.hook` untuk trajektori dan debugging.
@@ -942,135 +983,135 @@ Notifikasi tersebut tidak memanggil hook Plugin OpenClaw.
## Kontrak dukungan V1
-Mode Codex bukanlah PI dengan panggilan model yang berbeda di bawahnya. Codex memiliki lebih banyak
-loop model native, dan OpenClaw mengadaptasi permukaan Plugin dan sesinya
-di sekitar batas itu.
+Mode Codex bukan PI dengan panggilan model berbeda di bawahnya. Codex memiliki lebih banyak
+loop model native, dan OpenClaw menyesuaikan permukaan Plugin dan sesinya di sekitar batas itu.
Didukung dalam runtime Codex v1:
| Permukaan | Dukungan | Alasan |
-| --------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| Loop model OpenAI melalui Codex | Didukung | Server aplikasi Codex memiliki giliran OpenAI, lanjutkan thread native, dan kelanjutan alat native. |
+| --------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Loop model OpenAI melalui Codex | Didukung | Server aplikasi Codex memiliki giliran OpenAI, pelanjutan thread native, dan kelanjutan alat native. |
| Perutean dan pengiriman saluran OpenClaw | Didukung | Telegram, Discord, Slack, WhatsApp, iMessage, dan saluran lain tetap berada di luar runtime model. |
-| Alat dinamis OpenClaw | Didukung | Codex meminta OpenClaw mengeksekusi alat-alat ini, sehingga OpenClaw tetap berada di jalur eksekusi. |
-| Plugin prompt dan konteks | Didukung | OpenClaw membangun overlay prompt dan memproyeksikan konteks ke giliran Codex sebelum memulai atau melanjutkan thread. |
-| Siklus hidup mesin konteks | Didukung | Assemble, ingest atau pemeliharaan setelah giliran, dan koordinasi Compaction mesin konteks berjalan untuk giliran Codex. |
-| Hook alat dinamis | Didukung | `before_tool_call`, `after_tool_call`, dan middleware hasil alat berjalan di sekitar alat dinamis milik OpenClaw. |
-| Hook siklus hidup | Didukung sebagai observasi adaptor | `llm_input`, `llm_output`, `agent_end`, `before_compaction`, dan `after_compaction` berjalan dengan payload mode Codex yang jujur. |
-| Gate revisi jawaban akhir | Didukung melalui relay hook native | `Stop` Codex direlay ke `before_agent_finalize`; `revise` meminta Codex melakukan satu pass model lagi sebelum finalisasi. |
-| Shell native, patch, dan blokir atau amati MCP | Didukung melalui relay hook native | `PreToolUse` dan `PostToolUse` Codex direlay untuk permukaan alat native yang dikomit, termasuk payload MCP pada server aplikasi Codex `0.125.0` atau lebih baru. Pemblokiran didukung; penulisan ulang argumen tidak. |
-| Kebijakan izin native | Didukung melalui relay hook native | `PermissionRequest` Codex dapat dirutekan melalui kebijakan OpenClaw jika runtime mengeksposnya. Jika OpenClaw tidak mengembalikan keputusan, Codex melanjutkan melalui guardian normal atau jalur persetujuan pengguna. |
-| Tangkapan trajektori server aplikasi | Didukung | OpenClaw merekam permintaan yang dikirim ke server aplikasi dan notifikasi server aplikasi yang diterimanya. |
+| Alat dinamis OpenClaw | Didukung | Codex meminta OpenClaw menjalankan alat ini, sehingga OpenClaw tetap berada di jalur eksekusi. |
+| Prompt dan Plugin konteks | Didukung | OpenClaw membangun overlay prompt dan memproyeksikan konteks ke giliran Codex sebelum memulai atau melanjutkan thread. |
+| Siklus hidup mesin konteks | Didukung | Perakitan, ingest atau pemeliharaan setelah giliran, dan koordinasi Compaction mesin konteks berjalan untuk giliran Codex. |
+| Hook alat dinamis | Didukung | `before_tool_call`, `after_tool_call`, dan middleware hasil alat berjalan di sekitar alat dinamis milik OpenClaw. |
+| Hook siklus hidup | Didukung sebagai observasi adaptor | `llm_input`, `llm_output`, `agent_end`, `before_compaction`, dan `after_compaction` aktif dengan payload mode Codex yang jujur. |
+| Gerbang revisi jawaban akhir | Didukung melalui relay hook native | `Stop` Codex direlay ke `before_agent_finalize`; `revise` meminta Codex untuk satu lintasan model lagi sebelum finalisasi. |
+| Blokir atau observasi shell, patch, dan MCP native | Didukung melalui relay hook native | `PreToolUse` dan `PostToolUse` Codex direlay untuk permukaan alat native yang dikomit, termasuk payload MCP pada server aplikasi Codex `0.125.0` atau yang lebih baru. Pemblokiran didukung; penulisan ulang argumen tidak. |
+| Kebijakan izin native | Didukung melalui relay hook native | `PermissionRequest` Codex dapat dirutekan melalui kebijakan OpenClaw saat runtime mengeksposnya. Jika OpenClaw tidak mengembalikan keputusan, Codex melanjutkan melalui guardian normal atau jalur persetujuan pengguna. |
+| Penangkapan trajektori server aplikasi | Didukung | OpenClaw merekam permintaan yang dikirimnya ke server aplikasi dan notifikasi server aplikasi yang diterimanya. |
Tidak didukung dalam runtime Codex v1:
-| Surface | Batas V1 | Jalur mendatang |
+| Surface | Batas V1 | Jalur masa depan |
| --------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
-| Mutasi argumen alat native | Hook pra-alat native Codex dapat memblokir, tetapi OpenClaw tidak menulis ulang argumen alat native Codex. | Memerlukan dukungan hook/skema Codex untuk input alat pengganti. |
-| Riwayat transkrip native Codex yang dapat diedit | Codex memiliki riwayat thread native kanonis. OpenClaw memiliki mirror dan dapat memproyeksikan konteks mendatang, tetapi tidak boleh memutasi internal yang tidak didukung. | Tambahkan API app-server Codex eksplisit jika pembedahan thread native diperlukan. |
-| `tool_result_persist` untuk catatan alat native Codex | Hook itu mentransformasi penulisan transkrip milik OpenClaw, bukan catatan alat native Codex. | Dapat melakukan mirror catatan yang ditransformasi, tetapi penulisan ulang kanonis memerlukan dukungan Codex. |
-| Metadata compaction native yang kaya | OpenClaw mengamati mulai dan selesainya compaction, tetapi tidak menerima daftar yang dipertahankan/dibuang yang stabil, delta token, atau payload ringkasan. | Memerlukan event compaction Codex yang lebih kaya. |
-| Intervensi compaction | Hook compaction OpenClaw saat ini berada pada tingkat notifikasi dalam mode Codex. | Tambahkan hook pra/pasca compaction Codex jika plugins perlu memveto atau menulis ulang compaction native. |
-| Penangkapan permintaan API model byte demi byte | OpenClaw dapat menangkap permintaan dan notifikasi app-server, tetapi core Codex membangun permintaan API OpenAI final secara internal. | Memerlukan event pelacakan permintaan model Codex atau API debug. |
+| Mutasi argumen alat native | Hook pra-alat native Codex dapat memblokir, tetapi OpenClaw tidak menulis ulang argumen alat native Codex. | Memerlukan dukungan hook/skema Codex untuk input alat pengganti. |
+| Riwayat transkrip native Codex yang dapat diedit | Codex memiliki riwayat thread native kanonis. OpenClaw memiliki cermin dan dapat memproyeksikan konteks masa depan, tetapi tidak boleh memutasi internal yang tidak didukung. | Tambahkan API app-server Codex eksplisit jika operasi thread native diperlukan. |
+| `tool_result_persist` untuk rekaman alat native Codex | Hook tersebut mentransformasi penulisan transkrip milik OpenClaw, bukan rekaman alat native Codex. | Dapat mencerminkan rekaman yang ditransformasi, tetapi penulisan ulang kanonis memerlukan dukungan Codex. |
+| Metadata Compaction native kaya | OpenClaw mengamati awal dan penyelesaian Compaction, tetapi tidak menerima daftar kept/dropped yang stabil, delta token, atau payload ringkasan. | Memerlukan event Compaction Codex yang lebih kaya. |
+| Intervensi Compaction | Hook Compaction OpenClaw saat ini berada pada tingkat notifikasi dalam mode Codex. | Tambahkan hook pra/pasca Compaction Codex jika plugins perlu memveto atau menulis ulang Compaction native. |
+| Penangkapan permintaan API model byte demi byte | OpenClaw dapat menangkap permintaan dan notifikasi app-server, tetapi core Codex membangun permintaan akhir OpenAI API secara internal. | Memerlukan event penelusuran permintaan model Codex atau API debug. |
-## Alat, media, dan compaction
+## Alat, media, dan Compaction
Harness Codex hanya mengubah eksekutor agen tertanam tingkat rendah.
OpenClaw tetap membangun daftar alat dan menerima hasil alat dinamis dari
-harness. Teks, gambar, video, musik, TTS, persetujuan, dan keluaran alat pesan
-tetap melalui jalur pengiriman OpenClaw normal.
+harness. Teks, gambar, video, musik, TTS, persetujuan, dan output alat pesan
+tetap melewati jalur pengiriman OpenClaw normal.
-Relay hook native sengaja dibuat generik, tetapi kontrak dukungan v1
-dibatasi pada jalur alat dan izin native Codex yang diuji OpenClaw. Dalam
-runtime Codex, itu mencakup payload shell, patch, dan MCP `PreToolUse`,
+Relay hook native sengaja dibuat generik, tetapi kontrak dukungan v1 dibatasi
+pada jalur alat native Codex dan izin yang diuji OpenClaw. Dalam runtime Codex,
+itu mencakup payload shell, patch, dan MCP `PreToolUse`,
`PostToolUse`, dan `PermissionRequest`. Jangan berasumsi setiap event hook
-Codex di masa mendatang adalah surface plugin OpenClaw sampai kontrak runtime
+Codex di masa depan adalah surface Plugin OpenClaw sampai kontrak runtime
menamainya.
Untuk `PermissionRequest`, OpenClaw hanya mengembalikan keputusan izinkan atau
-tolak eksplisit ketika kebijakan memutuskan. Hasil tanpa keputusan bukanlah
-izin. Codex memperlakukannya sebagai tidak ada keputusan hook dan meneruskan ke
-jalur guardian atau persetujuan penggunanya sendiri.
+tolak eksplisit saat kebijakan memutuskan. Hasil tanpa keputusan bukanlah
+izin. Codex memperlakukannya sebagai tidak ada keputusan hook dan meneruskannya
+ke jalur guardian atau persetujuan pengguna miliknya sendiri.
-Permintaan persetujuan alat MCP Codex dirutekan melalui alur persetujuan plugin
-OpenClaw ketika Codex menandai `_meta.codex_approval_kind` sebagai
-`"mcp_tool_call"`. Prompt `request_user_input` Codex dikirim kembali ke chat
-asal, dan pesan tindak lanjut berikutnya dalam antrean menjawab permintaan
-server native itu alih-alih diarahkan sebagai konteks tambahan. Permintaan
-elisitasi MCP lainnya tetap gagal tertutup.
+Elisitasi persetujuan alat MCP Codex dirutekan melalui alur persetujuan Plugin
+OpenClaw saat Codex menandai `_meta.codex_approval_kind` sebagai
+`"mcp_tool_call"`. Prompt Codex `request_user_input` dikirim kembali ke chat
+asal, dan pesan tindak lanjut berikutnya yang diantrekan menjawab permintaan
+server native tersebut alih-alih diarahkan sebagai konteks tambahan. Permintaan
+elisitasi MCP lain tetap gagal tertutup.
Pengarahan antrean active-run dipetakan ke `turn/steer` app-server Codex. Dengan
default `messages.queue.mode: "steer"`, OpenClaw mengelompokkan pesan chat yang
-diantrekan selama jendela hening yang dikonfigurasi dan mengirimkannya sebagai
-satu permintaan `turn/steer` dalam urutan kedatangan. Mode lama `queue`
-mengirim permintaan `turn/steer` terpisah. Giliran review dan compaction manual
-Codex dapat menolak pengarahan giliran yang sama, dalam hal ini OpenClaw
-menggunakan antrean tindak lanjut ketika mode yang dipilih mengizinkan fallback. Lihat
-[Antrean pengarahan](/id/concepts/queue-steering).
+diantrekan selama jendela senyap yang dikonfigurasi dan mengirimnya sebagai satu
+permintaan `turn/steer` dalam urutan kedatangan. Mode lama `queue` mengirim
+permintaan `turn/steer` terpisah. Giliran ulasan Codex dan Compaction manual
+dapat menolak pengarahan pada giliran yang sama, dan dalam kasus itu OpenClaw
+menggunakan antrean tindak lanjut saat mode yang dipilih mengizinkan fallback.
+Lihat [Antrean pengarahan](/id/concepts/queue-steering).
-Ketika model yang dipilih menggunakan harness Codex, compaction thread native
-didelegasikan ke app-server Codex. OpenClaw menyimpan mirror transkrip untuk
-riwayat channel, pencarian, `/new`, `/reset`, dan pengalihan model atau harness
-di masa mendatang. Mirror mencakup prompt pengguna, teks asisten final, dan
-catatan reasoning atau rencana Codex ringan ketika app-server memancarkannya.
-Saat ini, OpenClaw hanya mencatat sinyal mulai dan selesai compaction native.
-OpenClaw belum mengekspos ringkasan compaction yang dapat dibaca manusia atau
-daftar teraudit entri mana yang dipertahankan Codex setelah compaction.
+Saat model yang dipilih menggunakan harness Codex, Compaction thread native
+didelegasikan ke app-server Codex. OpenClaw menyimpan cermin transkrip untuk
+riwayat channel, pencarian, `/new`, `/reset`, dan peralihan model atau harness
+di masa depan. Cermin tersebut mencakup prompt pengguna, teks asisten akhir, dan
+rekaman penalaran atau rencana Codex ringan saat app-server memancarkannya. Saat
+ini, OpenClaw hanya merekam sinyal awal dan penyelesaian Compaction native.
+OpenClaw belum mengekspos ringkasan Compaction yang dapat dibaca manusia atau
+daftar yang dapat diaudit tentang entri mana yang dipertahankan Codex setelah
+Compaction.
Karena Codex memiliki thread native kanonis, `tool_result_persist` saat ini
-tidak menulis ulang catatan hasil alat native Codex. Ini hanya berlaku ketika
+tidak menulis ulang rekaman hasil alat native Codex. Ini hanya berlaku saat
OpenClaw menulis hasil alat transkrip sesi milik OpenClaw.
Pembuatan media tidak memerlukan PI. Gambar, video, musik, PDF, TTS, dan
-pemahaman media tetap menggunakan pengaturan provider/model yang sesuai seperti
+pemahaman media tetap menggunakan pengaturan penyedia/model yang sesuai seperti
`agents.defaults.imageGenerationModel`, `videoGenerationModel`, `pdfModel`, dan
`messages.tts`.
## Pemecahan masalah
-**Codex tidak muncul sebagai provider `/model` normal:** itu memang diharapkan untuk
-konfigurasi baru. Pilih model `openai/gpt-*` dengan
-`agentRuntime.id: "codex"` (atau ref `codex/*` lama), aktifkan
+**Codex tidak muncul sebagai penyedia `/model` normal:** itu memang diharapkan
+untuk konfigurasi baru. Pilih model `openai/gpt-*` dengan
+`agentRuntime.id: "codex"` (atau ref lama `codex/*`), aktifkan
`plugins.entries.codex.enabled`, dan periksa apakah `plugins.allow` mengecualikan
`codex`.
**OpenClaw menggunakan PI alih-alih Codex:** `agentRuntime.id: "auto"` masih dapat menggunakan PI sebagai
-backend kompatibilitas ketika tidak ada harness Codex yang mengklaim run. Atur
-`agentRuntime.id: "codex"` untuk memaksa pemilihan Codex saat pengujian.
-Runtime Codex yang dipaksa akan gagal alih-alih fallback ke PI. Setelah
-app-server Codex dipilih, kegagalannya muncul langsung.
+backend kompatibilitas saat tidak ada harness Codex yang mengklaim run. Atur
+`agentRuntime.id: "codex"` untuk memaksa pemilihan Codex saat pengujian. Runtime
+Codex yang dipaksa gagal alih-alih fallback ke PI. Setelah app-server Codex
+dipilih, kegagalannya muncul langsung.
**App-server ditolak:** tingkatkan Codex agar handshake app-server
melaporkan versi `0.125.0` atau lebih baru. Prarilis versi yang sama atau versi
bersufiks build seperti `0.125.0-alpha.2` atau `0.125.0+custom` ditolak karena
-floor protokol stabil `0.125.0` adalah yang diuji OpenClaw.
+lantai protokol stabil `0.125.0` adalah yang diuji OpenClaw.
**Penemuan model lambat:** turunkan `plugins.entries.codex.config.discovery.timeoutMs`
atau nonaktifkan penemuan.
**Transport WebSocket langsung gagal:** periksa `appServer.url`, `authToken`,
-dan pastikan app-server jarak jauh berbicara dengan versi protokol app-server Codex yang sama.
+dan pastikan app-server jarak jauh berbicara versi protokol app-server Codex yang sama.
**Model non-Codex menggunakan PI:** itu memang diharapkan kecuali Anda memaksa
-`agentRuntime.id: "codex"` untuk agen itu atau memilih ref `codex/*` lama.
-`openai/gpt-*` biasa dan ref provider lainnya tetap berada di jalur provider
-normalnya dalam mode `auto`. Jika Anda memaksa `agentRuntime.id: "codex"`, setiap
-giliran tertanam untuk agen itu harus berupa model OpenAI yang didukung Codex.
+`agentRuntime.id: "codex"` untuk agen tersebut atau memilih ref lama
+`codex/*`. Ref `openai/gpt-*` biasa dan ref penyedia lain tetap berada di jalur
+penyedia normalnya dalam mode `auto`. Jika Anda memaksa `agentRuntime.id: "codex"`, setiap giliran tertanam
+untuk agen tersebut harus berupa model OpenAI yang didukung Codex.
**Computer Use terpasang tetapi alat tidak berjalan:** periksa
-`/codex computer-use status` dari sesi baru. Jika sebuah alat melaporkan
+`/codex computer-use status` dari sesi baru. Jika alat melaporkan
`Native hook relay unavailable`, gunakan `/new` atau `/reset`; jika tetap terjadi, mulai ulang
-gateway untuk membersihkan pendaftaran hook native yang usang. Jika `computer-use.list_apps`
-mengalami timeout, mulai ulang Codex Computer Use atau Codex Desktop dan coba lagi.
+gateway untuk membersihkan pendaftaran hook native yang kedaluwarsa. Jika `computer-use.list_apps`
+habis waktu, mulai ulang Codex Computer Use atau Codex Desktop dan coba lagi.
## Terkait
- [Plugin harness agen](/id/plugins/sdk-agent-harness)
- [Runtime agen](/id/concepts/agent-runtimes)
-- [Provider model](/id/concepts/model-providers)
-- [Provider OpenAI](/id/providers/openai)
+- [Penyedia model](/id/concepts/model-providers)
+- [Penyedia OpenAI](/id/providers/openai)
- [Status](/id/cli/status)
-- [Hook plugin](/id/plugins/hooks)
+- [Hook Plugin](/id/plugins/hooks)
- [Referensi konfigurasi](/id/gateway/configuration-reference)
- [Pengujian](/id/help/testing-live#live-codex-app-server-harness-smoke)
diff --git a/docs/id/plugins/dependency-resolution.md b/docs/id/plugins/dependency-resolution.md
index 201bb358f..dae5da79f 100644
--- a/docs/id/plugins/dependency-resolution.md
+++ b/docs/id/plugins/dependency-resolution.md
@@ -1,62 +1,61 @@
---
read_when:
- - Anda sedang melakukan debug instalasi paket Plugin
- - Anda mengubah perilaku inisialisasi Plugin, doctor, atau pemasangan pengelola paket
- - Anda memelihara instalasi OpenClaw terpaket atau manifest Plugin yang dibundel
+ - Anda sedang memecahkan masalah instalasi paket Plugin
+ - Anda sedang mengubah perilaku startup Plugin, doctor, atau instalasi pengelola paket
+ - Anda memelihara instalasi OpenClaw terpaket atau manifest Plugin bawaan
sidebarTitle: Dependencies
summary: Cara OpenClaw menginstal paket Plugin dan menyelesaikan dependensi Plugin
title: Resolusi dependensi Plugin
x-i18n:
- generated_at: "2026-05-03T21:35:29Z"
+ generated_at: "2026-05-05T01:48:24Z"
model: gpt-5.5
provider: openai
- source_hash: 46af62ff866d50cb53bb2761d9928f0fd2a25bdb945040885ec6bfb85be35c6d
+ source_hash: 1a832f705e51bba8ac77e2a8715a7213fd2caf10bfa42059d53db4a6d5ad8c20
source_path: plugins/dependency-resolution.md
workflow: 16
---
# Resolusi dependensi Plugin
-OpenClaw menangani pekerjaan dependensi Plugin pada waktu instalasi/pembaruan. Pemuatan waktu jalan
-tidak menjalankan manajer paket, memperbaiki pohon dependensi, atau mengubah direktori paket
+OpenClaw menjalankan pekerjaan dependensi Plugin pada waktu instalasi/pembaruan. Pemuatan runtime
+tidak menjalankan pengelola paket, memperbaiki pohon dependensi, atau memutasi direktori paket
OpenClaw.
## Pembagian tanggung jawab
Paket Plugin memiliki grafik dependensinya sendiri:
-- dependensi waktu jalan berada di `dependencies` atau `optionalDependencies`
- paket Plugin
-- impor SDK/core adalah impor peer atau impor yang disediakan OpenClaw
-- Plugin pengembangan lokal membawa dependensi yang sudah terinstal sendiri
-- Plugin npm dan git diinstal ke root paket milik OpenClaw
+- dependensi runtime berada di `dependencies` atau `optionalDependencies` paket Plugin
+- import SDK/core adalah peer atau import OpenClaw yang disediakan
+- Plugin pengembangan lokal membawa dependensinya sendiri yang sudah terpasang
+- Plugin npm dan git dipasang ke root paket milik OpenClaw
OpenClaw hanya memiliki siklus hidup Plugin:
- menemukan sumber Plugin
-- menginstal atau memperbarui paket saat diminta secara eksplisit
+- memasang atau memperbarui paket saat diminta secara eksplisit
- mencatat metadata instalasi
-- memuat titik masuk Plugin
-- gagal dengan kesalahan yang dapat ditindaklanjuti saat dependensi hilang
+- memuat entrypoint Plugin
+- gagal dengan galat yang dapat ditindaklanjuti saat dependensi hilang
## Root instalasi
OpenClaw menggunakan root stabil per sumber:
-- paket npm diinstal di bawah `~/.openclaw/npm`
+- paket npm dipasang di bawah `~/.openclaw/npm`
- paket git dikloning di bawah `~/.openclaw/git`
-- instalasi lokal/path/arsip disalin atau direferensikan tanpa perbaikan dependensi
+- instalasi lokal/path/archive disalin atau direferensikan tanpa perbaikan dependensi
-Instalasi npm dijalankan di root npm dengan:
+Instalasi npm berjalan di root npm dengan:
```bash
npm install --prefix ~/.openclaw/npm --omit=dev --ignore-scripts --no-audit --no-fund
```
-npm dapat mengangkat dependensi transitif ke `~/.openclaw/npm/node_modules` di samping
+npm dapat meng-hoist dependensi transitif ke `~/.openclaw/npm/node_modules` di samping
paket Plugin. OpenClaw memindai root npm terkelola sebelum memercayai
-instalasi dan menggunakan npm untuk menghapus paket yang dikelola npm saat penghapusan instalasi, sehingga dependensi
-waktu jalan yang diangkat tetap berada di dalam batas pembersihan terkelola.
+instalasi dan menggunakan npm untuk menghapus paket yang dikelola npm saat uninstall, sehingga dependensi
+runtime yang di-hoist tetap berada di dalam batas pembersihan terkelola.
Instalasi git mengkloning atau menyegarkan repositori, lalu menjalankan:
@@ -64,26 +63,26 @@ Instalasi git mengkloning atau menyegarkan repositori, lalu menjalankan:
npm install --omit=dev --ignore-scripts --no-audit --no-fund
```
-Plugin yang terinstal lalu dimuat dari direktori paket tersebut, sehingga resolusi
+Plugin yang terpasang kemudian dimuat dari direktori paket tersebut, sehingga resolusi
`node_modules` lokal paket dan induk bekerja dengan cara yang sama seperti pada paket
-Node normal.
+Node biasa.
## Plugin lokal
-Plugin lokal diperlakukan sebagai direktori yang dikendalikan pengembang. OpenClaw tidak
+Plugin lokal diperlakukan sebagai direktori yang dikendalikan developer. OpenClaw tidak
menjalankan `npm install`, `pnpm install`, atau perbaikan dependensi untuknya. Jika Plugin
-lokal memiliki dependensi, instal dependensi tersebut di Plugin itu sebelum memuatnya.
+lokal memiliki dependensi, pasang dependensi tersebut di Plugin itu sebelum memuatnya.
Plugin lokal TypeScript pihak ketiga dapat menggunakan jalur darurat Jiti. Plugin
JavaScript terpaket dan Plugin internal bawaan dimuat melalui
import/require native, bukan Jiti.
-## Startup dan pemuatan ulang
+## Startup dan muat ulang
-Startup Gateway dan pemuatan ulang konfigurasi tidak pernah menginstal dependensi Plugin. Keduanya membaca
-catatan instalasi Plugin, menghitung titik masuk, dan memuatnya.
+Startup Gateway dan muat ulang konfigurasi tidak pernah memasang dependensi Plugin. Keduanya membaca
+catatan instalasi Plugin, menghitung entrypoint, dan memuatnya.
-Jika dependensi hilang pada waktu jalan, Plugin gagal dimuat dan kesalahan
+Jika dependensi hilang saat runtime, Plugin gagal dimuat dan galatnya
harus mengarahkan operator ke perbaikan eksplisit:
```bash
@@ -92,33 +91,34 @@ openclaw plugins install
openclaw doctor --fix
```
-`doctor --fix` dapat membersihkan status dependensi lama yang dibuat OpenClaw dan menginstal
-Plugin unduhan terkonfigurasi yang hilang dari catatan instalasi lokal.
-Perintah ini tidak memperbaiki dependensi untuk Plugin lokal yang sudah terinstal.
+`doctor --fix` dapat membersihkan status dependensi lama yang dibuat OpenClaw dan memulihkan
+Plugin yang dapat diunduh yang hilang dari catatan instalasi lokal saat konfigurasi
+mereferensikannya. Doctor tidak memperbaiki dependensi untuk Plugin lokal
+yang sudah terpasang.
## Plugin bawaan
-Plugin bawaan yang ringan dan penting bagi core dikirim sebagai bagian dari OpenClaw.
-Plugin tersebut sebaiknya tidak memiliki pohon dependensi waktu jalan yang berat atau dipindahkan ke
-paket unduhan di ClawHub/npm.
+Plugin bawaan yang ringan dan kritis untuk core dikirim sebagai bagian dari OpenClaw.
+Plugin tersebut sebaiknya tidak memiliki pohon dependensi runtime yang berat atau dipindahkan ke
+paket yang dapat diunduh di ClawHub/npm.
-Untuk daftar terbuat saat ini berisi Plugin yang dikirim dalam paket core, diinstal
+Untuk daftar terbuat saat ini tentang Plugin yang dikirim dalam paket core, dipasang
secara eksternal, atau tetap hanya sebagai sumber, lihat [Inventaris Plugin](/id/plugins/plugin-inventory).
-Manifes Plugin bawaan tidak boleh meminta staging dependensi. Fungsionalitas Plugin
-besar atau opsional sebaiknya dikemas sebagai Plugin normal dan diinstal melalui
+Manifes Plugin bawaan tidak boleh meminta staging dependensi. Fungsionalitas
+Plugin yang besar atau opsional sebaiknya dikemas sebagai Plugin normal dan dipasang melalui
jalur npm/git/ClawHub yang sama seperti Plugin pihak ketiga.
Dalam checkout sumber, OpenClaw memperlakukan repositori sebagai monorepo pnpm. Setelah
-`pnpm install`, Plugin bawaan dimuat dari `extensions/` sehingga dependensi workspace
-lokal paket tersedia dan perubahan langsung diambil. Pengembangan checkout
-sumber hanya mendukung pnpm; `npm install` biasa di root repositori bukan
-cara yang didukung untuk menyiapkan dependensi Plugin bawaan.
+`pnpm install`, Plugin bawaan dimuat dari `extensions/` sehingga dependensi
+workspace lokal paket tersedia dan perubahan langsung ikut terbaca. Pengembangan
+checkout sumber hanya mendukung pnpm; `npm install` biasa di root repositori
+bukan cara yang didukung untuk menyiapkan dependensi Plugin bawaan.
-| Bentuk instalasi | Lokasi Plugin bawaan | Pemilik dependensi |
-| -------------------------------- | ------------------------------------- | -------------------------------------------------------------------- |
-| `npm install -g openclaw` | Pohon waktu jalan bawaan di dalam paket | Paket OpenClaw dan alur instalasi/pembaruan/doctor Plugin eksplisit |
-| Checkout Git plus `pnpm install` | Paket workspace `extensions/` | Workspace pnpm, termasuk dependensi milik tiap paket Plugin |
+| Bentuk instalasi | Lokasi Plugin bawaan | Pemilik dependensi |
+| -------------------------------- | ------------------------------------ | -------------------------------------------------------------------- |
+| `npm install -g openclaw` | Pohon runtime terbangun di dalam paket | Paket OpenClaw dan alur instalasi/pembaruan/doctor Plugin eksplisit |
+| Checkout Git plus `pnpm install` | Paket workspace `extensions/` | Workspace pnpm, termasuk dependensi masing-masing paket Plugin |
| `openclaw plugins install ...` | Root Plugin npm/git/ClawHub terkelola | Alur instalasi/pembaruan Plugin |
## Pembersihan lama
@@ -127,9 +127,9 @@ Versi OpenClaw lama membuat root dependensi Plugin bawaan saat startup atau
selama perbaikan doctor. Pembersihan doctor saat ini menghapus direktori dan
symlink usang tersebut saat `--fix` digunakan, termasuk root `plugin-runtime-deps` lama, symlink
paket prefix Node global yang menunjuk ke target `plugin-runtime-deps` yang telah dipangkas,
-manifes `.openclaw-runtime-deps*`, `node_modules` Plugin yang dibuat, direktori stage
-instalasi, dan store pnpm lokal paket. Postinstall terpaket juga
-menghapus symlink global tersebut sebelum memangkas root target lama agar peningkatan versi
-tidak meninggalkan impor paket ESM yang menggantung.
+manifes `.openclaw-runtime-deps*`, `node_modules` Plugin yang dihasilkan, direktori
+stage instalasi, dan store pnpm lokal paket. Postinstall terpaket juga
+menghapus symlink global tersebut sebelum memangkas root target lama agar upgrade
+tidak meninggalkan import paket ESM yang menggantung.
-Jalur ini hanyalah sisa lama. Instalasi baru tidak boleh membuatnya.
+Path ini hanya sisa lama. Instalasi baru tidak boleh membuatnya.
diff --git a/docs/id/plugins/manage-plugins.md b/docs/id/plugins/manage-plugins.md
index b7aa43c4d..46ce7d1af 100644
--- a/docs/id/plugins/manage-plugins.md
+++ b/docs/id/plugins/manage-plugins.md
@@ -1,24 +1,24 @@
---
read_when:
- - Anda membutuhkan contoh cepat untuk menginstal, menampilkan daftar, memperbarui, atau menghapus instalasi Plugin
- - Anda ingin memilih antara ClawHub dan distribusi Plugin npm
+ - Anda ingin contoh cepat untuk memasang, menampilkan daftar, memperbarui, atau menghapus Plugin
+ - Anda ingin memilih antara distribusi Plugin melalui ClawHub dan npm
- Anda sedang menerbitkan paket Plugin
sidebarTitle: Manage plugins
summary: Contoh cepat untuk menginstal, menampilkan daftar, menghapus instalasi, memperbarui, dan menerbitkan Plugin OpenClaw
title: Kelola Plugin
x-i18n:
- generated_at: "2026-05-02T22:19:53Z"
+ generated_at: "2026-05-05T01:48:26Z"
model: gpt-5.5
provider: openai
- source_hash: ec25a811b942f155f5d5e4cac475dbef74f0616bc85ff182c74598184e910320
+ source_hash: 7fa7aa78c1ba9c83ba09bea073987ed5e037031f7c7f29307fe18934b0bd2a1c
source_path: plugins/manage-plugins.md
workflow: 16
---
-Sebagian besar alur kerja plugin terdiri dari beberapa perintah: cari, instal, mulai ulang Gateway,
-verifikasi, dan hapus instalasi saat Anda tidak lagi membutuhkan plugin tersebut.
+Sebagian besar alur kerja Plugin hanya terdiri dari beberapa perintah: cari, instal, mulai ulang Gateway,
+verifikasi, dan hapus instalasi saat Anda tidak lagi memerlukan Plugin tersebut.
-## Daftar plugin
+## Daftar Plugin
```bash
openclaw plugins list
@@ -27,20 +27,20 @@ openclaw plugins list --verbose
openclaw plugins list --json
```
-Gunakan `--json` untuk skrip. Ini mencakup diagnostik registry dan
-`dependencyStatus` statis setiap plugin saat paket plugin mendeklarasikan
-`dependencies` atau `optionalDependencies`.
+Gunakan `--json` untuk skrip. Ini menyertakan diagnostik registri dan
+`dependencyStatus` statis setiap Plugin saat paket Plugin mendeklarasikan `dependencies` atau
+`optionalDependencies`.
```bash
openclaw plugins list --json \
| jq '.plugins[] | {id, enabled, format, source, dependencyStatus}'
```
-`plugins list` adalah pemeriksaan inventaris dingin. Ini menunjukkan apa yang dapat ditemukan OpenClaw
-dari konfigurasi, manifes, dan registry plugin; ini tidak membuktikan bahwa
-proses Gateway yang sudah berjalan telah mengimpor runtime plugin.
+`plugins list` adalah pemeriksaan inventaris dingin. Ini menampilkan apa yang dapat ditemukan OpenClaw
+dari konfigurasi, manifest, dan registri Plugin; ini tidak membuktikan bahwa
+proses Gateway yang sudah berjalan telah mengimpor runtime Plugin.
-## Instal plugin
+## Instal Plugin
```bash
# Search ClawHub for plugin packages.
@@ -65,18 +65,18 @@ openclaw plugins install ./my-plugin
openclaw plugins install --link ./my-plugin
```
-Setelah menginstal kode plugin, mulai ulang Gateway yang melayani saluran Anda:
+Setelah menginstal kode Plugin, mulai ulang Gateway yang melayani saluran Anda:
```bash
openclaw gateway restart
openclaw plugins inspect --runtime --json
```
-Gunakan `inspect --runtime` saat Anda membutuhkan bukti bahwa plugin mendaftarkan permukaan
+Gunakan `inspect --runtime` saat Anda memerlukan bukti bahwa Plugin telah mendaftarkan permukaan
runtime seperti alat, hook, layanan, metode Gateway, atau perintah CLI
-milik plugin.
+milik Plugin.
-## Perbarui plugin
+## Perbarui Plugin
```bash
openclaw plugins update
@@ -84,24 +84,26 @@ openclaw plugins update
openclaw plugins update --all
```
-Jika plugin diinstal dari dist-tag npm seperti `@beta`, pemanggilan
-`update ` berikutnya menggunakan kembali tag yang tercatat tersebut. Meneruskan spesifikasi npm eksplisit
-mengalihkan instalasi yang dilacak ke spesifikasi tersebut untuk pembaruan mendatang.
+Jika sebuah Plugin diinstal dari dist-tag npm seperti `@beta`, panggilan
+`update ` berikutnya akan menggunakan kembali tag yang tercatat tersebut. Meneruskan spec npm eksplisit
+mengalihkan instalasi yang dilacak ke spec tersebut untuk pembaruan mendatang.
```bash
openclaw plugins update @scope/openclaw-plugin@beta
openclaw plugins update @scope/openclaw-plugin
```
-Perintah kedua memindahkan plugin kembali ke jalur rilis default registry
-saat sebelumnya dipasangkan ke versi atau tag yang tepat.
+Perintah kedua memindahkan Plugin kembali ke jalur rilis default registri
+saat sebelumnya dipin ke versi atau tag tertentu.
-Saat `openclaw update` berjalan pada saluran beta, catatan plugin npm jalur default dan ClawHub
-mencoba rilis plugin `@beta` yang cocok terlebih dahulu. Jika rilis beta tersebut
-tidak ada, OpenClaw kembali ke spesifikasi default/latest yang tercatat.
-Versi tepat dan tag eksplisit seperti `@rc` atau `@beta` dipertahankan.
+Saat `openclaw update` berjalan di saluran beta, catatan Plugin npm dan ClawHub
+jalur default akan mencoba rilis Plugin `@beta` yang sesuai terlebih dahulu. Jika rilis beta tersebut
+tidak ada, OpenClaw kembali ke spec default/latest yang tercatat.
+Untuk Plugin npm, OpenClaw juga kembali saat paket beta ada tetapi gagal
+validasi instalasi. Versi tepat dan tag eksplisit seperti `@rc` atau `@beta`
+dipertahankan.
-## Hapus instalasi plugin
+## Hapus Instalasi Plugin
```bash
openclaw plugins uninstall --dry-run
@@ -110,19 +112,19 @@ openclaw plugins uninstall --keep-files
openclaw gateway restart
```
-Penghapusan instalasi menghapus entri konfigurasi plugin, catatan indeks plugin, entri daftar izinkan/tolak,
-dan jalur muat tertaut saat berlaku. Direktori instalasi terkelola
+Hapus instalasi menghapus entri konfigurasi Plugin, catatan indeks Plugin, entri daftar
+izinkan/tolak, dan jalur muat tertaut jika berlaku. Direktori instalasi terkelola akan
dihapus kecuali Anda meneruskan `--keep-files`.
-## Publikasikan plugin
+## Publikasikan Plugin
-Anda dapat memublikasikan plugin eksternal ke [ClawHub](https://clawhub.ai), npmjs.com, atau
+Anda dapat memublikasikan Plugin eksternal ke [ClawHub](https://clawhub.ai), npmjs.com, atau
keduanya.
### Publikasikan ke ClawHub
-ClawHub adalah permukaan penemuan publik utama untuk plugin OpenClaw. Ini memberi
-pengguna metadata yang dapat dicari, riwayat versi, dan hasil pemindaian registry sebelum
+ClawHub adalah permukaan penemuan publik utama untuk Plugin OpenClaw. Ini memberi
+pengguna metadata yang dapat dicari, riwayat versi, dan hasil pemindaian registri sebelum
instalasi.
```bash
@@ -140,11 +142,11 @@ openclaw plugins install clawhub:
openclaw plugins install
```
-Bentuk polos tetap memeriksa ClawHub terlebih dahulu.
+Bentuk tanpa awalan tetap memeriksa ClawHub terlebih dahulu.
### Publikasikan ke npmjs.com
-Plugin npm native harus menyertakan manifes plugin dan metadata titik masuk OpenClaw
+Plugin npm native harus menyertakan manifest Plugin dan metadata entrypoint OpenClaw
`package.json`.
```json package.json
@@ -162,7 +164,7 @@ Plugin npm native harus menyertakan manifes plugin dan metadata titik masuk Open
npm publish --access public
```
-Pengguna menginstal khusus npm dengan:
+Pengguna menginstal yang hanya npm dengan:
```bash
openclaw plugins install npm:@acme/openclaw-plugin
@@ -173,19 +175,19 @@ openclaw plugins install npm:@acme/openclaw-plugin@1.0.0
Jika paket yang sama juga tersedia di ClawHub, `npm:` melewati pencarian ClawHub dan
memaksa resolusi npm.
-## Pilihan sumber
+## Pilihan Sumber
- **ClawHub**: gunakan saat Anda menginginkan penemuan native OpenClaw, ringkasan pemindaian,
versi, dan petunjuk instalasi.
-- **npmjs.com**: gunakan saat Anda sudah mengirimkan paket JavaScript atau membutuhkan alur kerja
- dist-tag/registry privat npm.
+- **npmjs.com**: gunakan saat Anda sudah mengirimkan paket JavaScript atau memerlukan alur kerja
+ dist-tag npm/registri privat.
- **Git**: gunakan saat Anda ingin menginstal langsung dari branch, tag, atau commit.
-- **Jalur lokal**: gunakan saat Anda sedang mengembangkan atau menguji plugin pada mesin yang sama.
+- **Jalur lokal**: gunakan saat Anda sedang mengembangkan atau menguji Plugin di mesin yang sama.
## Terkait
-- [Plugin](/id/tools/plugin) - ikhtisar dan pemecahan masalah
+- [Plugin](/id/tools/plugin) - gambaran umum dan pemecahan masalah
- [`openclaw plugins`](/id/cli/plugins) - referensi CLI lengkap
-- [ClawHub](/id/tools/clawhub) - publikasi dan operasi registry
-- [Membangun plugin](/id/plugins/building-plugins) - buat paket plugin
-- [Manifes plugin](/id/plugins/manifest) - manifes dan metadata paket
+- [ClawHub](/id/tools/clawhub) - publikasi dan operasi registri
+- [Membangun Plugin](/id/plugins/building-plugins) - buat paket Plugin
+- [Manifest Plugin](/id/plugins/manifest) - manifest dan metadata paket
diff --git a/docs/id/providers/openrouter.md b/docs/id/providers/openrouter.md
index 9779e9edd..822273315 100644
--- a/docs/id/providers/openrouter.md
+++ b/docs/id/providers/openrouter.md
@@ -1,22 +1,22 @@
---
read_when:
- - Anda ingin satu kunci API untuk banyak LLM
+ - Anda menginginkan satu kunci API untuk banyak LLM
- Anda ingin menjalankan model melalui OpenRouter di OpenClaw
- Anda ingin menggunakan OpenRouter untuk pembuatan gambar
- Anda ingin menggunakan OpenRouter untuk pembuatan video
summary: Gunakan API terpadu OpenRouter untuk mengakses banyak model di OpenClaw
title: OpenRouter
x-i18n:
- generated_at: "2026-05-04T07:07:50Z"
+ generated_at: "2026-05-05T01:48:33Z"
model: gpt-5.5
provider: openai
- source_hash: f6b7299408aa0de7530e2248c7fa5dae8c09095e2d20a0e9d12a64cab83966fc
+ source_hash: b2876669c6fcc958ac13c19930cd23977b8ec27ae57069d9231932cc13c75244
source_path: providers/openrouter.md
workflow: 16
---
OpenRouter menyediakan **API terpadu** yang merutekan permintaan ke banyak model di balik satu
-endpoint dan kunci API. Ini kompatibel dengan OpenAI, sehingga sebagian besar SDK OpenAI berfungsi dengan mengganti URL dasar.
+endpoint dan kunci API. API ini kompatibel dengan OpenAI, sehingga sebagian besar SDK OpenAI berfungsi dengan mengganti URL dasar.
## Memulai
@@ -30,7 +30,7 @@ endpoint dan kunci API. Ini kompatibel dengan OpenAI, sehingga sebagian besar SD
```
- Onboarding default ke `openrouter/auto`. Pilih model konkret nanti:
+ Onboarding menggunakan `openrouter/auto` secara default. Pilih model konkret nanti:
```bash
openclaw models set openrouter//
@@ -62,9 +62,9 @@ penyedia dan model yang tersedia, lihat [/concepts/model-providers](/id/concepts
Contoh fallback bawaan:
| Referensi model | Catatan |
-| --------------------------------- | ---------------------------- |
-| `openrouter/auto` | Perutean otomatis OpenRouter |
-| `openrouter/moonshotai/kimi-k2.6` | Kimi K2.6 melalui MoonshotAI |
+| -------------------------------- | ------------------------------ |
+| `openrouter/auto` | Perutean otomatis OpenRouter |
+| `openrouter/moonshotai/kimi-k2.6` | Kimi K2.6 melalui MoonshotAI |
## Pembuatan gambar
@@ -84,7 +84,7 @@ OpenRouter juga dapat mendukung alat `image_generate`. Gunakan model gambar Open
}
```
-OpenClaw mengirim permintaan gambar ke API gambar chat completions OpenRouter dengan `modalities: ["image", "text"]`. Model gambar Gemini menerima petunjuk `aspectRatio` dan `resolution` yang didukung melalui `image_config` OpenRouter. Gunakan `agents.defaults.imageGenerationModel.timeoutMs` untuk model gambar OpenRouter yang lebih lambat; parameter `timeoutMs` per panggilan milik alat `image_generate` tetap diprioritaskan.
+OpenClaw mengirim permintaan gambar ke API gambar chat completions OpenRouter dengan `modalities: ["image", "text"]`. Model gambar Gemini menerima petunjuk `aspectRatio` dan `resolution` yang didukung melalui `image_config` OpenRouter. Gunakan `agents.defaults.imageGenerationModel.timeoutMs` untuk model gambar OpenRouter yang lebih lambat; parameter `timeoutMs` per-panggilan milik alat `image_generate` tetap diutamakan.
## Pembuatan video
@@ -103,15 +103,15 @@ OpenRouter juga dapat mendukung alat `video_generate` melalui API `/videos` asin
}
```
-OpenClaw mengirim pekerjaan teks-ke-video dan gambar-ke-video ke OpenRouter, melakukan polling
+OpenClaw mengirim tugas teks-ke-video dan gambar-ke-video ke OpenRouter, melakukan polling
pada `polling_url` yang dikembalikan, dan mengunduh video yang selesai dari
-`unsigned_urls` OpenRouter atau endpoint konten pekerjaan yang terdokumentasi.
+`unsigned_urls` OpenRouter atau endpoint konten tugas yang terdokumentasi.
Gambar referensi dikirim sebagai gambar frame pertama/terakhir secara default; gambar
-yang diberi tag `reference_image` dikirim sebagai referensi input OpenRouter. Default
-bawaan `google/veo-3.1-fast` mengiklankan durasi 4/6/8 detik yang saat ini didukung,
-resolusi `720P`/`1080P`, dan rasio aspek `16:9`/`9:16`.
-Video-ke-video tidak didaftarkan untuk OpenRouter karena API pembuatan video upstream
-saat ini menerima referensi teks dan gambar.
+yang ditandai dengan `reference_image` dikirim sebagai referensi input OpenRouter. Default
+bawaan `google/veo-3.1-fast` mengiklankan durasi 4/6/8
+detik yang saat ini didukung, resolusi `720P`/`1080P`, dan rasio aspek
+`16:9`/`9:16`. Video-ke-video tidak didaftarkan untuk OpenRouter karena API
+pembuatan video upstream saat ini menerima teks dan referensi gambar.
## Teks-ke-ucapan
@@ -136,7 +136,7 @@ OpenRouter juga dapat digunakan sebagai penyedia TTS melalui endpoint
}
```
-Jika `messages.tts.providers.openrouter.apiKey` dihilangkan, TTS menggunakan ulang
+Jika `messages.tts.providers.openrouter.apiKey` dihilangkan, TTS menggunakan kembali
`models.providers.openrouter.apiKey`, lalu `OPENROUTER_API_KEY`.
## Autentikasi dan header
@@ -144,7 +144,7 @@ Jika `messages.tts.providers.openrouter.apiKey` dihilangkan, TTS menggunakan ula
OpenRouter menggunakan token Bearer dengan kunci API Anda di balik layar.
Pada permintaan OpenRouter nyata (`https://openrouter.ai/api/v1`), OpenClaw juga menambahkan
-header atribusi aplikasi yang terdokumentasi milik OpenRouter:
+header atribusi aplikasi yang terdokumentasi oleh OpenRouter:
| Header | Nilai |
| ------------------------- | ------------------------------------------------------------------------------------------------------ |
@@ -160,8 +160,8 @@ Jika Anda mengarahkan ulang penyedia OpenRouter ke proxy atau URL dasar lain, Op
## Konfigurasi lanjutan
-
- Cache respons OpenRouter bersifat opt-in. Aktifkan per model OpenRouter dengan
+
+ Caching respons OpenRouter bersifat opt-in. Aktifkan per model OpenRouter dengan
parameter model:
```json5
@@ -183,11 +183,11 @@ Jika Anda mengarahkan ulang penyedia OpenRouter ke proxy atau URL dasar lain, Op
OpenClaw mengirim `X-OpenRouter-Cache: true` dan, saat dikonfigurasi,
`X-OpenRouter-Cache-TTL`. `responseCacheClear: true` memaksa penyegaran untuk
- permintaan saat ini dan menyimpan respons penggantinya. Alias snake_case
+ permintaan saat ini dan menyimpan respons pengganti. Alias snake_case
(`response_cache`, `response_cache_ttl_seconds`, dan
`response_cache_clear`) juga diterima.
- Ini terpisah dari cache prompt penyedia dan dari penanda
+ Ini terpisah dari caching prompt penyedia dan dari penanda
`cache_control` Anthropic milik OpenRouter. Ini hanya diterapkan pada rute
`openrouter.ai` yang terverifikasi, bukan URL dasar proxy khusus.
@@ -196,45 +196,48 @@ Jika Anda mengarahkan ulang penyedia OpenRouter ke proxy atau URL dasar lain, Op
Pada rute OpenRouter yang terverifikasi, referensi model Anthropic mempertahankan
penanda `cache_control` Anthropic khusus OpenRouter yang digunakan OpenClaw untuk
- penggunaan ulang cache prompt yang lebih baik pada blok prompt sistem/developer.
+ penggunaan ulang prompt-cache yang lebih baik pada blok prompt sistem/developer.
-
- Pada rute OpenRouter yang terverifikasi, referensi model Anthropic dengan penalaran aktif
- menghapus giliran prefill assistant di akhir sebelum permintaan mencapai OpenRouter,
- sesuai dengan persyaratan Anthropic bahwa percakapan penalaran berakhir dengan giliran pengguna.
+
+ Pada rute OpenRouter yang terverifikasi, referensi model Anthropic dengan reasoning aktif
+ menghapus giliran prefill asisten di akhir sebelum permintaan mencapai OpenRouter,
+ sesuai dengan persyaratan Anthropic bahwa percakapan reasoning diakhiri dengan giliran
+ pengguna.
-
- Pada rute non-`auto` yang didukung, OpenClaw memetakan tingkat thinking yang dipilih ke
- payload penalaran proxy OpenRouter. Petunjuk model yang tidak didukung dan
- `openrouter/auto` melewati injeksi penalaran tersebut. Hunter Alpha juga melewati
- penalaran proxy untuk referensi model terkonfigurasi yang sudah usang karena OpenRouter dapat
- mengembalikan teks jawaban akhir dalam bidang penalaran untuk rute yang sudah dihentikan itu.
+
+ Pada rute non-`auto` yang didukung, OpenClaw memetakan level thinking yang dipilih ke
+ payload reasoning proxy OpenRouter. Petunjuk model yang tidak didukung dan
+ `openrouter/auto` melewati injeksi reasoning tersebut. Hunter Alpha juga melewati
+ reasoning proxy untuk referensi model terkonfigurasi yang usang karena OpenRouter dapat
+ mengembalikan teks jawaban akhir di kolom reasoning untuk rute yang sudah dihentikan itu.
-
+
Pada rute OpenRouter yang terverifikasi, `openrouter/deepseek/deepseek-v4-flash` dan
`openrouter/deepseek/deepseek-v4-pro` mengisi `reasoning_content` yang hilang pada
- giliran assistant yang diputar ulang agar percakapan thinking/alat mempertahankan bentuk
- tindak lanjut yang diperlukan DeepSeek V4.
+ giliran asisten yang diputar ulang agar percakapan thinking/tool mempertahankan bentuk
+ tindak lanjut yang diwajibkan DeepSeek V4. OpenClaw mengirim nilai
+ `reasoning_effort` yang didukung OpenRouter untuk rute ini; `xhigh` adalah level
+ tertinggi yang diiklankan, dan override `max` yang usang dipetakan ke `xhigh`.
- OpenRouter masih berjalan melalui jalur proxy bergaya kompatibel OpenAI, sehingga
- pembentukan permintaan khusus OpenAI native seperti `serviceTier`, Responses `store`,
- payload kompat penalaran OpenAI, dan petunjuk cache prompt tidak diteruskan.
+ OpenRouter tetap berjalan melalui jalur kompatibel OpenAI bergaya proxy, sehingga
+ pembentukan permintaan khusus OpenAI native seperti `serviceTier`, `store` Responses,
+ payload kompatibilitas reasoning OpenAI, dan petunjuk prompt-cache tidak diteruskan.
-
- Referensi OpenRouter yang didukung Gemini tetap berada di jalur proxy-Gemini: OpenClaw mempertahankan
+
+ Referensi OpenRouter berbasis Gemini tetap berada pada jalur proxy-Gemini: OpenClaw mempertahankan
sanitasi thought-signature Gemini di sana, tetapi tidak mengaktifkan validasi replay Gemini native
atau penulisan ulang bootstrap.
Jika Anda meneruskan perutean penyedia OpenRouter di bawah parameter model, OpenClaw meneruskannya
- sebagai metadata perutean OpenRouter sebelum wrapper stream bersama berjalan.
+ sebagai metadata perutean OpenRouter sebelum pembungkus stream bersama berjalan.
@@ -245,6 +248,6 @@ Jika Anda mengarahkan ulang penyedia OpenRouter ke proxy atau URL dasar lain, Op
Memilih penyedia, referensi model, dan perilaku failover.
- Referensi konfigurasi lengkap untuk agent, model, dan penyedia.
+ Referensi konfigurasi lengkap untuk agen, model, dan penyedia.
diff --git a/docs/id/reference/RELEASING.md b/docs/id/reference/RELEASING.md
index 09dec06d7..928896618 100644
--- a/docs/id/reference/RELEASING.md
+++ b/docs/id/reference/RELEASING.md
@@ -2,14 +2,14 @@
read_when:
- Mencari definisi saluran rilis publik
- Menjalankan validasi rilis atau penerimaan paket
- - Mencari penamaan versi dan irama rilis
-summary: Jalur rilis, daftar periksa operator, kotak validasi, penamaan versi, dan kadensi
+ - Mencari penamaan versi dan ritme rilis
+summary: Jalur rilis, daftar periksa operator, mesin validasi, penamaan versi, dan ritme rilis
title: Kebijakan rilis
x-i18n:
- generated_at: "2026-05-04T07:07:42Z"
+ generated_at: "2026-05-05T01:48:48Z"
model: gpt-5.5
provider: openai
- source_hash: ef50d3ef5d1e23b4e2c2b097fc4ca9f6d46bf8acb9aea0c9bca6d14e213b88b6
+ source_hash: 41886d3bb2f970e6a86944e5ff207b1b29b1b64b1f234d45f626fed19cf032b3
source_path: reference/RELEASING.md
workflow: 16
---
@@ -18,185 +18,189 @@ OpenClaw memiliki tiga jalur rilis publik:
- stable: rilis bertag yang dipublikasikan ke npm `beta` secara default, atau ke npm `latest` saat diminta secara eksplisit
- beta: tag prarilis yang dipublikasikan ke npm `beta`
-- dev: ujung bergerak dari `main`
+- dev: head bergerak dari `main`
## Penamaan versi
-- Versi rilis stable: `YYYY.M.D`
+- Versi rilis stabil: `YYYY.M.D`
- Tag Git: `vYYYY.M.D`
-- Versi rilis koreksi stable: `YYYY.M.D-N`
+- Versi rilis koreksi stabil: `YYYY.M.D-N`
- Tag Git: `vYYYY.M.D-N`
- Versi prarilis beta: `YYYY.M.D-beta.N`
- Tag Git: `vYYYY.M.D-beta.N`
-- Jangan tambahkan nol di depan bulan atau hari
-- `latest` berarti rilis npm stable yang saat ini dipromosikan
-- `beta` berarti target instalasi beta saat ini
-- Rilis stable dan koreksi stable dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang sudah diverifikasi nanti
-- Setiap rilis stable OpenClaw mengirimkan paket npm dan aplikasi macOS bersama-sama;
+- Jangan menambahkan nol di depan bulan atau hari
+- `latest` berarti rilis npm stabil yang saat ini dipromosikan
+- `beta` berarti target pemasangan beta saat ini
+- Rilis stabil dan rilis koreksi stabil dipublikasikan ke npm `beta` secara default; operator rilis dapat menargetkan `latest` secara eksplisit, atau mempromosikan build beta yang sudah diperiksa nanti
+- Setiap rilis stabil OpenClaw mengirim paket npm dan aplikasi macOS bersama-sama;
rilis beta biasanya memvalidasi dan memublikasikan jalur npm/paket terlebih dahulu, dengan
- build/sign/notarize aplikasi Mac disisihkan untuk stable kecuali diminta secara eksplisit
+ build/tanda tangan/notarisasi aplikasi mac dicadangkan untuk stabil kecuali diminta secara eksplisit
-## Irama rilis
+## Kadensi rilis
- Rilis bergerak dengan beta terlebih dahulu
-- Stable menyusul hanya setelah beta terbaru divalidasi
-- Pemelihara biasanya membuat rilis dari cabang `release/YYYY.M.D` yang dibuat
+- Stabil menyusul hanya setelah beta terbaru divalidasi
+- Maintainer biasanya memotong rilis dari cabang `release/YYYY.M.D` yang dibuat
dari `main` saat ini, sehingga validasi dan perbaikan rilis tidak memblokir
pengembangan baru di `main`
-- Jika tag beta telah di-push atau dipublikasikan dan memerlukan perbaikan, pemelihara membuat
+- Jika tag beta telah di-push atau dipublikasikan dan membutuhkan perbaikan, maintainer memotong
tag `-beta.N` berikutnya alih-alih menghapus atau membuat ulang tag beta lama
-- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan bersifat
- khusus pemelihara
+- Prosedur rilis terperinci, persetujuan, kredensial, dan catatan pemulihan
+ hanya untuk maintainer
## Daftar periksa operator rilis
Daftar periksa ini adalah bentuk publik dari alur rilis. Kredensial privat,
penandatanganan, notarisasi, pemulihan dist-tag, dan detail rollback darurat tetap berada di
-runbook rilis khusus pemelihara.
+runbook rilis khusus maintainer.
-1. Mulai dari `main` saat ini: tarik yang terbaru, konfirmasi commit target telah di-push,
+1. Mulai dari `main` saat ini: tarik versi terbaru, konfirmasi commit target telah di-push,
dan konfirmasi CI `main` saat ini cukup hijau untuk membuat cabang darinya.
2. Tulis ulang bagian teratas `CHANGELOG.md` dari riwayat commit nyata dengan
- `/changelog`, jaga entri tetap berorientasi pengguna, commit, push, dan rebase/pull
+ `/changelog`, jaga entri tetap menghadap pengguna, commit, push, lalu rebase/pull
sekali lagi sebelum membuat cabang.
3. Tinjau catatan kompatibilitas rilis di
`src/plugins/compat/registry.ts` dan
- `src/commands/doctor/shared/deprecation-compat.ts`. Hapus kompatibilitas yang kedaluwarsa
- hanya ketika jalur peningkatan tetap tercakup, atau catat mengapa kompatibilitas itu
+ `src/commands/doctor/shared/deprecation-compat.ts`. Hapus
+ kompatibilitas yang kedaluwarsa hanya saat jalur peningkatan tetap tercakup, atau catat mengapa kompatibilitas itu
sengaja dipertahankan.
4. Buat `release/YYYY.M.D` dari `main` saat ini; jangan lakukan pekerjaan rilis normal
langsung di `main`.
-5. Naikkan setiap lokasi versi yang diperlukan untuk tag yang dimaksud, jalankan
+5. Naikkan setiap lokasi versi yang diperlukan untuk tag yang dituju, jalankan
`pnpm plugins:sync` agar paket Plugin yang dapat dipublikasikan berbagi versi rilis
dan metadata kompatibilitas, lalu jalankan preflight deterministik lokal:
`pnpm check:test-types`, `pnpm check:architecture`,
`pnpm build && pnpm ui:build`, `pnpm plugins:sync:check`, dan
`pnpm release:check`.
6. Jalankan `OpenClaw NPM Release` dengan `preflight_only=true`. Sebelum tag ada,
- SHA cabang rilis penuh 40 karakter diperbolehkan untuk preflight khusus validasi.
+ SHA cabang rilis lengkap 40 karakter diperbolehkan untuk preflight khusus validasi.
Simpan `preflight_run_id` yang berhasil.
-7. Mulai semua pengujian prarilis dengan `Full Release Validation` untuk cabang rilis,
- tag, atau SHA commit penuh. Ini adalah satu-satunya entrypoint manual
+7. Mulai semua pengujian prarilis dengan `Full Release Validation` untuk
+ cabang rilis, tag, atau SHA commit lengkap. Ini adalah satu titik masuk manual
untuk empat kotak pengujian rilis besar: Vitest, Docker, QA Lab, dan Package.
-8. Jika validasi gagal, perbaiki di cabang rilis dan jalankan ulang file, jalur,
- job workflow, profil paket, penyedia, atau daftar izin model terkecil yang gagal
- dan membuktikan perbaikan. Jalankan ulang payung penuh hanya ketika permukaan yang berubah membuat
+8. Jika validasi gagal, perbaiki di cabang rilis dan jalankan ulang file, lane, job workflow,
+ profil paket, penyedia, atau allowlist model terkecil yang gagal dan
+ membuktikan perbaikan. Jalankan ulang payung penuh hanya saat permukaan yang berubah membuat
bukti sebelumnya kedaluwarsa.
9. Untuk beta, tag `vYYYY.M.D-beta.N`, lalu jalankan `OpenClaw Release Publish` dari
- cabang `release/YYYY.M.D` yang sesuai. Ini memverifikasi `pnpm plugins:sync:check`,
+ cabang `release/YYYY.M.D` yang cocok. Ini memverifikasi `pnpm plugins:sync:check`,
memublikasikan semua paket Plugin yang dapat dipublikasikan ke npm terlebih dahulu, memublikasikan set yang sama
ke ClawHub kedua sebagai tarball ClawPack npm-pack, lalu mempromosikan
- artefak preflight npm OpenClaw yang disiapkan dengan dist-tag yang sesuai. Setelah
- publikasi, jalankan penerimaan paket pascapublikasi
+ artefak preflight npm OpenClaw yang disiapkan dengan dist-tag yang cocok. Setelah
+ publikasi, jalankan acceptance paket pascapublikasi
terhadap paket `openclaw@YYYY.M.D-beta.N` atau
- `openclaw@beta` yang dipublikasikan. Jika prarilis yang telah di-push atau dipublikasikan memerlukan perbaikan,
- buat nomor prarilis berikutnya yang sesuai; jangan hapus atau tulis ulang prarilis lama.
-10. Untuk stable, lanjutkan hanya setelah beta atau kandidat rilis yang telah diverifikasi memiliki
- bukti validasi yang diperlukan. Publikasi npm stable juga melalui
+ `openclaw@beta` yang dipublikasikan. Jika prarilis yang telah di-push atau dipublikasikan membutuhkan perbaikan,
+ potong nomor prarilis cocok berikutnya; jangan hapus atau tulis ulang prarilis lama.
+10. Untuk stabil, lanjutkan hanya setelah beta atau kandidat rilis yang telah diperiksa memiliki
+ bukti validasi yang diperlukan. Publikasi npm stabil juga melalui
`OpenClaw Release Publish`, menggunakan kembali artefak preflight yang berhasil melalui
- `preflight_run_id`; kesiapan rilis macOS stable juga memerlukan
- `.zip`, `.dmg`, `.dSYM.zip` yang telah dipaketkan, dan `appcast.xml` yang diperbarui di `main`.
-11. Setelah publikasi, jalankan pemverifikasi pascapublikasi npm, E2E Telegram npm terpublikasi
- mandiri opsional saat Anda memerlukan bukti kanal pascapublikasi,
+ `preflight_run_id`; kesiapan rilis macOS stabil juga memerlukan
+ `.zip`, `.dmg`, `.dSYM.zip` yang dipaketkan, dan `appcast.xml` yang diperbarui di `main`.
+11. Setelah publikasi, jalankan pemverifikasi npm pascapublikasi, E2E Telegram
+ npm-terpublikasi mandiri opsional saat Anda membutuhkan bukti kanal pascapublikasi,
promosi dist-tag saat diperlukan, catatan rilis/prarilis GitHub dari
- bagian `CHANGELOG.md` lengkap yang sesuai, dan langkah pengumuman rilis.
+ bagian `CHANGELOG.md` lengkap yang cocok, dan langkah-langkah pengumuman rilis.
## Preflight rilis
- Jalankan `pnpm check:test-types` sebelum preflight rilis agar TypeScript pengujian tetap
tercakup di luar gate lokal `pnpm check` yang lebih cepat
- Jalankan `pnpm check:architecture` sebelum preflight rilis agar pemeriksaan siklus
- impor yang lebih luas dan batas arsitektur berstatus hijau di luar gate lokal yang lebih cepat
+ impor dan batas arsitektur yang lebih luas hijau di luar gate lokal yang lebih cepat
- Jalankan `pnpm build && pnpm ui:build` sebelum `pnpm release:check` agar artefak
- rilis `dist/*` yang diharapkan dan bundel Control UI tersedia untuk langkah
- validasi paket
-- Jalankan `pnpm plugins:sync` setelah bump versi root dan sebelum tagging. Ini
- memperbarui versi paket Plugin yang dapat dipublikasikan, metadata kompatibilitas
- peer/API OpenClaw, metadata build, dan stub changelog Plugin agar sesuai dengan versi
- rilis inti. `pnpm plugins:sync:check` adalah guard rilis non-mutasi;
+ rilis `dist/*` yang diharapkan dan bundle Control UI tersedia untuk langkah
+ validasi pack
+- Jalankan `pnpm plugins:sync` setelah kenaikan versi root dan sebelum tagging. Perintah ini
+ memperbarui versi paket plugin yang dapat dipublikasikan, metadata kompatibilitas
+ peer/API OpenClaw, metadata build, dan stub changelog plugin agar cocok dengan versi
+ rilis core. `pnpm plugins:sync:check` adalah penjaga rilis non-mutasi;
workflow publikasi gagal sebelum mutasi registry apa pun jika langkah ini
terlupakan.
- Jalankan workflow manual `Full Release Validation` sebelum persetujuan rilis untuk
- memulai semua kotak pengujian prarilis dari satu entrypoint. Workflow ini menerima branch,
+ memulai semua kotak pengujian pra-rilis dari satu entrypoint. Workflow ini menerima branch,
tag, atau SHA commit penuh, menjalankan manual `CI`, dan menjalankan
- `OpenClaw Release Checks` untuk smoke instalasi, package acceptance, suite jalur rilis
- Docker, live/E2E, OpenWebUI, paritas QA Lab, Matrix, dan lane Telegram. Dengan
- `release_profile=full` dan `rerun_group=all`, workflow ini juga menjalankan package
- Telegram E2E terhadap artefak `release-package-under-test` dari release
- checks. Berikan `npm_telegram_package_spec` setelah publikasi ketika Telegram E2E
- yang sama juga harus membuktikan paket npm yang dipublikasikan. Berikan
+ `OpenClaw Release Checks` untuk install smoke, package acceptance, pemeriksaan paket
+ lintas-OS, paritas QA Lab, Matrix, dan lane Telegram. Jalankan stabil/default
+ mempertahankan live/E2E menyeluruh dan soak jalur rilis Docker di balik
+ `run_release_soak=true`; `release_profile=full` memaksa soak aktif. Dengan
+ `release_profile=full` dan `rerun_group=all`, workflow ini juga menjalankan package Telegram
+ E2E terhadap artefak `release-package-under-test` dari release checks.
+ Berikan `npm_telegram_package_spec` setelah publikasi ketika Telegram E2E yang sama
+ juga harus membuktikan paket npm yang telah dipublikasikan. Berikan
`package_acceptance_package_spec` setelah publikasi ketika Package Acceptance
- harus menjalankan matriks paket/update terhadap paket npm yang dikirim, bukan
- artefak yang dibangun dari SHA. Berikan
+ harus menjalankan matriks paket/pembaruan terhadap paket npm yang dikirim
+ alih-alih artefak yang dibangun dari SHA. Berikan
`evidence_package_spec` ketika laporan bukti privat harus membuktikan bahwa
validasi cocok dengan paket npm yang dipublikasikan tanpa memaksa Telegram E2E.
Contoh:
`gh workflow run full-release-validation.yml --ref main -f ref=release/YYYY.M.D`
-- Jalankan workflow manual `Package Acceptance` ketika Anda menginginkan bukti
- side-channel untuk kandidat paket sementara pekerjaan rilis berlanjut. Gunakan `source=npm` untuk
+- Jalankan workflow manual `Package Acceptance` ketika Anda menginginkan bukti side-channel
+ untuk kandidat paket sementara pekerjaan rilis berlanjut. Gunakan `source=npm` untuk
`openclaw@beta`, `openclaw@latest`, atau versi rilis persis; `source=ref`
untuk mengemas branch/tag/SHA `package_ref` tepercaya dengan harness
- `workflow_ref` saat ini; `source=url` untuk tarball HTTPS dengan
- SHA-256 wajib; atau `source=artifact` untuk tarball yang diunggah oleh run
- GitHub Actions lain. Workflow ini menyelesaikan kandidat menjadi
- `package-under-test`, menggunakan ulang penjadwal rilis Docker E2E terhadap
+ `workflow_ref` saat ini; `source=url` untuk tarball HTTPS dengan SHA-256
+ wajib; atau `source=artifact` untuk tarball yang diunggah oleh run GitHub
+ Actions lain. Workflow menyelesaikan kandidat menjadi
+ `package-under-test`, menggunakan kembali penjadwal rilis Docker E2E terhadap
tarball tersebut, dan dapat menjalankan QA Telegram terhadap tarball yang sama dengan
- `telegram_mode=mock-openai` atau `telegram_mode=live-frontier`. Ketika lane
- Docker yang dipilih mencakup `published-upgrade-survivor`, artefak paket adalah
- kandidat dan `published_upgrade_survivor_baseline` memilih baseline yang dipublikasikan.
+ `telegram_mode=mock-openai` atau `telegram_mode=live-frontier`. Ketika lane Docker
+ terpilih mencakup `published-upgrade-survivor`, artefak paket adalah kandidat dan
+ `published_upgrade_survivor_baseline` memilih baseline yang telah dipublikasikan.
Contoh: `gh workflow run package-acceptance.yml --ref main -f workflow_ref=main -f source=npm -f package_spec=openclaw@beta -f suite_profile=product -f published_upgrade_survivor_baseline=openclaw@2026.4.26 -f telegram_mode=mock-openai`
Profil umum:
- - `smoke`: lane instal/channel/agent, jaringan Gateway, dan reload konfigurasi
- - `package`: lane paket/update/Plugin berbasis artefak tanpa OpenWebUI atau ClawHub live
+ - `smoke`: lane instalasi/channel/agent, jaringan Gateway, dan reload konfigurasi
+ - `package`: lane paket/pembaruan/plugin native artefak tanpa OpenWebUI atau ClawHub live
- `product`: profil paket ditambah channel MCP, pembersihan cron/subagent,
pencarian web OpenAI, dan OpenWebUI
- `full`: chunk jalur rilis Docker dengan OpenWebUI
- `custom`: pemilihan `docker_lanes` persis untuk rerun terfokus
-- Jalankan workflow manual `CI` secara langsung ketika Anda hanya membutuhkan cakupan
- CI normal penuh untuk kandidat rilis. Dispatch CI manual melewati scope changed
- dan memaksa shard Linux Node, shard Plugin bawaan, kontrak channel,
- kompatibilitas Node 22, `check`, `check-additional`, smoke build,
- pemeriksaan docs, Python skills, Windows, macOS, Android, dan lane i18n Control UI.
+- Jalankan workflow manual `CI` secara langsung ketika Anda hanya membutuhkan cakupan CI normal penuh
+ untuk kandidat rilis. Dispatch CI manual melewati scoping changed
+ dan memaksa shard Linux Node, shard plugin bawaan, kontrak channel,
+ kompatibilitas Node 22, `check`, `check-additional`, build smoke,
+ pemeriksaan docs, Python skills, Windows, macOS, Android, dan lane i18n
+ Control UI.
Contoh: `gh workflow run ci.yml --ref release/YYYY.M.D`
-- Jalankan `pnpm qa:otel:smoke` saat memvalidasi telemetri rilis. Ini menjalankan
- QA-lab melalui receiver OTLP/HTTP lokal dan memverifikasi nama span trace yang diekspor,
- atribut berbatas, serta redaksi konten/pengidentifikasi tanpa memerlukan
- Opik, Langfuse, atau kolektor eksternal lain.
+- Jalankan `pnpm qa:otel:smoke` ketika memvalidasi telemetri rilis. Perintah ini menjalankan
+ QA-lab melalui receiver OTLP/HTTP lokal dan memverifikasi nama span trace
+ yang diekspor, atribut berbatas, serta redaksi konten/pengenal tanpa
+ memerlukan Opik, Langfuse, atau kolektor eksternal lain.
- Jalankan `pnpm release:check` sebelum setiap rilis bertag
-- Jalankan `OpenClaw Release Publish` untuk urutan publikasi yang melakukan mutasi setelah
- tag tersedia. Dispatch dari `release/YYYY.M.D` (atau `main` saat memublikasikan tag
- yang dapat dijangkau main), berikan tag rilis dan `preflight_run_id` npm OpenClaw
- yang berhasil, dan pertahankan scope publikasi Plugin default
- `all-publishable` kecuali Anda sengaja menjalankan perbaikan terfokus. Workflow ini
- menserialkan publikasi npm Plugin, publikasi ClawHub Plugin, dan publikasi npm OpenClaw
- agar paket inti tidak dipublikasikan sebelum Plugin eksternalnya.
-- Pemeriksaan rilis sekarang berjalan dalam workflow manual terpisah:
+- Jalankan `OpenClaw Release Publish` untuk urutan publikasi yang bermutasi setelah
+ tag tersedia. Dispatch dari `release/YYYY.M.D` (atau `main` ketika memublikasikan
+ tag yang dapat dijangkau main), berikan tag rilis dan OpenClaw npm
+ `preflight_run_id` yang berhasil, dan pertahankan cakupan publikasi plugin default
+ `all-publishable` kecuali Anda sengaja menjalankan perbaikan terfokus. Workflow
+ menyerialkan publikasi npm plugin, publikasi ClawHub plugin, dan publikasi npm OpenClaw
+ sehingga paket core tidak dipublikasikan sebelum plugin yang dieksternalisasi.
+- Release checks sekarang berjalan dalam workflow manual terpisah:
`OpenClaw Release Checks`
-- `OpenClaw Release Checks` juga menjalankan lane paritas mock QA Lab ditambah profil
- Matrix live cepat dan lane QA Telegram sebelum persetujuan rilis. Lane live
+- `OpenClaw Release Checks` juga menjalankan lane paritas mock QA Lab plus profil
+ live Matrix cepat dan lane QA Telegram sebelum persetujuan rilis. Lane live
menggunakan environment `qa-live-shared`; Telegram juga menggunakan lease kredensial
Convex CI. Jalankan workflow manual `QA-Lab - All Lanes` dengan
- `matrix_profile=all` dan `matrix_shards=true` ketika Anda menginginkan inventaris
- transport, media, dan E2EE Matrix penuh secara paralel.
+ `matrix_profile=all` dan `matrix_shards=true` ketika Anda menginginkan inventaris Matrix
+ transport, media, dan E2EE penuh secara paralel.
- Validasi runtime instalasi dan upgrade lintas-OS adalah bagian dari
- `OpenClaw Release Checks` publik dan `Full Release Validation`, yang memanggil
+ `OpenClaw Release Checks` dan `Full Release Validation` publik, yang memanggil
workflow reusable
`.github/workflows/openclaw-cross-os-release-checks-reusable.yml` secara langsung
- Pemisahan ini disengaja: pertahankan jalur rilis npm nyata tetap singkat,
- deterministik, dan berfokus pada artefak, sementara pemeriksaan live yang lebih lambat tetap berada
+ deterministik, dan berfokus artefak, sementara pemeriksaan live yang lebih lambat tetap berada
di lane sendiri agar tidak menahan atau memblokir publikasi
-- Pemeriksaan rilis yang membawa secret harus di-dispatch melalui `Full Release
-Validation` atau dari workflow ref `main`/rilis agar logika workflow dan
+- Release checks yang membawa secret harus dijalankan melalui `Full Release
+Validation` atau dari ref workflow `main`/release agar logika workflow dan
secret tetap terkendali
- `OpenClaw Release Checks` menerima branch, tag, atau SHA commit penuh selama
commit yang diselesaikan dapat dijangkau dari branch OpenClaw atau tag rilis
-- Preflight hanya-validasi `OpenClaw NPM Release` juga menerima SHA commit branch-workflow
- penuh 40 karakter saat ini tanpa memerlukan tag yang sudah di-push
+- Preflight validation-only `OpenClaw NPM Release` juga menerima SHA commit
+ branch-workflow 40 karakter penuh saat ini tanpa memerlukan tag yang telah dipush
- Jalur SHA tersebut hanya untuk validasi dan tidak dapat dipromosikan menjadi publikasi nyata
-- Dalam mode SHA, workflow mensintesis `v` hanya untuk
+- Dalam mode SHA, workflow menyintesis `v` hanya untuk
pemeriksaan metadata paket; publikasi nyata tetap memerlukan tag rilis nyata
-- Kedua workflow menjaga jalur publikasi dan promosi nyata pada runner yang di-host GitHub,
- sementara jalur validasi non-mutasi dapat menggunakan runner Linux Blacksmith yang lebih besar
+- Kedua workflow mempertahankan jalur publikasi dan promosi nyata pada runner
+ GitHub-hosted, sementara jalur validasi non-mutasi dapat menggunakan runner
+ Blacksmith Linux yang lebih besar
- Workflow tersebut menjalankan
`OPENCLAW_LIVE_TEST=1 OPENCLAW_LIVE_CACHE_TEST=1 pnpm test:live:cache`
menggunakan secret workflow `OPENAI_API_KEY` dan `ANTHROPIC_API_KEY`
@@ -206,76 +210,76 @@ Validation` atau dari workflow ref `main`/rilis agar logika workflow dan
- Setelah publikasi npm, jalankan
`node --import tsx scripts/openclaw-npm-postpublish-verify.ts YYYY.M.D`
(atau versi beta/koreksi yang sesuai) untuk memverifikasi jalur instalasi registry
- yang dipublikasikan dalam prefix temp baru
+ yang telah dipublikasikan dalam prefix temp yang baru
- Setelah publikasi beta, jalankan `OPENCLAW_NPM_TELEGRAM_PACKAGE_SPEC=openclaw@YYYY.M.D-beta.N OPENCLAW_NPM_TELEGRAM_CREDENTIAL_SOURCE=convex OPENCLAW_NPM_TELEGRAM_CREDENTIAL_ROLE=ci pnpm test:docker:npm-telegram-live`
untuk memverifikasi onboarding paket terinstal, penyiapan Telegram, dan Telegram E2E nyata
- terhadap paket npm yang dipublikasikan menggunakan pool kredensial Telegram ber-lease bersama.
- One-off maintainer lokal dapat menghilangkan var Convex dan memberikan tiga
+ terhadap paket npm yang telah dipublikasikan menggunakan pool kredensial Telegram ber-lease
+ bersama. One-off maintainer lokal boleh menghilangkan var Convex dan meneruskan tiga
kredensial env `OPENCLAW_QA_TELEGRAM_*` secara langsung.
-- Untuk menjalankan smoke beta pascapublikasi penuh dari mesin maintainer, gunakan `pnpm release:beta-smoke -- --beta betaN`. Helper menjalankan validasi update npm Parallels/target baru, menjalankan `NPM Telegram Beta E2E`, melakukan polling run workflow persis, mengunduh artefak, dan mencetak laporan Telegram.
-- Maintainer dapat menjalankan pemeriksaan pascapublikasi yang sama dari GitHub Actions melalui
+- Untuk menjalankan smoke beta pasca-publikasi penuh dari mesin maintainer, gunakan `pnpm release:beta-smoke -- --beta betaN`. Helper menjalankan validasi pembaruan npm Parallels/target-baru, mendispatch `NPM Telegram Beta E2E`, melakukan polling run workflow persis, mengunduh artefak, dan mencetak laporan Telegram.
+- Maintainer dapat menjalankan pemeriksaan pasca-publikasi yang sama dari GitHub Actions melalui
workflow manual `NPM Telegram Beta E2E`. Workflow ini sengaja hanya manual dan
tidak berjalan pada setiap merge.
- Otomasi rilis maintainer sekarang menggunakan preflight-lalu-promote:
- publikasi npm nyata harus melewati `preflight_run_id` npm yang berhasil
- - publikasi npm nyata harus di-dispatch dari branch `main` atau
+ - publikasi npm nyata harus dijalankan dari branch `main` atau
`release/YYYY.M.D` yang sama dengan run preflight yang berhasil
- rilis npm stabil default ke `beta`
- publikasi npm stabil dapat menargetkan `latest` secara eksplisit melalui input workflow
- mutasi dist-tag npm berbasis token sekarang berada di
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
- untuk keamanan, karena `npm dist-tag add` masih memerlukan `NPM_TOKEN` sementara repo
- publik mempertahankan publikasi hanya OIDC
- - `macOS Release` publik hanya-validasi; ketika tag hanya berada pada
- branch rilis tetapi workflow di-dispatch dari `main`, tetapkan
+ demi keamanan, karena `npm dist-tag add` masih memerlukan `NPM_TOKEN` sementara
+ repo publik mempertahankan publikasi hanya OIDC
+ - `macOS Release` publik hanya untuk validasi; ketika tag hanya berada di
+ branch rilis tetapi workflow dijalankan dari `main`, setel
`public_release_branch=release/YYYY.M.D`
- - publikasi mac privat nyata harus melewati `preflight_run_id` dan `validate_run_id`
- mac privat yang berhasil
+ - publikasi mac privat nyata harus melewati private mac
+ `preflight_run_id` dan `validate_run_id` yang berhasil
- jalur publikasi nyata mempromosikan artefak yang telah disiapkan alih-alih membangunnya
lagi
-- Untuk rilis koreksi stabil seperti `YYYY.M.D-N`, verifier pascapublikasi
+- Untuk rilis koreksi stabil seperti `YYYY.M.D-N`, verifier pasca-publikasi
juga memeriksa jalur upgrade prefix-temp yang sama dari `YYYY.M.D` ke `YYYY.M.D-N`
- agar koreksi rilis tidak diam-diam meninggalkan instalasi global lama pada payload
- stabil dasar
-- Preflight rilis npm gagal tertutup kecuali tarball menyertakan
+ sehingga koreksi rilis tidak dapat diam-diam membiarkan instalasi global lama pada
+ payload stabil dasar
+- Preflight rilis npm gagal tertutup kecuali tarball mencakup
`dist/control-ui/index.html` dan payload `dist/control-ui/assets/` yang tidak kosong
- agar kita tidak mengirim dashboard browser kosong lagi
-- Verifikasi pascapublikasi juga memeriksa bahwa entrypoint Plugin yang dipublikasikan dan
- metadata paket tersedia dalam layout registry terinstal. Rilis yang
- mengirim payload runtime Plugin yang hilang gagal pada verifier pascapublikasi dan
+ sehingga kita tidak mengirim dashboard browser kosong lagi
+- Verifikasi pasca-publikasi juga memeriksa bahwa entrypoint plugin dan
+ metadata paket yang dipublikasikan tersedia dalam layout registry terinstal. Rilis yang
+ mengirim payload runtime plugin yang hilang akan menggagalkan verifier postpublish dan
tidak dapat dipromosikan ke `latest`.
-- `pnpm test:install:smoke` juga menegakkan anggaran `unpackedSize` npm pack pada
- tarball update kandidat, sehingga installer e2e menangkap pembengkakan pack yang tidak disengaja
+- `pnpm test:install:smoke` juga memberlakukan anggaran `unpackedSize` pack npm pada
+ tarball pembaruan kandidat, sehingga installer e2e menangkap pembengkakan pack yang tidak disengaja
sebelum jalur publikasi rilis
-- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing Plugin, atau
- matriks pengujian Plugin, buat ulang dan tinjau output matriks
- `plugin-prerelease-extension-shard` milik planner dari
- `.github/workflows/plugin-prerelease.yml` sebelum persetujuan agar catatan rilis tidak
- menggambarkan layout CI yang sudah kedaluwarsa
-- Kesiapan rilis macOS stabil juga mencakup surface updater:
- - rilis GitHub harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang dipaketkan
+- Jika pekerjaan rilis menyentuh perencanaan CI, manifest timing extension, atau
+ matriks pengujian extension, regenerasikan dan tinjau output matriks milik planner
+ `plugin-prerelease-extension-shard` dari
+ `.github/workflows/plugin-prerelease.yml` sebelum persetujuan agar release notes tidak
+ menggambarkan layout CI yang usang
+- Kesiapan rilis macOS stabil juga mencakup permukaan updater:
+ - GitHub release harus berakhir dengan `.zip`, `.dmg`, dan `.dSYM.zip` yang telah dikemas
- `appcast.xml` pada `main` harus menunjuk ke zip stabil baru setelah publikasi
- - aplikasi yang dipaketkan harus mempertahankan bundle id non-debug, URL feed Sparkle
+ - app yang dikemas harus mempertahankan bundle id non-debug, URL feed Sparkle
yang tidak kosong, dan `CFBundleVersion` pada atau di atas floor build Sparkle kanonis
untuk versi rilis tersebut
## Kotak pengujian rilis
-`Full Release Validation` adalah cara operator memulai semua pengujian prarilis dari
-satu entrypoint. Untuk bukti commit yang di-pin pada branch yang bergerak cepat, gunakan
-helper agar setiap workflow turunan berjalan dari branch sementara yang dikunci pada
-SHA target:
+`Full Release Validation` adalah cara operator memulai semua pengujian pra-rilis dari
+satu entrypoint. Untuk bukti commit yang dipin pada branch yang bergerak cepat, gunakan
+helper agar setiap workflow anak berjalan dari branch sementara yang ditetapkan pada SHA
+target:
```bash
pnpm ci:full-release --sha
```
-Helper ini mendorong `release-ci/-...`, menjalankan `Full Release Validation`
-dari branch tersebut dengan `ref=`, memverifikasi setiap `headSha` workflow turunan
-cocok dengan target, lalu menghapus branch sementara. Ini menghindari pembuktian run
-turunan `main` yang lebih baru secara tidak sengaja.
+Helper mendorong `release-ci/-...`, mendispatch `Full Release Validation`
+dari branch tersebut dengan `ref=`, memverifikasi setiap `headSha` workflow anak
+cocok dengan target, lalu menghapus branch sementara. Ini menghindari pembuktian run anak
+`main` yang lebih baru secara tidak sengaja.
-Untuk validasi branch rilis atau tag, jalankan dari workflow ref `main` tepercaya
+Untuk validasi branch rilis atau tag, jalankan dari ref workflow `main` yang tepercaya
dan berikan branch rilis atau tag sebagai `ref`:
```bash
@@ -288,48 +292,51 @@ gh workflow run full-release-validation.yml \
-f evidence_package_spec=openclaw@YYYY.M.D-beta.N
```
-Alur kerja menyelesaikan ref target, memicu `CI` manual dengan
-`target_ref=`, memicu `OpenClaw Release Checks`, menyiapkan artefak
-induk `release-package-under-test` untuk pemeriksaan yang berhadapan dengan paket,
-dan memicu E2E Telegram paket mandiri ketika `release_profile=full` dengan
-`rerun_group=all` atau ketika `npm_telegram_package_spec` disetel. `OpenClaw Release
-Checks` kemudian menyebar ke install smoke, pemeriksaan rilis lintas-OS, cakupan
-jalur rilis Docker live/E2E, Package Acceptance dengan QA paket Telegram, paritas
-QA Lab, Matrix live, dan Telegram live. Run penuh hanya dapat diterima ketika
+Alur kerja menyelesaikan ref target, menjalankan `CI` manual dengan
+`target_ref=`, menjalankan `OpenClaw Release Checks`, menyiapkan
+artefak induk `release-package-under-test` untuk pemeriksaan yang berhadapan
+dengan paket, dan menjalankan E2E Telegram paket mandiri saat `release_profile=full` dengan
+`rerun_group=all` atau saat `npm_telegram_package_spec` ditetapkan. `OpenClaw Release
+Checks` kemudian menyebar ke install smoke, pemeriksaan rilis lintas OS, cakupan
+jalur rilis Docker live/E2E saat soak diaktifkan, Package Acceptance dengan QA
+paket Telegram, paritas QA Lab, Matrix live, dan Telegram live. Run penuh hanya dapat diterima saat
ringkasan `Full Release Validation`
-menampilkan `normal_ci` dan `release_checks` berhasil. Dalam mode full/all,
-child `npm_telegram` juga harus berhasil; di luar full/all, itu dilewati kecuali
-`npm_telegram_package_spec` yang telah diterbitkan diberikan. Ringkasan verifier
-akhir menyertakan tabel pekerjaan paling lambat untuk setiap child run, sehingga
-manajer rilis dapat melihat critical path saat ini tanpa mengunduh log.
-Lihat [Validasi rilis penuh](/id/reference/full-release-validation) untuk matriks
-tahap lengkap, nama job workflow yang tepat, perbedaan profil stable versus full,
-artefak, dan handle rerun terfokus.
-Child workflow dipicu dari ref tepercaya yang menjalankan `Full Release
-Validation`, biasanya `--ref main`, bahkan ketika target `ref` menunjuk ke branch
-atau tag rilis yang lebih lama. Tidak ada input workflow-ref Full Release Validation
-terpisah; pilih harness tepercaya dengan memilih ref run workflow.
-Jangan gunakan `--ref main -f ref=` untuk bukti commit persis pada `main`
-yang bergerak; SHA commit mentah tidak dapat menjadi ref dispatch workflow, jadi
-gunakan `pnpm ci:full-release --sha ` untuk membuat branch sementara yang
-dipin.
+menunjukkan `normal_ci` dan `release_checks` berhasil. Dalam mode full/all,
+anak `npm_telegram` juga harus berhasil; di luar full/all, itu dilewati
+kecuali `npm_telegram_package_spec` yang telah dipublikasikan disediakan. Ringkasan
+verifier akhir menyertakan tabel pekerjaan terlambat untuk setiap run anak, sehingga manajer rilis
+dapat melihat jalur kritis saat ini tanpa mengunduh log.
+Lihat [Validasi rilis penuh](/id/reference/full-release-validation) untuk
+matriks tahap lengkap, nama pekerjaan alur kerja yang persis, perbedaan profil
+stable versus full, artefak, dan handle rerun terfokus.
+Alur kerja anak dijalankan dari ref tepercaya yang menjalankan `Full Release
+Validation`, biasanya `--ref main`, bahkan saat `ref` target menunjuk ke
+branch atau tag rilis yang lebih lama. Tidak ada input ref alur kerja Full Release Validation
+terpisah; pilih harness tepercaya dengan memilih ref run alur kerja.
+Jangan gunakan `--ref main -f ref=` untuk bukti commit persis pada `main` yang bergerak;
+SHA commit mentah tidak dapat menjadi ref dispatch alur kerja, jadi gunakan
+`pnpm ci:full-release --sha ` untuk membuat branch sementara yang dipin.
-Gunakan `release_profile` untuk memilih cakupan live/provider:
+Gunakan `release_profile` untuk memilih keluasan live/provider:
-- `minimum`: jalur live dan Docker OpenAI/core yang tercepat dan kritis untuk rilis
-- `stable`: minimum ditambah cakupan provider/backend stable untuk persetujuan rilis
-- `full`: stable ditambah cakupan provider/media advisory yang luas
+- `minimum`: jalur Docker dan live OpenAI/core yang tercepat dan kritis untuk rilis
+- `stable`: minimum plus cakupan provider/backend stabil untuk persetujuan rilis
+- `full`: stable plus cakupan provider/media advisory yang luas
-`OpenClaw Release Checks` menggunakan ref workflow tepercaya untuk menyelesaikan
-ref target sekali sebagai `release-package-under-test` dan menggunakan ulang
-artefak itu dalam pemeriksaan Docker jalur rilis maupun Package Acceptance. Ini
-menjaga semua box yang berhadapan dengan paket pada byte yang sama dan menghindari
-build paket berulang. Install smoke OpenAI lintas-OS menggunakan
-`OPENCLAW_CROSS_OS_OPENAI_MODEL` ketika variabel repo/org disetel, jika tidak
-`openai/gpt-5.4`, karena lane ini membuktikan instalasi paket, onboarding,
-startup gateway, dan satu giliran agen live, bukan melakukan benchmark pada model
-default yang paling lambat. Matriks provider live yang lebih luas tetap menjadi
-tempat untuk cakupan spesifik model.
+Gunakan `run_release_soak=true` dengan `stable` saat lane yang memblokir rilis
+hijau dan Anda menginginkan sapuan menyeluruh live/E2E, jalur rilis Docker, dan
+upgrade-survivor all-since-2026.4.23 sebelum promosi. `full` menyiratkan
+`run_release_soak=true`.
+
+`OpenClaw Release Checks` menggunakan ref alur kerja tepercaya untuk menyelesaikan ref target
+sekali sebagai `release-package-under-test` dan menggunakan ulang artefak itu di pemeriksaan lintas OS,
+Package Acceptance, dan Docker jalur rilis saat soak berjalan. Ini menjaga
+semua box yang berhadapan dengan paket pada byte yang sama dan menghindari build paket berulang.
+Install smoke OpenAI lintas OS menggunakan `OPENCLAW_CROSS_OS_OPENAI_MODEL` saat
+variabel repo/org ditetapkan, jika tidak `openai/gpt-5.4`, karena lane ini
+membuktikan instalasi paket, onboarding, startup Gateway, dan satu giliran agen live
+alih-alih membenchmark model default yang paling lambat. Matriks provider live
+yang lebih luas tetap menjadi tempat cakupan khusus model.
Gunakan varian ini tergantung tahap rilis:
@@ -361,43 +368,44 @@ gh workflow run full-release-validation.yml \
-f npm_telegram_provider_mode=mock-openai
```
-Jangan gunakan payung penuh sebagai rerun pertama setelah perbaikan terfokus. Jika
-satu box gagal, gunakan child workflow, job, lane Docker, profil paket, provider
-model, atau lane QA yang gagal untuk bukti berikutnya. Jalankan payung penuh lagi
-hanya ketika perbaikan mengubah orkestrasi rilis bersama atau membuat bukti semua
-box sebelumnya menjadi usang. Verifier akhir payung memeriksa ulang id run child
-workflow yang direkam, jadi setelah child workflow berhasil direrun, rerun hanya
-job induk `Verify full validation` yang gagal.
+Jangan gunakan umbrella penuh sebagai rerun pertama setelah perbaikan terfokus. Jika satu box
+gagal, gunakan alur kerja anak, pekerjaan, lane Docker, profil paket, provider
+model, atau lane QA yang gagal untuk bukti berikutnya. Jalankan umbrella penuh lagi hanya saat
+perbaikan mengubah orkestrasi rilis bersama atau membuat bukti semua box sebelumnya
+usang. Verifier akhir umbrella memeriksa ulang id run alur kerja anak yang direkam,
+jadi setelah alur kerja anak dijalankan ulang dengan berhasil, jalankan ulang hanya pekerjaan induk
+`Verify full validation` yang gagal.
-Untuk pemulihan terbatas, berikan `rerun_group` ke payung. `all` adalah run
-release-candidate sebenarnya, `ci` hanya menjalankan child CI normal,
-`plugin-prerelease` hanya menjalankan child Plugin khusus rilis, `release-checks`
-menjalankan setiap box rilis, dan grup rilis yang lebih sempit adalah
-`install-smoke`, `cross-os`, `live-e2e`, `package`, `qa`, `qa-parity`, `qa-live`,
-dan `npm-telegram`. Rerun `npm-telegram` terfokus memerlukan
-`npm_telegram_package_spec`; run full/all dengan `release_profile=full` menggunakan
-artefak paket release-checks.
+Untuk pemulihan terbatas, berikan `rerun_group` ke umbrella. `all` adalah run
+kandidat rilis yang sebenarnya, `ci` hanya menjalankan anak CI normal, `plugin-prerelease`
+hanya menjalankan anak Plugin khusus rilis, `release-checks` menjalankan setiap box rilis,
+dan grup rilis yang lebih sempit adalah `install-smoke`, `cross-os`,
+`live-e2e`, `package`, `qa`, `qa-parity`, `qa-live`, dan `npm-telegram`.
+Rerun `npm-telegram` terfokus memerlukan `npm_telegram_package_spec`; run full/all
+dengan `release_profile=full` menggunakan artefak paket release-checks. Rerun
+lintas OS terfokus dapat menambahkan `cross_os_suite_filter=windows/packaged-upgrade` atau
+filter OS/suite lain. Kegagalan QA release-check bersifat advisory; kegagalan khusus QA
+tidak memblokir validasi rilis.
### Vitest
-Box Vitest adalah child workflow `CI` manual. CI manual sengaja melewati scoping
-perubahan dan memaksa graph tes normal untuk kandidat rilis: shard Node Linux,
-shard Plugin bundled, kontrak channel, kompatibilitas Node 22, `check`,
-`check-additional`, build smoke, pemeriksaan docs, Skills Python, Windows, macOS,
-Android, dan i18n Control UI.
+Box Vitest adalah alur kerja anak `CI` manual. CI manual sengaja
+melewati cakupan changed dan memaksa grafik tes normal untuk kandidat rilis:
+shard Linux Node, shard Plugin bundled, kontrak channel, kompatibilitas Node 22,
+`check`, `check-additional`, build smoke, pemeriksaan docs, Skills Python,
+Windows, macOS, Android, dan i18n Control UI.
-Gunakan box ini untuk menjawab "apakah source tree lulus suite tes normal penuh?"
+Gunakan box ini untuk menjawab "apakah pohon sumber lolos suite tes normal penuh?"
Ini tidak sama dengan validasi produk jalur rilis. Bukti yang perlu disimpan:
-- ringkasan `Full Release Validation` yang menampilkan URL run `CI` yang dipicu
-- run `CI` hijau pada SHA target yang tepat
-- nama shard yang gagal atau lambat dari job CI saat menyelidiki regresi
-- artefak timing Vitest seperti `.artifacts/vitest-shard-timings.json` ketika
+- ringkasan `Full Release Validation` yang menunjukkan URL run `CI` yang dijalankan
+- run `CI` hijau pada SHA target yang persis
+- nama shard yang gagal atau lambat dari pekerjaan CI saat menyelidiki regresi
+- artefak timing Vitest seperti `.artifacts/vitest-shard-timings.json` saat
suatu run memerlukan analisis performa
-Jalankan CI manual secara langsung hanya ketika rilis memerlukan CI normal yang
-deterministik tetapi tidak memerlukan box Docker, QA Lab, live, lintas-OS, atau
-paket:
+Jalankan CI manual secara langsung hanya saat rilis memerlukan CI normal yang deterministik tetapi
+bukan box Docker, QA Lab, live, lintas OS, atau paket:
```bash
gh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.D
@@ -406,16 +414,15 @@ gh workflow run ci.yml --ref main -f target_ref=release/YYYY.M.D
### Docker
Box Docker berada di `OpenClaw Release Checks` melalui
-`openclaw-live-and-e2e-checks-reusable.yml`, ditambah workflow `install-smoke`
-mode rilis. Ini memvalidasi kandidat rilis melalui lingkungan Docker berpacak
-paket, bukan hanya tes tingkat source.
+`openclaw-live-and-e2e-checks-reusable.yml`, plus alur kerja
+`install-smoke` mode rilis. Ini memvalidasi kandidat rilis melalui lingkungan
+Docker terpaket alih-alih hanya tes tingkat sumber.
Cakupan Docker rilis mencakup:
-- install smoke penuh dengan install smoke global Bun yang lambat diaktifkan
-- persiapan/penggunaan ulang image smoke Dockerfile root berdasarkan SHA target,
- dengan job smoke QR, root/gateway, dan installer/Bun berjalan sebagai shard
- install-smoke terpisah
+- install smoke penuh dengan smoke install global Bun yang lambat diaktifkan
+- persiapan/penggunaan ulang image smoke Dockerfile root berdasarkan SHA target, dengan pekerjaan QR,
+ root/Gateway, dan smoke installer/Bun berjalan sebagai shard install-smoke terpisah
- lane E2E repositori
- chunk Docker jalur rilis: `core`, `package-update-openai`,
`package-update-anthropic`, `package-update-core`, `plugins-runtime-plugins`,
@@ -424,96 +431,94 @@ Cakupan Docker rilis mencakup:
`plugins-runtime-install-c`, `plugins-runtime-install-d`,
`plugins-runtime-install-e`, `plugins-runtime-install-f`,
`plugins-runtime-install-g`, dan `plugins-runtime-install-h`
-- cakupan OpenWebUI di dalam chunk `plugins-runtime-services` ketika diminta
-- lane install/uninstall Plugin bundled yang dibagi
- `bundled-plugin-install-uninstall-0` sampai
+- cakupan OpenWebUI di dalam chunk `plugins-runtime-services` saat diminta
+- lane install/uninstall Plugin bundled yang dipisah
+ `bundled-plugin-install-uninstall-0` hingga
`bundled-plugin-install-uninstall-23`
-- suite provider live/E2E dan cakupan model live Docker ketika release checks
+- suite provider live/E2E dan cakupan model live Docker saat pemeriksaan rilis
menyertakan suite live
-Gunakan artefak Docker sebelum melakukan rerun. Scheduler jalur rilis mengunggah
+Gunakan artefak Docker sebelum menjalankan ulang. Scheduler jalur rilis mengunggah
`.artifacts/docker-tests/` dengan log lane, `summary.json`, `failures.json`,
timing fase, JSON rencana scheduler, dan perintah rerun. Untuk pemulihan terfokus,
-gunakan `docker_lanes=` pada workflow live/E2E reusable alih-alih
-mererun semua chunk rilis. Perintah rerun yang dihasilkan menyertakan
-`package_artifact_run_id` sebelumnya dan input image Docker yang disiapkan ketika
-tersedia, sehingga lane yang gagal dapat menggunakan ulang tarball dan image GHCR
-yang sama.
+gunakan `docker_lanes=` pada alur kerja live/E2E reusable alih-alih
+menjalankan ulang semua chunk rilis. Perintah rerun yang dihasilkan menyertakan
+`package_artifact_run_id` sebelumnya dan input image Docker yang disiapkan bila tersedia, sehingga
+lane yang gagal dapat menggunakan ulang tarball dan image GHCR yang sama.
### QA Lab
-Box QA Lab juga merupakan bagian dari `OpenClaw Release Checks`. Ini adalah gate
-rilis perilaku agentic dan tingkat channel, terpisah dari mekanika paket Vitest
-dan Docker.
+Box QA Lab juga merupakan bagian dari `OpenClaw Release Checks`. Ini adalah gate rilis
+perilaku agentic dan tingkat channel, terpisah dari mekanika paket Vitest dan Docker.
Cakupan QA Lab rilis mencakup:
- lane paritas mock yang membandingkan lane kandidat OpenAI dengan baseline Opus 4.6
menggunakan paket paritas agentic
-- profil QA Matrix live cepat menggunakan environment `qa-live-shared`
-- lane QA Telegram live menggunakan sewa kredensial Convex CI
-- `pnpm qa:otel:smoke` ketika telemetri rilis memerlukan bukti lokal eksplisit
+- profil QA Matrix live cepat menggunakan lingkungan `qa-live-shared`
+- lane QA Telegram live menggunakan lease kredensial CI Convex
+- `pnpm qa:otel:smoke` saat telemetri rilis memerlukan bukti lokal eksplisit
-Gunakan box ini untuk menjawab "apakah rilis berperilaku benar dalam skenario QA
-dan alur channel live?" Simpan URL artefak untuk lane paritas, Matrix, dan Telegram
+Gunakan box ini untuk menjawab "apakah rilis berperilaku benar dalam skenario QA dan
+alur channel live?" Simpan URL artefak untuk lane paritas, Matrix, dan Telegram
saat menyetujui rilis. Cakupan Matrix penuh tetap tersedia sebagai run QA-Lab
-sharded manual, bukan lane kritis rilis default.
+manual bershard, bukan lane default yang kritis untuk rilis.
-### Package
+### Paket
-Box Package adalah gate produk yang dapat diinstal. Ini didukung oleh
+Box Paket adalah gate produk yang dapat diinstal. Ini didukung oleh
`Package Acceptance` dan resolver
-`scripts/resolve-openclaw-package-candidate.mjs`. Resolver menormalkan kandidat
-menjadi tarball `package-under-test` yang dikonsumsi oleh Docker E2E, memvalidasi
-inventaris paket, mencatat versi paket dan SHA-256, serta menjaga ref harness
-workflow terpisah dari ref sumber paket.
+`scripts/resolve-openclaw-package-candidate.mjs`. Resolver menormalisasi
+kandidat menjadi tarball `package-under-test` yang dikonsumsi oleh Docker E2E, memvalidasi
+inventaris paket, merekam versi paket dan SHA-256, serta menjaga
+ref harness alur kerja terpisah dari ref sumber paket.
Sumber kandidat yang didukung:
-- `source=npm`: `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw yang tepat
-- `source=ref`: kemas branch, tag, atau SHA commit penuh `package_ref` tepercaya
+- `source=npm`: `openclaw@beta`, `openclaw@latest`, atau versi rilis OpenClaw
+ yang persis
+- `source=ref`: pack branch, tag, atau SHA commit penuh `package_ref` tepercaya
dengan harness `workflow_ref` yang dipilih
- `source=url`: unduh `.tgz` HTTPS dengan `package_sha256` wajib
- `source=artifact`: gunakan ulang `.tgz` yang diunggah oleh run GitHub Actions lain
-`OpenClaw Release Checks` menjalankan Package Acceptance dengan `source=artifact`,
-artefak paket rilis yang disiapkan, `suite_profile=custom`,
+`OpenClaw Release Checks` menjalankan Package Acceptance dengan `source=artifact`, artefak
+paket rilis yang disiapkan, `suite_profile=custom`,
`docker_lanes=doctor-switch update-channel-switch upgrade-survivor published-upgrade-survivor plugins-offline plugin-update`,
-`published_upgrade_survivor_baselines=all-since-2026.4.23`,
-`published_upgrade_survivor_scenarios=reported-issues`, dan
-`telegram_mode=mock-openai`. Package Acceptance menjaga migrasi, pembaruan,
-pembersihan dependensi Plugin usang, fixture Plugin offline, pembaruan Plugin,
-dan QA paket Telegram terhadap tarball terselesaikan yang sama. Matriks upgrade
-mencakup setiap baseline stable yang dipublikasikan npm dari `2026.4.23` sampai
-`latest`; gunakan Package Acceptance dengan `source=npm` untuk kandidat yang
-sudah dikirim, atau `source=ref`/`source=artifact` untuk tarball npm lokal
-berbasis SHA sebelum publish. Ini adalah pengganti native GitHub untuk sebagian
-besar cakupan package/update yang sebelumnya memerlukan Parallels. Pemeriksaan
-rilis lintas-OS tetap penting untuk onboarding, installer, dan perilaku platform
-spesifik OS, tetapi validasi produk package/update sebaiknya mengutamakan
-Package Acceptance.
+`telegram_mode=mock-openai`. Package Acceptance menjaga migrasi, update, pembersihan
+dependensi Plugin basi, fixture Plugin offline, update Plugin, dan QA paket Telegram
+terhadap tarball terselesaikan yang sama. Pemeriksaan rilis yang memblokir menggunakan
+baseline paket terbaru yang telah dipublikasikan secara default; `run_release_soak=true` atau
+`release_profile=full` memperluas ke setiap baseline stabil yang dipublikasikan npm dari
+`2026.4.23` hingga `latest` plus fixture isu yang dilaporkan. Gunakan
+Package Acceptance dengan `source=npm` untuk kandidat yang sudah dikirim, atau
+`source=ref`/`source=artifact` untuk tarball npm lokal berbasis SHA sebelum
+publikasi. Ini adalah pengganti GitHub-native
+untuk sebagian besar cakupan paket/update yang sebelumnya memerlukan
+Parallels. Pemeriksaan rilis lintas OS masih penting untuk onboarding, installer,
+dan perilaku platform khusus OS, tetapi validasi produk paket/update sebaiknya
+memilih Package Acceptance.
-Checklist kanonis untuk validasi pembaruan dan Plugin adalah
-[Menguji pembaruan dan Plugin](/id/help/testing-updates-plugins). Gunakan ini saat
-memutuskan lane lokal, Docker, Package Acceptance, atau release-check mana yang
-membuktikan perubahan install/update Plugin, cleanup doctor, atau migrasi paket
-yang dipublikasikan. Migrasi pembaruan publikasi lengkap dari setiap paket stable
-`2026.4.23+` adalah workflow `Update Migration` manual terpisah, bukan bagian
-dari Full Release CI.
+Checklist kanonis untuk validasi update dan Plugin adalah
+[Menguji update dan Plugin](/id/help/testing-updates-plugins). Gunakan itu saat
+menentukan lane lokal, Docker, Package Acceptance, atau release-check mana yang membuktikan
+instalasi/update Plugin, pembersihan doctor, atau perubahan migrasi paket yang dipublikasikan.
+Migrasi update publikasi menyeluruh dari setiap paket stabil `2026.4.23+` adalah
+alur kerja `Update Migration` manual terpisah, bukan bagian dari Full Release CI.
Kelonggaran package-acceptance legacy sengaja dibatasi waktu. Paket hingga
-`2026.4.25` dapat menggunakan jalur kompatibilitas untuk celah metadata yang sudah
-dipublikasikan ke npm: entri inventaris QA privat yang hilang dari tarball,
-`gateway install --wrapper` yang hilang, file patch yang hilang dalam fixture git
-turunan tarball, `update.channel` tersimpan yang hilang, lokasi install-record
-Plugin legacy, persistensi install-record marketplace yang hilang, dan migrasi
-metadata config selama `plugins update`. Paket `2026.4.26` yang dipublikasikan
-dapat memberi peringatan untuk file stamp metadata build lokal yang sudah
-dikirim. Paket berikutnya harus memenuhi kontrak paket modern; celah yang sama
-akan menggagalkan validasi rilis.
+`2026.4.25` dapat menggunakan jalur kompatibilitas untuk celah metadata yang sudah dipublikasikan
+ke npm: entri inventaris QA privat yang hilang dari tarball, `gateway install --wrapper`
+yang hilang, file patch yang hilang dalam fixture git turunan tarball,
+`update.channel` yang tidak dipertahankan, lokasi install-record Plugin legacy,
+persistensi install-record marketplace yang hilang, dan migrasi metadata konfigurasi
+selama `plugins update`. Paket `2026.4.26` yang dipublikasikan dapat memberi peringatan
+untuk file stamp metadata build lokal yang sudah dikirim. Paket berikutnya
+harus memenuhi kontrak paket modern; celah yang sama menggagalkan validasi
+rilis.
-Gunakan profil Package Acceptance yang lebih luas ketika pertanyaan rilis adalah
-tentang paket yang benar-benar dapat diinstal:
+Gunakan profil Package Acceptance yang lebih luas saat pertanyaan rilis adalah tentang
+paket aktual yang dapat diinstal:
```bash
gh workflow run package-acceptance.yml \
@@ -529,31 +534,31 @@ Profil paket umum:
- `smoke`: jalur pemasangan paket/kanal/agen cepat, jaringan Gateway, dan pemuatan ulang
konfigurasi
-- `package`: kontrak pemasangan/pembaruan/paket Plugin tanpa ClawHub langsung; ini adalah
- bawaan release-check
+- `package`: kontrak pemasangan/pembaruan/paket Plugin tanpa ClawHub langsung; ini adalah default
+ pemeriksaan rilis
- `product`: `package` ditambah kanal MCP, pembersihan cron/subagen, pencarian web
OpenAI, dan OpenWebUI
- `full`: potongan jalur rilis Docker dengan OpenWebUI
- `custom`: daftar `docker_lanes` persis untuk pengulangan terfokus
Untuk bukti Telegram kandidat paket, aktifkan `telegram_mode=mock-openai` atau
-`telegram_mode=live-frontier` pada Package Acceptance. Alur kerja meneruskan
-tarball `package-under-test` yang telah diselesaikan ke jalur Telegram; alur kerja
-Telegram mandiri tetap menerima spesifikasi npm yang telah dipublikasikan untuk pemeriksaan pascapublikasi.
+`telegram_mode=live-frontier` di Package Acceptance. Alur kerja meneruskan tarball
+`package-under-test` yang diselesaikan ke jalur Telegram; alur kerja Telegram mandiri
+tetap menerima spesifikasi npm yang sudah diterbitkan untuk pemeriksaan pascapublikasi.
-## Otomatisasi publikasi rilis
+## Otomasi publikasi rilis
-`OpenClaw Release Publish` adalah titik masuk publikasi bermutasi normal. Ini
-mengorkestrasi alur kerja trusted-publisher sesuai urutan yang dibutuhkan rilis:
+`OpenClaw Release Publish` adalah titik masuk publikasi mutatif normal. Ia
+mengorkestrasi alur kerja penerbit tepercaya dalam urutan yang dibutuhkan rilis:
-1. Check out tag rilis dan selesaikan SHA commit-nya.
-2. Verifikasi tag dapat dijangkau dari `main` atau `release/*`.
+1. Checkout tag rilis dan selesaikan SHA commit-nya.
+2. Verifikasi bahwa tag dapat dijangkau dari `main` atau `release/*`.
3. Jalankan `pnpm plugins:sync:check`.
4. Dispatch `Plugin NPM Release` dengan `publish_scope=all-publishable` dan
`ref=`.
5. Dispatch `Plugin ClawHub Release` dengan cakupan dan SHA yang sama.
6. Dispatch `OpenClaw NPM Release` dengan tag rilis, dist-tag npm, dan
- `preflight_run_id` yang tersimpan.
+ `preflight_run_id` yang disimpan.
Contoh publikasi beta:
@@ -565,7 +570,7 @@ gh workflow run openclaw-release-publish.yml \
-f npm_dist_tag=beta
```
-Publikasi stabil ke dist-tag beta bawaan:
+Publikasi stabil ke dist-tag beta default:
```bash
gh workflow run openclaw-release-publish.yml \
@@ -586,90 +591,93 @@ gh workflow run openclaw-release-publish.yml \
```
Gunakan alur kerja tingkat lebih rendah `Plugin NPM Release` dan `Plugin ClawHub Release`
-hanya untuk pekerjaan perbaikan atau publikasi ulang yang terfokus. Untuk perbaikan Plugin
-terpilih, berikan `plugin_publish_scope=selected` dan `plugins=@openclaw/name` ke
-`OpenClaw Release Publish`, atau dispatch alur kerja anak secara langsung ketika paket
-OpenClaw tidak boleh dipublikasikan.
+hanya untuk pekerjaan perbaikan atau publikasi ulang terfokus. Untuk perbaikan Plugin terpilih, berikan
+`plugin_publish_scope=selected` dan `plugins=@openclaw/name` ke
+`OpenClaw Release Publish`, atau dispatch alur kerja anak secara langsung saat paket
+OpenClaw tidak boleh diterbitkan.
## Input alur kerja NPM
`OpenClaw NPM Release` menerima input yang dikendalikan operator berikut:
- `tag`: tag rilis wajib seperti `v2026.4.2`, `v2026.4.2-1`, atau
- `v2026.4.2-beta.1`; saat `preflight_only=true`, ini juga dapat berupa SHA commit
- cabang alur kerja lengkap 40 karakter saat ini untuk preflight khusus validasi
-- `preflight_only`: `true` hanya untuk validasi/build/paket, `false` untuk jalur
- publikasi sebenarnya
+ `v2026.4.2-beta.1`; ketika `preflight_only=true`, ini juga dapat berupa SHA commit
+ 40 karakter penuh cabang alur kerja saat ini untuk preflight khusus validasi
+- `preflight_only`: `true` hanya untuk validasi/build/paket, `false` untuk
+ jalur publikasi sebenarnya
- `preflight_run_id`: wajib pada jalur publikasi sebenarnya agar alur kerja menggunakan kembali
- tarball yang telah disiapkan dari proses preflight yang berhasil
-- `npm_dist_tag`: tag target npm untuk jalur publikasi; bawaan ke `beta`
+ tarball yang disiapkan dari proses preflight yang berhasil
+- `npm_dist_tag`: tag target npm untuk jalur publikasi; default ke `beta`
`OpenClaw Release Publish` menerima input yang dikendalikan operator berikut:
- `tag`: tag rilis wajib; harus sudah ada
- `preflight_run_id`: id proses preflight `OpenClaw NPM Release` yang berhasil;
- wajib saat `publish_openclaw_npm=true`
+ wajib ketika `publish_openclaw_npm=true`
- `npm_dist_tag`: tag target npm untuk paket OpenClaw
-- `plugin_publish_scope`: bawaan ke `all-publishable`; gunakan `selected` hanya
+- `plugin_publish_scope`: default ke `all-publishable`; gunakan `selected` hanya
untuk pekerjaan perbaikan terfokus
-- `plugins`: nama paket `@openclaw/*` yang dipisahkan koma saat
+- `plugins`: nama paket `@openclaw/*` yang dipisahkan koma ketika
`plugin_publish_scope=selected`
-- `publish_openclaw_npm`: bawaan ke `true`; tetapkan `false` hanya saat menggunakan
+- `publish_openclaw_npm`: default ke `true`; setel `false` hanya saat menggunakan
alur kerja sebagai orkestrator perbaikan khusus Plugin
`OpenClaw Release Checks` menerima input yang dikendalikan operator berikut:
-- `ref`: cabang, tag, atau SHA commit lengkap yang akan divalidasi. Pemeriksaan yang memuat rahasia
+- `ref`: cabang, tag, atau SHA commit penuh untuk divalidasi. Pemeriksaan yang membawa secret
mengharuskan commit yang diselesaikan dapat dijangkau dari cabang OpenClaw atau
tag rilis.
+- `run_release_soak`: ikut serta dalam soak live/E2E menyeluruh, jalur rilis Docker, dan
+ upgrade-survivor sejak awal pada pemeriksaan rilis stabil/default. Ini dipaksa
+ aktif oleh `release_profile=full`.
Aturan:
- Tag stabil dan koreksi dapat dipublikasikan ke `beta` atau `latest`
- Tag prarilis beta hanya dapat dipublikasikan ke `beta`
-- Untuk `OpenClaw NPM Release`, input SHA commit lengkap hanya diizinkan saat
+- Untuk `OpenClaw NPM Release`, input SHA commit penuh hanya diizinkan ketika
`preflight_only=true`
- `OpenClaw Release Checks` dan `Full Release Validation` selalu
- khusus validasi
+ hanya validasi
- Jalur publikasi sebenarnya harus menggunakan `npm_dist_tag` yang sama dengan yang digunakan selama preflight;
- alur kerja memverifikasi metadata tersebut sebelum publikasi berlanjut
+ alur kerja memverifikasi metadata tersebut sebelum publikasi dilanjutkan
## Urutan rilis npm stabil
Saat membuat rilis npm stabil:
1. Jalankan `OpenClaw NPM Release` dengan `preflight_only=true`
- - Sebelum tag ada, Anda dapat menggunakan SHA commit cabang alur kerja lengkap saat ini
+ - Sebelum tag ada, Anda dapat menggunakan SHA commit penuh cabang alur kerja saat ini
untuk dry run khusus validasi dari alur kerja preflight
2. Pilih `npm_dist_tag=beta` untuk alur normal beta-terlebih-dahulu, atau `latest` hanya
- saat Anda sengaja menginginkan publikasi stabil langsung
-3. Jalankan `Full Release Validation` pada cabang rilis, tag rilis, atau SHA commit lengkap
- saat Anda menginginkan CI normal ditambah cakupan cache prompt langsung, Docker, QA Lab,
+ ketika Anda sengaja menginginkan publikasi stabil langsung
+3. Jalankan `Full Release Validation` pada cabang rilis, tag rilis, atau SHA
+ commit penuh saat Anda menginginkan CI normal ditambah cakupan cache prompt live, Docker, QA Lab,
Matrix, dan Telegram dari satu alur kerja manual
4. Jika Anda sengaja hanya membutuhkan grafik pengujian normal yang deterministik, jalankan
alur kerja manual `CI` pada ref rilis sebagai gantinya
5. Simpan `preflight_run_id` yang berhasil
6. Jalankan `OpenClaw Release Publish` dengan `tag` yang sama, `npm_dist_tag` yang sama,
- dan `preflight_run_id` yang tersimpan; ini memublikasikan Plugin yang dieksternalisasi ke npm
+ dan `preflight_run_id` yang disimpan; ini menerbitkan Plugin yang dieksternalisasi ke npm
dan ClawHub sebelum mempromosikan paket npm OpenClaw
7. Jika rilis mendarat di `beta`, gunakan alur kerja privat
`openclaw/releases-private/.github/workflows/openclaw-npm-dist-tags.yml`
untuk mempromosikan versi stabil tersebut dari `beta` ke `latest`
8. Jika rilis sengaja dipublikasikan langsung ke `latest` dan `beta`
harus segera mengikuti build stabil yang sama, gunakan alur kerja privat yang sama
- untuk mengarahkan kedua dist-tag ke versi stabil, atau biarkan sinkronisasi
- pemulihan mandiri terjadwalnya memindahkan `beta` nanti
+ untuk mengarahkan kedua dist-tag ke versi stabil, atau biarkan sinkronisasi pemulihan mandiri
+ terjadwalnya memindahkan `beta` nanti
Mutasi dist-tag berada di repo privat demi keamanan karena masih
-memerlukan `NPM_TOKEN`, sementara repo publik mempertahankan publikasi khusus OIDC.
+memerlukan `NPM_TOKEN`, sementara repo publik mempertahankan publikasi hanya OIDC.
-Itu membuat jalur publikasi langsung dan jalur promosi beta-terlebih-dahulu sama-sama
+Itu menjaga jalur publikasi langsung dan jalur promosi beta-terlebih-dahulu tetap
terdokumentasi dan terlihat oleh operator.
Jika maintainer harus fallback ke autentikasi npm lokal, jalankan perintah CLI 1Password
-(`op`) hanya di dalam sesi tmux khusus. Jangan panggil `op`
-langsung dari shell agen utama; menempatkannya di dalam tmux membuat prompt,
-peringatan, dan penanganan OTP dapat diamati dan mencegah peringatan host berulang.
+(`op`) apa pun hanya di dalam sesi tmux khusus. Jangan panggil `op`
+langsung dari shell agen utama; menjaganya di dalam tmux membuat prompt,
+peringatan, dan penanganan OTP dapat diamati serta mencegah peringatan host berulang.
## Referensi publik
diff --git a/docs/id/reference/full-release-validation.md b/docs/id/reference/full-release-validation.md
index 65d0992c5..620c64789 100644
--- a/docs/id/reference/full-release-validation.md
+++ b/docs/id/reference/full-release-validation.md
@@ -2,24 +2,21 @@
read_when:
- Menjalankan atau menjalankan ulang Validasi Rilis Penuh
- Membandingkan profil validasi rilis stabil dan lengkap
- - Memecahkan masalah kegagalan tahap validasi rilis
-summary: Tahapan Validasi Rilis Penuh, alur kerja turunan, profil rilis, pegangan jalankan ulang, dan bukti
+ - Men-debug kegagalan tahap validasi rilis
+summary: Tahapan Validasi Rilis Lengkap, alur kerja turunan, profil rilis, rujukan untuk menjalankan ulang, dan bukti
title: Validasi rilis penuh
x-i18n:
- generated_at: "2026-05-03T21:36:23Z"
+ generated_at: "2026-05-05T01:49:17Z"
model: gpt-5.5
provider: openai
- source_hash: 038901ad751c00b35f69d7ec5caf74e577dcf2350d7658037c3ecc9ff5fab6d7
+ source_hash: 6cf696761f516fc7f8e9606a2a06fab61a644731330eb484a388f276767a9e0d
source_path: reference/full-release-validation.md
workflow: 16
---
-`Full Release Validation` adalah payung rilis. Ini adalah titik masuk manual tunggal
-untuk bukti pra-rilis, tetapi sebagian besar pekerjaan terjadi di workflow anak sehingga
-kotak yang gagal dapat dijalankan ulang tanpa memulai ulang seluruh rilis.
+`Full Release Validation` adalah payung rilis. Ini adalah satu titik masuk manual untuk bukti pra-rilis, tetapi sebagian besar pekerjaan terjadi di workflow anak agar kotak yang gagal dapat dijalankan ulang tanpa memulai ulang seluruh rilis.
-Jalankan dari ref workflow tepercaya, biasanya `main`, dan teruskan cabang rilis,
-tag, atau SHA commit lengkap sebagai `ref`:
+Jalankan dari ref workflow tepercaya, biasanya `main`, dan teruskan branch rilis, tag, atau SHA commit lengkap sebagai `ref`:
```bash
gh workflow run full-release-validation.yml \
@@ -30,97 +27,90 @@ gh workflow run full-release-validation.yml \
-f release_profile=stable
```
-Workflow anak menggunakan ref workflow tepercaya untuk harness dan input
-`ref` untuk kandidat yang sedang diuji. Ini membuat logika validasi baru tetap tersedia
-saat memvalidasi cabang atau tag rilis yang lebih lama.
+Workflow anak menggunakan ref workflow tepercaya untuk harness dan input `ref` untuk kandidat yang diuji. Itu membuat logika validasi baru tetap tersedia saat memvalidasi branch atau tag rilis yang lebih lama.
-Package Acceptance biasanya membangun tarball kandidat dari
-`ref` yang telah di-resolve, termasuk run SHA lengkap yang dikirim dengan `pnpm ci:full-release`. Setelah
-publish, teruskan `package_acceptance_package_spec=openclaw@YYYY.M.D` (atau
-`openclaw@beta`/`openclaw@latest`) untuk menjalankan matriks package/update yang sama terhadap
-package npm yang sudah dikirim sebagai gantinya.
+Secara default, `release_profile=stable` menjalankan lane pemblokir rilis dan melewati soak live/Docker yang menyeluruh. Teruskan `run_release_soak=true` untuk menyertakan lane soak pada run stabil. `release_profile=full` selalu mengaktifkan lane soak sehingga profil advisory yang luas tidak pernah kehilangan cakupan secara diam-diam.
+
+Package Acceptance biasanya membangun tarball kandidat dari `ref` yang telah di-resolve, termasuk run SHA lengkap yang dikirim dengan `pnpm ci:full-release`. Setelah publish, teruskan `package_acceptance_package_spec=openclaw@YYYY.M.D` (atau `openclaw@beta`/`openclaw@latest`) untuk menjalankan matriks package/update yang sama terhadap package npm yang telah dikirim sebagai gantinya.
## Tahap tingkat atas
-| Tahap | Detail |
-| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Resolusi target | **Job:** `Resolve target ref` **Workflow anak:** tidak ada **Membuktikan:** me-resolve cabang rilis, tag, atau SHA commit lengkap dan mencatat input yang dipilih. **Jalankan ulang:** jalankan ulang payung jika ini gagal. |
-| Vitest dan CI normal | **Job:** `Run normal full CI` **Workflow anak:** `CI` **Membuktikan:** grafik CI penuh manual terhadap ref target, termasuk lane Node Linux, shard Plugin terbundel, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, smoke build, pemeriksaan docs, Skills Python, Windows, macOS, i18n Control UI, dan Android melalui payung. **Jalankan ulang:** `rerun_group=ci`. |
-| Pra-rilis Plugin | **Job:** `Run plugin prerelease validation` **Workflow anak:** `Plugin Prerelease` **Membuktikan:** pemeriksaan statis Plugin khusus rilis, cakupan Plugin agentik, shard batch ekstensi penuh, dan lane Docker pra-rilis Plugin. **Jalankan ulang:** `rerun_group=plugin-prerelease`. |
-| Pemeriksaan rilis | **Job:** `Run release/live/Docker/QA validation` **Workflow anak:** `OpenClaw Release Checks` **Membuktikan:** smoke instalasi, pemeriksaan package lintas OS, suite live/E2E, potongan jalur rilis Docker, Package Acceptance, paritas QA Lab, Matrix live, dan Telegram live. **Jalankan ulang:** `rerun_group=release-checks` atau handle release-checks yang lebih sempit. |
-| Artefak package | **Job:** `Prepare release package artifact` **Workflow anak:** tidak ada **Membuktikan:** membuat tarball induk `release-package-under-test` cukup awal untuk pemeriksaan yang menghadap package yang tidak perlu menunggu `OpenClaw Release Checks`. **Jalankan ulang:** jalankan ulang payung atau berikan `npm_telegram_package_spec` untuk `rerun_group=npm-telegram`. |
-| Package Telegram | **Job:** `Run package Telegram E2E` **Workflow anak:** `NPM Telegram Beta E2E` **Membuktikan:** bukti package Telegram yang didukung artefak induk untuk `rerun_group=all` dengan `release_profile=full`, atau bukti Telegram package yang dipublikasikan saat `npm_telegram_package_spec` disetel. **Jalankan ulang:** `rerun_group=npm-telegram` dengan `npm_telegram_package_spec`. |
-| Verifikator payung | **Job:** `Verify full validation` **Workflow anak:** tidak ada **Membuktikan:** memeriksa ulang kesimpulan run anak yang tercatat dan menambahkan tabel job paling lambat dari workflow anak. **Jalankan ulang:** jalankan ulang hanya job ini setelah menjalankan ulang anak yang gagal hingga hijau. |
+| Tahap | Detail |
+| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Resolusi target | **Tugas:** `Resolve target ref` **Workflow anak:** tidak ada **Membuktikan:** me-resolve branch rilis, tag, atau SHA commit lengkap dan mencatat input yang dipilih. **Jalankan ulang:** jalankan ulang payung jika ini gagal. |
+| Vitest dan CI normal | **Tugas:** `Run normal full CI` **Workflow anak:** `CI` **Membuktikan:** grafik CI penuh manual terhadap ref target, termasuk lane Linux Node, shard Plugin bawaan, kontrak channel, kompatibilitas Node 22, `check`, `check-additional`, smoke build, pemeriksaan docs, Skills Python, Windows, macOS, i18n Control UI, dan Android melalui payung. **Jalankan ulang:** `rerun_group=ci`. |
+| Prarilis Plugin | **Tugas:** `Run plugin prerelease validation` **Workflow anak:** `Plugin Prerelease` **Membuktikan:** pemeriksaan statis Plugin khusus rilis, cakupan Plugin agentik, shard batch ekstensi penuh, dan lane Docker prarilis Plugin. **Jalankan ulang:** `rerun_group=plugin-prerelease`. |
+| Pemeriksaan rilis | **Tugas:** `Run release/live/Docker/QA validation` **Workflow anak:** `OpenClaw Release Checks` **Membuktikan:** smoke install, pemeriksaan package lintas OS, Package Acceptance, paritas QA Lab, Matrix live, dan Telegram live. Dengan `run_release_soak=true` atau `release_profile=full`, juga menjalankan suite live/E2E menyeluruh dan chunk jalur rilis Docker. **Jalankan ulang:** `rerun_group=release-checks` atau handle release-checks yang lebih sempit. |
+| Artefak package | **Tugas:** `Prepare release package artifact` **Workflow anak:** tidak ada **Membuktikan:** membuat tarball induk `release-package-under-test` cukup awal untuk pemeriksaan yang menghadap package yang tidak perlu menunggu `OpenClaw Release Checks`. **Jalankan ulang:** jalankan ulang payung atau berikan `npm_telegram_package_spec` untuk `rerun_group=npm-telegram`. |
+| Package Telegram | **Tugas:** `Run package Telegram E2E` **Workflow anak:** `NPM Telegram Beta E2E` **Membuktikan:** bukti package Telegram berbasis artefak induk untuk `rerun_group=all` dengan `release_profile=full`, atau bukti Telegram package yang dipublikasikan saat `npm_telegram_package_spec` disetel. **Jalankan ulang:** `rerun_group=npm-telegram` dengan `npm_telegram_package_spec`. |
+| Verifier payung | **Tugas:** `Verify full validation` **Workflow anak:** tidak ada **Membuktikan:** memeriksa ulang kesimpulan run anak yang dicatat dan menambahkan tabel tugas terlambat dari workflow anak. **Jalankan ulang:** jalankan ulang hanya tugas ini setelah menjalankan ulang anak yang gagal hingga hijau. |
-Untuk `ref=main` dan `rerun_group=all`, payung yang lebih baru menggantikan yang lebih lama.
-Saat induk dibatalkan, monitornya membatalkan workflow anak apa pun yang sudah
-dikirim. Run validasi cabang dan tag rilis tidak saling membatalkan secara
-default.
+Untuk `ref=main` dan `rerun_group=all`, payung yang lebih baru menggantikan yang lebih lama. Saat induk dibatalkan, monitornya membatalkan workflow anak apa pun yang sudah dikirim. Run validasi branch rilis dan tag tidak saling membatalkan secara default.
## Tahap pemeriksaan rilis
-`OpenClaw Release Checks` adalah workflow anak terbesar. Ini me-resolve target
-sekali dan menyiapkan artefak `release-package-under-test` bersama saat tahap yang menghadap package
-atau Docker membutuhkannya.
+`OpenClaw Release Checks` adalah workflow anak terbesar. Ini me-resolve target sekali dan menyiapkan artefak bersama `release-package-under-test` saat tahap yang menghadap package atau Docker membutuhkannya.
-| Tahap | Detail |
-| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Target rilis | **Job:** `Resolve target ref` **Workflow pendukung:** tidak ada **Menguji:** ref yang dipilih, SHA yang diharapkan opsional, profil, grup run ulang, dan filter suite live terfokus. **Jalankan ulang:** `rerun_group=release-checks`. |
-| Artefak package | **Job:** `Prepare release package artifact` **Workflow pendukung:** tidak ada **Menguji:** mengemas atau me-resolve satu tarball kandidat dan mengunggah `release-package-under-test` untuk pemeriksaan downstream yang menghadap package. **Jalankan ulang:** grup package, lintas OS, atau live/E2E yang terdampak. |
-| Smoke instalasi | **Job:** `Run install smoke` **Workflow pendukung:** `Install Smoke` **Menguji:** jalur instalasi penuh dengan penggunaan ulang image smoke Dockerfile root, instalasi package QR, smoke Docker root dan Gateway, pengujian Docker installer, smoke penyedia image instalasi global Bun, dan E2E instalasi/uninstal Plugin terbundel cepat. **Jalankan ulang:** `rerun_group=install-smoke`. |
-| Lintas OS | **Job:** `cross_os_release_checks` **Workflow pendukung:** `OpenClaw Cross-OS Release Checks (Reusable)` **Menguji:** lane fresh dan upgrade di Linux, Windows, dan macOS untuk penyedia dan mode yang dipilih, menggunakan tarball kandidat ditambah package baseline. **Jalankan ulang:** `rerun_group=cross-os`. |
-| Repo dan live E2E | **Job:** `Run repo/live E2E validation` **Workflow pendukung:** `OpenClaw Live And E2E Checks (Reusable)` **Menguji:** E2E repositori, cache live, streaming websocket OpenAI, penyedia live native dan shard Plugin, serta harness model/backend/Gateway live yang didukung Docker dan dipilih oleh `release_profile`. **Jalankan ulang:** `rerun_group=live-e2e`, opsional dengan `live_suite_filter`. |
-| Jalur rilis Docker | **Job:** `Run Docker release-path validation` **Workflow pendukung:** `OpenClaw Live And E2E Checks (Reusable)` **Menguji:** potongan Docker jalur rilis terhadap artefak package bersama. **Jalankan ulang:** `rerun_group=live-e2e`. |
-| Package Acceptance | **Job:** `Run package acceptance` **Workflow pendukung:** `Package Acceptance` **Menguji:** fixture package Plugin offline, update Plugin, penerimaan package Telegram mock-OpenAI, dan pemeriksaan penyintas upgrade-terpublikasi dari setiap rilis npm stabil pada atau setelah `2026.4.23` terhadap tarball yang sama. **Jalankan ulang:** `rerun_group=package`. |
-| Paritas QA | **Job:** `Run QA Lab parity lane` dan `Run QA Lab parity report` **Workflow pendukung:** job langsung **Menguji:** pack paritas agentik kandidat dan baseline, lalu laporan paritas. **Jalankan ulang:** `rerun_group=qa-parity` atau `rerun_group=qa`. |
-| Matrix live QA | **Job:** `Run QA Lab live Matrix lane` **Workflow pendukung:** job langsung **Menguji:** profil QA Matrix live cepat di environment `qa-live-shared`. **Jalankan ulang:** `rerun_group=qa-live` atau `rerun_group=qa`. |
-| Telegram live QA | **Job:** `Run QA Lab live Telegram lane` **Workflow pendukung:** job langsung **Menguji:** QA Telegram live dengan sewa kredensial Convex CI. **Jalankan ulang:** `rerun_group=qa-live` atau `rerun_group=qa`. |
-| Verifikator rilis | **Job:** `Verify release checks` **Workflow pendukung:** tidak ada **Menguji:** job release-check yang diperlukan untuk grup run ulang yang dipilih. **Jalankan ulang:** jalankan ulang setelah job anak terfokus lulus. |
+| Tahap | Detail |
+| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Target rilis | **Pekerjaan:** `Resolve target ref` **Alur kerja pendukung:** tidak ada **Pengujian:** ref yang dipilih, SHA yang diharapkan opsional, profil, grup rerun, dan filter suite live terfokus. **Rerun:** `rerun_group=release-checks`. |
+| Artefak paket | **Pekerjaan:** `Prepare release package artifact` **Alur kerja pendukung:** tidak ada **Pengujian:** mengemas atau menyelesaikan satu kandidat tarball dan mengunggah `release-package-under-test` untuk pemeriksaan hilir yang berhadapan dengan paket. **Rerun:** paket yang terdampak, lintas-OS, atau grup live/E2E. |
+| Smoke instalasi | **Pekerjaan:** `Run install smoke` **Alur kerja pendukung:** `Install Smoke` **Pengujian:** jalur instalasi penuh dengan penggunaan ulang image smoke Dockerfile root, instalasi paket QR, smoke Docker root dan Gateway, pengujian Docker installer, smoke penyedia image instalasi global Bun, dan E2E instalasi/pencopotan Plugin bundel yang cepat. **Rerun:** `rerun_group=install-smoke`. |
+| Lintas-OS | **Pekerjaan:** `cross_os_release_checks` **Alur kerja pendukung:** `OpenClaw Cross-OS Release Checks (Reusable)` **Pengujian:** lane fresh dan upgrade di Linux, Windows, dan macOS untuk penyedia dan mode yang dipilih, menggunakan tarball kandidat plus paket baseline. **Rerun:** `rerun_group=cross-os`. |
+| Repo dan live E2E | **Pekerjaan:** `Run repo/live E2E validation` **Alur kerja pendukung:** `OpenClaw Live And E2E Checks (Reusable)` **Pengujian:** E2E repositori, cache live, streaming websocket OpenAI, shard penyedia dan Plugin live native, serta harness model/backend/Gateway live yang didukung Docker yang dipilih oleh `release_profile`. **Berjalan:** `run_release_soak=true`, `release_profile=full`, atau `rerun_group=live-e2e` terfokus. **Rerun:** `rerun_group=live-e2e`, opsional dengan `live_suite_filter`. |
+| Jalur rilis Docker | **Pekerjaan:** `Run Docker release-path validation` **Alur kerja pendukung:** `OpenClaw Live And E2E Checks (Reusable)` **Pengujian:** chunk Docker jalur rilis terhadap artefak paket bersama. **Berjalan:** `run_release_soak=true`, `release_profile=full`, atau `rerun_group=live-e2e` terfokus. **Rerun:** `rerun_group=live-e2e`. |
+| Penerimaan Paket | **Pekerjaan:** `Run package acceptance` **Alur kerja pendukung:** `Package Acceptance` **Pengujian:** fixture paket Plugin offline, pembaruan Plugin, penerimaan paket Telegram mock-OpenAI, dan pemeriksaan survivor upgrade-terpublikasi terhadap tarball yang sama. Pemeriksaan rilis pemblokir menggunakan baseline terpublikasi terbaru default; pemeriksaan soak diperluas ke setiap rilis npm stabil pada atau setelah `2026.4.23` plus fixture isu yang dilaporkan. **Rerun:** `rerun_group=package`. |
+| Paritas QA | **Pekerjaan:** `Run QA Lab parity lane` dan `Run QA Lab parity report` **Alur kerja pendukung:** pekerjaan langsung **Pengujian:** paket paritas agentic kandidat dan baseline, lalu laporan paritas. **Rerun:** `rerun_group=qa-parity` atau `rerun_group=qa`. |
+| Matrix live QA | **Pekerjaan:** `Run QA Lab live Matrix lane` **Alur kerja pendukung:** pekerjaan langsung **Pengujian:** profil QA Matrix live cepat di lingkungan `qa-live-shared`. **Rerun:** `rerun_group=qa-live` atau `rerun_group=qa`. |
+| Telegram live QA | **Pekerjaan:** `Run QA Lab live Telegram lane` **Alur kerja pendukung:** pekerjaan langsung **Pengujian:** QA Telegram live dengan lease kredensial CI Convex. **Rerun:** `rerun_group=qa-live` atau `rerun_group=qa`. |
+| Verifikator rilis | **Pekerjaan:** `Verify release checks` **Alur kerja pendukung:** tidak ada **Pengujian:** pekerjaan pemeriksaan rilis yang diwajibkan untuk grup rerun yang dipilih. **Rerun:** rerun setelah pekerjaan anak terfokus lulus. |
-## Potongan jalur rilis Docker
+## Chunk jalur rilis Docker
-Tahap jalur rilis Docker menjalankan potongan ini saat `live_suite_filter` kosong:
+Tahap jalur rilis Docker menjalankan chunk ini saat `live_suite_filter`
+kosong:
-| Potongan | Cakupan |
+| Chunk | Cakupan |
| --------------------------------------------------------------- | ----------------------------------------------------------------------- |
-| `core` | Lane smoke jalur rilis Docker inti. |
-| `package-update-openai` | Perilaku instalasi dan update package OpenAI. |
-| `package-update-anthropic` | Perilaku instalasi dan update package Anthropic. |
-| `package-update-core` | Perilaku package dan update yang netral penyedia. |
-| `plugins-runtime-plugins` | Lane runtime Plugin yang melatih perilaku Plugin. |
+| `core` | Lane smoke jalur rilis Docker core. |
+| `package-update-openai` | Perilaku instalasi dan pembaruan paket OpenAI. |
+| `package-update-anthropic` | Perilaku instalasi dan pembaruan paket Anthropic. |
+| `package-update-core` | Perilaku paket dan pembaruan yang netral penyedia. |
+| `plugins-runtime-plugins` | Lane runtime Plugin yang menjalankan perilaku Plugin. |
| `plugins-runtime-services` | Lane runtime Plugin yang didukung layanan; mencakup OpenWebUI saat diminta. |
-| `plugins-runtime-install-a` through `plugins-runtime-install-h` | Batch instalasi/runtime Plugin yang dibagi untuk validasi rilis paralel. |
+| `plugins-runtime-install-a` hingga `plugins-runtime-install-h` | Batch instalasi/runtime Plugin yang dipisah untuk validasi rilis paralel. |
-Gunakan `docker_lanes=` yang ditargetkan pada workflow live/E2E yang dapat digunakan ulang ketika
-hanya satu lane Docker yang gagal. Artefak rilis menyertakan perintah rerun
-per lane dengan input penggunaan ulang artefak paket dan image jika tersedia.
+Gunakan `docker_lanes=` terarah pada alur kerja live/E2E reusable saat
+hanya satu lane Docker yang gagal. Artefak rilis menyertakan perintah rerun per-lane
+dengan input artefak paket dan penggunaan ulang image saat tersedia.
## Profil rilis
-`release_profile` sebagian besar mengontrol cakupan live/provider di dalam pemeriksaan rilis.
-Ini tidak menghapus CI penuh normal, Plugin Prerelease, install smoke, package
-acceptance, QA Lab, atau bagian jalur rilis Docker. `full` juga membuat
-umbrella menjalankan paket Telegram E2E terhadap artefak paket rilis induk ketika
-`rerun_group=all`, sehingga kandidat penuh pra-publikasi tidak diam-diam melewati
-lane paket Telegram tersebut.
+`release_profile` terutama mengontrol keluasan live/penyedia di dalam pemeriksaan rilis.
+Ini tidak menghapus CI penuh normal, Prarilis Plugin, smoke instalasi, penerimaan
+paket, atau QA Lab. Untuk `stable`, E2E repo/live yang menyeluruh dan chunk
+jalur rilis Docker adalah cakupan soak dan berjalan saat `run_release_soak=true`.
+`full` memaksa cakupan soak aktif dan juga membuat run payung menjalankan E2E paket
+Telegram terhadap artefak paket rilis induk saat `rerun_group=all`, sehingga kandidat
+pra-publikasi penuh tidak diam-diam melewati lane paket Telegram tersebut.
-| Profil | Penggunaan yang dituju | Cakupan live/provider yang disertakan |
-| --------- | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `minimum` | Smoke paling cepat yang kritis untuk rilis. | Jalur live OpenAI/core, model live Docker untuk OpenAI, inti Gateway native, profil Gateway OpenAI native, Plugin OpenAI native, dan Gateway OpenAI live Docker. |
-| `stable` | Profil persetujuan rilis default. | `minimum` ditambah smoke Anthropic, Google, MiniMax, backend, harness pengujian live native, backend CLI live Docker, bind ACP Docker, harness Codex Docker, dan shard smoke OpenCode Go. |
-| `full` | Sweep advisory luas. | `stable` ditambah provider advisory, shard live Plugin, dan shard live media. |
+| Profil | Penggunaan yang dimaksudkan | Cakupan live/penyedia yang disertakan |
+| --------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `minimum` | Smoke kritis-rilis tercepat. | Jalur live OpenAI/core, model live Docker untuk OpenAI, core Gateway native, profil Gateway OpenAI native, Plugin OpenAI native, dan Gateway live Docker OpenAI. |
+| `stable` | Profil persetujuan rilis default. | `minimum` plus smoke Anthropic, Google, MiniMax, backend, harness pengujian live native, backend CLI live Docker, bind ACP Docker, harness Codex Docker, dan shard smoke OpenCode Go. |
+| `full` | Sweep advisori luas. | `stable` plus penyedia advisori, shard live Plugin, dan shard live media. |
## Tambahan khusus full
Suite ini dilewati oleh `stable` dan disertakan oleh `full`:
-| Area | Cakupan khusus full |
-| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
-| Model live Docker | OpenCode Go, OpenRouter, xAI, Z.ai, dan Fireworks. |
-| Gateway live Docker | Provider advisory dibagi menjadi shard DeepSeek/Fireworks, OpenCode Go/OpenRouter, dan xAI/Z.ai. |
-| Profil provider Gateway native | Shard Anthropic Opus penuh dan Sonnet/Haiku, Fireworks, DeepSeek, shard model OpenCode Go penuh, OpenRouter, xAI, dan Z.ai. |
-| Shard live Plugin native | Plugin A-K, L-N, O-Z lainnya, Moonshot, dan xAI. |
-| Shard live media native | Audio, musik Google, musik MiniMax, dan grup video A-D. |
+| Area | Cakupan khusus full |
+| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| Model live Docker | OpenCode Go, OpenRouter, xAI, Z.ai, dan Fireworks. |
+| Gateway live Docker | Penyedia advisori dipisah menjadi shard DeepSeek/Fireworks, OpenCode Go/OpenRouter, dan xAI/Z.ai. |
+| Profil penyedia Gateway native | Shard Anthropic Opus dan Sonnet/Haiku penuh, Fireworks, DeepSeek, shard model OpenCode Go penuh, OpenRouter, xAI, dan Z.ai. |
+| Shard live Plugin native | Plugin A-K, L-N, O-Z lainnya, Moonshot, dan xAI. |
+| Shard live media native | Grup audio, Google music, MiniMax music, dan video A-D. |
`stable` menyertakan `native-live-src-gateway-profiles-anthropic-smoke` dan
`native-live-src-gateway-profiles-opencode-go-smoke`; `full` menggunakan shard
@@ -130,49 +120,60 @@ handle agregat `native-live-src-gateway-profiles-anthropic` atau
## Rerun terfokus
-Gunakan `rerun_group` untuk menghindari pengulangan box rilis yang tidak terkait:
+Gunakan `rerun_group` untuk menghindari pengulangan kotak rilis yang tidak terkait:
| Handle | Cakupan |
| ------------------- | --------------------------------------------------------------------- |
-| `all` | Semua tahap Full Release Validation. |
-| `ci` | Hanya child CI penuh manual. |
-| `plugin-prerelease` | Hanya child Plugin Prerelease. |
-| `release-checks` | Semua tahap OpenClaw Release Checks. |
+| `all` | Semua tahap Validasi Rilis Penuh. |
+| `ci` | Hanya turunan CI penuh manual. |
+| `plugin-prerelease` | Hanya turunan prarilis Plugin. |
+| `release-checks` | Semua tahap Pemeriksaan Rilis OpenClaw. |
| `install-smoke` | Install Smoke melalui pemeriksaan rilis. |
| `cross-os` | Pemeriksaan rilis lintas OS. |
| `live-e2e` | Validasi E2E repo/live dan jalur rilis Docker. |
-| `package` | Package Acceptance. |
-| `qa` | Paritas QA ditambah lane live QA. |
-| `qa-parity` | Hanya lane dan laporan paritas QA. |
+| `package` | Penerimaan Paket. |
+| `qa` | Paritas QA plus jalur live QA. |
+| `qa-parity` | Hanya jalur paritas QA dan laporan. |
| `qa-live` | Hanya Matrix dan Telegram live QA. |
| `npm-telegram` | E2E Telegram paket yang dipublikasikan; memerlukan `npm_telegram_package_spec`. |
-Gunakan `live_suite_filter` dengan `rerun_group=live-e2e` ketika satu suite live gagal.
-ID filter yang valid didefinisikan dalam workflow live/E2E yang dapat digunakan ulang, termasuk
+Gunakan `live_suite_filter` dengan `rerun_group=live-e2e` saat satu suite live gagal.
+ID filter yang valid didefinisikan dalam alur kerja live/E2E yang dapat digunakan ulang, termasuk
`docker-live-models`, `live-gateway-docker`,
`live-gateway-anthropic-docker`, `live-gateway-google-docker`,
`live-gateway-minimax-docker`, `live-gateway-advisory-docker`,
`live-cli-backend-docker`, `live-acp-bind-docker`, dan
`live-codex-harness-docker`.
-Handle `live-gateway-advisory-docker` adalah handle rerun agregat untuk
-tiga shard providernya, sehingga masih menyebar ke semua job Gateway Docker advisory.
+Handle `live-gateway-advisory-docker` adalah handle rerun agregat untuk tiga
+shard providernya, jadi handle ini tetap menyebar ke semua pekerjaan Gateway Docker advisory.
+
+Gunakan `cross_os_suite_filter` dengan `rerun_group=cross-os` saat satu jalur lintas OS
+gagal. Filter menerima ID OS, ID suite, atau pasangan OS/suite, misalnya
+`windows/packaged-upgrade`, `windows`, atau `packaged-fresh`. Ringkasan lintas OS
+mencakup waktu per fase untuk jalur peningkatan terpaket, dan perintah yang berjalan lama
+mencetak baris Heartbeat sehingga pembaruan Windows yang macet terlihat sebelum
+batas waktu pekerjaan.
+
+Jalur pemeriksaan rilis QA bersifat advisory. Kegagalan yang hanya terjadi pada QA dilaporkan sebagai peringatan
+dan tidak memblokir pemverifikasi pemeriksaan rilis; jalankan ulang `rerun_group=qa`,
+`qa-parity`, atau `qa-live` saat Anda memerlukan bukti QA yang baru.
## Bukti yang perlu disimpan
-Simpan ringkasan `Full Release Validation` sebagai indeks tingkat rilis. Ringkasan itu menautkan
-ID run child dan menyertakan tabel job paling lambat. Untuk kegagalan, periksa workflow child
-terlebih dahulu, lalu rerun handle terkecil yang cocok di atas.
+Simpan ringkasan `Full Release Validation` sebagai indeks tingkat rilis. Ringkasan ini menautkan
+ID run turunan dan menyertakan tabel pekerjaan paling lambat. Untuk kegagalan, periksa alur kerja
+turunan terlebih dahulu, lalu jalankan ulang handle terkecil yang cocok di atas.
-Artefak berguna:
+Artefak yang berguna:
-- `release-package-under-test` dari parent Full Release Validation dan `OpenClaw Release Checks`
+- `release-package-under-test` dari induk Validasi Rilis Penuh dan `OpenClaw Release Checks`
- Artefak jalur rilis Docker di bawah `.artifacts/docker-tests/`
-- Package Acceptance `package-under-test` dan artefak acceptance Docker
+- Artefak Penerimaan Paket `package-under-test` dan penerimaan Docker
- Artefak pemeriksaan rilis lintas OS untuk setiap OS dan suite
- Artefak paritas QA, Matrix, dan Telegram
-## File workflow
+## File alur kerja
- `.github/workflows/full-release-validation.yml`
- `.github/workflows/openclaw-release-checks.yml`
diff --git a/docs/id/reference/test.md b/docs/id/reference/test.md
index ad6ef17cd..6f6e043a3 100644
--- a/docs/id/reference/test.md
+++ b/docs/id/reference/test.md
@@ -4,60 +4,60 @@ read_when:
summary: Cara menjalankan pengujian secara lokal (vitest) dan kapan menggunakan mode force/coverage
title: Pengujian
x-i18n:
- generated_at: "2026-05-02T21:00:14Z"
+ generated_at: "2026-05-05T01:48:58Z"
model: gpt-5.5
provider: openai
- source_hash: 8a88599d079e1ca42d73d354b582d67dd85be40fc92eed5abe6dcef37dc21f4f
+ source_hash: 7e8421518d63cade24ce8c2a08fa10538b66d2332b1eb5744e47c6d5a5e84605
source_path: reference/test.md
workflow: 16
---
-- Perangkat pengujian lengkap (suite, live, Docker): [Pengujian](/id/help/testing)
-- Validasi pembaruan dan paket Plugin: [Menguji pembaruan dan Plugin](/id/help/testing-updates-plugins)
+- Paket pengujian lengkap (suite, langsung, Docker): [Pengujian](/id/help/testing)
+- Validasi pembaruan dan paket Plugin: [Pengujian pembaruan dan Plugin](/id/help/testing-updates-plugins)
-- `pnpm test:force`: Menghentikan proses gateway tersisa yang menahan port kontrol default, lalu menjalankan suite Vitest penuh dengan port gateway terisolasi agar pengujian server tidak bertabrakan dengan instance yang sedang berjalan. Gunakan ini saat proses gateway sebelumnya membuat port 18789 tetap terpakai.
-- `pnpm test:coverage`: Menjalankan suite unit dengan cakupan V8 (melalui `vitest.unit.config.ts`). Ini adalah gerbang cakupan unit untuk berkas yang dimuat, bukan cakupan seluruh berkas di seluruh repo. Ambangnya adalah 70% untuk baris/fungsi/pernyataan dan 55% untuk cabang. Karena `coverage.all` bernilai false, gerbang ini mengukur berkas yang dimuat oleh suite cakupan unit, bukan menganggap setiap berkas sumber split-lane sebagai tidak tercakup.
-- `pnpm test:coverage:changed`: Menjalankan cakupan unit hanya untuk berkas yang berubah sejak `origin/main`.
-- `pnpm test:changed`: eksekusi pengujian perubahan cerdas yang murah. Ini menjalankan target presisi dari edit pengujian langsung, berkas saudara `*.test.ts`, pemetaan sumber eksplisit, dan grafik impor lokal. Perubahan luas/config/package dilewati kecuali perubahan itu memetakan ke pengujian presisi.
-- `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed`: eksekusi pengujian perubahan luas yang eksplisit. Gunakan ini saat edit harness/config/package pengujian perlu jatuh balik ke perilaku changed-test Vitest yang lebih luas.
+- `pnpm test:force`: Menghentikan proses gateway tersisa yang menahan port kontrol default, lalu menjalankan seluruh suite Vitest dengan port gateway terisolasi agar pengujian server tidak bertabrakan dengan instance yang sedang berjalan. Gunakan ini ketika eksekusi gateway sebelumnya meninggalkan port 18789 dalam keadaan terpakai.
+- `pnpm test:coverage`: Menjalankan suite unit dengan cakupan V8 (melalui `vitest.unit.config.ts`). Ini adalah gate cakupan unit file yang dimuat, bukan cakupan semua file seluruh repo. Ambangnya adalah 70% untuk baris/fungsi/pernyataan dan 55% untuk cabang. Karena `coverage.all` bernilai false, gate ini mengukur file yang dimuat oleh suite cakupan unit, alih-alih memperlakukan setiap file sumber split-lane sebagai tidak tercakup.
+- `pnpm test:coverage:changed`: Menjalankan cakupan unit hanya untuk file yang berubah sejak `origin/main`.
+- `pnpm test:changed`: eksekusi pengujian perubahan cerdas yang murah. Ini menjalankan target presisi dari edit pengujian langsung, file sibling `*.test.ts`, pemetaan sumber eksplisit, dan grafik impor lokal. Perubahan luas/config/package dilewati kecuali dipetakan ke pengujian presisi.
+- `OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed`: eksekusi pengujian perubahan luas eksplisit. Gunakan ini ketika edit test harness/config/package seharusnya fallback ke perilaku changed-test Vitest yang lebih luas.
- `pnpm changed:lanes`: menampilkan lane arsitektural yang dipicu oleh diff terhadap `origin/main`.
-- `pnpm check:changed`: menjalankan gerbang pemeriksaan perubahan cerdas untuk diff terhadap `origin/main`. Ini menjalankan typecheck, lint, dan perintah guard untuk lane arsitektural yang terdampak, tetapi tidak menjalankan pengujian Vitest. Gunakan `pnpm test:changed` atau `pnpm test ` eksplisit untuk bukti pengujian.
-- `pnpm test`: merutekan target berkas/direktori eksplisit melalui lane Vitest berskup. Eksekusi tanpa target memakai grup shard tetap dan diperluas ke config leaf untuk eksekusi paralel lokal; grup ekstensi selalu diperluas ke config shard per ekstensi, bukan satu proses root-project besar.
-- Eksekusi pembungkus pengujian berakhir dengan ringkasan singkat `[test] passed|failed|skipped ... in ...`. Baris durasi milik Vitest tetap menjadi detail per shard.
-- Status pengujian OpenClaw bersama: gunakan `src/test-utils/openclaw-test-state.ts` dari Vitest saat pengujian memerlukan `HOME`, `OPENCLAW_STATE_DIR`, `OPENCLAW_CONFIG_PATH`, fixture config, workspace, direktori agen, atau penyimpanan auth-profile yang terisolasi.
-- Helper E2E proses: gunakan `test/helpers/openclaw-test-instance.ts` saat pengujian E2E level proses Vitest memerlukan Gateway yang berjalan, env CLI, penangkapan log, dan pembersihan di satu tempat.
-- Helper E2E Docker/Bash: lane yang melakukan source `scripts/lib/docker-e2e-image.sh` dapat meneruskan `docker_e2e_test_state_shell_b64